ngx-dynamic-entity 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/esm2022/lib/field-types/array-field.component.mjs +13 -5
  2. package/esm2022/lib/field-types/boolean-field.component.mjs +4 -3
  3. package/esm2022/lib/field-types/checkbox-field.component.mjs +4 -3
  4. package/esm2022/lib/field-types/currency-field.component.mjs +4 -3
  5. package/esm2022/lib/field-types/date-field.component.mjs +4 -3
  6. package/esm2022/lib/field-types/dropdown-field.component.mjs +9 -7
  7. package/esm2022/lib/field-types/email-field.component.mjs +4 -3
  8. package/esm2022/lib/field-types/entity-ref-field.component.mjs +21 -7
  9. package/esm2022/lib/field-types/field-component.contract.mjs +2 -0
  10. package/esm2022/lib/field-types/file-field.component.mjs +4 -3
  11. package/esm2022/lib/field-types/group-field.component.mjs +5 -5
  12. package/esm2022/lib/field-types/image-field.component.mjs +4 -3
  13. package/esm2022/lib/field-types/month-year-field.component.mjs +4 -3
  14. package/esm2022/lib/field-types/multi-select-field.component.mjs +4 -3
  15. package/esm2022/lib/field-types/number-field.component.mjs +7 -11
  16. package/esm2022/lib/field-types/password-field.component.mjs +4 -3
  17. package/esm2022/lib/field-types/radio-field.component.mjs +4 -3
  18. package/esm2022/lib/field-types/text-field.component.mjs +25 -18
  19. package/esm2022/lib/field-types/textarea-field.component.mjs +4 -3
  20. package/esm2022/lib/form/dynamic-field/dynamic-field.component.mjs +53 -6
  21. package/esm2022/lib/form/dynamic-form.component.mjs +131 -15
  22. package/esm2022/lib/form/dynamic-record-form.component.mjs +2 -2
  23. package/esm2022/lib/providers/provide-ngx-dynamic-entity.mjs +7 -2
  24. package/esm2022/lib/services/cascade-data.service.mjs +2 -2
  25. package/esm2022/lib/services/entity-ref-registry.service.mjs +2 -2
  26. package/esm2022/lib/services/lookup-registry.service.mjs +2 -2
  27. package/esm2022/lib/services/validation-messages.service.mjs +56 -0
  28. package/esm2022/lib/services/validator-registry.service.mjs +24 -2
  29. package/esm2022/lib/tokens/injection-tokens.mjs +19 -6
  30. package/esm2022/public-api.mjs +6 -1
  31. package/fesm2022/ngx-dynamic-entity.mjs +373 -81
  32. package/fesm2022/ngx-dynamic-entity.mjs.map +1 -1
  33. package/lib/field-types/array-field.component.d.ts +7 -1
  34. package/lib/field-types/dropdown-field.component.d.ts +1 -0
  35. package/lib/field-types/entity-ref-field.component.d.ts +11 -1
  36. package/lib/field-types/field-component.contract.d.ts +49 -0
  37. package/lib/field-types/group-field.component.d.ts +1 -1
  38. package/lib/field-types/number-field.component.d.ts +1 -0
  39. package/lib/field-types/text-field.component.d.ts +10 -2
  40. package/lib/form/dynamic-field/dynamic-field.component.d.ts +39 -4
  41. package/lib/form/dynamic-form.component.d.ts +62 -2
  42. package/lib/providers/provide-ngx-dynamic-entity.d.ts +17 -1
  43. package/lib/services/cascade-data.service.d.ts +1 -1
  44. package/lib/services/entity-ref-registry.service.d.ts +1 -1
  45. package/lib/services/lookup-registry.service.d.ts +1 -1
  46. package/lib/services/validation-messages.service.d.ts +43 -0
  47. package/lib/services/validator-registry.service.d.ts +13 -1
  48. package/lib/tokens/injection-tokens.d.ts +18 -5
  49. package/package.json +2 -2
  50. package/public-api.d.ts +2 -0
  51. package/styles.css +579 -0
@@ -217,7 +217,7 @@ const hostLastConfig = new WeakMap();
217
217
  * Point a choice component's `options` signal at the right source (parity plan §6.3).
218
218
  *
219
219
  * Called from the `field` / `language` input setters of `dropdown`, `radio` and `multiSelect` —
220
- * the wiring is theirs, the decision is the service's, which is what keeps the ADR-008
220
+ * the wiring is theirs, the decision is the service's, which is what keeps the field
221
221
  * five-input contract intact: options are never pushed in as a sixth input.
222
222
  *
223
223
  * Setters rather than `ngOnChanges` on purpose. `ngOnChanges` only fires for inputs Angular
@@ -243,4 +243,4 @@ export function refreshChoiceOptions(host, lookups) {
243
243
  host.options.set(options);
244
244
  });
245
245
  }
