@dyanet/nestjs-config-aws 1.2.0-beta.1 → 1.2.1

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.
Files changed (45) hide show
  1. package/README.md +5 -0
  2. package/dist/cjs/config-aws/src/config-manager.js +8 -8
  3. package/dist/cjs/config-aws/src/index.js +23 -23
  4. package/dist/cjs/config-aws/src/interfaces/config-manager.interface.js +1 -1
  5. package/dist/cjs/config-aws/src/loaders/env-file.loader.js +5 -5
  6. package/dist/cjs/config-aws/src/loaders/environment.loader.js +1 -1
  7. package/dist/cjs/config-aws/src/loaders/s3.loader.js +8 -8
  8. package/dist/cjs/config-aws/src/loaders/secrets-manager.loader.js +16 -9
  9. package/dist/cjs/config-aws/src/loaders/ssm-parameter-store.loader.js +6 -6
  10. package/dist/cjs/config-aws/src/utils/validation.util.js +6 -6
  11. package/dist/cjs/nestjs-config-aws/src/integration/services/async-config-helper.service.js +14 -6
  12. package/dist/cjs/nestjs-config-aws/src/integration/services/validation-integration.service.js +9 -6
  13. package/dist/esm/config-aws/src/config-manager.js +2 -2
  14. package/dist/esm/config-aws/src/index.js +10 -10
  15. package/dist/esm/config-aws/src/interfaces/config-manager.interface.js +1 -1
  16. package/dist/esm/config-aws/src/loaders/env-file.loader.js +3 -3
  17. package/dist/esm/config-aws/src/loaders/environment.loader.js +1 -1
  18. package/dist/esm/config-aws/src/loaders/s3.loader.js +3 -3
  19. package/dist/esm/config-aws/src/loaders/secrets-manager.loader.js +12 -5
  20. package/dist/esm/config-aws/src/loaders/ssm-parameter-store.loader.js +2 -2
  21. package/dist/esm/config-aws/src/utils/validation.util.js +2 -2
  22. package/dist/esm/nestjs-config-aws/src/integration/services/async-config-helper.service.js +14 -6
  23. package/dist/esm/nestjs-config-aws/src/integration/services/validation-integration.service.js +9 -6
  24. package/dist/esm/package.json +1 -0
  25. package/dist/types/config-aws/src/config-manager.d.ts +1 -1
  26. package/dist/types/config-aws/src/config-manager.d.ts.map +1 -1
  27. package/dist/types/config-aws/src/index.d.ts +16 -16
  28. package/dist/types/config-aws/src/index.d.ts.map +1 -1
  29. package/dist/types/config-aws/src/interfaces/config-manager.interface.d.ts +1 -1
  30. package/dist/types/config-aws/src/interfaces/config-manager.interface.d.ts.map +1 -1
  31. package/dist/types/config-aws/src/loaders/env-file.loader.d.ts +2 -2
  32. package/dist/types/config-aws/src/loaders/env-file.loader.d.ts.map +1 -1
  33. package/dist/types/config-aws/src/loaders/environment.loader.d.ts +2 -2
  34. package/dist/types/config-aws/src/loaders/environment.loader.d.ts.map +1 -1
  35. package/dist/types/config-aws/src/loaders/s3.loader.d.ts +2 -2
  36. package/dist/types/config-aws/src/loaders/s3.loader.d.ts.map +1 -1
  37. package/dist/types/config-aws/src/loaders/secrets-manager.loader.d.ts +3 -3
  38. package/dist/types/config-aws/src/loaders/secrets-manager.loader.d.ts.map +1 -1
  39. package/dist/types/config-aws/src/loaders/ssm-parameter-store.loader.d.ts +2 -2
  40. package/dist/types/config-aws/src/loaders/ssm-parameter-store.loader.d.ts.map +1 -1
  41. package/dist/types/config-aws/src/utils/validation.util.d.ts +1 -1
  42. package/dist/types/config-aws/src/utils/validation.util.d.ts.map +1 -1
  43. package/dist/types/nestjs-config-aws/src/integration/services/async-config-helper.service.d.ts.map +1 -1
  44. package/dist/types/nestjs-config-aws/src/integration/services/validation-integration.service.d.ts.map +1 -1
  45. package/package.json +5 -5
@@ -23,7 +23,7 @@ class JoiValidationProvider {
23
23
  // Try to import Joi dynamically
24
24
  this.joi = require('joi');
25
25
  }
