ngx-material-entity 16.0.6 → 16.0.7

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.
@@ -91,10 +91,14 @@ export class ValidationUtilities {
91
91
  case DecoratorTypes.STRING_DROPDOWN:
92
92
  break;
93
93
  case DecoratorTypes.STRING:
94
- case DecoratorTypes.STRING_AUTOCOMPLETE:
95
94
  const entityString = entity[key];
96
95
  const stringMetadata = metadata;
97
96
  return this.getStringValidationError(entityString, stringMetadata);
97
+ case DecoratorTypes.STRING_AUTOCOMPLETE:
98
+ const entityAutocompleteString = entity[key];
99
+ // eslint-disable-next-line max-len
100
+ const stringAutocompleteMetadata = metadata;
101
+ return this.getAutocompleteStringValidationError(entityAutocompleteString, stringAutocompleteMetadata);
98
102
  case DecoratorTypes.STRING_TEXTBOX:
99
103
  const entityTextbox = entity[key];
100
104
  const textboxMetadata = metadata;
@@ -211,6 +215,33 @@ export class ValidationUtilities {
211
215
  }
212
216
  return undefined;
213
217
  }
218
+ static getAutocompleteStringValidationError(value, metadata) {
219
+ if (metadata.maxLength && value.length > metadata.maxLength) {
220
+ return {
221
+ property: metadata.displayName,
222
+ message: `needs to be smaller than ${metadata.maxLength} characters`
223
+ };
224
+ }
225
+ if (metadata.minLength && value.length < metadata.minLength) {
226
+ return {
227
+ property: metadata.displayName,
228
+ message: `needs to be bigger than ${metadata.minLength} characters`
229
+ };
230
+ }
231
+ if (metadata.regex && !value.match(metadata.regex)) {
232
+ return {
233
+ property: metadata.displayName,
234
+ message: 'invalid'
235
+ };
236
+ }
237
+ if (metadata.restrictToOptions == true && !metadata.autocompleteValues.includes(value)) {
238
+ return {
239
+ property: metadata.displayName,
240
+ message: 'Needs to be one of the provided values'
241
+ };
242
+ }
243
+ return undefined;
244
+ }
214
245
  static getTextboxValidationError(value, metadata) {
215
246
  if (metadata.maxLength && value.length > metadata.maxLength) {
216
247
  return {
@@ -457,4 +488,4 @@ function formatDate(date) {
457
488
  date.getFullYear()
458
489
  ].join('/');
459
490
  }
460
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi51dGlsaXRpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy91dGlsaXRpZXMvdmFsaWRhdGlvbi51dGlsaXRpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBV3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQWlCakQ7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLG1CQUFtQjtJQUNyQzs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsYUFBYSxDQUFnRCxNQUFrQixFQUFFLElBQTBCO1FBQzlHLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyx5QkFBeUIsQ0FDNUIsTUFBa0IsRUFDbEIsSUFBMEI7UUFFMUIsTUFBTSxHQUFHLEdBQXNCLEVBQUUsQ0FBQztRQUNsQyxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sRUFBRTtZQUN0QixNQUFNLEdBQUcsR0FBZ0MsSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDNUYsSUFBSSxHQUFHLEVBQUU7Z0JBQ0wsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNqQjtTQUNK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QUErQztBQUMvQyxTQUFTLFlBQVksQ0FBQyxHQUFXO0lBQzdCLE9BQU8sR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUVELCtDQUErQztBQUMvQyxTQUFTLFVBQVUsQ0FBQyxJQUFVO0lBQzFCLE9BQU87UUFDSCxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVCLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxXQUFXLEVBQUU7S0FDckIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRpbWUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQmFzZUVudGl0eVR5cGUgfSBmcm9tICcuLi9jbGFzc2VzL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBFbnRpdHlBcnJheURlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9hcnJheS9hcnJheS1kZWNvcmF0b3ItaW50ZXJuYWwuZGF0YSc7XG5pbXBvcnQgeyBEZWNvcmF0b3JUeXBlcyB9IGZyb20gJy4uL2RlY29yYXRvcnMvYmFzZS9kZWNvcmF0b3ItdHlwZXMuZW51bSc7XG5pbXBvcnQgeyBQcm9wZXJ0eURlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9iYXNlL3Byb3BlcnR5LWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IFRvZ2dsZUJvb2xlYW5EZWNvcmF0b3JDb25maWdJbnRlcm5hbCB9IGZyb20gJy4uL2RlY29yYXRvcnMvYm9vbGVhbi9ib29sZWFuLWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IEN1c3RvbURlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9jdXN0b20vY3VzdG9tLWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IERhdGVSYW5nZURhdGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbCwgRGF0ZVRpbWVEYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwsIERlZmF1bHREYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2RhdGUvZGF0ZS1kZWNvcmF0b3ItaW50ZXJuYWwuZGF0YSc7XG5pbXBvcnQgeyBEYXRlUmFuZ2UgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2RhdGUvZGF0ZS1kZWNvcmF0b3IuZGF0YSc7XG5pbXBvcnQgeyBEZWZhdWx0RmlsZURlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9maWxlL2ZpbGUtZGVjb3JhdG9yLWludGVybmFsLmRhdGEnO1xuaW1wb3J0IHsgRmlsZURhdGEgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2ZpbGUvZmlsZS1kZWNvcmF0b3IuZGF0YSc7XG5pbXBvcnQgeyBEZWZhdWx0TnVtYmVyRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgfSBmcm9tICcuLi9kZWNvcmF0b3JzL251bWJlci9udW1iZXItZGVjb3JhdG9yLWludGVybmFsLmRhdGEnO1xuaW1wb3J0IHsgRGVmYXVsdE9iamVjdERlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9vYmplY3Qvb2JqZWN0LWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IERlZmF1bHRTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCwgUGFzc3dvcmRTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCwgVGV4dGJveFN0cmluZ0RlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9zdHJpbmcvc3RyaW5nLWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IExvZGFzaFV0aWxpdGllcyB9IGZyb20gJy4uL2VuY2Fwc3VsYXRpb24vbG9kYXNoLnV0aWxpdGllcyc7XG5pbXBvcnQgeyBSZWZsZWN0VXRpbGl0aWVzIH0gZnJvbSAnLi4vZW5jYXBzdWxhdGlvbi9yZWZsZWN0LnV0aWxpdGllcyc7XG5pbXBvcnQgeyBEYXRlVXRpbGl0aWVzIH0gZnJvbSAnLi9kYXRlLnV0aWxpdGllcyc7XG5pbXBvcnQgeyBFbnRpdHlVdGlsaXRpZXMgfSBmcm9tICcuL2VudGl0eS51dGlsaXRpZXMnO1xuaW1wb3J0IHsgRmlsZVV0aWxpdGllcyB9IGZyb20gJy4vZmlsZS51dGlsaXRpZXMnO1xuXG4vKipcbiAqIEEgdmFsaWRhdGlvbiBlcnJvciByZXBvcnRlZCBieSB0aGUgdmFsaWRhdGlvbiB1dGlsaXRpZXMuXG4gKiBDb25zaXN0cyBvZiB0aGUgcHJvcGVydHkgbmFtZSB3aGVyZSB0aGUgZXJyb3Igb3JpZ2luYXRlZCBmcm9tIGFuZCBhIG1lc3NhZ2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGlvbkVycm9yIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcHJvcGVydHkgbmFtZSBvbiB3aGljaCB0aGUgZXJyb3Igb2NjdXJyZWQuIFRoaXMgaXMgdGhlIGRpc3BsYXlOYW1lIHZhbHVlLlxuICAgICAqL1xuICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgLyoqXG4gICAgICogVGhlIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZS5cbiAgICAgKi9cbiAgICBtZXNzYWdlOiBzdHJpbmdcbn1cblxuLyoqXG4gKiBDb250YWlucyBIZWxwZXJNZXRob2RzIGFyb3VuZCBoYW5kbGluZyBWYWxpZGF0aW9uIG9mIGVudGl0aWVzIGFuZCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVmFsaWRhdGlvblV0aWxpdGllcyB7XG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoZSB2YWx1ZXMgb24gYW4gZW50aXR5IGFyZSB2YWxpZC5cbiAgICAgKiBBbHNvIGNoZWNrcyBhbGwgdGhlIHZhbGlkYXRvcnMgZ2l2ZW4gYnkgdGhlIG1ldGFkYXRhIChcInJlcXVpcmVkXCIsIFwibWF4TGVuZ3RoXCIgZXRjLikuXG4gICAgICogQHBhcmFtIGVudGl0eSAtIFRoZSBlbnRpdHkgdG8gdmFsaWRhdGUuXG4gICAgICogQHBhcmFtIG9taXQgLSBXaGV0aGVyIHRvIGNoZWNrIGZvciBjcmVhdGluZyBvciBlZGl0aW5nIHZhbGlkaXR5LlxuICAgICAqIEByZXR1cm5zIFdoZXRoZXIgb3Igbm90IHRoZSBlbnRpdHkgaXMgdmFsaWQuXG4gICAgICovXG4gICAgc3RhdGljIGlzRW50aXR5VmFsaWQ8RW50aXR5VHlwZSBleHRlbmRzIEJhc2VFbnRpdHlUeXBlPEVudGl0eVR5cGU+PihlbnRpdHk6IEVudGl0eVR5cGUsIG9taXQ/OiAnY3JlYXRlJyB8ICd1cGRhdGUnKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEVudGl0eVZhbGlkYXRpb25FcnJvcnMoZW50aXR5LCBvbWl0KS5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbGwgdmFsaWRhdGlvbiBlcnJvcnMgb24gdGhlIGdpdmVuIGVudGl0eS5cbiAgICAgKiBAcGFyYW0gZW50aXR5IC0gVGhlIGVudGl0eSB0byB2YWxpZGF0ZS5cbiAgICAgKiBAcGFyYW0gb21pdCAtIFdoYXQga2V5cyBub3QgdG8gY2hlY2suIEFuIGVtcHR5IHZhbHVlIG1lYW5zIG5vIGtleXMgYXJlIG9taXR0ZWQuXG4gICAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvcnMgb24gdGhlIHByb3ZpZGVkIGVudGl0eS5cbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0RW50aXR5VmFsaWRhdGlvbkVycm9yczxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+KFxuICAgICAgICBlbnRpdHk6IEVudGl0eVR5cGUsXG4gICAgICAgIG9taXQ/OiAnY3JlYXRlJyB8ICd1cGRhdGUnXG4gICAgKTogVmFsaWRhdGlvbkVycm9yW10ge1xuICAgICAgICBjb25zdCByZXM6IFZhbGlkYXRpb25FcnJvcltdID0gW107XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGVudGl0eSkge1xuICAgICAgICAgICAgY29uc3QgZXJyOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQgPSB0aGlzLmdldFByb3BlcnR5VmFsaWRhdGlvbkVycm9yKGVudGl0eSwga2V5LCBvbWl0KTtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXMucHVzaChlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgLy8gLyoqXG4gICAgLy8gICogQ2hlY2tzIGlmIGEgc2luZ2xlIHByb3BlcnR5IHZhbHVlIGlzIHZhbGlkLlxuICAgIC8vICAqXG4gICAgLy8gICogQHBhcmFtIGVudGl0eSAtIFRoZSBlbnRpdHkgd2hlcmUgdGhlIHByb3BlcnR5IGlzIGZyb20uXG4gICAgLy8gICogQHBhcmFtIGtleSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eS5cbiAgICAvLyAgKiBAcGFyYW0gb21pdCAtIFdoZXRoZXIgdG8gY2hlY2sgaWYgdGhlIGdpdmVuIGVudGl0eSBpcyB2YWxpZCBmb3IgY3JlYXRpb24gb3IgdXBkYXRpbmcuXG4gICAgLy8gICogQHJldHVybnMgV2hldGhlciBvciBub3QgdGhlIHByb3BlcnR5IHZhbHVlIGlzIHZhbGlkLlxuICAgIC8vICAqIEB0aHJvd3MgVGhyb3dzIHdoZW4gaXQgZXh0cmFjdHMgYW4gdW5rbm93biBtZXRhZGF0YSB0eXBlLlxuICAgIC8vICAqL1xuICAgIC8vIHN0YXRpYyBpc1Byb3BlcnR5VmFsaWQ8RW50aXR5VHlwZSBleHRlbmRzIEJhc2VFbnRpdHlUeXBlPEVudGl0eVR5cGU+PihcbiAgICAvLyAgICAgZW50aXR5OiBFbnRpdHlUeXBlLFxuICAgIC8vICAgICBrZXk6IGtleW9mIEVudGl0eVR5cGUsXG4gICAgLy8gICAgIG9taXQ/OiAnY3JlYXRlJyB8ICd1cGRhdGUnXG4gICAgLy8gKTogYm9vbGVhbiB7XG4gICAgLy8gICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsaWRhdGlvbkVycm9yKGVudGl0eSwga2V5LCBvbWl0KSA9PSBudWxsO1xuICAgIC8vIH1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlcyB0aGUgcHJvcGVydHkgb24gdGhlIGdpdmVuIGVudGl0eSB3aXRoIHRoZSBnaXZlbiBrZXkuXG4gICAgICogQHBhcmFtIGVudGl0eSAtIFRoZSBlbnRpdHkgb24gd2hpY2ggdGhlIHByb3BlcnR5IHRvIGNoZWNrIGlzLlxuICAgICAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byB2YWxpZGF0ZS5cbiAgICAgKiBAcGFyYW0gb21pdCAtIFdoYXQga2V5cyBub3QgdG8gY2hlY2suIEFuIGVtcHR5IHZhbHVlIG1lYW5zIG5vIGtleXMgYXJlIG9taXR0ZWQuXG4gICAgICogQHJldHVybnMgQSB2YWxpZGF0aW9uIGVycm9yIHdoZW4gdGhlIHByb3BlcnR5IGlzIG5vdCB2YWxpZCwgdW5kZWZpbmVkIG90aGVyd2lzZS5cbiAgICAgKiBAdGhyb3dzIFdoZW4gdGhlIHR5cGUgb2YgdGhlIHByb3BlcnR5IGlzIG5vdCBrbm93bi5cbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0UHJvcGVydHlWYWxpZGF0aW9uRXJyb3I8RW50aXR5VHlwZSBleHRlbmRzIEJhc2VFbnRpdHlUeXBlPEVudGl0eVR5cGU+PihcbiAgICAgICAgZW50aXR5OiBFbnRpdHlUeXBlLFxuICAgICAgICBrZXk6IGtleW9mIEVudGl0eVR5cGUsXG4gICAgICAgIG9taXQ/OiAnY3JlYXRlJyB8ICd1cGRhdGUnXG4gICAgKTogVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgdHlwZTogRGVjb3JhdG9yVHlwZXMgPSBFbnRpdHlVdGlsaXRpZXMuZ2V0UHJvcGVydHlUeXBlKGVudGl0eSwga2V5KTtcbiAgICAgICAgY29uc3QgbWV0YWRhdGE6IFByb3BlcnR5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8dW5rbm93bj4gPSBFbnRpdHlVdGlsaXRpZXMuZ2V0UHJvcGVydHlNZXRhZGF0YShlbnRpdHksIGtleSwgdHlwZSk7XG5cbiAgICAgICAgaWYgKG1ldGFkYXRhLm9taXRGb3JDcmVhdGUgJiYgb21pdCA9PT0gJ2NyZWF0ZScpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLm9taXRGb3JVcGRhdGUgJiYgb21pdCA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLnJlcXVpcmVkKGVudGl0eSkgJiYgdHlwZSAhPT0gRGVjb3JhdG9yVHlwZXMuSEFTX01BTlkpIHtcbiAgICAgICAgICAgIGlmIChlbnRpdHlba2V5XSA9PSBudWxsIHx8IGVudGl0eVtrZXldID09PSAnJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ3JlcXVpcmVkJ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtZXRhZGF0YS5yZXF1aXJlZChlbnRpdHkpKSB7XG4gICAgICAgICAgICBpZiAoZW50aXR5W2tleV0gPT0gbnVsbCB8fCBlbnRpdHlba2V5XSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5CT09MRUFOX0RST1BET1dOOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5CT09MRUFOX0NIRUNLQk9YOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5CT09MRUFOX1RPR0dMRTpcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlCb29sZWFuOiBib29sZWFuID0gZW50aXR5W2tleV0gYXMgYm9vbGVhbjtcbiAgICAgICAgICAgICAgICBjb25zdCBib29sZWFuTWV0YWRhdGE6IFRvZ2dsZUJvb2xlYW5EZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIFRvZ2dsZUJvb2xlYW5EZWNvcmF0b3JDb25maWdJbnRlcm5hbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRCb29sZWFuVmFsaWRhdGlvbkVycm9yKGVudGl0eSwgZW50aXR5Qm9vbGVhbiwgYm9vbGVhbk1ldGFkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuU1RSSU5HX0RST1BET1dOOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5TVFJJTkc6XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLlNUUklOR19BVVRPQ09NUExFVEU6XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5U3RyaW5nOiBzdHJpbmcgPSBlbnRpdHlba2V5XSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nTWV0YWRhdGE6IERlZmF1bHRTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIERlZmF1bHRTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdWYWxpZGF0aW9uRXJyb3IoZW50aXR5U3RyaW5nLCBzdHJpbmdNZXRhZGF0YSk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLlNUUklOR19URVhUQk9YOlxuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eVRleHRib3g6IHN0cmluZyA9IGVudGl0eVtrZXldIGFzIHN0cmluZztcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0Ym94TWV0YWRhdGE6IFRleHRib3hTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIFRleHRib3hTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUZXh0Ym94VmFsaWRhdGlvbkVycm9yKGVudGl0eVRleHRib3gsIHRleHRib3hNZXRhZGF0YSk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLlNUUklOR19QQVNTV09SRDpcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlQYXNzd29yZDogc3RyaW5nID0gZW50aXR5W2tleV0gYXMgc3RyaW5nO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhc3N3b3JkTWV0YWRhdGE6IFBhc3N3b3JkU3RyaW5nRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgPSBtZXRhZGF0YSBhcyBQYXNzd29yZFN0cmluZ0RlY29yYXRvckNvbmZpZ0ludGVybmFsO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpcm1QYXNzd29yZDogc3RyaW5nID0gUmVmbGVjdFV0aWxpdGllcy5nZXRNZXRhZGF0YShFbnRpdHlVdGlsaXRpZXMuQ09ORklSTV9QQVNTV09SRF9LRVksIGVudGl0eSwga2V5KSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFzc3dvcmRWYWxpZGF0aW9uRXJyb3IoZW50aXR5UGFzc3dvcmQsIHBhc3N3b3JkTWV0YWRhdGEsIGNvbmZpcm1QYXNzd29yZCk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLk5VTUJFUl9EUk9QRE9XTjpcbiAgICAgICAgICAgICAgICAvLyBCZWNhdXNlIG9ubHkgdmFsaWQgdmFsdWVzIGNhbiBiZSBzZWxlY3RlZCwgdGhpcyBpcyBhbHdheXMgdHJ1ZSB3aGVuIGl0IGhhcyBhIHZhbHVlXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuTlVNQkVSOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5OVU1CRVJfU0xJREVSOlxuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eU51bWJlcjogbnVtYmVyID0gZW50aXR5W2tleV0gYXMgbnVtYmVyO1xuICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlck1ldGFkYXRhOiBEZWZhdWx0TnVtYmVyRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgPSBtZXRhZGF0YSBhcyBEZWZhdWx0TnVtYmVyRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyVmFsaWRhdGlvbkVycm9yKGVudGl0eU51bWJlciwgbnVtYmVyTWV0YWRhdGEpO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5PQkpFQ1Q6XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5T2JqZWN0OiBFbnRpdHlUeXBlID0gZW50aXR5W2tleV0gYXMgRW50aXR5VHlwZTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhcmFtZXRlcktleSBpbiBlbnRpdHlPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWU6IHVua25vd24gPSBlbnRpdHlPYmplY3RbcGFyYW1ldGVyS2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgIShtZXRhZGF0YSBhcyBEZWZhdWx0T2JqZWN0RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8RW50aXR5VHlwZT4pLm9taXQuaW5jbHVkZXMocGFyYW1ldGVyS2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgISghbWV0YWRhdGEucmVxdWlyZWQoZW50aXR5KSAmJiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PSAnJykpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQgPSB0aGlzLmdldFByb3BlcnR5VmFsaWRhdGlvbkVycm9yKGVudGl0eU9iamVjdCwgcGFyYW1ldGVyS2V5LCBvbWl0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGAke2Vyci5wcm9wZXJ0eX0gaXMgaW52YWxpZDogJHtlcnIubWVzc2FnZX1gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuQVJSQVlfU1RSSU5HX0NISVBTOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5BUlJBWV9TVFJJTkdfQVVUT0NPTVBMRVRFX0NISVBTOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5BUlJBWV9EQVRFOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5BUlJBWV9EQVRFX1RJTUU6XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkFSUkFZX0RBVEVfUkFOR0U6XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkFSUkFZOlxuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eUFycmF5OiB1bmtub3duW10gPSBlbnRpdHlba2V5XSBhcyB1bmtub3duW107XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICAgICAgICAgICBjb25zdCBhcnJheU1ldGFkYXRhOiBFbnRpdHlBcnJheURlY29yYXRvckNvbmZpZ0ludGVybmFsPEVudGl0eVR5cGU+ID0gbWV0YWRhdGEgYXMgRW50aXR5QXJyYXlEZWNvcmF0b3JDb25maWdJbnRlcm5hbDxFbnRpdHlUeXBlPjtcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlNZXRhZGF0YS5yZXF1aXJlZChlbnRpdHkpICYmICFlbnRpdHlBcnJheS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdubyBpdGVtcyBpbiBhcnJheSdcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkRBVEU6XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5RGF0ZTogRGF0ZSA9IG5ldyBEYXRlKGVudGl0eVtrZXldIGFzIERhdGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVNZXRhZGF0YTogRGVmYXVsdERhdGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIERlZmF1bHREYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0ZVZhbGlkYXRpb25FcnJvcihlbnRpdHlEYXRlLCBkYXRlTWV0YWRhdGEpO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5EQVRFX1JBTkdFOlxuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eURhdGVSYW5nZTogRGF0ZVJhbmdlID0gTG9kYXNoVXRpbGl0aWVzLmNsb25lRGVlcChlbnRpdHlba2V5XSBhcyBEYXRlUmFuZ2UpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVSYW5nZU1ldGFkYXRhOiBEYXRlUmFuZ2VEYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgPSBtZXRhZGF0YSBhcyBEYXRlUmFuZ2VEYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0ZVJhbmdlVmFsaWRhdGlvbkVycm9yKGVudGl0eSwgZW50aXR5RGF0ZVJhbmdlLCBkYXRlUmFuZ2VNZXRhZGF0YSk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkRBVEVfVElNRTpcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlEYXRlVGltZTogRGF0ZSA9IG5ldyBEYXRlKGVudGl0eVtrZXldIGFzIERhdGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVUaW1lTWV0YWRhdGE6IERhdGVUaW1lRGF0ZURlY29yYXRvckNvbmZpZ0ludGVybmFsID0gbWV0YWRhdGEgYXMgRGF0ZVRpbWVEYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFzVGltZTogYm9vbGVhbiA9IFJlZmxlY3RVdGlsaXRpZXMuaGFzTWV0YWRhdGEoRW50aXR5VXRpbGl0aWVzLlRJTUVfS0VZLCBlbnRpdHksIGtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0ZVRpbWVWYWxpZGF0aW9uRXJyb3IoZW50aXR5RGF0ZVRpbWUsIGRhdGVUaW1lTWV0YWRhdGEsIGhhc1RpbWUpO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5GSUxFX0RFRkFVTFQ6XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkZJTEVfSU1BR0U6XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5RmlsZTogRmlsZURhdGEgfCBGaWxlRGF0YVtdID0gZW50aXR5W2tleV0gYXMgRmlsZURhdGEgfCBGaWxlRGF0YVtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eUZpbGVNZXRhZGF0YTogRGVmYXVsdEZpbGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIERlZmF1bHRGaWxlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RmlsZURhdGFWYWxpZGF0aW9uRXJyb3IoZW50aXR5RmlsZSwgZW50aXR5RmlsZU1ldGFkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuUkVGRVJFTkNFU19NQU5ZOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5SRUZFUkVOQ0VTX09ORTpcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuSEFTX01BTlk6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkNVU1RPTTpcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdHlwZXNjcmlwdC9uby1leHBsaWNpdC1hbnksIG1heC1sZW5cbiAgICAgICAgICAgICAgICBjb25zdCBjdXN0b21NZXRhZGF0YTogQ3VzdG9tRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8RW50aXR5VHlwZSwgYW55LCBhbnksIGFueT4gPSBtZXRhZGF0YSBhcyBDdXN0b21EZWNvcmF0b3JDb25maWdJbnRlcm5hbDxFbnRpdHlUeXBlLCBhbnksIGFueSwgYW55PjtcbiAgICAgICAgICAgICAgICBpZiAoIWN1c3RvbU1ldGFkYXRhLmlzVmFsaWQoZW50aXR5W2tleV0sIG9taXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCdcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IHZhbGlkYXRlIHRoZSBpbnB1dCBiZWNhdXNlIHRoZSBEZWNvcmF0b3JUeXBlICR7dHlwZX0gaXMgbm90IGtub3duYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRCb29sZWFuVmFsaWRhdGlvbkVycm9yPEVudGl0eVR5cGUgZXh0ZW5kcyBCYXNlRW50aXR5VHlwZTxFbnRpdHlUeXBlPj4oXG4gICAgICAgIGVudGl0eTogRW50aXR5VHlwZSxcbiAgICAgICAgdmFsdWU6IGJvb2xlYW4sXG4gICAgICAgIG1ldGFkYXRhOiBUb2dnbGVCb29sZWFuRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWxcbiAgICApOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAobWV0YWRhdGEucmVxdWlyZWQoZW50aXR5KSAmJiAhdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdub3Qgc2VsZWN0ZWQnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0U3RyaW5nVmFsaWRhdGlvbkVycm9yKHZhbHVlOiBzdHJpbmcsIG1ldGFkYXRhOiBEZWZhdWx0U3RyaW5nRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwpOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAobWV0YWRhdGEubWF4TGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA+IG1ldGFkYXRhLm1heExlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYG5lZWRzIHRvIGJlIHNtYWxsZXIgdGhhbiAke21ldGFkYXRhLm1heExlbmd0aH0gY2hhcmFjdGVyc2BcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLm1pbkxlbmd0aCAmJiB2YWx1ZS5sZW5ndGggPCBtZXRhZGF0YS5taW5MZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBuZWVkcyB0byBiZSBiaWdnZXIgdGhhbiAke21ldGFkYXRhLm1pbkxlbmd0aH0gY2hhcmFjdGVyc2BcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLnJlZ2V4ICYmICF2YWx1ZS5tYXRjaChtZXRhZGF0YS5yZWdleCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldFRleHRib3hWYWxpZGF0aW9uRXJyb3IodmFsdWU6IHN0cmluZywgbWV0YWRhdGE6IFRleHRib3hTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCk6IFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChtZXRhZGF0YS5tYXhMZW5ndGggJiYgdmFsdWUubGVuZ3RoID4gbWV0YWRhdGEubWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgbmVlZHMgdG8gYmUgc21hbGxlciB0aGFuICR7bWV0YWRhdGEubWF4TGVuZ3RofSBjaGFyYWN0ZXJzYFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEubWluTGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA8IG1ldGFkYXRhLm1pbkxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYG5lZWRzIHRvIGJlIGJpZ2dlciB0aGFuICR7bWV0YWRhdGEubWluTGVuZ3RofSBjaGFyYWN0ZXJzYFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldFBhc3N3b3JkVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICB2YWx1ZTogc3RyaW5nLFxuICAgICAgICBtZXRhZGF0YTogUGFzc3dvcmRTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCxcbiAgICAgICAgY29uZmlybVBhc3N3b3JkOiBzdHJpbmdcbiAgICApOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAodmFsdWUgIT09IGNvbmZpcm1QYXNzd29yZCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ3Bhc3N3b3JkcyBuZWVkIHRvIG1hdGNoJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEubWF4TGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA+IG1ldGFkYXRhLm1heExlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYG5lZWRzIHRvIGJlIHNtYWxsZXIgdGhhbiAke21ldGFkYXRhLm1heExlbmd0aH0gY2hhcmFjdGVyc2BcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLm1pbkxlbmd0aCAmJiB2YWx1ZS5sZW5ndGggPCBtZXRhZGF0YS5taW5MZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBuZWVkcyB0byBiZSBiaWdnZXIgdGhhbiAke21ldGFkYXRhLm1pbkxlbmd0aH0gY2hhcmFjdGVyc2BcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLnJlZ2V4ICYmICF2YWx1ZS5tYXRjaChtZXRhZGF0YS5yZWdleCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldE51bWJlclZhbGlkYXRpb25FcnJvcih2YWx1ZTogbnVtYmVyLCBtZXRhZGF0YTogRGVmYXVsdE51bWJlckRlY29yYXRvckNvbmZpZ0ludGVybmFsKTogVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKG1ldGFkYXRhLm1heCAmJiB2YWx1ZSA+IG1ldGFkYXRhLm1heCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYG5lZWRzIHRvIGJlIHNtYWxsZXIgdGhhbiAke21ldGFkYXRhLm1heH1gXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5taW4gJiYgdmFsdWUgPCBtZXRhZGF0YS5taW4pIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBuZWVkcyB0byBiZSBiaWdnZXIgdGhhbiAke21ldGFkYXRhLm1pbn1gXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0RGF0ZVZhbGlkYXRpb25FcnJvcih2YWx1ZTogRGF0ZSwgbWV0YWRhdGE6IERlZmF1bHREYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwpOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAobWV0YWRhdGEubWluICYmIHZhbHVlLmdldFRpbWUoKSA8IG1ldGFkYXRhLm1pbih2YWx1ZSkuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgbmVlZHMgdG8gYmUgYWZ0ZXIgJHtmb3JtYXREYXRlKG1ldGFkYXRhLm1pbih2YWx1ZSkpfWBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLm1heCAmJiB2YWx1ZS5nZXRUaW1lKCkgPiBtZXRhZGF0YS5tYXgodmFsdWUpLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYG5lZWRzIHRvIGJlIGJlZm9yZSAke2Zvcm1hdERhdGUobWV0YWRhdGEubWF4KHZhbHVlKSl9YFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEuZmlsdGVyICYmICFtZXRhZGF0YS5maWx0ZXIodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCdcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXREYXRlUmFuZ2VWYWxpZGF0aW9uRXJyb3I8RW50aXR5VHlwZSBleHRlbmRzIEJhc2VFbnRpdHlUeXBlPEVudGl0eVR5cGU+PihcbiAgICAgICAgZW50aXR5OiBFbnRpdHlUeXBlLFxuICAgICAgICB2YWx1ZTogUGFydGlhbDxEYXRlUmFuZ2U+LFxuICAgICAgICBtZXRhZGF0YTogRGF0ZVJhbmdlRGF0ZURlY29yYXRvckNvbmZpZ0ludGVybmFsXG4gICAgKTogVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKG1ldGFkYXRhLnJlcXVpcmVkKGVudGl0eSkpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5zdGFydCA9PSBudWxsIHx8IHZhbHVlLmVuZCA9PSBudWxsIHx8IHZhbHVlLnZhbHVlcyA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAncmVxdWlyZWQnXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUuc3RhcnQpIHtcbiAgICAgICAgICAgIHZhbHVlLnN0YXJ0ID0gbmV3IERhdGUodmFsdWUuc3RhcnQpO1xuICAgICAgICAgICAgaWYgKG1ldGFkYXRhLm1pblN0YXJ0ICYmIHZhbHVlLnN0YXJ0LmdldFRpbWUoKSA8IG1ldGFkYXRhLm1pblN0YXJ0KHZhbHVlLnN0YXJ0KS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBzdGFydCBkYXRlIG5lZWRzIHRvIGJlIGFmdGVyICR7Zm9ybWF0RGF0ZShtZXRhZGF0YS5taW5TdGFydCh2YWx1ZS5zdGFydCkpfWBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1ldGFkYXRhLm1heFN0YXJ0ICYmIHZhbHVlLnN0YXJ0LmdldFRpbWUoKSA+IG1ldGFkYXRhLm1heFN0YXJ0KHZhbHVlLnN0YXJ0KS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBzdGFydCBkYXRlIG5lZWRzIHRvIGJlIGJlZm9yZSAke2Zvcm1hdERhdGUobWV0YWRhdGEubWF4U3RhcnQodmFsdWUuc3RhcnQpKX1gXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXRhZGF0YS5maWx0ZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW1ldGFkYXRhLmZpbHRlcih2YWx1ZS5zdGFydCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdzdGFydCBkYXRlIGludmFsaWQnXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlLmVuZCkge1xuICAgICAgICAgICAgdmFsdWUuZW5kID0gbmV3IERhdGUodmFsdWUuZW5kKTtcbiAgICAgICAgICAgIGlmIChtZXRhZGF0YS5taW5FbmQgJiYgdmFsdWUuZW5kLmdldFRpbWUoKSA8IG1ldGFkYXRhLm1pbkVuZCh2YWx1ZS5lbmQpLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYGVuZCBkYXRlIG5lZWRzIHRvIGJlIGFmdGVyICR7Zm9ybWF0RGF0ZShtZXRhZGF0YS5taW5FbmQodmFsdWUuZW5kKSl9YFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWV0YWRhdGEubWF4RW5kICYmIHZhbHVlLmVuZC5nZXRUaW1lKCkgPiBtZXRhZGF0YS5tYXhFbmQodmFsdWUuZW5kKS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBlbmQgZGF0ZSBuZWVkcyB0byBiZSBiZWZvcmUgJHtmb3JtYXREYXRlKG1ldGFkYXRhLm1heEVuZCh2YWx1ZS5lbmQpKX1gXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXRhZGF0YS5maWx0ZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW1ldGFkYXRhLmZpbHRlcih2YWx1ZS5lbmQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnZW5kIGRhdGUgaW52YWxpZCdcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuXG4gICAgICAgIGlmIChtZXRhZGF0YS5maWx0ZXIgJiYgdmFsdWUudmFsdWVzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRhdGUgb2YgdmFsdWUudmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFtZXRhZGF0YS5maWx0ZXIoZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGB2YWx1ZSAke2Zvcm1hdERhdGUoZGF0ZSl9IGludmFsaWRgXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0RGF0ZVRpbWVWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIHZhbHVlOiBEYXRlLFxuICAgICAgICBtZXRhZGF0YTogRGF0ZVRpbWVEYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwsXG4gICAgICAgIGhhc1RpbWU6IGJvb2xlYW5cbiAgICApOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIWhhc1RpbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdubyB0aW1lJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEubWluRGF0ZSAmJiB2YWx1ZS5nZXRUaW1lKCkgPCBtZXRhZGF0YS5taW5EYXRlKHZhbHVlKS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBkYXRlIG5lZWRzIHRvIGJlIGFmdGVyICR7Zm9ybWF0RGF0ZShtZXRhZGF0YS5taW5EYXRlKHZhbHVlKSl9YFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEubWF4RGF0ZSAmJiB2YWx1ZS5nZXRUaW1lKCkgPiBtZXRhZGF0YS5tYXhEYXRlKHZhbHVlKS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBkYXRlIG5lZWRzIHRvIGJlIGJlZm9yZSAke2Zvcm1hdERhdGUobWV0YWRhdGEubWF4RGF0ZSh2YWx1ZSkpfWBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLmZpbHRlckRhdGUgJiYgIW1ldGFkYXRhLmZpbHRlckRhdGUodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCBkYXRlJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0aW1lOiBUaW1lID0gRGF0ZVV0aWxpdGllcy5nZXRUaW1lRnJvbURhdGUodmFsdWUpIGFzIFRpbWU7XG4gICAgICAgIGlmIChtZXRhZGF0YS5taW5UaW1lKSB7XG4gICAgICAgICAgICBjb25zdCBtaW5UaW1lOiBUaW1lID0gbWV0YWRhdGEubWluVGltZSh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgdGltZS5ob3VycyA+IG1pblRpbWUuaG91cnNcbiAgICAgICAgICAgICAgICAgICAgfHwgKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZS5ob3VycyA9PT0gbWluVGltZS5ob3Vyc1xuICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGltZS5taW51dGVzID49IG1pblRpbWUubWludXRlc1xuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgdGltZSBuZWVkcyB0byBiZSBhZnRlciAke21pblRpbWUuaG91cnN9OiR7bWluVGltZS5taW51dGVzfWBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5tYXhUaW1lKSB7XG4gICAgICAgICAgICBjb25zdCBtYXhUaW1lOiBUaW1lID0gbWV0YWRhdGEubWF4VGltZSh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgdGltZS5ob3VycyA8IG1heFRpbWUuaG91cnNcbiAgICAgICAgICAgICAgICAgICAgfHwgKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZS5ob3VycyA9PT0gbWF4VGltZS5ob3Vyc1xuICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGltZS5taW51dGVzIDw9IG1heFRpbWUubWludXRlc1xuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgdGltZSBuZWVkcyB0byBiZSBiZWZvcmUgJHttYXhUaW1lLmhvdXJzfToke21heFRpbWUubWludXRlc31gXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEuZmlsdGVyVGltZSAmJiAhbWV0YWRhdGEuZmlsdGVyVGltZSh0aW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ2ludmFsaWQgdGltZSdcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRGaWxlRGF0YVZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgdmFsdWU6IEZpbGVEYXRhIHwgRmlsZURhdGFbXSxcbiAgICAgICAgbWV0YWRhdGE6IERlZmF1bHRGaWxlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWxcbiAgICApOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBmaWxlczogRmlsZURhdGFbXSA9IG1ldGFkYXRhLm11bHRpcGxlID8gdmFsdWUgYXMgRmlsZURhdGFbXSA6IFt2YWx1ZSBhcyBGaWxlRGF0YV07XG4gICAgICAgIGxldCBmaWxlU2l6ZVRvdGFsOiBudW1iZXIgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgICAgIGlmICghZmlsZS5uYW1lIHx8ICFmaWxlLmZpbGUgJiYgIWZpbGUudXJsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCdcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFGaWxlVXRpbGl0aWVzLmlzTWltZVR5cGVWYWxpZChmaWxlLnR5cGUsIG1ldGFkYXRhLmFsbG93ZWRNaW1lVHlwZXMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgbWltZXR5cGUgbmVlZHMgdG8gYmUgb25lIG9mICR7bWV0YWRhdGEuYWxsb3dlZE1pbWVUeXBlc31gXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChGaWxlVXRpbGl0aWVzLnRyYW5zZm9ybVRvTWVnYUJ5dGVzKGZpbGUuc2l6ZSwgJ0InKSA+IG1ldGFkYXRhLm1heFNpemUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBmaWxlIG5lZWRzIHRvIGJlIHNtYWxsZXIgdGhhbiAke21ldGFkYXRhLm1heFNpemV9IE1CYFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWxlU2l6ZVRvdGFsICs9IGZpbGUuc2l6ZTtcbiAgICAgICAgICAgIGlmIChGaWxlVXRpbGl0aWVzLnRyYW5zZm9ybVRvTWVnYUJ5dGVzKGZpbGVTaXplVG90YWwsICdCJykgPiBtZXRhZGF0YS5tYXhTaXplVG90YWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBUaGUgc2l6ZSBvZiBhbGwgZmlsZXMgY29tYmluZWQgbmVlZHMgdG8gYmUgc21hbGxlciB0aGFuICR7bWV0YWRhdGEubWF4U2l6ZVRvdGFsfWBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZnVuY3Rpb24gcGFkVG8yRGlnaXRzKG51bTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbnVtLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmZ1bmN0aW9uIGZvcm1hdERhdGUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgcGFkVG8yRGlnaXRzKGRhdGUuZ2V0RGF0ZSgpKSxcbiAgICAgICAgcGFkVG8yRGlnaXRzKGRhdGUuZ2V0TW9udGgoKSArIDEpLFxuICAgICAgICBkYXRlLmdldEZ1bGxZZWFyKClcbiAgICBdLmpvaW4oJy8nKTtcbn0iXX0=
491
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi51dGlsaXRpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy91dGlsaXRpZXMvdmFsaWRhdGlvbi51dGlsaXRpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBV3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQWlCakQ7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLG1CQUFtQjtJQUNyQzs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsYUFBYSxDQUFnRCxNQUFrQixFQUFFLElBQTBCO1FBQzlHLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyx5QkFBeUIsQ0FDNUIsTUFBa0IsRUFDbEIsSUFBMEI7UUFFMUIsTUFBTSxHQUFHLEdBQXNCLEVBQUUsQ0FBQztRQUNsQyxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sRUFBRTtZQUN0QixNQUFNLEdBQUcsR0FBZ0MsSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDNUYsSUFBSSxHQUFHLEVBQUU7Z0JBQ0wsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNqQjtTQUNK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O0NBQ0o7QUFFRCwrQ0FBK0M7QUFDL0MsU0FBUyxZQUFZLENBQUMsR0FBVztJQUM3QixPQUFPLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRCwrQ0FBK0M7QUFDL0MsU0FBUyxVQUFVLENBQUMsSUFBVTtJQUMxQixPQUFPO1FBQ0gsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM1QixZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsV0FBVyxFQUFFO0tBQ3JCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUaW1lIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEJhc2VFbnRpdHlUeXBlIH0gZnJvbSAnLi4vY2xhc3Nlcy9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgRW50aXR5QXJyYXlEZWNvcmF0b3JDb25maWdJbnRlcm5hbCB9IGZyb20gJy4uL2RlY29yYXRvcnMvYXJyYXkvYXJyYXktZGVjb3JhdG9yLWludGVybmFsLmRhdGEnO1xuaW1wb3J0IHsgRGVjb3JhdG9yVHlwZXMgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2Jhc2UvZGVjb3JhdG9yLXR5cGVzLmVudW0nO1xuaW1wb3J0IHsgUHJvcGVydHlEZWNvcmF0b3JDb25maWdJbnRlcm5hbCB9IGZyb20gJy4uL2RlY29yYXRvcnMvYmFzZS9wcm9wZXJ0eS1kZWNvcmF0b3ItaW50ZXJuYWwuZGF0YSc7XG5pbXBvcnQgeyBUb2dnbGVCb29sZWFuRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2Jvb2xlYW4vYm9vbGVhbi1kZWNvcmF0b3ItaW50ZXJuYWwuZGF0YSc7XG5pbXBvcnQgeyBDdXN0b21EZWNvcmF0b3JDb25maWdJbnRlcm5hbCB9IGZyb20gJy4uL2RlY29yYXRvcnMvY3VzdG9tL2N1c3RvbS1kZWNvcmF0b3ItaW50ZXJuYWwuZGF0YSc7XG5pbXBvcnQgeyBEYXRlUmFuZ2VEYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwsIERhdGVUaW1lRGF0ZURlY29yYXRvckNvbmZpZ0ludGVybmFsLCBEZWZhdWx0RGF0ZURlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9kYXRlL2RhdGUtZGVjb3JhdG9yLWludGVybmFsLmRhdGEnO1xuaW1wb3J0IHsgRGF0ZVJhbmdlIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9kYXRlL2RhdGUtZGVjb3JhdG9yLmRhdGEnO1xuaW1wb3J0IHsgRGVmYXVsdEZpbGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbCB9IGZyb20gJy4uL2RlY29yYXRvcnMvZmlsZS9maWxlLWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IEZpbGVEYXRhIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9maWxlL2ZpbGUtZGVjb3JhdG9yLmRhdGEnO1xuaW1wb3J0IHsgRGVmYXVsdE51bWJlckRlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9udW1iZXIvbnVtYmVyLWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IERlZmF1bHRPYmplY3REZWNvcmF0b3JDb25maWdJbnRlcm5hbCB9IGZyb20gJy4uL2RlY29yYXRvcnMvb2JqZWN0L29iamVjdC1kZWNvcmF0b3ItaW50ZXJuYWwuZGF0YSc7XG5pbXBvcnQgeyBBdXRvY29tcGxldGVTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCwgRGVmYXVsdFN0cmluZ0RlY29yYXRvckNvbmZpZ0ludGVybmFsLCBQYXNzd29yZFN0cmluZ0RlY29yYXRvckNvbmZpZ0ludGVybmFsLCBUZXh0Ym94U3RyaW5nRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgfSBmcm9tICcuLi9kZWNvcmF0b3JzL3N0cmluZy9zdHJpbmctZGVjb3JhdG9yLWludGVybmFsLmRhdGEnO1xuaW1wb3J0IHsgTG9kYXNoVXRpbGl0aWVzIH0gZnJvbSAnLi4vZW5jYXBzdWxhdGlvbi9sb2Rhc2gudXRpbGl0aWVzJztcbmltcG9ydCB7IFJlZmxlY3RVdGlsaXRpZXMgfSBmcm9tICcuLi9lbmNhcHN1bGF0aW9uL3JlZmxlY3QudXRpbGl0aWVzJztcbmltcG9ydCB7IERhdGVVdGlsaXRpZXMgfSBmcm9tICcuL2RhdGUudXRpbGl0aWVzJztcbmltcG9ydCB7IEVudGl0eVV0aWxpdGllcyB9IGZyb20gJy4vZW50aXR5LnV0aWxpdGllcyc7XG5pbXBvcnQgeyBGaWxlVXRpbGl0aWVzIH0gZnJvbSAnLi9maWxlLnV0aWxpdGllcyc7XG5cbi8qKlxuICogQSB2YWxpZGF0aW9uIGVycm9yIHJlcG9ydGVkIGJ5IHRoZSB2YWxpZGF0aW9uIHV0aWxpdGllcy5cbiAqIENvbnNpc3RzIG9mIHRoZSBwcm9wZXJ0eSBuYW1lIHdoZXJlIHRoZSBlcnJvciBvcmlnaW5hdGVkIGZyb20gYW5kIGEgbWVzc2FnZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0aW9uRXJyb3Ige1xuICAgIC8qKlxuICAgICAqIFRoZSBwcm9wZXJ0eSBuYW1lIG9uIHdoaWNoIHRoZSBlcnJvciBvY2N1cnJlZC4gVGhpcyBpcyB0aGUgZGlzcGxheU5hbWUgdmFsdWUuXG4gICAgICovXG4gICAgcHJvcGVydHk6IHN0cmluZyxcbiAgICAvKipcbiAgICAgKiBUaGUgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlLlxuICAgICAqL1xuICAgIG1lc3NhZ2U6IHN0cmluZ1xufVxuXG4vKipcbiAqIENvbnRhaW5zIEhlbHBlck1ldGhvZHMgYXJvdW5kIGhhbmRsaW5nIFZhbGlkYXRpb24gb2YgZW50aXRpZXMgYW5kIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBWYWxpZGF0aW9uVXRpbGl0aWVzIHtcbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgdGhlIHZhbHVlcyBvbiBhbiBlbnRpdHkgYXJlIHZhbGlkLlxuICAgICAqIEFsc28gY2hlY2tzIGFsbCB0aGUgdmFsaWRhdG9ycyBnaXZlbiBieSB0aGUgbWV0YWRhdGEgKFwicmVxdWlyZWRcIiwgXCJtYXhMZW5ndGhcIiBldGMuKS5cbiAgICAgKiBAcGFyYW0gZW50aXR5IC0gVGhlIGVudGl0eSB0byB2YWxpZGF0ZS5cbiAgICAgKiBAcGFyYW0gb21pdCAtIFdoZXRoZXIgdG8gY2hlY2sgZm9yIGNyZWF0aW5nIG9yIGVkaXRpbmcgdmFsaWRpdHkuXG4gICAgICogQHJldHVybnMgV2hldGhlciBvciBub3QgdGhlIGVudGl0eSBpcyB2YWxpZC5cbiAgICAgKi9cbiAgICBzdGF0aWMgaXNFbnRpdHlWYWxpZDxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+KGVudGl0eTogRW50aXR5VHlwZSwgb21pdD86ICdjcmVhdGUnIHwgJ3VwZGF0ZScpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RW50aXR5VmFsaWRhdGlvbkVycm9ycyhlbnRpdHksIG9taXQpLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFsbCB2YWxpZGF0aW9uIGVycm9ycyBvbiB0aGUgZ2l2ZW4gZW50aXR5LlxuICAgICAqIEBwYXJhbSBlbnRpdHkgLSBUaGUgZW50aXR5IHRvIHZhbGlkYXRlLlxuICAgICAqIEBwYXJhbSBvbWl0IC0gV2hhdCBrZXlzIG5vdCB0byBjaGVjay4gQW4gZW1wdHkgdmFsdWUgbWVhbnMgbm8ga2V5cyBhcmUgb21pdHRlZC5cbiAgICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiB2YWxpZGF0aW9uIGVycm9ycyBvbiB0aGUgcHJvdmlkZWQgZW50aXR5LlxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRFbnRpdHlWYWxpZGF0aW9uRXJyb3JzPEVudGl0eVR5cGUgZXh0ZW5kcyBCYXNlRW50aXR5VHlwZTxFbnRpdHlUeXBlPj4oXG4gICAgICAgIGVudGl0eTogRW50aXR5VHlwZSxcbiAgICAgICAgb21pdD86ICdjcmVhdGUnIHwgJ3VwZGF0ZSdcbiAgICApOiBWYWxpZGF0aW9uRXJyb3JbXSB7XG4gICAgICAgIGNvbnN0IHJlczogVmFsaWRhdGlvbkVycm9yW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZW50aXR5KSB7XG4gICAgICAgICAgICBjb25zdCBlcnI6IFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZCA9IHRoaXMuZ2V0UHJvcGVydHlWYWxpZGF0aW9uRXJyb3IoZW50aXR5LCBrZXksIG9taXQpO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHJlcy5wdXNoKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyAvKipcbiAgICAvLyAgKiBDaGVja3MgaWYgYSBzaW5nbGUgcHJvcGVydHkgdmFsdWUgaXMgdmFsaWQuXG4gICAgLy8gICpcbiAgICAvLyAgKiBAcGFyYW0gZW50aXR5IC0gVGhlIGVudGl0eSB3aGVyZSB0aGUgcHJvcGVydHkgaXMgZnJvbS5cbiAgICAvLyAgKiBAcGFyYW0ga2V5IC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5LlxuICAgIC8vICAqIEBwYXJhbSBvbWl0IC0gV2hldGhlciB0byBjaGVjayBpZiB0aGUgZ2l2ZW4gZW50aXR5IGlzIHZhbGlkIGZvciBjcmVhdGlvbiBvciB1cGRhdGluZy5cbiAgICAvLyAgKiBAcmV0dXJucyBXaGV0aGVyIG9yIG5vdCB0aGUgcHJvcGVydHkgdmFsdWUgaXMgdmFsaWQuXG4gICAgLy8gICogQHRocm93cyBUaHJvd3Mgd2hlbiBpdCBleHRyYWN0cyBhbiB1bmtub3duIG1ldGFkYXRhIHR5cGUuXG4gICAgLy8gICovXG4gICAgLy8gc3RhdGljIGlzUHJvcGVydHlWYWxpZDxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+KFxuICAgIC8vICAgICBlbnRpdHk6IEVudGl0eVR5cGUsXG4gICAgLy8gICAgIGtleToga2V5b2YgRW50aXR5VHlwZSxcbiAgICAvLyAgICAgb21pdD86ICdjcmVhdGUnIHwgJ3VwZGF0ZSdcbiAgICAvLyApOiBib29sZWFuIHtcbiAgICAvLyAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWxpZGF0aW9uRXJyb3IoZW50aXR5LCBrZXksIG9taXQpID09IG51bGw7XG4gICAgLy8gfVxuXG4gICAgLyoqXG4gICAgICogVmFsaWRhdGVzIHRoZSBwcm9wZXJ0eSBvbiB0aGUgZ2l2ZW4gZW50aXR5IHdpdGggdGhlIGdpdmVuIGtleS5cbiAgICAgKiBAcGFyYW0gZW50aXR5IC0gVGhlIGVudGl0eSBvbiB3aGljaCB0aGUgcHJvcGVydHkgdG8gY2hlY2sgaXMuXG4gICAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIHZhbGlkYXRlLlxuICAgICAqIEBwYXJhbSBvbWl0IC0gV2hhdCBrZXlzIG5vdCB0byBjaGVjay4gQW4gZW1wdHkgdmFsdWUgbWVhbnMgbm8ga2V5cyBhcmUgb21pdHRlZC5cbiAgICAgKiBAcmV0dXJucyBBIHZhbGlkYXRpb24gZXJyb3Igd2hlbiB0aGUgcHJvcGVydHkgaXMgbm90IHZhbGlkLCB1bmRlZmluZWQgb3RoZXJ3aXNlLlxuICAgICAqIEB0aHJvd3MgV2hlbiB0aGUgdHlwZSBvZiB0aGUgcHJvcGVydHkgaXMgbm90IGtub3duLlxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRQcm9wZXJ0eVZhbGlkYXRpb25FcnJvcjxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+KFxuICAgICAgICBlbnRpdHk6IEVudGl0eVR5cGUsXG4gICAgICAgIGtleToga2V5b2YgRW50aXR5VHlwZSxcbiAgICAgICAgb21pdD86ICdjcmVhdGUnIHwgJ3VwZGF0ZSdcbiAgICApOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCB0eXBlOiBEZWNvcmF0b3JUeXBlcyA9IEVudGl0eVV0aWxpdGllcy5nZXRQcm9wZXJ0eVR5cGUoZW50aXR5LCBrZXkpO1xuICAgICAgICBjb25zdCBtZXRhZGF0YTogUHJvcGVydHlEZWNvcmF0b3JDb25maWdJbnRlcm5hbDx1bmtub3duPiA9IEVudGl0eVV0aWxpdGllcy5nZXRQcm9wZXJ0eU1ldGFkYXRhKGVudGl0eSwga2V5LCB0eXBlKTtcblxuICAgICAgICBpZiAobWV0YWRhdGEub21pdEZvckNyZWF0ZSAmJiBvbWl0ID09PSAnY3JlYXRlJykge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEub21pdEZvclVwZGF0ZSAmJiBvbWl0ID09PSAndXBkYXRlJykge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEucmVxdWlyZWQoZW50aXR5KSAmJiB0eXBlICE9PSBEZWNvcmF0b3JUeXBlcy5IQVNfTUFOWSkge1xuICAgICAgICAgICAgaWYgKGVudGl0eVtrZXldID09IG51bGwgfHwgZW50aXR5W2tleV0gPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAncmVxdWlyZWQnXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1ldGFkYXRhLnJlcXVpcmVkKGVudGl0eSkpIHtcbiAgICAgICAgICAgIGlmIChlbnRpdHlba2V5XSA9PSBudWxsIHx8IGVudGl0eVtrZXldID09PSAnJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkJPT0xFQU5fRFJPUERPV046XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkJPT0xFQU5fQ0hFQ0tCT1g6XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkJPT0xFQU5fVE9HR0xFOlxuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eUJvb2xlYW46IGJvb2xlYW4gPSBlbnRpdHlba2V5XSBhcyBib29sZWFuO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJvb2xlYW5NZXRhZGF0YTogVG9nZ2xlQm9vbGVhbkRlY29yYXRvckNvbmZpZ0ludGVybmFsID0gbWV0YWRhdGEgYXMgVG9nZ2xlQm9vbGVhbkRlY29yYXRvckNvbmZpZ0ludGVybmFsO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEJvb2xlYW5WYWxpZGF0aW9uRXJyb3IoZW50aXR5LCBlbnRpdHlCb29sZWFuLCBib29sZWFuTWV0YWRhdGEpO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5TVFJJTkdfRFJPUERPV046XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLlNUUklORzpcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlTdHJpbmc6IHN0cmluZyA9IGVudGl0eVtrZXldIGFzIHN0cmluZztcbiAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmdNZXRhZGF0YTogRGVmYXVsdFN0cmluZ0RlY29yYXRvckNvbmZpZ0ludGVybmFsID0gbWV0YWRhdGEgYXMgRGVmYXVsdFN0cmluZ0RlY29yYXRvckNvbmZpZ0ludGVybmFsO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFN0cmluZ1ZhbGlkYXRpb25FcnJvcihlbnRpdHlTdHJpbmcsIHN0cmluZ01ldGFkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuU1RSSU5HX0FVVE9DT01QTEVURTpcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlBdXRvY29tcGxldGVTdHJpbmc6IHN0cmluZyA9IGVudGl0eVtrZXldIGFzIHN0cmluZztcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZ0F1dG9jb21wbGV0ZU1ldGFkYXRhOiBBdXRvY29tcGxldGVTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIEF1dG9jb21wbGV0ZVN0cmluZ0RlY29yYXRvckNvbmZpZ0ludGVybmFsO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF1dG9jb21wbGV0ZVN0cmluZ1ZhbGlkYXRpb25FcnJvcihlbnRpdHlBdXRvY29tcGxldGVTdHJpbmcsIHN0cmluZ0F1dG9jb21wbGV0ZU1ldGFkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuU1RSSU5HX1RFWFRCT1g6XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5VGV4dGJveDogc3RyaW5nID0gZW50aXR5W2tleV0gYXMgc3RyaW5nO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRleHRib3hNZXRhZGF0YTogVGV4dGJveFN0cmluZ0RlY29yYXRvckNvbmZpZ0ludGVybmFsID0gbWV0YWRhdGEgYXMgVGV4dGJveFN0cmluZ0RlY29yYXRvckNvbmZpZ0ludGVybmFsO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRleHRib3hWYWxpZGF0aW9uRXJyb3IoZW50aXR5VGV4dGJveCwgdGV4dGJveE1ldGFkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuU1RSSU5HX1BBU1NXT1JEOlxuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eVBhc3N3b3JkOiBzdHJpbmcgPSBlbnRpdHlba2V5XSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFzc3dvcmRNZXRhZGF0YTogUGFzc3dvcmRTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIFBhc3N3b3JkU3RyaW5nRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw7XG4gICAgICAgICAgICAgICAgY29uc3QgY29uZmlybVBhc3N3b3JkOiBzdHJpbmcgPSBSZWZsZWN0VXRpbGl0aWVzLmdldE1ldGFkYXRhKEVudGl0eVV0aWxpdGllcy5DT05GSVJNX1BBU1NXT1JEX0tFWSwgZW50aXR5LCBrZXkpIGFzIHN0cmluZztcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQYXNzd29yZFZhbGlkYXRpb25FcnJvcihlbnRpdHlQYXNzd29yZCwgcGFzc3dvcmRNZXRhZGF0YSwgY29uZmlybVBhc3N3b3JkKTtcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuTlVNQkVSX0RST1BET1dOOlxuICAgICAgICAgICAgICAgIC8vIEJlY2F1c2Ugb25seSB2YWxpZCB2YWx1ZXMgY2FuIGJlIHNlbGVjdGVkLCB0aGlzIGlzIGFsd2F5cyB0cnVlIHdoZW4gaXQgaGFzIGEgdmFsdWVcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5OVU1CRVI6XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLk5VTUJFUl9TTElERVI6XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5TnVtYmVyOiBudW1iZXIgPSBlbnRpdHlba2V5XSBhcyBudW1iZXI7XG4gICAgICAgICAgICAgICAgY29uc3QgbnVtYmVyTWV0YWRhdGE6IERlZmF1bHROdW1iZXJEZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIERlZmF1bHROdW1iZXJEZWNvcmF0b3JDb25maWdJbnRlcm5hbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXROdW1iZXJWYWxpZGF0aW9uRXJyb3IoZW50aXR5TnVtYmVyLCBudW1iZXJNZXRhZGF0YSk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLk9CSkVDVDpcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlPYmplY3Q6IEVudGl0eVR5cGUgPSBlbnRpdHlba2V5XSBhcyBFbnRpdHlUeXBlO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcGFyYW1ldGVyS2V5IGluIGVudGl0eU9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZTogdW5rbm93biA9IGVudGl0eU9iamVjdFtwYXJhbWV0ZXJLZXldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAhKG1ldGFkYXRhIGFzIERlZmF1bHRPYmplY3REZWNvcmF0b3JDb25maWdJbnRlcm5hbDxFbnRpdHlUeXBlPikub21pdC5pbmNsdWRlcyhwYXJhbWV0ZXJLZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiAhKCFtZXRhZGF0YS5yZXF1aXJlZChlbnRpdHkpICYmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09ICcnKSlcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnI6IFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZCA9IHRoaXMuZ2V0UHJvcGVydHlWYWxpZGF0aW9uRXJyb3IoZW50aXR5T2JqZWN0LCBwYXJhbWV0ZXJLZXksIG9taXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYCR7ZXJyLnByb3BlcnR5fSBpcyBpbnZhbGlkOiAke2Vyci5tZXNzYWdlfWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5BUlJBWV9TVFJJTkdfQ0hJUFM6XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkFSUkFZX1NUUklOR19BVVRPQ09NUExFVEVfQ0hJUFM6XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkFSUkFZX0RBVEU6XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkFSUkFZX0RBVEVfVElNRTpcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuQVJSQVlfREFURV9SQU5HRTpcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuQVJSQVk6XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5QXJyYXk6IHVua25vd25bXSA9IGVudGl0eVtrZXldIGFzIHVua25vd25bXTtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICAgICAgICAgIGNvbnN0IGFycmF5TWV0YWRhdGE6IEVudGl0eUFycmF5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8RW50aXR5VHlwZT4gPSBtZXRhZGF0YSBhcyBFbnRpdHlBcnJheURlY29yYXRvckNvbmZpZ0ludGVybmFsPEVudGl0eVR5cGU+O1xuICAgICAgICAgICAgICAgIGlmIChhcnJheU1ldGFkYXRhLnJlcXVpcmVkKGVudGl0eSkgJiYgIWVudGl0eUFycmF5Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ25vIGl0ZW1zIGluIGFycmF5J1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuREFURTpcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlEYXRlOiBEYXRlID0gbmV3IERhdGUoZW50aXR5W2tleV0gYXMgRGF0ZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZU1ldGFkYXRhOiBEZWZhdWx0RGF0ZURlY29yYXRvckNvbmZpZ0ludGVybmFsID0gbWV0YWRhdGEgYXMgRGVmYXVsdERhdGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRlVmFsaWRhdGlvbkVycm9yKGVudGl0eURhdGUsIGRhdGVNZXRhZGF0YSk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkRBVEVfUkFOR0U6XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5RGF0ZVJhbmdlOiBEYXRlUmFuZ2UgPSBMb2Rhc2hVdGlsaXRpZXMuY2xvbmVEZWVwKGVudGl0eVtrZXldIGFzIERhdGVSYW5nZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZVJhbmdlTWV0YWRhdGE6IERhdGVSYW5nZURhdGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIERhdGVSYW5nZURhdGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRlUmFuZ2VWYWxpZGF0aW9uRXJyb3IoZW50aXR5LCBlbnRpdHlEYXRlUmFuZ2UsIGRhdGVSYW5nZU1ldGFkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuREFURV9USU1FOlxuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eURhdGVUaW1lOiBEYXRlID0gbmV3IERhdGUoZW50aXR5W2tleV0gYXMgRGF0ZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZVRpbWVNZXRhZGF0YTogRGF0ZVRpbWVEYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgPSBtZXRhZGF0YSBhcyBEYXRlVGltZURhdGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbDtcbiAgICAgICAgICAgICAgICBjb25zdCBoYXNUaW1lOiBib29sZWFuID0gUmVmbGVjdFV0aWxpdGllcy5oYXNNZXRhZGF0YShFbnRpdHlVdGlsaXRpZXMuVElNRV9LRVksIGVudGl0eSwga2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRlVGltZVZhbGlkYXRpb25FcnJvcihlbnRpdHlEYXRlVGltZSwgZGF0ZVRpbWVNZXRhZGF0YSwgaGFzVGltZSk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkZJTEVfREVGQVVMVDpcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuRklMRV9JTUFHRTpcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlGaWxlOiBGaWxlRGF0YSB8IEZpbGVEYXRhW10gPSBlbnRpdHlba2V5XSBhcyBGaWxlRGF0YSB8IEZpbGVEYXRhW107XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5RmlsZU1ldGFkYXRhOiBEZWZhdWx0RmlsZURlY29yYXRvckNvbmZpZ0ludGVybmFsID0gbWV0YWRhdGEgYXMgRGVmYXVsdEZpbGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRGaWxlRGF0YVZhbGlkYXRpb25FcnJvcihlbnRpdHlGaWxlLCBlbnRpdHlGaWxlTWV0YWRhdGEpO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5SRUZFUkVOQ0VTX01BTlk6XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLlJFRkVSRU5DRVNfT05FOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5IQVNfTUFOWTpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuQ1VTVE9NOlxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB0eXBlc2NyaXB0L25vLWV4cGxpY2l0LWFueSwgbWF4LWxlblxuICAgICAgICAgICAgICAgIGNvbnN0IGN1c3RvbU1ldGFkYXRhOiBDdXN0b21EZWNvcmF0b3JDb25maWdJbnRlcm5hbDxFbnRpdHlUeXBlLCBhbnksIGFueSwgYW55PiA9IG1ldGFkYXRhIGFzIEN1c3RvbURlY29yYXRvckNvbmZpZ0ludGVybmFsPEVudGl0eVR5cGUsIGFueSwgYW55LCBhbnk+O1xuICAgICAgICAgICAgICAgIGlmICghY3VzdG9tTWV0YWRhdGEuaXNWYWxpZChlbnRpdHlba2V5XSwgb21pdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkJ1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgdmFsaWRhdGUgdGhlIGlucHV0IGJlY2F1c2UgdGhlIERlY29yYXRvclR5cGUgJHt0eXBlfSBpcyBub3Qga25vd25gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldEJvb2xlYW5WYWxpZGF0aW9uRXJyb3I8RW50aXR5VHlwZSBleHRlbmRzIEJhc2VFbnRpdHlUeXBlPEVudGl0eVR5cGU+PihcbiAgICAgICAgZW50aXR5OiBFbnRpdHlUeXBlLFxuICAgICAgICB2YWx1ZTogYm9vbGVhbixcbiAgICAgICAgbWV0YWRhdGE6IFRvZ2dsZUJvb2xlYW5EZWNvcmF0b3JDb25maWdJbnRlcm5hbFxuICAgICk6IFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChtZXRhZGF0YS5yZXF1aXJlZChlbnRpdHkpICYmICF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ25vdCBzZWxlY3RlZCdcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRTdHJpbmdWYWxpZGF0aW9uRXJyb3IodmFsdWU6IHN0cmluZywgbWV0YWRhdGE6IERlZmF1bHRTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCk6IFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChtZXRhZGF0YS5tYXhMZW5ndGggJiYgdmFsdWUubGVuZ3RoID4gbWV0YWRhdGEubWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgbmVlZHMgdG8gYmUgc21hbGxlciB0aGFuICR7bWV0YWRhdGEubWF4TGVuZ3RofSBjaGFyYWN0ZXJzYFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEubWluTGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA8IG1ldGFkYXRhLm1pbkxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYG5lZWRzIHRvIGJlIGJpZ2dlciB0aGFuICR7bWV0YWRhdGEubWluTGVuZ3RofSBjaGFyYWN0ZXJzYFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEucmVnZXggJiYgIXZhbHVlLm1hdGNoKG1ldGFkYXRhLnJlZ2V4KSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ2ludmFsaWQnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0QXV0b2NvbXBsZXRlU3RyaW5nVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICB2YWx1ZTogc3RyaW5nLFxuICAgICAgICBtZXRhZGF0YTogQXV0b2NvbXBsZXRlU3RyaW5nRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWxcbiAgICApOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAobWV0YWRhdGEubWF4TGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA+IG1ldGFkYXRhLm1heExlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYG5lZWRzIHRvIGJlIHNtYWxsZXIgdGhhbiAke21ldGFkYXRhLm1heExlbmd0aH0gY2hhcmFjdGVyc2BcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLm1pbkxlbmd0aCAmJiB2YWx1ZS5sZW5ndGggPCBtZXRhZGF0YS5taW5MZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBuZWVkcyB0byBiZSBiaWdnZXIgdGhhbiAke21ldGFkYXRhLm1pbkxlbmd0aH0gY2hhcmFjdGVyc2BcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLnJlZ2V4ICYmICF2YWx1ZS5tYXRjaChtZXRhZGF0YS5yZWdleCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEucmVzdHJpY3RUb09wdGlvbnMgPT0gdHJ1ZSAmJiAhbWV0YWRhdGEuYXV0b2NvbXBsZXRlVmFsdWVzLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ05lZWRzIHRvIGJlIG9uZSBvZiB0aGUgcHJvdmlkZWQgdmFsdWVzJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldFRleHRib3hWYWxpZGF0aW9uRXJyb3IodmFsdWU6IHN0cmluZywgbWV0YWRhdGE6IFRleHRib3hTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCk6IFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChtZXRhZGF0YS5tYXhMZW5ndGggJiYgdmFsdWUubGVuZ3RoID4gbWV0YWRhdGEubWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgbmVlZHMgdG8gYmUgc21hbGxlciB0aGFuICR7bWV0YWRhdGEubWF4TGVuZ3RofSBjaGFyYWN0ZXJzYFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEubWluTGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA8IG1ldGFkYXRhLm1pbkxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYG5lZWRzIHRvIGJlIGJpZ2dlciB0aGFuICR7bWV0YWRhdGEubWluTGVuZ3RofSBjaGFyYWN0ZXJzYFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldFBhc3N3b3JkVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICB2YWx1ZTogc3RyaW5nLFxuICAgICAgICBtZXRhZGF0YTogUGFzc3dvcmRTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCxcbiAgICAgICAgY29uZmlybVBhc3N3b3JkOiBzdHJpbmdcbiAgICApOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAodmFsdWUgIT09IGNvbmZpcm1QYXNzd29yZCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ3Bhc3N3b3JkcyBuZWVkIHRvIG1hdGNoJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEubWF4TGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA+IG1ldGFkYXRhLm1heExlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYG5lZWRzIHRvIGJlIHNtYWxsZXIgdGhhbiAke21ldGFkYXRhLm1heExlbmd0aH0gY2hhcmFjdGVyc2BcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLm1pbkxlbmd0aCAmJiB2YWx1ZS5sZW5ndGggPCBtZXRhZGF0YS5taW5MZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBuZWVkcyB0byBiZSBiaWdnZXIgdGhhbiAke21ldGFkYXRhLm1pbkxlbmd0aH0gY2hhcmFjdGVyc2BcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLnJlZ2V4ICYmICF2YWx1ZS5tYXRjaChtZXRhZGF0YS5yZWdleCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldE51bWJlclZhbGlkYXRpb25FcnJvcih2YWx1ZTogbnVtYmVyLCBtZXRhZGF0YTogRGVmYXVsdE51bWJlckRlY29yYXRvckNvbmZpZ0ludGVybmFsKTogVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKG1ldGFkYXRhLm1heCAmJiB2YWx1ZSA+IG1ldGFkYXRhLm1heCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYG5lZWRzIHRvIGJlIHNtYWxsZXIgdGhhbiAke21ldGFkYXRhLm1heH1gXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5taW4gJiYgdmFsdWUgPCBtZXRhZGF0YS5taW4pIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBuZWVkcyB0byBiZSBiaWdnZXIgdGhhbiAke21ldGFkYXRhLm1pbn1gXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0RGF0ZVZhbGlkYXRpb25FcnJvcih2YWx1ZTogRGF0ZSwgbWV0YWRhdGE6IERlZmF1bHREYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwpOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAobWV0YWRhdGEubWluICYmIHZhbHVlLmdldFRpbWUoKSA8IG1ldGFkYXRhLm1pbih2YWx1ZSkuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgbmVlZHMgdG8gYmUgYWZ0ZXIgJHtmb3JtYXREYXRlKG1ldGFkYXRhLm1pbih2YWx1ZSkpfWBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLm1heCAmJiB2YWx1ZS5nZXRUaW1lKCkgPiBtZXRhZGF0YS5tYXgodmFsdWUpLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYG5lZWRzIHRvIGJlIGJlZm9yZSAke2Zvcm1hdERhdGUobWV0YWRhdGEubWF4KHZhbHVlKSl9YFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEuZmlsdGVyICYmICFtZXRhZGF0YS5maWx0ZXIodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCdcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXREYXRlUmFuZ2VWYWxpZGF0aW9uRXJyb3I8RW50aXR5VHlwZSBleHRlbmRzIEJhc2VFbnRpdHlUeXBlPEVudGl0eVR5cGU+PihcbiAgICAgICAgZW50aXR5OiBFbnRpdHlUeXBlLFxuICAgICAgICB2YWx1ZTogUGFydGlhbDxEYXRlUmFuZ2U+LFxuICAgICAgICBtZXRhZGF0YTogRGF0ZVJhbmdlRGF0ZURlY29yYXRvckNvbmZpZ0ludGVybmFsXG4gICAgKTogVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKG1ldGFkYXRhLnJlcXVpcmVkKGVudGl0eSkpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5zdGFydCA9PSBudWxsIHx8IHZhbHVlLmVuZCA9PSBudWxsIHx8IHZhbHVlLnZhbHVlcyA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAncmVxdWlyZWQnXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUuc3RhcnQpIHtcbiAgICAgICAgICAgIHZhbHVlLnN0YXJ0ID0gbmV3IERhdGUodmFsdWUuc3RhcnQpO1xuICAgICAgICAgICAgaWYgKG1ldGFkYXRhLm1pblN0YXJ0ICYmIHZhbHVlLnN0YXJ0LmdldFRpbWUoKSA8IG1ldGFkYXRhLm1pblN0YXJ0KHZhbHVlLnN0YXJ0KS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBzdGFydCBkYXRlIG5lZWRzIHRvIGJlIGFmdGVyICR7Zm9ybWF0RGF0ZShtZXRhZGF0YS5taW5TdGFydCh2YWx1ZS5zdGFydCkpfWBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1ldGFkYXRhLm1heFN0YXJ0ICYmIHZhbHVlLnN0YXJ0LmdldFRpbWUoKSA+IG1ldGFkYXRhLm1heFN0YXJ0KHZhbHVlLnN0YXJ0KS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBzdGFydCBkYXRlIG5lZWRzIHRvIGJlIGJlZm9yZSAke2Zvcm1hdERhdGUobWV0YWRhdGEubWF4U3RhcnQodmFsdWUuc3RhcnQpKX1gXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXRhZGF0YS5maWx0ZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW1ldGFkYXRhLmZpbHRlcih2YWx1ZS5zdGFydCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdzdGFydCBkYXRlIGludmFsaWQnXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlLmVuZCkge1xuICAgICAgICAgICAgdmFsdWUuZW5kID0gbmV3IERhdGUodmFsdWUuZW5kKTtcbiAgICAgICAgICAgIGlmIChtZXRhZGF0YS5taW5FbmQgJiYgdmFsdWUuZW5kLmdldFRpbWUoKSA8IG1ldGFkYXRhLm1pbkVuZCh2YWx1ZS5lbmQpLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYGVuZCBkYXRlIG5lZWRzIHRvIGJlIGFmdGVyICR7Zm9ybWF0RGF0ZShtZXRhZGF0YS5taW5FbmQodmFsdWUuZW5kKSl9YFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWV0YWRhdGEubWF4RW5kICYmIHZhbHVlLmVuZC5nZXRUaW1lKCkgPiBtZXRhZGF0YS5tYXhFbmQodmFsdWUuZW5kKS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBlbmQgZGF0ZSBuZWVkcyB0byBiZSBiZWZvcmUgJHtmb3JtYXREYXRlKG1ldGFkYXRhLm1heEVuZCh2YWx1ZS5lbmQpKX1gXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXRhZGF0YS5maWx0ZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW1ldGFkYXRhLmZpbHRlcih2YWx1ZS5lbmQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnZW5kIGRhdGUgaW52YWxpZCdcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuXG4gICAgICAgIGlmIChtZXRhZGF0YS5maWx0ZXIgJiYgdmFsdWUudmFsdWVzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRhdGUgb2YgdmFsdWUudmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFtZXRhZGF0YS5maWx0ZXIoZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGB2YWx1ZSAke2Zvcm1hdERhdGUoZGF0ZSl9IGludmFsaWRgXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0RGF0ZVRpbWVWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIHZhbHVlOiBEYXRlLFxuICAgICAgICBtZXRhZGF0YTogRGF0ZVRpbWVEYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwsXG4gICAgICAgIGhhc1RpbWU6IGJvb2xlYW5cbiAgICApOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIWhhc1RpbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdubyB0aW1lJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEubWluRGF0ZSAmJiB2YWx1ZS5nZXRUaW1lKCkgPCBtZXRhZGF0YS5taW5EYXRlKHZhbHVlKS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBkYXRlIG5lZWRzIHRvIGJlIGFmdGVyICR7Zm9ybWF0RGF0ZShtZXRhZGF0YS5taW5EYXRlKHZhbHVlKSl9YFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEubWF4RGF0ZSAmJiB2YWx1ZS5nZXRUaW1lKCkgPiBtZXRhZGF0YS5tYXhEYXRlKHZhbHVlKS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBkYXRlIG5lZWRzIHRvIGJlIGJlZm9yZSAke2Zvcm1hdERhdGUobWV0YWRhdGEubWF4RGF0ZSh2YWx1ZSkpfWBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLmZpbHRlckRhdGUgJiYgIW1ldGFkYXRhLmZpbHRlckRhdGUodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCBkYXRlJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0aW1lOiBUaW1lID0gRGF0ZVV0aWxpdGllcy5nZXRUaW1lRnJvbURhdGUodmFsdWUpIGFzIFRpbWU7XG4gICAgICAgIGlmIChtZXRhZGF0YS5taW5UaW1lKSB7XG4gICAgICAgICAgICBjb25zdCBtaW5UaW1lOiBUaW1lID0gbWV0YWRhdGEubWluVGltZSh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgdGltZS5ob3VycyA+IG1pblRpbWUuaG91cnNcbiAgICAgICAgICAgICAgICAgICAgfHwgKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZS5ob3VycyA9PT0gbWluVGltZS5ob3Vyc1xuICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGltZS5taW51dGVzID49IG1pblRpbWUubWludXRlc1xuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgdGltZSBuZWVkcyB0byBiZSBhZnRlciAke21pblRpbWUuaG91cnN9OiR7bWluVGltZS5taW51dGVzfWBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5tYXhUaW1lKSB7XG4gICAgICAgICAgICBjb25zdCBtYXhUaW1lOiBUaW1lID0gbWV0YWRhdGEubWF4VGltZSh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgdGltZS5ob3VycyA8IG1heFRpbWUuaG91cnNcbiAgICAgICAgICAgICAgICAgICAgfHwgKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZS5ob3VycyA9PT0gbWF4VGltZS5ob3Vyc1xuICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGltZS5taW51dGVzIDw9IG1heFRpbWUubWludXRlc1xuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgdGltZSBuZWVkcyB0byBiZSBiZWZvcmUgJHttYXhUaW1lLmhvdXJzfToke21heFRpbWUubWludXRlc31gXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEuZmlsdGVyVGltZSAmJiAhbWV0YWRhdGEuZmlsdGVyVGltZSh0aW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ2ludmFsaWQgdGltZSdcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRGaWxlRGF0YVZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgdmFsdWU6IEZpbGVEYXRhIHwgRmlsZURhdGFbXSxcbiAgICAgICAgbWV0YWRhdGE6IERlZmF1bHRGaWxlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWxcbiAgICApOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBmaWxlczogRmlsZURhdGFbXSA9IG1ldGFkYXRhLm11bHRpcGxlID8gdmFsdWUgYXMgRmlsZURhdGFbXSA6IFt2YWx1ZSBhcyBGaWxlRGF0YV07XG4gICAgICAgIGxldCBmaWxlU2l6ZVRvdGFsOiBudW1iZXIgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgICAgIGlmICghZmlsZS5uYW1lIHx8ICFmaWxlLmZpbGUgJiYgIWZpbGUudXJsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCdcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFGaWxlVXRpbGl0aWVzLmlzTWltZVR5cGVWYWxpZChmaWxlLnR5cGUsIG1ldGFkYXRhLmFsbG93ZWRNaW1lVHlwZXMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgbWltZXR5cGUgbmVlZHMgdG8gYmUgb25lIG9mICR7bWV0YWRhdGEuYWxsb3dlZE1pbWVUeXBlc31gXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChGaWxlVXRpbGl0aWVzLnRyYW5zZm9ybVRvTWVnYUJ5dGVzKGZpbGUuc2l6ZSwgJ0InKSA+IG1ldGFkYXRhLm1heFNpemUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBmaWxlIG5lZWRzIHRvIGJlIHNtYWxsZXIgdGhhbiAke21ldGFkYXRhLm1heFNpemV9IE1CYFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWxlU2l6ZVRvdGFsICs9IGZpbGUuc2l6ZTtcbiAgICAgICAgICAgIGlmIChGaWxlVXRpbGl0aWVzLnRyYW5zZm9ybVRvTWVnYUJ5dGVzKGZpbGVTaXplVG90YWwsICdCJykgPiBtZXRhZGF0YS5tYXhTaXplVG90YWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBUaGUgc2l6ZSBvZiBhbGwgZmlsZXMgY29tYmluZWQgbmVlZHMgdG8gYmUgc21hbGxlciB0aGFuICR7bWV0YWRhdGEubWF4U2l6ZVRvdGFsfWBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZnVuY3Rpb24gcGFkVG8yRGlnaXRzKG51bTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbnVtLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmZ1bmN0aW9uIGZvcm1hdERhdGUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgcGFkVG8yRGlnaXRzKGRhdGUuZ2V0RGF0ZSgpKSxcbiAgICAgICAgcGFkVG8yRGlnaXRzKGRhdGUuZ2V0TW9udGgoKSArIDEpLFxuICAgICAgICBkYXRlLmdldEZ1bGxZZWFyKClcbiAgICBdLmpvaW4oJy8nKTtcbn0iXX0=
@@ -2130,10 +2130,14 @@ class ValidationUtilities {
2130
2130
  case DecoratorTypes.STRING_DROPDOWN:
2131
2131
  break;
2132
2132
  case DecoratorTypes.STRING:
2133
- case DecoratorTypes.STRING_AUTOCOMPLETE:
2134
2133
  const entityString = entity[key];
2135
2134
  const stringMetadata = metadata;
2136
2135
  return this.getStringValidationError(entityString, stringMetadata);
2136
+ case DecoratorTypes.STRING_AUTOCOMPLETE:
2137
+ const entityAutocompleteString = entity[key];
2138
+ // eslint-disable-next-line max-len
2139
+ const stringAutocompleteMetadata = metadata;
2140
+ return this.getAutocompleteStringValidationError(entityAutocompleteString, stringAutocompleteMetadata);
2137
2141
  case DecoratorTypes.STRING_TEXTBOX:
2138
2142
  const entityTextbox = entity[key];
2139
2143
  const textboxMetadata = metadata;
@@ -2250,6 +2254,33 @@ class ValidationUtilities {
2250
2254
  }
2251
2255
  return undefined;
2252
2256
  }
2257
+ static getAutocompleteStringValidationError(value, metadata) {
2258
+ if (metadata.maxLength && value.length > metadata.maxLength) {
2259
+ return {
2260
+ property: metadata.displayName,
2261
+ message: `needs to be smaller than ${metadata.maxLength} characters`
2262
+ };
2263
+ }
2264
+ if (metadata.minLength && value.length < metadata.minLength) {
2265
+ return {
2266
+ property: metadata.displayName,
2267
+ message: `needs to be bigger than ${metadata.minLength} characters`
2268
+ };
2269
+ }
2270
+ if (metadata.regex && !value.match(metadata.regex)) {
2271
+ return {
2272
+ property: metadata.displayName,
2273
+ message: 'invalid'
2274
+ };
2275
+ }
2276
+ if (metadata.restrictToOptions == true && !metadata.autocompleteValues.includes(value)) {
2277
+ return {
2278
+ property: metadata.displayName,
2279
+ message: 'Needs to be one of the provided values'
2280
+ };
2281
+ }
2282
+ return undefined;
2283
+ }
2253
2284
  static getTextboxValidationError(value, metadata) {
2254
2285
  if (metadata.maxLength && value.length > metadata.maxLength) {
2255
2286
  return {