246
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9va3VwLXJlZ2lzdHJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2xvb2t1cC1yZWdpc3RyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUF1QixNQUFNLGVBQWUsQ0FBQztBQVd4RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUscUJBQXFCLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQUU3RCw4RkFBOEY7QUFDOUYsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBRWhCOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsTUFBTSxPQUFPLHFCQUFxQjtJQUNmLFFBQVEsR0FDdkIsTUFBTSxDQUFDLGVBQWUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUksR0FBRyxFQUE0QixDQUFDO0lBRXJGLDJDQUEyQztJQUMxQixPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQTRCLENBQUM7SUFDL0QsZ0dBQWdHO0lBQy9FLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBNkIsQ0FBQztJQUMvRCx5Q0FBeUM7SUFDeEIsUUFBUSxHQUFHLElBQUksR0FBRyxFQUFxQyxDQUFDO0lBQ3pFLGdGQUFnRjtJQUMvRCxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFFcEQsR0FBRyxDQUFDLFFBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBZ0IsRUFBRSxJQUFJLEdBQUcsSUFBSTtRQUN0QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEs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QUFPO0lBRTlDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDO0lBQ3RDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDM0IsS0FBSyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUNwRSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUk7WUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3RixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QsIHR5cGUgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHtcbiAgRHJvcGRvd25PcHRpb24sXG4gIExvb2t1cExpc3RMb2FkZXIsXG4gIExvb2t1cExpc3RSZXN1bHQsXG4gIExvb2t1cExpc3RTb3VyY2UsXG4gIExvb2t1cExpc3RWYWx1ZSxcbiAgTmVzdGVkRmllbGRDb25maWcsXG4gIFJhd0xvb2t1cExpc3RWYWx1ZSxcbiAgU3Vic2NyaWJhYmxlLFxufSBmcm9tICdAZHluYW1pYy1lbnRpdHkvY29yZSc7XG5pbXBvcnQgeyBsb29rdXBWYWx1ZXNUb09wdGlvbnMsIG5vcm1hbGl6ZUxvb2t1cFZhbHVlcywgcmVzb2x2ZUxhYmVsIH0gZnJvbSAnQGR5bmFtaWMtZW50aXR5L2NvcmUnO1xuaW1wb3J0IHsgTE9PS1VQX1JFR0lTVFJZIH0gZnJvbSAnLi4vdG9rZW5zL2luamVjdGlvbi10b2tlbnMnO1xuXG4vKiogQ2FjaGUta2V5IGZpZWxkIHNlcGFyYXRvci4gS2VwdCBvdXQgb2YgdGVtcGxhdGUgbGl0ZXJhbHMgc28gaXQgc3RheXMgdmlzaWJsZSBpbiBzb3VyY2UuICovXG5jb25zdCBTRVAgPSAnfCc7XG5cbi8qKlxuICogTG9va3VwUmVnaXN0cnlTZXJ2aWNlIOKAlCB0aGUgY2FjaGUgaW4gZnJvbnQgb2YgY29uc3VtZXItcmVnaXN0ZXJlZCBtYXN0ZXIgbGlzdHMuXG4gKlxuICogVGhyZWUgbGF5ZXJzLCBkZWxpYmVyYXRlbHkgdGhlIHNhbWUgc2hhcGUgYXMgYEVudGl0eVJlZmVyZW5jZVNlcnZpY2VgLCBiZWNhdXNlIHRoZSBwcm9ibGVtIGlzXG4gKiB0aGUgc2FtZTogb25lIGxpc3QgaXMgdHlwaWNhbGx5IHVzZWQgYnkgbWFueSBmaWVsZHMgYWNyb3NzIG1hbnkgZW50aXRpZXMuXG4gKiAgMS4gKipvcHRpb25zKiog4oCUIHJlc29sdmVkIGBEcm9wZG93bk9wdGlvbltdYCBwZXIgKGxpc3QgbmFtZSwgbGFuZykuXG4gKiAgMi4gKippbi1mbGlnaHQqKiDigJQgdGhlIHBlbmRpbmcgUHJvbWlzZSwgc28gTiBmaWVsZHMgb24gb25lIGxpc3QgdHJpZ2dlciBvbmUgbG9hZCwgbm90IE4uXG4gKiAgMy4gKipsYWJlbHMqKiDigJQgc3luY2hyb25vdXMgdmFsdWUg4oaSIHRleHQgKHBhcml0eSBwbGFuIMKnNi4yKS4gVGhpcyBpcyBub3QgYSBuaWNldHk6IHNpbmNlXG4gKiAgICAgYHZpZXdNb2RlYCBkZWZhdWx0cyB0byB0cnVlIGEgcmVjb3JkIG9wZW5zIHJlYWQtb25seSwgc28gcmVuZGVyaW5nIGEgc3RvcmVkIHZhbHVlIGFzXG4gKiAgICAgdGV4dCBpcyB0aGUgKmZpcnN0KiB0aGluZyBhIGBsaXN0TmFtZWAgZmllbGQgaGFzIHRvIGRvLiBBbiBhc3luYy1vbmx5IHJlZ2lzdHJ5IHdvdWxkXG4gKiAgICAgcGFpbnQgdGhlIHJhdyBzdG9yZWQgdmFsdWUgYW5kIHRoZW4gZmxpcCwgb24gZXZlcnkgcmVjb3JkIG9wZW4uXG4gKlxuICogQSBmYWlsZWQgbG9hZCByZWplY3RzIGFuZCBjYWNoZXMgbm90aGluZywgc28gb25lIHRyYW5zaWVudCBlcnJvciBkb2VzIG5vdCBzZXJ2ZSBhbiBlbXB0eVxuICogbGlzdCBmb3JldmVyIOKAlCB0aGUgc2FtZSBmaXggbWFkZSBmb3IgZW50aXR5IHJlZmVyZW5jZXMgaW4gcGhhc2UgNS5cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBMb29rdXBSZWdpc3RyeVNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2lzdHJ5ID1cbiAgICBpbmplY3QoTE9PS1VQX1JFR0lTVFJZLCB7IG9wdGlvbmFsOiB0cnVlIH0pID8/IG5ldyBNYXA8c3RyaW5nLCBMb29rdXBMaXN0U291cmNlPigpO1xuXG4gIC8qKiBgbGlzdE5hbWV8bGFuZ2AgLT4gcmVzb2x2ZWQgb3B0aW9ucy4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zID0gbmV3IE1hcDxzdHJpbmcsIERyb3Bkb3duT3B0aW9uW10+KCk7XG4gIC8qKiBgbGlzdE5hbWV8bGFuZ2AgLT4gbm9ybWFsaXNlZCB2YWx1ZXMsIHNvIGEgY29uc3VtZXIgY2FuIHJlYWNoIGBjb2RlYCAvIGBpc1N5c3RlbURlZmluZWRgLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHZhbHVlcyA9IG5ldyBNYXA8c3RyaW5nLCBMb29rdXBMaXN0VmFsdWVbXT4oKTtcbiAgLyoqIExvYWRzIGluIHByb2dyZXNzLCBrZXllZCBhcyBhYm92ZS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBpbkZsaWdodCA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPERyb3Bkb3duT3B0aW9uW10+PigpO1xuICAvKiogYGxpc3ROYW1lfGxhbmd8dGV4dGAgLT4gZGlzcGxheSB0ZXh0LCBmb3IgdGhlIHN5bmNocm9ub3VzIHJlYWQtb25seSBwYXRoLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGxhYmVscyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgaGFzKGxpc3ROYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZWdpc3RyeS5oYXMobGlzdE5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIGEgbmFtZWQgbGlzdCwgZnJvbSBjYWNoZSB3aGVuIHByZXNlbnQuXG4gICAqIENvbmN1cnJlbnQgY2FsbGVycyB3aXRoIHRoZSBzYW1lIGtleSBzaGFyZSBvbmUgbG9hZC5cbiAgICovXG4gIGFzeW5jIGxvYWQobGlzdE5hbWU6IHN0cmluZywgbGFuZyA9ICdlbicpOiBQcm9taXNlPERyb3Bkb3duT3B0aW9uW10+IHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmNhY2hlS2V5KGxpc3ROYW1lLCBsYW5nKTtcblxuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMub3B0aW9ucy5nZXQoa2V5KTtcbiAgICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkO1xuXG4gICAgY29uc3QgcGVuZGluZyA9IHRoaXMuaW5GbGlnaHQuZ2V0KGtleSk7XG4gICAgaWYgKHBlbmRpbmcpIHJldHVybiBwZW5kaW5nO1xuXG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5yZWdpc3RyeS5nZXQobGlzdE5hbWUpO1xuICAgIGlmIChzb3VyY2UgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFtdO1xuXG4gICAgY29uc3QgbG9hZCA9IHRoaXMuaW52b2tlKHNvdXJjZSwgbGFuZykudGhlbihyYXcgPT4ge1xuICAgICAgY29uc3QgdmFsdWVzID0gbm9ybWFsaXplTG9va3VwVmFsdWVzKHJhdyk7XG4gICAgICBjb25zdCBvcHRpb25zID0gbG9va3VwVmFsdWVzVG9PcHRpb25zKHZhbHVlcyk7XG4gICAgICB0aGlzLnZhbHVlcy5zZXQoa2V5LCB2YWx1ZXMpO1xuICAgICAgdGhpcy5vcHRpb25zLnNldChrZXksIG9wdGlvbnMpO1xuICAgICAgdGhpcy5yZW1lbWJlckxhYmVscyhsaXN0TmFtZSwgbGFuZywgb3B0aW9ucyk7XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9KTtcblxuICAgIC8vIE9ubHkgdGhlIGAudGhlbmAgYWJvdmUgd3JpdGVzIHRvIHRoZSBjYWNoZSwgYW5kIGEgcmVqZWN0aW9uIHNraXBzIGl0OiB0aGUgY2FsbGVyIHN0aWxsXG4gICAgLy8gZ2V0cyBhbiBlbXB0eSBsaXN0LCBidXQgdGhlIG5leHQgY2FsbCByZXRyaWVzIGluc3RlYWQgb2YgcmVhZGluZyBhIHBvaXNvbmVkIGVudHJ5LlxuICAgIGNvbnN0IGd1YXJkZWQgPSBsb2FkXG4gICAgICAuY2F0Y2goKCkgPT4gW10gYXMgRHJvcGRvd25PcHRpb25bXSlcbiAgICAgIC5maW5hbGx5KCgpID0+IHRoaXMuaW5GbGlnaHQuZGVsZXRlKGtleSkpO1xuXG4gICAgdGhpcy5pbkZsaWdodC5zZXQoa2V5LCBndWFyZGVkKTtcbiAgICByZXR1cm4gZ3VhcmRlZDtcbiAgfVxuXG4gIC8qKiBDYWNoZWQgb3B0aW9ucyB3aXRob3V0IHRyaWdnZXJpbmcgYSBsb2FkLiBgdW5kZWZpbmVkYCB3aGVuIG5vdCBsb2FkZWQuICovXG4gIHBlZWsobGlzdE5hbWU6IHN0cmluZywgbGFuZyA9ICdlbicpOiBEcm9wZG93bk9wdGlvbltdIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmdldCh0aGlzLmNhY2hlS2V5KGxpc3ROYW1lLCBsYW5nKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FjaGVkIGxpc3QgdmFsdWVzLCBjYXJyeWluZyBgX2lkYCwgYGNvZGVgLCBgaXNTeXN0ZW1EZWZpbmVkYCBhbmQgYGZyb21gLlxuICAgKiBUaGUgbGlicmFyeSBuZXZlciByZWFkcyB0aG9zZTsgdGhpcyBpcyB0aGUgc2VhbSBmb3IgYSBjb25zdW1lciB0aGF0IG5lZWRzIHRoZW0uXG4gICAqL1xuICB2YWx1ZXNGb3IobGlzdE5hbWU6IHN0cmluZywgbGFuZyA9ICdlbicpOiBMb29rdXBMaXN0VmFsdWVbXSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVzLmdldCh0aGlzLmNhY2hlS2V5KGxpc3ROYW1lLCBsYW5nKSk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheSB0ZXh0IGZvciBhIHN0b3JlZCB2YWx1ZSwgc3luY2hyb25vdXNseS4gYHVuZGVmaW5lZGAgd2hlbiB0aGUgbGlzdCBoYXMgbm90IGxvYWRlZFxuICAgKiBvciBob2xkcyBubyBtYXRjaGluZyB2YWx1ZSDigJQgdGhlIGNhbGxlciBrZWVwcyBpdHMgb3duIGZhbGxiYWNrLCB3aGljaCBpcyB0aGUgc3RvcmVkIHRleHQuXG4gICAqXG4gICAqIEV2ZXJ5IGxhbmd1YWdlIG9mIGFuIG9wdGlvbiBpcyBpbmRleGVkLCBzbyBhIHJlY29yZCBzYXZlZCB1bmRlciBvbmUgbGFuZ3VhZ2UgcmVuZGVycyBpblxuICAgKiBhbm90aGVyOiBhIHZhbHVlIHN0b3JlZCBhcyBgJ0FrdGl2J2AgcmVzb2x2ZXMgdG8gYCdBY3RpdmUnYCB1bmRlciBgbGFuZzogJ2VuJ2AuXG4gICAqL1xuICBsYWJlbEZvcihsaXN0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCB2YWx1ZTogdW5rbm93biwgbGFuZyA9ICdlbicpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghbGlzdE5hbWUgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgZm9yIChjb25zdCB0ZXh0IG9mIHRoaXMuY2FuZGlkYXRlVGV4dHModmFsdWUsIGxhbmcpKSB7XG4gICAgICBjb25zdCBoaXQgPSB0aGlzLmxhYmVscy5nZXQodGhpcy5sYWJlbEtleShsaXN0TmFtZSwgbGFuZywgdGV4dCkpO1xuICAgICAgaWYgKGhpdCkgcmV0dXJuIGhpdDtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIOKUgOKUgOKUgCBGaWVsZC1sZXZlbCByZXNvbHV0aW9uIOKAlCBpbmxpbmUgb3B0aW9ucyB3aW4sIGVsc2UgYGxpc3ROYW1lYCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogVHJ1ZSB3aGVuIHRoaXMgZmllbGQncyBvcHRpb25zIGhhdmUgdG8gY29tZSBmcm9tIHRoZSByZWdpc3RyeS4gKi9cbiAgbmVlZHNSZXNvbHZlKGZpZWxkOiBOZXN0ZWRGaWVsZENvbmZpZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIWZpZWxkPy5saXN0TmFtZSAmJiAhZmllbGQub3B0aW9ucz8ubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBvcHRpb25zIHRvIHJlbmRlciByaWdodCBub3csIHdpdGhvdXQgYXdhaXRpbmc6IGlubGluZSBvcHRpb25zLCBlbHNlIHdoYXRldmVyIHRoZVxuICAgKiByZWdpc3RyeSBhbHJlYWR5IGhvbGRzLiBFbXB0eSBvbiBhIGNvbGQgbWlzcyDigJQgcGFpciB3aXRoIGByZXNvbHZlT3B0aW9uc2AuXG4gICAqL1xuICBvcHRpb25zRm9yKGZpZWxkOiBOZXN0ZWRGaWVsZENvbmZpZyB8IHVuZGVmaW5lZCwgbGFuZyA9ICdlbicpOiBEcm9wZG93bk9wdGlvbltdIHtcbiAgICBpZiAoIWZpZWxkKSByZXR1cm4gW107XG4gICAgaWYgKGZpZWxkLm9wdGlvbnM/Lmxlbmd0aCkgcmV0dXJuIGZpZWxkLm9wdGlvbnM7XG4gICAgaWYgKCFmaWVsZC5saXN0TmFtZSkgcmV0dXJuIFtdO1xuICAgIHJldHVybiB0aGlzLnBlZWsoZmllbGQubGlzdE5hbWUsIGxhbmcpID8/IFtdO1xuICB9XG5cbiAgLyoqIFRoZSBvcHRpb25zIGZvciBhIGZpZWxkLCBsb2FkaW5nIHRoZSBuYW1lZCBsaXN0IGlmIG5lZWRlZC4gKi9cbiAgcmVzb2x2ZU9wdGlvbnMoZmllbGQ6IE5lc3RlZEZpZWxkQ29uZmlnIHwgdW5kZWZpbmVkLCBsYW5nID0gJ2VuJyk6IFByb21pc2U8RHJvcGRvd25PcHRpb25bXT4ge1xuICAgIGlmICghdGhpcy5uZWVkc1Jlc29sdmUoZmllbGQpKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMub3B0aW9uc0ZvcihmaWVsZCwgbGFuZykpO1xuICAgIHJldHVybiB0aGlzLmxvYWQoZmllbGQhLmxpc3ROYW1lISwgbGFuZyk7XG4gIH1cblxuICAvKiogRHJvcCBldmVyeXRoaW5nIGNhY2hlZCBmb3Igb25lIGxpc3QsIGxlYXZpbmcgb3RoZXIgbGlzdHMgaW50YWN0LiAqL1xuICBpbnZhbGlkYXRlKGxpc3ROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBwcmVmaXggPSBgJHtsaXN0TmFtZX0ke1NFUH1gO1xuICAgIGZvciAoY29uc3QgbWFwIG9mIFt0aGlzLm9wdGlvbnMsIHRoaXMudmFsdWVzLCB0aGlzLmluRmxpZ2h0XSkge1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgWy4uLm1hcC5rZXlzKCldKSB7XG4gICAgICAgIGlmIChrZXkuc3RhcnRzV2l0aChwcmVmaXgpKSBtYXAuZGVsZXRlKGtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IG9mIFsuLi50aGlzLmxhYmVscy5rZXlzKCldKSB7XG4gICAgICBpZiAoa2V5LnN0YXJ0c1dpdGgocHJlZml4KSkgdGhpcy5sYWJlbHMuZGVsZXRlKGtleSk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5vcHRpb25zLmNsZWFyKCk7XG4gICAgdGhpcy52YWx1ZXMuY2xlYXIoKTtcbiAgICB0aGlzLmluRmxpZ2h0LmNsZWFyKCk7XG4gICAgdGhpcy5sYWJlbHMuY2xlYXIoKTtcbiAgfVxuXG4gIC8vIOKUgOKUgOKUgCBJbnRlcm5hbHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgcHJpdmF0ZSBjYWNoZUtleShsaXN0TmFtZTogc3RyaW5nLCBsYW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBbbGlzdE5hbWUsIGxhbmddLmpvaW4oU0VQKTtcbiAgfVxuXG4gIHByaXZhdGUgbGFiZWxLZXkobGlzdE5hbWU6IHN0cmluZywgbGFuZzogc3RyaW5nLCB0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBbbGlzdE5hbWUsIGxhbmcsIHRleHRdLmpvaW4oU0VQKTtcbiAgfVxuXG4gIC8qKiBJbmRleCBhbiBvcHRpb24gdW5kZXIgZXZlcnkgbGFuZ3VhZ2UgaXQgY2Fycmllcywgc28gYW55IHN0b3JlZCBzcGVsbGluZyBmaW5kcyBpdC4gKi9cbiAgcHJpdmF0ZSByZW1lbWJlckxhYmVscyhsaXN0TmFtZTogc3RyaW5nLCBsYW5nOiBzdHJpbmcsIG9wdGlvbnM6IERyb3Bkb3duT3B0aW9uW10pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICBjb25zdCBkaXNwbGF5ID0gcmVzb2x2ZUxhYmVsKG9wdGlvbiwgbGFuZyk7XG4gICAgICBpZiAoIWRpc3BsYXkpIGNvbnRpbnVlO1xuICAgICAgZm9yIChjb25zdCB0ZXh0IG9mIE9iamVjdC52YWx1ZXMob3B0aW9uKSkge1xuICAgICAgICBpZiAodHlwZW9mIHRleHQgPT09ICdzdHJpbmcnICYmIHRleHQgIT09ICcnKSB7XG4gICAgICAgICAgdGhpcy5sYWJlbHMuc2V0KHRoaXMubGFiZWxLZXkobGlzdE5hbWUsIGxhbmcsIHRleHQpLCBkaXNwbGF5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBUaGUgdGV4dHMgYSBzdG9yZWQgdmFsdWUgY291bGQgaGF2ZSBiZWVuIGluZGV4ZWQgdW5kZXIuICovXG4gIHByaXZhdGUgY2FuZGlkYXRlVGV4dHModmFsdWU6IHVua25vd24sIGxhbmc6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3QgdGV4dHMgPSBPYmplY3QudmFsdWVzKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5maWx0ZXIoXG4gICAgICAgICh2KTogdiBpcyBzdHJpbmcgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIHYgIT09ICcnLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZUxhYmVsKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIGxhbmcpO1xuICAgICAgcmV0dXJuIHJlc29sdmVkID8gW3Jlc29sdmVkLCAuLi50ZXh0c10gOiB0ZXh0cztcbiAgICB9XG4gICAgcmV0dXJuIFtTdHJpbmcodmFsdWUpXTtcbiAgfVxuXG4gIC8vIOKUgOKUgOKUgCBTb3VyY2UgY29lcmNpb24gKHZhbHVlcyB8IGxvYWRlciwgYXJyYXkgfCBQcm9taXNlIHwgT2JzZXJ2YWJsZSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgcHJpdmF0ZSBpbnZva2Uoc291cmNlOiBMb29rdXBMaXN0U291cmNlLCBsYW5nOiBzdHJpbmcpOiBQcm9taXNlPFJhd0xvb2t1cExpc3RWYWx1ZVtdPiB7XG4gICAgbGV0IHJlc3VsdDogTG9va3VwTGlzdFJlc3VsdDtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gdHlwZW9mIHNvdXJjZSA9PT0gJ2Z1bmN0aW9uJyA/IChzb3VyY2UgYXMgTG9va3VwTGlzdExvYWRlcikoeyBsYW5nIH0pIDogc291cmNlO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gUmVqZWN0IHJhdGhlciB0aGFuIHJlc29sdmUgZW1wdHk6IGBsb2FkYCBtdXN0IGJlIGFibGUgdG8gdGVsbCBmYWlsdXJlIGZyb20gYW4gZW1wdHlcbiAgICAgIC8vIGxpc3QsIG9yIGl0IHdvdWxkIGNhY2hlIHRoZSBmYWlsdXJlLlxuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRvUHJvbWlzZShyZXN1bHQpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b1Byb21pc2UocmVzdWx0OiBMb29rdXBMaXN0UmVzdWx0KTogUHJvbWlzZTxSYXdMb29rdXBMaXN0VmFsdWVbXT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzdWx0KTtcbiAgICBpZiAodGhpcy5pc1N1YnNjcmliYWJsZShyZXN1bHQpKSB7XG4gICAgICAvLyBGaXJzdCBlbWlzc2lvbiB3aW5zLCBzbyBhIHN0cmVhbSB0aGF0IHN0YXlzIG9wZW4gc3RpbGwgcmVzb2x2ZXMgdGhlIGxvYWQuXG4gICAgICByZXR1cm4gbmV3IFByb21pc2U8UmF3TG9va3VwTGlzdFZhbHVlW10+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgbGV0IHNldHRsZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3Qgc2V0dGxlID0gKGZuOiAoKSA9PiB2b2lkKSA9PiB7XG4gICAgICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgICBmbigpO1xuICAgICAgICB9O1xuICAgICAgICByZXN1bHQuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiB2YWx1ZSA9PiBzZXR0bGUoKCkgPT4gcmVzb2x2ZSh2YWx1ZSA/PyBbXSkpLFxuICAgICAgICAgIGVycm9yOiBlcnIgPT4gc2V0dGxlKCgpID0+IHJlamVjdChlcnIpKSxcbiAgICAgICAgICAvLyBDb21wbGV0aW5nIHdpdGhvdXQgZW1pdHRpbmcgaXMgYSBsZWdpdGltYXRlIGVtcHR5IGxpc3QsIGFuZCBpcyBjYWNoZWQuXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHNldHRsZSgoKSA9PiByZXNvbHZlKFtdKSksXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzdWx0IGFzIFByb21pc2U8UmF3TG9va3VwTGlzdFZhbHVlW10+KTtcbiAgfVxuXG4gIHByaXZhdGUgaXNTdWJzY3JpYmFibGUodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBTdWJzY3JpYmFibGU8UmF3TG9va3VwTGlzdFZhbHVlW10+IHtcbiAgICByZXR1cm4gKFxuICAgICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICAgIHR5cGVvZiAodmFsdWUgYXMgU3Vic2NyaWJhYmxlPFJhd0xvb2t1cExpc3RWYWx1ZVtdPikuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nXG4gICAgKTtcbiAgfVxufVxuXG4vKiogQSBjaG9pY2UgZmllbGQgY29tcG9uZW50LCBhcyBmYXIgYXMgb3B0aW9uIHJlc29sdXRpb24gaXMgY29uY2VybmVkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaG9pY2VPcHRpb25Ib3N0IHtcbiAgcmVhZG9ubHkgZmllbGQ6IE5lc3RlZEZpZWxkQ29uZmlnIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBsYW5ndWFnZTogc3RyaW5nO1xuICByZWFkb25seSBvcHRpb25zOiBXcml0YWJsZVNpZ25hbDxEcm9wZG93bk9wdGlvbltdPjtcbn1cblxuY29uc3QgaG9zdExhc3RDb25maWcgPSBuZXcgV2Vha01hcDxDaG9pY2VPcHRpb25Ib3N0LCB7IGZpZWxkPzogTmVzdGVkRmllbGRDb25maWc7IGxhbmc/OiBzdHJpbmcgfT4oKTtcblxuLyoqXG4gKiBQb2ludCBhIGNob2ljZSBjb21wb25lbnQncyBgb3B0aW9uc2Agc2lnbmFsIGF0IHRoZSByaWdodCBzb3VyY2UgKHBhcml0eSBwbGFuIMKnNi4zKS5cbiAqXG4gKiBDYWxsZWQgZnJvbSB0aGUgYGZpZWxkYCAvIGBsYW5ndWFnZWAgaW5wdXQgc2V0dGVycyBvZiBgZHJvcGRvd25gLCBgcmFkaW9gIGFuZCBgbXVsdGlTZWxlY3RgIOKAlFxuICogdGhlIHdpcmluZyBpcyB0aGVpcnMsIHRoZSBkZWNpc2lvbiBpcyB0aGUgc2VydmljZSdzLCB3aGljaCBpcyB3aGF0IGtlZXBzIHRoZSBBRFItMDA4XG4gKiBmaXZlLWlucHV0IGNvbnRyYWN0IGludGFjdDogb3B0aW9ucyBhcmUgbmV2ZXIgcHVzaGVkIGluIGFzIGEgc2l4dGggaW5wdXQuXG4gKlxuICogU2V0dGVycyByYXRoZXIgdGhhbiBgbmdPbkNoYW5nZXNgIG9uIHB1cnBvc2UuIGBuZ09uQ2hhbmdlc2Agb25seSBmaXJlcyBmb3IgaW5wdXRzIEFuZ3VsYXJcbiAqIGl0c2VsZiBzZXRzLCBzbyBhIGNvbXBvbmVudCB3aG9zZSBgZmllbGRgIGlzIGFzc2lnbmVkIGRpcmVjdGx5IOKAlCB3aGljaCB0aGUgZmllbGQgc3BlY3MgZG8sXG4gKiBhbmQgYW55IGNvbnN1bWVyIGhvbGRpbmcgYSBgQ29tcG9uZW50UmVmYCBtYXkgZG8g4oCUIHdvdWxkIHJlbmRlciBubyBvcHRpb25zIGF0IGFsbC5cbiAqXG4gKiBQYWludHMgc3luY2hyb25vdXNseSBmaXJzdCAoaW5saW5lIG9wdGlvbnMsIG9yIGEgd2FybSBsaXN0KSwgdGhlbiBmaWxscyBpbiB3aGVuIGEgY29sZCBsaXN0XG4gKiBsYW5kcy4gVGhlIGxhdGUgcmVzdWx0IGlzIGRyb3BwZWQgaWYgdGhlIGZpZWxkIG9yIGxhbmd1YWdlIGNoYW5nZWQgd2hpbGUgaXQgd2FzIGluIGZsaWdodC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hDaG9pY2VPcHRpb25zKGhvc3Q6IENob2ljZU9wdGlvbkhvc3QsIGxvb2t1cHM6IExvb2t1cFJlZ2lzdHJ5U2VydmljZSk6IHZvaWQge1xuICBjb25zdCBsYXN0ID0gaG9zdExhc3RDb25maWcuZ2V0KGhvc3QpO1xuICBpZiAobGFzdCAmJiBsYXN0LmZpZWxkID09PSBob3N0LmZpZWxkICYmIGxhc3QubGFuZyA9PT0gaG9zdC5sYW5ndWFnZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBob3N0TGFzdENvbmZpZy5zZXQoaG9zdCwgeyBmaWVsZDogaG9zdC5maWVsZCwgbGFuZzogaG9zdC5sYW5ndWFnZSB9KTtcblxuICBob3N0Lm9wdGlvbnMuc2V0KGxvb2t1cHMub3B0aW9uc0Zvcihob3N0LmZpZWxkLCBob3N0Lmxhbmd1YWdlKSk7XG4gIGlmICghbG9va3Vwcy5uZWVkc1Jlc29sdmUoaG9zdC5maWVsZCkpIHJldHVybjtcblxuICBjb25zdCBsaXN0TmFtZSA9IGhvc3QuZmllbGQ/Lmxpc3ROYW1lO1xuICBjb25zdCBsYW5nID0gaG9zdC5sYW5ndWFnZTtcbiAgdm9pZCBsb29rdXBzLnJlc29sdmVPcHRpb25zKGhvc3QuZmllbGQsIGhvc3QubGFuZ3VhZ2UpLnRoZW4ob3B0aW9ucyA9PiB7XG4gICAgaWYgKGhvc3QuZmllbGQ/Lmxpc3ROYW1lID09PSBsaXN0TmFtZSAmJiBob3N0Lmxhbmd1YWdlID09PSBsYW5nKSBob3N0Lm9wdGlvbnMuc2V0KG9wdGlvbnMpO1xuICB9KTtcbn1cbiJdfQ==
246
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9va3VwLXJlZ2lzdHJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2xvb2t1cC1yZWdpc3RyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUF1QixNQUFNLGVBQWUsQ0FBQztBQVd4RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUscUJBQXFCLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQUU3RCw4RkFBOEY7QUFDOUYsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBRWhCOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsTUFBTSxPQUFPLHFCQUFxQjtJQUNmLFFBQVEsR0FDdkIsTUFBTSxDQUFDLGVBQWUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUksR0FBRyxFQUE0QixDQUFDO0lBRXJGLDJDQUEyQztJQUMxQixPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQTRCLENBQUM7SUFDL0QsZ0dBQWdHO0lBQy9FLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBNkIsQ0FBQztJQUMvRCx5Q0FBeUM7SUFDeEIsUUFBUSxHQUFHLElBQUksR0FBRyxFQUFxQyxDQUFDO0lBQ3pFLGdGQUFnRjtJQUMvRCxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFFcEQsR0FBRyxDQUFDLFFBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBZ0IsRUFBRSxJQUFJLEdBQUcsSUFBSTtRQUN0QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUUxQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxJQUFJLE1BQU07WUFBRSxPQUFPLE1BQU0sQ0FBQztRQUUxQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxJQUFJLE9BQU87WUFBRSxPQUFPLE9BQU8sQ0FBQztRQUU1QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQyxJQUFJLE1BQU0sS0FBSyxTQUFTO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFFcEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2hELE1BQU0sTUFBTSxHQUFHLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFDLE1BQU0sT0FBTyxHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzdDLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBRUgseUZBQXlGO1FBQ3pGLHFGQUFxRjtRQUNyRixNQUFNLE9BQU8sR0FBRyxJQUFJO2FBQ2pCLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFzQixDQUFDO2FBQ25DLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRTVDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNoQyxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsNkVBQTZFO0lBQzdFLElBQUksQ0FBQyxRQUFnQixFQUFFLElBQUksR0FBRyxJQUFJO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsU0FBUyxDQUFDLFFBQWdCLEVBQUUsSUFBSSxHQUFHLElBQUk7UUFDckMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxRQUFRLENBQUMsUUFBNEIsRUFBRSxLQUFjLEVBQUUsSUFBSSxHQUFHLElBQUk7UUFDaEUsSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLEVBQUU7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUN6RixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDcEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDakUsSUFBSSxHQUFHO2dCQUFFLE9BQU8sR0FBRyxDQUFDO1FBQ3RCLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsZ0ZBQWdGO0lBRWhGLHFFQUFxRTtJQUNyRSxZQUFZLENBQUMsS0FBb0M7UUFDL0MsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDO0lBQ3JELENBQUM7SUFFRDs7O09BR0c7SUFDSCxVQUFVLENBQUMsS0FBb0MsRUFBRSxJQUFJLEdBQUcsSUFBSTtRQUMxRCxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3RCLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxNQUFNO1lBQUUsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ2hELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQy9CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRUQsaUVBQWlFO0lBQ2pFLGNBQWMsQ0FBQyxLQUFvQyxFQUFFLElBQUksR0FBRyxJQUFJO1FBQzlELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3BGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFNLENBQUMsUUFBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCx1RUFBdUU7SUFDdkUsVUFBVSxDQUFDLFFBQWdCO1FBQ3pCLE1BQU0sTUFBTSxHQUFHLEdBQUcsUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ25DLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDN0QsS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztvQkFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlDLENBQUM7UUFDSCxDQUFDO1FBQ0QsS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDMUMsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztnQkFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0RCxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCwrRUFBK0U7SUFFdkUsUUFBUSxDQUFDLFFBQWdCLEVBQUUsSUFBWTtRQUM3QyxPQUFPLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU8sUUFBUSxDQUFDLFFBQWdCLEVBQUUsSUFBWSxFQUFFLElBQVk7UUFDM0QsT0FBTyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCx3RkFBd0Y7SUFDaEYsY0FBYyxDQUFDLFFBQWdCLEVBQUUsSUFBWSxFQUFFLE9BQXlCO1FBQzlFLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7WUFDN0IsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsT0FBTztnQkFBRSxTQUFTO1lBQ3ZCLEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUN6QyxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFLENBQUM7b0JBQzVDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDaEUsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELDhEQUE4RDtJQUN0RCxjQUFjLENBQUMsS0FBYyxFQUFFLElBQVk7UUFDakQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM5QixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQWdDLENBQUMsQ0FBQyxNQUFNLENBQ2xFLENBQUMsQ0FBQyxFQUFlLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FDdEQsQ0FBQztZQUNGLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxLQUErQixFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3JFLE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDakQsQ0FBQztRQUNELE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsZ0ZBQWdGO0lBRXhFLE1BQU0sQ0FBQyxNQUF3QixFQUFFLElBQVk7UUFDbkQsSUFBSSxNQUF3QixDQUFDO1FBQzdCLElBQUksQ0FBQztZQUNILE1BQU0sR0FBRyxPQUFPLE1BQU0sS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFFLE1BQTJCLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDMUYsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixzRkFBc0Y7WUFDdEYsdUNBQXVDO1lBQ3ZDLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFTyxTQUFTLENBQUMsTUFBd0I7UUFDeEMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUFFLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxRCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNoQyw0RUFBNEU7WUFDNUUsT0FBTyxJQUFJLE9BQU8sQ0FBdUIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7Z0JBQzNELElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDcEIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxFQUFjLEVBQUUsRUFBRTtvQkFDaEMsSUFBSSxPQUFPO3dCQUFFLE9BQU87b0JBQ3BCLE9BQU8sR0FBRyxJQUFJLENBQUM7b0JBQ2YsRUFBRSxFQUFFLENBQUM7Z0JBQ1AsQ0FBQyxDQUFDO2dCQUNGLE1BQU0sQ0FBQyxTQUFTLENBQUM7b0JBQ2YsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7b0JBQ2pELEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3ZDLHlFQUF5RTtvQkFDekUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQzFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUF1QyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVPLGNBQWMsQ0FBQyxLQUFjO1FBQ25DLE9BQU8sQ0FDTCxPQUFPLEtBQUssS0FBSyxRQUFRO1lBQ3pCLEtBQUssS0FBSyxJQUFJO1lBQ2QsT0FBUSxLQUE0QyxDQUFDLFNBQVMsS0FBSyxVQUFVLENBQzlFLENBQUM7SUFDSixDQUFDO3dHQTFNVSxxQkFBcUI7NEdBQXJCLHFCQUFxQixjQURSLE1BQU07OzRGQUNuQixxQkFBcUI7a0JBRGpDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOztBQXFObEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxPQUFPLEVBQWtFLENBQUM7QUFFckc7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxJQUFzQixFQUFFLE9BQThCO0lBQ3pGLE1BQU0sSUFBSSxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3JFLE9BQU87SUFDVCxDQUFDO0lBQ0QsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFFckUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPO0lBRTlDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDO0lBQ3RDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDM0IsS0FBSyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUNwRSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUk7WUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3RixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QsIHR5cGUgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHtcbiAgRHJvcGRvd25PcHRpb24sXG4gIExvb2t1cExpc3RMb2FkZXIsXG4gIExvb2t1cExpc3RSZXN1bHQsXG4gIExvb2t1cExpc3RTb3VyY2UsXG4gIExvb2t1cExpc3RWYWx1ZSxcbiAgTmVzdGVkRmllbGRDb25maWcsXG4gIFJhd0xvb2t1cExpc3RWYWx1ZSxcbiAgU3Vic2NyaWJhYmxlLFxufSBmcm9tICdAZHluYW1pYy1lbnRpdHkvY29yZSc7XG5pbXBvcnQgeyBsb29rdXBWYWx1ZXNUb09wdGlvbnMsIG5vcm1hbGl6ZUxvb2t1cFZhbHVlcywgcmVzb2x2ZUxhYmVsIH0gZnJvbSAnQGR5bmFtaWMtZW50aXR5L2NvcmUnO1xuaW1wb3J0IHsgTE9PS1VQX1JFR0lTVFJZIH0gZnJvbSAnLi4vdG9rZW5zL2luamVjdGlvbi10b2tlbnMnO1xuXG4vKiogQ2FjaGUta2V5IGZpZWxkIHNlcGFyYXRvci4gS2VwdCBvdXQgb2YgdGVtcGxhdGUgbGl0ZXJhbHMgc28gaXQgc3RheXMgdmlzaWJsZSBpbiBzb3VyY2UuICovXG5jb25zdCBTRVAgPSAnfCc7XG5cbi8qKlxuICogTG9va3VwUmVnaXN0cnlTZXJ2aWNlIOKAlCB0aGUgY2FjaGUgaW4gZnJvbnQgb2YgY29uc3VtZXItcmVnaXN0ZXJlZCBtYXN0ZXIgbGlzdHMuXG4gKlxuICogVGhyZWUgbGF5ZXJzLCBkZWxpYmVyYXRlbHkgdGhlIHNhbWUgc2hhcGUgYXMgYEVudGl0eVJlZmVyZW5jZVNlcnZpY2VgLCBiZWNhdXNlIHRoZSBwcm9ibGVtIGlzXG4gKiB0aGUgc2FtZTogb25lIGxpc3QgaXMgdHlwaWNhbGx5IHVzZWQgYnkgbWFueSBmaWVsZHMgYWNyb3NzIG1hbnkgZW50aXRpZXMuXG4gKiAgMS4gKipvcHRpb25zKiog4oCUIHJlc29sdmVkIGBEcm9wZG93bk9wdGlvbltdYCBwZXIgKGxpc3QgbmFtZSwgbGFuZykuXG4gKiAgMi4gKippbi1mbGlnaHQqKiDigJQgdGhlIHBlbmRpbmcgUHJvbWlzZSwgc28gTiBmaWVsZHMgb24gb25lIGxpc3QgdHJpZ2dlciBvbmUgbG9hZCwgbm90IE4uXG4gKiAgMy4gKipsYWJlbHMqKiDigJQgc3luY2hyb25vdXMgdmFsdWUg4oaSIHRleHQgKHBhcml0eSBwbGFuIMKnNi4yKS4gVGhpcyBpcyBub3QgYSBuaWNldHk6IHNpbmNlXG4gKiAgICAgYHZpZXdNb2RlYCBkZWZhdWx0cyB0byB0cnVlIGEgcmVjb3JkIG9wZW5zIHJlYWQtb25seSwgc28gcmVuZGVyaW5nIGEgc3RvcmVkIHZhbHVlIGFzXG4gKiAgICAgdGV4dCBpcyB0aGUgKmZpcnN0KiB0aGluZyBhIGBsaXN0TmFtZWAgZmllbGQgaGFzIHRvIGRvLiBBbiBhc3luYy1vbmx5IHJlZ2lzdHJ5IHdvdWxkXG4gKiAgICAgcGFpbnQgdGhlIHJhdyBzdG9yZWQgdmFsdWUgYW5kIHRoZW4gZmxpcCwgb24gZXZlcnkgcmVjb3JkIG9wZW4uXG4gKlxuICogQSBmYWlsZWQgbG9hZCByZWplY3RzIGFuZCBjYWNoZXMgbm90aGluZywgc28gb25lIHRyYW5zaWVudCBlcnJvciBkb2VzIG5vdCBzZXJ2ZSBhbiBlbXB0eVxuICogbGlzdCBmb3JldmVyIOKAlCB0aGUgc2FtZSBmaXggbWFkZSBmb3IgZW50aXR5IHJlZmVyZW5jZXMgaW4gcGhhc2UgNS5cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBMb29rdXBSZWdpc3RyeVNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2lzdHJ5ID1cbiAgICBpbmplY3QoTE9PS1VQX1JFR0lTVFJZLCB7IG9wdGlvbmFsOiB0cnVlIH0pID8/IG5ldyBNYXA8c3RyaW5nLCBMb29rdXBMaXN0U291cmNlPigpO1xuXG4gIC8qKiBgbGlzdE5hbWV8bGFuZ2AgLT4gcmVzb2x2ZWQgb3B0aW9ucy4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zID0gbmV3IE1hcDxzdHJpbmcsIERyb3Bkb3duT3B0aW9uW10+KCk7XG4gIC8qKiBgbGlzdE5hbWV8bGFuZ2AgLT4gbm9ybWFsaXNlZCB2YWx1ZXMsIHNvIGEgY29uc3VtZXIgY2FuIHJlYWNoIGBjb2RlYCAvIGBpc1N5c3RlbURlZmluZWRgLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHZhbHVlcyA9IG5ldyBNYXA8c3RyaW5nLCBMb29rdXBMaXN0VmFsdWVbXT4oKTtcbiAgLyoqIExvYWRzIGluIHByb2dyZXNzLCBrZXllZCBhcyBhYm92ZS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBpbkZsaWdodCA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPERyb3Bkb3duT3B0aW9uW10+PigpO1xuICAvKiogYGxpc3ROYW1lfGxhbmd8dGV4dGAgLT4gZGlzcGxheSB0ZXh0LCBmb3IgdGhlIHN5bmNocm9ub3VzIHJlYWQtb25seSBwYXRoLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGxhYmVscyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgaGFzKGxpc3ROYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZWdpc3RyeS5oYXMobGlzdE5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIGEgbmFtZWQgbGlzdCwgZnJvbSBjYWNoZSB3aGVuIHByZXNlbnQuXG4gICAqIENvbmN1cnJlbnQgY2FsbGVycyB3aXRoIHRoZSBzYW1lIGtleSBzaGFyZSBvbmUgbG9hZC5cbiAgICovXG4gIGFzeW5jIGxvYWQobGlzdE5hbWU6IHN0cmluZywgbGFuZyA9ICdlbicpOiBQcm9taXNlPERyb3Bkb3duT3B0aW9uW10+IHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmNhY2hlS2V5KGxpc3ROYW1lLCBsYW5nKTtcblxuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMub3B0aW9ucy5nZXQoa2V5KTtcbiAgICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkO1xuXG4gICAgY29uc3QgcGVuZGluZyA9IHRoaXMuaW5GbGlnaHQuZ2V0KGtleSk7XG4gICAgaWYgKHBlbmRpbmcpIHJldHVybiBwZW5kaW5nO1xuXG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5yZWdpc3RyeS5nZXQobGlzdE5hbWUpO1xuICAgIGlmIChzb3VyY2UgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFtdO1xuXG4gICAgY29uc3QgbG9hZCA9IHRoaXMuaW52b2tlKHNvdXJjZSwgbGFuZykudGhlbihyYXcgPT4ge1xuICAgICAgY29uc3QgdmFsdWVzID0gbm9ybWFsaXplTG9va3VwVmFsdWVzKHJhdyk7XG4gICAgICBjb25zdCBvcHRpb25zID0gbG9va3VwVmFsdWVzVG9PcHRpb25zKHZhbHVlcyk7XG4gICAgICB0aGlzLnZhbHVlcy5zZXQoa2V5LCB2YWx1ZXMpO1xuICAgICAgdGhpcy5vcHRpb25zLnNldChrZXksIG9wdGlvbnMpO1xuICAgICAgdGhpcy5yZW1lbWJlckxhYmVscyhsaXN0TmFtZSwgbGFuZywgb3B0aW9ucyk7XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9KTtcblxuICAgIC8vIE9ubHkgdGhlIGAudGhlbmAgYWJvdmUgd3JpdGVzIHRvIHRoZSBjYWNoZSwgYW5kIGEgcmVqZWN0aW9uIHNraXBzIGl0OiB0aGUgY2FsbGVyIHN0aWxsXG4gICAgLy8gZ2V0cyBhbiBlbXB0eSBsaXN0LCBidXQgdGhlIG5leHQgY2FsbCByZXRyaWVzIGluc3RlYWQgb2YgcmVhZGluZyBhIHBvaXNvbmVkIGVudHJ5LlxuICAgIGNvbnN0IGd1YXJkZWQgPSBsb2FkXG4gICAgICAuY2F0Y2goKCkgPT4gW10gYXMgRHJvcGRvd25PcHRpb25bXSlcbiAgICAgIC5maW5hbGx5KCgpID0+IHRoaXMuaW5GbGlnaHQuZGVsZXRlKGtleSkpO1xuXG4gICAgdGhpcy5pbkZsaWdodC5zZXQoa2V5LCBndWFyZGVkKTtcbiAgICByZXR1cm4gZ3VhcmRlZDtcbiAgfVxuXG4gIC8qKiBDYWNoZWQgb3B0aW9ucyB3aXRob3V0IHRyaWdnZXJpbmcgYSBsb2FkLiBgdW5kZWZpbmVkYCB3aGVuIG5vdCBsb2FkZWQuICovXG4gIHBlZWsobGlzdE5hbWU6IHN0cmluZywgbGFuZyA9ICdlbicpOiBEcm9wZG93bk9wdGlvbltdIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmdldCh0aGlzLmNhY2hlS2V5KGxpc3ROYW1lLCBsYW5nKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FjaGVkIGxpc3QgdmFsdWVzLCBjYXJyeWluZyBgX2lkYCwgYGNvZGVgLCBgaXNTeXN0ZW1EZWZpbmVkYCBhbmQgYGZyb21gLlxuICAgKiBUaGUgbGlicmFyeSBuZXZlciByZWFkcyB0aG9zZTsgdGhpcyBpcyB0aGUgc2VhbSBmb3IgYSBjb25zdW1lciB0aGF0IG5lZWRzIHRoZW0uXG4gICAqL1xuICB2YWx1ZXNGb3IobGlzdE5hbWU6IHN0cmluZywgbGFuZyA9ICdlbicpOiBMb29rdXBMaXN0VmFsdWVbXSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVzLmdldCh0aGlzLmNhY2hlS2V5KGxpc3ROYW1lLCBsYW5nKSk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheSB0ZXh0IGZvciBhIHN0b3JlZCB2YWx1ZSwgc3luY2hyb25vdXNseS4gYHVuZGVmaW5lZGAgd2hlbiB0aGUgbGlzdCBoYXMgbm90IGxvYWRlZFxuICAgKiBvciBob2xkcyBubyBtYXRjaGluZyB2YWx1ZSDigJQgdGhlIGNhbGxlciBrZWVwcyBpdHMgb3duIGZhbGxiYWNrLCB3aGljaCBpcyB0aGUgc3RvcmVkIHRleHQuXG4gICAqXG4gICAqIEV2ZXJ5IGxhbmd1YWdlIG9mIGFuIG9wdGlvbiBpcyBpbmRleGVkLCBzbyBhIHJlY29yZCBzYXZlZCB1bmRlciBvbmUgbGFuZ3VhZ2UgcmVuZGVycyBpblxuICAgKiBhbm90aGVyOiBhIHZhbHVlIHN0b3JlZCBhcyBgJ0FrdGl2J2AgcmVzb2x2ZXMgdG8gYCdBY3RpdmUnYCB1bmRlciBgbGFuZzogJ2VuJ2AuXG4gICAqL1xuICBsYWJlbEZvcihsaXN0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCB2YWx1ZTogdW5rbm93biwgbGFuZyA9ICdlbicpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghbGlzdE5hbWUgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgZm9yIChjb25zdCB0ZXh0IG9mIHRoaXMuY2FuZGlkYXRlVGV4dHModmFsdWUsIGxhbmcpKSB7XG4gICAgICBjb25zdCBoaXQgPSB0aGlzLmxhYmVscy5nZXQodGhpcy5sYWJlbEtleShsaXN0TmFtZSwgbGFuZywgdGV4dCkpO1xuICAgICAgaWYgKGhpdCkgcmV0dXJuIGhpdDtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIOKUgOKUgOKUgCBGaWVsZC1sZXZlbCByZXNvbHV0aW9uIOKAlCBpbmxpbmUgb3B0aW9ucyB3aW4sIGVsc2UgYGxpc3ROYW1lYCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogVHJ1ZSB3aGVuIHRoaXMgZmllbGQncyBvcHRpb25zIGhhdmUgdG8gY29tZSBmcm9tIHRoZSByZWdpc3RyeS4gKi9cbiAgbmVlZHNSZXNvbHZlKGZpZWxkOiBOZXN0ZWRGaWVsZENvbmZpZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIWZpZWxkPy5saXN0TmFtZSAmJiAhZmllbGQub3B0aW9ucz8ubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBvcHRpb25zIHRvIHJlbmRlciByaWdodCBub3csIHdpdGhvdXQgYXdhaXRpbmc6IGlubGluZSBvcHRpb25zLCBlbHNlIHdoYXRldmVyIHRoZVxuICAgKiByZWdpc3RyeSBhbHJlYWR5IGhvbGRzLiBFbXB0eSBvbiBhIGNvbGQgbWlzcyDigJQgcGFpciB3aXRoIGByZXNvbHZlT3B0aW9uc2AuXG4gICAqL1xuICBvcHRpb25zRm9yKGZpZWxkOiBOZXN0ZWRGaWVsZENvbmZpZyB8IHVuZGVmaW5lZCwgbGFuZyA9ICdlbicpOiBEcm9wZG93bk9wdGlvbltdIHtcbiAgICBpZiAoIWZpZWxkKSByZXR1cm4gW107XG4gICAgaWYgKGZpZWxkLm9wdGlvbnM/Lmxlbmd0aCkgcmV0dXJuIGZpZWxkLm9wdGlvbnM7XG4gICAgaWYgKCFmaWVsZC5saXN0TmFtZSkgcmV0dXJuIFtdO1xuICAgIHJldHVybiB0aGlzLnBlZWsoZmllbGQubGlzdE5hbWUsIGxhbmcpID8/IFtdO1xuICB9XG5cbiAgLyoqIFRoZSBvcHRpb25zIGZvciBhIGZpZWxkLCBsb2FkaW5nIHRoZSBuYW1lZCBsaXN0IGlmIG5lZWRlZC4gKi9cbiAgcmVzb2x2ZU9wdGlvbnMoZmllbGQ6IE5lc3RlZEZpZWxkQ29uZmlnIHwgdW5kZWZpbmVkLCBsYW5nID0gJ2VuJyk6IFByb21pc2U8RHJvcGRvd25PcHRpb25bXT4ge1xuICAgIGlmICghdGhpcy5uZWVkc1Jlc29sdmUoZmllbGQpKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMub3B0aW9uc0ZvcihmaWVsZCwgbGFuZykpO1xuICAgIHJldHVybiB0aGlzLmxvYWQoZmllbGQhLmxpc3ROYW1lISwgbGFuZyk7XG4gIH1cblxuICAvKiogRHJvcCBldmVyeXRoaW5nIGNhY2hlZCBmb3Igb25lIGxpc3QsIGxlYXZpbmcgb3RoZXIgbGlzdHMgaW50YWN0LiAqL1xuICBpbnZhbGlkYXRlKGxpc3ROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBwcmVmaXggPSBgJHtsaXN0TmFtZX0ke1NFUH1gO1xuICAgIGZvciAoY29uc3QgbWFwIG9mIFt0aGlzLm9wdGlvbnMsIHRoaXMudmFsdWVzLCB0aGlzLmluRmxpZ2h0XSkge1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgWy4uLm1hcC5rZXlzKCldKSB7XG4gICAgICAgIGlmIChrZXkuc3RhcnRzV2l0aChwcmVmaXgpKSBtYXAuZGVsZXRlKGtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IG9mIFsuLi50aGlzLmxhYmVscy5rZXlzKCldKSB7XG4gICAgICBpZiAoa2V5LnN0YXJ0c1dpdGgocHJlZml4KSkgdGhpcy5sYWJlbHMuZGVsZXRlKGtleSk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5vcHRpb25zLmNsZWFyKCk7XG4gICAgdGhpcy52YWx1ZXMuY2xlYXIoKTtcbiAgICB0aGlzLmluRmxpZ2h0LmNsZWFyKCk7XG4gICAgdGhpcy5sYWJlbHMuY2xlYXIoKTtcbiAgfVxuXG4gIC8vIOKUgOKUgOKUgCBJbnRlcm5hbHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgcHJpdmF0ZSBjYWNoZUtleShsaXN0TmFtZTogc3RyaW5nLCBsYW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBbbGlzdE5hbWUsIGxhbmddLmpvaW4oU0VQKTtcbiAgfVxuXG4gIHByaXZhdGUgbGFiZWxLZXkobGlzdE5hbWU6IHN0cmluZywgbGFuZzogc3RyaW5nLCB0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBbbGlzdE5hbWUsIGxhbmcsIHRleHRdLmpvaW4oU0VQKTtcbiAgfVxuXG4gIC8qKiBJbmRleCBhbiBvcHRpb24gdW5kZXIgZXZlcnkgbGFuZ3VhZ2UgaXQgY2Fycmllcywgc28gYW55IHN0b3JlZCBzcGVsbGluZyBmaW5kcyBpdC4gKi9cbiAgcHJpdmF0ZSByZW1lbWJlckxhYmVscyhsaXN0TmFtZTogc3RyaW5nLCBsYW5nOiBzdHJpbmcsIG9wdGlvbnM6IERyb3Bkb3duT3B0aW9uW10pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICBjb25zdCBkaXNwbGF5ID0gcmVzb2x2ZUxhYmVsKG9wdGlvbiwgbGFuZyk7XG4gICAgICBpZiAoIWRpc3BsYXkpIGNvbnRpbnVlO1xuICAgICAgZm9yIChjb25zdCB0ZXh0IG9mIE9iamVjdC52YWx1ZXMob3B0aW9uKSkge1xuICAgICAgICBpZiAodHlwZW9mIHRleHQgPT09ICdzdHJpbmcnICYmIHRleHQgIT09ICcnKSB7XG4gICAgICAgICAgdGhpcy5sYWJlbHMuc2V0KHRoaXMubGFiZWxLZXkobGlzdE5hbWUsIGxhbmcsIHRleHQpLCBkaXNwbGF5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBUaGUgdGV4dHMgYSBzdG9yZWQgdmFsdWUgY291bGQgaGF2ZSBiZWVuIGluZGV4ZWQgdW5kZXIuICovXG4gIHByaXZhdGUgY2FuZGlkYXRlVGV4dHModmFsdWU6IHVua25vd24sIGxhbmc6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3QgdGV4dHMgPSBPYmplY3QudmFsdWVzKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5maWx0ZXIoXG4gICAgICAgICh2KTogdiBpcyBzdHJpbmcgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIHYgIT09ICcnLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZUxhYmVsKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIGxhbmcpO1xuICAgICAgcmV0dXJuIHJlc29sdmVkID8gW3Jlc29sdmVkLCAuLi50ZXh0c10gOiB0ZXh0cztcbiAgICB9XG4gICAgcmV0dXJuIFtTdHJpbmcodmFsdWUpXTtcbiAgfVxuXG4gIC8vIOKUgOKUgOKUgCBTb3VyY2UgY29lcmNpb24gKHZhbHVlcyB8IGxvYWRlciwgYXJyYXkgfCBQcm9taXNlIHwgT2JzZXJ2YWJsZSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgcHJpdmF0ZSBpbnZva2Uoc291cmNlOiBMb29rdXBMaXN0U291cmNlLCBsYW5nOiBzdHJpbmcpOiBQcm9taXNlPFJhd0xvb2t1cExpc3RWYWx1ZVtdPiB7XG4gICAgbGV0IHJlc3VsdDogTG9va3VwTGlzdFJlc3VsdDtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gdHlwZW9mIHNvdXJjZSA9PT0gJ2Z1bmN0aW9uJyA/IChzb3VyY2UgYXMgTG9va3VwTGlzdExvYWRlcikoeyBsYW5nIH0pIDogc291cmNlO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gUmVqZWN0IHJhdGhlciB0aGFuIHJlc29sdmUgZW1wdHk6IGBsb2FkYCBtdXN0IGJlIGFibGUgdG8gdGVsbCBmYWlsdXJlIGZyb20gYW4gZW1wdHlcbiAgICAgIC8vIGxpc3QsIG9yIGl0IHdvdWxkIGNhY2hlIHRoZSBmYWlsdXJlLlxuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRvUHJvbWlzZShyZXN1bHQpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b1Byb21pc2UocmVzdWx0OiBMb29rdXBMaXN0UmVzdWx0KTogUHJvbWlzZTxSYXdMb29rdXBMaXN0VmFsdWVbXT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzdWx0KTtcbiAgICBpZiAodGhpcy5pc1N1YnNjcmliYWJsZShyZXN1bHQpKSB7XG4gICAgICAvLyBGaXJzdCBlbWlzc2lvbiB3aW5zLCBzbyBhIHN0cmVhbSB0aGF0IHN0YXlzIG9wZW4gc3RpbGwgcmVzb2x2ZXMgdGhlIGxvYWQuXG4gICAgICByZXR1cm4gbmV3IFByb21pc2U8UmF3TG9va3VwTGlzdFZhbHVlW10+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgbGV0IHNldHRsZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3Qgc2V0dGxlID0gKGZuOiAoKSA9PiB2b2lkKSA9PiB7XG4gICAgICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgICBmbigpO1xuICAgICAgICB9O1xuICAgICAgICByZXN1bHQuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiB2YWx1ZSA9PiBzZXR0bGUoKCkgPT4gcmVzb2x2ZSh2YWx1ZSA/PyBbXSkpLFxuICAgICAgICAgIGVycm9yOiBlcnIgPT4gc2V0dGxlKCgpID0+IHJlamVjdChlcnIpKSxcbiAgICAgICAgICAvLyBDb21wbGV0aW5nIHdpdGhvdXQgZW1pdHRpbmcgaXMgYSBsZWdpdGltYXRlIGVtcHR5IGxpc3QsIGFuZCBpcyBjYWNoZWQuXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHNldHRsZSgoKSA9PiByZXNvbHZlKFtdKSksXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzdWx0IGFzIFByb21pc2U8UmF3TG9va3VwTGlzdFZhbHVlW10+KTtcbiAgfVxuXG4gIHByaXZhdGUgaXNTdWJzY3JpYmFibGUodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBTdWJzY3JpYmFibGU8UmF3TG9va3VwTGlzdFZhbHVlW10+IHtcbiAgICByZXR1cm4gKFxuICAgICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICAgIHR5cGVvZiAodmFsdWUgYXMgU3Vic2NyaWJhYmxlPFJhd0xvb2t1cExpc3RWYWx1ZVtdPikuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nXG4gICAgKTtcbiAgfVxufVxuXG4vKiogQSBjaG9pY2UgZmllbGQgY29tcG9uZW50LCBhcyBmYXIgYXMgb3B0aW9uIHJlc29sdXRpb24gaXMgY29uY2VybmVkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaG9pY2VPcHRpb25Ib3N0IHtcbiAgcmVhZG9ubHkgZmllbGQ6IE5lc3RlZEZpZWxkQ29uZmlnIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBsYW5ndWFnZTogc3RyaW5nO1xuICByZWFkb25seSBvcHRpb25zOiBXcml0YWJsZVNpZ25hbDxEcm9wZG93bk9wdGlvbltdPjtcbn1cblxuY29uc3QgaG9zdExhc3RDb25maWcgPSBuZXcgV2Vha01hcDxDaG9pY2VPcHRpb25Ib3N0LCB7IGZpZWxkPzogTmVzdGVkRmllbGRDb25maWc7IGxhbmc/OiBzdHJpbmcgfT4oKTtcblxuLyoqXG4gKiBQb2ludCBhIGNob2ljZSBjb21wb25lbnQncyBgb3B0aW9uc2Agc2lnbmFsIGF0IHRoZSByaWdodCBzb3VyY2UgKHBhcml0eSBwbGFuIMKnNi4zKS5cbiAqXG4gKiBDYWxsZWQgZnJvbSB0aGUgYGZpZWxkYCAvIGBsYW5ndWFnZWAgaW5wdXQgc2V0dGVycyBvZiBgZHJvcGRvd25gLCBgcmFkaW9gIGFuZCBgbXVsdGlTZWxlY3RgIOKAlFxuICogdGhlIHdpcmluZyBpcyB0aGVpcnMsIHRoZSBkZWNpc2lvbiBpcyB0aGUgc2VydmljZSdzLCB3aGljaCBpcyB3aGF0IGtlZXBzIHRoZSBmaWVsZFxuICogZml2ZS1pbnB1dCBjb250cmFjdCBpbnRhY3Q6IG9wdGlvbnMgYXJlIG5ldmVyIHB1c2hlZCBpbiBhcyBhIHNpeHRoIGlucHV0LlxuICpcbiAqIFNldHRlcnMgcmF0aGVyIHRoYW4gYG5nT25DaGFuZ2VzYCBvbiBwdXJwb3NlLiBgbmdPbkNoYW5nZXNgIG9ubHkgZmlyZXMgZm9yIGlucHV0cyBBbmd1bGFyXG4gKiBpdHNlbGYgc2V0cywgc28gYSBjb21wb25lbnQgd2hvc2UgYGZpZWxkYCBpcyBhc3NpZ25lZCBkaXJlY3RseSDigJQgd2hpY2ggdGhlIGZpZWxkIHNwZWNzIGRvLFxuICogYW5kIGFueSBjb25zdW1lciBob2xkaW5nIGEgYENvbXBvbmVudFJlZmAgbWF5IGRvIOKAlCB3b3VsZCByZW5kZXIgbm8gb3B0aW9ucyBhdCBhbGwuXG4gKlxuICogUGFpbnRzIHN5bmNocm9ub3VzbHkgZmlyc3QgKGlubGluZSBvcHRpb25zLCBvciBhIHdhcm0gbGlzdCksIHRoZW4gZmlsbHMgaW4gd2hlbiBhIGNvbGQgbGlzdFxuICogbGFuZHMuIFRoZSBsYXRlIHJlc3VsdCBpcyBkcm9wcGVkIGlmIHRoZSBmaWVsZCBvciBsYW5ndWFnZSBjaGFuZ2VkIHdoaWxlIGl0IHdhcyBpbiBmbGlnaHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoQ2hvaWNlT3B0aW9ucyhob3N0OiBDaG9pY2VPcHRpb25Ib3N0LCBsb29rdXBzOiBMb29rdXBSZWdpc3RyeVNlcnZpY2UpOiB2b2lkIHtcbiAgY29uc3QgbGFzdCA9IGhvc3RMYXN0Q29uZmlnLmdldChob3N0KTtcbiAgaWYgKGxhc3QgJiYgbGFzdC5maWVsZCA9PT0gaG9zdC5maWVsZCAmJiBsYXN0LmxhbmcgPT09IGhvc3QubGFuZ3VhZ2UpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaG9zdExhc3RDb25maWcuc2V0KGhvc3QsIHsgZmllbGQ6IGhvc3QuZmllbGQsIGxhbmc6IGhvc3QubGFuZ3VhZ2UgfSk7XG5cbiAgaG9zdC5vcHRpb25zLnNldChsb29rdXBzLm9wdGlvbnNGb3IoaG9zdC5maWVsZCwgaG9zdC5sYW5ndWFnZSkpO1xuICBpZiAoIWxvb2t1cHMubmVlZHNSZXNvbHZlKGhvc3QuZmllbGQpKSByZXR1cm47XG5cbiAgY29uc3QgbGlzdE5hbWUgPSBob3N0LmZpZWxkPy5saXN0TmFtZTtcbiAgY29uc3QgbGFuZyA9IGhvc3QubGFuZ3VhZ2U7XG4gIHZvaWQgbG9va3Vwcy5yZXNvbHZlT3B0aW9ucyhob3N0LmZpZWxkLCBob3N0Lmxhbmd1YWdlKS50aGVuKG9wdGlvbnMgPT4ge1xuICAgIGlmIChob3N0LmZpZWxkPy5saXN0TmFtZSA9PT0gbGlzdE5hbWUgJiYgaG9zdC5sYW5ndWFnZSA9PT0gbGFuZykgaG9zdC5vcHRpb25zLnNldChvcHRpb25zKTtcbiAgfSk7XG59XG4iXX0=
@@ -0,0 +1,56 @@
1
+ import { Injectable, inject } from '@angular/core';
2
+ import { VALIDATION_MESSAGES } from '../tokens/injection-tokens';
3
+ import * as i0 from "@angular/core";
4
+ /** The built-in English messages. Every key here can be overridden individually. */
5
+ export const DEFAULT_VALIDATION_MESSAGES = {
6
+ required: 'This field is required.',
7
+ requiredSelection: 'Please select an option.',
8
+ email: 'Please enter a valid email address.',
9
+ pattern: 'Invalid format.',
10
+ minlength: (_lang, err) => `Minimum ${err?.requiredLength} characters required.`,
11
+ maxlength: (_lang, err) => `Maximum ${err?.requiredLength} characters allowed.`,
12
+ min: (_lang, err) => `Value must be at least ${err?.min}.`,
13
+ max: (_lang, err) => `Value must not exceed ${err?.max}.`,
14
+ invalid: 'Invalid value.',
15
+ invalidNumber: 'Invalid number.',
16
+ invalidSelection: 'Invalid selection.',
17
+ };
18
+ export class ValidationMessagesService {
19
+ overrides = inject(VALIDATION_MESSAGES, { optional: true }) ?? {};
20
+ /**
21
+ * The message for the first error present, in the order the caller lists.
22
+ *
23
+ * Order is the caller's because it is field-specific: a dropdown wants
24
+ * `requiredSelection` where a text input wants `required`, and the first match wins so the
25
+ * most specific message is the one shown.
26
+ */
27
+ resolve(errors, language, order, fallbackKey = 'invalid') {
28
+ if (!errors)
29
+ return '';
30
+ for (const entry of order) {
31
+ // A tuple maps an Angular error key to a different message key: a dropdown raises the
32
+ // standard `required` error but reads better as "Please select an option", and both
33
+ // messages stay independently overridable.
34
+ const [errorKey, messageKey] = typeof entry === 'string' ? [entry, entry] : entry;
35
+ // `errors[errorKey]` is usually an object of detail, but `required` is simply `true`.
36
+ if (errors[errorKey] === undefined)
37
+ continue;
38
+ return this.messageFor(messageKey, language, errors[errorKey]);
39
+ }
40
+ return this.messageFor(fallbackKey, language, null);
41
+ }
42
+ /** One message by key, honouring an override before the default. */
43
+ messageFor(key, language, error) {
44
+ const message = this.overrides[key] ?? DEFAULT_VALIDATION_MESSAGES[key];
45
+ if (message === undefined)
46
+ return '';
47
+ return typeof message === 'function' ? message(language, error) : message;
48
+ }
49
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ValidationMessagesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
50
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ValidationMessagesService, providedIn: 'root' });
51
+ }
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ValidationMessagesService, decorators: [{
53
+ type: Injectable,
54
+ args: [{ providedIn: 'root' }]
55
+ }] });
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1tZXNzYWdlcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy92YWxpZGF0aW9uLW1lc3NhZ2VzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBMkJqRSxvRkFBb0Y7QUFDcEYsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQXNDO0lBQzVFLFFBQVEsRUFBRSx5QkFBeUI7SUFDbkMsaUJBQWlCLEVBQUUsMEJBQTBCO0lBQzdDLEtBQUssRUFBRSxxQ0FBcUM7SUFDNUMsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxXQUFXLEdBQUcsRUFBRSxjQUFjLHVCQUF1QjtJQUNoRixTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxXQUFXLEdBQUcsRUFBRSxjQUFjLHNCQUFzQjtJQUMvRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQywwQkFBMEIsR0FBRyxFQUFFLEdBQUcsR0FBRztJQUMxRCxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyx5QkFBeUIsR0FBRyxFQUFFLEdBQUcsR0FBRztJQUN6RCxPQUFPLEVBQUUsZ0JBQWdCO0lBQ3pCLGFBQWEsRUFBRSxpQkFBaUI7SUFDaEMsZ0JBQWdCLEVBQUUsb0JBQW9CO0NBQ3ZDLENBQUM7QUFHRixNQUFNLE9BQU8seUJBQXlCO0lBQ25CLFNBQVMsR0FBRyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFbkY7Ozs7OztPQU1HO0lBQ0gsT0FBTyxDQUNMLE1BQTJDLEVBQzNDLFFBQWdCLEVBQ2hCLEtBQTRFLEVBQzVFLFdBQVcsR0FBRyxTQUFTO1FBRXZCLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFFdkIsS0FBSyxNQUFNLEtBQUssSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUMxQixzRkFBc0Y7WUFDdEYsb0ZBQW9GO1lBQ3BGLDJDQUEyQztZQUMzQyxNQUFNLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxHQUFHLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUNsRixzRkFBc0Y7WUFDdEYsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssU0FBUztnQkFBRSxTQUFTO1lBQzdDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsb0VBQW9FO0lBQ3BFLFVBQVUsQ0FBQyxHQUFXLEVBQUUsUUFBZ0IsRUFBRSxLQUFjO1FBQ3RELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksMkJBQTJCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEUsSUFBSSxPQUFPLEtBQUssU0FBUztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3JDLE9BQU8sT0FBTyxPQUFPLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDNUUsQ0FBQzt3R0FuQ1UseUJBQXlCOzRHQUF6Qix5QkFBeUIsY0FEWixNQUFNOzs0RkFDbkIseUJBQXlCO2tCQURyQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVkFMSURBVElPTl9NRVNTQUdFUyB9IGZyb20gJy4uL3Rva2Vucy9pbmplY3Rpb24tdG9rZW5zJztcblxuLyoqXG4gKiBSZXNvbHZlcyBhbiBBbmd1bGFyIGBWYWxpZGF0aW9uRXJyb3JzYCBvYmplY3QgdG8gdGhlIG1lc3NhZ2Ugc2hvd24gdW5kZXIgYSBmaWVsZC5cbiAqXG4gKiBUaGVzZSBzdHJpbmdzIHVzZWQgdG8gYmUgaGFyZGNvZGVkIEVuZ2xpc2ggbGl0ZXJhbHMgaW5zaWRlIGVhY2ggZmllbGQgY29tcG9uZW50LCBzbyBhXG4gKiBHZXJtYW4gZm9ybSBtZWFudCByZS1pbXBsZW1lbnRpbmcgZXZlcnkgZmllbGQgdHlwZSDigJQgdGhlIGxhYmVscyBob25vdXJlZCBgbGFuZ3VhZ2VgIHdoaWxlXG4gKiB0aGUgZXJyb3JzIHVuZGVybmVhdGggdGhlbSBkaWQgbm90LlxuICpcbiAqIEEgbWVzc2FnZSBpcyBhIHBsYWluIHN0cmluZywgb3IgYSBmdW5jdGlvbiB3aGVuIGl0IG5lZWRzIHRoZSBlcnJvcidzIG93biBkZXRhaWxcbiAqIChgbWlubGVuZ3RoLnJlcXVpcmVkTGVuZ3RoYCwgYG1pbi5taW5gLCBhbmQgc28gb24pLiBUaGUgYWN0aXZlIGBsYW5ndWFnZWAgaXMgcGFzc2VkXG4gKiB0aHJvdWdoLCBzbyBvbmUgcmVnaXN0cmF0aW9uIGNhbiBzZXJ2ZSBldmVyeSBsb2NhbGU6XG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogcHJvdmlkZU5neER5bmFtaWNFbnRpdHkoe1xuICogICB2YWxpZGF0aW9uTWVzc2FnZXM6IHtcbiAqICAgICByZXF1aXJlZDogbGFuZyA9PiAobGFuZyA9PT0gJ2RlJyA/ICdQZmxpY2h0ZmVsZC4nIDogJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQuJyksXG4gKiAgICAgbWlubGVuZ3RoOiAobGFuZywgZXJyKSA9PiBgTWluZGVzdGVucyAke2VyclsncmVxdWlyZWRMZW5ndGgnXX0gWmVpY2hlbi5gLFxuICogICB9LFxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBVbnJlZ2lzdGVyZWQga2V5cyBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHRzIGJlbG93LCBzbyBvdmVycmlkaW5nIG9uZSBtZXNzYWdlIGRvZXMgbm90XG4gKiBtZWFuIHN1cHBseWluZyB0aGVtIGFsbC5cbiAqL1xuZXhwb3J0IHR5cGUgVmFsaWRhdGlvbk1lc3NhZ2UgPSBzdHJpbmcgfCAoKGxhbmd1YWdlOiBzdHJpbmcsIGVycm9yOiBhbnkpID0+IHN0cmluZyk7XG5cbi8qKiBUaGUgYnVpbHQtaW4gRW5nbGlzaCBtZXNzYWdlcy4gRXZlcnkga2V5IGhlcmUgY2FuIGJlIG92ZXJyaWRkZW4gaW5kaXZpZHVhbGx5LiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfVkFMSURBVElPTl9NRVNTQUdFUzogUmVjb3JkPHN0cmluZywgVmFsaWRhdGlvbk1lc3NhZ2U+ID0ge1xuICByZXF1aXJlZDogJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQuJyxcbiAgcmVxdWlyZWRTZWxlY3Rpb246ICdQbGVhc2Ugc2VsZWN0IGFuIG9wdGlvbi4nLFxuICBlbWFpbDogJ1BsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3MuJyxcbiAgcGF0dGVybjogJ0ludmFsaWQgZm9ybWF0LicsXG4gIG1pbmxlbmd0aDogKF9sYW5nLCBlcnIpID0+IGBNaW5pbXVtICR7ZXJyPy5yZXF1aXJlZExlbmd0aH0gY2hhcmFjdGVycyByZXF1aXJlZC5gLFxuICBtYXhsZW5ndGg6IChfbGFuZywgZXJyKSA9PiBgTWF4aW11bSAke2Vycj8ucmVxdWlyZWRMZW5ndGh9IGNoYXJhY3RlcnMgYWxsb3dlZC5gLFxuICBtaW46IChfbGFuZywgZXJyKSA9PiBgVmFsdWUgbXVzdCBiZSBhdCBsZWFzdCAke2Vycj8ubWlufS5gLFxuICBtYXg6IChfbGFuZywgZXJyKSA9PiBgVmFsdWUgbXVzdCBub3QgZXhjZWVkICR7ZXJyPy5tYXh9LmAsXG4gIGludmFsaWQ6ICdJbnZhbGlkIHZhbHVlLicsXG4gIGludmFsaWROdW1iZXI6ICdJbnZhbGlkIG51bWJlci4nLFxuICBpbnZhbGlkU2VsZWN0aW9uOiAnSW52YWxpZCBzZWxlY3Rpb24uJyxcbn07XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvbk1lc3NhZ2VzU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3ZlcnJpZGVzID0gaW5qZWN0KFZBTElEQVRJT05fTUVTU0FHRVMsIHsgb3B0aW9uYWw6IHRydWUgfSkgPz8ge307XG5cbiAgLyoqXG4gICAqIFRoZSBtZXNzYWdlIGZvciB0aGUgZmlyc3QgZXJyb3IgcHJlc2VudCwgaW4gdGhlIG9yZGVyIHRoZSBjYWxsZXIgbGlzdHMuXG4gICAqXG4gICAqIE9yZGVyIGlzIHRoZSBjYWxsZXIncyBiZWNhdXNlIGl0IGlzIGZpZWxkLXNwZWNpZmljOiBhIGRyb3Bkb3duIHdhbnRzXG4gICAqIGByZXF1aXJlZFNlbGVjdGlvbmAgd2hlcmUgYSB0ZXh0IGlucHV0IHdhbnRzIGByZXF1aXJlZGAsIGFuZCB0aGUgZmlyc3QgbWF0Y2ggd2lucyBzbyB0aGVcbiAgICogbW9zdCBzcGVjaWZpYyBtZXNzYWdlIGlzIHRoZSBvbmUgc2hvd24uXG4gICAqL1xuICByZXNvbHZlKFxuICAgIGVycm9yczogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgfCB1bmRlZmluZWQsXG4gICAgbGFuZ3VhZ2U6IHN0cmluZyxcbiAgICBvcmRlcjogcmVhZG9ubHkgKHN0cmluZyB8IHJlYWRvbmx5IFtlcnJvcktleTogc3RyaW5nLCBtZXNzYWdlS2V5OiBzdHJpbmddKVtdLFxuICAgIGZhbGxiYWNrS2V5ID0gJ2ludmFsaWQnLFxuICApOiBzdHJpbmcge1xuICAgIGlmICghZXJyb3JzKSByZXR1cm4gJyc7XG5cbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIG9yZGVyKSB7XG4gICAgICAvLyBBIHR1cGxlIG1hcHMgYW4gQW5ndWxhciBlcnJvciBrZXkgdG8gYSBkaWZmZXJlbnQgbWVzc2FnZSBrZXk6IGEgZHJvcGRvd24gcmFpc2VzIHRoZVxuICAgICAgLy8gc3RhbmRhcmQgYHJlcXVpcmVkYCBlcnJvciBidXQgcmVhZHMgYmV0dGVyIGFzIFwiUGxlYXNlIHNlbGVjdCBhbiBvcHRpb25cIiwgYW5kIGJvdGhcbiAgICAgIC8vIG1lc3NhZ2VzIHN0YXkgaW5kZXBlbmRlbnRseSBvdmVycmlkYWJsZS5cbiAgICAgIGNvbnN0IFtlcnJvcktleSwgbWVzc2FnZUtleV0gPSB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gW2VudHJ5LCBlbnRyeV0gOiBlbnRyeTtcbiAgICAgIC8vIGBlcnJvcnNbZXJyb3JLZXldYCBpcyB1c3VhbGx5IGFuIG9iamVjdCBvZiBkZXRhaWwsIGJ1dCBgcmVxdWlyZWRgIGlzIHNpbXBseSBgdHJ1ZWAuXG4gICAgICBpZiAoZXJyb3JzW2Vycm9yS2V5XSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcbiAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VGb3IobWVzc2FnZUtleSwgbGFuZ3VhZ2UsIGVycm9yc1tlcnJvcktleV0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlRm9yKGZhbGxiYWNrS2V5LCBsYW5ndWFnZSwgbnVsbCk7XG4gIH1cblxuICAvKiogT25lIG1lc3NhZ2UgYnkga2V5LCBob25vdXJpbmcgYW4gb3ZlcnJpZGUgYmVmb3JlIHRoZSBkZWZhdWx0LiAqL1xuICBtZXNzYWdlRm9yKGtleTogc3RyaW5nLCBsYW5ndWFnZTogc3RyaW5nLCBlcnJvcjogdW5rbm93bik6IHN0cmluZyB7XG4gICAgY29uc3QgbWVzc2FnZSA9IHRoaXMub3ZlcnJpZGVzW2tleV0gPz8gREVGQVVMVF9WQUxJREFUSU9OX01FU1NBR0VTW2tleV07XG4gICAgaWYgKG1lc3NhZ2UgPT09IHVuZGVmaW5lZCkgcmV0dXJuICcnO1xuICAgIHJldHVybiB0eXBlb2YgbWVzc2FnZSA9PT0gJ2Z1bmN0aW9uJyA/IG1lc3NhZ2UobGFuZ3VhZ2UsIGVycm9yKSA6IG1lc3NhZ2U7XG4gIH1cbn1cbiJdfQ==
@@ -1,12 +1,13 @@
1
1
  import { Injectable, inject } from '@angular/core';