26
- catch (error) {
26
+ catch {
27
27
  // Joi is not available
28
28
  this.joi = null;
29
29
  }
@@ -36,9 +36,12 @@ class JoiValidationProvider {
36
36
  return { isValid: false, errors: ['Joi is not available'] };
37
37
  }
38
38
  try {
39
- const { error } = this.joi.attempt ?
40
- { error: null } :
41
- schema.validate(config);
39
+ // Use joi.attempt which throws on validation error, or fall back to schema.validate
40
+ if (this.joi.attempt) {
41
+ this.joi.attempt(config, schema);
42
+ return { isValid: true, errors: [] };
43
+ }
44
+ const { error } = schema.validate(config);
42
45
  if (error) {
43
46
  const errors = error.details?.map((detail) => detail.message) || [error.message];
44
47
  return { isValid: false, errors };
@@ -65,7 +68,7 @@ class ClassValidatorProvider {
65
68
  this.classValidator = require('class-validator');
66
69
  this.classTransformer = require('class-transformer');
67
70
  }
68
- catch (error) {
71
+ catch {
69
72
  // class-validator is not available
70
73
  this.classValidator = null;
71
74
  this.classTransformer = null;
@@ -589,4 +592,4 @@ exports.ValidationIntegrationService = ValidationIntegrationService = Validation
589
592
  (0, common_1.Injectable)(),
590
593
  __metadata("design:paramtypes", [])
591
594
  ], ValidationIntegrationService);
592
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1pbnRlZ3JhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2ludGVncmF0aW9uL3NlcnZpY2VzL3ZhbGlkYXRpb24taW50ZWdyYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQW9EO0FBYXBEOztHQUVHO0FBQ0gsTUFBYSxxQkFBcUI7SUFDaEMsSUFBSSxHQUFHLEtBQUssQ0FBQztJQUNMLEdBQUcsQ0FBTTtJQUVqQjtRQUNFLElBQUksQ0FBQztZQUNILGdDQUFnQztZQUNoQyxJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLHVCQUF1QjtZQUN2QixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztRQUNsQixDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFFRCxRQUFRLENBQUMsTUFBVyxFQUFFLE1BQVc7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNkLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQztRQUM5RCxDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2xDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ2pCLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFMUIsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixNQUFNLE1BQU0sR0FBRyxLQUFL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RixDQUFBO0FBNWlCWSxvRUFBNEI7dUNBQTVCLDRCQUE0QjtJQUR4QyxJQUFBLG1CQUFVLEdBQUU7O0dBQ0EsNEJBQTRCLENBNGlCeEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBMb2dnZXIgfSBmcm9tICdAbmVzdGpzL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbmZpZ0ZhY3RvcnkgfSBmcm9tICdAbmVzdGpzL2NvbmZpZyc7XHJcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25Tb3VyY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NvbmZpZ3VyYXRpb24tc291cmNlLmludGVyZmFjZSc7XHJcblxyXG4vKipcclxuICogSW50ZXJmYWNlIGZvciB2YWxpZGF0aW9uIHNjaGVtYSBwcm92aWRlcnMuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRpb25TY2hlbWFQcm92aWRlciB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIHZhbGlkYXRlKGNvbmZpZzogYW55LCBzY2hlbWE6IGFueSk6IHsgaXNWYWxpZDogYm9vbGVhbjsgZXJyb3JzOiBzdHJpbmdbXSB9O1xyXG4gIGlzQXZhaWxhYmxlKCk6IGJvb2xlYW47XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBKb2kgdmFsaWRhdGlvbiBzY2hlbWEgcHJvdmlkZXIuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgSm9pVmFsaWRhdGlvblByb3ZpZGVyIGltcGxlbWVudHMgVmFsaWRhdGlvblNjaGVtYVByb3ZpZGVyIHtcclxuICBuYW1lID0gJ2pvaSc7XHJcbiAgcHJpdmF0ZSBqb2k6IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAvLyBUcnkgdG8gaW1wb3J0IEpvaSBkeW5hbWljYWxseVxyXG4gICAgICB0aGlzLmpvaSA9IHJlcXVpcmUoJ2pvaScpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgLy8gSm9pIGlzIG5vdCBhdmFpbGFibGVcclxuICAgICAgdGhpcy5qb2kgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNBdmFpbGFibGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5qb2kgIT09IG51bGw7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZShjb25maWc6IGFueSwgc2NoZW1hOiBhbnkpOiB7IGlzVmFsaWQ6IGJvb2xlYW47IGVycm9yczogc3RyaW5nW10gfSB7XHJcbiAgICBpZiAoIXRoaXMuam9pKSB7XHJcbiAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvcnM6IFsnSm9pIGlzIG5vdCBhdmFpbGFibGUnXSB9O1xyXG4gICAgfVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHsgZXJyb3IgfSA9IHRoaXMuam9pLmF0dGVtcHQgPyBcclxuICAgICAgICB7IGVycm9yOiBudWxsIH0gOlxyXG4gICAgICAgIHNjaGVtYS52YWxpZGF0ZShjb25maWcpO1xyXG5cclxuICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3JzID0gZXJyb3IuZGV0YWlscz8ubWFwKChkZXRhaWw6IGFueSkgPT4gZGV0YWlsLm1lc3NhZ2UpIHx8IFtlcnJvci5tZXNzYWdlXTtcclxuICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3JzIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIGVycm9yczogW10gfTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvciA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKTtcclxuICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yczogW3ZhbGlkYXRpb25FcnJvci5tZXNzYWdlXSB9O1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIENsYXNzLXZhbGlkYXRvciB2YWxpZGF0aW9uIHNjaGVtYSBwcm92aWRlci5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBDbGFzc1ZhbGlkYXRvclByb3ZpZGVyIGltcGxlbWVudHMgVmFsaWRhdGlvblNjaGVtYVByb3ZpZGVyIHtcclxuICBuYW1lID0gJ2NsYXNzLXZhbGlkYXRvcic7XHJcbiAgcHJpdmF0ZSBjbGFzc1ZhbGlkYXRvcjogYW55O1xyXG4gIHByaXZhdGUgY2xhc3NUcmFuc2Zvcm1lcjogYW55O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIFRyeSB0byBpbXBvcnQgY2xhc3MtdmFsaWRhdG9yIGFuZCBjbGFzcy10cmFuc2Zvcm1lciBkeW5hbWljYWxseVxyXG4gICAgICB0aGlzLmNsYXNzVmFsaWRhdG9yID0gcmVxdWlyZSgnY2xhc3MtdmFsaWRhdG9yJyk7XHJcbiAgICAgIHRoaXMuY2xhc3NUcmFuc2Zvcm1lciA9IHJlcXVpcmUoJ2NsYXNzLXRyYW5zZm9ybWVyJyk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAvLyBjbGFzcy12YWxpZGF0b3IgaXMgbm90IGF2YWlsYWJsZVxyXG4gICAgICB0aGlzLmNsYXNzVmFsaWRhdG9yID0gbnVsbDtcclxuICAgICAgdGhpcy5jbGFzc1RyYW5zZm9ybWVyID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzQXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2xhc3NWYWxpZGF0b3IgIT09IG51bGwgJiYgdGhpcy5jbGFzc1RyYW5zZm9ybWVyICE9PSBudWxsO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGUoY29uZmlnOiBhbnksIHNjaGVtYUNsYXNzOiBhbnkpOiB7IGlzVmFsaWQ6IGJvb2xlYW47IGVycm9yczogc3RyaW5nW10gfSB7XHJcbiAgICBpZiAoIXRoaXMuY2xhc3NWYWxpZGF0b3IgfHwgIXRoaXMuY2xhc3NUcmFuc2Zvcm1lcikge1xyXG4gICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3JzOiBbJ2NsYXNzLXZhbGlkYXRvciBvciBjbGFzcy10cmFuc2Zvcm1lciBpcyBub3QgYXZhaWxhYmxlJ10gfTtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICAvLyBUcmFuc2Zvcm0gcGxhaW4gb2JqZWN0IHRvIGNsYXNzIGluc3RhbmNlXHJcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5jbGFzc1RyYW5zZm9ybWVyLnBsYWluVG9DbGFzcyhzY2hlbWFDbGFzcywgY29uZmlnKTtcclxuICAgICAgXHJcbiAgICAgIC8vIFZhbGlkYXRlIHRoZSBpbnN0YW5jZVxyXG4gICAgICBjb25zdCBlcnJvcnMgPSB0aGlzLmNsYXNzVmFsaWRhdG9yLnZhbGlkYXRlU3luYyhpbnN0YW5jZSk7XHJcbiAgICAgIFxyXG4gICAgICBpZiAoZXJyb3JzICYmIGVycm9ycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlcyA9IGVycm9ycy5tYXAoKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGNvbnN0cmFpbnRzID0gZXJyb3IuY29uc3RyYWludHMgfHwge307XHJcbiAgICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhjb25zdHJhaW50cykuam9pbignLCAnKTtcclxuICAgICAgICB9KS5maWx0ZXIoKG1zZzogc3RyaW5nKSA9PiBtc2cubGVuZ3RoID4gMCk7XHJcblxyXG4gICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvcnM6IGVycm9yTWVzc2FnZXMgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHsgaXNWYWxpZDogdHJ1ZSwgZXJyb3JzOiBbXSB9O1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc3QgdmFsaWRhdGlvbkVycm9yID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpO1xyXG4gICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3JzOiBbdmFsaWRhdGlvbkVycm9yLm1lc3NhZ2VdIH07XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQ3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb24gcHJvdmlkZXIuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQ3VzdG9tVmFsaWRhdGlvblByb3ZpZGVyIGltcGxlbWVudHMgVmFsaWRhdGlvblNjaGVtYVByb3ZpZGVyIHtcclxuICBuYW1lID0gJ2N1c3RvbSc7XHJcblxyXG4gIGlzQXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZShjb25maWc6IGFueSwgdmFsaWRhdGlvbkZuOiAoY29uZmlnOiBhbnkpID0+IHN0cmluZ1tdIHwgdm9pZCk6IHsgaXNWYWxpZDogYm9vbGVhbjsgZXJyb3JzOiBzdHJpbmdbXSB9IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRpb25Gbihjb25maWcpO1xyXG4gICAgICBcclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSAmJiByZXN1bHQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvcnM6IHJlc3VsdCB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4geyBpc1ZhbGlkOiB0cnVlLCBlcnJvcnM6IFtdIH07XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zdCB2YWxpZGF0aW9uRXJyb3IgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSk7XHJcbiAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvcnM6IFt2YWxpZGF0aW9uRXJyb3IubWVzc2FnZV0gfTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZXJ2aWNlIGZvciBpbnRlZ3JhdGluZyBBV1Mtc291cmNlZCBjb25maWd1cmF0aW9uIHdpdGggQG5lc3Rqcy9jb25maWcgdmFsaWRhdGlvbi5cclxuICogU3VwcG9ydHMgSm9pLCBjbGFzcy12YWxpZGF0b3IsIGFuZCBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbnMuXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uSW50ZWdyYXRpb25TZXJ2aWNlIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlciA9IG5ldyBMb2dnZXIoVmFsaWRhdGlvbkludGVncmF0aW9uU2VydmljZS5uYW1lKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHZhbGlkYXRpb25Qcm92aWRlcnM6IE1hcDxzdHJpbmcsIFZhbGlkYXRpb25TY2hlbWFQcm92aWRlcj4gPSBuZXcgTWFwKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgLy8gUmVnaXN0ZXIgYXZhaWxhYmxlIHZhbGlkYXRpb24gcHJvdmlkZXJzXHJcbiAgICB0aGlzLnJlZ2lzdGVyVmFsaWRhdGlvblByb3ZpZGVycygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgdmFsaWRhdGVkIGNvbmZpZ3VyYXRpb24gZmFjdG9yeS5cclxuICAgKiBUaGlzIGZhY3Rvcnkgd2lsbCB2YWxpZGF0ZSBBV1Mtc291cmNlZCBjb25maWd1cmF0aW9uIGJlZm9yZSByZXR1cm5pbmcgaXQuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIG5hbWVzcGFjZSAtIE9wdGlvbmFsIG5hbWVzcGFjZSBmb3IgdGhlIGNvbmZpZ3VyYXRpb25cclxuICAgKiBAcGFyYW0gY29uZmlnIC0gQ29uZmlndXJhdGlvbiBkYXRhIHRvIHZhbGlkYXRlXHJcbiAgICogQHBhcmFtIHZhbGlkYXRpb25TY2hlbWEgLSBWYWxpZGF0aW9uIHNjaGVtYSAoSm9pIHNjaGVtYSwgY2xhc3MtdmFsaWRhdG9yIGNsYXNzLCBvciBjdXN0b20gZnVuY3Rpb24pXHJcbiAgICogQHBhcmFtIHZhbGlkYXRpb25UeXBlIC0gVHlwZSBvZiB2YWxpZGF0aW9uICgnam9pJywgJ2NsYXNzLXZhbGlkYXRvcicsIG9yICdjdXN0b20nKVxyXG4gICAqIEBwYXJhbSBzb3VyY2VzIC0gQ29uZmlndXJhdGlvbiBzb3VyY2VzIG1ldGFkYXRhXHJcbiAgICogQHJldHVybnMgVmFsaWRhdGVkIGNvbmZpZ3VyYXRpb24gZmFjdG9yeVxyXG4gICAqL1xyXG4gIGNyZWF0ZVZhbGlkYXRlZEZhY3RvcnkoXHJcbiAgICBuYW1lc3BhY2U6IHN0cmluZyB8IHVuZGVmaW5lZCxcclxuICAgIGNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55PixcclxuICAgIHZhbGlkYXRpb25TY2hlbWE6IGFueSxcclxuICAgIHZhbGlkYXRpb25UeXBlOiAnam9pJyB8ICdjbGFzcy12YWxpZGF0b3InIHwgJ2N1c3RvbScsXHJcbiAgICBzb3VyY2VzPzogQ29uZmlndXJhdGlvblNvdXJjZVtdXHJcbiAgKTogQ29uZmlnRmFjdG9yeSB7XHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgQ3JlYXRpbmcgdmFsaWRhdGVkIGZhY3RvcnkgZm9yIG5hbWVzcGFjZTogJHtuYW1lc3BhY2UgfHwgJ2RlZmF1bHQnfSB3aXRoICR7dmFsaWRhdGlvblR5cGV9IHZhbGlkYXRpb25gKTtcclxuXHJcbiAgICBjb25zdCBmYWN0b3J5ID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgVmFsaWRhdGVkIGZhY3RvcnkgY2FsbGVkIGZvciBuYW1lc3BhY2U6ICR7bmFtZXNwYWNlIHx8ICdkZWZhdWx0J31gKTtcclxuXHJcbiAgICAgIC8vIFZhbGlkYXRlIGNvbmZpZ3VyYXRpb25cclxuICAgICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IHRoaXMudmFsaWRhdGVDb25maWd1cmF0aW9uKGNvbmZpZywgdmFsaWRhdGlvblNjaGVtYSwgdmFsaWRhdGlvblR5cGUsIHNvdXJjZXMpO1xyXG5cclxuICAgICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0LmlzVmFsaWQpIHtcclxuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgQ29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIGZhaWxlZCBmb3IgJHtuYW1lc3BhY2UgfHwgJ2RlZmF1bHQnfTogJHt2YWxpZGF0aW9uUmVzdWx0LmVycm9ycy5qb2luKCcsICcpfWA7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBDcmVhdGUgZGV0YWlsZWQgZXJyb3Igd2l0aCBzb3VyY2UgaW5mb3JtYXRpb25cclxuICAgICAgICBjb25zdCBkZXRhaWxlZEVycm9yID0gdGhpcy5jcmVhdGVWYWxpZGF0aW9uRXJyb3IoXHJcbiAgICAgICAgICBuYW1lc3BhY2UgfHwgJ2RlZmF1bHQnLFxyXG4gICAgICAgICAgdmFsaWRhdGlvblJlc3VsdC5lcnJvcnMsXHJcbiAgICAgICAgICBzb3VyY2VzXHJcbiAgICAgICAgKTtcclxuICAgICAgICBcclxuICAgICAgICB0aHJvdyBkZXRhaWxlZEVycm9yO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgQ29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIHBhc3NlZCBmb3IgbmFtZXNwYWNlOiAke25hbWVzcGFjZSB8fCAnZGVmYXVsdCd9YCk7XHJcbiAgICAgIHJldHVybiBjb25maWc7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEFkZCB2YWxpZGF0aW9uIG1ldGFkYXRhXHJcbiAgICAoZmFjdG9yeSBhcyBhbnkpLl9faXNWYWxpZGF0ZWRGYWN0b3J5ID0gdHJ1ZTtcclxuICAgIChmYWN0b3J5IGFzIGFueSkuX192YWxpZGF0aW9uVHlwZSA9IHZhbGlkYXRpb25UeXBlO1xyXG4gICAgKGZhY3RvcnkgYXMgYW55KS5fX25hbWVzcGFjZSA9IG5hbWVzcGFjZTtcclxuICAgIChmYWN0b3J5IGFzIGFueSkuX19zb3VyY2VzID0gc291cmNlcz8ubWFwKHMgPT4gcy5uYW1lKSB8fCBbXTtcclxuXHJcbiAgICByZXR1cm4gZmFjdG9yeTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYXRlIGNvbmZpZ3VyYXRpb24gdXNpbmcgdGhlIHNwZWNpZmllZCB2YWxpZGF0aW9uIHR5cGUgYW5kIHNjaGVtYS5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gY29uZmlnIC0gQ29uZmlndXJhdGlvbiB0byB2YWxpZGF0ZVxyXG4gICAqIEBwYXJhbSBzY2hlbWEgLSBWYWxpZGF0aW9uIHNjaGVtYVxyXG4gICAqIEBwYXJhbSB2YWxpZGF0aW9uVHlwZSAtIFR5cGUgb2YgdmFsaWRhdGlvblxyXG4gICAqIEBwYXJhbSBzb3VyY2VzIC0gQ29uZmlndXJhdGlvbiBzb3VyY2VzIGZvciBlcnJvciByZXBvcnRpbmdcclxuICAgKiBAcmV0dXJucyBWYWxpZGF0aW9uIHJlc3VsdFxyXG4gICAqL1xyXG4gIHZhbGlkYXRlQ29uZmlndXJhdGlvbihcclxuICAgIGNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55PixcclxuICAgIHNjaGVtYTogYW55LFxyXG4gICAgdmFsaWRhdGlvblR5cGU6ICdqb2knIHwgJ2NsYXNzLXZhbGlkYXRvcicgfCAnY3VzdG9tJyxcclxuICAgIHNvdXJjZXM/OiBDb25maWd1cmF0aW9uU291cmNlW11cclxuICApOiB7IGlzVmFsaWQ6IGJvb2xlYW47IGVycm9yczogc3RyaW5nW107IHdhcm5pbmdzOiBzdHJpbmdbXSB9IHtcclxuICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy52YWxpZGF0aW9uUHJvdmlkZXJzLmdldCh2YWxpZGF0aW9uVHlwZSk7XHJcbiAgICBcclxuICAgIGlmICghcHJvdmlkZXIpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcclxuICAgICAgICBlcnJvcnM6IFtgVmFsaWRhdGlvbiBwcm92aWRlciAnJHt2YWxpZGF0aW9uVHlwZX0nIGlzIG5vdCBhdmFpbGFibGVgXSxcclxuICAgICAgICB3YXJuaW5nczogW11cclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXByb3ZpZGVyLmlzQXZhaWxhYmxlKCkpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcclxuICAgICAgICBlcnJvcnM6IFtgVmFsaWRhdGlvbiBwcm92aWRlciAnJHt2YWxpZGF0aW9uVHlwZX0nIGlzIG5vdCBwcm9wZXJseSBjb25maWd1cmVkYF0sXHJcbiAgICAgICAgd2FybmluZ3M6IFtdXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmVzdWx0ID0gcHJvdmlkZXIudmFsaWRhdGUoY29uZmlnLCBzY2hlbWEpO1xyXG4gICAgICBcclxuICAgICAgLy8gQWRkIHNvdXJjZSBpbmZvcm1hdGlvbiB0byBlcnJvcnNcclxuICAgICAgY29uc3QgZW5oYW5jZWRFcnJvcnMgPSByZXN1bHQuZXJyb3JzLm1hcChlcnJvciA9PiBcclxuICAgICAgICB0aGlzLmVuaGFuY2VFcnJvcldpdGhTb3VyY2VJbmZvKGVycm9yLCBzb3VyY2VzKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBpc1ZhbGlkOiByZXN1bHQuaXNWYWxpZCxcclxuICAgICAgICBlcnJvcnM6IGVuaGFuY2VkRXJyb3JzLFxyXG4gICAgICAgIHdhcm5pbmdzOiBbXVxyXG4gICAgICB9O1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc3QgdmFsaWRhdGlvbkVycm9yID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxyXG4gICAgICAgIGVycm9yczogW3ZhbGlkYXRpb25FcnJvci5tZXNzYWdlXSxcclxuICAgICAgICB3YXJuaW5nczogW11cclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhIGZhY3RvcnkgdGhhdCB2YWxpZGF0ZXMgY29uZmlndXJhdGlvbiBhbmQgcHJvdmlkZXMgZmFsbGJhY2sgdmFsdWVzLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBuYW1lc3BhY2UgLSBPcHRpb25hbCBuYW1lc3BhY2VcclxuICAgKiBAcGFyYW0gY29uZmlnIC0gQ29uZmlndXJhdGlvbiBkYXRhXHJcbiAgICogQHBhcmFtIHZhbGlkYXRpb25TY2hlbWEgLSBWYWxpZGF0aW9uIHNjaGVtYVxyXG4gICAqIEBwYXJhbSB2YWxpZGF0aW9uVHlwZSAtIFR5cGUgb2YgdmFsaWRhdGlvblxyXG4gICAqIEBwYXJhbSBmYWxsYmFja0NvbmZpZyAtIEZhbGxiYWNrIGNvbmZpZ3VyYXRpb24gdG8gdXNlIGlmIHZhbGlkYXRpb24gZmFpbHNcclxuICAgKiBAcGFyYW0gc291cmNlcyAtIENvbmZpZ3VyYXRpb24gc291cmNlc1xyXG4gICAqIEByZXR1cm5zIEZhY3Rvcnkgd2l0aCB2YWxpZGF0aW9uIGFuZCBmYWxsYmFja1xyXG4gICAqL1xyXG4gIGNyZWF0ZVZhbGlkYXRlZEZhY3RvcnlXaXRoRmFsbGJhY2soXHJcbiAgICBuYW1lc3BhY2U6IHN0cmluZyB8IHVuZGVmaW5lZCxcclxuICAgIGNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55PixcclxuICAgIHZhbGlkYXRpb25TY2hlbWE6IGFueSxcclxuICAgIHZhbGlkYXRpb25UeXBlOiAnam9pJyB8ICdjbGFzcy12YWxpZGF0b3InIHwgJ2N1c3RvbScsXHJcbiAgICBmYWxsYmFja0NvbmZpZzogUmVjb3JkPHN0cmluZywgYW55PixcclxuICAgIHNvdXJjZXM/OiBDb25maWd1cmF0aW9uU291cmNlW11cclxuICApOiBDb25maWdGYWN0b3J5IHtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBDcmVhdGluZyB2YWxpZGF0ZWQgZmFjdG9yeSB3aXRoIGZhbGxiYWNrIGZvciBuYW1lc3BhY2U6ICR7bmFtZXNwYWNlIHx8ICdkZWZhdWx0J31gKTtcclxuXHJcbiAgICBjb25zdCBmYWN0b3J5ID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgVmFsaWRhdGVkIGZhY3Rvcnkgd2l0aCBmYWxsYmFjayBjYWxsZWQgZm9yIG5hbWVzcGFjZTogJHtuYW1lc3BhY2UgfHwgJ2RlZmF1bHQnfWApO1xyXG5cclxuICAgICAgLy8gVmFsaWRhdGUgY29uZmlndXJhdGlvblxyXG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gdGhpcy52YWxpZGF0ZUNvbmZpZ3VyYXRpb24oY29uZmlnLCB2YWxpZGF0aW9uU2NoZW1hLCB2YWxpZGF0aW9uVHlwZSwgc291cmNlcyk7XHJcblxyXG4gICAgICBpZiAoIXZhbGlkYXRpb25SZXN1bHQuaXNWYWxpZCkge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oYENvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBmYWlsZWQgZm9yICR7bmFtZXNwYWNlIHx8ICdkZWZhdWx0J30sIHVzaW5nIGZhbGxiYWNrOiAke3ZhbGlkYXRpb25SZXN1bHQuZXJyb3JzLmpvaW4oJywgJyl9YCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gVmFsaWRhdGUgZmFsbGJhY2sgY29uZmlndXJhdGlvblxyXG4gICAgICAgIGNvbnN0IGZhbGxiYWNrVmFsaWRhdGlvbiA9IHRoaXMudmFsaWRhdGVDb25maWd1cmF0aW9uKGZhbGxiYWNrQ29uZmlnLCB2YWxpZGF0aW9uU2NoZW1hLCB2YWxpZGF0aW9uVHlwZSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGZhbGxiYWNrVmFsaWRhdGlvbi5pc1ZhbGlkKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsbGJhY2tDb25maWc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIEJvdGggcHJpbWFyeSBhbmQgZmFsbGJhY2sgZmFpbGVkXHJcbiAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgQm90aCBwcmltYXJ5IGFuZCBmYWxsYmFjayBjb25maWd1cmF0aW9uIHZhbGlkYXRpb24gZmFpbGVkIGZvciAke25hbWVzcGFjZSB8fCAnZGVmYXVsdCd9YDtcclxuICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGVycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIGNvbnN0IGRldGFpbGVkRXJyb3IgPSB0aGlzLmNyZWF0ZVZhbGlkYXRpb25FcnJvcihcclxuICAgICAgICAgICAgbmFtZXNwYWNlIHx8ICdkZWZhdWx0JyxcclxuICAgICAgICAgICAgWy4uLnZhbGlkYXRpb25SZXN1bHQuZXJyb3JzLCAuLi5mYWxsYmFja1ZhbGlkYXRpb24uZXJyb3JzXSxcclxuICAgICAgICAgICAgc291cmNlc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgdGhyb3cgZGV0YWlsZWRFcnJvcjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gcGFzc2VkIGZvciBuYW1lc3BhY2U6ICR7bmFtZXNwYWNlIHx8ICdkZWZhdWx0J31gKTtcclxuICAgICAgcmV0dXJuIGNvbmZpZztcclxuICAgIH07XHJcblxyXG4gICAgLy8gQWRkIG1ldGFkYXRhXHJcbiAgICAoZmFjdG9yeSBhcyBhbnkpLl9faXNWYWxpZGF0ZWRGYWN0b3J5ID0gdHJ1ZTtcclxuICAgIChmYWN0b3J5IGFzIGFueSkuX19oYXNGYWxsYmFjayA9IHRydWU7XHJcbiAgICAoZmFjdG9yeSBhcyBhbnkpLl9fdmFsaWRhdGlvblR5cGUgPSB2YWxpZGF0aW9uVHlwZTtcclxuICAgIChmYWN0b3J5IGFzIGFueSkuX19uYW1lc3BhY2UgPSBuYW1lc3BhY2U7XHJcbiAgICAoZmFjdG9yeSBhcyBhbnkpLl9fc291cmNlcyA9IHNvdXJjZXM/Lm1hcChzID0+IHMubmFtZSkgfHwgW107XHJcblxyXG4gICAgcmV0dXJuIGZhY3Rvcnk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGF0ZSBtdWx0aXBsZSBuYW1lc3BhY2UgY29uZmlndXJhdGlvbnMuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIG5hbWVzcGFjZWRDb25maWcgLSBDb25maWd1cmF0aW9uIG9yZ2FuaXplZCBieSBuYW1lc3BhY2VcclxuICAgKiBAcGFyYW0gdmFsaWRhdGlvblNjaGVtYXMgLSBWYWxpZGF0aW9uIHNjaGVtYXMgZm9yIGVhY2ggbmFtZXNwYWNlXHJcbiAgICogQHBhcmFtIHZhbGlkYXRpb25UeXBlIC0gVHlwZSBvZiB2YWxpZGF0aW9uXHJcbiAgICogQHBhcmFtIHNvdXJjZXMgLSBDb25maWd1cmF0aW9uIHNvdXJjZXNcclxuICAgKiBAcmV0dXJucyBWYWxpZGF0aW9uIHJlc3VsdHMgZm9yIGVhY2ggbmFtZXNwYWNlXHJcbiAgICovXHJcbiAgdmFsaWRhdGVOYW1lc3BhY2VkQ29uZmlndXJhdGlvbihcclxuICAgIG5hbWVzcGFjZWRDb25maWc6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIGFueT4+LFxyXG4gICAgdmFsaWRhdGlvblNjaGVtYXM6IFJlY29yZDxzdHJpbmcsIGFueT4sXHJcbiAgICB2YWxpZGF0aW9uVHlwZTogJ2pvaScgfCAnY2xhc3MtdmFsaWRhdG9yJyB8ICdjdXN0b20nLFxyXG4gICAgc291cmNlcz86IENvbmZpZ3VyYXRpb25Tb3VyY2VbXVxyXG4gICk6IFJlY29yZDxzdHJpbmcsIHsgaXNWYWxpZDogYm9vbGVhbjsgZXJyb3JzOiBzdHJpbmdbXTsgd2FybmluZ3M6IHN0cmluZ1tdIH0+IHtcclxuICAgIGNvbnN0IHJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIHsgaXNWYWxpZDogYm9vbGVhbjsgZXJyb3JzOiBzdHJpbmdbXTsgd2FybmluZ3M6IHN0cmluZ1tdIH0+ID0ge307XHJcblxyXG4gICAgZm9yIChjb25zdCBbbmFtZXNwYWNlLCBjb25maWddIG9mIE9iamVjdC5lbnRyaWVzKG5hbWVzcGFjZWRDb25maWcpKSB7XHJcbiAgICAgIGNvbnN0IHNjaGVtYSA9IHZhbGlkYXRpb25TY2hlbWFzW25hbWVzcGFjZV07XHJcbiAgICAgIFxyXG4gICAgICBpZiAoc2NoZW1hKSB7XHJcbiAgICAgICAgcmVzdWx0c1tuYW1lc3BhY2VdID0gdGhpcy52YWxpZGF0ZUNvbmZpZ3VyYXRpb24oY29uZmlnLCBzY2hlbWEsIHZhbGlkYXRpb25UeXBlLCBzb3VyY2VzKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXN1bHRzW25hbWVzcGFjZV0gPSB7XHJcbiAgICAgICAgICBpc1ZhbGlkOiB0cnVlLFxyXG4gICAgICAgICAgZXJyb3JzOiBbXSxcclxuICAgICAgICAgIHdhcm5pbmdzOiBbYE5vIHZhbGlkYXRpb24gc2NoZW1hIHByb3ZpZGVkIGZvciBuYW1lc3BhY2U6ICR7bmFtZXNwYWNlfWBdXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgd2hpY2ggdmFsaWRhdGlvbiBwcm92aWRlcnMgYXJlIGF2YWlsYWJsZS5cclxuICAgKiBcclxuICAgKiBAcmV0dXJucyBPYmplY3QgaW5kaWNhdGluZyBhdmFpbGFiaWxpdHkgb2YgZWFjaCBwcm92aWRlclxyXG4gICAqL1xyXG4gIGdldEF2YWlsYWJsZVZhbGlkYXRpb25Qcm92aWRlcnMoKTogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4ge1xyXG4gICAgY29uc3QgYXZhaWxhYmlsaXR5OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xyXG4gICAgXHJcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBwcm92aWRlcl0gb2YgdGhpcy52YWxpZGF0aW9uUHJvdmlkZXJzKSB7XHJcbiAgICAgIGF2YWlsYWJpbGl0eVtuYW1lXSA9IHByb3ZpZGVyLmlzQXZhaWxhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGF2YWlsYWJpbGl0eTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB2YWxpZGF0aW9uIHJlY29tbWVuZGF0aW9ucyBiYXNlZCBvbiBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gY29uZmlnIC0gQ29uZmlndXJhdGlvbiB0byBhbmFseXplXHJcbiAgICogQHJldHVybnMgVmFsaWRhdGlvbiByZWNvbW1lbmRhdGlvbnNcclxuICAgKi9cclxuICBnZXRWYWxpZGF0aW9uUmVjb21tZW5kYXRpb25zKGNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55Pik6IHtcclxuICAgIHJlY29tbWVuZGVkUHJvdmlkZXI6IHN0cmluZztcclxuICAgIHJlYXNvbnM6IHN0cmluZ1tdO1xyXG4gICAgZXhhbXBsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XHJcbiAgfSB7XHJcbiAgICBjb25zdCBhbmFseXNpcyA9IHRoaXMuYW5hbHl6ZUNvbmZpZ3VyYXRpb25TdHJ1Y3R1cmUoY29uZmlnKTtcclxuICAgIFxyXG4gICAgbGV0IHJlY29tbWVuZGVkUHJvdmlkZXIgPSAnY3VzdG9tJztcclxuICAgIGNvbnN0IHJlYXNvbnM6IHN0cmluZ1tdID0gW107XHJcbiAgICBjb25zdCBleGFtcGxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xyXG5cclxuICAgIC8vIERldGVybWluZSBiZXN0IHZhbGlkYXRpb24gYXBwcm9hY2hcclxuICAgIGlmIChhbmFseXNpcy5oYXNDb21wbGV4TmVzdGluZyB8fCBhbmFseXNpcy5oYXNBcnJheXMpIHtcclxuICAgICAgaWYgKHRoaXMudmFsaWRhdGlvblByb3ZpZGVycy5nZXQoJ2pvaScpPy5pc0F2YWlsYWJsZSgpKSB7XHJcbiAgICAgICAgcmVjb21tZW5kZWRQcm92aWRlciA9ICdqb2knO1xyXG4gICAgICAgIHJlYXNvbnMucHVzaCgnQ29tcGxleCBuZXN0ZWQgc3RydWN0dXJlIGRldGVjdGVkIC0gSm9pIHByb3ZpZGVzIGV4Y2VsbGVudCBuZXN0ZWQgdmFsaWRhdGlvbicpO1xyXG4gICAgICAgIGV4YW1wbGVzWydqb2knXSA9IHRoaXMuZ2VuZXJhdGVKb2lFeGFtcGxlKGNvbmZpZyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoYW5hbHlzaXMuaGFzVHlwZWRWYWx1ZXMgJiYgdGhpcy52YWxpZGF0aW9uUHJvdmlkZXJzLmdldCgnY2xhc3MtdmFsaWRhdG9yJyk/LmlzQXZhaWxhYmxlKCkpIHtcclxuICAgICAgcmVjb21tZW5kZWRQcm92aWRlciA9ICdjbGFzcy12YWxpZGF0b3InO1xyXG4gICAgICByZWFzb25zLnB1c2goJ1R5cGVkIHZhbHVlcyBkZXRlY3RlZCAtIGNsYXNzLXZhbGlkYXRvciBwcm92aWRlcyBzdHJvbmcgdHlwZSBzYWZldHknKTtcclxuICAgICAgZXhhbXBsZXNbJ2NsYXNzLXZhbGlkYXRvciddID0gdGhpcy5nZW5lcmF0ZUNsYXNzVmFsaWRhdG9yRXhhbXBsZShjb25maWcpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFsd2F5cyBwcm92aWRlIGN1c3RvbSBleGFtcGxlXHJcbiAgICBleGFtcGxlc1snY3VzdG9tJ10gPSB0aGlzLmdlbmVyYXRlQ3VzdG9tVmFsaWRhdGlvbkV4YW1wbGUoY29uZmlnKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICByZWNvbW1lbmRlZFByb3ZpZGVyLFxyXG4gICAgICByZWFzb25zLFxyXG4gICAgICBleGFtcGxlc1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZ2lzdGVyIHZhbGlkYXRpb24gcHJvdmlkZXJzLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVnaXN0ZXJWYWxpZGF0aW9uUHJvdmlkZXJzKCk6IHZvaWQge1xyXG4gICAgdGhpcy52YWxpZGF0aW9uUHJvdmlkZXJzLnNldCgnam9pJywgbmV3IEpvaVZhbGlkYXRpb25Qcm92aWRlcigpKTtcclxuICAgIHRoaXMudmFsaWRhdGlvblByb3ZpZGVycy5zZXQoJ2NsYXNzLXZhbGlkYXRvcicsIG5ldyBDbGFzc1ZhbGlkYXRvclByb3ZpZGVyKCkpO1xyXG4gICAgdGhpcy52YWxpZGF0aW9uUHJvdmlkZXJzLnNldCgnY3VzdG9tJywgbmV3IEN1c3RvbVZhbGlkYXRpb25Qcm92aWRlcigpKTtcclxuXHJcbiAgICAvLyBMb2cgYXZhaWxhYmxlIHByb3ZpZGVyc1xyXG4gICAgY29uc3QgYXZhaWxhYmxlID0gQXJyYXkuZnJvbSh0aGlzLnZhbGlkYXRpb25Qcm92aWRlcnMuZW50cmllcygpKVxyXG4gICAgICAuZmlsdGVyKChbXywgcHJvdmlkZXJdKSA9PiBwcm92aWRlci5pc0F2YWlsYWJsZSgpKVxyXG4gICAgICAubWFwKChbbmFtZV0pID0+IG5hbWUpO1xyXG5cclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBBdmFpbGFibGUgdmFsaWRhdGlvbiBwcm92aWRlcnM6ICR7YXZhaWxhYmxlLmpvaW4oJywgJyl9YCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYSBkZXRhaWxlZCB2YWxpZGF0aW9uIGVycm9yIHdpdGggc291cmNlIGluZm9ybWF0aW9uLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBuYW1lc3BhY2UgLSBOYW1lc3BhY2UgdGhhdCBmYWlsZWQgdmFsaWRhdGlvblxyXG4gICAqIEBwYXJhbSBlcnJvcnMgLSBWYWxpZGF0aW9uIGVycm9yc1xyXG4gICAqIEBwYXJhbSBzb3VyY2VzIC0gQ29uZmlndXJhdGlvbiBzb3VyY2VzXHJcbiAgICogQHJldHVybnMgRGV0YWlsZWQgZXJyb3JcclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZVZhbGlkYXRpb25FcnJvcihcclxuICAgIG5hbWVzcGFjZTogc3RyaW5nLFxyXG4gICAgZXJyb3JzOiBzdHJpbmdbXSxcclxuICAgIHNvdXJjZXM/OiBDb25maWd1cmF0aW9uU291cmNlW11cclxuICApOiBFcnJvciB7XHJcbiAgICBsZXQgbWVzc2FnZSA9IGBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gZmFpbGVkIGZvciBuYW1lc3BhY2UgJyR7bmFtZXNwYWNlfSc6XFxuYDtcclxuICAgIG1lc3NhZ2UgKz0gZXJyb3JzLm1hcChlcnJvciA9PiBgICAtICR7ZXJyb3J9YCkuam9pbignXFxuJyk7XHJcblxyXG4gICAgaWYgKHNvdXJjZXMgJiYgc291cmNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIG1lc3NhZ2UgKz0gJ1xcblxcbkNvbmZpZ3VyYXRpb24gc291cmNlczpcXG4nO1xyXG4gICAgICBtZXNzYWdlICs9IHNvdXJjZXMubWFwKHNvdXJjZSA9PiBcclxuICAgICAgICBgICAtICR7c291cmNlLm5hbWV9ICgke3NvdXJjZS50eXBlfSk6ICR7T2JqZWN0LmtleXMoc291cmNlLmRhdGEpLmxlbmd0aH0ga2V5c2BcclxuICAgICAgKS5qb2luKCdcXG4nKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlKTtcclxuICAgIGVycm9yLm5hbWUgPSAnQ29uZmlndXJhdGlvblZhbGlkYXRpb25FcnJvcic7XHJcbiAgICAoZXJyb3IgYXMgYW55KS5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7XHJcbiAgICAoZXJyb3IgYXMgYW55KS52YWxpZGF0aW9uRXJyb3JzID0gZXJyb3JzO1xyXG4gICAgKGVycm9yIGFzIGFueSkuc291cmNlcyA9IHNvdXJjZXM7XHJcblxyXG4gICAgcmV0dXJuIGVycm9yO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW5oYW5jZSBlcnJvciBtZXNzYWdlIHdpdGggc291cmNlIGluZm9ybWF0aW9uLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBlcnJvciAtIE9yaWdpbmFsIGVycm9yIG1lc3NhZ2VcclxuICAgKiBAcGFyYW0gc291cmNlcyAtIENvbmZpZ3VyYXRpb24gc291cmNlc1xyXG4gICAqIEByZXR1cm5zIEVuaGFuY2VkIGVycm9yIG1lc3NhZ2VcclxuICAgKi9cclxuICBwcml2YXRlIGVuaGFuY2VFcnJvcldpdGhTb3VyY2VJbmZvKGVycm9yOiBzdHJpbmcsIHNvdXJjZXM/OiBDb25maWd1cmF0aW9uU291cmNlW10pOiBzdHJpbmcge1xyXG4gICAgaWYgKCFzb3VyY2VzIHx8IHNvdXJjZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBlcnJvcjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzb3VyY2VOYW1lcyA9IHNvdXJjZXMubWFwKHMgPT4gcy5uYW1lKS5qb2luKCcsICcpO1xyXG4gICAgcmV0dXJuIGAke2Vycm9yfSAoZnJvbSBzb3VyY2VzOiAke3NvdXJjZU5hbWVzfSlgO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQW5hbHl6ZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSBmb3IgdmFsaWRhdGlvbiByZWNvbW1lbmRhdGlvbnMuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGNvbmZpZyAtIENvbmZpZ3VyYXRpb24gdG8gYW5hbHl6ZVxyXG4gICAqIEByZXR1cm5zIFN0cnVjdHVyZSBhbmFseXNpc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgYW5hbHl6ZUNvbmZpZ3VyYXRpb25TdHJ1Y3R1cmUoY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KToge1xyXG4gICAgaGFzQ29tcGxleE5lc3Rpbmc6IGJvb2xlYW47XHJcbiAgICBoYXNBcnJheXM6IGJvb2xlYW47XHJcbiAgICBoYXNUeXBlZFZhbHVlczogYm9vbGVhbjtcclxuICAgIGRlcHRoOiBudW1iZXI7XHJcbiAgfSB7XHJcbiAgICBsZXQgaGFzQ29tcGxleE5lc3RpbmcgPSBmYWxzZTtcclxuICAgIGxldCBoYXNBcnJheXMgPSBmYWxzZTtcclxuICAgIGxldCBoYXNUeXBlZFZhbHVlcyA9IGZhbHNlO1xyXG4gICAgbGV0IG1heERlcHRoID0gMDtcclxuXHJcbiAgICBjb25zdCBhbmFseXplID0gKG9iajogYW55LCBkZXB0aDogbnVtYmVyID0gMCk6IHZvaWQgPT4ge1xyXG4gICAgICBtYXhEZXB0aCA9IE1hdGgubWF4KG1heERlcHRoLCBkZXB0aCk7XHJcblxyXG4gICAgICBpZiAoZGVwdGggPiAyKSB7XHJcbiAgICAgICAgaGFzQ29tcGxleE5lc3RpbmcgPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIE9iamVjdC52YWx1ZXMob2JqKSkge1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgaGFzQXJyYXlzID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICAgIGFuYWx5emUodmFsdWUsIGRlcHRoICsgMSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgICBoYXNUeXBlZFZhbHVlcyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGFuYWx5emUoY29uZmlnKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBoYXNDb21wbGV4TmVzdGluZyxcclxuICAgICAgaGFzQXJyYXlzLFxyXG4gICAgICBoYXNUeXBlZFZhbHVlcyxcclxuICAgICAgZGVwdGg6IG1heERlcHRoXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2VuZXJhdGUgSm9pIHZhbGlkYXRpb24gZXhhbXBsZS5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gY29uZmlnIC0gQ29uZmlndXJhdGlvbiB0byBnZW5lcmF0ZSBleGFtcGxlIGZvclxyXG4gICAqIEByZXR1cm5zIEpvaSB2YWxpZGF0aW9uIGV4YW1wbGVcclxuICAgKi9cclxuICBwcml2YXRlIGdlbmVyYXRlSm9pRXhhbXBsZShjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgc2NoZW1hID0gdGhpcy5nZW5lcmF0ZUpvaVNjaGVtYUZyb21Db25maWcoY29uZmlnKTtcclxuICAgIHJldHVybiBgY29uc3QgSm9pID0gcmVxdWlyZSgnam9pJyk7XHJcblxyXG5jb25zdCBzY2hlbWEgPSAke3NjaGVtYX07XHJcblxyXG4vLyBVc2FnZSBpbiBmYWN0b3J5XHJcbmNvbnN0IGZhY3RvcnkgPSAoKSA9PiB7XHJcbiAgY29uc3QgY29uZmlnID0gbG9hZEF3c0NvbmZpZygpO1xyXG4gIGNvbnN0IHsgZXJyb3IsIHZhbHVlIH0gPSBzY2hlbWEudmFsaWRhdGUoY29uZmlnKTtcclxuICBpZiAoZXJyb3IpIHRocm93IGVycm9yO1xyXG4gIHJldHVybiB2YWx1ZTtcclxufTtgO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2VuZXJhdGUgY2xhc3MtdmFsaWRhdG9yIGV4YW1wbGUuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGNvbmZpZyAtIENvbmZpZ3VyYXRpb24gdG8gZ2VuZXJhdGUgZXhhbXBsZSBmb3JcclxuICAgKiBAcmV0dXJucyBjbGFzcy12YWxpZGF0b3IgZXhhbXBsZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2VuZXJhdGVDbGFzc1ZhbGlkYXRvckV4YW1wbGUoY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGNsYXNzRGVmaW5pdGlvbiA9IHRoaXMuZ2VuZXJhdGVDbGFzc0Zyb21Db25maWcoY29uZmlnKTtcclxuICAgIHJldHVybiBgaW1wb3J0IHsgSXNTdHJpbmcsIElzTnVtYmVyLCBJc09wdGlvbmFsLCB2YWxpZGF0ZVN5bmMgfSBmcm9tICdjbGFzcy12YWxpZGF0b3InO1xyXG5pbXBvcnQgeyBwbGFpblRvQ2xhc3MgfSBmcm9tICdjbGFzcy10cmFuc2Zvcm1lcic7XHJcblxyXG4ke2NsYXNzRGVmaW5pdGlvbn1cclxuXHJcbi8vIFVzYWdlIGluIGZhY3RvcnlcclxuY29uc3QgZmFjdG9yeSA9ICgpID0+IHtcclxuICBjb25zdCBjb25maWcgPSBsb2FkQXdzQ29uZmlnKCk7XHJcbiAgY29uc3QgaW5zdGFuY2UgPSBwbGFpblRvQ2xhc3MoQ29uZmlnQ2xhc3MsIGNvbmZpZyk7XHJcbiAgY29uc3QgZXJyb3JzID0gdmFsaWRhdGVTeW5jKGluc3RhbmNlKTtcclxuICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHRocm93IG5ldyBFcnJvcignVmFsaWRhdGlvbiBmYWlsZWQnKTtcclxuICByZXR1cm4gY29uZmlnO1xyXG59O2A7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZW5lcmF0ZSBjdXN0b20gdmFsaWRhdGlvbiBleGFtcGxlLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBjb25maWcgLSBDb25maWd1cmF0aW9uIHRvIGdlbmVyYXRlIGV4YW1wbGUgZm9yXHJcbiAgICogQHJldHVybnMgQ3VzdG9tIHZhbGlkYXRpb24gZXhhbXBsZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2VuZXJhdGVDdXN0b21WYWxpZGF0aW9uRXhhbXBsZShjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgdmFsaWRhdGlvbkNoZWNrcyA9IHRoaXMuZ2VuZXJhdGVWYWxpZGF0aW9uQ2hlY2tzKGNvbmZpZyk7XHJcbiAgICByZXR1cm4gYGNvbnN0IHZhbGlkYXRlQ29uZmlnID0gKGNvbmZpZykgPT4ge1xyXG4gIGNvbnN0IGVycm9ycyA9IFtdO1xyXG4gIFxyXG4ke3ZhbGlkYXRpb25DaGVja3N9XHJcbiAgXHJcbiAgcmV0dXJuIGVycm9ycztcclxufTtcclxuXHJcbi8vIFVzYWdlIGluIGZhY3RvcnlcclxuY29uc3QgZmFjdG9yeSA9ICgpID0+IHtcclxuICBjb25zdCBjb25maWcgPSBsb2FkQXdzQ29uZmlnKCk7XHJcbiAgY29uc3QgZXJyb3JzID0gdmFsaWRhdGVDb25maWcoY29uZmlnKTtcclxuICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHRocm93IG5ldyBFcnJvcihcXGBWYWxpZGF0aW9uIGZhaWxlZDogXFwke2Vycm9ycy5qb2luKCcsICcpfVxcYCk7XHJcbiAgcmV0dXJuIGNvbmZpZztcclxufTtgO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2VuZXJhdGUgSm9pIHNjaGVtYSBmcm9tIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBjb25maWcgLSBDb25maWd1cmF0aW9uIG9iamVjdFxyXG4gICAqIEByZXR1cm5zIEpvaSBzY2hlbWEgc3RyaW5nXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUpvaVNjaGVtYUZyb21Db25maWcoY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGdlbmVyYXRlU2NoZW1hID0gKG9iajogYW55KTogc3RyaW5nID0+IHtcclxuICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSByZXR1cm4gJ0pvaS5zdHJpbmcoKSc7XHJcbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJykgcmV0dXJuICdKb2kubnVtYmVyKCknO1xyXG4gICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gJ0pvaS5ib29sZWFuKCknO1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSByZXR1cm4gJ0pvaS5hcnJheSgpJztcclxuICAgICAgXHJcbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogIT09IG51bGwpIHtcclxuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gT2JqZWN0LmVudHJpZXMob2JqKVxyXG4gICAgICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgICAke2tleX06ICR7Z2VuZXJhdGVTY2hlbWEodmFsdWUpfWApXHJcbiAgICAgICAgICAuam9pbignLFxcbicpO1xyXG4gICAgICAgIHJldHVybiBgSm9pLm9iamVjdCh7XFxuJHtwcm9wZXJ0aWVzfVxcbn0pYDtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgcmV0dXJuICdKb2kuYW55KCknO1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gZ2VuZXJhdGVTY2hlbWEoY29uZmlnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlIGNsYXNzIGRlZmluaXRpb24gZnJvbSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gY29uZmlnIC0gQ29uZmlndXJhdGlvbiBvYmplY3RcclxuICAgKiBAcmV0dXJucyBDbGFzcyBkZWZpbml0aW9uIHN0cmluZ1xyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2VuZXJhdGVDbGFzc0Zyb21Db25maWcoY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHByb3BlcnRpZXMgPSBPYmplY3QuZW50cmllcyhjb25maWcpXHJcbiAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGRlY29yYXRvciA9IHRoaXMuZ2V0Q2xhc3NWYWxpZGF0b3JEZWNvcmF0b3IodmFsdWUpO1xyXG4gICAgICAgIHJldHVybiBgICAke2RlY29yYXRvcn1cXG4gICR7a2V5fTogJHt0aGlzLmdldFR5cGVTY3JpcHRUeXBlKHZhbHVlKX07YDtcclxuICAgICAgfSlcclxuICAgICAgLmpvaW4oJ1xcblxcbicpO1xyXG5cclxuICAgIHJldHVybiBgY2xhc3MgQ29uZmlnQ2xhc3Mge1xcbiR7cHJvcGVydGllc31cXG59YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlIHZhbGlkYXRpb24gY2hlY2tzIGZvciBjdXN0b20gdmFsaWRhdGlvbi5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gY29uZmlnIC0gQ29uZmlndXJhdGlvbiBvYmplY3RcclxuICAgKiBAcmV0dXJucyBWYWxpZGF0aW9uIGNoZWNrcyBzdHJpbmdcclxuICAgKi9cclxuICBwcml2YXRlIGdlbmVyYXRlVmFsaWRhdGlvbkNoZWNrcyhjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGNvbmZpZylcclxuICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2hlY2sgPSB0aGlzLmdldFZhbGlkYXRpb25DaGVjayhrZXksIHZhbHVlKTtcclxuICAgICAgICByZXR1cm4gYCAgJHtjaGVja31gO1xyXG4gICAgICB9KVxyXG4gICAgICAuam9pbignXFxuJyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgY2xhc3MtdmFsaWRhdG9yIGRlY29yYXRvciBmb3IgYSB2YWx1ZS5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBnZXQgZGVjb3JhdG9yIGZvclxyXG4gICAqIEByZXR1cm5zIERlY29yYXRvciBzdHJpbmdcclxuICAgKi9cclxuICBwcml2YXRlIGdldENsYXNzVmFsaWRhdG9yRGVjb3JhdG9yKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHJldHVybiAnQElzU3RyaW5nKCknO1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiAnQElzTnVtYmVyKCknO1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gJ0BJc0Jvb2xlYW4oKSc7XHJcbiAgICByZXR1cm4gJ0BJc09wdGlvbmFsKCknO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IFR5cGVTY3JpcHQgdHlwZSBmb3IgYSB2YWx1ZS5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBnZXQgdHlwZSBmb3JcclxuICAgKiBAcmV0dXJucyBUeXBlU2NyaXB0IHR5cGUgc3RyaW5nXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRUeXBlU2NyaXB0VHlwZSh2YWx1ZTogYW55KTogc3RyaW5nIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gJ3N0cmluZyc7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuICdudW1iZXInO1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gJ2Jvb2xlYW4nO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gJ2FueVtdJztcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSByZXR1cm4gJ29iamVjdCc7XHJcbiAgICByZXR1cm4gJ2FueSc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdmFsaWRhdGlvbiBjaGVjayBmb3IgY3VzdG9tIHZhbGlkYXRpb24uXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGtleSAtIENvbmZpZ3VyYXRpb24ga2V5XHJcbiAgICogQHBhcmFtIHZhbHVlIC0gQ29uZmlndXJhdGlvbiB2YWx1ZVxyXG4gICAqIEByZXR1cm5zIFZhbGlkYXRpb24gY2hlY2sgc3RyaW5nXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRWYWxpZGF0aW9uQ2hlY2soa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIGBpZiAoIWNvbmZpZy4ke2tleX0gfHwgdHlwZW9mIGNvbmZpZy4ke2tleX0gIT09ICdzdHJpbmcnKSBlcnJvcnMucHVzaCgnJHtrZXl9IG11c3QgYmUgYSBzdHJpbmcnKTtgO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgcmV0dXJuIGBpZiAoY29uZmlnLiR7a2V5fSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBjb25maWcuJHtrZXl9ICE9PSAnbnVtYmVyJykgZXJyb3JzLnB1c2goJyR7a2V5fSBtdXN0IGJlIGEgbnVtYmVyJyk7YDtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xyXG4gICAgICByZXR1cm4gYGlmIChjb25maWcuJHtrZXl9ID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIGNvbmZpZy4ke2tleX0gIT09ICdib29sZWFuJykgZXJyb3JzLnB1c2goJyR7a2V5fSBtdXN0IGJlIGEgYm9vbGVhbicpO2A7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYGlmIChjb25maWcuJHtrZXl9ID09PSB1bmRlZmluZWQpIGVycm9ycy5wdXNoKCcke2tleX0gaXMgcmVxdWlyZWQnKTtgO1xyXG4gIH1cclxufSJdfQ==
595
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1pbnRlZ3JhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2ludGVncmF0aW9uL3NlcnZpY2VzL3ZhbGlkYXRpb24taW50ZWdyYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQW9EO0FBYXBEOztHQUVHO0FBQ0gsTUFBYSxxQkFBcUI7SUFDaEMsSUFBSSxHQUFHLEtBQUssQ0FBQztJQUNMLEdBQUcsQ0FBTTtJQUVqQjtRQUNFLElBQUksQ0FBQztZQUNILGdDQUFnQztZQUNoQyxJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsdUJBQXVCO1lBQ3ZCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUM7SUFDM0IsQ0FBQztJQUVELFFBQVEsQ0FBQyxNQUFXLEVBQUUsTUFBVztRQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2QsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDO1FBQzlELENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxvRkFBb0Y7WUFDcEYsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ2pDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUN2QyxDQUFDO1lBRUQsTUFBTSxFQUFFLEtB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Z0MsR0FBRyx1QkFBdUIsQ0FBQztRQUMzSCxDQUFDO1FBQ0QsT0FBTyxjQUFjLEdBQUcsZ0NBQWdDLEdBQUcsaUJBQWlCLENBQUM7SUFDL0UsQ0FBQztDQUNGLENBQUE7QUE1aUJZLG9FQUE0Qjt1Q0FBNUIsNEJBQTRCO0lBRHhDLElBQUEsbUJBQVUsR0FBRTs7R0FDQSw0QkFBNEIsQ0E0aUJ4QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIExvZ2dlciB9IGZyb20gJ0BuZXN0anMvY29tbW9uJztcclxuaW1wb3J0IHsgQ29uZmlnRmFjdG9yeSB9IGZyb20gJ0BuZXN0anMvY29uZmlnJztcclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvblNvdXJjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY29uZmlndXJhdGlvbi1zb3VyY2UuaW50ZXJmYWNlJztcclxuXHJcbi8qKlxyXG4gKiBJbnRlcmZhY2UgZm9yIHZhbGlkYXRpb24gc2NoZW1hIHByb3ZpZGVycy5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGlvblNjaGVtYVByb3ZpZGVyIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgdmFsaWRhdGUoY29uZmlnOiBhbnksIHNjaGVtYTogYW55KTogeyBpc1ZhbGlkOiBib29sZWFuOyBlcnJvcnM6IHN0cmluZ1tdIH07XHJcbiAgaXNBdmFpbGFibGUoKTogYm9vbGVhbjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEpvaSB2YWxpZGF0aW9uIHNjaGVtYSBwcm92aWRlci5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBKb2lWYWxpZGF0aW9uUHJvdmlkZXIgaW1wbGVtZW50cyBWYWxpZGF0aW9uU2NoZW1hUHJvdmlkZXIge1xyXG4gIG5hbWUgPSAnam9pJztcclxuICBwcml2YXRlIGpvaTogYW55O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIFRyeSB0byBpbXBvcnQgSm9pIGR5bmFtaWNhbGx5XHJcbiAgICAgIHRoaXMuam9pID0gcmVxdWlyZSgnam9pJyk7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgLy8gSm9pIGlzIG5vdCBhdmFpbGFibGVcclxuICAgICAgdGhpcy5qb2kgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNBdmFpbGFibGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5qb2kgIT09IG51bGw7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZShjb25maWc6IGFueSwgc2NoZW1hOiBhbnkpOiB7IGlzVmFsaWQ6IGJvb2xlYW47IGVycm9yczogc3RyaW5nW10gfSB7XHJcbiAgICBpZiAoIXRoaXMuam9pKSB7XHJcbiAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvcnM6IFsnSm9pIGlzIG5vdCBhdmFpbGFibGUnXSB9O1xyXG4gICAgfVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIFVzZSBqb2kuYXR0ZW1wdCB3aGljaCB0aHJvd3Mgb24gdmFsaWRhdGlvbiBlcnJvciwgb3IgZmFsbCBiYWNrIHRvIHNjaGVtYS52YWxpZGF0ZVxyXG4gICAgICBpZiAodGhpcy5qb2kuYXR0ZW1wdCkge1xyXG4gICAgICAgIHRoaXMuam9pLmF0dGVtcHQoY29uZmlnLCBzY2hlbWEpO1xyXG4gICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIGVycm9yczogW10gfTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgY29uc3QgeyBlcnJvciB9ID0gc2NoZW1hLnZhbGlkYXRlKGNvbmZpZyk7XHJcbiAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgIGNvbnN0IGVycm9ycyA9IGVycm9yLmRldGFpbHM/Lm1hcCgoZGV0YWlsOiBhbnkpID0+IGRldGFpbC5tZXNzYWdlKSB8fCBbZXJyb3IubWVzc2FnZV07XHJcbiAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9ycyB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4geyBpc1ZhbGlkOiB0cnVlLCBlcnJvcnM6IFtdIH07XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zdCB2YWxpZGF0aW9uRXJyb3IgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSk7XHJcbiAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvcnM6IFt2YWxpZGF0aW9uRXJyb3IubWVzc2FnZV0gfTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDbGFzcy12YWxpZGF0b3IgdmFsaWRhdGlvbiBzY2hlbWEgcHJvdmlkZXIuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQ2xhc3NWYWxpZGF0b3JQcm92aWRlciBpbXBsZW1lbnRzIFZhbGlkYXRpb25TY2hlbWFQcm92aWRlciB7XHJcbiAgbmFtZSA9ICdjbGFzcy12YWxpZGF0b3InO1xyXG4gIHByaXZhdGUgY2xhc3NWYWxpZGF0b3I6IGFueTtcclxuICBwcml2YXRlIGNsYXNzVHJhbnNmb3JtZXI6IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAvLyBUcnkgdG8gaW1wb3J0IGNsYXNzLXZhbGlkYXRvciBhbmQgY2xhc3MtdHJhbnNmb3JtZXIgZHluYW1pY2FsbHlcclxuICAgICAgdGhpcy5jbGFzc1ZhbGlkYXRvciA9IHJlcXVpcmUoJ2NsYXNzLXZhbGlkYXRvcicpO1xyXG4gICAgICB0aGlzLmNsYXNzVHJhbnNmb3JtZXIgPSByZXF1aXJlKCdjbGFzcy10cmFuc2Zvcm1lcicpO1xyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgIC8vIGNsYXNzLXZhbGlkYXRvciBpcyBub3QgYXZhaWxhYmxlXHJcbiAgICAgIHRoaXMuY2xhc3NWYWxpZGF0b3IgPSBudWxsO1xyXG4gICAgICB0aGlzLmNsYXNzVHJhbnNmb3JtZXIgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNBdmFpbGFibGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jbGFzc1ZhbGlkYXRvciAhPT0gbnVsbCAmJiB0aGlzLmNsYXNzVHJhbnNmb3JtZXIgIT09IG51bGw7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZShjb25maWc6IGFueSwgc2NoZW1hQ2xhc3M6IGFueSk6IHsgaXNWYWxpZDogYm9vbGVhbjsgZXJyb3JzOiBzdHJpbmdbXSB9IHtcclxuICAgIGlmICghdGhpcy5jbGFzc1ZhbGlkYXRvciB8fCAhdGhpcy5jbGFzc1RyYW5zZm9ybWVyKSB7XHJcbiAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvcnM6IFsnY2xhc3MtdmFsaWRhdG9yIG9yIGNsYXNzLXRyYW5zZm9ybWVyIGlzIG5vdCBhdmFpbGFibGUnXSB9O1xyXG4gICAgfVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIFRyYW5zZm9ybSBwbGFpbiBvYmplY3QgdG8gY2xhc3MgaW5zdGFuY2VcclxuICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmNsYXNzVHJhbnNmb3JtZXIucGxhaW5Ub0NsYXNzKHNjaGVtYUNsYXNzLCBjb25maWcpO1xyXG4gICAgICBcclxuICAgICAgLy8gVmFsaWRhdGUgdGhlIGluc3RhbmNlXHJcbiAgICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuY2xhc3NWYWxpZGF0b3IudmFsaWRhdGVTeW5jKGluc3RhbmNlKTtcclxuICAgICAgXHJcbiAgICAgIGlmIChlcnJvcnMgJiYgZXJyb3JzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2VzID0gZXJyb3JzLm1hcCgoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgY29uc3RyYWludHMgPSBlcnJvci5jb25zdHJhaW50cyB8fCB7fTtcclxuICAgICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKGNvbnN0cmFpbnRzKS5qb2luKCcsICcpO1xyXG4gICAgICAgIH0pLmZpbHRlcigobXNnOiBzdHJpbmcpID0+IG1zZy5sZW5ndGggPiAwKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yczogZXJyb3JNZXNzYWdlcyB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4geyBpc1ZhbGlkOiB0cnVlLCBlcnJvcnM6IFtdIH07XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zdCB2YWxpZGF0aW9uRXJyb3IgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSk7XHJcbiAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvcnM6IFt2YWxpZGF0aW9uRXJyb3IubWVzc2FnZV0gfTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbiBwcm92aWRlci5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21WYWxpZGF0aW9uUHJvdmlkZXIgaW1wbGVtZW50cyBWYWxpZGF0aW9uU2NoZW1hUHJvdmlkZXIge1xyXG4gIG5hbWUgPSAnY3VzdG9tJztcclxuXHJcbiAgaXNBdmFpbGFibGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlKGNvbmZpZzogYW55LCB2YWxpZGF0aW9uRm46IChjb25maWc6IGFueSkgPT4gc3RyaW5nW10gfCB2b2lkKTogeyBpc1ZhbGlkOiBib29sZWFuOyBlcnJvcnM6IHN0cmluZ1tdIH0ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGlvbkZuKGNvbmZpZyk7XHJcbiAgICAgIFxyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpICYmIHJlc3VsdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yczogcmVzdWx0IH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIGVycm9yczogW10gfTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvciA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKTtcclxuICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yczogW3ZhbGlkYXRpb25FcnJvci5tZXNzYWdlXSB9O1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFNlcnZpY2UgZm9yIGludGVncmF0aW5nIEFXUy1zb3VyY2VkIGNvbmZpZ3VyYXRpb24gd2l0aCBAbmVzdGpzL2NvbmZpZyB2YWxpZGF0aW9uLlxyXG4gKiBTdXBwb3J0cyBKb2ksIGNsYXNzLXZhbGlkYXRvciwgYW5kIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy5cclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFZhbGlkYXRpb25JbnRlZ3JhdGlvblNlcnZpY2Uge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gbmV3IExvZ2dlcihWYWxpZGF0aW9uSW50ZWdyYXRpb25TZXJ2aWNlLm5hbWUpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgdmFsaWRhdGlvblByb3ZpZGVyczogTWFwPHN0cmluZywgVmFsaWRhdGlvblNjaGVtYVByb3ZpZGVyPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAvLyBSZWdpc3RlciBhdmFpbGFibGUgdmFsaWRhdGlvbiBwcm92aWRlcnNcclxuICAgIHRoaXMucmVnaXN0ZXJWYWxpZGF0aW9uUHJvdmlkZXJzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYSB2YWxpZGF0ZWQgY29uZmlndXJhdGlvbiBmYWN0b3J5LlxyXG4gICAqIFRoaXMgZmFjdG9yeSB3aWxsIHZhbGlkYXRlIEFXUy1zb3VyY2VkIGNvbmZpZ3VyYXRpb24gYmVmb3JlIHJldHVybmluZyBpdC5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gbmFtZXNwYWNlIC0gT3B0aW9uYWwgbmFtZXNwYWNlIGZvciB0aGUgY29uZmlndXJhdGlvblxyXG4gICAqIEBwYXJhbSBjb25maWcgLSBDb25maWd1cmF0aW9uIGRhdGEgdG8gdmFsaWRhdGVcclxuICAgKiBAcGFyYW0gdmFsaWRhdGlvblNjaGVtYSAtIFZhbGlkYXRpb24gc2NoZW1hIChKb2kgc2NoZW1hLCBjbGFzcy12YWxpZGF0b3IgY2xhc3MsIG9yIGN1c3RvbSBmdW5jdGlvbilcclxuICAgKiBAcGFyYW0gdmFsaWRhdGlvblR5cGUgLSBUeXBlIG9mIHZhbGlkYXRpb24gKCdqb2knLCAnY2xhc3MtdmFsaWRhdG9yJywgb3IgJ2N1c3RvbScpXHJcbiAgICogQHBhcmFtIHNvdXJjZXMgLSBDb25maWd1cmF0aW9uIHNvdXJjZXMgbWV0YWRhdGFcclxuICAgKiBAcmV0dXJucyBWYWxpZGF0ZWQgY29uZmlndXJhdGlvbiBmYWN0b3J5XHJcbiAgICovXHJcbiAgY3JlYXRlVmFsaWRhdGVkRmFjdG9yeShcclxuICAgIG5hbWVzcGFjZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxyXG4gICAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxyXG4gICAgdmFsaWRhdGlvblNjaGVtYTogYW55LFxyXG4gICAgdmFsaWRhdGlvblR5cGU6ICdqb2knIHwgJ2NsYXNzLXZhbGlkYXRvcicgfCAnY3VzdG9tJyxcclxuICAgIHNvdXJjZXM/OiBDb25maWd1cmF0aW9uU291cmNlW11cclxuICApOiBDb25maWdGYWN0b3J5IHtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBDcmVhdGluZyB2YWxpZGF0ZWQgZmFjdG9yeSBmb3IgbmFtZXNwYWNlOiAke25hbWVzcGFjZSB8fCAnZGVmYXVsdCd9IHdpdGggJHt2YWxpZGF0aW9uVHlwZX0gdmFsaWRhdGlvbmApO1xyXG5cclxuICAgIGNvbnN0IGZhY3RvcnkgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBWYWxpZGF0ZWQgZmFjdG9yeSBjYWxsZWQgZm9yIG5hbWVzcGFjZTogJHtuYW1lc3BhY2UgfHwgJ2RlZmF1bHQnfWApO1xyXG5cclxuICAgICAgLy8gVmFsaWRhdGUgY29uZmlndXJhdGlvblxyXG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gdGhpcy52YWxpZGF0ZUNvbmZpZ3VyYXRpb24oY29uZmlnLCB2YWxpZGF0aW9uU2NoZW1hLCB2YWxpZGF0aW9uVHlwZSwgc291cmNlcyk7XHJcblxyXG4gICAgICBpZiAoIXZhbGlkYXRpb25SZXN1bHQuaXNWYWxpZCkge1xyXG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gZmFpbGVkIGZvciAke25hbWVzcGFjZSB8fCAnZGVmYXVsdCd9OiAke3ZhbGlkYXRpb25SZXN1bHQuZXJyb3JzLmpvaW4oJywgJyl9YDtcclxuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIENyZWF0ZSBkZXRhaWxlZCBlcnJvciB3aXRoIHNvdXJjZSBpbmZvcm1hdGlvblxyXG4gICAgICAgIGNvbnN0IGRldGFpbGVkRXJyb3IgPSB0aGlzLmNyZWF0ZVZhbGlkYXRpb25FcnJvcihcclxuICAgICAgICAgIG5hbWVzcGFjZSB8fCAnZGVmYXVsdCcsXHJcbiAgICAgICAgICB2YWxpZGF0aW9uUmVzdWx0LmVycm9ycyxcclxuICAgICAgICAgIHNvdXJjZXNcclxuICAgICAgICApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRocm93IGRldGFpbGVkRXJyb3I7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gcGFzc2VkIGZvciBuYW1lc3BhY2U6ICR7bmFtZXNwYWNlIHx8ICdkZWZhdWx0J31gKTtcclxuICAgICAgcmV0dXJuIGNvbmZpZztcclxuICAgIH07XHJcblxyXG4gICAgLy8gQWRkIHZhbGlkYXRpb24gbWV0YWRhdGFcclxuICAgIChmYWN0b3J5IGFzIGFueSkuX19pc1ZhbGlkYXRlZEZhY3RvcnkgPSB0cnVlO1xyXG4gICAgKGZhY3RvcnkgYXMgYW55KS5fX3ZhbGlkYXRpb25UeXBlID0gdmFsaWRhdGlvblR5cGU7XHJcbiAgICAoZmFjdG9yeSBhcyBhbnkpLl9fbmFtZXNwYWNlID0gbmFtZXNwYWNlO1xyXG4gICAgKGZhY3RvcnkgYXMgYW55KS5fX3NvdXJjZXMgPSBzb3VyY2VzPy5tYXAocyA9PiBzLm5hbWUpIHx8IFtdO1xyXG5cclxuICAgIHJldHVybiBmYWN0b3J5O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVmFsaWRhdGUgY29uZmlndXJhdGlvbiB1c2luZyB0aGUgc3BlY2lmaWVkIHZhbGlkYXRpb24gdHlwZSBhbmQgc2NoZW1hLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBjb25maWcgLSBDb25maWd1cmF0aW9uIHRvIHZhbGlkYXRlXHJcbiAgICogQHBhcmFtIHNjaGVtYSAtIFZhbGlkYXRpb24gc2NoZW1hXHJcbiAgICogQHBhcmFtIHZhbGlkYXRpb25UeXBlIC0gVHlwZSBvZiB2YWxpZGF0aW9uXHJcbiAgICogQHBhcmFtIHNvdXJjZXMgLSBDb25maWd1cmF0aW9uIHNvdXJjZXMgZm9yIGVycm9yIHJlcG9ydGluZ1xyXG4gICAqIEByZXR1cm5zIFZhbGlkYXRpb24gcmVzdWx0XHJcbiAgICovXHJcbiAgdmFsaWRhdGVDb25maWd1cmF0aW9uKFxyXG4gICAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxyXG4gICAgc2NoZW1hOiBhbnksXHJcbiAgICB2YWxpZGF0aW9uVHlwZTogJ2pvaScgfCAnY2xhc3MtdmFsaWRhdG9yJyB8ICdjdXN0b20nLFxyXG4gICAgc291cmNlcz86IENvbmZpZ3VyYXRpb25Tb3VyY2VbXVxyXG4gICk6IHsgaXNWYWxpZDogYm9vbGVhbjsgZXJyb3JzOiBzdHJpbmdbXTsgd2FybmluZ3M6IHN0cmluZ1tdIH0ge1xyXG4gICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLnZhbGlkYXRpb25Qcm92aWRlcnMuZ2V0KHZhbGlkYXRpb25UeXBlKTtcclxuICAgIFxyXG4gICAgaWYgKCFwcm92aWRlcikge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxyXG4gICAgICAgIGVycm9yczogW2BWYWxpZGF0aW9uIHByb3ZpZGVyICcke3ZhbGlkYXRpb25UeXBlfScgaXMgbm90IGF2YWlsYWJsZWBdLFxyXG4gICAgICAgIHdhcm5pbmdzOiBbXVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghcHJvdmlkZXIuaXNBdmFpbGFibGUoKSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxyXG4gICAgICAgIGVycm9yczogW2BWYWxpZGF0aW9uIHByb3ZpZGVyICcke3ZhbGlkYXRpb25UeXBlfScgaXMgbm90IHByb3Blcmx5IGNvbmZpZ3VyZWRgXSxcclxuICAgICAgICB3YXJuaW5nczogW11cclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSBwcm92aWRlci52YWxpZGF0ZShjb25maWcsIHNjaGVtYSk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBBZGQgc291cmNlIGluZm9ybWF0aW9uIHRvIGVycm9yc1xyXG4gICAgICBjb25zdCBlbmhhbmNlZEVycm9ycyA9IHJlc3VsdC5lcnJvcnMubWFwKGVycm9yID0+IFxyXG4gICAgICAgIHRoaXMuZW5oYW5jZUVycm9yV2l0aFNvdXJjZUluZm8oZXJyb3IsIHNvdXJjZXMpXHJcbiAgICAgICk7XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGlzVmFsaWQ6IHJlc3VsdC5pc1ZhbGlkLFxyXG4gICAgICAgIGVycm9yczogZW5oYW5jZWRFcnJvcnMsXHJcbiAgICAgICAgd2FybmluZ3M6IFtdXHJcbiAgICAgIH07XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zdCB2YWxpZGF0aW9uRXJyb3IgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSk7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXHJcbiAgICAgICAgZXJyb3JzOiBbdmFsaWRhdGlvbkVycm9yLm1lc3NhZ2VdLFxyXG4gICAgICAgIHdhcm5pbmdzOiBbXVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgZmFjdG9yeSB0aGF0IHZhbGlkYXRlcyBjb25maWd1cmF0aW9uIGFuZCBwcm92aWRlcyBmYWxsYmFjayB2YWx1ZXMuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIG5hbWVzcGFjZSAtIE9wdGlvbmFsIG5hbWVzcGFjZVxyXG4gICAqIEBwYXJhbSBjb25maWcgLSBDb25maWd1cmF0aW9uIGRhdGFcclxuICAgKiBAcGFyYW0gdmFsaWRhdGlvblNjaGVtYSAtIFZhbGlkYXRpb24gc2NoZW1hXHJcbiAgICogQHBhcmFtIHZhbGlkYXRpb25UeXBlIC0gVHlwZSBvZiB2YWxpZGF0aW9uXHJcbiAgICogQHBhcmFtIGZhbGxiYWNrQ29uZmlnIC0gRmFsbGJhY2sgY29uZmlndXJhdGlvbiB0byB1c2UgaWYgdmFsaWRhdGlvbiBmYWlsc1xyXG4gICAqIEBwYXJhbSBzb3VyY2VzIC0gQ29uZmlndXJhdGlvbiBzb3VyY2VzXHJcbiAgICogQHJldHVybnMgRmFjdG9yeSB3aXRoIHZhbGlkYXRpb24gYW5kIGZhbGxiYWNrXHJcbiAgICovXHJcbiAgY3JlYXRlVmFsaWRhdGVkRmFjdG9yeVdpdGhGYWxsYmFjayhcclxuICAgIG5hbWVzcGFjZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxyXG4gICAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxyXG4gICAgdmFsaWRhdGlvblNjaGVtYTogYW55LFxyXG4gICAgdmFsaWRhdGlvblR5cGU6ICdqb2knIHwgJ2NsYXNzLXZhbGlkYXRvcicgfCAnY3VzdG9tJyxcclxuICAgIGZhbGxiYWNrQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxyXG4gICAgc291cmNlcz86IENvbmZpZ3VyYXRpb25Tb3VyY2VbXVxyXG4gICk6IENvbmZpZ0ZhY3Rvcnkge1xyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYENyZWF0aW5nIHZhbGlkYXRlZCBmYWN0b3J5IHdpdGggZmFsbGJhY2sgZm9yIG5hbWVzcGFjZTogJHtuYW1lc3BhY2UgfHwgJ2RlZmF1bHQnfWApO1xyXG5cclxuICAgIGNvbnN0IGZhY3RvcnkgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBWYWxpZGF0ZWQgZmFjdG9yeSB3aXRoIGZhbGxiYWNrIGNhbGxlZCBmb3IgbmFtZXNwYWNlOiAke25hbWVzcGFjZSB8fCAnZGVmYXVsdCd9YCk7XHJcblxyXG4gICAgICAvLyBWYWxpZGF0ZSBjb25maWd1cmF0aW9uXHJcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSB0aGlzLnZhbGlkYXRlQ29uZmlndXJhdGlvbihjb25maWcsIHZhbGlkYXRpb25TY2hlbWEsIHZhbGlkYXRpb25UeXBlLCBzb3VyY2VzKTtcclxuXHJcbiAgICAgIGlmICghdmFsaWRhdGlvblJlc3VsdC5pc1ZhbGlkKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybihgQ29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIGZhaWxlZCBmb3IgJHtuYW1lc3BhY2UgfHwgJ2RlZmF1bHQnfSwgdXNpbmcgZmFsbGJhY2s6ICR7dmFsaWRhdGlvblJlc3VsdC5lcnJvcnMuam9pbignLCAnKX1gKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBWYWxpZGF0ZSBmYWxsYmFjayBjb25maWd1cmF0aW9uXHJcbiAgICAgICAgY29uc3QgZmFsbGJhY2tWYWxpZGF0aW9uID0gdGhpcy52YWxpZGF0ZUNvbmZpZ3VyYXRpb24oZmFsbGJhY2tDb25maWcsIHZhbGlkYXRpb25TY2hlbWEsIHZhbGlkYXRpb25UeXBlKTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoZmFsbGJhY2tWYWxpZGF0aW9uLmlzVmFsaWQpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxsYmFja0NvbmZpZztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gQm90aCBwcmltYXJ5IGFuZCBmYWxsYmFjayBmYWlsZWRcclxuICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGBCb3RoIHByaW1hcnkgYW5kIGZhbGxiYWNrIGNvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBmYWlsZWQgZm9yICR7bmFtZXNwYWNlIHx8ICdkZWZhdWx0J31gO1xyXG4gICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgY29uc3QgZGV0YWlsZWRFcnJvciA9IHRoaXMuY3JlYXRlVmFsaWRhdGlvbkVycm9yKFxyXG4gICAgICAgICAgICBuYW1lc3BhY2UgfHwgJ2RlZmF1bHQnLFxyXG4gICAgICAgICAgICBbLi4udmFsaWRhdGlvblJlc3VsdC5lcnJvcnMsIC4uLmZhbGxiYWNrVmFsaWRhdGlvbi5lcnJvcnNdLFxyXG4gICAgICAgICAgICBzb3VyY2VzXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICB0aHJvdyBkZXRhaWxlZEVycm9yO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYENvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBwYXNzZWQgZm9yIG5hbWVzcGFjZTogJHtuYW1lc3BhY2UgfHwgJ2RlZmF1bHQnfWApO1xyXG4gICAgICByZXR1cm4gY29uZmlnO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBBZGQgbWV0YWRhdGFcclxuICAgIChmYWN0b3J5IGFzIGFueSkuX19pc1ZhbGlkYXRlZEZhY3RvcnkgPSB0cnVlO1xyXG4gICAgKGZhY3RvcnkgYXMgYW55KS5fX2hhc0ZhbGxiYWNrID0gdHJ1ZTtcclxuICAgIChmYWN0b3J5IGFzIGFueSkuX192YWxpZGF0aW9uVHlwZSA9IHZhbGlkYXRpb25UeXBlO1xyXG4gICAgKGZhY3RvcnkgYXMgYW55KS5fX25hbWVzcGFjZSA9IG5hbWVzcGFjZTtcclxuICAgIChmYWN0b3J5IGFzIGFueSkuX19zb3VyY2VzID0gc291cmNlcz8ubWFwKHMgPT4gcy5uYW1lKSB8fCBbXTtcclxuXHJcbiAgICByZXR1cm4gZmFjdG9yeTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYXRlIG11bHRpcGxlIG5hbWVzcGFjZSBjb25maWd1cmF0aW9ucy5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gbmFtZXNwYWNlZENvbmZpZyAtIENvbmZpZ3VyYXRpb24gb3JnYW5pemVkIGJ5IG5hbWVzcGFjZVxyXG4gICAqIEBwYXJhbSB2YWxpZGF0aW9uU2NoZW1hcyAtIFZhbGlkYXRpb24gc2NoZW1hcyBmb3IgZWFjaCBuYW1lc3BhY2VcclxuICAgKiBAcGFyYW0gdmFsaWRhdGlvblR5cGUgLSBUeXBlIG9mIHZhbGlkYXRpb25cclxuICAgKiBAcGFyYW0gc291cmNlcyAtIENvbmZpZ3VyYXRpb24gc291cmNlc1xyXG4gICAqIEByZXR1cm5zIFZhbGlkYXRpb24gcmVzdWx0cyBmb3IgZWFjaCBuYW1lc3BhY2VcclxuICAgKi9cclxuICB2YWxpZGF0ZU5hbWVzcGFjZWRDb25maWd1cmF0aW9uKFxyXG4gICAgbmFtZXNwYWNlZENvbmZpZzogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgYW55Pj4sXHJcbiAgICB2YWxpZGF0aW9uU2NoZW1hczogUmVjb3JkPHN0cmluZywgYW55PixcclxuICAgIHZhbGlkYXRpb25UeXBlOiAnam9pJyB8ICdjbGFzcy12YWxpZGF0b3InIHwgJ2N1c3RvbScsXHJcbiAgICBzb3VyY2VzPzogQ29uZmlndXJhdGlvblNvdXJjZVtdXHJcbiAgKTogUmVjb3JkPHN0cmluZywgeyBpc1ZhbGlkOiBib29sZWFuOyBlcnJvcnM6IHN0cmluZ1tdOyB3YXJuaW5nczogc3RyaW5nW10gfT4ge1xyXG4gICAgY29uc3QgcmVzdWx0czogUmVjb3JkPHN0cmluZywgeyBpc1ZhbGlkOiBib29sZWFuOyBlcnJvcnM6IHN0cmluZ1tdOyB3YXJuaW5nczogc3RyaW5nW10gfT4gPSB7fTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IFtuYW1lc3BhY2UsIGNvbmZpZ10gb2YgT2JqZWN0LmVudHJpZXMobmFtZXNwYWNlZENvbmZpZykpIHtcclxuICAgICAgY29uc3Qgc2NoZW1hID0gdmFsaWRhdGlvblNjaGVtYXNbbmFtZXNwYWNlXTtcclxuICAgICAgXHJcbiAgICAgIGlmIChzY2hlbWEpIHtcclxuICAgICAgICByZXN1bHRzW25hbWVzcGFjZV0gPSB0aGlzLnZhbGlkYXRlQ29uZmlndXJhdGlvbihjb25maWcsIHNjaGVtYSwgdmFsaWRhdGlvblR5cGUsIHNvdXJjZXMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlc3VsdHNbbmFtZXNwYWNlXSA9IHtcclxuICAgICAgICAgIGlzVmFsaWQ6IHRydWUsXHJcbiAgICAgICAgICBlcnJvcnM6IFtdLFxyXG4gICAgICAgICAgd2FybmluZ3M6IFtgTm8gdmFsaWRhdGlvbiBzY2hlbWEgcHJvdmlkZWQgZm9yIG5hbWVzcGFjZTogJHtuYW1lc3BhY2V9YF1cclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayB3aGljaCB2YWxpZGF0aW9uIHByb3ZpZGVycyBhcmUgYXZhaWxhYmxlLlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIE9iamVjdCBpbmRpY2F0aW5nIGF2YWlsYWJpbGl0eSBvZiBlYWNoIHByb3ZpZGVyXHJcbiAgICovXHJcbiAgZ2V0QXZhaWxhYmxlVmFsaWRhdGlvblByb3ZpZGVycygpOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiB7XHJcbiAgICBjb25zdCBhdmFpbGFiaWxpdHk6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XHJcbiAgICBcclxuICAgIGZvciAoY29uc3QgW25hbWUsIHByb3ZpZGVyXSBvZiB0aGlzLnZhbGlkYXRpb25Qcm92aWRlcnMpIHtcclxuICAgICAgYXZhaWxhYmlsaXR5W25hbWVdID0gcHJvdmlkZXIuaXNBdmFpbGFibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYXZhaWxhYmlsaXR5O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHZhbGlkYXRpb24gcmVjb21tZW5kYXRpb25zIGJhc2VkIG9uIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBjb25maWcgLSBDb25maWd1cmF0aW9uIHRvIGFuYWx5emVcclxuICAgKiBAcmV0dXJucyBWYWxpZGF0aW9uIHJlY29tbWVuZGF0aW9uc1xyXG4gICAqL1xyXG4gIGdldFZhbGlkYXRpb25SZWNvbW1lbmRhdGlvbnMoY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KToge1xyXG4gICAgcmVjb21tZW5kZWRQcm92aWRlcjogc3RyaW5nO1xyXG4gICAgcmVhc29uczogc3RyaW5nW107XHJcbiAgICBleGFtcGxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcclxuICB9IHtcclxuICAgIGNvbnN0IGFuYWx5c2lzID0gdGhpcy5hbmFseXplQ29uZmlndXJhdGlvblN0cnVjdHVyZShjb25maWcpO1xyXG4gICAgXHJcbiAgICBsZXQgcmVjb21tZW5kZWRQcm92aWRlciA9ICdjdXN0b20nO1xyXG4gICAgY29uc3QgcmVhc29uczogc3RyaW5nW10gPSBbXTtcclxuICAgIGNvbnN0IGV4YW1wbGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XHJcblxyXG4gICAgLy8gRGV0ZXJtaW5lIGJlc3QgdmFsaWRhdGlvbiBhcHByb2FjaFxyXG4gICAgaWYgKGFuYWx5c2lzLmhhc0NvbXBsZXhOZXN0aW5nIHx8IGFuYWx5c2lzLmhhc0FycmF5cykge1xyXG4gICAgICBpZiAodGhpcy52YWxpZGF0aW9uUHJvdmlkZXJzLmdldCgnam9pJyk/LmlzQXZhaWxhYmxlKCkpIHtcclxuICAgICAgICByZWNvbW1lbmRlZFByb3ZpZGVyID0gJ2pvaSc7XHJcbiAgICAgICAgcmVhc29ucy5wdXNoKCdDb21wbGV4IG5lc3RlZCBzdHJ1Y3R1cmUgZGV0ZWN0ZWQgLSBKb2kgcHJvdmlkZXMgZXhjZWxsZW50IG5lc3RlZCB2YWxpZGF0aW9uJyk7XHJcbiAgICAgICAgZXhhbXBsZXNbJ2pvaSddID0gdGhpcy5nZW5lcmF0ZUpvaUV4YW1wbGUoY29uZmlnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChhbmFseXNpcy5oYXNUeXBlZFZhbHVlcyAmJiB0aGlzLnZhbGlkYXRpb25Qcm92aWRlcnMuZ2V0KCdjbGFzcy12YWxpZGF0b3InKT8uaXNBdmFpbGFibGUoKSkge1xyXG4gICAgICByZWNvbW1lbmRlZFByb3ZpZGVyID0gJ2NsYXNzLXZhbGlkYXRvcic7XHJcbiAgICAgIHJlYXNvbnMucHVzaCgnVHlwZWQgdmFsdWVzIGRldGVjdGVkIC0gY2xhc3MtdmFsaWRhdG9yIHByb3ZpZGVzIHN0cm9uZyB0eXBlIHNhZmV0eScpO1xyXG4gICAgICBleGFtcGxlc1snY2xhc3MtdmFsaWRhdG9yJ10gPSB0aGlzLmdlbmVyYXRlQ2xhc3NWYWxpZGF0b3JFeGFtcGxlKGNvbmZpZyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWx3YXlzIHByb3ZpZGUgY3VzdG9tIGV4YW1wbGVcclxuICAgIGV4YW1wbGVzWydjdXN0b20nXSA9IHRoaXMuZ2VuZXJhdGVDdXN0b21WYWxpZGF0aW9uRXhhbXBsZShjb25maWcpO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlY29tbWVuZGVkUHJvdmlkZXIsXHJcbiAgICAgIHJlYXNvbnMsXHJcbiAgICAgIGV4YW1wbGVzXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVnaXN0ZXIgdmFsaWRhdGlvbiBwcm92aWRlcnMuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZWdpc3RlclZhbGlkYXRpb25Qcm92aWRlcnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbGlkYXRpb25Qcm92aWRlcnMuc2V0KCdqb2knLCBuZXcgSm9pVmFsaWRhdGlvblByb3ZpZGVyKCkpO1xyXG4gICAgdGhpcy52YWxpZGF0aW9uUHJvdmlkZXJzLnNldCgnY2xhc3MtdmFsaWRhdG9yJywgbmV3IENsYXNzVmFsaWRhdG9yUHJvdmlkZXIoKSk7XHJcbiAgICB0aGlzLnZhbGlkYXRpb25Qcm92aWRlcnMuc2V0KCdjdXN0b20nLCBuZXcgQ3VzdG9tVmFsaWRhdGlvblByb3ZpZGVyKCkpO1xyXG5cclxuICAgIC8vIExvZyBhdmFpbGFibGUgcHJvdmlkZXJzXHJcbiAgICBjb25zdCBhdmFpbGFibGUgPSBBcnJheS5mcm9tKHRoaXMudmFsaWRhdGlvblByb3ZpZGVycy5lbnRyaWVzKCkpXHJcbiAgICAgIC5maWx0ZXIoKFtfLCBwcm92aWRlcl0pID0+IHByb3ZpZGVyLmlzQXZhaWxhYmxlKCkpXHJcbiAgICAgIC5tYXAoKFtuYW1lXSkgPT4gbmFtZSk7XHJcblxyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYEF2YWlsYWJsZSB2YWxpZGF0aW9uIHByb3ZpZGVyczogJHthdmFpbGFibGUuam9pbignLCAnKX1gKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhIGRldGFpbGVkIHZhbGlkYXRpb24gZXJyb3Igd2l0aCBzb3VyY2UgaW5mb3JtYXRpb24uXHJcbiAgICogXHJcbiAgICogQHBhcmFtIG5hbWVzcGFjZSAtIE5hbWVzcGFjZSB0aGF0IGZhaWxlZCB2YWxpZGF0aW9uXHJcbiAgICogQHBhcmFtIGVycm9ycyAtIFZhbGlkYXRpb24gZXJyb3JzXHJcbiAgICogQHBhcmFtIHNvdXJjZXMgLSBDb25maWd1cmF0aW9uIHNvdXJjZXNcclxuICAgKiBAcmV0dXJucyBEZXRhaWxlZCBlcnJvclxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlVmFsaWRhdGlvbkVycm9yKFxyXG4gICAgbmFtZXNwYWNlOiBzdHJpbmcsXHJcbiAgICBlcnJvcnM6IHN0cmluZ1tdLFxyXG4gICAgc291cmNlcz86IENvbmZpZ3VyYXRpb25Tb3VyY2VbXVxyXG4gICk6IEVycm9yIHtcclxuICAgIGxldCBtZXNzYWdlID0gYENvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBmYWlsZWQgZm9yIG5hbWVzcGFjZSAnJHtuYW1lc3BhY2V9JzpcXG5gO1xyXG4gICAgbWVzc2FnZSArPSBlcnJvcnMubWFwKGVycm9yID0+IGAgIC0gJHtlcnJvcn1gKS5qb2luKCdcXG4nKTtcclxuXHJcbiAgICBpZiAoc291cmNlcyAmJiBzb3VyY2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgbWVzc2FnZSArPSAnXFxuXFxuQ29uZmlndXJhdGlvbiBzb3VyY2VzOlxcbic7XHJcbiAgICAgIG1lc3NhZ2UgKz0gc291cmNlcy5tYXAoc291cmNlID0+IFxyXG4gICAgICAgIGAgIC0gJHtzb3VyY2UubmFtZX0gKCR7c291cmNlLnR5cGV9KTogJHtPYmplY3Qua2V5cyhzb3VyY2UuZGF0YSkubGVuZ3RofSBrZXlzYFxyXG4gICAgICApLmpvaW4oJ1xcbicpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgZXJyb3IubmFtZSA9ICdDb25maWd1cmF0aW9uVmFsaWRhdGlvbkVycm9yJztcclxuICAgIChlcnJvciBhcyBhbnkpLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcclxuICAgIChlcnJvciBhcyBhbnkpLnZhbGlkYXRpb25FcnJvcnMgPSBlcnJvcnM7XHJcbiAgICAoZXJyb3IgYXMgYW55KS5zb3VyY2VzID0gc291cmNlcztcclxuXHJcbiAgICByZXR1cm4gZXJyb3I7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbmhhbmNlIGVycm9yIG1lc3NhZ2Ugd2l0aCBzb3VyY2UgaW5mb3JtYXRpb24uXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGVycm9yIC0gT3JpZ2luYWwgZXJyb3IgbWVzc2FnZVxyXG4gICAqIEBwYXJhbSBzb3VyY2VzIC0gQ29uZmlndXJhdGlvbiBzb3VyY2VzXHJcbiAgICogQHJldHVybnMgRW5oYW5jZWQgZXJyb3IgbWVzc2FnZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZW5oYW5jZUVycm9yV2l0aFNvdXJjZUluZm8oZXJyb3I6IHN0cmluZywgc291cmNlcz86IENvbmZpZ3VyYXRpb25Tb3VyY2VbXSk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXNvdXJjZXMgfHwgc291cmNlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIGVycm9yO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNvdXJjZU5hbWVzID0gc291cmNlcy5tYXAocyA9PiBzLm5hbWUpLmpvaW4oJywgJyk7XHJcbiAgICByZXR1cm4gYCR7ZXJyb3J9IChmcm9tIHNvdXJjZXM6ICR7c291cmNlTmFtZXN9KWA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbmFseXplIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGZvciB2YWxpZGF0aW9uIHJlY29tbWVuZGF0aW9ucy5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gY29uZmlnIC0gQ29uZmlndXJhdGlvbiB0byBhbmFseXplXHJcbiAgICogQHJldHVybnMgU3RydWN0dXJlIGFuYWx5c2lzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhbmFseXplQ29uZmlndXJhdGlvblN0cnVjdHVyZShjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4pOiB7XHJcbiAgICBoYXNDb21wbGV4TmVzdGluZzogYm9vbGVhbjtcclxuICAgIGhhc0FycmF5czogYm9vbGVhbjtcclxuICAgIGhhc1R5cGVkVmFsdWVzOiBib29sZWFuO1xyXG4gICAgZGVwdGg6IG51bWJlcjtcclxuICB9IHtcclxuICAgIGxldCBoYXNDb21wbGV4TmVzdGluZyA9IGZhbHNlO1xyXG4gICAgbGV0IGhhc0FycmF5cyA9IGZhbHNlO1xyXG4gICAgbGV0IGhhc1R5cGVkVmFsdWVzID0gZmFsc2U7XHJcbiAgICBsZXQgbWF4RGVwdGggPSAwO1xyXG5cclxuICAgIGNvbnN0IGFuYWx5emUgPSAob2JqOiBhbnksIGRlcHRoOiBudW1iZXIgPSAwKTogdm9pZCA9PiB7XHJcbiAgICAgIG1heERlcHRoID0gTWF0aC5tYXgobWF4RGVwdGgsIGRlcHRoKTtcclxuXHJcbiAgICAgIGlmIChkZXB0aCA+IDIpIHtcclxuICAgICAgICBoYXNDb21wbGV4TmVzdGluZyA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgT2JqZWN0LnZhbHVlcyhvYmopKSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgICBoYXNBcnJheXMgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgYW5hbHl6ZSh2YWx1ZSwgZGVwdGggKyAxKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICAgIGhhc1R5cGVkVmFsdWVzID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgYW5hbHl6ZShjb25maWcpO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGhhc0NvbXBsZXhOZXN0aW5nLFxyXG4gICAgICBoYXNBcnJheXMsXHJcbiAgICAgIGhhc1R5cGVkVmFsdWVzLFxyXG4gICAgICBkZXB0aDogbWF4RGVwdGhcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZW5lcmF0ZSBKb2kgdmFsaWRhdGlvbiBleGFtcGxlLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBjb25maWcgLSBDb25maWd1cmF0aW9uIHRvIGdlbmVyYXRlIGV4YW1wbGUgZm9yXHJcbiAgICogQHJldHVybnMgSm9pIHZhbGlkYXRpb24gZXhhbXBsZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2VuZXJhdGVKb2lFeGFtcGxlKGNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55Pik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzY2hlbWEgPSB0aGlzLmdlbmVyYXRlSm9pU2NoZW1hRnJvbUNvbmZpZyhjb25maWcpO1xyXG4gICAgcmV0dXJuIGBjb25zdCBKb2kgPSByZXF1aXJlKCdqb2knKTtcclxuXHJcbmNvbnN0IHNjaGVtYSA9ICR7c2NoZW1hfTtcclxuXHJcbi8vIFVzYWdlIGluIGZhY3RvcnlcclxuY29uc3QgZmFjdG9yeSA9ICgpID0+IHtcclxuICBjb25zdCBjb25maWcgPSBsb2FkQXdzQ29uZmlnKCk7XHJcbiAgY29uc3QgeyBlcnJvciwgdmFsdWUgfSA9IHNjaGVtYS52YWxpZGF0ZShjb25maWcpO1xyXG4gIGlmIChlcnJvcikgdGhyb3cgZXJyb3I7XHJcbiAgcmV0dXJuIHZhbHVlO1xyXG59O2A7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZW5lcmF0ZSBjbGFzcy12YWxpZGF0b3IgZXhhbXBsZS5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gY29uZmlnIC0gQ29uZmlndXJhdGlvbiB0byBnZW5lcmF0ZSBleGFtcGxlIGZvclxyXG4gICAqIEByZXR1cm5zIGNsYXNzLXZhbGlkYXRvciBleGFtcGxlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUNsYXNzVmFsaWRhdG9yRXhhbXBsZShjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgY2xhc3NEZWZpbml0aW9uID0gdGhpcy5nZW5lcmF0ZUNsYXNzRnJvbUNvbmZpZyhjb25maWcpO1xyXG4gICAgcmV0dXJuIGBpbXBvcnQgeyBJc1N0cmluZywgSXNOdW1iZXIsIElzT3B0aW9uYWwsIHZhbGlkYXRlU3luYyB9IGZyb20gJ2NsYXNzLXZhbGlkYXRvcic7XHJcbmltcG9ydCB7IHBsYWluVG9DbGFzcyB9IGZyb20gJ2NsYXNzLXRyYW5zZm9ybWVyJztcclxuXHJcbiR7Y2xhc3NEZWZpbml0aW9ufVxyXG5cclxuLy8gVXNhZ2UgaW4gZmFjdG9yeVxyXG5jb25zdCBmYWN0b3J5ID0gKCkgPT4ge1xyXG4gIGNvbnN0IGNvbmZpZyA9IGxvYWRBd3NDb25maWcoKTtcclxuICBjb25zdCBpbnN0YW5jZSA9IHBsYWluVG9DbGFzcyhDb25maWdDbGFzcywgY29uZmlnKTtcclxuICBjb25zdCBlcnJvcnMgPSB2YWxpZGF0ZVN5bmMoaW5zdGFuY2UpO1xyXG4gIGlmIChlcnJvcnMubGVuZ3RoID4gMCkgdGhyb3cgbmV3IEVycm9yKCdWYWxpZGF0aW9uIGZhaWxlZCcpO1xyXG4gIHJldHVybiBjb25maWc7XHJcbn07YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlIGN1c3RvbSB2YWxpZGF0aW9uIGV4YW1wbGUuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGNvbmZpZyAtIENvbmZpZ3VyYXRpb24gdG8gZ2VuZXJhdGUgZXhhbXBsZSBmb3JcclxuICAgKiBAcmV0dXJucyBDdXN0b20gdmFsaWRhdGlvbiBleGFtcGxlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUN1c3RvbVZhbGlkYXRpb25FeGFtcGxlKGNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55Pik6IHN0cmluZyB7XHJcbiAgICBjb25zdCB2YWxpZGF0aW9uQ2hlY2tzID0gdGhpcy5nZW5lcmF0ZVZhbGlkYXRpb25DaGVja3MoY29uZmlnKTtcclxuICAgIHJldHVybiBgY29uc3QgdmFsaWRhdGVDb25maWcgPSAoY29uZmlnKSA9PiB7XHJcbiAgY29uc3QgZXJyb3JzID0gW107XHJcbiAgXHJcbiR7dmFsaWRhdGlvbkNoZWNrc31cclxuICBcclxuICByZXR1cm4gZXJyb3JzO1xyXG59O1xyXG5cclxuLy8gVXNhZ2UgaW4gZmFjdG9yeVxyXG5jb25zdCBmYWN0b3J5ID0gKCkgPT4ge1xyXG4gIGNvbnN0IGNvbmZpZyA9IGxvYWRBd3NDb25maWcoKTtcclxuICBjb25zdCBlcnJvcnMgPSB2YWxpZGF0ZUNvbmZpZyhjb25maWcpO1xyXG4gIGlmIChlcnJvcnMubGVuZ3RoID4gMCkgdGhyb3cgbmV3IEVycm9yKFxcYFZhbGlkYXRpb24gZmFpbGVkOiBcXCR7ZXJyb3JzLmpvaW4oJywgJyl9XFxgKTtcclxuICByZXR1cm4gY29uZmlnO1xyXG59O2A7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZW5lcmF0ZSBKb2kgc2NoZW1hIGZyb20gY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGNvbmZpZyAtIENvbmZpZ3VyYXRpb24gb2JqZWN0XHJcbiAgICogQHJldHVybnMgSm9pIHNjaGVtYSBzdHJpbmdcclxuICAgKi9cclxuICBwcml2YXRlIGdlbmVyYXRlSm9pU2NoZW1hRnJvbUNvbmZpZyhjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZ2VuZXJhdGVTY2hlbWEgPSAob2JqOiBhbnkpOiBzdHJpbmcgPT4ge1xyXG4gICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycpIHJldHVybiAnSm9pLnN0cmluZygpJztcclxuICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdudW1iZXInKSByZXR1cm4gJ0pvaS5udW1iZXIoKSc7XHJcbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHJldHVybiAnSm9pLmJvb2xlYW4oKSc7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHJldHVybiAnSm9pLmFycmF5KCknO1xyXG4gICAgICBcclxuICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCkge1xyXG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBPYmplY3QuZW50cmllcyhvYmopXHJcbiAgICAgICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IGAgICR7a2V5fTogJHtnZW5lcmF0ZVNjaGVtYSh2YWx1ZSl9YClcclxuICAgICAgICAgIC5qb2luKCcsXFxuJyk7XHJcbiAgICAgICAgcmV0dXJuIGBKb2kub2JqZWN0KHtcXG4ke3Byb3BlcnRpZXN9XFxufSlgO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICByZXR1cm4gJ0pvaS5hbnkoKSc7XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBnZW5lcmF0ZVNjaGVtYShjb25maWcpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2VuZXJhdGUgY2xhc3MgZGVmaW5pdGlvbiBmcm9tIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBjb25maWcgLSBDb25maWd1cmF0aW9uIG9iamVjdFxyXG4gICAqIEByZXR1cm5zIENsYXNzIGRlZmluaXRpb24gc3RyaW5nXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUNsYXNzRnJvbUNvbmZpZyhjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgcHJvcGVydGllcyA9IE9iamVjdC5lbnRyaWVzKGNvbmZpZylcclxuICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGVjb3JhdG9yID0gdGhpcy5nZXRDbGFzc1ZhbGlkYXRvckRlY29yYXRvcih2YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIGAgICR7ZGVjb3JhdG9yfVxcbiAgJHtrZXl9OiAke3RoaXMuZ2V0VHlwZVNjcmlwdFR5cGUodmFsdWUpfTtgO1xyXG4gICAgICB9KVxyXG4gICAgICAuam9pbignXFxuXFxuJyk7XHJcblxyXG4gICAgcmV0dXJuIGBjbGFzcyBDb25maWdDbGFzcyB7XFxuJHtwcm9wZXJ0aWVzfVxcbn1gO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2VuZXJhdGUgdmFsaWRhdGlvbiBjaGVja3MgZm9yIGN1c3RvbSB2YWxpZGF0aW9uLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBjb25maWcgLSBDb25maWd1cmF0aW9uIG9iamVjdFxyXG4gICAqIEByZXR1cm5zIFZhbGlkYXRpb24gY2hlY2tzIHN0cmluZ1xyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2VuZXJhdGVWYWxpZGF0aW9uQ2hlY2tzKGNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55Pik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoY29uZmlnKVxyXG4gICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgICBjb25zdCBjaGVjayA9IHRoaXMuZ2V0VmFsaWRhdGlvbkNoZWNrKGtleSwgdmFsdWUpO1xyXG4gICAgICAgIHJldHVybiBgICAke2NoZWNrfWA7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5qb2luKCdcXG4nKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBjbGFzcy12YWxpZGF0b3IgZGVjb3JhdG9yIGZvciBhIHZhbHVlLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGdldCBkZWNvcmF0b3IgZm9yXHJcbiAgICogQHJldHVybnMgRGVjb3JhdG9yIHN0cmluZ1xyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0Q2xhc3NWYWxpZGF0b3JEZWNvcmF0b3IodmFsdWU6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuICdASXNTdHJpbmcoKSc7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuICdASXNOdW1iZXIoKSc7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHJldHVybiAnQElzQm9vbGVhbigpJztcclxuICAgIHJldHVybiAnQElzT3B0aW9uYWwoKSc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgVHlwZVNjcmlwdCB0eXBlIGZvciBhIHZhbHVlLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGdldCB0eXBlIGZvclxyXG4gICAqIEByZXR1cm5zIFR5cGVTY3JpcHQgdHlwZSBzdHJpbmdcclxuICAgKi9cclxuICBwcml2YXRlIGdldFR5cGVTY3JpcHRUeXBlKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHJldHVybiAnc3RyaW5nJztcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gJ251bWJlcic7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHJldHVybiAnYm9vbGVhbic7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiAnYW55W10nO1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHJldHVybiAnb2JqZWN0JztcclxuICAgIHJldHVybiAnYW55JztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB2YWxpZGF0aW9uIGNoZWNrIGZvciBjdXN0b20gdmFsaWRhdGlvbi5cclxuICAgKiBcclxuICAgKiBAcGFyYW0ga2V5IC0gQ29uZmlndXJhdGlvbiBrZXlcclxuICAgKiBAcGFyYW0gdmFsdWUgLSBDb25maWd1cmF0aW9uIHZhbHVlXHJcbiAgICogQHJldHVybnMgVmFsaWRhdGlvbiBjaGVjayBzdHJpbmdcclxuICAgKi9cclxuICBwcml2YXRlIGdldFZhbGlkYXRpb25DaGVjayhrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm4gYGlmICghY29uZmlnLiR7a2V5fSB8fCB0eXBlb2YgY29uZmlnLiR7a2V5fSAhPT0gJ3N0cmluZycpIGVycm9ycy5wdXNoKCcke2tleX0gbXVzdCBiZSBhIHN0cmluZycpO2A7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xyXG4gICAgICByZXR1cm4gYGlmIChjb25maWcuJHtrZXl9ID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIGNvbmZpZy4ke2tleX0gIT09ICdudW1iZXInKSBlcnJvcnMucHVzaCgnJHtrZXl9IG11c3QgYmUgYSBudW1iZXInKTtgO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgIHJldHVybiBgaWYgKGNvbmZpZy4ke2tleX0gPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgY29uZmlnLiR7a2V5fSAhPT0gJ2Jvb2xlYW4nKSBlcnJvcnMucHVzaCgnJHtrZXl9IG11c3QgYmUgYSBib29sZWFuJyk7YDtcclxuICAgIH1cclxuICAgIHJldHVybiBgaWYgKGNvbmZpZy4ke2tleX0gPT09IHVuZGVmaW5lZCkgZXJyb3JzLnB1c2goJyR7a2V5fSBpcyByZXF1aXJlZCcpO2A7XHJcbiAgfVxyXG59Il19
@@ -1,4 +1,4 @@
1
- import { ConfigurationError, ConfigurationLoadError, ValidationError } from './errors';
1
+ import { ConfigurationError, ConfigurationLoadError, ValidationError } from './errors/index.js';
2
2
  /**
3
3
  * Default console logger implementation
4
4
  */
@@ -359,4 +359,4 @@ export class ConfigManager {
359
359
  return manager;
360
360
  }
361
361
  }
362
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9jb25maWctYXdzL3NyYy9jb25maWctbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXZGOztHQUVHO0FBQ0gsTUFBTSxhQUFhLEdBQVc7SUFDNUIsR0FBRyxFQUFFLENBQUMsT0FBZSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztJQUM5QyxLQUFLLEVBQUUsQ0FBQyxPQUFlLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0lBQ2xELElBQUksRUFBRSxDQUFDLE9BQWUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDaEQsS0FBSyxFQUFFLENBQUMsT0FBZSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztDQUNuRCxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLHNCQUFzQixHQUFHLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFFekc7O0dBRUc7QUFDSCxNQUFNLHVCQUF1QixHQUE2QjtJQUN4RCxPQUFPLEVBQUUsSUFBSTtJQUNiLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFlBQVksRUFBRSxJQUFJO0lBQ2xCLFNBQVMsRUFBRSxJQUFJO0lBQ2YsVUFBVSxFQUFFLElBQUk7SUFDaEIsYUFBYSxFQUFFLHNCQUFzQjtDQUN0QyxDQUFDO0FBRUY7OztHQUdHO0FBQ0gsTUFBTSxpQkFBaUIsR0FBa0Q7SUFDdkUsMERBQTBEO0lBQzFELFdBQVcsRUFBRTtRQUNYLG1CQUFtQjtRQUNuQixl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QXNDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUNsSCxRQUFRLENBQUMsTUFBTSxFQUNmLFNBQVMsQ0FDVixDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFFRCx3REFBd0Q7UUFDeEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxhQUFhLENBQUksT0FBTyxDQUFDLENBQUM7UUFDOUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFXLENBQUM7UUFDN0IsT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDdEIsT0FBTyxDQUFDLFVBQVUsR0FBRztZQUNuQixNQUFNLEVBQUUsTUFBVztZQUNuQixPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ2xGLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRTtTQUNyQixDQUFDO1FBRUYsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBab2RFcnJvciB9IGZyb20gJ3pvZCc7XHJcbmltcG9ydCB0eXBlIHsgQ29uZmlnTG9hZGVyIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2NvbmZpZy1sb2FkZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHR5cGUge1xyXG4gIENvbmZpZ01hbmFnZXJPcHRpb25zLFxyXG4gIENvbmZpZ0xvYWRSZXN1bHQsXHJcbiAgQ29uZmlnU291cmNlSW5mbyxcclxuICBMb2dnZXIsXHJcbiAgTG9hZGVyUHJlY2VkZW5jZSxcclxuICBWZXJib3NlT3B0aW9ucyxcclxufSBmcm9tICcuL2ludGVyZmFjZXMvY29uZmlnLW1hbmFnZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbkVycm9yLCBDb25maWd1cmF0aW9uTG9hZEVycm9yLCBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICcuL2Vycm9ycyc7XHJcblxyXG4vKipcclxuICogRGVmYXVsdCBjb25zb2xlIGxvZ2dlciBpbXBsZW1lbnRhdGlvblxyXG4gKi9cclxuY29uc3QgZGVmYXVsdExvZ2dlcjogTG9nZ2VyID0ge1xyXG4gIGxvZzogKG1lc3NhZ2U6IHN0cmluZykgPT4gY29uc29sZS5sb2cobWVzc2FnZSksXHJcbiAgZXJyb3I6IChtZXNzYWdlOiBzdHJpbmcpID0+IGNvbnNvbGUuZXJyb3IobWVzc2FnZSksXHJcbiAgd2FybjogKG1lc3NhZ2U6IHN0cmluZykgPT4gY29uc29sZS53YXJuKG1lc3NhZ2UpLFxyXG4gIGRlYnVnOiAobWVzc2FnZTogc3RyaW5nKSA9PiBjb25zb2xlLmRlYnVnKG1lc3NhZ2UpLFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIERlZmF1bHQgc2Vuc2l0aXZlIGtleXMgdGhhdCBzaG91bGQgYWx3YXlzIGJlIG1hc2tlZFxyXG4gKi9cclxuY29uc3QgREVGQVVMVF9TRU5TSVRJVkVfS0VZUyA9IFsncGFzc3dvcmQnLCAnc2VjcmV0JywgJ2tleScsICd0b2tlbicsICdjcmVkZW50aWFsJywgJ2FwaV9rZXknLCAnYXBpa2V5J107XHJcblxyXG4vKipcclxuICogRGVmYXVsdCB2ZXJib3NlIG9wdGlvbnNcclxuICovXHJcbmNvbnN0IERFRkFVTFRfVkVSQk9TRV9PUFRJT05TOiBSZXF1aXJlZDxWZXJib3NlT3B0aW9ucz4gPSB7XHJcbiAgbG9nS2V5czogdHJ1ZSxcclxuICBsb2dWYWx1ZXM6IGZhbHNlLFxyXG4gIGxvZ092ZXJyaWRlczogdHJ1ZSxcclxuICBsb2dUaW1pbmc6IHRydWUsXHJcbiAgbWFza1ZhbHVlczogdHJ1ZSxcclxuICBzZW5zaXRpdmVLZXlzOiBERUZBVUxUX1NFTlNJVElWRV9LRVlTLFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIFByZWRlZmluZWQgcHJlY2VkZW5jZSBvcmRlcnMgZm9yIGNvbW1vbiBzdHJhdGVnaWVzXHJcbiAqIEhpZ2hlciBpbmRleCA9IGhpZ2hlciBwcmlvcml0eSAobGF0ZXIgbG9hZGVycyBvdmVycmlkZSBlYXJsaWVyIG9uZXMpXHJcbiAqL1xyXG5jb25zdCBQUkVDRURFTkNFX09SREVSUzogUmVjb3JkPCdhd3MtZmlyc3QnIHwgJ2xvY2FsLWZpcnN0Jywgc3RyaW5nW10+ID0ge1xyXG4gIC8vIEFXUyB3aW5zOiBlbnYgLT4gZW52RmlsZSAtPiBzMyAtPiBzZWNyZXRzTWFuYWdlciAtPiBzc21cclxuICAnYXdzLWZpcnN0JzogW1xyXG4gICAgJ0Vudmlyb25tZW50TG9hZGVyJyxcclxuICAgICdFbnZGaWxlTG9hZGVyJyxcclxuICAgICdTM0xvYWRlcicsXHJcbiAgICAnU2VjcmV0c01hbmFnZXJMb2FkZXInLFxyXG4gICAgJ1NTTVBhcmFtZXRlclN0b3JlTG9hZGVyJyxcclxuICBdLFxyXG4gIC8vIExvY2FsIHdpbnM6IHNzbSAtPiBzZWNyZXRzTWFuYWdlciAtPiBzMyAtPiBlbnZGaWxlIC0+IGVudlxyXG4gICdsb2NhbC1maXJzdCc6IFtcclxuICAgICdTU01QYXJhbWV0ZXJTdG9yZUxvYWRlcicsXHJcbiAgICAnU2VjcmV0c01hbmFnZXJMb2FkZXInLFxyXG4gICAgJ1MzTG9hZGVyJyxcclxuICAgICdFbnZGaWxlTG9hZGVyJyxcclxuICAgICdFbnZpcm9ubWVudExvYWRlcicsXHJcbiAgXSxcclxufTtcclxuXHJcblxyXG4vKipcclxuICogQ29uZmlnTWFuYWdlciBvcmNoZXN0cmF0ZXMgbG9hZGluZyBjb25maWd1cmF0aW9uIGZyb20gbXVsdGlwbGUgc291cmNlc1xyXG4gKiB3aXRoIGNvbmZpZ3VyYWJsZSBwcmVjZWRlbmNlIGFuZCB2YWxpZGF0aW9uLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGltcG9ydCB7IENvbmZpZ01hbmFnZXIsIEVudmlyb25tZW50TG9hZGVyLCBTZWNyZXRzTWFuYWdlckxvYWRlciB9IGZyb20gJ0BkeWFuZXQvY29uZmlnLWF3cyc7XHJcbiAqIGltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xyXG4gKlxyXG4gKiBjb25zdCBzY2hlbWEgPSB6Lm9iamVjdCh7XHJcbiAqICAgREFUQUJBU0VfVVJMOiB6LnN0cmluZygpLFxyXG4gKiAgIEFQSV9LRVk6IHouc3RyaW5nKCksXHJcbiAqICAgUE9SVDogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgzMDAwKSxcclxuICogfSk7XHJcbiAqXHJcbiAqIGNvbnN0IG1hbmFnZXIgPSBuZXcgQ29uZmlnTWFuYWdlcih7XHJcbiAqICAgbG9hZGVyczogW1xyXG4gKiAgICAgbmV3IEVudmlyb25tZW50TG9hZGVyKHsgcHJlZml4OiAnQVBQXycgfSksXHJcbiAqICAgICBuZXcgU2VjcmV0c01hbmFnZXJMb2FkZXIoeyBzZWNyZXROYW1lOiAnL215LWFwcC9jb25maWcnIH0pLFxyXG4gKiAgIF0sXHJcbiAqICAgc2NoZW1hLFxyXG4gKiAgIHByZWNlZGVuY2U6ICdhd3MtZmlyc3QnLFxyXG4gKiAgIHZlcmJvc2U6IHRydWUsXHJcbiAqIH0pO1xyXG4gKlxyXG4gKiBhd2FpdCBtYW5hZ2VyLmxvYWQoKTtcclxuICogY29uc3QgZGJVcmwgPSBtYW5hZ2VyLmdldCgnREFUQUJBU0VfVVJMJyk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIENvbmZpZ01hbmFnZXI8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XHJcbiAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBfb3B0aW9uczogUmVxdWlyZWQ8T21pdDxDb25maWdNYW5hZ2VyT3B0aW9uczxUPiwgJ3NjaGVtYScgfCAnbG9nZ2VyJyB8ICd2ZXJib3NlJz4+ICYge1xyXG4gICAgc2NoZW1hPzogQ29uZmlnTWFuYWdlck9wdGlvbnM8VD5bJ3NjaGVtYSddO1xyXG4gICAgbG9nZ2VyPzogTG9nZ2VyO1xyXG4gICAgdmVyYm9zZT86IFZlcmJvc2VPcHRpb25zIHwgYm9vbGVhbjtcclxuICB9O1xyXG4gIC8qKiBAaW50ZXJuYWwgKi9cclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2xvZ2dlcjogTG9nZ2VyO1xyXG4gIC8qKiBAaW50ZXJuYWwgKi9cclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3ZlcmJvc2VPcHRpb25zOiBSZXF1aXJlZDxWZXJib3NlT3B0aW9ucz4gfCBudWxsO1xyXG5cclxuICBwcml2YXRlIGNvbmZpZzogVCB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgbG9hZFJlc3VsdDogQ29uZmlnTG9hZFJlc3VsdDxUPiB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgbG9hZGVkID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IENvbmZpZ01hbmFnZXJPcHRpb25zPFQ+ID0ge30pIHtcclxuICAgIHRoaXMuX29wdGlvbnMgPSB7XHJcbiAgICAgIGxvYWRlcnM6IG9wdGlvbnMubG9hZGVycyA/PyBbXSxcclxuICAgICAgc2NoZW1hOiBvcHRpb25zLnNjaGVtYSxcclxuICAgICAgcHJlY2VkZW5jZTogb3B0aW9ucy5wcmVjZWRlbmNlID8/ICdhd3MtZmlyc3QnLFxyXG4gICAgICB2YWxpZGF0ZU9uTG9hZDogb3B0aW9ucy52YWxpZGF0ZU9uTG9hZCA/PyB0cnVlLFxyXG4gICAgICBlbmFibGVMb2dnaW5nOiBvcHRpb25zLmVuYWJsZUxvZ2dpbmcgPz8gZmFsc2UsXHJcbiAgICAgIGxvZ2dlcjogb3B0aW9ucy5sb2dnZXIsXHJcbiAgICAgIHZlcmJvc2U6IG9wdGlvbnMudmVyYm9zZSxcclxuICAgIH07XHJcbiAgICB0aGlzLl9sb2dnZXIgPSBvcHRpb25zLmxvZ2dlciA/PyBkZWZhdWx0TG9nZ2VyO1xyXG4gICAgdGhpcy5fdmVyYm9zZU9wdGlvbnMgPSB0aGlzLnJlc29sdmVWZXJib3NlT3B0aW9ucyhvcHRpb25zLnZlcmJvc2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzb2x2ZSB2ZXJib3NlIG9wdGlvbnMgZnJvbSBib29sZWFuIG9yIG9iamVjdFxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVzb2x2ZVZlcmJvc2VPcHRpb25zKHZlcmJvc2U/OiBWZXJib3NlT3B0aW9ucyB8IGJvb2xlYW4pOiBSZXF1aXJlZDxWZXJib3NlT3B0aW9ucz4gfCBudWxsIHtcclxuICAgIGlmICh2ZXJib3NlID09PSB1bmRlZmluZWQgfHwgdmVyYm9zZSA9PT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAodmVyYm9zZSA9PT0gdHJ1ZSkge1xyXG4gICAgICByZXR1cm4geyAuLi5ERUZBVUxUX1ZFUkJPU0VfT1BUSU9OUyB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbG9nS2V5czogdmVyYm9zZS5sb2dLZXlzID8/IERFRkFVTFRfVkVSQk9TRV9PUFRJT05TLmxvZ0tleXMsXHJcbiAgICAgIGxvZ1ZhbHVlczogdmVyYm9zZS5sb2dWYWx1ZXMgPz8gREVGQVVMVF9WRVJCT1NFX09QVElPTlMubG9nVmFsdWVzLFxyXG4gICAgICBsb2dPdmVycmlkZXM6IHZlcmJvc2UubG9nT3ZlcnJpZGVzID8/IERFRkFVTFRfVkVSQk9TRV9PUFRJT05TLmxvZ092ZXJyaWRlcyxcclxuICAgICAgbG9nVGltaW5nOiB2ZXJib3NlLmxvZ1RpbWluZyA/PyBERUZBVUxUX1ZFUkJPU0VfT1BUSU9OUy5sb2dUaW1pbmcsXHJcbiAgICAgIG1hc2tWYWx1ZXM6IHZlcmJvc2UubWFza1ZhbHVlcyA/PyBERUZBVUxUX1ZFUkJPU0VfT1BUSU9OUy5tYXNrVmFsdWVzLFxyXG4gICAgICBzZW5zaXRpdmVLZXlzOiB2ZXJib3NlLnNlbnNpdGl2ZUtleXMgPz8gREVGQVVMVF9WRVJCT1NFX09QVElPTlMuc2Vuc2l0aXZlS2V5cyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb2cgYSBtZXNzYWdlIGlmIGxvZ2dpbmcgaXMgZW5hYmxlZFxyXG4gICAqL1xyXG4gIHByaXZhdGUgbG9nKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX29wdGlvbnMuZW5hYmxlTG9nZ2luZyB8fCB0aGlzLl92ZXJib3NlT3B0aW9ucykge1xyXG4gICAgICB0aGlzLl9sb2dnZXIubG9nKGBbY29uZmlnLWF3c10gJHttZXNzYWdlfWApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWFzayBhIHZhbHVlIGZvciBsb2dnaW5nXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBtYXNrVmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5fdmVyYm9zZU9wdGlvbnM/LmxvZ1ZhbHVlcykge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3RyVmFsdWUgPSBTdHJpbmcodmFsdWUpO1xyXG4gICAgY29uc3QgbG93ZXJLZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAvLyBDaGVjayBpZiBrZXkgY29udGFpbnMgYW55IHNlbnNpdGl2ZSBwYXR0ZXJuc1xyXG4gICAgY29uc3QgaXNTZW5zaXRpdmUgPSB0aGlzLl92ZXJib3NlT3B0aW9ucy5zZW5zaXRpdmVLZXlzLnNvbWUoXHJcbiAgICAgIChwYXR0ZXJuKSA9PiBsb3dlcktleS5pbmNsdWRlcyhwYXR0ZXJuLnRvTG93ZXJDYXNlKCkpXHJcbiAgICApO1xyXG5cclxuICAgIGlmICh0aGlzLl92ZXJib3NlT3B0aW9ucy5tYXNrVmFsdWVzIHx8IGlzU2Vuc2l0aXZlKSB7XHJcbiAgICAgIGlmIChzdHJWYWx1ZS5sZW5ndGggPD0gNCkge1xyXG4gICAgICAgIHJldHVybiAnKioqKic7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGAke3N0clZhbHVlLnNsaWNlKDAsIDIpfSoqLi4uJHtzdHJWYWx1ZS5zbGljZSgtMil9YDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc3RyVmFsdWU7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBsb2FkaW5nIG9yZGVyIGZvciBsb2FkZXJzIGJhc2VkIG9uIHByZWNlZGVuY2Ugc3RyYXRlZ3kuXHJcbiAgICogUmV0dXJucyBsb2FkZXJzIHNvcnRlZCBieSBwcmlvcml0eSAobG93ZXIgcHJpb3JpdHkgZmlyc3QsIHNvIGhpZ2hlciBwcmlvcml0eSBsb2FkcyBsYXN0IGFuZCB3aW5zKS5cclxuICAgKi9cclxuICBwcml2YXRlIGdldExvYWRPcmRlcigpOiBDb25maWdMb2FkZXJbXSB7XHJcbiAgICBjb25zdCB7IGxvYWRlcnMsIHByZWNlZGVuY2UgfSA9IHRoaXMuX29wdGlvbnM7XHJcblxyXG4gICAgaWYgKCFsb2FkZXJzIHx8IGxvYWRlcnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiBwcmVjZWRlbmNlIGlzIGEgY3VzdG9tIGFycmF5LCB1c2UgaXRcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHByZWNlZGVuY2UpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNvcnRCeUN1c3RvbVByZWNlZGVuY2UobG9hZGVycywgcHJlY2VkZW5jZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXNlIHByZWRlZmluZWQgcHJlY2VkZW5jZSBvcmRlclxyXG4gICAgY29uc3Qgb3JkZXIgPSBQUkVDRURFTkNFX09SREVSU1twcmVjZWRlbmNlXTtcclxuICAgIHJldHVybiB0aGlzLnNvcnRCeVByZWRlZmluZWRPcmRlcihsb2FkZXJzLCBvcmRlcik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTb3J0IGxvYWRlcnMgYnkgY3VzdG9tIHByZWNlZGVuY2UgY29uZmlndXJhdGlvblxyXG4gICAqL1xyXG4gIHByaXZhdGUgc29ydEJ5Q3VzdG9tUHJlY2VkZW5jZShsb2FkZXJzOiBDb25maWdMb2FkZXJbXSwgcHJlY2VkZW5jZTogTG9hZGVyUHJlY2VkZW5jZVtdKTogQ29uZmlnTG9hZGVyW10ge1xyXG4gICAgY29uc3QgcHJpb3JpdHlNYXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG4gICAgZm9yIChjb25zdCBwIG9mIHByZWNlZGVuY2UpIHtcclxuICAgICAgcHJpb3JpdHlNYXAuc2V0KHAubG9hZGVyLCBwLnByaW9yaXR5KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTb3J0IGJ5IHByaW9yaXR5IChsb3dlciBmaXJzdCwgc28gaGlnaGVyIHByaW9yaXR5IGxvYWRzIGxhc3QgYW5kIHdpbnMpXHJcbiAgICByZXR1cm4gWy4uLmxvYWRlcnNdLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgY29uc3QgcHJpb3JpdHlBID0gcHJpb3JpdHlNYXAuZ2V0KGEuZ2V0TmFtZSgpKSA/PyAwO1xyXG4gICAgICBjb25zdCBwcmlvcml0eUIgPSBwcmlvcml0eU1hcC5nZXQoYi5nZXROYW1lKCkpID8/IDA7XHJcbiAgICAgIHJldHVybiBwcmlvcml0eUEgLSBwcmlvcml0eUI7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNvcnQgbG9hZGVycyBieSBwcmVkZWZpbmVkIG9yZGVyXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzb3J0QnlQcmVkZWZpbmVkT3JkZXIobG9hZGVyczogQ29uZmlnTG9hZGVyW10sIG9yZGVyOiBzdHJpbmdbXSk6IENvbmZpZ0xvYWRlcltdIHtcclxuICAgIGNvbnN0IG9yZGVyTWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuICAgIG9yZGVyLmZvckVhY2goKG5hbWUsIGluZGV4KSA9PiBvcmRlck1hcC5zZXQobmFtZSwgaW5kZXgpKTtcclxuXHJcbiAgICAvLyBTb3J0IGJ5IG9yZGVyIGluZGV4IChsb3dlciBmaXJzdCwgc28gaGlnaGVyIGluZGV4IGxvYWRzIGxhc3QgYW5kIHdpbnMpXHJcbiAgICByZXR1cm4gWy4uLmxvYWRlcnNdLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgY29uc3QgaW5kZXhBID0gb3JkZXJNYXAuZ2V0KGEuZ2V0TmFtZSgpKSA/PyAtMTtcclxuICAgICAgY29uc3QgaW5kZXhCID0gb3JkZXJNYXAuZ2V0KGIuZ2V0TmFtZSgpKSA/PyAtMTtcclxuICAgICAgcmV0dXJuIGluZGV4QSAtIGluZGV4QjtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTG9hZCBjb25maWd1cmF0aW9uIGZyb20gYWxsIGNvbmZpZ3VyZWQgbG9hZGVycy5cclxuICAgKiBMb2FkZXJzIGFyZSBleGVjdXRlZCBpbiBwcmVjZWRlbmNlIG9yZGVyLCB3aXRoIGxhdGVyIGxvYWRlcnMgb3ZlcnJpZGluZyBlYXJsaWVyIG9uZXMuXHJcbiAgICovXHJcbiAgYXN5bmMgbG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XHJcbiAgICBjb25zdCBzb3VyY2VzOiBDb25maWdTb3VyY2VJbmZvW10gPSBbXTtcclxuICAgIGxldCBtZXJnZWRDb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XHJcbiAgICBjb25zdCBrZXlPcmlnaW5zOiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcCgpOyAvLyBUcmFjayB3aGljaCBsb2FkZXIgc2V0IGVhY2gga2V5XHJcblxyXG4gICAgdGhpcy5sb2coJ0xvYWRpbmcgY29uZmlndXJhdGlvbi4uLicpO1xyXG5cclxuICAgIGNvbnN0IG9yZGVyZWRMb2FkZXJzID0gdGhpcy5nZXRMb2FkT3JkZXIoKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGxvYWRlciBvZiBvcmRlcmVkTG9hZGVycykge1xyXG4gICAgICBjb25zdCBsb2FkZXJOYW1lID0gbG9hZGVyLmdldE5hbWUoKTtcclxuICAgICAgY29uc3QgbG9hZGVyU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcclxuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgbG9hZGVyIGlzIGF2YWlsYWJsZVxyXG4gICAgICAgIGNvbnN0IGlzQXZhaWxhYmxlID0gYXdhaXQgbG9hZGVyLmlzQXZhaWxhYmxlKCk7XHJcbiAgICAgICAgaWYgKCFpc0F2YWlsYWJsZSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuX3ZlcmJvc2VPcHRpb25zPy5sb2dUaW1pbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2coYCR7bG9hZGVyTmFtZX06IHNraXBwZWQgKG5vdCBhdmFpbGFibGUpYCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIExvYWQgY29uZmlndXJhdGlvbiBmcm9tIHRoaXMgbG9hZGVyXHJcbiAgICAgICAgY29uc3QgbG9hZGVyQ29uZmlnID0gYXdhaXQgbG9hZGVyLmxvYWQoKTtcclxuICAgICAgICBjb25zdCBrZXlzTG9hZGVkID0gT2JqZWN0LmtleXMobG9hZGVyQ29uZmlnKTtcclxuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IERhdGUubm93KCkgLSBsb2FkZXJTdGFydFRpbWU7XHJcblxyXG4gICAgICAgIC8vIFRyYWNrIHNvdXJjZSBpbmZvXHJcbiAgICAgICAgc291cmNlcy5wdXNoKHtcclxuICAgICAgICAgIGxvYWRlcjogbG9hZGVyTmFtZSxcclxuICAgICAgICAgIGtleXNMb2FkZWQsXHJcbiAgICAgICAgICBkdXJhdGlvbixcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gTG9nIHRpbWluZyBhbmQga2V5c1xyXG4gICAgICAgIGlmICh0aGlzLl92ZXJib3NlT3B0aW9ucz8ubG9nVGltaW5nKSB7XHJcbiAgICAgICAgICB0aGlzLmxvZyhgJHtsb2FkZXJOYW1lfTogbG9hZGVkICR7a2V5c0xvYWRlZC5sZW5ndGh9IGtleXMgaW4gJHtkdXJhdGlvbn1tc2ApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gTG9nIGluZGl2aWR1YWwga2V5cyBhbmQgdHJhY2sgb3ZlcnJpZGVzXHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5c0xvYWRlZCkge1xyXG4gICAgICAgICAgY29uc3QgcHJldmlvdXNMb2FkZXIgPSBrZXlPcmlnaW5zLmdldChrZXkpO1xyXG4gICAgICAgICAgY29uc3QgaXNPdmVycmlkZSA9IHByZXZpb3VzTG9hZGVyICE9PSB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuX3ZlcmJvc2VPcHRpb25zPy5sb2dLZXlzKSB7XHJcbiAgICAgICAgICAgIGxldCBsb2dMaW5lID0gYCAgLSAke2tleX1gO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fdmVyYm9zZU9wdGlvbnMubG9nVmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgbG9nTGluZSArPSBgID0gXCIke3RoaXMubWFza1ZhbHVlKGtleSwgbG9hZGVyQ29uZmlnW2tleV0pfVwiYDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXNPdmVycmlkZSAmJiB0aGlzLl92ZXJib3NlT3B0aW9ucy5sb2dPdmVycmlkZXMpIHtcclxuICAgICAgICAgICAgICBsb2dMaW5lICs9IGAgKG92ZXJyaWRlcyAke3ByZXZpb3VzTG9hZGVyfSlgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubG9nKGxvZ0xpbmUpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGtleU9yaWdpbnMuc2V0KGtleSwgbG9hZGVyTmFtZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBNZXJnZSBjb25maWd1cmF0aW9uIChsYXRlciBsb2FkZXJzIG92ZXJyaWRlIGVhcmxpZXIgb25lcylcclxuICAgICAgICBtZXJnZWRDb25maWcgPSB7IC4uLm1lcmdlZENvbmZpZywgLi4ubG9hZGVyQ29uZmlnIH07XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IENvbmZpZ3VyYXRpb25Mb2FkRXJyb3IoXHJcbiAgICAgICAgICBgRmFpbGVkIHRvIGxvYWQgY29uZmlndXJhdGlvbiBmcm9tICR7bG9hZGVyTmFtZX06ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWAsXHJcbiAgICAgICAgICBsb2FkZXJOYW1lLFxyXG4gICAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogdW5kZWZpbmVkXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIENvdW50IG92ZXJyaWRlc1xyXG4gICAgY29uc3QgdG90YWxLZXlzID0gT2JqZWN0LmtleXMobWVyZ2VkQ29uZmlnKS5sZW5ndGg7XHJcbiAgICBjb25zdCB0b3RhbER1cmF0aW9uID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcclxuICAgIGNvbnN0IG92ZXJyaWRlQ291bnQgPSBzb3VyY2VzLnJlZHVjZSgoYWNjLCBzKSA9PiBhY2MgKyBzLmtleXNMb2FkZWQubGVuZ3RoLCAwKSAtIHRvdGFsS2V5cztcclxuXHJcbiAgICBpZiAodGhpcy5fdmVyYm9zZU9wdGlvbnM/LmxvZ1RpbWluZykge1xyXG4gICAgICB0aGlzLmxvZyhgQ29uZmlndXJhdGlvbiBsb2FkZWQ6ICR7dG90YWxLZXlzfSB0b3RhbCBrZXlzLCAke292ZXJyaWRlQ291bnR9IG92ZXJyaWRlcywgJHt0b3RhbER1cmF0aW9ufW1zIHRvdGFsYCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVmFsaWRhdGUgaWYgc2NoZW1hIGlzIHByb3ZpZGVkIGFuZCB2YWxpZGF0aW9uIGlzIGVuYWJsZWRcclxuICAgIGlmICh0aGlzLl9vcHRpb25zLnNjaGVtYSAmJiB0aGlzLl9vcHRpb25zLnZhbGlkYXRlT25Mb2FkKSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX29wdGlvbnMuc2NoZW1hLnNhZmVQYXJzZShtZXJnZWRDb25maWcpO1xyXG4gICAgICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgY29uc3Qgem9kRXJyb3IgPSByZXN1bHQuZXJyb3IgYXMgWm9kRXJyb3I7XHJcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcclxuICAgICAgICAgIGBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gZmFpbGVkOiAke3pvZEVycm9yLmVycm9ycy5tYXAoKGUpID0+IGAke2UucGF0aC5qb2luKCcuJyl9OiAke2UubWVzc2FnZX1gKS5qb2luKCcsICcpfWAsXHJcbiAgICAgICAgICB6b2RFcnJvci5lcnJvcnMsXHJcbiAgICAgICAgICB1bmRlZmluZWRcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY29uZmlnID0gcmVzdWx0LmRhdGEgYXMgVDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29uZmlnID0gbWVyZ2VkQ29uZmlnIGFzIFQ7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5sb2FkUmVzdWx0ID0ge1xyXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxyXG4gICAgICBzb3VyY2VzLFxyXG4gICAgICBsb2FkZWRBdDogbmV3IERhdGUoKSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5sb2FkZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gdmFsdWUgYnkga2V5LlxyXG4gICAqIEBwYXJhbSBrZXkgVGhlIGNvbmZpZ3VyYXRpb24ga2V5XHJcbiAgICogQHJldHVybnMgVGhlIGNvbmZpZ3VyYXRpb24gdmFsdWVcclxuICAgKiBAdGhyb3dzIENvbmZpZ3VyYXRpb25FcnJvciBpZiBjb25maWd1cmF0aW9uIGlzIG5vdCBsb2FkZWRcclxuICAgKi9cclxuICBnZXQ8SyBleHRlbmRzIGtleW9mIFQ+KGtleTogSyk6IFRbS10ge1xyXG4gICAgaWYgKCF0aGlzLmxvYWRlZCB8fCB0aGlzLmNvbmZpZyA9PT0gbnVsbCkge1xyXG4gICAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkVycm9yKCdDb25maWd1cmF0aW9uIG5vdCBsb2FkZWQuIENhbGwgbG9hZCgpIGZpcnN0LicpO1xyXG4gICAgfVxyXG4gICAgLy8gTm9uLW51bGwgYXNzZXJ0aW9uIGlzIHNhZmUgaGVyZSBiZWNhdXNlIHdlJ3ZlIGNoZWNrZWQgdGhpcy5jb25maWcgIT09IG51bGwgYWJvdmVcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZyFba2V5XTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBhbGwgY29uZmlndXJhdGlvbiB2YWx1ZXMuXHJcbiAgICogQHJldHVybnMgVGhlIGNvbXBsZXRlIGNvbmZpZ3VyYXRpb24gb2JqZWN0XHJcbiAgICogQHRocm93cyBDb25maWd1cmF0aW9uRXJyb3IgaWYgY29uZmlndXJhdGlvbiBpcyBub3QgbG9hZGVkXHJcbiAgICovXHJcbiAgZ2V0QWxsKCk6IFQge1xyXG4gICAgaWYgKCF0aGlzLmxvYWRlZCB8fCB0aGlzLmNvbmZpZyA9PT0gbnVsbCkge1xyXG4gICAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkVycm9yKCdDb25maWd1cmF0aW9uIG5vdCBsb2FkZWQuIENhbGwgbG9hZCgpIGZpcnN0LicpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaWYgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBsb2FkZWQuXHJcbiAgICogQHJldHVybnMgdHJ1ZSBpZiBjb25maWd1cmF0aW9uIGlzIGxvYWRlZFxyXG4gICAqL1xyXG4gIGlzTG9hZGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubG9hZGVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uIGVudmlyb25tZW50LlxyXG4gICAqIEByZXR1cm5zIFRoZSBBUFBfRU5WIHZhbHVlIG9yICdkZXZlbG9wbWVudCcgYXMgZGVmYXVsdFxyXG4gICAqL1xyXG4gIGdldEFwcEVudigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHByb2Nlc3MuZW52WydBUFBfRU5WJ10gPz8gJ2RldmVsb3BtZW50JztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgbG9hZCByZXN1bHQgd2l0aCBzb3VyY2UgaW5mb3JtYXRpb24uXHJcbiAgICogQHJldHVybnMgVGhlIGxvYWQgcmVzdWx0IG9yIG51bGwgaWYgbm90IGxvYWRlZFxyXG4gICAqL1xyXG4gIGdldExvYWRSZXN1bHQoKTogQ29uZmlnTG9hZFJlc3VsdDxUPiB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMubG9hZFJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlcmlhbGl6ZSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIHRvIEpTT04gc3RyaW5nLlxyXG4gICAqIEByZXR1cm5zIEpTT04gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb25maWd1cmF0aW9uXHJcbiAgICogQHRocm93cyBDb25maWd1cmF0aW9uRXJyb3IgaWYgY29uZmlndXJhdGlvbiBpcyBub3QgbG9hZGVkXHJcbiAgICovXHJcbiAgc2VyaWFsaXplKCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRoaXMubG9hZGVkIHx8IHRoaXMuY29uZmlnID09PSBudWxsKSB7XHJcbiAgICAgIHRocm93IG5ldyBDb25maWd1cmF0aW9uRXJyb3IoJ0NvbmZpZ3VyYXRpb24gbm90IGxvYWRlZC4gQ2FsbCBsb2FkKCkgZmlyc3QuJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgbmV3IENvbmZpZ01hbmFnZXIgd2l0aCBjb25maWd1cmF0aW9uIGxvYWRlZCBmcm9tIGEgSlNPTiBzdHJpbmcuXHJcbiAgICogVGhpcyBpcyB1c2VmdWwgZm9yIHJlc3RvcmluZyBjb25maWd1cmF0aW9uIGZyb20gYSBzZXJpYWxpemVkIHN0YXRlLlxyXG4gICAqIEBwYXJhbSBqc29uIEpTT04gc3RyaW5nIHRvIGRlc2VyaWFsaXplXHJcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgQ29uZmlnTWFuYWdlciBvcHRpb25zIChzY2hlbWEgd2lsbCBiZSB1c2VkIGZvciB2YWxpZGF0aW9uKVxyXG4gICAqIEByZXR1cm5zIEEgbmV3IENvbmZpZ01hbmFnZXIgaW5zdGFuY2Ugd2l0aCB0aGUgZGVzZXJpYWxpemVkIGNvbmZpZ3VyYXRpb25cclxuICAgKi9cclxuICBzdGF0aWMgZGVzZXJpYWxpemU8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcclxuICAgIGpzb246IHN0cmluZyxcclxuICAgIG9wdGlvbnM6IENvbmZpZ01hbmFnZXJPcHRpb25zPFQ+ID0ge31cclxuICApOiBDb25maWdNYW5hZ2VyPFQ+IHtcclxuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoanNvbik7XHJcblxyXG4gICAgLy8gVmFsaWRhdGUgaWYgc2NoZW1hIGlzIHByb3ZpZGVkXHJcbiAgICBpZiAob3B0aW9ucy5zY2hlbWEpIHtcclxuICAgICAgY29uc3QgcmVzdWx0ID0gb3B0aW9ucy5zY2hlbWEuc2FmZVBhcnNlKHBhcnNlZCk7XHJcbiAgICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICBjb25zdCB6b2RFcnJvciA9IHJlc3VsdC5lcnJvciBhcyBab2RFcnJvcjtcclxuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxyXG4gICAgICAgICAgYERlc2VyaWFsaXphdGlvbiB2YWxpZGF0aW9uIGZhaWxlZDogJHt6b2RFcnJvci5lcnJvcnMubWFwKChlKSA9PiBgJHtlLnBhdGguam9pbignLicpfTogJHtlLm1lc3NhZ2V9YCkuam9pbignLCAnKX1gLFxyXG4gICAgICAgICAgem9kRXJyb3IuZXJyb3JzLFxyXG4gICAgICAgICAgdW5kZWZpbmVkXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIENyZWF0ZSBhIG5ldyBDb25maWdNYW5hZ2VyIGFuZCBzZXQgaXRzIGludGVybmFsIHN0YXRlXHJcbiAgICBjb25zdCBtYW5hZ2VyID0gbmV3IENvbmZpZ01hbmFnZXI8VD4ob3B0aW9ucyk7XHJcbiAgICBtYW5hZ2VyLmNvbmZpZyA9IHBhcnNlZCBhcyBUO1xyXG4gICAgbWFuYWdlci5sb2FkZWQgPSB0cnVlO1xyXG4gICAgbWFuYWdlci5sb2FkUmVzdWx0ID0ge1xyXG4gICAgICBjb25maWc6IHBhcnNlZCBhcyBULFxyXG4gICAgICBzb3VyY2VzOiBbeyBsb2FkZXI6ICdkZXNlcmlhbGl6ZScsIGtleXNMb2FkZWQ6IE9iamVjdC5rZXlzKHBhcnNlZCksIGR1cmF0aW9uOiAwIH1dLFxyXG4gICAgICBsb2FkZWRBdDogbmV3IERhdGUoKSxcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIG1hbmFnZXI7XHJcbiAgfVxyXG59XHJcbiJdfQ==
362
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9jb25maWctYXdzL3NyYy9jb25maWctbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFaEc7O0dBRUc7QUFDSCxNQUFNLGFBQWEsR0FBVztJQUM1QixHQUFHLEVBQUUsQ0FBQyxPQUFlLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO0lBQzlDLEtBQUssRUFBRSxDQUFDLE9BQWUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7SUFDbEQsSUFBSSxFQUFFLENBQUMsT0FBZSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUNoRCxLQUFLLEVBQUUsQ0FBQyxPQUFlLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0NBQ25ELENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUV6Rzs7R0FFRztBQUNILE1BQU0sdUJBQXVCLEdBQTZCO0lBQ3hELE9BQU8sRUFBRSxJQUFJO0lBQ2IsU0FBUyxFQUFFLEtBQUs7SUFDaEIsWUFBWSxFQUFFLElBQUk7SUFDbEIsU0FBUyxFQUFFLElBQUk7SUFDZixVQUFVLEVBQUUsSUFBSTtJQUNoQixhQUFhLEVBQUUsc0JBQXNCO0NBQ3RDLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLGlCQUFpQixHQUFrRDtJQUN2RSwwREFBMEQ7SUFDMUQsV0FBVyxFQUFFO1FBQ1gsbUJBQW1CO1FBQ25C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Q0FBc0MsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQ2xILFFBQVEsQ0FBQyxNQUFNLEVBQ2YsU0FBUyxDQUNWLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUVELHdEQUF3RDtRQUN4RCxNQUFNLE9BQU8sR0FBRyxJQUFJLGFBQWEsQ0FBSSxPQUFPLENBQUMsQ0FBQztRQUM5QyxPQUFPLENBQUMsTUFBTSxHQUFHLE1BQVcsQ0FBQztRQUM3QixPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUN0QixPQUFPLENBQUMsVUFBVSxHQUFHO1lBQ25CLE1BQU0sRUFBRSxNQUFXO1lBQ25CLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDbEYsUUFBUSxFQUFFLElBQUksSUFBSSxFQUFFO1NBQ3JCLENBQUM7UUFFRixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFpvZEVycm9yIH0gZnJvbSAnem9kJztcclxuaW1wb3J0IHR5cGUgeyBDb25maWdMb2FkZXIgfSBmcm9tICcuL2ludGVyZmFjZXMvY29uZmlnLWxvYWRlci5pbnRlcmZhY2UuanMnO1xyXG5pbXBvcnQgdHlwZSB7XHJcbiAgQ29uZmlnTWFuYWdlck9wdGlvbnMsXHJcbiAgQ29uZmlnTG9hZFJlc3VsdCxcclxuICBDb25maWdTb3VyY2VJbmZvLFxyXG4gIExvZ2dlcixcclxuICBMb2FkZXJQcmVjZWRlbmNlLFxyXG4gIFZlcmJvc2VPcHRpb25zLFxyXG59IGZyb20gJy4vaW50ZXJmYWNlcy9jb25maWctbWFuYWdlci5pbnRlcmZhY2UuanMnO1xyXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uRXJyb3IsIENvbmZpZ3VyYXRpb25Mb2FkRXJyb3IsIFZhbGlkYXRpb25FcnJvciB9IGZyb20gJy4vZXJyb3JzL2luZGV4LmpzJztcclxuXHJcbi8qKlxyXG4gKiBEZWZhdWx0IGNvbnNvbGUgbG9nZ2VyIGltcGxlbWVudGF0aW9uXHJcbiAqL1xyXG5jb25zdCBkZWZhdWx0TG9nZ2VyOiBMb2dnZXIgPSB7XHJcbiAgbG9nOiAobWVzc2FnZTogc3RyaW5nKSA9PiBjb25zb2xlLmxvZyhtZXNzYWdlKSxcclxuICBlcnJvcjogKG1lc3NhZ2U6IHN0cmluZykgPT4gY29uc29sZS5lcnJvcihtZXNzYWdlKSxcclxuICB3YXJuOiAobWVzc2FnZTogc3RyaW5nKSA9PiBjb25zb2xlLndhcm4obWVzc2FnZSksXHJcbiAgZGVidWc6IChtZXNzYWdlOiBzdHJpbmcpID0+IGNvbnNvbGUuZGVidWcobWVzc2FnZSksXHJcbn07XHJcblxyXG4vKipcclxuICogRGVmYXVsdCBzZW5zaXRpdmUga2V5cyB0aGF0IHNob3VsZCBhbHdheXMgYmUgbWFza2VkXHJcbiAqL1xyXG5jb25zdCBERUZBVUxUX1NFTlNJVElWRV9LRVlTID0gWydwYXNzd29yZCcsICdzZWNyZXQnLCAna2V5JywgJ3Rva2VuJywgJ2NyZWRlbnRpYWwnLCAnYXBpX2tleScsICdhcGlrZXknXTtcclxuXHJcbi8qKlxyXG4gKiBEZWZhdWx0IHZlcmJvc2Ugb3B0aW9uc1xyXG4gKi9cclxuY29uc3QgREVGQVVMVF9WRVJCT1NFX09QVElPTlM6IFJlcXVpcmVkPFZlcmJvc2VPcHRpb25zPiA9IHtcclxuICBsb2dLZXlzOiB0cnVlLFxyXG4gIGxvZ1ZhbHVlczogZmFsc2UsXHJcbiAgbG9nT3ZlcnJpZGVzOiB0cnVlLFxyXG4gIGxvZ1RpbWluZzogdHJ1ZSxcclxuICBtYXNrVmFsdWVzOiB0cnVlLFxyXG4gIHNlbnNpdGl2ZUtleXM6IERFRkFVTFRfU0VOU0lUSVZFX0tFWVMsXHJcbn07XHJcblxyXG4vKipcclxuICogUHJlZGVmaW5lZCBwcmVjZWRlbmNlIG9yZGVycyBmb3IgY29tbW9uIHN0cmF0ZWdpZXNcclxuICogSGlnaGVyIGluZGV4ID0gaGlnaGVyIHByaW9yaXR5IChsYXRlciBsb2FkZXJzIG92ZXJyaWRlIGVhcmxpZXIgb25lcylcclxuICovXHJcbmNvbnN0IFBSRUNFREVOQ0VfT1JERVJTOiBSZWNvcmQ8J2F3cy1maXJzdCcgfCAnbG9jYWwtZmlyc3QnLCBzdHJpbmdbXT4gPSB7XHJcbiAgLy8gQVdTIHdpbnM6IGVudiAtPiBlbnZGaWxlIC0+IHMzIC0+IHNlY3JldHNNYW5hZ2VyIC0+IHNzbVxyXG4gICdhd3MtZmlyc3QnOiBbXHJcbiAgICAnRW52aXJvbm1lbnRMb2FkZXInLFxyXG4gICAgJ0VudkZpbGVMb2FkZXInLFxyXG4gICAgJ1MzTG9hZGVyJyxcclxuICAgICdTZWNyZXRzTWFuYWdlckxvYWRlcicsXHJcbiAgICAnU1NNUGFyYW1ldGVyU3RvcmVMb2FkZXInLFxyXG4gIF0sXHJcbiAgLy8gTG9jYWwgd2luczogc3NtIC0+IHNlY3JldHNNYW5hZ2VyIC0+IHMzIC0+IGVudkZpbGUgLT4gZW52XHJcbiAgJ2xvY2FsLWZpcnN0JzogW1xyXG4gICAgJ1NTTVBhcmFtZXRlclN0b3JlTG9hZGVyJyxcclxuICAgICdTZWNyZXRzTWFuYWdlckxvYWRlcicsXHJcbiAgICAnUzNMb2FkZXInLFxyXG4gICAgJ0VudkZpbGVMb2FkZXInLFxyXG4gICAgJ0Vudmlyb25tZW50TG9hZGVyJyxcclxuICBdLFxyXG59O1xyXG5cclxuXHJcbi8qKlxyXG4gKiBDb25maWdNYW5hZ2VyIG9yY2hlc3RyYXRlcyBsb2FkaW5nIGNvbmZpZ3VyYXRpb24gZnJvbSBtdWx0aXBsZSBzb3VyY2VzXHJcbiAqIHdpdGggY29uZmlndXJhYmxlIHByZWNlZGVuY2UgYW5kIHZhbGlkYXRpb24uXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogaW1wb3J0IHsgQ29uZmlnTWFuYWdlciwgRW52aXJvbm1lbnRMb2FkZXIsIFNlY3JldHNNYW5hZ2VyTG9hZGVyIH0gZnJvbSAnQGR5YW5ldC9jb25maWctYXdzJztcclxuICogaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XHJcbiAqXHJcbiAqIGNvbnN0IHNjaGVtYSA9IHoub2JqZWN0KHtcclxuICogICBEQVRBQkFTRV9VUkw6IHouc3RyaW5nKCksXHJcbiAqICAgQVBJX0tFWTogei5zdHJpbmcoKSxcclxuICogICBQT1JUOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDMwMDApLFxyXG4gKiB9KTtcclxuICpcclxuICogY29uc3QgbWFuYWdlciA9IG5ldyBDb25maWdNYW5hZ2VyKHtcclxuICogICBsb2FkZXJzOiBbXHJcbiAqICAgICBuZXcgRW52aXJvbm1lbnRMb2FkZXIoeyBwcmVmaXg6ICdBUFBfJyB9KSxcclxuICogICAgIG5ldyBTZWNyZXRzTWFuYWdlckxvYWRlcih7IHNlY3JldE5hbWU6ICcvbXktYXBwL2NvbmZpZycgfSksXHJcbiAqICAgXSxcclxuICogICBzY2hlbWEsXHJcbiAqICAgcHJlY2VkZW5jZTogJ2F3cy1maXJzdCcsXHJcbiAqICAgdmVyYm9zZTogdHJ1ZSxcclxuICogfSk7XHJcbiAqXHJcbiAqIGF3YWl0IG1hbmFnZXIubG9hZCgpO1xyXG4gKiBjb25zdCBkYlVybCA9IG1hbmFnZXIuZ2V0KCdEQVRBQkFTRV9VUkwnKTtcclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQ29uZmlnTWFuYWdlcjxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcclxuICAvKiogQGludGVybmFsICovXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9vcHRpb25zOiBSZXF1aXJlZDxPbWl0PENvbmZpZ01hbmFnZXJPcHRpb25zPFQ+LCAnc2NoZW1hJyB8ICdsb2dnZXInIHwgJ3ZlcmJvc2UnPj4gJiB7XHJcbiAgICBzY2hlbWE/OiBDb25maWdNYW5hZ2VyT3B0aW9uczxUPlsnc2NoZW1hJ107XHJcbiAgICBsb2dnZXI/OiBMb2dnZXI7XHJcbiAgICB2ZXJib3NlPzogVmVyYm9zZU9wdGlvbnMgfCBib29sZWFuO1xyXG4gIH07XHJcbiAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBfbG9nZ2VyOiBMb2dnZXI7XHJcbiAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBfdmVyYm9zZU9wdGlvbnM6IFJlcXVpcmVkPFZlcmJvc2VPcHRpb25zPiB8IG51bGw7XHJcblxyXG4gIHByaXZhdGUgY29uZmlnOiBUIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBsb2FkUmVzdWx0OiBDb25maWdMb2FkUmVzdWx0PFQ+IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBsb2FkZWQgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3Iob3B0aW9uczogQ29uZmlnTWFuYWdlck9wdGlvbnM8VD4gPSB7fSkge1xyXG4gICAgdGhpcy5fb3B0aW9ucyA9IHtcclxuICAgICAgbG9hZGVyczogb3B0aW9ucy5sb2FkZXJzID8/IFtdLFxyXG4gICAgICBzY2hlbWE6IG9wdGlvbnMuc2NoZW1hLFxyXG4gICAgICBwcmVjZWRlbmNlOiBvcHRpb25zLnByZWNlZGVuY2UgPz8gJ2F3cy1maXJzdCcsXHJcbiAgICAgIHZhbGlkYXRlT25Mb2FkOiBvcHRpb25zLnZhbGlkYXRlT25Mb2FkID8/IHRydWUsXHJcbiAgICAgIGVuYWJsZUxvZ2dpbmc6IG9wdGlvbnMuZW5hYmxlTG9nZ2luZyA/PyBmYWxzZSxcclxuICAgICAgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlcixcclxuICAgICAgdmVyYm9zZTogb3B0aW9ucy52ZXJib3NlLFxyXG4gICAgfTtcclxuICAgIHRoaXMuX2xvZ2dlciA9IG9wdGlvbnMubG9nZ2VyID8/IGRlZmF1bHRMb2dnZXI7XHJcbiAgICB0aGlzLl92ZXJib3NlT3B0aW9ucyA9IHRoaXMucmVzb2x2ZVZlcmJvc2VPcHRpb25zKG9wdGlvbnMudmVyYm9zZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNvbHZlIHZlcmJvc2Ugb3B0aW9ucyBmcm9tIGJvb2xlYW4gb3Igb2JqZWN0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZXNvbHZlVmVyYm9zZU9wdGlvbnModmVyYm9zZT86IFZlcmJvc2VPcHRpb25zIHwgYm9vbGVhbik6IFJlcXVpcmVkPFZlcmJvc2VPcHRpb25zPiB8IG51bGwge1xyXG4gICAgaWYgKHZlcmJvc2UgPT09IHVuZGVmaW5lZCB8fCB2ZXJib3NlID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh2ZXJib3NlID09PSB0cnVlKSB7XHJcbiAgICAgIHJldHVybiB7IC4uLkRFRkFVTFRfVkVSQk9TRV9PUFRJT05TIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBsb2dLZXlzOiB2ZXJib3NlLmxvZ0tleXMgPz8gREVGQVVMVF9WRVJCT1NFX09QVElPTlMubG9nS2V5cyxcclxuICAgICAgbG9nVmFsdWVzOiB2ZXJib3NlLmxvZ1ZhbHVlcyA/PyBERUZBVUxUX1ZFUkJPU0VfT1BUSU9OUy5sb2dWYWx1ZXMsXHJcbiAgICAgIGxvZ092ZXJyaWRlczogdmVyYm9zZS5sb2dPdmVycmlkZXMgPz8gREVGQVVMVF9WRVJCT1NFX09QVElPTlMubG9nT3ZlcnJpZGVzLFxyXG4gICAgICBsb2dUaW1pbmc6IHZlcmJvc2UubG9nVGltaW5nID8/IERFRkFVTFRfVkVSQk9TRV9PUFRJT05TLmxvZ1RpbWluZyxcclxuICAgICAgbWFza1ZhbHVlczogdmVyYm9zZS5tYXNrVmFsdWVzID8/IERFRkFVTFRfVkVSQk9TRV9PUFRJT05TLm1hc2tWYWx1ZXMsXHJcbiAgICAgIHNlbnNpdGl2ZUtleXM6IHZlcmJvc2Uuc2Vuc2l0aXZlS2V5cyA/PyBERUZBVUxUX1ZFUkJPU0VfT1BUSU9OUy5zZW5zaXRpdmVLZXlzLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExvZyBhIG1lc3NhZ2UgaWYgbG9nZ2luZyBpcyBlbmFibGVkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBsb2cobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fb3B0aW9ucy5lbmFibGVMb2dnaW5nIHx8IHRoaXMuX3ZlcmJvc2VPcHRpb25zKSB7XHJcbiAgICAgIHRoaXMuX2xvZ2dlci5sb2coYFtjb25maWctYXdzXSAke21lc3NhZ2V9YCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNYXNrIGEgdmFsdWUgZm9yIGxvZ2dpbmdcclxuICAgKi9cclxuICBwcml2YXRlIG1hc2tWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLl92ZXJib3NlT3B0aW9ucz8ubG9nVmFsdWVzKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdHJWYWx1ZSA9IFN0cmluZyh2YWx1ZSk7XHJcbiAgICBjb25zdCBsb3dlcktleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgIC8vIENoZWNrIGlmIGtleSBjb250YWlucyBhbnkgc2Vuc2l0aXZlIHBhdHRlcm5zXHJcbiAgICBjb25zdCBpc1NlbnNpdGl2ZSA9IHRoaXMuX3ZlcmJvc2VPcHRpb25zLnNlbnNpdGl2ZUtleXMuc29tZShcclxuICAgICAgKHBhdHRlcm4pID0+IGxvd2VyS2V5LmluY2x1ZGVzKHBhdHRlcm4udG9Mb3dlckNhc2UoKSlcclxuICAgICk7XHJcblxyXG4gICAgaWYgKHRoaXMuX3ZlcmJvc2VPcHRpb25zLm1hc2tWYWx1ZXMgfHwgaXNTZW5zaXRpdmUpIHtcclxuICAgICAgaWYgKHN0clZhbHVlLmxlbmd0aCA8PSA0KSB7XHJcbiAgICAgICAgcmV0dXJuICcqKioqJztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYCR7c3RyVmFsdWUuc2xpY2UoMCwgMil9KiouLi4ke3N0clZhbHVlLnNsaWNlKC0yKX1gO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdHJWYWx1ZTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGxvYWRpbmcgb3JkZXIgZm9yIGxvYWRlcnMgYmFzZWQgb24gcHJlY2VkZW5jZSBzdHJhdGVneS5cclxuICAgKiBSZXR1cm5zIGxvYWRlcnMgc29ydGVkIGJ5IHByaW9yaXR5IChsb3dlciBwcmlvcml0eSBmaXJzdCwgc28gaGlnaGVyIHByaW9yaXR5IGxvYWRzIGxhc3QgYW5kIHdpbnMpLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0TG9hZE9yZGVyKCk6IENvbmZpZ0xvYWRlcltdIHtcclxuICAgIGNvbnN0IHsgbG9hZGVycywgcHJlY2VkZW5jZSB9ID0gdGhpcy5fb3B0aW9ucztcclxuXHJcbiAgICBpZiAoIWxvYWRlcnMgfHwgbG9hZGVycy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHByZWNlZGVuY2UgaXMgYSBjdXN0b20gYXJyYXksIHVzZSBpdFxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJlY2VkZW5jZSkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc29ydEJ5Q3VzdG9tUHJlY2VkZW5jZShsb2FkZXJzLCBwcmVjZWRlbmNlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBVc2UgcHJlZGVmaW5lZCBwcmVjZWRlbmNlIG9yZGVyXHJcbiAgICBjb25zdCBvcmRlciA9IFBSRUNFREVOQ0VfT1JERVJTW3ByZWNlZGVuY2VdO1xyXG4gICAgcmV0dXJuIHRoaXMuc29ydEJ5UHJlZGVmaW5lZE9yZGVyKGxvYWRlcnMsIG9yZGVyKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNvcnQgbG9hZGVycyBieSBjdXN0b20gcHJlY2VkZW5jZSBjb25maWd1cmF0aW9uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzb3J0QnlDdXN0b21QcmVjZWRlbmNlKGxvYWRlcnM6IENvbmZpZ0xvYWRlcltdLCBwcmVjZWRlbmNlOiBMb2FkZXJQcmVjZWRlbmNlW10pOiBDb25maWdMb2FkZXJbXSB7XHJcbiAgICBjb25zdCBwcmlvcml0eU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcbiAgICBmb3IgKGNvbnN0IHAgb2YgcHJlY2VkZW5jZSkge1xyXG4gICAgICBwcmlvcml0eU1hcC5zZXQocC5sb2FkZXIsIHAucHJpb3JpdHkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNvcnQgYnkgcHJpb3JpdHkgKGxvd2VyIGZpcnN0LCBzbyBoaWdoZXIgcHJpb3JpdHkgbG9hZHMgbGFzdCBhbmQgd2lucylcclxuICAgIHJldHVybiBbLi4ubG9hZGVyc10uc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICBjb25zdCBwcmlvcml0eUEgPSBwcmlvcml0eU1hcC5nZXQoYS5nZXROYW1lKCkpID8/IDA7XHJcbiAgICAgIGNvbnN0IHByaW9yaXR5QiA9IHByaW9yaXR5TWFwLmdldChiLmdldE5hbWUoKSkgPz8gMDtcclxuICAgICAgcmV0dXJuIHByaW9yaXR5QSAtIHByaW9yaXR5QjtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU29ydCBsb2FkZXJzIGJ5IHByZWRlZmluZWQgb3JkZXJcclxuICAgKi9cclxuICBwcml2YXRlIHNvcnRCeVByZWRlZmluZWRPcmRlcihsb2FkZXJzOiBDb25maWdMb2FkZXJbXSwgb3JkZXI6IHN0cmluZ1tdKTogQ29uZmlnTG9hZGVyW10ge1xyXG4gICAgY29uc3Qgb3JkZXJNYXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG4gICAgb3JkZXIuZm9yRWFjaCgobmFtZSwgaW5kZXgpID0+IG9yZGVyTWFwLnNldChuYW1lLCBpbmRleCkpO1xyXG5cclxuICAgIC8vIFNvcnQgYnkgb3JkZXIgaW5kZXggKGxvd2VyIGZpcnN0LCBzbyBoaWdoZXIgaW5kZXggbG9hZHMgbGFzdCBhbmQgd2lucylcclxuICAgIHJldHVybiBbLi4ubG9hZGVyc10uc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICBjb25zdCBpbmRleEEgPSBvcmRlck1hcC5nZXQoYS5nZXROYW1lKCkpID8/IC0xO1xyXG4gICAgICBjb25zdCBpbmRleEIgPSBvcmRlck1hcC5nZXQoYi5nZXROYW1lKCkpID8/IC0xO1xyXG4gICAgICByZXR1cm4gaW5kZXhBIC0gaW5kZXhCO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb2FkIGNvbmZpZ3VyYXRpb24gZnJvbSBhbGwgY29uZmlndXJlZCBsb2FkZXJzLlxyXG4gICAqIExvYWRlcnMgYXJlIGV4ZWN1dGVkIGluIHByZWNlZGVuY2Ugb3JkZXIsIHdpdGggbGF0ZXIgbG9hZGVycyBvdmVycmlkaW5nIGVhcmxpZXIgb25lcy5cclxuICAgKi9cclxuICBhc3luYyBsb2FkKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcclxuICAgIGNvbnN0IHNvdXJjZXM6IENvbmZpZ1NvdXJjZUluZm9bXSA9IFtdO1xyXG4gICAgbGV0IG1lcmdlZENvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcclxuICAgIGNvbnN0IGtleU9yaWdpbnM6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKCk7IC8vIFRyYWNrIHdoaWNoIGxvYWRlciBzZXQgZWFjaCBrZXlcclxuXHJcbiAgICB0aGlzLmxvZygnTG9hZGluZyBjb25maWd1cmF0aW9uLi4uJyk7XHJcblxyXG4gICAgY29uc3Qgb3JkZXJlZExvYWRlcnMgPSB0aGlzLmdldExvYWRPcmRlcigpO1xyXG5cclxuICAgIGZvciAoY29uc3QgbG9hZGVyIG9mIG9yZGVyZWRMb2FkZXJzKSB7XHJcbiAgICAgIGNvbnN0IGxvYWRlck5hbWUgPSBsb2FkZXIuZ2V0TmFtZSgpO1xyXG4gICAgICBjb25zdCBsb2FkZXJTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xyXG5cclxuICAgICAgdHJ5IHtcclxuICAgICAgICAvLyBDaGVjayBpZiBsb2FkZXIgaXMgYXZhaWxhYmxlXHJcbiAgICAgICAgY29uc3QgaXNBdmFpbGFibGUgPSBhd2FpdCBsb2FkZXIuaXNBdmFpbGFibGUoKTtcclxuICAgICAgICBpZiAoIWlzQXZhaWxhYmxlKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5fdmVyYm9zZU9wdGlvbnM/LmxvZ1RpbWluZykge1xyXG4gICAgICAgICAgICB0aGlzLmxvZyhgJHtsb2FkZXJOYW1lfTogc2tpcHBlZCAobm90IGF2YWlsYWJsZSlgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gTG9hZCBjb25maWd1cmF0aW9uIGZyb20gdGhpcyBsb2FkZXJcclxuICAgICAgICBjb25zdCBsb2FkZXJDb25maWcgPSBhd2FpdCBsb2FkZXIubG9hZCgpO1xyXG4gICAgICAgIGNvbnN0IGtleXNMb2FkZWQgPSBPYmplY3Qua2V5cyhsb2FkZXJDb25maWcpO1xyXG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gRGF0ZS5ub3coKSAtIGxvYWRlclN0YXJ0VGltZTtcclxuXHJcbiAgICAgICAgLy8gVHJhY2sgc291cmNlIGluZm9cclxuICAgICAgICBzb3VyY2VzLnB1c2goe1xyXG4gICAgICAgICAgbG9hZGVyOiBsb2FkZXJOYW1lLFxyXG4gICAgICAgICAga2V5c0xvYWRlZCxcclxuICAgICAgICAgIGR1cmF0aW9uLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBMb2cgdGltaW5nIGFuZCBrZXlzXHJcbiAgICAgICAgaWYgKHRoaXMuX3ZlcmJvc2VPcHRpb25zPy5sb2dUaW1pbmcpIHtcclxuICAgICAgICAgIHRoaXMubG9nKGAke2xvYWRlck5hbWV9OiBsb2FkZWQgJHtrZXlzTG9hZGVkLmxlbmd0aH0ga2V5cyBpbiAke2R1cmF0aW9ufW1zYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBMb2cgaW5kaXZpZHVhbCBrZXlzIGFuZCB0cmFjayBvdmVycmlkZXNcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzTG9hZGVkKSB7XHJcbiAgICAgICAgICBjb25zdCBwcmV2aW91c0xvYWRlciA9IGtleU9yaWdpbnMuZ2V0KGtleSk7XHJcbiAgICAgICAgICBjb25zdCBpc092ZXJyaWRlID0gcHJldmlvdXNMb2FkZXIgIT09IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5fdmVyYm9zZU9wdGlvbnM/LmxvZ0tleXMpIHtcclxuICAgICAgICAgICAgbGV0IGxvZ0xpbmUgPSBgICAtICR7a2V5fWA7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl92ZXJib3NlT3B0aW9ucy5sb2dWYWx1ZXMpIHtcclxuICAgICAgICAgICAgICBsb2dMaW5lICs9IGAgPSBcIiR7dGhpcy5tYXNrVmFsdWUoa2V5LCBsb2FkZXJDb25maWdba2V5XSl9XCJgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpc092ZXJyaWRlICYmIHRoaXMuX3ZlcmJvc2VPcHRpb25zLmxvZ092ZXJyaWRlcykge1xyXG4gICAgICAgICAgICAgIGxvZ0xpbmUgKz0gYCAob3ZlcnJpZGVzICR7cHJldmlvdXNMb2FkZXJ9KWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5sb2cobG9nTGluZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAga2V5T3JpZ2lucy5zZXQoa2V5LCBsb2FkZXJOYW1lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIE1lcmdlIGNvbmZpZ3VyYXRpb24gKGxhdGVyIGxvYWRlcnMgb3ZlcnJpZGUgZWFybGllciBvbmVzKVxyXG4gICAgICAgIG1lcmdlZENvbmZpZyA9IHsgLi4ubWVyZ2VkQ29uZmlnLCAuLi5sb2FkZXJDb25maWcgfTtcclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkxvYWRFcnJvcihcclxuICAgICAgICAgIGBGYWlsZWQgdG8gbG9hZCBjb25maWd1cmF0aW9uIGZyb20gJHtsb2FkZXJOYW1lfTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YCxcclxuICAgICAgICAgIGxvYWRlck5hbWUsXHJcbiAgICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiB1bmRlZmluZWRcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ291bnQgb3ZlcnJpZGVzXHJcbiAgICBjb25zdCB0b3RhbEtleXMgPSBPYmplY3Qua2V5cyhtZXJnZWRDb25maWcpLmxlbmd0aDtcclxuICAgIGNvbnN0IHRvdGFsRHVyYXRpb24gPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xyXG4gICAgY29uc3Qgb3ZlcnJpZGVDb3VudCA9IHNvdXJjZXMucmVkdWNlKChhY2MsIHMpID0+IGFjYyArIHMua2V5c0xvYWRlZC5sZW5ndGgsIDApIC0gdG90YWxLZXlzO1xyXG5cclxuICAgIGlmICh0aGlzLl92ZXJib3NlT3B0aW9ucz8ubG9nVGltaW5nKSB7XHJcbiAgICAgIHRoaXMubG9nKGBDb25maWd1cmF0aW9uIGxvYWRlZDogJHt0b3RhbEtleXN9IHRvdGFsIGtleXMsICR7b3ZlcnJpZGVDb3VudH0gb3ZlcnJpZGVzLCAke3RvdGFsRHVyYXRpb259bXMgdG90YWxgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBWYWxpZGF0ZSBpZiBzY2hlbWEgaXMgcHJvdmlkZWQgYW5kIHZhbGlkYXRpb24gaXMgZW5hYmxlZFxyXG4gICAgaWYgKHRoaXMuX29wdGlvbnMuc2NoZW1hICYmIHRoaXMuX29wdGlvbnMudmFsaWRhdGVPbkxvYWQpIHtcclxuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fb3B0aW9ucy5zY2hlbWEuc2FmZVBhcnNlKG1lcmdlZENvbmZpZyk7XHJcbiAgICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICBjb25zdCB6b2RFcnJvciA9IHJlc3VsdC5lcnJvciBhcyBab2RFcnJvcjtcclxuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxyXG4gICAgICAgICAgYENvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBmYWlsZWQ6ICR7em9kRXJyb3IuZXJyb3JzLm1hcCgoZSkgPT4gYCR7ZS5wYXRoLmpvaW4oJy4nKX06ICR7ZS5tZXNzYWdlfWApLmpvaW4oJywgJyl9YCxcclxuICAgICAgICAgIHpvZEVycm9yLmVycm9ycyxcclxuICAgICAgICAgIHVuZGVmaW5lZFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb25maWcgPSByZXN1bHQuZGF0YSBhcyBUO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb25maWcgPSBtZXJnZWRDb25maWcgYXMgVDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvYWRSZXN1bHQgPSB7XHJcbiAgICAgIGNvbmZpZzogdGhpcy5jb25maWcsXHJcbiAgICAgIHNvdXJjZXMsXHJcbiAgICAgIGxvYWRlZEF0OiBuZXcgRGF0ZSgpLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmxvYWRlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiB2YWx1ZSBieSBrZXkuXHJcbiAgICogQHBhcmFtIGtleSBUaGUgY29uZmlndXJhdGlvbiBrZXlcclxuICAgKiBAcmV0dXJucyBUaGUgY29uZmlndXJhdGlvbiB2YWx1ZVxyXG4gICAqIEB0aHJvd3MgQ29uZmlndXJhdGlvbkVycm9yIGlmIGNvbmZpZ3VyYXRpb24gaXMgbm90IGxvYWRlZFxyXG4gICAqL1xyXG4gIGdldDxLIGV4dGVuZHMga2V5b2YgVD4oa2V5OiBLKTogVFtLXSB7XHJcbiAgICBpZiAoIXRoaXMubG9hZGVkIHx8IHRoaXMuY29uZmlnID09PSBudWxsKSB7XHJcbiAgICAgIHRocm93IG5ldyBDb25maWd1cmF0aW9uRXJyb3IoJ0NvbmZpZ3VyYXRpb24gbm90IGxvYWRlZC4gQ2FsbCBsb2FkKCkgZmlyc3QuJyk7XHJcbiAgICB9XHJcbiAgICAvLyBOb24tbnVsbCBhc3NlcnRpb24gaXMgc2FmZSBoZXJlIGJlY2F1c2Ugd2UndmUgY2hlY2tlZCB0aGlzLmNvbmZpZyAhPT0gbnVsbCBhYm92ZVxyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnIVtrZXldO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGFsbCBjb25maWd1cmF0aW9uIHZhbHVlcy5cclxuICAgKiBAcmV0dXJucyBUaGUgY29tcGxldGUgY29uZmlndXJhdGlvbiBvYmplY3RcclxuICAgKiBAdGhyb3dzIENvbmZpZ3VyYXRpb25FcnJvciBpZiBjb25maWd1cmF0aW9uIGlzIG5vdCBsb2FkZWRcclxuICAgKi9cclxuICBnZXRBbGwoKTogVCB7XHJcbiAgICBpZiAoIXRoaXMubG9hZGVkIHx8IHRoaXMuY29uZmlnID09PSBudWxsKSB7XHJcbiAgICAgIHRocm93IG5ldyBDb25maWd1cmF0aW9uRXJyb3IoJ0NvbmZpZ3VyYXRpb24gbm90IGxvYWRlZC4gQ2FsbCBsb2FkKCkgZmlyc3QuJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayBpZiBjb25maWd1cmF0aW9uIGhhcyBiZWVuIGxvYWRlZC5cclxuICAgKiBAcmV0dXJucyB0cnVlIGlmIGNvbmZpZ3VyYXRpb24gaXMgbG9hZGVkXHJcbiAgICovXHJcbiAgaXNMb2FkZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5sb2FkZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGN1cnJlbnQgYXBwbGljYXRpb24gZW52aXJvbm1lbnQuXHJcbiAgICogQHJldHVybnMgVGhlIEFQUF9FTlYgdmFsdWUgb3IgJ2RldmVsb3BtZW50JyBhcyBkZWZhdWx0XHJcbiAgICovXHJcbiAgZ2V0QXBwRW52KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnZbJ0FQUF9FTlYnXSA/PyAnZGV2ZWxvcG1lbnQnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBsb2FkIHJlc3VsdCB3aXRoIHNvdXJjZSBpbmZvcm1hdGlvbi5cclxuICAgKiBAcmV0dXJucyBUaGUgbG9hZCByZXN1bHQgb3IgbnVsbCBpZiBub3QgbG9hZGVkXHJcbiAgICovXHJcbiAgZ2V0TG9hZFJlc3VsdCgpOiBDb25maWdMb2FkUmVzdWx0PFQ+IHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5sb2FkUmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VyaWFsaXplIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gdG8gSlNPTiBzdHJpbmcuXHJcbiAgICogQHJldHVybnMgSlNPTiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbmZpZ3VyYXRpb25cclxuICAgKiBAdGhyb3dzIENvbmZpZ3VyYXRpb25FcnJvciBpZiBjb25maWd1cmF0aW9uIGlzIG5vdCBsb2FkZWRcclxuICAgKi9cclxuICBzZXJpYWxpemUoKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5sb2FkZWQgfHwgdGhpcy5jb25maWcgPT09IG51bGwpIHtcclxuICAgICAgdGhyb3cgbmV3IENvbmZpZ3VyYXRpb25FcnJvcignQ29uZmlndXJhdGlvbiBub3QgbG9hZGVkLiBDYWxsIGxvYWQoKSBmaXJzdC4nKTtcclxuICAgIH1cclxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYSBuZXcgQ29uZmlnTWFuYWdlciB3aXRoIGNvbmZpZ3VyYXRpb24gbG9hZGVkIGZyb20gYSBKU09OIHN0cmluZy5cclxuICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgcmVzdG9yaW5nIGNvbmZpZ3VyYXRpb24gZnJvbSBhIHNlcmlhbGl6ZWQgc3RhdGUuXHJcbiAgICogQHBhcmFtIGpzb24gSlNPTiBzdHJpbmcgdG8gZGVzZXJpYWxpemVcclxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBDb25maWdNYW5hZ2VyIG9wdGlvbnMgKHNjaGVtYSB3aWxsIGJlIHVzZWQgZm9yIHZhbGlkYXRpb24pXHJcbiAgICogQHJldHVybnMgQSBuZXcgQ29uZmlnTWFuYWdlciBpbnN0YW5jZSB3aXRoIHRoZSBkZXNlcmlhbGl6ZWQgY29uZmlndXJhdGlvblxyXG4gICAqL1xyXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZTxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxyXG4gICAganNvbjogc3RyaW5nLFxyXG4gICAgb3B0aW9uczogQ29uZmlnTWFuYWdlck9wdGlvbnM8VD4gPSB7fVxyXG4gICk6IENvbmZpZ01hbmFnZXI8VD4ge1xyXG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShqc29uKTtcclxuXHJcbiAgICAvLyBWYWxpZGF0ZSBpZiBzY2hlbWEgaXMgcHJvdmlkZWRcclxuICAgIGlmIChvcHRpb25zLnNjaGVtYSkge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSBvcHRpb25zLnNjaGVtYS5zYWZlUGFyc2UocGFyc2VkKTtcclxuICAgICAgaWYgKCFyZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgIGNvbnN0IHpvZEVycm9yID0gcmVzdWx0LmVycm9yIGFzIFpvZEVycm9yO1xyXG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXHJcbiAgICAgICAgICBgRGVzZXJpYWxpemF0aW9uIHZhbGlkYXRpb24gZmFpbGVkOiAke3pvZEVycm9yLmVycm9ycy5tYXAoKGUpID0+IGAke2UucGF0aC5qb2luKCcuJyl9OiAke2UubWVzc2FnZX1gKS5qb2luKCcsICcpfWAsXHJcbiAgICAgICAgICB6b2RFcnJvci5lcnJvcnMsXHJcbiAgICAgICAgICB1bmRlZmluZWRcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ3JlYXRlIGEgbmV3IENvbmZpZ01hbmFnZXIgYW5kIHNldCBpdHMgaW50ZXJuYWwgc3RhdGVcclxuICAgIGNvbnN0IG1hbmFnZXIgPSBuZXcgQ29uZmlnTWFuYWdlcjxUPihvcHRpb25zKTtcclxuICAgIG1hbmFnZXIuY29uZmlnID0gcGFyc2VkIGFzIFQ7XHJcbiAgICBtYW5hZ2VyLmxvYWRlZCA9IHRydWU7XHJcbiAgICBtYW5hZ2VyLmxvYWRSZXN1bHQgPSB7XHJcbiAgICAgIGNvbmZpZzogcGFyc2VkIGFzIFQsXHJcbiAgICAgIHNvdXJjZXM6IFt7IGxvYWRlcjogJ2Rlc2VyaWFsaXplJywga2V5c0xvYWRlZDogT2JqZWN0LmtleXMocGFyc2VkKSwgZHVyYXRpb246IDAgfV0sXHJcbiAgICAgIGxvYWRlZEF0OiBuZXcgRGF0ZSgpLFxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gbWFuYWdlcjtcclxuICB9XHJcbn1cclxuIl19
@@ -6,16 +6,16 @@
6
6
  * S3, and .env files with configurable precedence.
7
7
  */
8
8
  // Error classes
9
- export { ConfigurationError, ValidationError, AWSServiceError, ConfigurationLoadError, MissingConfigurationError, } from './errors';
9
+ export { ConfigurationError, ValidationError, AWSServiceError, ConfigurationLoadError, MissingConfigurationError, } from './errors/index.js';
10
10
  // Loaders
11
- export { EnvironmentLoader } from './loaders/environment.loader';
12
- export { EnvFileLoader } from './loaders/env-file.loader';
13
- export { S3Loader } from './loaders/s3.loader';
14
- export { SecretsManagerLoader } from './loaders/secrets-manager.loader';
15
- export { SSMParameterStoreLoader } from './loaders/ssm-parameter-store.loader';
11
+ export { EnvironmentLoader } from './loaders/environment.loader.js';
12
+ export { EnvFileLoader } from './loaders/env-file.loader.js';
13
+ export { S3Loader } from './loaders/s3.loader.js';
14
+ export { SecretsManagerLoader } from './loaders/secrets-manager.loader.js';
15
+ export { SSMParameterStoreLoader } from './loaders/ssm-parameter-store.loader.js';
16
16
  // ConfigManager
17
- export { ConfigManager } from './config-manager';
17
+ export { ConfigManager } from './config-manager.js';
18
18
  // Utilities
19
- export { ConfigValidationUtil } from './utils/validation.util';
20
- export { EnvFileParser } from './utils/env-file-parser.util';
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9jb25maWctYXdzL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFzQ0gsZ0JBQWdCO0FBQ2hCLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLGVBQWUsRUFDZixzQkFBc0IsRUFDdEIseUJBQXlCLEdBQzFCLE1BQU0sVUFBVSxDQUFDO0FBRWxCLFVBQVU7QUFDVixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRS9FLGdCQUFnQjtBQUNoQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFakQsWUFBWTtBQUNaLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAZHlhbmV0L2NvbmZpZy1hd3NcclxuICpcclxuICogRnJhbWV3b3JrLWFnbm9zdGljIEFXUyBjb25maWd1cmF0aW9uIG1hbmFnZW1lbnQgbGlicmFyeS5cclxuICogU3VwcG9ydHMgZW52aXJvbm1lbnQgdmFyaWFibGVzLCBBV1MgU2VjcmV0cyBNYW5hZ2VyLCBTU00gUGFyYW1ldGVyIFN0b3JlLFxyXG4gKiBTMywgYW5kIC5lbnYgZmlsZXMgd2l0aCBjb25maWd1cmFibGUgcHJlY2VkZW5jZS5cclxuICovXHJcblxyXG4vLyBJbnRlcmZhY2VzXHJcbmV4cG9ydCB0eXBlIHtcclxuICBDb25maWdMb2FkZXIsXHJcbiAgQ29uZmlnTG9hZGVyUmVzdWx0LFxyXG59IGZyb20gJy4vaW50ZXJmYWNlcy9jb25maWctbG9hZGVyLmludGVyZmFjZSc7XHJcblxyXG5leHBvcnQgdHlwZSB7XHJcbiAgQ29uZmlnTWFuYWdlck9wdGlvbnMsXHJcbiAgTG9hZGVyUHJlY2VkZW5jZSxcclxuICBWZXJib3NlT3B0aW9ucyxcclxuICBQcmVjZWRlbmNlU3RyYXRlZ3ksXHJcbiAgQ29uZmlnTG9hZFJlc3VsdCxcclxuICBDb25maWdTb3VyY2VJbmZvLFxyXG4gIExvZ2dlcixcclxufSBmcm9tICcuL2ludGVyZmFjZXMvY29uZmlnLW1hbmFnZXIuaW50ZXJmYWNlJztcclxuXHJcbmV4cG9ydCB0eXBlIHtcclxuICBFbnZpcm9ubWVudExvYWRlckNvbmZpZyxcclxufSBmcm9tICcuL2ludGVyZmFjZXMvZW52aXJvbm1lbnQtbG9hZGVyLmludGVyZmFjZSc7XHJcblxyXG5leHBvcnQgdHlwZSB7XHJcbiAgRW52RmlsZUxvYWRlckNvbmZpZyxcclxufSBmcm9tICcuL2ludGVyZmFjZXMvZW52LWZpbGUtbG9hZGVyLmludGVyZmFjZSc7XHJcblxyXG5leHBvcnQgdHlwZSB7XHJcbiAgUzNMb2FkZXJDb25maWcsXHJcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL3MzLWxvYWRlci5pbnRlcmZhY2UnO1xyXG5cclxuZXhwb3J0IHR5cGUge1xyXG4gIFNlY3JldHNNYW5hZ2VyTG9hZGVyQ29uZmlnLFxyXG59IGZyb20gJy4vaW50ZXJmYWNlcy9zZWNyZXRzLW1hbmFnZXItbG9hZGVyLmludGVyZmFjZSc7XHJcblxyXG5leHBvcnQgdHlwZSB7XHJcbiAgU1NNUGFyYW1ldGVyU3RvcmVMb2FkZXJDb25maWcsXHJcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL3NzbS1wYXJhbWV0ZXItc3RvcmUtbG9hZGVyLmludGVyZmFjZSc7XHJcblxyXG4vLyBFcnJvciBjbGFzc2VzXHJcbmV4cG9ydCB7XHJcbiAgQ29uZmlndXJhdGlvbkVycm9yLFxyXG4gIFZhbGlkYXRpb25FcnJvcixcclxuICBBV1NTZXJ2aWNlRXJyb3IsXHJcbiAgQ29uZmlndXJhdGlvbkxvYWRFcnJvcixcclxuICBNaXNzaW5nQ29uZmlndXJhdGlvbkVycm9yLFxyXG59IGZyb20gJy4vZXJyb3JzJztcclxuXHJcbi8vIExvYWRlcnNcclxuZXhwb3J0IHsgRW52aXJvbm1lbnRMb2FkZXIgfSBmcm9tICcuL2xvYWRlcnMvZW52aXJvbm1lbnQubG9hZGVyJztcclxuZXhwb3J0IHsgRW52RmlsZUxvYWRlciB9IGZyb20gJy4vbG9hZGVycy9lbnYtZmlsZS5sb2FkZXInO1xyXG5leHBvcnQgeyBTM0xvYWRlciB9IGZyb20gJy4vbG9hZGVycy9zMy5sb2FkZXInO1xyXG5leHBvcnQgeyBTZWNyZXRzTWFuYWdlckxvYWRlciB9IGZyb20gJy4vbG9hZGVycy9zZWNyZXRzLW1hbmFnZXIubG9hZGVyJztcclxuZXhwb3J0IHsgU1NNUGFyYW1ldGVyU3RvcmVMb2FkZXIgfSBmcm9tICcuL2xvYWRlcnMvc3NtLXBhcmFtZXRlci1zdG9yZS5sb2FkZXInO1xyXG5cclxuLy8gQ29uZmlnTWFuYWdlclxyXG5leHBvcnQgeyBDb25maWdNYW5hZ2VyIH0gZnJvbSAnLi9jb25maWctbWFuYWdlcic7XHJcblxyXG4vLyBVdGlsaXRpZXNcclxuZXhwb3J0IHsgQ29uZmlnVmFsaWRhdGlvblV0aWwgfSBmcm9tICcuL3V0aWxzL3ZhbGlkYXRpb24udXRpbCc7XHJcbmV4cG9ydCB7IEVudkZpbGVQYXJzZXIgfSBmcm9tICcuL3V0aWxzL2Vudi1maWxlLXBhcnNlci51dGlsJztcclxuIl19
19
+ export { ConfigValidationUtil } from './utils/validation.util.js';
20
+ export { EnvFileParser } from './utils/env-file-parser.util.js';
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9jb25maWctYXdzL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFzQ0gsZ0JBQWdCO0FBQ2hCLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLGVBQWUsRUFDZixzQkFBc0IsRUFDdEIseUJBQXlCLEdBQzFCLE1BQU0sbUJBQW1CLENBQUM7QUFFM0IsVUFBVTtBQUNWLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFbEYsZ0JBQWdCO0FBQ2hCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVwRCxZQUFZO0FBQ1osT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBkeWFuZXQvY29uZmlnLWF3c1xyXG4gKlxyXG4gKiBGcmFtZXdvcmstYWdub3N0aWMgQVdTIGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudCBsaWJyYXJ5LlxyXG4gKiBTdXBwb3J0cyBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIEFXUyBTZWNyZXRzIE1hbmFnZXIsIFNTTSBQYXJhbWV0ZXIgU3RvcmUsXHJcbiAqIFMzLCBhbmQgLmVudiBmaWxlcyB3aXRoIGNvbmZpZ3VyYWJsZSBwcmVjZWRlbmNlLlxyXG4gKi9cclxuXHJcbi8vIEludGVyZmFjZXNcclxuZXhwb3J0IHR5cGUge1xyXG4gIENvbmZpZ0xvYWRlcixcclxuICBDb25maWdMb2FkZXJSZXN1bHQsXHJcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL2NvbmZpZy1sb2FkZXIuaW50ZXJmYWNlLmpzJztcclxuXHJcbmV4cG9ydCB0eXBlIHtcclxuICBDb25maWdNYW5hZ2VyT3B0aW9ucyxcclxuICBMb2FkZXJQcmVjZWRlbmNlLFxyXG4gIFZlcmJvc2VPcHRpb25zLFxyXG4gIFByZWNlZGVuY2VTdHJhdGVneSxcclxuICBDb25maWdMb2FkUmVzdWx0LFxyXG4gIENvbmZpZ1NvdXJjZUluZm8sXHJcbiAgTG9nZ2VyLFxyXG59IGZyb20gJy4vaW50ZXJmYWNlcy9jb25maWctbWFuYWdlci5pbnRlcmZhY2UuanMnO1xyXG5cclxuZXhwb3J0IHR5cGUge1xyXG4gIEVudmlyb25tZW50TG9hZGVyQ29uZmlnLFxyXG59IGZyb20gJy4vaW50ZXJmYWNlcy9lbnZpcm9ubWVudC1sb2FkZXIuaW50ZXJmYWNlLmpzJztcclxuXHJcbmV4cG9ydCB0eXBlIHtcclxuICBFbnZGaWxlTG9hZGVyQ29uZmlnLFxyXG59IGZyb20gJy4vaW50ZXJmYWNlcy9lbnYtZmlsZS1sb2FkZXIuaW50ZXJmYWNlLmpzJztcclxuXHJcbmV4cG9ydCB0eXBlIHtcclxuICBTM0xvYWRlckNvbmZpZyxcclxufSBmcm9tICcuL2ludGVyZmFjZXMvczMtbG9hZGVyLmludGVyZmFjZS5qcyc7XHJcblxyXG5leHBvcnQgdHlwZSB7XHJcbiAgU2VjcmV0c01hbmFnZXJMb2FkZXJDb25maWcsXHJcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL3NlY3JldHMtbWFuYWdlci1sb2FkZXIuaW50ZXJmYWNlLmpzJztcclxuXHJcbmV4cG9ydCB0eXBlIHtcclxuICBTU01QYXJhbWV0ZXJTdG9yZUxvYWRlckNvbmZpZyxcclxufSBmcm9tICcuL2ludGVyZmFjZXMvc3NtLXBhcmFtZXRlci1zdG9yZS1sb2FkZXIuaW50ZXJmYWNlLmpzJztcclxuXHJcbi8vIEVycm9yIGNsYXNzZXNcclxuZXhwb3J0IHtcclxuICBDb25maWd1cmF0aW9uRXJyb3IsXHJcbiAgVmFsaWRhdGlvbkVycm9yLFxyXG4gIEFXU1NlcnZpY2VFcnJvcixcclxuICBDb25maWd1cmF0aW9uTG9hZEVycm9yLFxyXG4gIE1pc3NpbmdDb25maWd1cmF0aW9uRXJyb3IsXHJcbn0gZnJvbSAnLi9lcnJvcnMvaW5kZXguanMnO1xyXG5cclxuLy8gTG9hZGVyc1xyXG5leHBvcnQgeyBFbnZpcm9ubWVudExvYWRlciB9IGZyb20gJy4vbG9hZGVycy9lbnZpcm9ubWVudC5sb2FkZXIuanMnO1xyXG5leHBvcnQgeyBFbnZGaWxlTG9hZGVyIH0gZnJvbSAnLi9sb2FkZXJzL2Vudi1maWxlLmxvYWRlci5qcyc7XHJcbmV4cG9ydCB7IFMzTG9hZGVyIH0gZnJvbSAnLi9sb2FkZXJzL3MzLmxvYWRlci5qcyc7XHJcbmV4cG9ydCB7IFNlY3JldHNNYW5hZ2VyTG9hZGVyIH0gZnJvbSAnLi9sb2FkZXJzL3NlY3JldHMtbWFuYWdlci5sb2FkZXIuanMnO1xyXG5leHBvcnQgeyBTU01QYXJhbWV0ZXJTdG9yZUxvYWRlciB9IGZyb20gJy4vbG9hZGVycy9zc20tcGFyYW1ldGVyLXN0b3JlLmxvYWRlci5qcyc7XHJcblxyXG4vLyBDb25maWdNYW5hZ2VyXHJcbmV4cG9ydCB7IENvbmZpZ01hbmFnZXIgfSBmcm9tICcuL2NvbmZpZy1tYW5hZ2VyLmpzJztcclxuXHJcbi8vIFV0aWxpdGllc1xyXG5leHBvcnQgeyBDb25maWdWYWxpZGF0aW9uVXRpbCB9IGZyb20gJy4vdXRpbHMvdmFsaWRhdGlvbi51dGlsLmpzJztcclxuZXhwb3J0IHsgRW52RmlsZVBhcnNlciB9IGZyb20gJy4vdXRpbHMvZW52LWZpbGUtcGFyc2VyLnV0aWwuanMnO1xyXG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLW1hbmFnZXIuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vY29uZmlnLWF3cy9zcmMvaW50ZXJmYWNlcy9jb25maWctbWFuYWdlci5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgWm9kVHlwZSB9IGZyb20gJ3pvZCc7XHJcbmltcG9ydCB0eXBlIHsgQ29uZmlnTG9hZGVyIH0gZnJvbSAnLi9jb25maWctbG9hZGVyLmludGVyZmFjZSc7XHJcblxyXG4vKipcclxuICogTG9nZ2VyIGludGVyZmFjZSBmb3IgQ29uZmlnTWFuYWdlclxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBMb2dnZXIge1xyXG4gIGxvZyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xyXG4gIGVycm9yKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQ7XHJcbiAgd2FybihtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xyXG4gIGRlYnVnPyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xyXG59XHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgdmVyYm9zZSBsb2dnaW5nIG91dHB1dFxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBWZXJib3NlT3B0aW9ucyB7XHJcbiAgLyoqIExvZyBhbGwgdmFyaWFibGUgbmFtZXMgYmVpbmcgbG9hZGVkLiBEZWZhdWx0OiB0cnVlICovXHJcbiAgbG9nS2V5cz86IGJvb2xlYW47XHJcbiAgLyoqIExvZyB2YXJpYWJsZSB2YWx1ZXMgKFdBUk5JTkc6IG1heSBleHBvc2Ugc2VjcmV0cykuIERlZmF1bHQ6IGZhbHNlICovXHJcbiAgbG9nVmFsdWVzPzogYm9vbGVhbjtcclxuICAvKiogTG9nIHdoZW4gYSB2YXJpYWJsZSBpcyBvdmVycmlkZGVuIGJ5IGEgaGlnaGVyLXByZWNlZGVuY2UgbG9hZGVyLiBEZWZhdWx0OiB0cnVlICovXHJcbiAgbG9nT3ZlcnJpZGVzPzogYm9vbGVhbjtcclxuICAvKiogTG9nIGxvYWRlciB0aW1pbmcgaW5mb3JtYXRpb24uIERlZmF1bHQ6IHRydWUgKi9cclxuICBsb2dUaW1pbmc/OiBib29sZWFuO1xyXG4gIC8qKiBNYXNrIHNlbnNpdGl2ZSB2YWx1ZXMgKHNob3cgZmlyc3QvbGFzdCAyIGNoYXJzIG9ubHkpLiBEZWZhdWx0OiB0cnVlICh3aGVuIGxvZ1ZhbHVlcyBpcyB0cnVlKSAqL1xyXG4gIG1hc2tWYWx1ZXM/OiBib29sZWFuO1xyXG4gIC8qKiBLZXlzIHRvIGFsd2F5cyBtYXNrIHJlZ2FyZGxlc3Mgb2YgbWFza1ZhbHVlcyBzZXR0aW5nLiBEZWZhdWx0OiBbJ3Bhc3N3b3JkJywgJ3NlY3JldCcsICdrZXknLCAndG9rZW4nXSAqL1xyXG4gIHNlbnNpdGl2ZUtleXM/OiBzdHJpbmdbXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEN1c3RvbSBsb2FkZXIgcHJlY2VkZW5jZSBjb25maWd1cmF0aW9uXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIExvYWRlclByZWNlZGVuY2Uge1xyXG4gIC8qKiBMb2FkZXIgbmFtZSAqL1xyXG4gIGxvYWRlcjogc3RyaW5nO1xyXG4gIC8qKiBQcmlvcml0eSAtIGhpZ2hlciB2YWx1ZXMgb3ZlcnJpZGUgbG93ZXIgdmFsdWVzICovXHJcbiAgcHJpb3JpdHk6IG51bWJlcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIFByZWNlZGVuY2Ugc3RyYXRlZ3kgZm9yIG1lcmdpbmcgY29uZmlndXJhdGlvbnNcclxuICogLSAnYXdzLWZpcnN0JzogZW52IC0+IGVudkZpbGUgLT4gczMgLT4gc2VjcmV0c01hbmFnZXIgLT4gc3NtIChBV1Mgd2lucylcclxuICogLSAnbG9jYWwtZmlyc3QnOiBzZWNyZXRzTWFuYWdlciAtPiBzc20gLT4gczMgLT4gZW52RmlsZSAtPiBlbnYgKGxvY2FsIHdpbnMpXHJcbiAqIC0gQ3VzdG9tIGFycmF5OiB1c2VyLWRlZmluZWQgb3JkZXIgdmlhIExvYWRlclByZWNlZGVuY2VbXVxyXG4gKi9cclxuZXhwb3J0IHR5cGUgUHJlY2VkZW5jZVN0cmF0ZWd5ID0gJ2F3cy1maXJzdCcgfCAnbG9jYWwtZmlyc3QnIHwgTG9hZGVyUHJlY2VkZW5jZVtdO1xyXG5cclxuLyoqXHJcbiAqIE9wdGlvbnMgZm9yIENvbmZpZ01hbmFnZXJcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnTWFuYWdlck9wdGlvbnM8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XHJcbiAgLyoqIEFycmF5IG9mIGxvYWRlcnMgdG8gdXNlICovXHJcbiAgbG9hZGVycz86IENvbmZpZ0xvYWRlcltdO1xyXG4gIC8qKiBab2Qgc2NoZW1hIGZvciB2YWxpZGF0aW9uICovXHJcbiAgc2NoZW1hPzogWm9kVHlwZTxUPjtcclxuICAvKiogUHJlY2VkZW5jZSBzdHJhdGVneSBmb3IgbWVyZ2luZyBjb25maWd1cmF0aW9ucyAqL1xyXG4gIHByZWNlZGVuY2U/OiBQcmVjZWRlbmNlU3RyYXRlZ3k7XHJcbiAgLyoqIFdoZXRoZXIgdG8gdmFsaWRhdGUgY29uZmlndXJhdGlvbiBvbiBsb2FkLiBEZWZhdWx0OiB0cnVlICovXHJcbiAgdmFsaWRhdGVPbkxvYWQ/OiBib29sZWFuO1xyXG4gIC8qKiBFbmFibGUgbG9nZ2luZy4gRGVmYXVsdDogZmFsc2UgKi9cclxuICBlbmFibGVMb2dnaW5nPzogYm9vbGVhbjtcclxuICAvKiogQ3VzdG9tIGxvZ2dlciBpbnN0YW5jZSAqL1xyXG4gIGxvZ2dlcj86IExvZ2dlcjtcclxuICAvKiogVmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0IG9wdGlvbnMgKi9cclxuICB2ZXJib3NlPzogVmVyYm9zZU9wdGlvbnMgfCBib29sZWFuO1xyXG59XHJcblxyXG4vKipcclxuICogSW5mb3JtYXRpb24gYWJvdXQgYSBjb25maWd1cmF0aW9uIHNvdXJjZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBDb25maWdTb3VyY2VJbmZvIHtcclxuICAvKiogTmFtZSBvZiB0aGUgbG9hZGVyICovXHJcbiAgbG9hZGVyOiBzdHJpbmc7XHJcbiAgLyoqIEtleXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyICovXHJcbiAga2V5c0xvYWRlZDogc3RyaW5nW107XHJcbiAgLyoqIFRpbWUgdGFrZW4gdG8gbG9hZCBpbiBtaWxsaXNlY29uZHMgKi9cclxuICBkdXJhdGlvbjogbnVtYmVyO1xyXG59XHJcblxyXG4vKipcclxuICogUmVzdWx0IG9mIGxvYWRpbmcgY29uZmlndXJhdGlvblxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBDb25maWdMb2FkUmVzdWx0PFQ+IHtcclxuICAvKiogVGhlIG1lcmdlZCBjb25maWd1cmF0aW9uICovXHJcbiAgY29uZmlnOiBUO1xyXG4gIC8qKiBJbmZvcm1hdGlvbiBhYm91dCBlYWNoIHNvdXJjZSAqL1xyXG4gIHNvdXJjZXM6IENvbmZpZ1NvdXJjZUluZm9bXTtcclxuICAvKiogV2hlbiB0aGUgY29uZmlndXJhdGlvbiB3YXMgbG9hZGVkICovXHJcbiAgbG9hZGVkQXQ6IERhdGU7XHJcbn1cclxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLW1hbmFnZXIuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vY29uZmlnLWF3cy9zcmMvaW50ZXJmYWNlcy9jb25maWctbWFuYWdlci5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgWm9kVHlwZSB9IGZyb20gJ3pvZCc7XHJcbmltcG9ydCB0eXBlIHsgQ29uZmlnTG9hZGVyIH0gZnJvbSAnLi9jb25maWctbG9hZGVyLmludGVyZmFjZS5qcyc7XHJcblxyXG4vKipcclxuICogTG9nZ2VyIGludGVyZmFjZSBmb3IgQ29uZmlnTWFuYWdlclxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBMb2dnZXIge1xyXG4gIGxvZyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xyXG4gIGVycm9yKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQ7XHJcbiAgd2FybihtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xyXG4gIGRlYnVnPyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xyXG59XHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgdmVyYm9zZSBsb2dnaW5nIG91dHB1dFxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBWZXJib3NlT3B0aW9ucyB7XHJcbiAgLyoqIExvZyBhbGwgdmFyaWFibGUgbmFtZXMgYmVpbmcgbG9hZGVkLiBEZWZhdWx0OiB0cnVlICovXHJcbiAgbG9nS2V5cz86IGJvb2xlYW47XHJcbiAgLyoqIExvZyB2YXJpYWJsZSB2YWx1ZXMgKFdBUk5JTkc6IG1heSBleHBvc2Ugc2VjcmV0cykuIERlZmF1bHQ6IGZhbHNlICovXHJcbiAgbG9nVmFsdWVzPzogYm9vbGVhbjtcclxuICAvKiogTG9nIHdoZW4gYSB2YXJpYWJsZSBpcyBvdmVycmlkZGVuIGJ5IGEgaGlnaGVyLXByZWNlZGVuY2UgbG9hZGVyLiBEZWZhdWx0OiB0cnVlICovXHJcbiAgbG9nT3ZlcnJpZGVzPzogYm9vbGVhbjtcclxuICAvKiogTG9nIGxvYWRlciB0aW1pbmcgaW5mb3JtYXRpb24uIERlZmF1bHQ6IHRydWUgKi9cclxuICBsb2dUaW1pbmc/OiBib29sZWFuO1xyXG4gIC8qKiBNYXNrIHNlbnNpdGl2ZSB2YWx1ZXMgKHNob3cgZmlyc3QvbGFzdCAyIGNoYXJzIG9ubHkpLiBEZWZhdWx0OiB0cnVlICh3aGVuIGxvZ1ZhbHVlcyBpcyB0cnVlKSAqL1xyXG4gIG1hc2tWYWx1ZXM/OiBib29sZWFuO1xyXG4gIC8qKiBLZXlzIHRvIGFsd2F5cyBtYXNrIHJlZ2FyZGxlc3Mgb2YgbWFza1ZhbHVlcyBzZXR0aW5nLiBEZWZhdWx0OiBbJ3Bhc3N3b3JkJywgJ3NlY3JldCcsICdrZXknLCAndG9rZW4nXSAqL1xyXG4gIHNlbnNpdGl2ZUtleXM/OiBzdHJpbmdbXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEN1c3RvbSBsb2FkZXIgcHJlY2VkZW5jZSBjb25maWd1cmF0aW9uXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIExvYWRlclByZWNlZGVuY2Uge1xyXG4gIC8qKiBMb2FkZXIgbmFtZSAqL1xyXG4gIGxvYWRlcjogc3RyaW5nO1xyXG4gIC8qKiBQcmlvcml0eSAtIGhpZ2hlciB2YWx1ZXMgb3ZlcnJpZGUgbG93ZXIgdmFsdWVzICovXHJcbiAgcHJpb3JpdHk6IG51bWJlcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIFByZWNlZGVuY2Ugc3RyYXRlZ3kgZm9yIG1lcmdpbmcgY29uZmlndXJhdGlvbnNcclxuICogLSAnYXdzLWZpcnN0JzogZW52IC0+IGVudkZpbGUgLT4gczMgLT4gc2VjcmV0c01hbmFnZXIgLT4gc3NtIChBV1Mgd2lucylcclxuICogLSAnbG9jYWwtZmlyc3QnOiBzZWNyZXRzTWFuYWdlciAtPiBzc20gLT4gczMgLT4gZW52RmlsZSAtPiBlbnYgKGxvY2FsIHdpbnMpXHJcbiAqIC0gQ3VzdG9tIGFycmF5OiB1c2VyLWRlZmluZWQgb3JkZXIgdmlhIExvYWRlclByZWNlZGVuY2VbXVxyXG4gKi9cclxuZXhwb3J0IHR5cGUgUHJlY2VkZW5jZVN0cmF0ZWd5ID0gJ2F3cy1maXJzdCcgfCAnbG9jYWwtZmlyc3QnIHwgTG9hZGVyUHJlY2VkZW5jZVtdO1xyXG5cclxuLyoqXHJcbiAqIE9wdGlvbnMgZm9yIENvbmZpZ01hbmFnZXJcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnTWFuYWdlck9wdGlvbnM8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XHJcbiAgLyoqIEFycmF5IG9mIGxvYWRlcnMgdG8gdXNlICovXHJcbiAgbG9hZGVycz86IENvbmZpZ0xvYWRlcltdO1xyXG4gIC8qKiBab2Qgc2NoZW1hIGZvciB2YWxpZGF0aW9uICovXHJcbiAgc2NoZW1hPzogWm9kVHlwZTxUPjtcclxuICAvKiogUHJlY2VkZW5jZSBzdHJhdGVneSBmb3IgbWVyZ2luZyBjb25maWd1cmF0aW9ucyAqL1xyXG4gIHByZWNlZGVuY2U/OiBQcmVjZWRlbmNlU3RyYXRlZ3k7XHJcbiAgLyoqIFdoZXRoZXIgdG8gdmFsaWRhdGUgY29uZmlndXJhdGlvbiBvbiBsb2FkLiBEZWZhdWx0OiB0cnVlICovXHJcbiAgdmFsaWRhdGVPbkxvYWQ/OiBib29sZWFuO1xyXG4gIC8qKiBFbmFibGUgbG9nZ2luZy4gRGVmYXVsdDogZmFsc2UgKi9cclxuICBlbmFibGVMb2dnaW5nPzogYm9vbGVhbjtcclxuICAvKiogQ3VzdG9tIGxvZ2dlciBpbnN0YW5jZSAqL1xyXG4gIGxvZ2dlcj86IExvZ2dlcjtcclxuICAvKiogVmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0IG9wdGlvbnMgKi9cclxuICB2ZXJib3NlPzogVmVyYm9zZU9wdGlvbnMgfCBib29sZWFuO1xyXG59XHJcblxyXG4vKipcclxuICogSW5mb3JtYXRpb24gYWJvdXQgYSBjb25maWd1cmF0aW9uIHNvdXJjZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBDb25maWdTb3VyY2VJbmZvIHtcclxuICAvKiogTmFtZSBvZiB0aGUgbG9hZGVyICovXHJcbiAgbG9hZGVyOiBzdHJpbmc7XHJcbiAgLyoqIEtleXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyICovXHJcbiAga2V5c0xvYWRlZDogc3RyaW5nW107XHJcbiAgLyoqIFRpbWUgdGFrZW4gdG8gbG9hZCBpbiBtaWxsaXNlY29uZHMgKi9cclxuICBkdXJhdGlvbjogbnVtYmVyO1xyXG59XHJcblxyXG4vKipcclxuICogUmVzdWx0IG9mIGxvYWRpbmcgY29uZmlndXJhdGlvblxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBDb25maWdMb2FkUmVzdWx0PFQ+IHtcclxuICAvKiogVGhlIG1lcmdlZCBjb25maWd1cmF0aW9uICovXHJcbiAgY29uZmlnOiBUO1xyXG4gIC8qKiBJbmZvcm1hdGlvbiBhYm91dCBlYWNoIHNvdXJjZSAqL1xyXG4gIHNvdXJjZXM6IENvbmZpZ1NvdXJjZUluZm9bXTtcclxuICAvKiogV2hlbiB0aGUgY29uZmlndXJhdGlvbiB3YXMgbG9hZGVkICovXHJcbiAgbG9hZGVkQXQ6IERhdGU7XHJcbn1cclxuIl19
@@ -1,7 +1,7 @@
1
1
  import * as fs from 'fs';
2
2
  import * as path from 'path';
3
- import { EnvFileParser } from '../utils/env-file-parser.util';
4
- import { ConfigurationLoadError } from '../errors';
3
+ import { EnvFileParser } from '../utils/env-file-parser.util.js';
4
+ import { ConfigurationLoadError } from '../errors/index.js';
5
5
  /**
6
6
  * Loader that reads configuration from .env files on the filesystem.
7
7
  * Uses AWS ECS-compatible format for parsing.
@@ -129,4 +129,4 @@ export class EnvFileLoader {
129
129
  return fs.promises.readFile(filePath, { encoding: this._config.encoding });
130
130
  }
131
131
  }
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LWZpbGUubG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vY29uZmlnLWF3cy9zcmMvbG9hZGVycy9lbnYtZmlsZS5sb2FkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFHN0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVuRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBQ3hCLGdCQUFnQjtJQUNHLE9BQU8sQ0FBZ0M7SUFFMUQsNkNBQTZDO0lBQ3JDLE1BQU0sQ0FBVSxhQUFhLEdBQUcsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFFL0QsNEJBQTRCO0lBQ3BCLE1BQU0sQ0FBVSxnQkFBZ0IsR0FBbUIsT0FBTyxDQUFDO0lBRW5FLFlBQVksU0FBOEIsRUFBRTtRQUMxQyxJQUFJLENBQUMsT0FBTyxHQUFHO1lBQ2IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLElBQUksYUFBYSxDQUFDLGFBQWE7WUFDbEQsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLElBQUksYUFBYSxDQUFDLGdCQUFnQjtZQUMzRCxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJO1NBQ2xDLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU8sZUFBZSxDQUFDO0lBQ3pCLENBQUM7SUFHRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsV0FBVztRQUNmLEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMxQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFD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IGZyb20gJ2ZzJztcclxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcclxuaW1wb3J0IHR5cGUgeyBDb25maWdMb2FkZXIgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NvbmZpZy1sb2FkZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHR5cGUgeyBFbnZGaWxlTG9hZGVyQ29uZmlnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9lbnYtZmlsZS1sb2FkZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgRW52RmlsZVBhcnNlciB9IGZyb20gJy4uL3V0aWxzL2Vudi1maWxlLXBhcnNlci51dGlsJztcclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbkxvYWRFcnJvciB9IGZyb20gJy4uL2Vycm9ycyc7XHJcblxyXG4vKipcclxuICogTG9hZGVyIHRoYXQgcmVhZHMgY29uZmlndXJhdGlvbiBmcm9tIC5lbnYgZmlsZXMgb24gdGhlIGZpbGVzeXN0ZW0uXHJcbiAqIFVzZXMgQVdTIEVDUy1jb21wYXRpYmxlIGZvcm1hdCBmb3IgcGFyc2luZy5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiAvLyBMb2FkIGZyb20gZGVmYXVsdCBwYXRocyAoLmVudiwgLmVudi5sb2NhbClcclxuICogY29uc3QgbG9hZGVyID0gbmV3IEVudkZpbGVMb2FkZXIoKTtcclxuICpcclxuICogLy8gTG9hZCBmcm9tIHNwZWNpZmljIHBhdGhzXHJcbiAqIGNvbnN0IGxvYWRlciA9IG5ldyBFbnZGaWxlTG9hZGVyKHtcclxuICogICBwYXRoczogWycuZW52JywgJy5lbnYucHJvZHVjdGlvbiddXHJcbiAqIH0pO1xyXG4gKlxyXG4gKiAvLyBEaXNhYmxlIG92ZXJyaWRlIChmaXJzdCBmaWxlIHdpbnMpXHJcbiAqIGNvbnN0IGxvYWRlciA9IG5ldyBFbnZGaWxlTG9hZGVyKHtcclxuICogICBwYXRoczogWycuZW52JywgJy5lbnYubG9jYWwnXSxcclxuICogICBvdmVycmlkZTogZmFsc2VcclxuICogfSk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzZS1lbnZpcm9ubWVudC1maWxlLmh0bWxcclxuICovXHJcbmV4cG9ydCBjbGFzcyBFbnZGaWxlTG9hZGVyIGltcGxlbWVudHMgQ29uZmlnTG9hZGVyIHtcclxuICAvKiogQGludGVybmFsICovXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9jb25maWc6IFJlcXVpcmVkPEVudkZpbGVMb2FkZXJDb25maWc+O1xyXG5cclxuICAvKiogRGVmYXVsdCBwYXRocyB0byBzZWFyY2ggZm9yIC5lbnYgZmlsZXMgKi9cclxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX1BBVEhTID0gWycuZW52JywgJy5lbnYubG9jYWwnXTtcclxuXHJcbiAgLyoqIERlZmF1bHQgZmlsZSBlbmNvZGluZyAqL1xyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfRU5DT0RJTkc6IEJ1ZmZlckVuY29kaW5nID0gJ3V0Zi04JztcclxuXHJcbiAgY29uc3RydWN0b3IoY29uZmlnOiBFbnZGaWxlTG9hZGVyQ29uZmlnID0ge30pIHtcclxuICAgIHRoaXMuX2NvbmZpZyA9IHtcclxuICAgICAgcGF0aHM6IGNvbmZpZy5wYXRocyA/PyBFbnZGaWxlTG9hZGVyLkRFRkFVTFRfUEFUSFMsXHJcbiAgICAgIGVuY29kaW5nOiBjb25maWcuZW5jb2RpbmcgPz8gRW52RmlsZUxvYWRlci5ERUZBVUxUX0VOQ09ESU5HLFxyXG4gICAgICBvdmVycmlkZTogY29uZmlnLm92ZXJyaWRlID8/IHRydWUsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICdFbnZGaWxlTG9hZGVyJztcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayBpZiBhdCBsZWFzdCBvbmUgb2YgdGhlIGNvbmZpZ3VyZWQgLmVudiBmaWxlcyBleGlzdHMuXHJcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gdHJ1ZSBpZiBhbnkgZmlsZSBleGlzdHNcclxuICAgKi9cclxuICBhc3luYyBpc0F2YWlsYWJsZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGZvciAoY29uc3QgZmlsZVBhdGggb2YgdGhpcy5fY29uZmlnLnBhdGhzKSB7XHJcbiAgICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IHRoaXMucmVzb2x2ZVBhdGgoZmlsZVBhdGgpO1xyXG4gICAgICBpZiAoYXdhaXQgdGhpcy5maWxlRXhpc3RzKHJlc29sdmVkUGF0aCkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTG9hZCBjb25maWd1cmF0aW9uIGZyb20gLmVudiBmaWxlcy5cclxuICAgKlxyXG4gICAqIEZpbGVzIGFyZSBwcm9jZXNzZWQgaW4gb3JkZXIuIFdoZW4gb3ZlcnJpZGUgaXMgdHJ1ZSAoZGVmYXVsdCksXHJcbiAgICogbGF0ZXIgZmlsZXMgb3ZlcnJpZGUgZWFybGllciBvbmVzLiBXaGVuIG92ZXJyaWRlIGlzIGZhbHNlLFxyXG4gICAqIGVhcmxpZXIgZmlsZXMgdGFrZSBwcmVjZWRlbmNlLlxyXG4gICAqXHJcbiAgICogTWlzc2luZyBmaWxlcyBhcmUgc2lsZW50bHkgc2tpcHBlZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBtZXJnZWQgY29uZmlndXJhdGlvblxyXG4gICAqIEB0aHJvd3MgQ29uZmlndXJhdGlvbkxvYWRFcnJvciBpZiBhIGZpbGUgZXhpc3RzIGJ1dCBjYW5ub3QgYmUgcmVhZFxyXG4gICAqL1xyXG4gIGFzeW5jIGxvYWQoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xyXG5cclxuICAgIGZvciAoY29uc3QgZmlsZVBhdGggb2YgdGhpcy5fY29uZmlnLnBhdGhzKSB7XHJcbiAgICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IHRoaXMucmVzb2x2ZVBhdGgoZmlsZVBhdGgpO1xyXG5cclxuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5maWxlRXhpc3RzKHJlc29sdmVkUGF0aCkpKSB7XHJcbiAgICAgICAgLy8gU2tpcCBtaXNzaW5nIGZpbGVzIHNpbGVudGx5XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHRoaXMucmVhZEZpbGUocmVzb2x2ZWRQYXRoKTtcclxuICAgICAgICBjb25zdCBwYXJzZWQgPSBFbnZGaWxlUGFyc2VyLnBhcnNlKGNvbnRlbnQpO1xyXG5cclxuICAgICAgICAvLyBNZXJnZSBiYXNlZCBvbiBvdmVycmlkZSBzZXR0aW5nXHJcbiAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5vdmVycmlkZSkge1xyXG4gICAgICAgICAgLy8gTGF0ZXIgZmlsZXMgb3ZlcnJpZGUgZWFybGllciBvbmVzXHJcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHJlc3VsdCwgcGFyc2VkKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gRWFybGllciBmaWxlcyB0YWtlIHByZWNlZGVuY2UgLSBvbmx5IGFkZCBrZXlzIHRoYXQgZG9uJ3QgZXhpc3RcclxuICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHBhcnNlZCkpIHtcclxuICAgICAgICAgICAgaWYgKCEoa2V5IGluIHJlc3VsdCkpIHtcclxuICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIHRocm93IG5ldyBDb25maWd1cmF0aW9uTG9hZEVycm9yKFxyXG4gICAgICAgICAgYEZhaWxlZCB0byByZWFkIGVudiBmaWxlOiAke3Jlc29sdmVkUGF0aH1gLFxyXG4gICAgICAgICAgdGhpcy5nZXROYW1lKCksXHJcbiAgICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNvbHZlIGEgZmlsZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCByZXNvbHZlUGF0aChmaWxlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmIChwYXRoLmlzQWJzb2x1dGUoZmlsZVBhdGgpKSB7XHJcbiAgICAgIHJldHVybiBmaWxlUGF0aDtcclxuICAgIH1cclxuICAgIHJldHVybiBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgZmlsZVBhdGgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaWYgYSBmaWxlIGV4aXN0cy5cclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgYXN5bmMgZmlsZUV4aXN0cyhmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCBmcy5wcm9taXNlcy5hY2Nlc3MoZmlsZVBhdGgsIGZzLmNvbnN0YW50cy5SX09LKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVhZCBhIGZpbGUncyBjb250ZW50cy5cclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgYXN5bmMgcmVhZEZpbGUoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gZnMucHJvbWlzZXMucmVhZEZpbGUoZmlsZVBhdGgsIHsgZW5jb2Rpbmc6IHRoaXMuX2NvbmZpZy5lbmNvZGluZyB9KTtcclxuICB9XHJcbn1cclxuIl19
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LWZpbGUubG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vY29uZmlnLWF3cy9zcmMvbG9hZGVycy9lbnYtZmlsZS5sb2FkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFHN0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0gsTUFBTSxPQUFPLGFBQWE7SUFDeEIsZ0JBQWdCO0lBQ0csT0FBTyxDQUFnQztJQUUxRCw2Q0FBNkM7SUFDckMsTUFBTSxDQUFVLGFBQWEsR0FBRyxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUUvRCw0QkFBNEI7SUFDcEIsTUFBTSxDQUFVLGdCQUFnQixHQUFtQixPQUFPLENBQUM7SUFFbkUsWUFBWSxTQUE4QixFQUFFO1FBQzFDLElBQUksQ0FBQyxPQUFPLEdBQUc7WUFDYixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssSUFBSSxhQUFhLENBQUMsYUFBYTtZQUNsRCxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsSUFBSSxhQUFhLENBQUMsZ0JBQWdCO1lBQzNELFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxJQUFJLElBQUk7U0FDbEMsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPO1FBQ0wsT0FBTyxlQUFlLENBQUM7SUFDekIsQ0FBQztJQUdEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxXQUFXO1FBQ2YsS0FBSyxNQUFNLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzFDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENB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ZnMgZnJvbSAnZnMnO1xyXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQgdHlwZSB7IENvbmZpZ0xvYWRlciB9IGZyb20gJy4uL2ludGVyZmFjZXMvY29uZmlnLWxvYWRlci5pbnRlcmZhY2UuanMnO1xyXG5pbXBvcnQgdHlwZSB7IEVudkZpbGVMb2FkZXJDb25maWcgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Vudi1maWxlLWxvYWRlci5pbnRlcmZhY2UuanMnO1xyXG5pbXBvcnQgeyBFbnZGaWxlUGFyc2VyIH0gZnJvbSAnLi4vdXRpbHMvZW52LWZpbGUtcGFyc2VyLnV0aWwuanMnO1xyXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uTG9hZEVycm9yIH0gZnJvbSAnLi4vZXJyb3JzL2luZGV4LmpzJztcclxuXHJcbi8qKlxyXG4gKiBMb2FkZXIgdGhhdCByZWFkcyBjb25maWd1cmF0aW9uIGZyb20gLmVudiBmaWxlcyBvbiB0aGUgZmlsZXN5c3RlbS5cclxuICogVXNlcyBBV1MgRUNTLWNvbXBhdGlibGUgZm9ybWF0IGZvciBwYXJzaW5nLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIC8vIExvYWQgZnJvbSBkZWZhdWx0IHBhdGhzICguZW52LCAuZW52LmxvY2FsKVxyXG4gKiBjb25zdCBsb2FkZXIgPSBuZXcgRW52RmlsZUxvYWRlcigpO1xyXG4gKlxyXG4gKiAvLyBMb2FkIGZyb20gc3BlY2lmaWMgcGF0aHNcclxuICogY29uc3QgbG9hZGVyID0gbmV3IEVudkZpbGVMb2FkZXIoe1xyXG4gKiAgIHBhdGhzOiBbJy5lbnYnLCAnLmVudi5wcm9kdWN0aW9uJ11cclxuICogfSk7XHJcbiAqXHJcbiAqIC8vIERpc2FibGUgb3ZlcnJpZGUgKGZpcnN0IGZpbGUgd2lucylcclxuICogY29uc3QgbG9hZGVyID0gbmV3IEVudkZpbGVMb2FkZXIoe1xyXG4gKiAgIHBhdGhzOiBbJy5lbnYnLCAnLmVudi5sb2NhbCddLFxyXG4gKiAgIG92ZXJyaWRlOiBmYWxzZVxyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqXHJcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNlLWVudmlyb25tZW50LWZpbGUuaHRtbFxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEVudkZpbGVMb2FkZXIgaW1wbGVtZW50cyBDb25maWdMb2FkZXIge1xyXG4gIC8qKiBAaW50ZXJuYWwgKi9cclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2NvbmZpZzogUmVxdWlyZWQ8RW52RmlsZUxvYWRlckNvbmZpZz47XHJcblxyXG4gIC8qKiBEZWZhdWx0IHBhdGhzIHRvIHNlYXJjaCBmb3IgLmVudiBmaWxlcyAqL1xyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfUEFUSFMgPSBbJy5lbnYnLCAnLmVudi5sb2NhbCddO1xyXG5cclxuICAvKiogRGVmYXVsdCBmaWxlIGVuY29kaW5nICovXHJcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9FTkNPRElORzogQnVmZmVyRW5jb2RpbmcgPSAndXRmLTgnO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihjb25maWc6IEVudkZpbGVMb2FkZXJDb25maWcgPSB7fSkge1xyXG4gICAgdGhpcy5fY29uZmlnID0ge1xyXG4gICAgICBwYXRoczogY29uZmlnLnBhdGhzID8/IEVudkZpbGVMb2FkZXIuREVGQVVMVF9QQVRIUyxcclxuICAgICAgZW5jb2Rpbmc6IGNvbmZpZy5lbmNvZGluZyA/PyBFbnZGaWxlTG9hZGVyLkRFRkFVTFRfRU5DT0RJTkcsXHJcbiAgICAgIG92ZXJyaWRlOiBjb25maWcub3ZlcnJpZGUgPz8gdHJ1ZSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXROYW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gJ0VudkZpbGVMb2FkZXInO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIGlmIGF0IGxlYXN0IG9uZSBvZiB0aGUgY29uZmlndXJlZCAuZW52IGZpbGVzIGV4aXN0cy5cclxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0cnVlIGlmIGFueSBmaWxlIGV4aXN0c1xyXG4gICAqL1xyXG4gIGFzeW5jIGlzQXZhaWxhYmxlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgZm9yIChjb25zdCBmaWxlUGF0aCBvZiB0aGlzLl9jb25maWcucGF0aHMpIHtcclxuICAgICAgY29uc3QgcmVzb2x2ZWRQYXRoID0gdGhpcy5yZXNvbHZlUGF0aChmaWxlUGF0aCk7XHJcbiAgICAgIGlmIChhd2FpdCB0aGlzLmZpbGVFeGlzdHMocmVzb2x2ZWRQYXRoKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb2FkIGNvbmZpZ3VyYXRpb24gZnJvbSAuZW52IGZpbGVzLlxyXG4gICAqXHJcbiAgICogRmlsZXMgYXJlIHByb2Nlc3NlZCBpbiBvcmRlci4gV2hlbiBvdmVycmlkZSBpcyB0cnVlIChkZWZhdWx0KSxcclxuICAgKiBsYXRlciBmaWxlcyBvdmVycmlkZSBlYXJsaWVyIG9uZXMuIFdoZW4gb3ZlcnJpZGUgaXMgZmFsc2UsXHJcbiAgICogZWFybGllciBmaWxlcyB0YWtlIHByZWNlZGVuY2UuXHJcbiAgICpcclxuICAgKiBNaXNzaW5nIGZpbGVzIGFyZSBzaWxlbnRseSBza2lwcGVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIG1lcmdlZCBjb25maWd1cmF0aW9uXHJcbiAgICogQHRocm93cyBDb25maWd1cmF0aW9uTG9hZEVycm9yIGlmIGEgZmlsZSBleGlzdHMgYnV0IGNhbm5vdCBiZSByZWFkXHJcbiAgICovXHJcbiAgYXN5bmMgbG9hZCgpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XHJcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XHJcblxyXG4gICAgZm9yIChjb25zdCBmaWxlUGF0aCBvZiB0aGlzLl9jb25maWcucGF0aHMpIHtcclxuICAgICAgY29uc3QgcmVzb2x2ZWRQYXRoID0gdGhpcy5yZXNvbHZlUGF0aChmaWxlUGF0aCk7XHJcblxyXG4gICAgICBpZiAoIShhd2FpdCB0aGlzLmZpbGVFeGlzdHMocmVzb2x2ZWRQYXRoKSkpIHtcclxuICAgICAgICAvLyBTa2lwIG1pc3NpbmcgZmlsZXMgc2lsZW50bHlcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgdGhpcy5yZWFkRmlsZShyZXNvbHZlZFBhdGgpO1xyXG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IEVudkZpbGVQYXJzZXIucGFyc2UoY29udGVudCk7XHJcblxyXG4gICAgICAgIC8vIE1lcmdlIGJhc2VkIG9uIG92ZXJyaWRlIHNldHRpbmdcclxuICAgICAgICBpZiAodGhpcy5fY29uZmlnLm92ZXJyaWRlKSB7XHJcbiAgICAgICAgICAvLyBMYXRlciBmaWxlcyBvdmVycmlkZSBlYXJsaWVyIG9uZXNcclxuICAgICAgICAgIE9iamVjdC5hc3NpZ24ocmVzdWx0LCBwYXJzZWQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBFYXJsaWVyIGZpbGVzIHRha2UgcHJlY2VkZW5jZSAtIG9ubHkgYWRkIGtleXMgdGhhdCBkb24ndCBleGlzdFxyXG4gICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFyc2VkKSkge1xyXG4gICAgICAgICAgICBpZiAoIShrZXkgaW4gcmVzdWx0KSkge1xyXG4gICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IENvbmZpZ3VyYXRpb25Mb2FkRXJyb3IoXHJcbiAgICAgICAgICBgRmFpbGVkIHRvIHJlYWQgZW52IGZpbGU6ICR7cmVzb2x2ZWRQYXRofWAsXHJcbiAgICAgICAgICB0aGlzLmdldE5hbWUoKSxcclxuICAgICAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IHVuZGVmaW5lZCxcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc29sdmUgYSBmaWxlIHBhdGggcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIHJlc29sdmVQYXRoKGZpbGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKHBhdGguaXNBYnNvbHV0ZShmaWxlUGF0aCkpIHtcclxuICAgICAgcmV0dXJuIGZpbGVQYXRoO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBmaWxlUGF0aCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayBpZiBhIGZpbGUgZXhpc3RzLlxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBhc3luYyBmaWxlRXhpc3RzKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGF3YWl0IGZzLnByb21pc2VzLmFjY2VzcyhmaWxlUGF0aCwgZnMuY29uc3RhbnRzLlJfT0spO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWFkIGEgZmlsZSdzIGNvbnRlbnRzLlxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBhc3luYyByZWFkRmlsZShmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiBmcy5wcm9taXNlcy5yZWFkRmlsZShmaWxlUGF0aCwgeyBlbmNvZGluZzogdGhpcy5fY29uZmlnLmVuY29kaW5nIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=