2
2
  import { Validators } from '@angular/forms';
3
- import { VALIDATOR_REGISTRY } from '../tokens/injection-tokens';
3
+ import { ASYNC_VALIDATOR_REGISTRY, VALIDATOR_REGISTRY } from '../tokens/injection-tokens';
4
4
  import * as i0 from "@angular/core";
5
5
  /**
6
6
  * ValidatorRegistryService — resolves validator configs / key strings to Angular ValidatorFns.
7
7
  */
8
8
  export class ValidatorRegistryService {
9
9
  consumerRegistry = inject(VALIDATOR_REGISTRY, { optional: true }) ?? new Map();
10
+ asyncRegistry = inject(ASYNC_VALIDATOR_REGISTRY, { optional: true }) ?? new Map();
10
11
  /**
11
12
  * Resolve a validator key string to a ValidatorFn.
12
13
  * Supports parameterized built-ins like 'min:0', 'maxLength:255'.
@@ -67,6 +68,27 @@ export class ValidatorRegistryService {
67
68
  }
68
69
  return fnList;
69
70
  }
71
+ /**
72
+ * Resolve the async validators a field names, in `validators.customAsync`.
73
+ *
74
+ * Async validators are deliberately a separate registry and a separate config key: Angular
75
+ * attaches them through `setAsyncValidators`, runs them only once the synchronous ones
76
+ * pass, and holds the control in `pending` until they settle. Mixing them into the
77
+ * synchronous list would silently never run them.
78
+ *
79
+ * An unknown name is skipped rather than throwing, matching the synchronous behaviour.
80
+ */
81
+ resolveAsyncFromConfig(config) {
82
+ if (!config || Array.isArray(config))
83
+ return [];
84
+ const out = [];
85
+ for (const key of config.customAsync ?? []) {
86
+ const fn = this.asyncRegistry.get(key);
87
+ if (fn)
88
+ out.push(fn);
89
+ }
90
+ return out;
91
+ }
70
92
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ValidatorRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
71
93
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ValidatorRegistryService, providedIn: 'root' });
72
94
  }
@@ -74,4 +96,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
74
96
  type: Injectable,
75
97
  args: [{ providedIn: 'root' }]
76
98
  }] });
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yLXJlZ2lzdHJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL3ZhbGlkYXRvci1yZWdpc3RyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBZSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFFaEU7O0dBRUc7QUFFSCxNQUFNLE9BQU8sd0JBQXdCO0lBQ2xCLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7SUFFaEc7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLFlBQW9CO1FBQzFCLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQzVDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBRUQsSUFBSSxZQUFZLEtBQUssVUFBVTtZQUFFLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUM1RCxJQUFJLFlBQVksS0FBSyxPQUFPO1lBQUUsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDO1FBRXRELE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QyxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFaEMsSUFBSSxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU8sVUFB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RUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB0eXBlIHsgRmllbGRWYWxpZGF0b3JzIH0gZnJvbSAnQGR5bmFtaWMtZW50aXR5L2NvcmUnO1xuaW1wb3J0IHsgVkFMSURBVE9SX1JFR0lTVFJZIH0gZnJvbSAnLi4vdG9rZW5zL2luamVjdGlvbi10b2tlbnMnO1xuXG4vKipcbiAqIFZhbGlkYXRvclJlZ2lzdHJ5U2VydmljZSDigJQgcmVzb2x2ZXMgdmFsaWRhdG9yIGNvbmZpZ3MgLyBrZXkgc3RyaW5ncyB0byBBbmd1bGFyIFZhbGlkYXRvckZucy5cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBWYWxpZGF0b3JSZWdpc3RyeVNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbnN1bWVyUmVnaXN0cnkgPSBpbmplY3QoVkFMSURBVE9SX1JFR0lTVFJZLCB7IG9wdGlvbmFsOiB0cnVlIH0pID8/IG5ldyBNYXAoKTtcblxuICAvKipcbiAgICogUmVzb2x2ZSBhIHZhbGlkYXRvciBrZXkgc3RyaW5nIHRvIGEgVmFsaWRhdG9yRm4uXG4gICAqIFN1cHBvcnRzIHBhcmFtZXRlcml6ZWQgYnVpbHQtaW5zIGxpa2UgJ21pbjowJywgJ21heExlbmd0aDoyNTUnLlxuICAgKi9cbiAgcmVzb2x2ZSh2YWxpZGF0b3JLZXk6IHN0cmluZyk6IFZhbGlkYXRvckZuIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuY29uc3VtZXJSZWdpc3RyeS5oYXModmFsaWRhdG9yS2V5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29uc3VtZXJSZWdpc3RyeS5nZXQodmFsaWRhdG9yS2V5KTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdG9yS2V5ID09PSAncmVxdWlyZWQnKSByZXR1cm4gVmFsaWRhdG9ycy5yZXF1aXJlZDtcbiAgICBpZiAodmFsaWRhdG9yS2V5ID09PSAnZW1haWwnKSByZXR1cm4gVmFsaWRhdG9ycy5lbWFpbDtcblxuICAgIGNvbnN0IFtuYW1lLCBwYXJhbV0gPSB2YWxpZGF0b3JLZXkuc3BsaXQoJzonKTtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlRmxvYXQocGFyYW0pO1xuXG4gICAgaWYgKG5hbWUgPT09ICdtaW4nICYmICFpc05hTih2YWx1ZSkpIHJldHVybiBWYWxpZGF0b3JzLm1pbih2YWx1ZSk7XG4gICAgaWYgKG5hbWUgPT09ICdtYXgnICYmICFpc05hTih2YWx1ZSkpIHJldHVybiBWYWxpZGF0b3JzLm1heCh2YWx1ZSk7XG4gICAgaWYgKG5hbWUgPT09ICdtaW5MZW5ndGgnICYmICFpc05hTih2YWx1ZSkpIHJldHVybiBWYWxpZGF0b3JzLm1pbkxlbmd0aCh2YWx1ZSk7XG4gICAgaWYgKG5hbWUgPT09ICdtYXhMZW5ndGgnICYmICFpc05hTih2YWx1ZSkpIHJldHVybiBWYWxpZGF0b3JzLm1heExlbmd0aCh2YWx1ZSk7XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKiBSZXNvbHZlIG11bHRpcGxlIHZhbGlkYXRvciBrZXlzIGludG8gYSBWYWxpZGF0b3JGbltdICovXG4gIHJlc29sdmVBbGwodmFsaWRhdG9yS2V5czogc3RyaW5nW10gPSBbXSk6IFZhbGlkYXRvckZuW10ge1xuICAgIHJldHVybiB2YWxpZGF0b3JLZXlzLm1hcChrID0+IHRoaXMucmVzb2x2ZShrKSkuZmlsdGVyKCh2KTogdiBpcyBWYWxpZGF0b3JGbiA9PiB2ICE9PSBudWxsKTtcbiAgfVxuXG4gIC8qKiBSZXNvbHZlIGEgRmllbGRWYWxpZGF0b3JzIG9iamVjdCBvciBzdHJpbmdbXSBpbnRvIFZhbGlkYXRvckZuW10gKi9cbiAgcmVzb2x2ZUZyb21Db25maWcoY29uZmlnPzogRmllbGRWYWxpZGF0b3JzIHwgc3RyaW5nW10pOiBWYWxpZGF0b3JGbltdIHtcbiAgICBpZiAoIWNvbmZpZykgcmV0dXJuIFtdO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbmZpZykpIHJldHVybiB0aGlzLnJlc29sdmVBbGwoY29uZmlnKTtcblxuICAgIGNvbnN0IGZuTGlzdDogVmFsaWRhdG9yRm5bXSA9IFtdO1xuICAgIGlmIChjb25maWcucmVxdWlyZWQpIGZuTGlzdC5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgIGlmIChjb25maWcubWluICE9PSB1bmRlZmluZWQpIGZuTGlzdC5wdXNoKFZhbGlkYXRvcnMubWluKGNvbmZpZy5taW4pKTtcbiAgICBpZiAoY29uZmlnLm1heCAhPT0gdW5kZWZpbmVkKSBmbkxpc3QucHVzaChWYWxpZGF0b3JzLm1heChjb25maWcubWF4KSk7XG4gICAgaWYgKGNvbmZpZy5taW5MZW5ndGggIT09IHVuZGVmaW5lZCkgZm5MaXN0LnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgoY29uZmlnLm1pbkxlbmd0aCkpO1xuICAgIGlmIChjb25maWcubWF4TGVuZ3RoICE9PSB1bmRlZmluZWQpIGZuTGlzdC5wdXNoKFZhbGlkYXRvcnMubWF4TGVuZ3RoKGNvbmZpZy5tYXhMZW5ndGgpKTtcbiAgICBpZiAoY29uZmlnLnBhdHRlcm4pIGZuTGlzdC5wdXNoKFZhbGlkYXRvcnMucGF0dGVybihjb25maWcucGF0dGVybikpO1xuICAgIGlmIChjb25maWcuZW1haWwpIGZuTGlzdC5wdXNoKFZhbGlkYXRvcnMuZW1haWwpO1xuXG4gICAgLy8gTmFtZWQgdmFsaWRhdG9ycyBmcm9tIHRoZSBjb25zdW1lciByZWdpc3RyeS4gVGhpcyBicmFuY2ggcHJldmlvdXNseSBoYXJkY29kZWQgdGhlXG4gICAgLy8gYnVpbHQtaW5zIGFuZCBjb25zdWx0ZWQgdGhlIHJlZ2lzdHJ5IG9ubHkgZm9yIHRoZSBgc3RyaW5nW11gIGZvcm0gb2YgdGhpcyBjb25maWcsIHNvXG4gICAgLy8gYSB2YWxpZGF0b3IgdGhlIGNvbnN1bWVyIGhhZCByZWdpc3RlcmVkIGNvdWxkIG5vdCBiZSBuYW1lZCBmcm9tIGEgdHlwZWQgc2NoZW1hXG4gICAgLy8gd2l0aG91dCBjYXN0aW5nIGl0IHRvIGBhbnlgLlxuICAgIGZvciAoY29uc3Qga2V5IG9mIGNvbmZpZy5jdXN0b20gPz8gW10pIHtcbiAgICAgIGNvbnN0IGZuID0gdGhpcy5yZXNvbHZlKGtleSk7XG4gICAgICBpZiAoZm4pIGZuTGlzdC5wdXNoKGZuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm5MaXN0O1xuICB9XG59XG4iXX0=
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yLXJlZ2lzdHJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL3ZhbGlkYXRvci1yZWdpc3RyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBaUMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0UsT0FBTyxFQUFFLHdCQUF3QixFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBRTFGOztHQUVHO0FBRUgsTUFBTSxPQUFPLHdCQUF3QjtJQUNsQixnQkFBZ0IsR0FBRyxNQUFNLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQy9FLGFBQWEsR0FBRyxNQUFNLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRW5HOzs7T0FHRztJQUNILE9BQU8sQ0FBQyxZQUFvQjtRQUMxQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUM1QyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDakQsQ0FBQztRQUVELElBQUksWUFBWSxLQUFLLFVBQVU7WUFBRSxPQUFPLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDNUQsSUFBSSxZQUFZLEtBQUssT0FBTztZQUFFLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQztRQUV0RCxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUMsTUFB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QUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILHNCQUFzQixDQUFDLE1BQW1DO1FBQ3hELElBQUksQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUVoRCxNQUFNLEdBQUcsR0FBdUIsRUFBRSxDQUFDO1FBQ25DLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLFdBQVcsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUMzQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QyxJQUFJLEVBQUU7Z0JBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2QixDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO3dHQTdFVSx3QkFBd0I7NEdBQXhCLHdCQUF3QixjQURYLE1BQU07OzRGQUNuQix3QkFBd0I7a0JBRHBDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBc3luY1ZhbGlkYXRvckZuLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB0eXBlIHsgRmllbGRWYWxpZGF0b3JzIH0gZnJvbSAnQGR5bmFtaWMtZW50aXR5L2NvcmUnO1xuaW1wb3J0IHsgQVNZTkNfVkFMSURBVE9SX1JFR0lTVFJZLCBWQUxJREFUT1JfUkVHSVNUUlkgfSBmcm9tICcuLi90b2tlbnMvaW5qZWN0aW9uLXRva2Vucyc7XG5cbi8qKlxuICogVmFsaWRhdG9yUmVnaXN0cnlTZXJ2aWNlIOKAlCByZXNvbHZlcyB2YWxpZGF0b3IgY29uZmlncyAvIGtleSBzdHJpbmdzIHRvIEFuZ3VsYXIgVmFsaWRhdG9yRm5zLlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFZhbGlkYXRvclJlZ2lzdHJ5U2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uc3VtZXJSZWdpc3RyeSA9IGluamVjdChWQUxJREFUT1JfUkVHSVNUUlksIHsgb3B0aW9uYWw6IHRydWUgfSkgPz8gbmV3IE1hcCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IGFzeW5jUmVnaXN0cnkgPSBpbmplY3QoQVNZTkNfVkFMSURBVE9SX1JFR0lTVFJZLCB7IG9wdGlvbmFsOiB0cnVlIH0pID8/IG5ldyBNYXAoKTtcblxuICAvKipcbiAgICogUmVzb2x2ZSBhIHZhbGlkYXRvciBrZXkgc3RyaW5nIHRvIGEgVmFsaWRhdG9yRm4uXG4gICAqIFN1cHBvcnRzIHBhcmFtZXRlcml6ZWQgYnVpbHQtaW5zIGxpa2UgJ21pbjowJywgJ21heExlbmd0aDoyNTUnLlxuICAgKi9cbiAgcmVzb2x2ZSh2YWxpZGF0b3JLZXk6IHN0cmluZyk6IFZhbGlkYXRvckZuIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuY29uc3VtZXJSZWdpc3RyeS5oYXModmFsaWRhdG9yS2V5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29uc3VtZXJSZWdpc3RyeS5nZXQodmFsaWRhdG9yS2V5KTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdG9yS2V5ID09PSAncmVxdWlyZWQnKSByZXR1cm4gVmFsaWRhdG9ycy5yZXF1aXJlZDtcbiAgICBpZiAodmFsaWRhdG9yS2V5ID09PSAnZW1haWwnKSByZXR1cm4gVmFsaWRhdG9ycy5lbWFpbDtcblxuICAgIGNvbnN0IFtuYW1lLCBwYXJhbV0gPSB2YWxpZGF0b3JLZXkuc3BsaXQoJzonKTtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlRmxvYXQocGFyYW0pO1xuXG4gICAgaWYgKG5hbWUgPT09ICdtaW4nICYmICFpc05hTih2YWx1ZSkpIHJldHVybiBWYWxpZGF0b3JzLm1pbih2YWx1ZSk7XG4gICAgaWYgKG5hbWUgPT09ICdtYXgnICYmICFpc05hTih2YWx1ZSkpIHJldHVybiBWYWxpZGF0b3JzLm1heCh2YWx1ZSk7XG4gICAgaWYgKG5hbWUgPT09ICdtaW5MZW5ndGgnICYmICFpc05hTih2YWx1ZSkpIHJldHVybiBWYWxpZGF0b3JzLm1pbkxlbmd0aCh2YWx1ZSk7XG4gICAgaWYgKG5hbWUgPT09ICdtYXhMZW5ndGgnICYmICFpc05hTih2YWx1ZSkpIHJldHVybiBWYWxpZGF0b3JzLm1heExlbmd0aCh2YWx1ZSk7XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKiBSZXNvbHZlIG11bHRpcGxlIHZhbGlkYXRvciBrZXlzIGludG8gYSBWYWxpZGF0b3JGbltdICovXG4gIHJlc29sdmVBbGwodmFsaWRhdG9yS2V5czogc3RyaW5nW10gPSBbXSk6IFZhbGlkYXRvckZuW10ge1xuICAgIHJldHVybiB2YWxpZGF0b3JLZXlzLm1hcChrID0+IHRoaXMucmVzb2x2ZShrKSkuZmlsdGVyKCh2KTogdiBpcyBWYWxpZGF0b3JGbiA9PiB2ICE9PSBudWxsKTtcbiAgfVxuXG4gIC8qKiBSZXNvbHZlIGEgRmllbGRWYWxpZGF0b3JzIG9iamVjdCBvciBzdHJpbmdbXSBpbnRvIFZhbGlkYXRvckZuW10gKi9cbiAgcmVzb2x2ZUZyb21Db25maWcoY29uZmlnPzogRmllbGRWYWxpZGF0b3JzIHwgc3RyaW5nW10pOiBWYWxpZGF0b3JGbltdIHtcbiAgICBpZiAoIWNvbmZpZykgcmV0dXJuIFtdO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbmZpZykpIHJldHVybiB0aGlzLnJlc29sdmVBbGwoY29uZmlnKTtcblxuICAgIGNvbnN0IGZuTGlzdDogVmFsaWRhdG9yRm5bXSA9IFtdO1xuICAgIGlmIChjb25maWcucmVxdWlyZWQpIGZuTGlzdC5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgIGlmIChjb25maWcubWluICE9PSB1bmRlZmluZWQpIGZuTGlzdC5wdXNoKFZhbGlkYXRvcnMubWluKGNvbmZpZy5taW4pKTtcbiAgICBpZiAoY29uZmlnLm1heCAhPT0gdW5kZWZpbmVkKSBmbkxpc3QucHVzaChWYWxpZGF0b3JzLm1heChjb25maWcubWF4KSk7XG4gICAgaWYgKGNvbmZpZy5taW5MZW5ndGggIT09IHVuZGVmaW5lZCkgZm5MaXN0LnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgoY29uZmlnLm1pbkxlbmd0aCkpO1xuICAgIGlmIChjb25maWcubWF4TGVuZ3RoICE9PSB1bmRlZmluZWQpIGZuTGlzdC5wdXNoKFZhbGlkYXRvcnMubWF4TGVuZ3RoKGNvbmZpZy5tYXhMZW5ndGgpKTtcbiAgICBpZiAoY29uZmlnLnBhdHRlcm4pIGZuTGlzdC5wdXNoKFZhbGlkYXRvcnMucGF0dGVybihjb25maWcucGF0dGVybikpO1xuICAgIGlmIChjb25maWcuZW1haWwpIGZuTGlzdC5wdXNoKFZhbGlkYXRvcnMuZW1haWwpO1xuXG4gICAgLy8gTmFtZWQgdmFsaWRhdG9ycyBmcm9tIHRoZSBjb25zdW1lciByZWdpc3RyeS4gVGhpcyBicmFuY2ggcHJldmlvdXNseSBoYXJkY29kZWQgdGhlXG4gICAgLy8gYnVpbHQtaW5zIGFuZCBjb25zdWx0ZWQgdGhlIHJlZ2lzdHJ5IG9ubHkgZm9yIHRoZSBgc3RyaW5nW11gIGZvcm0gb2YgdGhpcyBjb25maWcsIHNvXG4gICAgLy8gYSB2YWxpZGF0b3IgdGhlIGNvbnN1bWVyIGhhZCByZWdpc3RlcmVkIGNvdWxkIG5vdCBiZSBuYW1lZCBmcm9tIGEgdHlwZWQgc2NoZW1hXG4gICAgLy8gd2l0aG91dCBjYXN0aW5nIGl0IHRvIGBhbnlgLlxuICAgIGZvciAoY29uc3Qga2V5IG9mIGNvbmZpZy5jdXN0b20gPz8gW10pIHtcbiAgICAgIGNvbnN0IGZuID0gdGhpcy5yZXNvbHZlKGtleSk7XG4gICAgICBpZiAoZm4pIGZuTGlzdC5wdXNoKGZuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm5MaXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIGFzeW5jIHZhbGlkYXRvcnMgYSBmaWVsZCBuYW1lcywgaW4gYHZhbGlkYXRvcnMuY3VzdG9tQXN5bmNgLlxuICAgKlxuICAgKiBBc3luYyB2YWxpZGF0b3JzIGFyZSBkZWxpYmVyYXRlbHkgYSBzZXBhcmF0ZSByZWdpc3RyeSBhbmQgYSBzZXBhcmF0ZSBjb25maWcga2V5OiBBbmd1bGFyXG4gICAqIGF0dGFjaGVzIHRoZW0gdGhyb3VnaCBgc2V0QXN5bmNWYWxpZGF0b3JzYCwgcnVucyB0aGVtIG9ubHkgb25jZSB0aGUgc3luY2hyb25vdXMgb25lc1xuICAgKiBwYXNzLCBhbmQgaG9sZHMgdGhlIGNvbnRyb2wgaW4gYHBlbmRpbmdgIHVudGlsIHRoZXkgc2V0dGxlLiBNaXhpbmcgdGhlbSBpbnRvIHRoZVxuICAgKiBzeW5jaHJvbm91cyBsaXN0IHdvdWxkIHNpbGVudGx5IG5ldmVyIHJ1biB0aGVtLlxuICAgKlxuICAgKiBBbiB1bmtub3duIG5hbWUgaXMgc2tpcHBlZCByYXRoZXIgdGhhbiB0aHJvd2luZywgbWF0Y2hpbmcgdGhlIHN5bmNocm9ub3VzIGJlaGF2aW91ci5cbiAgICovXG4gIHJlc29sdmVBc3luY0Zyb21Db25maWcoY29uZmlnPzogRmllbGRWYWxpZGF0b3JzIHwgc3RyaW5nW10pOiBBc3luY1ZhbGlkYXRvckZuW10ge1xuICAgIGlmICghY29uZmlnIHx8IEFycmF5LmlzQXJyYXkoY29uZmlnKSkgcmV0dXJuIFtdO1xuXG4gICAgY29uc3Qgb3V0OiBBc3luY1ZhbGlkYXRvckZuW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBjb25maWcuY3VzdG9tQXN5bmMgPz8gW10pIHtcbiAgICAgIGNvbnN0IGZuID0gdGhpcy5hc3luY1JlZ2lzdHJ5LmdldChrZXkpO1xuICAgICAgaWYgKGZuKSBvdXQucHVzaChmbik7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cbn1cbiJdfQ==
@@ -1,6 +1,6 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  import { InMemoryEntityRefCacheStore } from '../services/entity-ref-cache';
3
- /** Roles that see XXXXXXXXX for masked fields (ADR-003) */
3
+ /** Roles that see XXXXXXXXX for masked fields. Presentational only — enforce authz server-side. */
4
4
  export const MASKED_ROLES = new InjectionToken('MASKED_ROLES');
5
5
  /**
6
6
  * Consumer **overrides**: fieldType string → Angular component class.
@@ -57,8 +57,25 @@ export const LOOKUP_REGISTRY = new InjectionToken('LOOKUP_REGISTRY');
57
57
  * })
58
58
  */
59
59
  export const RECORD_MIGRATIONS = new InjectionToken('RECORD_MIGRATIONS');
60
+ /**
61
+ * Overrides for the messages shown under an invalid field, keyed by Angular error key
62
+ * (`required`, `minlength`, `pattern`, …) plus a few field-specific keys.
63
+ *
64
+ * The built-in messages are English literals. Registering here is what makes a non-English
65
+ * form possible without re-implementing every field component; unlisted keys keep their
66
+ * default, so overriding one does not mean supplying them all.
67
+ */
68
+ export const VALIDATION_MESSAGES = new InjectionToken('VALIDATION_MESSAGES');
60
69
  /** Registry: validator key → ValidatorFn */
61
70
  export const VALIDATOR_REGISTRY = new InjectionToken('VALIDATOR_REGISTRY');
71
+ /**
72
+ * Registry: validator key → AsyncValidatorFn.
73
+ *
74
+ * Kept separate from VALIDATOR_REGISTRY because Angular applies the two differently: an async
75
+ * validator runs only once the synchronous ones pass, and puts the control into `pending`
76
+ * while it does. Name them from a schema with `validators: { customAsync: ['uniqueEmail'] }`.
77
+ */
78
+ export const ASYNC_VALIDATOR_REGISTRY = new InjectionToken('ASYNC_VALIDATOR_REGISTRY');
62
79
  /** Registry: hook key → async (data, context) => data */
63
80
  export const HOOK_REGISTRY = new InjectionToken('HOOK_REGISTRY');
64
81
  /**
@@ -96,10 +113,6 @@ export const UPLOAD_HANDLER = new InjectionToken('UPLOAD_HANDLER');
96
113
  * { provide: ENTITY_REF_CACHE_STORE, useClass: SessionStorageRefCache }
97
114
  */
98
115
  export const ENTITY_REF_CACHE_STORE = new InjectionToken('ENTITY_REF_CACHE_STORE', { providedIn: 'root', factory: () => new InMemoryEntityRefCacheStore() });
99
- /**
100
- * Consumer-provided predicate function to check whether user roles can edit system default tabs or fields.
101
- * Defaults to allowing edits if not provided.
102
- */
103
116
  /**
104
117
  * Consumer-provided predicate function to check whether user roles can edit system default tabs or fields.
105
118
  * Defaults to allowing edits if not provided.
@@ -110,4 +123,4 @@ export const SYSTEM_DEFAULT_CAN_EDIT = new InjectionToken('SYSTEM_DEFAULT_CAN_ED
110
123
  * Enables cross-entity field referencing (`isReferenced`, `referencedEntityKey`, `referencedFieldId`, `hasDrift`).
111
124
  */
112
125
  export const CONFIG_SOURCE = new InjectionToken('CONFIG_SOURCE');
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5qZWN0aW9uLXRva2Vucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdG9rZW5zL2luamVjdGlvbi10b2tlbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVMvQyxPQUFPLEVBQUUsMkJBQTJCLEVBQTRCLE1BQU0sOEJBQThCLENBQUM7QUFFckcsMkRBQTJEO0FBQzNELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxJQUFJLGNBQWMsQ0FBVyxjQUFjLENBQUMsQ0FBQztBQUV6RTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLGNBQWMsQ0FBeUIscUJBQXFCLENBQUMsQ0FBQztBQUVyRzs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxJQUFJLGNBQWMsQ0FBOEIsaUJBQWlCLENBQUMsQ0FBQztBQUVsRzs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLGNBQWMsQ0FDbkQscUJBQXFCLENBQ3RCLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsSUFBSSxjQUFjLENBQWdDLGlCQUFpQixDQUFDLENBQUM7QUFFcEc7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLGNBQWMsQ0FBb0IsbUJBQW1CLENBQUMsQ0FBQztBQUU1Riw0Q0FBNEM7QUFDNUMsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxjQUFjLENBQW1CLG9CQUFvQixDQUFDLENBQUM7QUFVN0YseURBQXlEO0FBQ3pELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxJQUFJLGNBQWMsQ0FBc0IsZUFBZSxDQUFDLENBQUM7QUFFdEY7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxjQUFjLENBQ3ZELHlCQUF5QixDQUMxQixDQUFDO0FBRUY7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQW9CLGdCQUFnQixDQUFDLENBQUM7QUFFdEY7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxjQUFjLENBQ3RELHdCQUF3QixFQUN4QixFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksMkJBQTJCLEVBQUUsRUFBRSxDQUN6RSxDQUFDO0FBRUY7OztHQUdHO0FBQ0g7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxjQUFjLENBQ3ZELHlCQUF5QixDQUMxQixDQUFDO0FBTUY7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLElBQUksY0FBYyxDQUFzQixlQUFlLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHtcbiAgQ29tbW9uTW9kdWxlRW50cnksXG4gIEVudGl0eVJlZmVyZW5jZUxvYWRlcixcbiAgRmlsZVVwbG9hZEhhbmRsZXIsXG4gIExvb2t1cExpc3RTb3VyY2UsXG4gIFJlY29yZE1pZ3JhdGlvbixcbn0gZnJvbSAnQGR5bmFtaWMtZW50aXR5L2NvcmUnO1xuaW1wb3J0IHsgSW5NZW1vcnlFbnRpdHlSZWZDYWNoZVN0b3JlLCB0eXBlIEVudGl0eVJlZkNhY2hlU3RvcmUgfSBmcm9tICcuLi9zZXJ2aWNlcy9lbnRpdHktcmVmLWNhY2hlJztcblxuLyoqIFJvbGVzIHRoYXQgc2VlIFhYWFhYWFhYWCBmb3IgbWFza2VkIGZpZWxkcyAoQURSLTAwMykgKi9cbmV4cG9ydCBjb25zdCBNQVNLRURfUk9MRVMgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nW10+KCdNQVNLRURfUk9MRVMnKTtcblxuLyoqXG4gKiBDb25zdW1lciAqKm92ZXJyaWRlcyoqOiBmaWVsZFR5cGUgc3RyaW5nIOKGkiBBbmd1bGFyIGNvbXBvbmVudCBjbGFzcy5cbiAqIEhpZ2hlc3QgcHJpb3JpdHkg4oCUIGJlYXRzIGFueXRoaW5nIHJlZ2lzdGVyZWQgdGhyb3VnaCBgcHJvdmlkZUZpZWxkVHlwZXMoKWAuXG4gKi9cbmV4cG9ydCBjb25zdCBGSUVMRF9UWVBFX1JFR0lTVFJZID0gbmV3IEluamVjdGlvblRva2VuPE1hcDxzdHJpbmcsIFR5cGU8YW55Pj4+KCdGSUVMRF9UWVBFX1JFR0lTVFJZJyk7XG5cbi8qKlxuICogTXVsdGktcHJvdmlkZXIgb2YgZmllbGQtdHlwZSBzZXRzLCBjb250cmlidXRlZCBieSBgcHJvdmlkZUZpZWxkVHlwZXMoKWAgL1xuICogYHByb3ZpZGVCdWlsdEluRmllbGRUeXBlcygpYC4gTXVsdGkgc28gc2V2ZXJhbCBjYWxscyBjb21wb3NlIGluc3RlYWQgb2YgY2xvYmJlcmluZztcbiAqIGxhdGVyIHNldHMgd2luIG9uIGtleSBjb2xsaXNpb24uIFRoaXMgaXMgdGhlIHNlYW0gdGhhdCBrZWVwcyB1bnVzZWQgZmllbGQgY29tcG9uZW50c1xuICogb3V0IG9mIHRoZSBidW5kbGUg4oCUIG5vdGhpbmcgaXMgaW1wb3J0ZWQgdW50aWwgYSBzZXQgbmFtZXMgaXQuXG4gKi9cbmV4cG9ydCBjb25zdCBGSUVMRF9UWVBFX1NFVFMgPSBuZXcgSW5qZWN0aW9uVG9rZW48UmVjb3JkPHN0cmluZywgVHlwZTxhbnk+PltdPignRklFTERfVFlQRV9TRVRTJyk7XG5cbi8qKlxuICogUmVnaXN0cnk6IGVudGl0eSBrZXkg4oaSIG9wdGlvbiBsb2FkZXIuXG4gKlxuICogQSBsb2FkZXIgcmVjZWl2ZXMgYSBgUmVmZXJlbmNlTG9hZGVyQ29udGV4dGAgKGBwYXJlbnRWYWx1ZWAsIGBmaWx0ZXJzYCwgYGxhbmdgKSBhbmQgbWF5XG4gKiByZXR1cm4gYW4gYXJyYXksIGEgUHJvbWlzZSwgb3IgYW4gT2JzZXJ2YWJsZSBvZiBgUmVmZXJlbmNlT3B0aW9uW11gLiBgY3R4YCBpcyBvcHRpb25hbCxcbiAqIHNvIGEgemVyby1hcmcgbG9hZGVyIChgKCkgPT4gc3ZjLmxpc3QoKWApIGlzIHN0aWxsIGEgdmFsaWQgcmVnaXN0cmF0aW9uLlxuICovXG5leHBvcnQgY29uc3QgRU5USVRZX1JFRl9SRUdJU1RSWSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxNYXA8c3RyaW5nLCBFbnRpdHlSZWZlcmVuY2VMb2FkZXI+PihcbiAgJ0VOVElUWV9SRUZfUkVHSVNUUlknLFxuKTtcblxuLyoqXG4gKiBSZWdpc3RyeTogbGlzdCBuYW1lIOKGkiB0aGUgdmFsdWVzIG9mIGEgbmFtZWQgbWFzdGVyIGxpc3QgKGBmaWVsZC5saXN0TmFtZWApLlxuICpcbiAqIEEgc291cmNlIG1heSBiZSB0aGUgdmFsdWVzIHRoZW1zZWx2ZXMgKGFycmF5IC8gUHJvbWlzZSAvIE9ic2VydmFibGUpIG9yIGEgKipsb2FkZXIgZnVuY3Rpb24qKixcbiAqIHdoaWNoIGlzIHdoYXQgeW91IHdhbnQgZm9yIGFueXRoaW5nIGZldGNoZWQ6IGEgYmFyZSBQcm9taXNlIGlzIGNyZWF0ZWQgd2hlbiB0aGUgcHJvdmlkZXIgaXNcbiAqIGJ1aWx0LCBzbyBldmVyeSBsaXN0IHdvdWxkIGxvYWQgd2hldGhlciBvciBub3QgYSBmb3JtIHVzZXMgaXQuXG4gKlxuICogVmFsdWVzIGFyZSBub3JtYWxpc2VkIGJ5IGBub3JtYWxpemVMb29rdXBWYWx1ZXNgIOKAlCBiYXJlIHN0cmluZ3MgYW5kIGBMb2NhbGl6ZWRUZXh0YCBhcmVcbiAqIGFjY2VwdGVkIGFsb25nc2lkZSB0aGUgZnVsbCBgeyBjb2RlLCBuYW1lLCBzb3J0T3JkZXIgfWAgc2hhcGUuXG4gKlxuICogQGV4YW1wbGVcbiAqIHByb3ZpZGVOZ3hEeW5hbWljRW50aXR5KHtcbiAqICAgbG9va3Vwczoge1xuICogICAgIGVtcGxveWVlU3RhdHVzOiAoKSA9PiBsaXN0U2VydmljZS5nZXRCeU5hbWUoJ2VtcGxveWVlU3RhdHVzJyksXG4gKiAgICAgZ3JhZGVzOiBbJ0p1bmlvcicsICdTZW5pb3InXSxcbiAqICAgfSxcbiAqIH0pXG4gKi9cbmV4cG9ydCBjb25zdCBMT09LVVBfUkVHSVNUUlkgPSBuZXcgSW5qZWN0aW9uVG9rZW48TWFwPHN0cmluZywgTG9va3VwTGlzdFNvdXJjZT4+KCdMT09LVVBfUkVHSVNUUlknKTtcblxuLyoqXG4gKiBPcmRlcmVkIHN0ZXBzIHRoYXQgbW92ZSBhIHNhdmVkIHJlY29yZCBmb3J3YXJkIHdoZW4gYSBjb25maWcncyBgdmVyc2lvbmAgaW5jcmVhc2VzLlxuICpcbiAqIFdpdGhvdXQgdGhlc2UsIGBFbnRpdHlGb3JtQ29uZmlnLnZlcnNpb25gIGFuZCBgVmVyc2lvbmVkUmVjb3JkLl9jb25maWdWZXJzaW9uYCBhcmVcbiAqIGRlY2xhcmF0aW9ucyBub3RoaW5nIGFjdHMgb246IGEgc2NoZW1hIGNhbiBiZSBlZGl0ZWQgZnJlZWx5IHdoaWxlIHJlY29yZHMga2VlcCB0aGVpciBvbGRcbiAqIHNoYXBlLCBhbmQgbm90aGluZyByZWNvbmNpbGVzIHRoZSB0d28uIFJlZ2lzdGVyaW5nIG1pZ3JhdGlvbnMgbWFrZXMgdGhlIHZlcnNpb24gbnVtYmVyc1xuICogbWVhbiBzb21ldGhpbmcuXG4gKlxuICogQGV4YW1wbGVcbiAqIHByb3ZpZGVOZ3hEeW5hbWljRW50aXR5KHtcbiAqICAgbWlncmF0aW9uczogW1xuICogICAgIHsgZnJvbTogMSwgdG86IDIsIGRlc2NyaXB0aW9uOiAnc3BsaXQgbmFtZScsIG1pZ3JhdGU6IHIgPT4gKHsgLi4uciwgZmlyc3ROYW1lOiByWyduYW1lJ10gfSkgfSxcbiAqICAgXSxcbiAqIH0pXG4gKi9cbmV4cG9ydCBjb25zdCBSRUNPUkRfTUlHUkFUSU9OUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxSZWNvcmRNaWdyYXRpb25bXT4oJ1JFQ09SRF9NSUdSQVRJT05TJyk7XG5cbi8qKiBSZWdpc3RyeTogdmFsaWRhdG9yIGtleSDihpIgVmFsaWRhdG9yRm4gKi9cbmV4cG9ydCBjb25zdCBWQUxJREFUT1JfUkVHSVNUUlkgPSBuZXcgSW5qZWN0aW9uVG9rZW48TWFwPHN0cmluZywgYW55Pj4oJ1ZBTElEQVRPUl9SRUdJU1RSWScpO1xuXG4vKipcbiAqIEEgcmVnaXN0ZXJlZCBob29rOiByZWNlaXZlcyB0aGUgcGF5bG9hZCwgcmV0dXJucyBpdCAob3IgYSByZXBsYWNlbWVudCksIHN5bmMgb3IgYXN5bmMuXG4gKlxuICogU3BlbGxlZCBvdXQgcmF0aGVyIHRoYW4gdHlwZWQgYXMgYEZ1bmN0aW9uYCwgd2hpY2ggYWNjZXB0cyBjbGFzcyBkZWNsYXJhdGlvbnMgYW5kIGFueVxuICogYXJpdHkgYW5kIGdpdmVzIGEgY29uc3VtZXIgbm8gc2lnbmF0dXJlIHRvIHdyaXRlIGFnYWluc3QuXG4gKi9cbmV4cG9ydCB0eXBlIEhvb2tGbiA9IChkYXRhOiBhbnksIGNvbnRleHQ/OiB1bmtub3duKSA9PiB1bmtub3duIHwgUHJvbWlzZTx1bmtub3duPjtcblxuLyoqIFJlZ2lzdHJ5OiBob29rIGtleSDihpIgYXN5bmMgKGRhdGEsIGNvbnRleHQpID0+IGRhdGEgKi9cbmV4cG9ydCBjb25zdCBIT09LX1JFR0lTVFJZID0gbmV3IEluamVjdGlvblRva2VuPE1hcDxzdHJpbmcsIEhvb2tGbj4+KCdIT09LX1JFR0lTVFJZJyk7XG5cbi8qKlxuICogQ29uc3VtZXItcmVnaXN0ZXJlZCBsaXN0IG9mIGNvbW1vbiBtb2R1bGUgdGFicyAoZG9jdW1lbnRzLCBhdWRpdCwgdGFza3MsIGV0Yy4pLlxuICogVGhlIGxpYnJhcnkgc2hpcHMgbm8gYnVpbHQtaW4gaW1wbGVtZW50YXRpb25zLiBDb25zdW1lcnMgcHJvdmlkZSB0aGVpciBvd24gbGlzdFxuICogc28gdGhlIGJ1aWxkZXIncyBtb2R1bGUtcGlja2VyIGFuZCB0aGUgcmVuZGVyZXIncyB0YWIgc3dpdGNoZXIga25vdyB3aGF0J3MgYXZhaWxhYmxlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBwcm92aWRlcnM6IFtcbiAqICAge1xuICogICAgIHByb3ZpZGU6IENPTU1PTl9NT0RVTEVTX1JFR0lTVFJZLFxuICogICAgIHVzZVZhbHVlOiBbXG4gKiAgICAgICB7IGlkOiAnZG9jdW1lbnRzJywgbGFiZWw6IHsgZW46ICdEb2N1bWVudHMnIH0sIGNvbXBvbmVudDogJ2FwcC1kb2N1bWVudHMtdmlldycgfSxcbiAqICAgICAgIHsgaWQ6ICdhdWRpdCcsICAgICBsYWJlbDogeyBlbjogJ0F1ZGl0IExvZycgIH0sIGNvbXBvbmVudDogJ2FwcC1hdWRpdCcgfSxcbiAqICAgICBdIHNhdGlzZmllcyBDb21tb25Nb2R1bGVFbnRyeVtdXG4gKiAgIH1cbiAqIF1cbiAqL1xuZXhwb3J0IGNvbnN0IENPTU1PTl9NT0RVTEVTX1JFR0lTVFJZID0gbmV3IEluamVjdGlvblRva2VuPENvbW1vbk1vZHVsZUVudHJ5W10+KFxuICAnQ09NTU9OX01PRFVMRVNfUkVHSVNUUlknLFxuKTtcblxuLyoqXG4gKiBDb25zdW1lci1wcm92aWRlZCBmaWxlL2ltYWdlIHVwbG9hZCBoYW5kbGVyLlxuICogV2hlbiBzdXBwbGllZCwgaW1hZ2UtZmllbGQgYW5kIGZpbGUtZmllbGQgY2FsbCBpdCB0byBwZXJzaXN0IHRoZSBGaWxlIGFuZCByZWNlaXZlIGEgc3RhYmxlXG4gKiBVUkwgYmFjay4gV2l0aG91dCBpdCB0aGUgZmllbGQgc3RvcmVzIGB7IGZpbGUsIG5hbWUsIHNpemUsIG1pbWVUeXBlIH1gIGZvciB0aGUgY29uc3VtZXIgdG9cbiAqIHVwbG9hZCBvbiBzdWJtaXQuIE1heSByZXR1cm4gdGhlIHJlc3VsdCBkaXJlY3RseSwgYXMgYSBQcm9taXNlLCBvciBhcyBhbiBPYnNlcnZhYmxlLlxuICpcbiAqIEBleGFtcGxlXG4gKiB7IHByb3ZpZGU6IFVQTE9BRF9IQU5ETEVSLCB1c2VGYWN0b3J5OiAoKSA9PiAoZmlsZTogRmlsZSkgPT4gbXlVcGxvYWRTZXJ2aWNlLnVwbG9hZChmaWxlKSB9XG4gKi9cbmV4cG9ydCBjb25zdCBVUExPQURfSEFORExFUiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxGaWxlVXBsb2FkSGFuZGxlcj4oJ1VQTE9BRF9IQU5ETEVSJyk7XG5cbi8qKlxuICogQmFja2luZyBzdG9yZSBmb3IgdGhlIGVudGl0eS1yZWZlcmVuY2Ugb3B0aW9ucyBjYWNoZS4gRGVmYXVsdHMgdG8gaW4tbWVtb3J5LlxuICogUHJvdmlkZSB5b3VyIG93biB0byBtYWtlIHRoZSBjYWNoZSBvdXRsaXZlIGEgcGFnZSByZWZyZXNoLlxuICpcbiAqIEBleGFtcGxlXG4gKiB7IHByb3ZpZGU6IEVOVElUWV9SRUZfQ0FDSEVfU1RPUkUsIHVzZUNsYXNzOiBTZXNzaW9uU3RvcmFnZVJlZkNhY2hlIH1cbiAqL1xuZXhwb3J0IGNvbnN0IEVOVElUWV9SRUZfQ0FDSEVfU1RPUkUgPSBuZXcgSW5qZWN0aW9uVG9rZW48RW50aXR5UmVmQ2FjaGVTdG9yZT4oXG4gICdFTlRJVFlfUkVGX0NBQ0hFX1NUT1JFJyxcbiAgeyBwcm92aWRlZEluOiAncm9vdCcsIGZhY3Rvcnk6ICgpID0+IG5ldyBJbk1lbW9yeUVudGl0eVJlZkNhY2hlU3RvcmUoKSB9LFxuKTtcblxuLyoqXG4gKiBDb25zdW1lci1wcm92aWRlZCBwcmVkaWNhdGUgZnVuY3Rpb24gdG8gY2hlY2sgd2hldGhlciB1c2VyIHJvbGVzIGNhbiBlZGl0IHN5c3RlbSBkZWZhdWx0IHRhYnMgb3IgZmllbGRzLlxuICogRGVmYXVsdHMgdG8gYWxsb3dpbmcgZWRpdHMgaWYgbm90IHByb3ZpZGVkLlxuICovXG4vKipcbiAqIENvbnN1bWVyLXByb3ZpZGVkIHByZWRpY2F0ZSBmdW5jdGlvbiB0byBjaGVjayB3aGV0aGVyIHVzZXIgcm9sZXMgY2FuIGVkaXQgc3lzdGVtIGRlZmF1bHQgdGFicyBvciBmaWVsZHMuXG4gKiBEZWZhdWx0cyB0byBhbGxvd2luZyBlZGl0cyBpZiBub3QgcHJvdmlkZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBTWVNURU1fREVGQVVMVF9DQU5fRURJVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjwocm9sZXM6IHN0cmluZ1tdKSA9PiBib29sZWFuPihcbiAgJ1NZU1RFTV9ERUZBVUxUX0NBTl9FRElUJyxcbik7XG5cbmV4cG9ydCB0eXBlIENvbmZpZ1NvdXJjZUhhbmRsZXIgPSAoXG4gIGVudGl0eUtleTogc3RyaW5nLFxuKSA9PiBhbnk7XG5cbi8qKlxuICogUmVnaXN0cnkvUmVzb2x2ZXIgZm9yIHJlc29sdmluZyBhbiBFbnRpdHlGb3JtQ29uZmlnIGJ5IGVudGl0eSBrZXkgYWNyb3NzIGVudGl0aWVzIChQaGFzZSA4KS5cbiAqIEVuYWJsZXMgY3Jvc3MtZW50aXR5IGZpZWxkIHJlZmVyZW5jaW5nIChgaXNSZWZlcmVuY2VkYCwgYHJlZmVyZW5jZWRFbnRpdHlLZXlgLCBgcmVmZXJlbmNlZEZpZWxkSWRgLCBgaGFzRHJpZnRgKS5cbiAqL1xuZXhwb3J0IGNvbnN0IENPTkZJR19TT1VSQ0UgPSBuZXcgSW5qZWN0aW9uVG9rZW48Q29uZmlnU291cmNlSGFuZGxlcj4oJ0NPTkZJR19TT1VSQ0UnKTtcblxuXG4iXX0=
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5qZWN0aW9uLXRva2Vucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdG9rZW5zL2luamVjdGlvbi10b2tlbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVMvQyxPQUFPLEVBQUUsMkJBQTJCLEVBQTRCLE1BQU0sOEJBQThCLENBQUM7QUFFckcsbUdBQW1HO0FBQ25HLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxJQUFJLGNBQWMsQ0FBVyxjQUFjLENBQUMsQ0FBQztBQUV6RTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLGNBQWMsQ0FBeUIscUJBQXFCLENBQUMsQ0FBQztBQUVyRzs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxJQUFJLGNBQWMsQ0FBOEIsaUJBQWlCLENBQUMsQ0FBQztBQUVsRzs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLGNBQWMsQ0FDbkQscUJBQXFCLENBQ3RCLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsSUFBSSxjQUFjLENBQWdDLGlCQUFpQixDQUFDLENBQUM7QUFFcEc7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLGNBQWMsQ0FBb0IsbUJBQW1CLENBQUMsQ0FBQztBQUU1Rjs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxjQUFjLENBQXNCLHFCQUFxQixDQUFDLENBQUM7QUFFbEcsNENBQTRDO0FBQzVDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksY0FBYyxDQUFtQixvQkFBb0IsQ0FBQyxDQUFDO0FBRTdGOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLElBQUksY0FBYyxDQUN4RCwwQkFBMEIsQ0FDM0IsQ0FBQztBQVVGLHlEQUF5RDtBQUN6RCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxjQUFjLENBQXNCLGVBQWUsQ0FBQyxDQUFDO0FBRXRGOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLElBQUksY0FBYyxDQUN2RCx5QkFBeUIsQ0FDMUIsQ0FBQztBQUVGOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLElBQUksY0FBYyxDQUFvQixnQkFBZ0IsQ0FBQyxDQUFDO0FBRXRGOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLElBQUksY0FBYyxDQUN0RCx3QkFBd0IsRUFDeEIsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLDJCQUEyQixFQUFFLEVBQUUsQ0FDekUsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLElBQUksY0FBYyxDQUN2RCx5QkFBeUIsQ0FDMUIsQ0FBQztBQU1GOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxJQUFJLGNBQWMsQ0FBc0IsZUFBZSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7XG4gIENvbW1vbk1vZHVsZUVudHJ5LFxuICBFbnRpdHlSZWZlcmVuY2VMb2FkZXIsXG4gIEZpbGVVcGxvYWRIYW5kbGVyLFxuICBMb29rdXBMaXN0U291cmNlLFxuICBSZWNvcmRNaWdyYXRpb24sXG59IGZyb20gJ0BkeW5hbWljLWVudGl0eS9jb3JlJztcbmltcG9ydCB7IEluTWVtb3J5RW50aXR5UmVmQ2FjaGVTdG9yZSwgdHlwZSBFbnRpdHlSZWZDYWNoZVN0b3JlIH0gZnJvbSAnLi4vc2VydmljZXMvZW50aXR5LXJlZi1jYWNoZSc7XG5cbi8qKiBSb2xlcyB0aGF0IHNlZSBYWFhYWFhYWFggZm9yIG1hc2tlZCBmaWVsZHMuIFByZXNlbnRhdGlvbmFsIG9ubHkg4oCUIGVuZm9yY2UgYXV0aHogc2VydmVyLXNpZGUuICovXG5leHBvcnQgY29uc3QgTUFTS0VEX1JPTEVTID0gbmV3IEluamVjdGlvblRva2VuPHN0cmluZ1tdPignTUFTS0VEX1JPTEVTJyk7XG5cbi8qKlxuICogQ29uc3VtZXIgKipvdmVycmlkZXMqKjogZmllbGRUeXBlIHN0cmluZyDihpIgQW5ndWxhciBjb21wb25lbnQgY2xhc3MuXG4gKiBIaWdoZXN0IHByaW9yaXR5IOKAlCBiZWF0cyBhbnl0aGluZyByZWdpc3RlcmVkIHRocm91Z2ggYHByb3ZpZGVGaWVsZFR5cGVzKClgLlxuICovXG5leHBvcnQgY29uc3QgRklFTERfVFlQRV9SRUdJU1RSWSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxNYXA8c3RyaW5nLCBUeXBlPGFueT4+PignRklFTERfVFlQRV9SRUdJU1RSWScpO1xuXG4vKipcbiAqIE11bHRpLXByb3ZpZGVyIG9mIGZpZWxkLXR5cGUgc2V0cywgY29udHJpYnV0ZWQgYnkgYHByb3ZpZGVGaWVsZFR5cGVzKClgIC9cbiAqIGBwcm92aWRlQnVpbHRJbkZpZWxkVHlwZXMoKWAuIE11bHRpIHNvIHNldmVyYWwgY2FsbHMgY29tcG9zZSBpbnN0ZWFkIG9mIGNsb2JiZXJpbmc7XG4gKiBsYXRlciBzZXRzIHdpbiBvbiBrZXkgY29sbGlzaW9uLiBUaGlzIGlzIHRoZSBzZWFtIHRoYXQga2VlcHMgdW51c2VkIGZpZWxkIGNvbXBvbmVudHNcbiAqIG91dCBvZiB0aGUgYnVuZGxlIOKAlCBub3RoaW5nIGlzIGltcG9ydGVkIHVudGlsIGEgc2V0IG5hbWVzIGl0LlxuICovXG5leHBvcnQgY29uc3QgRklFTERfVFlQRV9TRVRTID0gbmV3IEluamVjdGlvblRva2VuPFJlY29yZDxzdHJpbmcsIFR5cGU8YW55Pj5bXT4oJ0ZJRUxEX1RZUEVfU0VUUycpO1xuXG4vKipcbiAqIFJlZ2lzdHJ5OiBlbnRpdHkga2V5IOKGkiBvcHRpb24gbG9hZGVyLlxuICpcbiAqIEEgbG9hZGVyIHJlY2VpdmVzIGEgYFJlZmVyZW5jZUxvYWRlckNvbnRleHRgIChgcGFyZW50VmFsdWVgLCBgZmlsdGVyc2AsIGBsYW5nYCkgYW5kIG1heVxuICogcmV0dXJuIGFuIGFycmF5LCBhIFByb21pc2UsIG9yIGFuIE9ic2VydmFibGUgb2YgYFJlZmVyZW5jZU9wdGlvbltdYC4gYGN0eGAgaXMgb3B0aW9uYWwsXG4gKiBzbyBhIHplcm8tYXJnIGxvYWRlciAoYCgpID0+IHN2Yy5saXN0KClgKSBpcyBzdGlsbCBhIHZhbGlkIHJlZ2lzdHJhdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IEVOVElUWV9SRUZfUkVHSVNUUlkgPSBuZXcgSW5qZWN0aW9uVG9rZW48TWFwPHN0cmluZywgRW50aXR5UmVmZXJlbmNlTG9hZGVyPj4oXG4gICdFTlRJVFlfUkVGX1JFR0lTVFJZJyxcbik7XG5cbi8qKlxuICogUmVnaXN0cnk6IGxpc3QgbmFtZSDihpIgdGhlIHZhbHVlcyBvZiBhIG5hbWVkIG1hc3RlciBsaXN0IChgZmllbGQubGlzdE5hbWVgKS5cbiAqXG4gKiBBIHNvdXJjZSBtYXkgYmUgdGhlIHZhbHVlcyB0aGVtc2VsdmVzIChhcnJheSAvIFByb21pc2UgLyBPYnNlcnZhYmxlKSBvciBhICoqbG9hZGVyIGZ1bmN0aW9uKiosXG4gKiB3aGljaCBpcyB3aGF0IHlvdSB3YW50IGZvciBhbnl0aGluZyBmZXRjaGVkOiBhIGJhcmUgUHJvbWlzZSBpcyBjcmVhdGVkIHdoZW4gdGhlIHByb3ZpZGVyIGlzXG4gKiBidWlsdCwgc28gZXZlcnkgbGlzdCB3b3VsZCBsb2FkIHdoZXRoZXIgb3Igbm90IGEgZm9ybSB1c2VzIGl0LlxuICpcbiAqIFZhbHVlcyBhcmUgbm9ybWFsaXNlZCBieSBgbm9ybWFsaXplTG9va3VwVmFsdWVzYCDigJQgYmFyZSBzdHJpbmdzIGFuZCBgTG9jYWxpemVkVGV4dGAgYXJlXG4gKiBhY2NlcHRlZCBhbG9uZ3NpZGUgdGhlIGZ1bGwgYHsgY29kZSwgbmFtZSwgc29ydE9yZGVyIH1gIHNoYXBlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBwcm92aWRlTmd4RHluYW1pY0VudGl0eSh7XG4gKiAgIGxvb2t1cHM6IHtcbiAqICAgICBlbXBsb3llZVN0YXR1czogKCkgPT4gbGlzdFNlcnZpY2UuZ2V0QnlOYW1lKCdlbXBsb3llZVN0YXR1cycpLFxuICogICAgIGdyYWRlczogWydKdW5pb3InLCAnU2VuaW9yJ10sXG4gKiAgIH0sXG4gKiB9KVxuICovXG5leHBvcnQgY29uc3QgTE9PS1VQX1JFR0lTVFJZID0gbmV3IEluamVjdGlvblRva2VuPE1hcDxzdHJpbmcsIExvb2t1cExpc3RTb3VyY2U+PignTE9PS1VQX1JFR0lTVFJZJyk7XG5cbi8qKlxuICogT3JkZXJlZCBzdGVwcyB0aGF0IG1vdmUgYSBzYXZlZCByZWNvcmQgZm9yd2FyZCB3aGVuIGEgY29uZmlnJ3MgYHZlcnNpb25gIGluY3JlYXNlcy5cbiAqXG4gKiBXaXRob3V0IHRoZXNlLCBgRW50aXR5Rm9ybUNvbmZpZy52ZXJzaW9uYCBhbmQgYFZlcnNpb25lZFJlY29yZC5fY29uZmlnVmVyc2lvbmAgYXJlXG4gKiBkZWNsYXJhdGlvbnMgbm90aGluZyBhY3RzIG9uOiBhIHNjaGVtYSBjYW4gYmUgZWRpdGVkIGZyZWVseSB3aGlsZSByZWNvcmRzIGtlZXAgdGhlaXIgb2xkXG4gKiBzaGFwZSwgYW5kIG5vdGhpbmcgcmVjb25jaWxlcyB0aGUgdHdvLiBSZWdpc3RlcmluZyBtaWdyYXRpb25zIG1ha2VzIHRoZSB2ZXJzaW9uIG51bWJlcnNcbiAqIG1lYW4gc29tZXRoaW5nLlxuICpcbiAqIEBleGFtcGxlXG4gKiBwcm92aWRlTmd4RHluYW1pY0VudGl0eSh7XG4gKiAgIG1pZ3JhdGlvbnM6IFtcbiAqICAgICB7IGZyb206IDEsIHRvOiAyLCBkZXNjcmlwdGlvbjogJ3NwbGl0IG5hbWUnLCBtaWdyYXRlOiByID0+ICh7IC4uLnIsIGZpcnN0TmFtZTogclsnbmFtZSddIH0pIH0sXG4gKiAgIF0sXG4gKiB9KVxuICovXG5leHBvcnQgY29uc3QgUkVDT1JEX01JR1JBVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48UmVjb3JkTWlncmF0aW9uW10+KCdSRUNPUkRfTUlHUkFUSU9OUycpO1xuXG4vKipcbiAqIE92ZXJyaWRlcyBmb3IgdGhlIG1lc3NhZ2VzIHNob3duIHVuZGVyIGFuIGludmFsaWQgZmllbGQsIGtleWVkIGJ5IEFuZ3VsYXIgZXJyb3Iga2V5XG4gKiAoYHJlcXVpcmVkYCwgYG1pbmxlbmd0aGAsIGBwYXR0ZXJuYCwg4oCmKSBwbHVzIGEgZmV3IGZpZWxkLXNwZWNpZmljIGtleXMuXG4gKlxuICogVGhlIGJ1aWx0LWluIG1lc3NhZ2VzIGFyZSBFbmdsaXNoIGxpdGVyYWxzLiBSZWdpc3RlcmluZyBoZXJlIGlzIHdoYXQgbWFrZXMgYSBub24tRW5nbGlzaFxuICogZm9ybSBwb3NzaWJsZSB3aXRob3V0IHJlLWltcGxlbWVudGluZyBldmVyeSBmaWVsZCBjb21wb25lbnQ7IHVubGlzdGVkIGtleXMga2VlcCB0aGVpclxuICogZGVmYXVsdCwgc28gb3ZlcnJpZGluZyBvbmUgZG9lcyBub3QgbWVhbiBzdXBwbHlpbmcgdGhlbSBhbGwuXG4gKi9cbmV4cG9ydCBjb25zdCBWQUxJREFUSU9OX01FU1NBR0VTID0gbmV3IEluamVjdGlvblRva2VuPFJlY29yZDxzdHJpbmcsIGFueT4+KCdWQUxJREFUSU9OX01FU1NBR0VTJyk7XG5cbi8qKiBSZWdpc3RyeTogdmFsaWRhdG9yIGtleSDihpIgVmFsaWRhdG9yRm4gKi9cbmV4cG9ydCBjb25zdCBWQUxJREFUT1JfUkVHSVNUUlkgPSBuZXcgSW5qZWN0aW9uVG9rZW48TWFwPHN0cmluZywgYW55Pj4oJ1ZBTElEQVRPUl9SRUdJU1RSWScpO1xuXG4vKipcbiAqIFJlZ2lzdHJ5OiB2YWxpZGF0b3Iga2V5IOKGkiBBc3luY1ZhbGlkYXRvckZuLlxuICpcbiAqIEtlcHQgc2VwYXJhdGUgZnJvbSBWQUxJREFUT1JfUkVHSVNUUlkgYmVjYXVzZSBBbmd1bGFyIGFwcGxpZXMgdGhlIHR3byBkaWZmZXJlbnRseTogYW4gYXN5bmNcbiAqIHZhbGlkYXRvciBydW5zIG9ubHkgb25jZSB0aGUgc3luY2hyb25vdXMgb25lcyBwYXNzLCBhbmQgcHV0cyB0aGUgY29udHJvbCBpbnRvIGBwZW5kaW5nYFxuICogd2hpbGUgaXQgZG9lcy4gTmFtZSB0aGVtIGZyb20gYSBzY2hlbWEgd2l0aCBgdmFsaWRhdG9yczogeyBjdXN0b21Bc3luYzogWyd1bmlxdWVFbWFpbCddIH1gLlxuICovXG5leHBvcnQgY29uc3QgQVNZTkNfVkFMSURBVE9SX1JFR0lTVFJZID0gbmV3IEluamVjdGlvblRva2VuPE1hcDxzdHJpbmcsIGFueT4+KFxuICAnQVNZTkNfVkFMSURBVE9SX1JFR0lTVFJZJyxcbik7XG5cbi8qKlxuICogQSByZWdpc3RlcmVkIGhvb2s6IHJlY2VpdmVzIHRoZSBwYXlsb2FkLCByZXR1cm5zIGl0IChvciBhIHJlcGxhY2VtZW50KSwgc3luYyBvciBhc3luYy5cbiAqXG4gKiBTcGVsbGVkIG91dCByYXRoZXIgdGhhbiB0eXBlZCBhcyBgRnVuY3Rpb25gLCB3aGljaCBhY2NlcHRzIGNsYXNzIGRlY2xhcmF0aW9ucyBhbmQgYW55XG4gKiBhcml0eSBhbmQgZ2l2ZXMgYSBjb25zdW1lciBubyBzaWduYXR1cmUgdG8gd3JpdGUgYWdhaW5zdC5cbiAqL1xuZXhwb3J0IHR5cGUgSG9va0ZuID0gKGRhdGE6IGFueSwgY29udGV4dD86IHVua25vd24pID0+IHVua25vd24gfCBQcm9taXNlPHVua25vd24+O1xuXG4vKiogUmVnaXN0cnk6IGhvb2sga2V5IOKGkiBhc3luYyAoZGF0YSwgY29udGV4dCkgPT4gZGF0YSAqL1xuZXhwb3J0IGNvbnN0IEhPT0tfUkVHSVNUUlkgPSBuZXcgSW5qZWN0aW9uVG9rZW48TWFwPHN0cmluZywgSG9va0ZuPj4oJ0hPT0tfUkVHSVNUUlknKTtcblxuLyoqXG4gKiBDb25zdW1lci1yZWdpc3RlcmVkIGxpc3Qgb2YgY29tbW9uIG1vZHVsZSB0YWJzIChkb2N1bWVudHMsIGF1ZGl0LCB0YXNrcywgZXRjLikuXG4gKiBUaGUgbGlicmFyeSBzaGlwcyBubyBidWlsdC1pbiBpbXBsZW1lbnRhdGlvbnMuIENvbnN1bWVycyBwcm92aWRlIHRoZWlyIG93biBsaXN0XG4gKiBzbyB0aGUgYnVpbGRlcidzIG1vZHVsZS1waWNrZXIgYW5kIHRoZSByZW5kZXJlcidzIHRhYiBzd2l0Y2hlciBrbm93IHdoYXQncyBhdmFpbGFibGUuXG4gKlxuICogQGV4YW1wbGVcbiAqIHByb3ZpZGVyczogW1xuICogICB7XG4gKiAgICAgcHJvdmlkZTogQ09NTU9OX01PRFVMRVNfUkVHSVNUUlksXG4gKiAgICAgdXNlVmFsdWU6IFtcbiAqICAgICAgIHsgaWQ6ICdkb2N1bWVudHMnLCBsYWJlbDogeyBlbjogJ0RvY3VtZW50cycgfSwgY29tcG9uZW50OiAnYXBwLWRvY3VtZW50cy12aWV3JyB9LFxuICogICAgICAgeyBpZDogJ2F1ZGl0JywgICAgIGxhYmVsOiB7IGVuOiAnQXVkaXQgTG9nJyAgfSwgY29tcG9uZW50OiAnYXBwLWF1ZGl0JyB9LFxuICogICAgIF0gc2F0aXNmaWVzIENvbW1vbk1vZHVsZUVudHJ5W11cbiAqICAgfVxuICogXVxuICovXG5leHBvcnQgY29uc3QgQ09NTU9OX01PRFVMRVNfUkVHSVNUUlkgPSBuZXcgSW5qZWN0aW9uVG9rZW48Q29tbW9uTW9kdWxlRW50cnlbXT4oXG4gICdDT01NT05fTU9EVUxFU19SRUdJU1RSWScsXG4pO1xuXG4vKipcbiAqIENvbnN1bWVyLXByb3ZpZGVkIGZpbGUvaW1hZ2UgdXBsb2FkIGhhbmRsZXIuXG4gKiBXaGVuIHN1cHBsaWVkLCBpbWFnZS1maWVsZCBhbmQgZmlsZS1maWVsZCBjYWxsIGl0IHRvIHBlcnNpc3QgdGhlIEZpbGUgYW5kIHJlY2VpdmUgYSBzdGFibGVcbiAqIFVSTCBiYWNrLiBXaXRob3V0IGl0IHRoZSBmaWVsZCBzdG9yZXMgYHsgZmlsZSwgbmFtZSwgc2l6ZSwgbWltZVR5cGUgfWAgZm9yIHRoZSBjb25zdW1lciB0b1xuICogdXBsb2FkIG9uIHN1Ym1pdC4gTWF5IHJldHVybiB0aGUgcmVzdWx0IGRpcmVjdGx5LCBhcyBhIFByb21pc2UsIG9yIGFzIGFuIE9ic2VydmFibGUuXG4gKlxuICogQGV4YW1wbGVcbiAqIHsgcHJvdmlkZTogVVBMT0FEX0hBTkRMRVIsIHVzZUZhY3Rvcnk6ICgpID0+IChmaWxlOiBGaWxlKSA9PiBteVVwbG9hZFNlcnZpY2UudXBsb2FkKGZpbGUpIH1cbiAqL1xuZXhwb3J0IGNvbnN0IFVQTE9BRF9IQU5ETEVSID0gbmV3IEluamVjdGlvblRva2VuPEZpbGVVcGxvYWRIYW5kbGVyPignVVBMT0FEX0hBTkRMRVInKTtcblxuLyoqXG4gKiBCYWNraW5nIHN0b3JlIGZvciB0aGUgZW50aXR5LXJlZmVyZW5jZSBvcHRpb25zIGNhY2hlLiBEZWZhdWx0cyB0byBpbi1tZW1vcnkuXG4gKiBQcm92aWRlIHlvdXIgb3duIHRvIG1ha2UgdGhlIGNhY2hlIG91dGxpdmUgYSBwYWdlIHJlZnJlc2guXG4gKlxuICogQGV4YW1wbGVcbiAqIHsgcHJvdmlkZTogRU5USVRZX1JFRl9DQUNIRV9TVE9SRSwgdXNlQ2xhc3M6IFNlc3Npb25TdG9yYWdlUmVmQ2FjaGUgfVxuICovXG5leHBvcnQgY29uc3QgRU5USVRZX1JFRl9DQUNIRV9TVE9SRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxFbnRpdHlSZWZDYWNoZVN0b3JlPihcbiAgJ0VOVElUWV9SRUZfQ0FDSEVfU1RPUkUnLFxuICB7IHByb3ZpZGVkSW46ICdyb290JywgZmFjdG9yeTogKCkgPT4gbmV3IEluTWVtb3J5RW50aXR5UmVmQ2FjaGVTdG9yZSgpIH0sXG4pO1xuXG4vKipcbiAqIENvbnN1bWVyLXByb3ZpZGVkIHByZWRpY2F0ZSBmdW5jdGlvbiB0byBjaGVjayB3aGV0aGVyIHVzZXIgcm9sZXMgY2FuIGVkaXQgc3lzdGVtIGRlZmF1bHQgdGFicyBvciBmaWVsZHMuXG4gKiBEZWZhdWx0cyB0byBhbGxvd2luZyBlZGl0cyBpZiBub3QgcHJvdmlkZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBTWVNURU1fREVGQVVMVF9DQU5fRURJVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjwocm9sZXM6IHN0cmluZ1tdKSA9PiBib29sZWFuPihcbiAgJ1NZU1RFTV9ERUZBVUxUX0NBTl9FRElUJyxcbik7XG5cbmV4cG9ydCB0eXBlIENvbmZpZ1NvdXJjZUhhbmRsZXIgPSAoXG4gIGVudGl0eUtleTogc3RyaW5nLFxuKSA9PiBhbnk7XG5cbi8qKlxuICogUmVnaXN0cnkvUmVzb2x2ZXIgZm9yIHJlc29sdmluZyBhbiBFbnRpdHlGb3JtQ29uZmlnIGJ5IGVudGl0eSBrZXkgYWNyb3NzIGVudGl0aWVzIChQaGFzZSA4KS5cbiAqIEVuYWJsZXMgY3Jvc3MtZW50aXR5IGZpZWxkIHJlZmVyZW5jaW5nIChgaXNSZWZlcmVuY2VkYCwgYHJlZmVyZW5jZWRFbnRpdHlLZXlgLCBgcmVmZXJlbmNlZEZpZWxkSWRgLCBgaGFzRHJpZnRgKS5cbiAqL1xuZXhwb3J0IGNvbnN0IENPTkZJR19TT1VSQ0UgPSBuZXcgSW5qZWN0aW9uVG9rZW48Q29uZmlnU291cmNlSGFuZGxlcj4oJ0NPTkZJR19TT1VSQ0UnKTtcblxuXG4iXX0=
@@ -16,10 +16,15 @@ export * from './lib/services/lookup-registry.service';
16
16
  export * from './lib/services/rbac.service';
17
17
  export * from './lib/services/rules-evaluation.service';
18
18
  export * from './lib/services/config-source.service';
19
+ export * from './lib/services/validation-messages.service';
19
20
  // Components — the library ships form UI only; rendering a data table is the consumer's choice.
20
21
  export * from './lib/form/dynamic-form.component';
21
22
  export * from './lib/form/dynamic-record-form.component';
22
23
  export * from './lib/form/dynamic-field/dynamic-field.component';
24
+ // The contract a field component must satisfy to be registered with provideFieldTypes.
25
+ // Previously this existed only as a code comment and an ADR that is gitignored, so a
26
+ // consumer had no interface to implement against.
27
+ export * from './lib/field-types/field-component.contract';
23
28
  // Field type components — every one, individually importable.
24
29
  //
25
30
  // The tree-shaking seam is `provideFieldTypes({ image: ImageFieldComponent })`: register
@@ -48,4 +53,4 @@ export * from './lib/field-types/file-field.component';
48
53
  // Value helpers — a dropdown value is now a language-keyed object, so a consumer rendering
49
54
  // record values needs these. Re-exported so they don't have to depend on core directly.
50
55
  export { resolveLabel, resolveOptionLabel, resolveOptionValue, formatDisplayValue, valuesMatch, normalizeOption, normalizeConfig, } from '@dynamic-entity/core';
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVM7QUFDVCxjQUFjLCtCQUErQixDQUFDO0FBRTlDLFlBQVk7QUFDWixjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMscUNBQXFDLENBQUM7QUFFcEQsV0FBVztBQUNYLGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsNENBQTRDLENBQUM7QUFDM0QsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLHNDQUFzQyxDQUFDO0FBRXJELGdHQUFnRztBQUNoRyxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYyxrREFBa0QsQ0FBQztBQUVqRSw4REFBOEQ7QUFDOUQsRUFBRTtBQUNGLHlGQUF5RjtBQUN6RiwyRkFBMkY7QUFDM0YsMkZBQTJGO0FBQzNGLDJGQUEyRjtBQUMzRiw0QkFBNEI7QUFDNUIsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMsNENBQTRDLENBQUM7QUFDM0QsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYyw4Q0FBOEMsQ0FBQztBQUM3RCxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyxnREFBZ0QsQ0FBQztBQUMvRCxjQUFjLDhDQUE4QyxDQUFDO0FBQzdELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMsd0NBQXdDLENBQUM7QUFFdkQsMkZBQTJGO0FBQzNGLHdGQUF3RjtBQUN4RixPQUFPLEVBQ0wsWUFBWSxFQUNaLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLFdBQVcsRUFDWCxlQUFlLEVBQ2YsZUFBZSxHQUNoQixNQUFNLHNCQUFzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gVG9rZW5zXG5leHBvcnQgKiBmcm9tICcuL2xpYi90b2tlbnMvaW5qZWN0aW9uLXRva2Vucyc7XG5cbi8vIFByb3ZpZGVyc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcHJvdmlkZXJzL3Byb3ZpZGUtbmd4LWR5bmFtaWMtZW50aXR5JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Byb3ZpZGVycy9wcm92aWRlLWZpZWxkLXR5cGVzJztcblxuLy8gU2VydmljZXNcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2ZpZWxkLXJlZ2lzdHJ5LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvaG9vay1yZWdpc3RyeS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3ZhbGlkYXRvci1yZWdpc3RyeS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2VudGl0eS1yZWYtcmVnaXN0cnkuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9lbnRpdHktcmVmLXNlbGVjdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2Nhc2NhZGUtZGF0YS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2VudGl0eS1yZWZlcmVuY2Uuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9lbnRpdHktcmVmLWNhY2hlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2xvb2t1cC1yZWdpc3RyeS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3JiYWMuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9ydWxlcy1ldmFsdWF0aW9uLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvY29uZmlnLXNvdXJjZS5zZXJ2aWNlJztcblxuLy8gQ29tcG9uZW50cyDigJQgdGhlIGxpYnJhcnkgc2hpcHMgZm9ybSBVSSBvbmx5OyByZW5kZXJpbmcgYSBkYXRhIHRhYmxlIGlzIHRoZSBjb25zdW1lcidzIGNob2ljZS5cbmV4cG9ydCAqIGZyb20gJy4vbGliL2Zvcm0vZHluYW1pYy1mb3JtLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9mb3JtL2R5bmFtaWMtcmVjb3JkLWZvcm0uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Zvcm0vZHluYW1pYy1maWVsZC9keW5hbWljLWZpZWxkLmNvbXBvbmVudCc7XG5cbi8vIEZpZWxkIHR5cGUgY29tcG9uZW50cyDigJQgZXZlcnkgb25lLCBpbmRpdmlkdWFsbHkgaW1wb3J0YWJsZS5cbi8vXG4vLyBUaGUgdHJlZS1zaGFraW5nIHNlYW0gaXMgYHByb3ZpZGVGaWVsZFR5cGVzKHsgaW1hZ2U6IEltYWdlRmllbGRDb21wb25lbnQgfSlgOiByZWdpc3RlclxuLy8gb25seSB3aGF0IHlvdSB1c2UgYW5kIHRoZSByZXN0IG5ldmVyIGVudGVycyB0aGUgYnVuZGxlLiBUaGF0IG9ubHkgd29ya3MgZm9yIGNvbXBvbmVudHMgYVxuLy8gY29uc3VtZXIgY2FuIG5hbWUsIGFuZCB0ZW4gb2YgdGhlc2Ugd2VyZSB1bnJlYWNoYWJsZSDigJQgc28gd2FudGluZyBlbGV2ZW4gb2YgdGhlIGVpZ2h0ZWVuXG4vLyBtZWFudCBjYWxsaW5nIHByb3ZpZGVCdWlsdEluRmllbGRUeXBlcygpIGFuZCBidW5kbGluZyBhbGwgb2YgdGhlbSwgd2hpY2ggaXMgZXhhY3RseSB3aGF0XG4vLyB0aGUgc2VhbSBleGlzdHMgdG8gYXZvaWQuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9maWVsZC10eXBlcy90ZXh0LWZpZWxkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9maWVsZC10eXBlcy90ZXh0YXJlYS1maWVsZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZmllbGQtdHlwZXMvbnVtYmVyLWZpZWxkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9maWVsZC10eXBlcy9jdXJyZW5jeS1maWVsZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZmllbGQtdHlwZXMvZW1haWwtZmllbGQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ZpZWxkLXR5cGVzL3Bhc3N3b3JkLWZpZWxkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9maWVsZC10eXBlcy9jaGVja2JveC1maWVsZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZmllbGQtdHlwZXMvYm9vbGVhbi1maWVsZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZmllbGQtdHlwZXMvZGF0ZS1maWVsZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZmllbGQtdHlwZXMvbW9udGgteWVhci1maWVsZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZmllbGQtdHlwZXMvZHJvcGRvd24tZmllbGQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ZpZWxkLXR5cGVzL3JhZGlvLWZpZWxkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9maWVsZC10eXBlcy9tdWx0aS1zZWxlY3QtZmllbGQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ZpZWxkLXR5cGVzL2VudGl0eS1yZWYtZmllbGQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ZpZWxkLXR5cGVzL2dyb3VwLWZpZWxkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9maWVsZC10eXBlcy9hcnJheS1maWVsZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZmllbGQtdHlwZXMvaW1hZ2UtZmllbGQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ZpZWxkLXR5cGVzL2ZpbGUtZmllbGQuY29tcG9uZW50JztcblxuLy8gVmFsdWUgaGVscGVycyDigJQgYSBkcm9wZG93biB2YWx1ZSBpcyBub3cgYSBsYW5ndWFnZS1rZXllZCBvYmplY3QsIHNvIGEgY29uc3VtZXIgcmVuZGVyaW5nXG4vLyByZWNvcmQgdmFsdWVzIG5lZWRzIHRoZXNlLiBSZS1leHBvcnRlZCBzbyB0aGV5IGRvbid0IGhhdmUgdG8gZGVwZW5kIG9uIGNvcmUgZGlyZWN0bHkuXG5leHBvcnQge1xuICByZXNvbHZlTGFiZWwsXG4gIHJlc29sdmVPcHRpb25MYWJlbCxcbiAgcmVzb2x2ZU9wdGlvblZhbHVlLFxuICBmb3JtYXREaXNwbGF5VmFsdWUsXG4gIHZhbHVlc01hdGNoLFxuICBub3JtYWxpemVPcHRpb24sXG4gIG5vcm1hbGl6ZUNvbmZpZyxcbn0gZnJvbSAnQGR5bmFtaWMtZW50aXR5L2NvcmUnO1xuXG4vLyBSZS1leHBvcnQgY29yZSB0eXBlcyBzbyBjb25zdW1lcnMgbmVlZCBvbmx5IG9uZSBpbXBvcnRcbmV4cG9ydCB0eXBlIHtcbiAgRW50aXR5Rm9ybUNvbmZpZyxcbiAgTmVzdGVkVGFiQ29uZmlnLFxuICBOZXN0ZWRGaWVsZENvbmZpZyxcbiAgRmllbGRUYWJsZUNvbmZpZyxcbiAgUmljaEZpZWxkVHlwZSxcbiAgTG9jYWxpemVkVGV4dCxcbiAgRHJvcGRvd25PcHRpb24sXG4gIFZlcnNpb25lZFJlY29yZCxcbiAgRW50aXR5UGVybWlzc2lvbnMsXG4gIFJiYWNDb250ZXh0LFxuICBGaWVsZFZhbGlkYXRvcnMsXG4gIEVudGl0eVJlZmVyZW5jZUNvbmZpZyxcbiAgRW50aXR5UmVmZXJlbmNlTG9hZGVyLFxuICBSZWZlcmVuY2VPcHRpb24sXG4gIFJlZmVyZW5jZUxvYWRlckNvbnRleHQsXG4gIEF1dG9QYXRjaENvbmZpZyxcbiAgUGF0Y2hPblRydWVNYXBwaW5nLFxuICBGaWxlUmVmLFxuICBGb3JtUnVsZSxcbiAgUnVsZUNvbmRpdGlvbixcbiAgUnVsZUFjdGlvbixcbiAgUnVsZUV2YWx1YXRpb25SZXN1bHQsXG4gIENvbW1vbk1vZHVsZUVudHJ5LFxufSBmcm9tICdAZHluYW1pYy1lbnRpdHkvY29yZSc7XG4iXX0=
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVM7QUFDVCxjQUFjLCtCQUErQixDQUFDO0FBRTlDLFlBQVk7QUFDWixjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMscUNBQXFDLENBQUM7QUFFcEQsV0FBVztBQUNYLGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsNENBQTRDLENBQUM7QUFDM0QsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsNENBQTRDLENBQUM7QUFFM0QsZ0dBQWdHO0FBQ2hHLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYywwQ0FBMEMsQ0FBQztBQUN6RCxjQUFjLGtEQUFrRCxDQUFDO0FBRWpFLHVGQUF1RjtBQUN2RixxRkFBcUY7QUFDckYsa0RBQWtEO0FBQ2xELGNBQWMsNENBQTRDLENBQUM7QUFFM0QsOERBQThEO0FBQzlELEVBQUU7QUFDRix5RkFBeUY7QUFDekYsMkZBQTJGO0FBQzNGLDJGQUEyRjtBQUMzRiwyRkFBMkY7QUFDM0YsNEJBQTRCO0FBQzVCLGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLDBDQUEwQyxDQUFDO0FBQ3pELGNBQWMsNENBQTRDLENBQUM7QUFDM0QsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsNENBQTRDLENBQUM7QUFDM0QsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMsZ0RBQWdELENBQUM7QUFDL0QsY0FBYyw4Q0FBOEMsQ0FBQztBQUM3RCxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLHdDQUF3QyxDQUFDO0FBRXZELDJGQUEyRjtBQUMzRix3RkFBd0Y7QUFDeEYsT0FBTyxFQUNMLFlBQVksRUFDWixrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixXQUFXLEVBQ1gsZUFBZSxFQUNmLGVBQWUsR0FDaEIsTUFBTSxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRva2Vuc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdG9rZW5zL2luamVjdGlvbi10b2tlbnMnO1xuXG4vLyBQcm92aWRlcnNcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Byb3ZpZGVycy9wcm92aWRlLW5neC1keW5hbWljLWVudGl0eSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcm92aWRlcnMvcHJvdmlkZS1maWVsZC10eXBlcyc7XG5cbi8vIFNlcnZpY2VzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9maWVsZC1yZWdpc3RyeS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2hvb2stcmVnaXN0cnkuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy92YWxpZGF0b3ItcmVnaXN0cnkuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9lbnRpdHktcmVmLXJlZ2lzdHJ5LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvZW50aXR5LXJlZi1zZWxlY3Rpb24uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9jYXNjYWRlLWRhdGEuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9lbnRpdHktcmVmZXJlbmNlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvZW50aXR5LXJlZi1jYWNoZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9sb29rdXAtcmVnaXN0cnkuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9yYmFjLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvcnVsZXMtZXZhbHVhdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2NvbmZpZy1zb3VyY2Uuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy92YWxpZGF0aW9uLW1lc3NhZ2VzLnNlcnZpY2UnO1xuXG4vLyBDb21wb25lbnRzIOKAlCB0aGUgbGlicmFyeSBzaGlwcyBmb3JtIFVJIG9ubHk7IHJlbmRlcmluZyBhIGRhdGEgdGFibGUgaXMgdGhlIGNvbnN1bWVyJ3MgY2hvaWNlLlxuZXhwb3J0ICogZnJvbSAnLi9saWIvZm9ybS9keW5hbWljLWZvcm0uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Zvcm0vZHluYW1pYy1yZWNvcmQtZm9ybS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZm9ybS9keW5hbWljLWZpZWxkL2R5bmFtaWMtZmllbGQuY29tcG9uZW50JztcblxuLy8gVGhlIGNvbnRyYWN0IGEgZmllbGQgY29tcG9uZW50IG11c3Qgc2F0aXNmeSB0byBiZSByZWdpc3RlcmVkIHdpdGggcHJvdmlkZUZpZWxkVHlwZXMuXG4vLyBQcmV2aW91c2x5IHRoaXMgZXhpc3RlZCBvbmx5IGFzIGEgY29kZSBjb21tZW50IGFuZCBhbiBBRFIgdGhhdCBpcyBnaXRpZ25vcmVkLCBzbyBhXG4vLyBjb25zdW1lciBoYWQgbm8gaW50ZXJmYWNlIHRvIGltcGxlbWVudCBhZ2FpbnN0LlxuZXhwb3J0ICogZnJvbSAnLi9saWIvZmllbGQtdHlwZXMvZmllbGQtY29tcG9uZW50LmNvbnRyYWN0JztcblxuLy8gRmllbGQgdHlwZSBjb21wb25lbnRzIOKAlCBldmVyeSBvbmUsIGluZGl2aWR1YWxseSBpbXBvcnRhYmxlLlxuLy9cbi8vIFRoZSB0cmVlLXNoYWtpbmcgc2VhbSBpcyBgcHJvdmlkZUZpZWxkVHlwZXMoeyBpbWFnZTogSW1hZ2VGaWVsZENvbXBvbmVudCB9KWA6IHJlZ2lzdGVyXG4vLyBvbmx5IHdoYXQgeW91IHVzZSBhbmQgdGhlIHJlc3QgbmV2ZXIgZW50ZXJzIHRoZSBidW5kbGUuIFRoYXQgb25seSB3b3JrcyBmb3IgY29tcG9uZW50cyBhXG4vLyBjb25zdW1lciBjYW4gbmFtZSwgYW5kIHRlbiBvZiB0aGVzZSB3ZXJlIHVucmVhY2hhYmxlIOKAlCBzbyB3YW50aW5nIGVsZXZlbiBvZiB0aGUgZWlnaHRlZW5cbi8vIG1lYW50IGNhbGxpbmcgcHJvdmlkZUJ1aWx0SW5GaWVsZFR5cGVzKCkgYW5kIGJ1bmRsaW5nIGFsbCBvZiB0aGVtLCB3aGljaCBpcyBleGFjdGx5IHdoYXRcbi8vIHRoZSBzZWFtIGV4aXN0cyB0byBhdm9pZC5cbmV4cG9ydCAqIGZyb20gJy4vbGliL2ZpZWxkLXR5cGVzL3RleHQtZmllbGQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ZpZWxkLXR5cGVzL3RleHRhcmVhLWZpZWxkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9maWVsZC10eXBlcy9udW1iZXItZmllbGQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ZpZWxkLXR5cGVzL2N1cnJlbmN5LWZpZWxkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9maWVsZC10eXBlcy9lbWFpbC1maWVsZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZmllbGQtdHlwZXMvcGFzc3dvcmQtZmllbGQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ZpZWxkLXR5cGVzL2NoZWNrYm94LWZpZWxkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9maWVsZC10eXBlcy9ib29sZWFuLWZpZWxkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9maWVsZC10eXBlcy9kYXRlLWZpZWxkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9maWVsZC10eXBlcy9tb250aC15ZWFyLWZpZWxkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9maWVsZC10eXBlcy9kcm9wZG93bi1maWVsZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZmllbGQtdHlwZXMvcmFkaW8tZmllbGQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ZpZWxkLXR5cGVzL211bHRpLXNlbGVjdC1maWVsZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZmllbGQtdHlwZXMvZW50aXR5LXJlZi1maWVsZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZmllbGQtdHlwZXMvZ3JvdXAtZmllbGQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ZpZWxkLXR5cGVzL2FycmF5LWZpZWxkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9maWVsZC10eXBlcy9pbWFnZS1maWVsZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZmllbGQtdHlwZXMvZmlsZS1maWVsZC5jb21wb25lbnQnO1xuXG4vLyBWYWx1ZSBoZWxwZXJzIOKAlCBhIGRyb3Bkb3duIHZhbHVlIGlzIG5vdyBhIGxhbmd1YWdlLWtleWVkIG9iamVjdCwgc28gYSBjb25zdW1lciByZW5kZXJpbmdcbi8vIHJlY29yZCB2YWx1ZXMgbmVlZHMgdGhlc2UuIFJlLWV4cG9ydGVkIHNvIHRoZXkgZG9uJ3QgaGF2ZSB0byBkZXBlbmQgb24gY29yZSBkaXJlY3RseS5cbmV4cG9ydCB7XG4gIHJlc29sdmVMYWJlbCxcbiAgcmVzb2x2ZU9wdGlvbkxhYmVsLFxuICByZXNvbHZlT3B0aW9uVmFsdWUsXG4gIGZvcm1hdERpc3BsYXlWYWx1ZSxcbiAgdmFsdWVzTWF0Y2gsXG4gIG5vcm1hbGl6ZU9wdGlvbixcbiAgbm9ybWFsaXplQ29uZmlnLFxufSBmcm9tICdAZHluYW1pYy1lbnRpdHkvY29yZSc7XG5cbi8vIFJlLWV4cG9ydCBjb3JlIHR5cGVzIHNvIGNvbnN1bWVycyBuZWVkIG9ubHkgb25lIGltcG9ydFxuZXhwb3J0IHR5cGUge1xuICBFbnRpdHlGb3JtQ29uZmlnLFxuICBOZXN0ZWRUYWJDb25maWcsXG4gIE5lc3RlZEZpZWxkQ29uZmlnLFxuICBGaWVsZFRhYmxlQ29uZmlnLFxuICBSaWNoRmllbGRUeXBlLFxuICBMb2NhbGl6ZWRUZXh0LFxuICBEcm9wZG93bk9wdGlvbixcbiAgVmVyc2lvbmVkUmVjb3JkLFxuICBFbnRpdHlQZXJtaXNzaW9ucyxcbiAgUmJhY0NvbnRleHQsXG4gIEZpZWxkVmFsaWRhdG9ycyxcbiAgRW50aXR5UmVmZXJlbmNlQ29uZmlnLFxuICBFbnRpdHlSZWZlcmVuY2VMb2FkZXIsXG4gIFJlZmVyZW5jZU9wdGlvbixcbiAgUmVmZXJlbmNlTG9hZGVyQ29udGV4dCxcbiAgQXV0b1BhdGNoQ29uZmlnLFxuICBQYXRjaE9uVHJ1ZU1hcHBpbmcsXG4gIEZpbGVSZWYsXG4gIEZvcm1SdWxlLFxuICBSdWxlQ29uZGl0aW9uLFxuICBSdWxlQWN0aW9uLFxuICBSdWxlRXZhbHVhdGlvblJlc3VsdCxcbiAgQ29tbW9uTW9kdWxlRW50cnksXG59IGZyb20gJ0BkeW5hbWljLWVudGl0eS9jb3JlJztcbiJdfQ==