@decaf-ts/for-angular 0.0.23 → 0.0.24

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 (35) hide show
  1. package/components/component-renderer/component-renderer.component.d.ts +3 -2
  2. package/components/crud-field/crud-field.component.d.ts +4 -2
  3. package/components/fieldset/fieldset.component.d.ts +10 -1
  4. package/components/for-angular-components.module.d.ts +3 -2
  5. package/components/index.d.ts +1 -0
  6. package/components/layout/layout.component.d.ts +1 -24
  7. package/components/model-renderer/model-renderer.component.d.ts +6 -1
  8. package/components/steped-form/steped-form.component.d.ts +243 -0
  9. package/engine/NgxBaseComponent.d.ts +2 -2
  10. package/engine/NgxCrudFormField.d.ts +1 -0
  11. package/engine/NgxFormService.d.ts +381 -48
  12. package/engine/NgxRenderingEngine.d.ts +4 -2
  13. package/engine/interfaces.d.ts +1 -1
  14. package/engine/types.d.ts +4 -3
  15. package/esm2022/components/component-renderer/component-renderer.component.mjs +10 -4
  16. package/esm2022/components/crud-field/crud-field.component.mjs +14 -3
  17. package/esm2022/components/crud-form/crud-form.component.mjs +3 -3
  18. package/esm2022/components/empty-state/empty-state.component.mjs +2 -2
  19. package/esm2022/components/fieldset/fieldset.component.mjs +5 -3
  20. package/esm2022/components/for-angular-components.module.mjs +10 -5
  21. package/esm2022/components/index.mjs +2 -1
  22. package/esm2022/components/layout/layout.component.mjs +4 -29
  23. package/esm2022/components/list/list.component.mjs +3 -3
  24. package/esm2022/components/model-renderer/model-renderer.component.mjs +10 -3
  25. package/esm2022/components/steped-form/steped-form.component.mjs +291 -0
  26. package/esm2022/engine/NgxBaseComponent.mjs +10 -4
  27. package/esm2022/engine/NgxCrudFormField.mjs +19 -17
  28. package/esm2022/engine/NgxFormService.mjs +438 -57
  29. package/esm2022/engine/NgxRenderingEngine.mjs +21 -10
  30. package/esm2022/engine/ValidatorFactory.mjs +4 -4
  31. package/esm2022/engine/interfaces.mjs +1 -1
  32. package/esm2022/engine/types.mjs +1 -1
  33. package/fesm2022/decaf-ts-for-angular.mjs +818 -136
  34. package/fesm2022/decaf-ts-for-angular.mjs.map +1 -1
  35. package/package.json +1 -1
@@ -399,7 +399,9 @@ export class NgxBaseComponent {
399
399
  * an initialization message with the component name. This method is typically called
400
400
  * during the component's lifecycle setup.
401
401
  */
402
- initialize() {
402
+ async initialize(parseProps = true, skip) {
403
+ if (!this.initialized && parseProps)
404
+ return this.parseProps(this, skip || []);
403
405
  this.initialized = true;
404
406
  }
405
407
  /**
@@ -479,11 +481,15 @@ export class NgxBaseComponent {
479
481
  * @protected
480
482
  * @memberOf NgxBaseComponent
481
483
  */
482
- parseProps(instance) {
484
+ parseProps(instance, skip) {
483
485
  Object.keys(instance).forEach((key) => {
484
- if (Object.keys(this.props).includes(key))
486
+ if (Object.keys(this.props).includes(key) && !skip.includes(key)) {
485
487
  this[key] = this.props[key];
488
+ delete this.props[key];
489
+ }
486
490
  });
491
+ if (!this.initialized)
492
+ this.initialized = true;
487
493
  }
488
494
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NgxBaseComponent, deps: [{ token: 'instanceToken' }], target: i0.ɵɵFactoryTarget.Component }); }
489
495
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: NgxBaseComponent, isStandalone: true, selector: "ng-component", inputs: { rendererId: "rendererId", model: "model", props: "props", item: "item", pk: "pk", route: "route", operations: "operations", uid: "uid", mapper: "mapper", locale: "locale", translatable: "translatable", className: "className", mode: "mode", renderChild: "renderChild" }, outputs: { listenEvent: "listenEvent" }, host: { properties: { "attr.id": "uid" } }, viewQueries: [{ propertyName: "component", first: true, predicate: ["component"], descendants: true, read: ElementRef, static: true }], usesOnChanges: true, ngImport: i0, template: '<div></div>', isInline: true }); }
@@ -532,4 +538,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
532
538
  }], listenEvent: [{
533
539
  type: Output
534
540
  }] } });
535
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmd4QmFzZUNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL05neEJhc2VDb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLEtBQUssRUFDTCxTQUFTLEVBQ1QsTUFBTSxFQUNOLFNBQVMsRUFDVCxVQUFVLEVBR1YsTUFBTSxFQUNOLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUN0QixlQUFlLEdBQ2hCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZELE9BQU8sRUFFTCxhQUFhLEVBQ2IsYUFBYSxHQUNkLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTFELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRTVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkRHO0FBTUgsTUFBTSxPQUFnQixnQkFBZ0I7SUF1U3BDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FpQ0c7SUFDSCx5REFBeUQ7SUFDekQsWUFBeUQsUUFBZ0I7UUFBaEIsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQWpRekU7Ozs7Ozs7Ozs7O1dBV0c7UUFFSCxVQUFLLEdBQTRCLEVBQUUsQ0FBQztRQUVwQzs7Ozs7Ozs7Ozs7V0FXRztRQUVILFNB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REYsS0FBSztnQkFZTixNQUFNO3NCQURMLEtBQUs7Z0JBZU4sTUFBTTtzQkFETCxLQUFLO2dCQWVOLFlBQVk7c0JBRFgsS0FBSztnQkFlTixTQUFTO3NCQURSLEtBQUs7Z0JBZ0JOLElBQUk7c0JBREgsS0FBSztnQkE0Qk4sV0FBVztzQkFEVixLQUFLO2dCQXlCTixXQUFXO3NCQURWLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJbnB1dCxcbiAgQ29tcG9uZW50LFxuICBJbmplY3QsXG4gIFZpZXdDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBLZXlWYWx1ZSwgUmVuZGVyZXJDdXN0b21FdmVudCwgU3RyaW5nT3JCb29sZWFuIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge1xuICBnZW5lcmF0ZVJhbmRvbVZhbHVlLFxuICBnZXRJbmplY3RhYmxlc1JlZ2lzdHJ5LFxuICBzdHJpbmdUb0Jvb2xlYW4sXG59IGZyb20gJy4uL2hlbHBlcnMvdXRpbHMnO1xuaW1wb3J0IHsgZ2V0TG9jYWxlQ29udGV4dCB9IGZyb20gJy4uL2kxOG4vTG9hZGVyJztcbmltcG9ydCB7IE1vZGVsIH0gZnJvbSAnQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uJztcbmltcG9ydCB7XG4gIENydWRPcGVyYXRpb25zLFxuICBJbnRlcm5hbEVycm9yLFxuICBPcGVyYXRpb25LZXlzLFxufSBmcm9tICdAZGVjYWYtdHMvZGItZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50UHJvcHMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBOZ3hSZW5kZXJpbmdFbmdpbmUgfSBmcm9tICcuL05neFJlbmRlcmluZ0VuZ2luZSc7XG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tICdAZGVjYWYtdHMvbG9nZ2luZyc7XG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuLi9mb3ItYW5ndWxhci1jb21tb24ubW9kdWxlJztcbmltcG9ydCB7IERlY2FmUmVwb3NpdG9yeSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgUmVwb3NpdG9yeSB9IGZyb20gJ0BkZWNhZi10cy9jb3JlJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQmFzZSBjb21wb25lbnQgY2xhc3MgdGhhdCBwcm92aWRlcyBjb21tb24gZnVuY3Rpb25hbGl0eSBmb3IgYWxsIERlY2FmIGNvbXBvbmVudHMuXG4gKiBAc3VtbWFyeSBUaGUgTmd4QmFzZUNvbXBvbmVudCBzZXJ2ZXMgYXMgdGhlIGZvdW5kYXRpb24gZm9yIGFsbCBEZWNhZiBVSSBjb21wb25lbnRzLCBwcm92aWRpbmdcbiAqIHNoYXJlZCBmdW5jdGlvbmFsaXR5IGZvciBsb2NhbGl6YXRpb24sIGVsZW1lbnQgcmVmZXJlbmNlcywgYW5kIHN0eWxpbmcuIFRoaXMgYWJzdHJhY3QgY2xhc3NcbiAqIGltcGxlbWVudHMgY29tbW9uIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgdGhhdCBhcmUgdXNlZCBhY3Jvc3MgdGhlIGNvbXBvbmVudCBsaWJyYXJ5LCBlbnN1cmluZ1xuICogY29uc2lzdGVudCBiZWhhdmlvciBhbmQgcmVkdWNpbmcgY29kZSBkdXBsaWNhdGlvbi4gQ29tcG9uZW50cyB0aGF0IGV4dGVuZCB0aGlzIGNsYXNzIGluaGVyaXRcbiAqIGl0cyBjYXBhYmlsaXRpZXMgZm9yIGhhbmRsaW5nIHRyYW5zbGF0aW9ucywgYWNjZXNzaW5nIERPTSBlbGVtZW50cywgYW5kIGFwcGx5aW5nIGN1c3RvbSBzdHlsaW5nLlxuICpcbiAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGUgdGhhdCB0aGlzIGNvbXBvbmVudCB3b3JrcyB3aXRoXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5zdGFuY2UgLSBUaGUgY29tcG9uZW50IGluc3RhbmNlIHRva2VuIHVzZWQgZm9yIGlkZW50aWZpY2F0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYWxlIC0gVGhlIGxvY2FsZSB0byBiZSB1c2VkIGZvciB0cmFuc2xhdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nT3JCb29sZWFufSB0cmFuc2xhdGFibGUgLSBXaGV0aGVyIHRoZSBjb21wb25lbnQgc2hvdWxkIGJlIHRyYW5zbGF0ZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWUgLSBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIHRvIGFwcGx5IHRvIHRoZSBjb21wb25lbnRcbiAqIEBwYXJhbSB7XCJpb3NcIiB8IFwibWRcIiB8IHVuZGVmaW5lZH0gbW9kZSAtIENvbXBvbmVudCBwbGF0Zm9ybSBzdHlsZVxuICpcbiAqIEBjb21wb25lbnQgTmd4QmFzZUNvbXBvbmVudFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIEBDb21wb25lbnQoe1xuICogICBzZWxlY3RvcjogJ2FwcC1teS1jb21wb25lbnQnLFxuICogICB0ZW1wbGF0ZVVybDogJy4vbXktY29tcG9uZW50LmNvbXBvbmVudC5odG1sJyxcbiAqICAgc3R5bGVVcmxzOiBbJy4vbXktY29tcG9uZW50LmNvbXBvbmVudC5zY3NzJ11cbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgTXlDb21wb25lbnQgZXh0ZW5kcyBOZ3hCYXNlQ29tcG9uZW50IHtcbiAqICAgY29uc3RydWN0b3IoQEluamVjdCgnaW5zdGFuY2VUb2tlbicpIGluc3RhbmNlOiBzdHJpbmcpIHtcbiAqICAgICBzdXBlcihpbnN0YW5jZSk7XG4gKiAgIH1cbiAqXG4gKiAgIG5nT25Jbml0KCkge1xuICogICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICogICAgIC8vIENvbXBvbmVudC1zcGVjaWZpYyBpbml0aWFsaXphdGlvblxuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQXBwIGFzIEFwcGxpY2F0aW9uXG4gKiAgIHBhcnRpY2lwYW50IENvbXAgYXMgQ29tcG9uZW50XG4gKiAgIHBhcnRpY2lwYW50IEJhc2UgYXMgTmd4QmFzZUNvbXBvbmVudFxuICogICBwYXJ0aWNpcGFudCBFbmdpbmUgYXMgTmd4UmVuZGVyaW5nRW5naW5lXG4gKlxuICogICBBcHAtPj5Db21wOiBDcmVhdGUgY29tcG9uZW50XG4gKiAgIENvbXAtPj5CYXNlOiBzdXBlcihpbnN0YW5jZSlcbiAqICAgQmFzZS0+PkJhc2U6IFNldCBjb21wb25lbnROYW1lICYgY29tcG9uZW50TG9jYWxlXG4gKlxuICogICBBcHAtPj5Db21wOiBTZXQgQElucHV0IHByb3BlcnRpZXNcbiAqICAgQ29tcC0+PkJhc2U6IG5nT25DaGFuZ2VzKGNoYW5nZXMpXG4gKlxuICogICBhbHQgbW9kZWwgY2hhbmdlZFxuICogICAgIEJhc2UtPj5CYXNlOiBnZXRNb2RlbChtb2RlbClcbiAqICAgICBCYXNlLT4+RW5naW5lOiBnZXREZWNvcmF0b3JzKG1vZGVsLCB7fSlcbiAqICAgICBFbmdpbmUtLT4+QmFzZTogUmV0dXJuIGRlY29yYXRvciBtZXRhZGF0YVxuICogICAgIEJhc2UtPj5CYXNlOiBDb25maWd1cmUgbWFwcGVyIGFuZCBpdGVtXG4gKiAgICAgQmFzZS0+PkJhc2U6IGdldExvY2FsZSh0cmFuc2xhdGFibGUpXG4gKiAgIGVsc2UgbG9jYWxlL3RyYW5zbGF0YWJsZSBjaGFuZ2VkXG4gKiAgICAgQmFzZS0+PkJhc2U6IGdldExvY2FsZSh0cmFuc2xhdGFibGUpXG4gKiAgIGVuZFxuICpcbiAqICAgQXBwLT4+Q29tcDogbmdPbkluaXQoKVxuICogICBDb21wLT4+QmFzZTogaW5pdGlhbGl6ZSgpXG4gKiAgIEJhc2UtPj5CYXNlOiBTZXQgaW5pdGlhbGl6ZWQgZmxhZ1xuICovXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGU6ICc8ZGl2PjwvZGl2PicsXG4gIGhvc3Q6IHsgJ1thdHRyLmlkXSc6ICd1aWQnIH0sXG59KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5neEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlZmVyZW5jZSB0byB0aGUgY29tcG9uZW50J3MgZWxlbWVudC5cbiAgICogQHN1bW1hcnkgUHJvdmlkZXMgZGlyZWN0IGFjY2VzcyB0byB0aGUgbmF0aXZlIERPTSBlbGVtZW50IG9mIHRoZSBjb21wb25lbnQgdGhyb3VnaCBBbmd1bGFyJ3NcbiAgICogVmlld0NoaWxkIGRlY29yYXRvci4gVGhpcyByZWZlcmVuY2UgY2FuIGJlIHVzZWQgdG8gbWFuaXB1bGF0ZSB0aGUgRE9NIGVsZW1lbnQgZGlyZWN0bHksXG4gICAqIGFwcGx5IGN1c3RvbSBzdHlsZXMsIG9yIGFjY2VzcyBuYXRpdmUgZWxlbWVudCBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzLiBUaGUgZWxlbWVudCBpc1xuICAgKiBpZGVudGlmaWVkIGJ5IHRoZSAnY29tcG9uZW50JyB0ZW1wbGF0ZSByZWZlcmVuY2UgdmFyaWFibGUuXG4gICAqXG4gICAqIEB0eXBlIHtFbGVtZW50UmVmfVxuICAgKiBAbWVtYmVyT2YgTmd4QmFzZUNvbXBvbmVudFxuICAgKi9cbiAgQFZpZXdDaGlsZCgnY29tcG9uZW50JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgY29tcG9uZW50ITogRWxlbWVudFJlZjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBuYW1lIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEBzdW1tYXJ5IFN0b3JlcyB0aGUgbmFtZSBvZiB0aGUgY29tcG9uZW50LCB3aGljaCBpcyB0eXBpY2FsbHkgZGVyaXZlZCBmcm9tIHRoZSBjbGFzcyBuYW1lLlxuICAgKiBUaGlzIHByb3BlcnR5IGlzIHVzZWQgaW50ZXJuYWxseSBmb3IgdmFyaW91cyBwdXJwb3NlcyBzdWNoIGFzIGxvZ2dpbmcsIGRlcml2aW5nIHRoZSBkZWZhdWx0XG4gICAqIGxvY2FsZSwgYW5kIHBvdGVudGlhbGx5IGZvciBjb21wb25lbnQgaWRlbnRpZmljYXRpb24gaW4gZGVidWdnaW5nIG9yIGVycm9yIHJlcG9ydGluZy5cbiAgICpcbiAgICogVGhlIGBjb21wb25lbnROYW1lYCBpcyBzZXQgZHVyaW5nIHRoZSBjb21wb25lbnQncyBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGFuZCBzaG91bGQgbm90XG4gICAqIGJlIG1vZGlmaWVkIGV4dGVybmFsbHkuIEl0J3MgbWFya2VkIGFzIHByb3RlY3RlZCB0byBhbGxvdyBhY2Nlc3MgaW4gZGVyaXZlZCBjbGFzc2VzIHdoaWxlXG4gICAqIHByZXZlbnRpbmcgZGlyZWN0IGFjY2VzcyBmcm9tIG91dHNpZGUgdGhlIGNvbXBvbmVudCBoaWVyYXJjaHkuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQG1lbWJlck9mIE5neEJhc2VDb21wb25lbnRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gSW5zaWRlIGEgZGVyaXZlZCBjb21wb25lbnQgY2xhc3NcbiAgICogY29uc29sZS5sb2codGhpcy5jb21wb25lbnROYW1lKTsgLy8gT3V0cHV0czogXCJNeUN1c3RvbUNvbXBvbmVudFwiXG4gICAqL1xuICBjb21wb25lbnROYW1lITogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSByZW5kZXJlci5cbiAgICogQHN1bW1hcnkgQSB1bmlxdWUgaWRlbnRpZmllciB1c2VkIHRvIHJlZmVyZW5jZSB0aGUgY29tcG9uZW50J3MgcmVuZGVyZXIgaW5zdGFuY2UuXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgZm9yIHRhcmdldGluZyBzcGVjaWZpYyByZW5kZXJlciBpbnN0YW5jZXMgd2hlbiBtdWx0aXBsZSBjb21wb25lbnRzXG4gICAqIGFyZSBwcmVzZW50IG9uIHRoZSBzYW1lIHBhZ2UuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBtZW1iZXJPZiBOZ3hCYXNlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICByZW5kZXJlcklkITogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVwb3NpdG9yeSBtb2RlbCBmb3IgZGF0YSBvcGVyYXRpb25zLlxuICAgKiBAc3VtbWFyeSBUaGUgZGF0YSBtb2RlbCByZXBvc2l0b3J5IHRoYXQgdGhpcyBjb21wb25lbnQgd2lsbCB1c2UgZm9yIENSVUQgb3BlcmF0aW9ucy5cbiAgICogVGhpcyBwcm92aWRlcyBhIGNvbm5lY3Rpb24gdG8gdGhlIGRhdGEgbGF5ZXIgZm9yIHJldHJpZXZpbmcgYW5kIG1hbmlwdWxhdGluZyBkYXRhLlxuICAgKlxuICAgKiBAdHlwZSB7TW9kZWx8IHVuZGVmaW5lZH1cbiAgICogQG1lbWJlck9mIE5neEJhc2VDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIG1vZGVsITogTW9kZWwgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgcmVwb3NpdG9yeSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZGF0YSBtb2RlbC5cbiAgICogQHN1bW1hcnkgUHJvdmlkZXMgYSBjb25uZWN0aW9uIHRvIHRoZSBkYXRhIGxheWVyIGZvciByZXRyaWV2aW5nIGFuZCBtYW5pcHVsYXRpbmcgZGF0YS5cbiAgICogVGhpcyBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgYERlY2FmUmVwb3NpdG9yeWAgY2xhc3MgZnJvbSB0aGUgYEBkZWNhZi10cy9jb3JlYCBwYWNrYWdlLFxuICAgKiB3aGljaCBpcyBpbml0aWFsaXplZCBpbiB0aGUgYHJlcG9zaXRvcnlgIGdldHRlciBtZXRob2QuXG4gICAqXG4gICAqIFRoZSByZXBvc2l0b3J5IGlzIHVzZWQgdG8gcGVyZm9ybSBDUlVEIChDcmVhdGUsIFJlYWQsIFVwZGF0ZSwgRGVsZXRlKSBvcGVyYXRpb25zIG9uIHRoZVxuICAgKiBkYXRhIG1vZGVsLCBzdWNoIGFzIGZldGNoaW5nIGRhdGEsIGNyZWF0aW5nIG5ldyBpdGVtcywgdXBkYXRpbmcgZXhpc3RpbmcgaXRlbXMsIGFuZCBkZWxldGluZ1xuICAgKiBpdGVtcy4gSXQgYWxzbyBwcm92aWRlcyBtZXRob2RzIGZvciBxdWVyeWluZyBhbmQgZmlsdGVyaW5nIGRhdGEgYmFzZWQgb24gc3BlY2lmaWMgY3JpdGVyaWEuXG4gICAqXG4gICAqIEB0eXBlIHtEZWNhZlJlcG9zaXRvcnk8TW9kZWw+fVxuICAgKiBAcHJpdmF0ZVxuICAgKiBAbWVtYmVyT2YgTmd4QmFzZUNvbXBvbmVudFxuICAgKi9cbiAgcHJvdGVjdGVkIF9yZXBvc2l0b3J5PzogRGVjYWZSZXBvc2l0b3J5PE1vZGVsPjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIER5bmFtaWMgcHJvcGVydGllcyBjb25maWd1cmF0aW9uIG9iamVjdC5cbiAgICogQHN1bW1hcnkgQ29udGFpbnMga2V5LXZhbHVlIHBhaXJzIG9mIGR5bmFtaWMgcHJvcGVydGllcyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnRcbiAgICogYXQgcnVudGltZS4gVGhpcyBmbGV4aWJsZSBjb25maWd1cmF0aW9uIG9iamVjdCBhbGxvd3MgZm9yIGR5bmFtaWMgcHJvcGVydHkgYXNzaWdubWVudCB3aXRob3V0XG4gICAqIHJlcXVpcmluZyBleHBsaWNpdCBpbnB1dCBiaW5kaW5ncyBmb3IgZXZlcnkgcG9zc2libGUgY29uZmlndXJhdGlvbiBvcHRpb24uIFByb3BlcnRpZXMgZnJvbVxuICAgKiB0aGlzIG9iamVjdCBhcmUgcGFyc2VkIGFuZCBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQgaW5zdGFuY2UgdGhyb3VnaCB0aGUgcGFyc2VQcm9wcyBtZXRob2QsXG4gICAqIGVuYWJsaW5nIGN1c3RvbWl6YWJsZSBjb21wb25lbnQgYmVoYXZpb3IgYmFzZWQgb24gZXh0ZXJuYWwgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fVxuICAgKiBAZGVmYXVsdCB7fVxuICAgKiBAbWVtYmVyT2YgTmd4QmFzZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgcHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDb25maWd1cmF0aW9uIGZvciBsaXN0IGl0ZW0gcmVuZGVyaW5nXG4gICAqIEBzdW1tYXJ5IERlZmluZXMgaG93IGxpc3QgaXRlbXMgc2hvdWxkIGJlIHJlbmRlcmVkIGluIHRoZSBjb21wb25lbnQuXG4gICAqIFRoaXMgcHJvcGVydHkgaG9sZHMgYSBjb25maWd1cmF0aW9uIG9iamVjdCB0aGF0IHNwZWNpZmllcyB0aGUgdGFnIG5hbWVcbiAgICogYW5kIG90aGVyIHByb3BlcnRpZXMgbmVlZGVkIHRvIHJlbmRlciBsaXN0IGl0ZW1zIGNvcnJlY3RseS4gVGhlIHRhZyBwcm9wZXJ0eVxuICAgKiBpZGVudGlmaWVzIHdoaWNoIGNvbXBvbmVudCBzaG91bGQgYmUgdXNlZCB0byByZW5kZXIgZWFjaCBpdGVtIGluIGEgbGlzdC5cbiAgICogQWRkaXRpb25hbCBwcm9wZXJ0aWVzIGNhbiBiZSBpbmNsdWRlZCB0byBjdXN0b21pemUgdGhlIHJlbmRlcmluZyBiZWhhdmlvci5cbiAgICpcbiAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fVxuICAgKiBAZGVmYXVsdCB7dGFnOiBcIlwifVxuICAgKiBAbWVtYmVyT2YgTmd4QmFzZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgaXRlbTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IHRhZzogJycgfTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByaW1hcnkga2V5IGZpZWxkIG5hbWUgZm9yIHRoZSBtb2RlbC5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHdoaWNoIGZpZWxkIGluIHRoZSBtb2RlbCBzaG91bGQgYmUgdXNlZCBhcyB0aGUgcHJpbWFyeSBrZXkuXG4gICAqIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgZm9yIGlkZW50aWZ5aW5nIHVuaXF1ZSByZWNvcmRzIGluIG9wZXJhdGlvbnMgbGlrZSB1cGRhdGUgYW5kIGRlbGV0ZS5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ2lkJ1xuICAgKiBAbWVtYmVyT2YgTmd4QmFzZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgcGshOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBCYXNlIHJvdXRlIGZvciBuYXZpZ2F0aW9uIHJlbGF0ZWQgdG8gdGhpcyBjb21wb25lbnQuXG4gICAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIGJhc2Ugcm91dGUgcGF0aCB1c2VkIGZvciBuYXZpZ2F0aW9uIGFjdGlvbnMgcmVsYXRlZCB0byB0aGlzIGNvbXBvbmVudC5cbiAgICogVGhpcyBpcyBvZnRlbiB1c2VkIGFzIGEgcHJlZml4IGZvciBjb25zdHJ1Y3RpbmcgbmF2aWdhdGlvbiBVUkxzLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAbWVtYmVyT2YgTmd4QmFzZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgcm91dGUhOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBdmFpbGFibGUgQ1JVRCBvcGVyYXRpb25zIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICogQHN1bW1hcnkgRGVmaW5lcyB3aGljaCBDUlVEIG9wZXJhdGlvbnMgKENyZWF0ZSwgUmVhZCwgVXBkYXRlLCBEZWxldGUpIGFyZSBhdmFpbGFibGVcbiAgICogZm9yIHRoaXMgY29tcG9uZW50LiBUaGlzIGFmZmVjdHMgd2hpY2ggb3BlcmF0aW9ucyBjYW4gYmUgcGVyZm9ybWVkIG9uIHRoZSBkYXRhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBbT3BlcmF0aW9uS2V5cy5SRUFEXVxuICAgKiBAbWVtYmVyT2YgTmd4QmFzZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgb3BlcmF0aW9uczogQ3J1ZE9wZXJhdGlvbnNbXSA9IFtPcGVyYXRpb25LZXlzLlJFQURdO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjdXJyZW50IHJlY29yZC5cbiAgICogQHN1bW1hcnkgQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGN1cnJlbnQgcmVjb3JkIGJlaW5nIGRpc3BsYXllZCBvciBtYW5pcHVsYXRlZC5cbiAgICogVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBwcmltYXJ5IGtleSBmb3Igb3BlcmF0aW9ucyBvbiBzcGVjaWZpYyByZWNvcmRzLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nIHwgbnVtYmVyfVxuICAgKiBAbWVtYmVyT2YgTmd4QmFzZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgdWlkITogc3RyaW5nIHwgbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRmllbGQgbWFwcGluZyBjb25maWd1cmF0aW9uLlxuICAgKiBAc3VtbWFyeSBEZWZpbmVzIGhvdyBmaWVsZHMgZnJvbSB0aGUgZGF0YSBtb2RlbCBzaG91bGQgYmUgbWFwcGVkIHRvIHByb3BlcnRpZXMgdXNlZCBieSB0aGUgY29tcG9uZW50LlxuICAgKiBUaGlzIGFsbG93cyBmb3IgZmxleGlibGUgZGF0YSBiaW5kaW5nIGJldHdlZW4gdGhlIG1vZGVsIGFuZCB0aGUgY29tcG9uZW50J3MgZGlzcGxheSBsb2dpYy5cbiAgICpcbiAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZz59XG4gICAqIEBtZW1iZXJPZiBOZ3hCYXNlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBtYXBwZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBsb2NhbGUgdG8gYmUgdXNlZCBmb3IgdHJhbnNsYXRpb25zLlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgdGhlIGxvY2FsZSBpZGVudGlmaWVyIHRvIHVzZSB3aGVuIHRyYW5zbGF0aW5nIGNvbXBvbmVudCB0ZXh0LlxuICAgKiBUaGlzIGNhbiBiZSBzZXQgZXhwbGljaXRseSB2aWEgaW5wdXQgcHJvcGVydHkgdG8gb3ZlcnJpZGUgdGhlIGF1dG9tYXRpY2FsbHkgZGVyaXZlZFxuICAgKiBsb2NhbGUgZnJvbSB0aGUgY29tcG9uZW50IG5hbWUuIFRoZSBsb2NhbGUgaXMgdHlwaWNhbGx5IGEgbGFuZ3VhZ2UgY29kZSAoZS5nLiwgJ2VuJywgJ2ZyJylcbiAgICogb3IgYSBsYW5ndWFnZS1yZWdpb24gY29kZSAoZS5nLiwgJ2VuLVVTJywgJ2ZyLUNBJykgdGhhdCBkZXRlcm1pbmVzIHdoaWNoIHRyYW5zbGF0aW9uXG4gICAqIHNldCB0byB1c2UgZm9yIHRoZSBjb21wb25lbnQncyB0ZXh0IGNvbnRlbnQuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBtZW1iZXJPZiBOZ3hCYXNlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBsb2NhbGUhOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEZXRlcm1pbmVzIGlmIHRoZSBjb21wb25lbnQgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuXG4gICAqIEBzdW1tYXJ5IENvbnRyb2xzIHdoZXRoZXIgdGhlIGNvbXBvbmVudCdzIHRleHQgY29udGVudCBzaG91bGQgYmUgcHJvY2Vzc2VkIGZvciB0cmFuc2xhdGlvbi5cbiAgICogV2hlbiB0cnVlLCB0aGUgY29tcG9uZW50IHdpbGwgYXR0ZW1wdCB0byB0cmFuc2xhdGUgdGV4dCB1c2luZyB0aGUgc3BlY2lmaWVkIGxvY2FsZS5cbiAgICogV2hlbiBmYWxzZSwgdGV4dCBpcyBkaXNwbGF5ZWQgYXMtaXMgd2l0aG91dCB0cmFuc2xhdGlvbi4gVGhpcyBwcm9wZXJ0eSBhY2NlcHRzIGVpdGhlclxuICAgKiBhIGJvb2xlYW4gdmFsdWUgb3IgYSBzdHJpbmcgdGhhdCBjYW4gYmUgY29udmVydGVkIHRvIGEgYm9vbGVhbiAoZS5nLiwgJ3RydWUnLCAnZmFsc2UnLCAnMScsICcwJykuXG4gICAqXG4gICAqIEB0eXBlIHtTdHJpbmdPckJvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqIEBtZW1iZXJPZiBOZ3hCYXNlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICB0cmFuc2xhdGFibGU6IFN0cmluZ09yQm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBZGRpdGlvbmFsIENTUyBjbGFzcyBuYW1lcyB0byBhcHBseSB0byB0aGUgY29tcG9uZW50LlxuICAgKiBAc3VtbWFyeSBBbGxvd3MgY3VzdG9tIENTUyBjbGFzc2VzIHRvIGJlIGFkZGVkIHRvIHRoZSBjb21wb25lbnQncyByb290IGVsZW1lbnQuXG4gICAqIFRoZXNlIGNsYXNzZXMgYXJlIGFwcGVuZGVkIHRvIGFueSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBjbGFzc2VzIGJhc2VkIG9uIG90aGVyXG4gICAqIGNvbXBvbmVudCBwcm9wZXJ0aWVzLiBNdWx0aXBsZSBjbGFzc2VzIGNhbiBiZSBwcm92aWRlZCBhcyBhIHNwYWNlLXNlcGFyYXRlZCBzdHJpbmcuXG4gICAqIFRoaXMgcHJvdmlkZXMgYSB3YXkgdG8gY3VzdG9taXplIHRoZSBjb21wb25lbnQncyBhcHBlYXJhbmNlIGJleW9uZCB0aGUgYnVpbHQtaW4gc3R5bGluZyBvcHRpb25zLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCBcIlwiXG4gICAqIEBtZW1iZXJPZiBOZ3hCYXNlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBjbGFzc05hbWU6IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29tcG9uZW50IHBsYXRmb3JtIHN0eWxlLlxuICAgKiBAc3VtbWFyeSBDb250cm9scyB0aGUgdmlzdWFsIGFwcGVhcmFuY2Ugb2YgdGhlIGNvbXBvbmVudCBiYXNlZCBvbiBwbGF0Zm9ybSBkZXNpZ24gZ3VpZGVsaW5lcy5cbiAgICogVGhlICdpb3MnIG1vZGUgZm9sbG93cyBpT1MgZGVzaWduIHBhdHRlcm5zLCB3aGlsZSAnbWQnIChNYXRlcmlhbCBEZXNpZ24pIGZvbGxvd3MgQW5kcm9pZC9Hb29nbGVcbiAgICogZGVzaWduIHBhdHRlcm5zLiBUaGlzIHByb3BlcnR5IGFmZmVjdHMgdmFyaW91cyB2aXN1YWwgYXNwZWN0cyBzdWNoIGFzIGFuaW1hdGlvbnMsIGZvcm0gZWxlbWVudHMsXG4gICAqIGFuZCBpY29ucy4gU2V0dGluZyB0aGlzIHByb3BlcnR5IGFsbG93cyBjb21wb25lbnRzIHRvIG1haW50YWluIHBsYXRmb3JtLXNwZWNpZmljIHN0eWxpbmdcbiAgICogZm9yIGEgbW9yZSBuYXRpdmUgbG9vayBhbmQgZmVlbC5cbiAgICpcbiAgICogQHR5cGUgeyhcImlvc1wiIHwgXCJtZFwiIHwgdW5kZWZpbmVkKX1cbiAgICogQGRlZmF1bHQgXCJtZFwiXG4gICAqIEBtZW1iZXJPZiBOZ3hCYXNlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBtb2RlOiAnaW9zJyB8ICdtZCcgfCB1bmRlZmluZWQgPSAnbWQnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGxvY2FsZSBkZXJpdmVkIGZyb20gdGhlIGNvbXBvbmVudCdzIGNsYXNzIG5hbWUuXG4gICAqIEBzdW1tYXJ5IFN0b3JlcyB0aGUgYXV0b21hdGljYWxseSBkZXJpdmVkIGxvY2FsZSBiYXNlZCBvbiB0aGUgY29tcG9uZW50J3MgY2xhc3MgbmFtZS5cbiAgICogVGhpcyBpcyBkZXRlcm1pbmVkIGR1cmluZyBjb21wb25lbnQgaW5pdGlhbGl6YXRpb24gYW5kIHNlcnZlcyBhcyBhIGZhbGxiYWNrIHdoZW4gbm9cbiAgICogZXhwbGljaXQgbG9jYWxlIGlzIHByb3ZpZGVkIHZpYSB0aGUgbG9jYWxlIGlucHV0IHByb3BlcnR5LiBUaGUgZGVyaXZhdGlvbiBpcyBoYW5kbGVkXG4gICAqIGJ5IHRoZSBnZXRMb2NhbGVDb250ZXh0IHV0aWxpdHkgZnVuY3Rpb24sIHdoaWNoIGV4dHJhY3RzIGEgbG9jYWxlIGlkZW50aWZpZXJcbiAgICogZnJvbSB0aGUgY29tcG9uZW50J3MgY2xhc3MgbmFtZS5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQG1lbWJlck9mIE5neEJhc2VDb21wb25lbnRcbiAgICovXG4gIGNvbXBvbmVudExvY2FsZSE6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbnRyb2xzIHdoZXRoZXIgY2hpbGQgY29tcG9uZW50cyBzaG91bGQgYmUgcmVuZGVyZWRcbiAgICogQHN1bW1hcnkgRGV0ZXJtaW5lcyBpZiBjaGlsZCBjb21wb25lbnRzIHNob3VsZCBiZSByZW5kZXJlZCBieSB0aGUgY29tcG9uZW50LlxuICAgKiBUaGlzIGNhbiBiZSBzZXQgdG8gYSBib29sZWFuIHZhbHVlIG9yIGEgc3RyaW5nIHRoYXQgY2FuIGJlIGNvbnZlcnRlZCB0byBhIGJvb2xlYW4uXG4gICAqIFdoZW4gdHJ1ZSwgY2hpbGQgY29tcG9uZW50cyBkZWZpbmVkIGluIHRoZSBtb2RlbCB3aWxsIGJlIHJlbmRlcmVkLiBXaGVuIGZhbHNlLFxuICAgKiBjaGlsZCBjb21wb25lbnRzIHdpbGwgYmUgc2tpcHBlZC4gVGhpcyBwcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIHJlbmRlcmluZyBkZXB0aC5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZyB8IFN0cmluZ09yQm9vbGVhbn1cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKiBAbWVtYmVyT2YgTmd4QmFzZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgcmVuZGVyQ2hpbGQ6IHN0cmluZyB8IFN0cmluZ09yQm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBGbGFnIGluZGljYXRpbmcgaWYgdGhlIGNvbXBvbmVudCBoYXMgYmVlbiBpbml0aWFsaXplZFxuICAgKiBAc3VtbWFyeSBUcmFja3Mgd2hldGhlciB0aGUgY29tcG9uZW50IGhhcyBjb21wbGV0ZWQgaXRzIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuXG4gICAqIFRoaXMgZmxhZyBpcyB1c2VkIHRvIHByZXZlbnQgZHVwbGljYXRlIGluaXRpYWxpemF0aW9uIGFuZCB0byBkZXRlcm1pbmUgaWZcbiAgICogY2VydGFpbiBvcGVyYXRpb25zIHRoYXQgcmVxdWlyZSBpbml0aWFsaXphdGlvbiBjYW4gYmUgcGVyZm9ybWVkLlxuICAgKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGluaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFdmVudCBlbWl0dGVyIGZvciBjdXN0b20gcmVuZGVyZXIgZXZlbnRzLlxuICAgKiBAc3VtbWFyeSBFbWl0cyBjdXN0b20gZXZlbnRzIHRoYXQgb2NjdXIgd2l0aGluIGNoaWxkIGNvbXBvbmVudHMgb3IgdGhlIGxheW91dCBpdHNlbGYuXG4gICAqIFRoaXMgYWxsb3dzIHBhcmVudCBjb21wb25lbnRzIHRvIGxpc3RlbiBmb3IgYW5kIHJlc3BvbmQgdG8gdXNlciBpbnRlcmFjdGlvbnMgb3JcbiAgICogc3RhdGUgY2hhbmdlcyB3aXRoaW4gdGhlIGdyaWQgbGF5b3V0LiBFdmVudHMgYXJlIHBhc3NlZCB1cCB0aGUgY29tcG9uZW50IGhpZXJhcmNoeVxuICAgKiB0byBlbmFibGUgY29vcmRpbmF0ZWQgYmVoYXZpb3IgYWNyb3NzIHRoZSBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHR5cGUge0V2ZW50RW1pdHRlcjxSZW5kZXJlckN1c3RvbUV2ZW50Pn1cbiAgICogQG1lbWJlck9mIE5neEJhc2VDb21wb25lbnRcbiAgICovXG4gIEBPdXRwdXQoKVxuICBsaXN0ZW5FdmVudDogRXZlbnRFbWl0dGVyPFJlbmRlcmVyQ3VzdG9tRXZlbnQ+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPFJlbmRlcmVyQ3VzdG9tRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZWZlcmVuY2UgdG8gdGhlIHJlbmRlcmluZyBlbmdpbmUgaW5zdGFuY2VcbiAgICogQHN1bW1hcnkgUHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBOZ3hSZW5kZXJpbmdFbmdpbmUgc2luZ2xldG9uIGluc3RhbmNlLFxuICAgKiB3aGljaCBoYW5kbGVzIHRoZSByZW5kZXJpbmcgb2YgY29tcG9uZW50cyBiYXNlZCBvbiBtb2RlbCBkZWZpbml0aW9ucy5cbiAgICogVGhpcyBlbmdpbmUgaXMgdXNlZCB0byBleHRyYWN0IGRlY29yYXRvciBtZXRhZGF0YSBhbmQgcmVuZGVyIGNoaWxkIGNvbXBvbmVudHMuXG4gICAqXG4gICAqIEB0eXBlIHtOZ3hSZW5kZXJpbmdFbmdpbmV9XG4gICAqL1xuICByZW5kZXJpbmdFbmdpbmU6IE5neFJlbmRlcmluZ0VuZ2luZSA9XG4gICAgTmd4UmVuZGVyaW5nRW5naW5lLmdldCgpIGFzIHVua25vd24gYXMgTmd4UmVuZGVyaW5nRW5naW5lO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gTG9nZ2VyIGluc3RhbmNlIGZvciB0aGUgY29tcG9uZW50LlxuICAgKiBAc3VtbWFyeSBQcm92aWRlcyBsb2dnaW5nIGNhcGFiaWxpdGllcyBmb3IgdGhlIGNvbXBvbmVudCwgYWxsb3dpbmcgZm9yIGNvbnNpc3RlbnRcbiAgICogYW5kIHN0cnVjdHVyZWQgbG9nZ2luZyBvZiBpbmZvcm1hdGlvbiwgd2FybmluZ3MsIGFuZCBlcnJvcnMuIFRoaXMgbG9nZ2VyIGlzIGluaXRpYWxpemVkXG4gICAqIGluIHRoZSBuZ09uSW5pdCBtZXRob2QgdXNpbmcgdGhlIGdldExvZ2dlciBmdW5jdGlvbiBmcm9tIHRoZSBGb3JBbmd1bGFyQ29tbW9uTW9kdWxlLlxuICAgKlxuICAgKiBUaGUgbG9nZ2VyIGlzIHVzZWQgdGhyb3VnaG91dCB0aGUgY29tcG9uZW50IHRvIHJlY29yZCBpbXBvcnRhbnQgZXZlbnRzLCBkZWJ1ZyBpbmZvcm1hdGlvbixcbiAgICogYW5kIHBvdGVudGlhbCBpc3N1ZXMuIEl0IGhlbHBzIGluIG1vbml0b3JpbmcgdGhlIGNvbXBvbmVudCdzIGJlaGF2aW9yLCB0cmFja2luZyB0aGUgZmxvd1xuICAgKiBvZiBvcGVyYXRpb25zLCBhbmQgZmFjaWxpdGF0aW5nIGVhc2llciBkZWJ1Z2dpbmcgYW5kIG1haW50ZW5hbmNlLlxuICAgKlxuICAgKiBAdHlwZSB7TG9nZ2VyfVxuICAgKiBAcHJpdmF0ZVxuICAgKiBAbWVtYmVyT2YgTmd4QmFzZUNvbXBvbmVudFxuICAgKi9cbiAgbG9nZ2VyITogTG9nZ2VyO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBOZ3hCYXNlQ29tcG9uZW50LlxuICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgYmFzZSBjb21wb25lbnQgd2l0aCB0aGUgcHJvdmlkZWQgaW5zdGFuY2UgdG9rZW4uXG4gICAqIFRoaXMgY29uc3RydWN0b3Igc2V0cyB1cCB0aGUgZnVuZGFtZW50YWwgcHJvcGVydGllcyByZXF1aXJlZCBieSBhbGwgRGVjYWYgY29tcG9uZW50cyxcbiAgICogaW5jbHVkaW5nIHRoZSBjb21wb25lbnQgbmFtZSwgbG9jYWxlIHNldHRpbmdzLCBhbmQgbG9nZ2luZyBjYXBhYmlsaXRpZXMuIFRoZSBpbnN0YW5jZVxuICAgKiB0b2tlbiBpcyB1c2VkIGZvciBjb21wb25lbnQgaWRlbnRpZmljYXRpb24gYW5kIGxvY2FsZSBkZXJpdmF0aW9uLlxuICAgKlxuICAgKiBUaGUgY29uc3RydWN0b3IgcGVyZm9ybXMgdGhlIGZvbGxvd2luZyBpbml0aWFsaXphdGlvbiBzdGVwczpcbiAgICogMS4gU2V0cyB0aGUgY29tcG9uZW50TmFtZSBmcm9tIHRoZSBwcm92aWRlZCBpbnN0YW5jZSB0b2tlblxuICAgKiAyLiBEZXJpdmVzIHRoZSBjb21wb25lbnRMb2NhbGUgZnJvbSB0aGUgY2xhc3MgbmFtZSB1c2luZyB1dGlsaXR5IGZ1bmN0aW9uc1xuICAgKiAzLiBJbml0aWFsaXplcyB0aGUgbG9nZ2VyIGluc3RhbmNlIGZvciB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpbnN0YW5jZSAtIFRoZSBjb21wb25lbnQgaW5zdGFuY2UgdG9rZW4gdXNlZCBmb3IgaWRlbnRpZmljYXRpb25cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQSBhcyBBbmd1bGFyXG4gICAqICAgcGFydGljaXBhbnQgQyBhcyBDb21wb25lbnRcbiAgICogICBwYXJ0aWNpcGFudCBCIGFzIE5neEJhc2VDb21wb25lbnRcbiAgICogICBwYXJ0aWNpcGFudCBVIGFzIFV0aWxzXG4gICAqICAgcGFydGljaXBhbnQgTCBhcyBMb2dnZXJcbiAgICpcbiAgICogICBBLT4+QzogbmV3IENvbXBvbmVudChpbnN0YW5jZSlcbiAgICogICBDLT4+Qjogc3VwZXIoaW5zdGFuY2UpXG4gICAqICAgQi0+PkI6IFNldCBjb21wb25lbnROYW1lID0gaW5zdGFuY2VcbiAgICogICBCLT4+VTogZ2V0TG9jYWxlQ29udGV4dChpbnN0YW5jZSlcbiAgICogICBVLS0+PkI6IFJldHVybiBkZXJpdmVkIGxvY2FsZVxuICAgKiAgIEItPj5COiBTZXQgY29tcG9uZW50TG9jYWxlXG4gICAqICAgQi0+Pkw6IGdldExvZ2dlcih0aGlzKVxuICAgKiAgIEwtLT4+QjogUmV0dXJuIGxvZ2dlciBpbnN0YW5jZVxuICAgKiAgIEItPj5COiBTZXQgbG9nZ2VyXG4gICAqXG4gICAqIEBtZW1iZXJPZiBOZ3hCYXNlQ29tcG9uZW50XG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L3ByZWZlci1pbmplY3RcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKEBJbmplY3QoJ2luc3RhbmNlVG9rZW4nKSBwcm90ZWN0ZWQgaW5zdGFuY2U6IHN0cmluZykge1xuICAgIHRoaXMuY29tcG9uZW50TmFtZSA9IGluc3RhbmNlO1xuICAgIHRoaXMuY29tcG9uZW50TG9jYWxlID0gZ2V0TG9jYWxlQ29udGV4dChpbnN0YW5jZSk7XG4gICAgdGhpcy5sb2dnZXIgPSBnZXRMb2dnZXIodGhpcyk7XG4gICAgdGhpcy5nZXRMb2NhbGUodGhpcy50cmFuc2xhdGFibGUpO1xuICAgIHRoaXMudWlkID0gZ2VuZXJhdGVSYW5kb21WYWx1ZSgxMik7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHRlciBmb3IgdGhlIHJlcG9zaXRvcnkgaW5zdGFuY2UuXG4gICAqIEBzdW1tYXJ5IFByb3ZpZGVzIGEgY29ubmVjdGlvbiB0byB0aGUgZGF0YSBsYXllciBmb3IgcmV0cmlldmluZyBhbmQgbWFuaXB1bGF0aW5nIGRhdGEuXG4gICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBgX3JlcG9zaXRvcnlgIHByb3BlcnR5IGlmIGl0IGlzIG5vdCBhbHJlYWR5IHNldCwgZW5zdXJpbmdcbiAgICogdGhhdCBhIHNpbmdsZSBpbnN0YW5jZSBvZiB0aGUgcmVwb3NpdG9yeSBpcyB1c2VkIHRocm91Z2hvdXQgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogVGhlIHJlcG9zaXRvcnkgaXMgdXNlZCB0byBwZXJmb3JtIENSVUQgb3BlcmF0aW9ucyBvbiB0aGUgZGF0YSBtb2RlbCwgc3VjaCBhcyBmZXRjaGluZyBkYXRhLFxuICAgKiBjcmVhdGluZyBuZXcgaXRlbXMsIHVwZGF0aW5nIGV4aXN0aW5nIGl0ZW1zLCBhbmQgZGVsZXRpbmcgaXRlbXMuIEl0IGFsc28gcHJvdmlkZXMgbWV0aG9kc1xuICAgKiBmb3IgcXVlcnlpbmcgYW5kIGZpbHRlcmluZyBkYXRhIGJhc2VkIG9uIHNwZWNpZmljIGNyaXRlcmlhLlxuICAgKlxuICAgKiBAcmV0dXJucyB7RGVjYWZSZXBvc2l0b3J5PE1vZGVsPn0gVGhlIGluaXRpYWxpemVkIHJlcG9zaXRvcnkgaW5zdGFuY2UuXG4gICAqIEBwcml2YXRlXG4gICAqIEBtZW1iZXJPZiBOZ3hCYXNlQ29tcG9uZW50XG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IHJlcG9zaXRvcnkoKTogRGVjYWZSZXBvc2l0b3J5PE1vZGVsPiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghdGhpcy5fcmVwb3NpdG9yeSkge1xuICAgICAgICBjb25zdCBtb2RlbE5hbWUgPSAodGhpcy5tb2RlbCBhcyBNb2RlbCkuY29uc3RydWN0b3IubmFtZTtcbiAgICAgICAgY29uc3QgY29uc3RydWN0b3IgPSBNb2RlbC5nZXQobW9kZWxOYW1lKTtcbiAgICAgICAgaWYgKCFjb25zdHJ1Y3RvcilcbiAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgICAgICdDYW5ub3QgZmluZCBtb2RlbC4gd2FzIGl0IHJlZ2lzdGVyZWQgd2l0aCBAbW9kZWw/J1xuICAgICAgICAgICk7XG4gICAgICAgIHRoaXMuX3JlcG9zaXRvcnkgPSBSZXBvc2l0b3J5LmZvck1vZGVsKGNvbnN0cnVjdG9yKTtcbiAgICAgICAgdGhpcy5tb2RlbCA9IG5ldyBjb25zdHJ1Y3RvcigpIGFzIE1vZGVsO1xuICAgICAgICBpZiAodGhpcy5tb2RlbCAmJiAhdGhpcy5waylcbiAgICAgICAgICB0aGlzLnBrID1cbiAgICAgICAgICAgICh0aGlzLl9yZXBvc2l0b3J5IGFzIHVua25vd24gYXMgRGVjYWZSZXBvc2l0b3J5PE1vZGVsPikucGsgfHwgJ2lkJztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoKGVycm9yIGFzIEVycm9yKT8ubWVzc2FnZSB8fCAoZXJyb3IgYXMgc3RyaW5nKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9yZXBvc2l0b3J5O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIGNoYW5nZXMgdG8gY29tcG9uZW50IGlucHV0c1xuICAgKiBAc3VtbWFyeSBUaGlzIEFuZ3VsYXIgbGlmZWN5Y2xlIGhvb2sgaXMgY2FsbGVkIHdoZW4gaW5wdXQgcHJvcGVydGllcyBjaGFuZ2UuXG4gICAqIEl0IHJlc3BvbmRzIHRvIGNoYW5nZXMgaW4gdGhlIG1vZGVsLCBsb2NhbGUsIG9yIHRyYW5zbGF0YWJsZSBwcm9wZXJ0aWVzIGJ5XG4gICAqIHVwZGF0aW5nIHRoZSBjb21wb25lbnQncyBpbnRlcm5hbCBzdGF0ZSBhY2NvcmRpbmdseS4gV2hlbiB0aGUgbW9kZWwgY2hhbmdlcyxcbiAgICogaXQgY2FsbHMgZ2V0TW9kZWwgdG8gcHJvY2VzcyB0aGUgbmV3IG1vZGVsIGFuZCBnZXRMb2NhbGUgdG8gdXBkYXRlIHRoZSBsb2NhbGUuXG4gICAqIFdoZW4gbG9jYWxlIG9yIHRyYW5zbGF0YWJsZSBwcm9wZXJ0aWVzIGNoYW5nZSwgaXQgY2FsbHMgZ2V0TG9jYWxlIHRvIHVwZGF0ZVxuICAgKiB0aGUgdHJhbnNsYXRpb24gc2V0dGluZ3MuXG4gICAqXG4gICAqIEBwYXJhbSB7U2ltcGxlQ2hhbmdlc30gY2hhbmdlcyAtIE9iamVjdCBjb250YWluaW5nIGNoYW5nZWQgcHJvcGVydGllc1xuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzW0Jhc2VDb21wb25lbnRQcm9wcy5NT0RFTF0pIHtcbiAgICAgIGNvbnN0IHsgY3VycmVudFZhbHVlIH0gPSBjaGFuZ2VzW0Jhc2VDb21wb25lbnRQcm9wcy5NT0RFTF07XG4gICAgICBpZiAoY3VycmVudFZhbHVlKSB0aGlzLmdldE1vZGVsKGN1cnJlbnRWYWx1ZSk7XG4gICAgICB0aGlzLmdldExvY2FsZSh0aGlzLnRyYW5zbGF0YWJsZSk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGNoYW5nZXNbQmFzZUNvbXBvbmVudFByb3BzLklOSVRJQUxJWkVEXSB8fFxuICAgICAgY2hhbmdlc1tCYXNlQ29tcG9uZW50UHJvcHMuTE9DQUxFXSB8fFxuICAgICAgY2hhbmdlc1tCYXNlQ29tcG9uZW50UHJvcHMuVFJBTlNMQVRBQkxFXVxuICAgIClcbiAgICAgIHRoaXMuZ2V0TG9jYWxlKHRoaXMudHJhbnNsYXRhYmxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2V0cyB0aGUgYXBwcm9wcmlhdGUgbG9jYWxlIHN0cmluZyBiYXNlZCBvbiB0aGUgdHJhbnNsYXRhYmxlIGZsYWcgYW5kIGF2YWlsYWJsZSBsb2NhbGVzLlxuICAgKiBAc3VtbWFyeSBEZXRlcm1pbmVzIHdoaWNoIGxvY2FsZSBzdHJpbmcgdG8gdXNlIGZvciB0cmFuc2xhdGlvbiBiYXNlZCBvbiB0aGUgdHJhbnNsYXRhYmxlIGZsYWdcbiAgICogYW5kIGF2YWlsYWJsZSBsb2NhbGUgc2V0dGluZ3MuIFRoaXMgbWV0aG9kIGZpcnN0IGNvbnZlcnRzIHRoZSB0cmFuc2xhdGFibGUgcGFyYW1ldGVyIHRvIGEgYm9vbGVhblxuICAgKiB1c2luZyB0aGUgc3RyaW5nVG9Cb29sZWFuIHV0aWxpdHkgZnVuY3Rpb24uIElmIHRyYW5zbGF0YWJsZSBpcyBmYWxzZSwgaXQgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcsXG4gICAqIGluZGljYXRpbmcgbm8gdHJhbnNsYXRpb24gc2hvdWxkIGJlIHBlcmZvcm1lZC4gSWYgdHJhbnNsYXRhYmxlIGlzIHRydWUsIGl0IGNoZWNrcyBmb3IgYW4gZXhwbGljaXRseVxuICAgKiBwcm92aWRlZCBsb2NhbGUgdmlhIHRoZSBsb2NhbGUgcHJvcGVydHkuIElmIG5vIGV4cGxpY2l0IGxvY2FsZSBpcyBhdmFpbGFibGUsIGl0IGZhbGxzIGJhY2sgdG8gdGhlXG4gICAqIGNvbXBvbmVudExvY2FsZSBkZXJpdmVkIGZyb20gdGhlIGNvbXBvbmVudCdzIGNsYXNzIG5hbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nT3JCb29sZWFufSB0cmFuc2xhdGFibGUgLSBXaGV0aGVyIHRoZSBjb21wb25lbnQgc2hvdWxkIGJlIHRyYW5zbGF0ZWRcbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgbG9jYWxlIHN0cmluZyB0byB1c2UgZm9yIHRyYW5zbGF0aW9uLCBvciBlbXB0eSBzdHJpbmcgaWYgbm90IHRyYW5zbGF0YWJsZVxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBDIGFzIENvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IE4gYXMgTmd4QmFzZUNvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IFMgYXMgU3RyaW5nVXRpbHNcbiAgICpcbiAgICogICBDLT4+TjogZ2V0TG9jYWxlKHRyYW5zbGF0YWJsZSlcbiAgICogICBOLT4+Uzogc3RyaW5nVG9Cb29sZWFuKHRyYW5zbGF0YWJsZSlcbiAgICogICBTLS0+Pk46IFJldHVybiBib29sZWFuIHZhbHVlXG4gICAqICAgTi0+Pk46IFN0b3JlIGluIHRoaXMudHJhbnNsYXRhYmxlXG4gICAqICAgYWx0IHRyYW5zbGF0YWJsZSBpcyBmYWxzZVxuICAgKiAgICAgTi0tPj5DOiBSZXR1cm4gZW1wdHkgc3RyaW5nXG4gICAqICAgZWxzZSB0cmFuc2xhdGFibGUgaXMgdHJ1ZVxuICAgKiAgICAgYWx0IHRoaXMubG9jYWxlIGlzIGRlZmluZWRcbiAgICogICAgICAgTi0tPj5DOiBSZXR1cm4gdGhpcy5sb2NhbGVcbiAgICogICAgIGVsc2UgdGhpcy5sb2NhbGUgaXMgbm90IGRlZmluZWRcbiAgICogICAgICAgTi0tPj5DOiBSZXR1cm4gdGhpcy5jb21wb25lbnRMb2NhbGVcbiAgICogICAgIGVuZFxuICAgKiAgIGVuZFxuICAgKi9cbiAgZ2V0TG9jYWxlKHRyYW5zbGF0YWJsZTogU3RyaW5nT3JCb29sZWFuKTogc3RyaW5nIHtcbiAgICB0aGlzLnRyYW5zbGF0YWJsZSA9IHN0cmluZ1RvQm9vbGVhbih0cmFuc2xhdGFibGUpO1xuICAgIGlmICghdGhpcy50cmFuc2xhdGFibGUpIHJldHVybiAnJztcbiAgICBpZiAoIXRoaXMubG9jYWxlKSB0aGlzLmxvY2FsZSA9IHRoaXMuY29tcG9uZW50TG9jYWxlO1xuICAgIHJldHVybiB0aGlzLmxvY2FsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2V0cyB0aGUgcm91dGUgZm9yIHRoZSBjb21wb25lbnRcbiAgICogQHN1bW1hcnkgUmV0cmlldmVzIHRoZSByb3V0ZSBwYXRoIGZvciB0aGUgY29tcG9uZW50LCBnZW5lcmF0aW5nIG9uZSBiYXNlZCBvbiB0aGUgbW9kZWxcbiAgICogaWYgbm8gcm91dGUgaXMgZXhwbGljaXRseSBzZXQuIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiBhIHJvdXRlIGlzIGFscmVhZHkgZGVmaW5lZCwgYW5kIGlmIG5vdCxcbiAgICogaXQgY3JlYXRlcyBhIGRlZmF1bHQgcm91dGUgYmFzZWQgb24gdGhlIG1vZGVsJ3MgY29uc3RydWN0b3IgbmFtZS4gVGhlIGdlbmVyYXRlZCByb3V0ZSBmb2xsb3dzXG4gICAqIHRoZSBwYXR0ZXJuICcvbW9kZWwve01vZGVsTmFtZX0nLiBUaGlzIGlzIHVzZWZ1bCBmb3IgYXV0b21hdGljIHJvdXRpbmcgaW4gQ1JVRCBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSByb3V0ZSBwYXRoIGZvciB0aGUgY29tcG9uZW50LCBvciBlbXB0eSBzdHJpbmcgaWYgbm8gcm91dGUgaXMgYXZhaWxhYmxlXG4gICAqL1xuICBnZXRSb3V0ZSgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5yb3V0ZSAmJiB0aGlzLm1vZGVsIGluc3RhbmNlb2YgTW9kZWwpXG4gICAgICB0aGlzLnJvdXRlID0gYC9tb2RlbC8ke3RoaXMubW9kZWw/LmNvbnN0cnVjdG9yLm5hbWV9YDtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZSB8fCAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVzb2x2ZXMgYW5kIHNldHMgdGhlIGNvbXBvbmVudCdzIG1vZGVsXG4gICAqIEBzdW1tYXJ5IFByb2Nlc3NlcyB0aGUgcHJvdmlkZWQgbW9kZWwgcGFyYW1ldGVyLCB3aGljaCBjYW4gYmUgZWl0aGVyIGEgTW9kZWwgaW5zdGFuY2VcbiAgICogb3IgYSBzdHJpbmcgaWRlbnRpZmllci4gSWYgYSBzdHJpbmcgaXMgcHJvdmlkZWQsIGl0IGF0dGVtcHRzIHRvIHJlc29sdmUgdGhlIGFjdHVhbCBtb2RlbFxuICAgKiBmcm9tIHRoZSBpbmplY3RhYmxlcyByZWdpc3RyeS4gQWZ0ZXIgcmVzb2x2aW5nIHRoZSBtb2RlbCwgaXQgY2FsbHMgc2V0TW9kZWxEZWZpbml0aW9uc1xuICAgKiB0byBjb25maWd1cmUgdGhlIGNvbXBvbmVudCBiYXNlZCBvbiB0aGUgbW9kZWwncyBtZXRhZGF0YS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBNb2RlbH0gbW9kZWwgLSBUaGUgbW9kZWwgaW5zdGFuY2Ugb3IgaWRlbnRpZmllciBzdHJpbmdcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICovXG4gIGdldE1vZGVsKG1vZGVsOiBzdHJpbmcgfCBNb2RlbCk6IHZvaWQge1xuICAgIGlmICghKG1vZGVsIGluc3RhbmNlb2YgTW9kZWwpKVxuICAgICAgdGhpcy5tb2RlbCA9IGdldEluamVjdGFibGVzUmVnaXN0cnkoKS5nZXQobW9kZWwpIGFzIE1vZGVsO1xuICAgIHRoaXMuc2V0TW9kZWxEZWZpbml0aW9ucyh0aGlzLm1vZGVsIGFzIE1vZGVsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29uZmlndXJlcyBjb21wb25lbnQgcHJvcGVydGllcyBiYXNlZCBvbiBtb2RlbCBtZXRhZGF0YVxuICAgKiBAc3VtbWFyeSBFeHRyYWN0cyBhbmQgYXBwbGllcyBjb25maWd1cmF0aW9uIGZyb20gdGhlIG1vZGVsJ3MgZGVjb3JhdG9ycyB0byBzZXQgdXBcbiAgICogdGhlIGNvbXBvbmVudC4gVGhpcyBtZXRob2QgdXNlcyB0aGUgcmVuZGVyaW5nIGVuZ2luZSB0byByZXRyaWV2ZSBkZWNvcmF0b3IgbWV0YWRhdGFcbiAgICogZnJvbSB0aGUgbW9kZWwsIHRoZW4gY29uZmlndXJlcyB0aGUgY29tcG9uZW50J3MgbWFwcGVyIGFuZCBpdGVtIHByb3BlcnRpZXMgYWNjb3JkaW5nbHkuXG4gICAqIEl0IGVuc3VyZXMgdGhlIHJvdXRlIGlzIHByb3Blcmx5IHNldCBhbmQgbWVyZ2VzIHZhcmlvdXMgcHJvcGVydGllcyBmcm9tIHRoZSBtb2RlbCdzXG4gICAqIG1ldGFkYXRhIGludG8gdGhlIGNvbXBvbmVudCdzIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7TW9kZWx9IG1vZGVsIC0gVGhlIG1vZGVsIHRvIGV4dHJhY3QgY29uZmlndXJhdGlvbiBmcm9tXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICBzZXRNb2RlbERlZmluaXRpb25zKG1vZGVsOiBNb2RlbCk6IHZvaWQge1xuICAgIGlmIChtb2RlbCBpbnN0YW5jZW9mIE1vZGVsKSB7XG4gICAgICB0aGlzLmdldFJvdXRlKCk7XG4gICAgICB0aGlzLm1vZGVsID0gbW9kZWw7XG4gICAgICBjb25zdCBmaWVsZCA9IHRoaXMucmVuZGVyaW5nRW5naW5lLmdldERlY29yYXRvcnModGhpcy5tb2RlbCBhcyBNb2RlbCwge30pO1xuICAgICAgY29uc3QgeyBwcm9wcywgaXRlbSwgY2hpbGRyZW4gfSA9IGZpZWxkO1xuICAgICAgdGhpcy5wcm9wcyA9IE9iamVjdC5hc3NpZ24ocHJvcHMgfHwge30sIHsgY2hpbGRyZW46IGNoaWxkcmVuIHx8IFtdIH0pO1xuICAgICAgaWYgKGl0ZW0/LnByb3BzPy5bJ21hcHBlciddKSB0aGlzLm1hcHBlciA9IGl0ZW0/LnByb3BzIVsnbWFwcGVyJ10gfHwge307XG4gICAgICB0aGlzLml0ZW0gPSB7XG4gICAgICAgIHRhZzogaXRlbT8udGFnIHx8ICcnLFxuICAgICAgICAuLi5pdGVtPy5wcm9wcyxcbiAgICAgICAgLi4uKHRoaXMubWFwcGVyID8geyBtYXBwZXI6IHRoaXMubWFwcGVyIH0gOiB7fSksXG4gICAgICAgIC4uLnsgcm91dGU6IGl0ZW0/LnByb3BzPy5bJ3JvdXRlJ10gfHwgdGhpcy5yb3V0ZSB9LFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEluaXRpYWxpemVzIHRoZSBjb21wb25lbnRcbiAgICogQHN1bW1hcnkgUGVyZm9ybXMgb25lLXRpbWUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGNvbXBvbmVudC4gVGhpcyBtZXRob2QgY2hlY2tzIGlmXG4gICAqIHRoZSBjb21wb25lbnQgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZCB0byBwcmV2ZW50IGR1cGxpY2F0ZSBpbml0aWFsaXphdGlvbi5cbiAgICogV2hlbiBjYWxsZWQgZm9yIHRoZSBmaXJzdCB0aW1lLCBpdCBzZXRzIHRoZSBpbml0aWFsaXplZCBmbGFnIHRvIHRydWUgYW5kIGxvZ3NcbiAgICogYW4gaW5pdGlhbGl6YXRpb24gbWVzc2FnZSB3aXRoIHRoZSBjb21wb25lbnQgbmFtZS4gVGhpcyBtZXRob2QgaXMgdHlwaWNhbGx5IGNhbGxlZFxuICAgKiBkdXJpbmcgdGhlIGNvbXBvbmVudCdzIGxpZmVjeWNsZSBzZXR1cC5cbiAgICovXG4gIGluaXRpYWxpemUoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgY3VzdG9tIGV2ZW50cyBmcm9tIGNoaWxkIGNvbXBvbmVudHMuXG4gICAqIEBzdW1tYXJ5IFJlY2VpdmVzIGV2ZW50cyBmcm9tIGNoaWxkIHJlbmRlcmVyIGNvbXBvbmVudHMgYW5kIGZvcndhcmRzIHRoZW0gdG8gcGFyZW50XG4gICAqIGNvbXBvbmVudHMgdGhyb3VnaCB0aGUgbGlzdGVuRXZlbnQgb3V0cHV0LiBUaGlzIGNyZWF0ZXMgYW4gZXZlbnQgcHJvcGFnYXRpb24gY2hhaW5cbiAgICogdGhhdCBhbGxvd3MgZXZlbnRzIHRvIGJ1YmJsZSB1cCB0aHJvdWdoIHRoZSBjb21wb25lbnQgaGllcmFyY2h5LCBlbmFibGluZyBjb29yZGluYXRlZFxuICAgKiByZXNwb25zZXMgdG8gdXNlciBpbnRlcmFjdGlvbnMgYWNyb3NzIHRoZSBsYXlvdXQgc3RydWN0dXJlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlbmRlcmVyQ3VzdG9tRXZlbnR9IGV2ZW50IC0gVGhlIGN1c3RvbSBldmVudCBmcm9tIGEgY2hpbGQgY29tcG9uZW50XG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IEMgYXMgQ2hpbGQgQ29tcG9uZW50XG4gICAqICAgcGFydGljaXBhbnQgTCBhcyBOZ3hCYXNlQ29tcG9uZW50XG4gICAqICAgcGFydGljaXBhbnQgUCBhcyBQYXJlbnQgQ29tcG9uZW50XG4gICAqXG4gICAqICAgQy0+Pkw6IEVtaXQgUmVuZGVyZXJDdXN0b21FdmVudFxuICAgKiAgIEwtPj5MOiBoYW5kbGVFdmVudChldmVudClcbiAgICogICBMLT4+UDogbGlzdGVuRXZlbnQuZW1pdChldmVudClcbiAgICogICBOb3RlIG92ZXIgUDogSGFuZGxlIGV2ZW50IGluIHBhcmVudFxuICAgKlxuICAgKiBAbWVtYmVyT2YgTmd4QmFzZUNvbXBvbmVudFxuICAgKi9cbiAgaGFuZGxlRXZlbnQoZXZlbnQ6IFJlbmRlcmVyQ3VzdG9tRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RlbkV2ZW50LmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUcmFja3MgaXRlbXMgaW4gbmdGb3IgbG9vcHMgZm9yIG9wdGltYWwgY2hhbmdlIGRldGVjdGlvbi5cbiAgICogQHN1bW1hcnkgUHJvdmlkZXMgYSB0cmFja2luZyBmdW5jdGlvbiBmb3IgQW5ndWxhcidzICpuZ0ZvciBkaXJlY3RpdmUgdG8gb3B0aW1pemUgcmVuZGVyaW5nXG4gICAqIHBlcmZvcm1hbmNlLiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgdW5pcXVlIGlkZW50aWZpZXJzIGZvciBsaXN0IGl0ZW1zIGJhc2VkIG9uIHRoZWlyIGluZGV4XG4gICAqIGFuZCBjb250ZW50LCBhbGxvd2luZyBBbmd1bGFyIHRvIGVmZmljaWVudGx5IHRyYWNrIGNoYW5nZXMgYW5kIG1pbmltaXplIERPTSBtYW5pcHVsYXRpb25zXG4gICAqIGR1cmluZyBsaXN0IHVwZGF0ZXMuIFRoZSB0cmFja2luZyBmdW5jdGlvbiBpcyBlc3NlbnRpYWwgZm9yIG1haW50YWluaW5nIGNvbXBvbmVudCBzdGF0ZVxuICAgKiBhbmQgcHJldmVudGluZyB1bm5lY2Vzc2FyeSByZS1yZW5kZXJpbmcgb2YgdW5jaGFuZ2VkIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIGl0ZW0gaW4gdGhlIGxpc3RcbiAgICogQHBhcmFtIHtLZXlWYWx1ZSB8IHN0cmluZyB8IG51bWJlcn0gaXRlbSAtIFRoZSBpdGVtIGRhdGEgdG8gdHJhY2tcbiAgICogQHJldHVybnMge3N0cmluZyB8IG51bWJlcn0gQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGl0ZW1cbiAgICogQG1lbWJlck9mIE5neEJhc2VDb21wb25lbnRcbiAgICovXG4gIHRyYWNrSXRlbUZuKFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgaXRlbTogS2V5VmFsdWUgfCBzdHJpbmcgfCBudW1iZXJcbiAgKTogc3RyaW5nIHwgbnVtYmVyIHtcbiAgICByZXR1cm4gYCR7aW5kZXh9LSR7aXRlbX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQYXJzZXMgYW5kIGFwcGxpZXMgcHJvcGVydGllcyBmcm9tIHRoZSBwcm9wcyBvYmplY3QgdG8gdGhlIGNvbXBvbmVudCBpbnN0YW5jZS5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgcHJvcGVydGllcyBvZiB0aGUgcHJvdmlkZWQgaW5zdGFuY2Ugb2JqZWN0XG4gICAqIGFuZCBhcHBsaWVzIGFueSBtYXRjaGluZyBwcm9wZXJ0aWVzIGZyb20gdGhlIGNvbXBvbmVudCdzIHByb3BzIGNvbmZpZ3VyYXRpb24gdG8gdGhlXG4gICAqIGNvbXBvbmVudCBpbnN0YW5jZS4gVGhpcyBhbGxvd3MgZm9yIGR5bmFtaWMgcHJvcGVydHkgYXNzaWdubWVudCBiYXNlZCBvbiBjb25maWd1cmF0aW9uXG4gICAqIHN0b3JlZCBpbiB0aGUgcHJvcHMgb2JqZWN0LCBlbmFibGluZyBmbGV4aWJsZSBjb21wb25lbnQgY3VzdG9taXphdGlvbiB3aXRob3V0IHJlcXVpcmluZ1xuICAgKiBleHBsaWNpdCBwcm9wZXJ0eSBiaW5kaW5nIGZvciBldmVyeSBwb3NzaWJsZSBjb25maWd1cmF0aW9uIG9wdGlvbi5cbiAgICpcbiAgICogVGhlIG1ldGhvZCBwZXJmb3JtcyBhIHNhZmUgcHJvcGVydHkgYXNzaWdubWVudCBieSBjaGVja2luZyBpZiBlYWNoIGtleSBmcm9tIHRoZSBpbnN0YW5jZVxuICAgKiBleGlzdHMgaW4gdGhlIHByb3BzIG9iamVjdCBiZWZvcmUgYXBwbHlpbmcgaXQuIFRoaXMgcHJldmVudHMgYWNjaWRlbnRhbCBwcm9wZXJ0eVxuICAgKiBvdmVyd3JpdGluZyBhbmQgZW5zdXJlcyBvbmx5IGludGVuZGVkIHByb3BlcnRpZXMgYXJlIG1vZGlmaWVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0tleVZhbHVlfSBpbnN0YW5jZSAtIFRoZSBjb21wb25lbnQgaW5zdGFuY2Ugb2JqZWN0IHRvIHByb2Nlc3NcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQyBhcyBDb21wb25lbnRcbiAgICogICBwYXJ0aWNpcGFudCBCIGFzIE5neEJhc2VDb21wb25lbnRcbiAgICogICBwYXJ0aWNpcGFudCBQIGFzIFByb3BzIE9iamVjdFxuICAgKlxuICAgKiAgIEMtPj5COiBwYXJzZVByb3BzKGluc3RhbmNlKVxuICAgKiAgIEItPj5COiBHZXQgT2JqZWN0LmtleXMoaW5zdGFuY2UpXG4gICAqICAgbG9vcCBGb3IgZWFjaCBrZXkgaW4gaW5zdGFuY2VcbiAgICogICAgIEItPj5QOiBDaGVjayBpZiBrZXkgZXhpc3RzIGluIHRoaXMucHJvcHNcbiAgICogICAgIGFsdCBLZXkgZXhpc3RzIGluIHByb3BzXG4gICAqICAgICAgIEItPj5COiBTZXQgdGhpc1trZXldID0gdGhpcy5wcm9wc1trZXldXG4gICAqICAgICBlbHNlIEtleSBub3QgaW4gcHJvcHNcbiAgICogICAgICAgTm90ZSBvdmVyIEI6IFNraXAgdGhpcyBrZXlcbiAgICogICAgIGVuZFxuICAgKiAgIGVuZFxuICAgKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBtZW1iZXJPZiBOZ3hCYXNlQ29tcG9uZW50XG4gICAqL1xuICBwcm90ZWN0ZWQgcGFyc2VQcm9wcyhpbnN0YW5jZTogS2V5VmFsdWUpOiB2b2lkIHtcbiAgICBPYmplY3Qua2V5cyhpbnN0YW5jZSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5wcm9wcykuaW5jbHVkZXMoa2V5KSlcbiAgICAgICAgKHRoaXMgYXMgS2V5VmFsdWUpW2tleV0gPSB0aGlzLnByb3BzW2tleV07XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
541
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmd4QmFzZUNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL05neEJhc2VDb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLEtBQUssRUFDTCxTQUFTLEVBQ1QsTUFBTSxFQUNOLFNBQVMsRUFDVCxVQUFVLEVBR1YsTUFBTSxFQUNOLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUN0QixlQUFlLEdBQ2hCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZELE9BQU8sRUFFTCxhQUFhLEVBQ2IsYUFBYSxHQUNkLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTFELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRTVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkRHO0FBTUgsTUFBTSxPQUFnQixnQkFBZ0I7SUF1U3BDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FpQ0c7SUFDSCx5REFBeUQ7SUFDekQsWUFBeUQsUUFBZ0I7UUFBaEIsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQWpRekU7Ozs7Ozs7Ozs7O1dBV0c7UUFFSCxVQUFLLEdBQTRCLEVBQUUsQ0FBQztRQUVwQzs7Ozs7Ozs7Ozs7V0FXRztRQUVILFNB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QUN2QixJQUFJLEVBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFO2lCQUM3Qjs7MEJBMlV3QixNQUFNOzJCQUFDLGVBQWU7eUNBOVQ3QyxTQUFTO3NCQURSLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQWlDMUQsVUFBVTtzQkFEVCxLQUFLO2dCQVlOLEtBQUs7c0JBREosS0FBSztnQkFnQ04sS0FBSztzQkFESixLQUFLO2dCQWdCTixJQUFJO3NCQURILEtBQUs7Z0JBYU4sRUFBRTtzQkFERCxLQUFLO2dCQVlOLEtBQUs7c0JBREosS0FBSztnQkFZTixVQUFVO3NCQURULEtBQUs7Z0JBWU4sR0FBRztzQkFERixLQUFLO2dCQVlOLE1BQU07c0JBREwsS0FBSztnQkFlTixNQUFNO3NCQURMLEtBQUs7Z0JBZU4sWUFBWTtzQkFEWCxLQUFLO2dCQWVOLFNBQVM7c0JBRFIsS0FBSztnQkFnQk4sSUFBSTtzQkFESCxLQUFLO2dCQTRCTixXQUFXO3NCQURWLEtBQUs7Z0JBeUJOLFdBQVc7c0JBRFYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIElucHV0LFxuICBDb21wb25lbnQsXG4gIEluamVjdCxcbiAgVmlld0NoaWxkLFxuICBFbGVtZW50UmVmLFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEtleVZhbHVlLCBSZW5kZXJlckN1c3RvbUV2ZW50LCBTdHJpbmdPckJvb2xlYW4gfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7XG4gIGdlbmVyYXRlUmFuZG9tVmFsdWUsXG4gIGdldEluamVjdGFibGVzUmVnaXN0cnksXG4gIHN0cmluZ1RvQm9vbGVhbixcbn0gZnJvbSAnLi4vaGVscGVycy91dGlscyc7XG5pbXBvcnQgeyBnZXRMb2NhbGVDb250ZXh0IH0gZnJvbSAnLi4vaTE4bi9Mb2FkZXInO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tICdAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb24nO1xuaW1wb3J0IHtcbiAgQ3J1ZE9wZXJhdGlvbnMsXG4gIEludGVybmFsRXJyb3IsXG4gIE9wZXJhdGlvbktleXMsXG59IGZyb20gJ0BkZWNhZi10cy9kYi1kZWNvcmF0b3JzJztcbmltcG9ydCB7IEJhc2VDb21wb25lbnRQcm9wcyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IE5neFJlbmRlcmluZ0VuZ2luZSB9IGZyb20gJy4vTmd4UmVuZGVyaW5nRW5naW5lJztcbmltcG9ydCB7IExvZ2dlciB9IGZyb20gJ0BkZWNhZi10cy9sb2dnaW5nJztcbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJy4uL2Zvci1hbmd1bGFyLWNvbW1vbi5tb2R1bGUnO1xuaW1wb3J0IHsgRGVjYWZSZXBvc2l0b3J5IH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBSZXBvc2l0b3J5IH0gZnJvbSAnQGRlY2FmLXRzL2NvcmUnO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBCYXNlIGNvbXBvbmVudCBjbGFzcyB0aGF0IHByb3ZpZGVzIGNvbW1vbiBmdW5jdGlvbmFsaXR5IGZvciBhbGwgRGVjYWYgY29tcG9uZW50cy5cbiAqIEBzdW1tYXJ5IFRoZSBOZ3hCYXNlQ29tcG9uZW50IHNlcnZlcyBhcyB0aGUgZm91bmRhdGlvbiBmb3IgYWxsIERlY2FmIFVJIGNvbXBvbmVudHMsIHByb3ZpZGluZ1xuICogc2hhcmVkIGZ1bmN0aW9uYWxpdHkgZm9yIGxvY2FsaXphdGlvbiwgZWxlbWVudCByZWZlcmVuY2VzLCBhbmQgc3R5bGluZy4gVGhpcyBhYnN0cmFjdCBjbGFzc1xuICogaW1wbGVtZW50cyBjb21tb24gcHJvcGVydGllcyBhbmQgbWV0aG9kcyB0aGF0IGFyZSB1c2VkIGFjcm9zcyB0aGUgY29tcG9uZW50IGxpYnJhcnksIGVuc3VyaW5nXG4gKiBjb25zaXN0ZW50IGJlaGF2aW9yIGFuZCByZWR1Y2luZyBjb2RlIGR1cGxpY2F0aW9uLiBDb21wb25lbnRzIHRoYXQgZXh0ZW5kIHRoaXMgY2xhc3MgaW5oZXJpdFxuICogaXRzIGNhcGFiaWxpdGllcyBmb3IgaGFuZGxpbmcgdHJhbnNsYXRpb25zLCBhY2Nlc3NpbmcgRE9NIGVsZW1lbnRzLCBhbmQgYXBwbHlpbmcgY3VzdG9tIHN0eWxpbmcuXG4gKlxuICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSB0aGF0IHRoaXMgY29tcG9uZW50IHdvcmtzIHdpdGhcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnN0YW5jZSAtIFRoZSBjb21wb25lbnQgaW5zdGFuY2UgdG9rZW4gdXNlZCBmb3IgaWRlbnRpZmljYXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhbGUgLSBUaGUgbG9jYWxlIHRvIGJlIHVzZWQgZm9yIHRyYW5zbGF0aW9uc1xuICogQHBhcmFtIHtTdHJpbmdPckJvb2xlYW59IHRyYW5zbGF0YWJsZSAtIFdoZXRoZXIgdGhlIGNvbXBvbmVudCBzaG91bGQgYmUgdHJhbnNsYXRlZFxuICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSAtIEFkZGl0aW9uYWwgQ1NTIGNsYXNzZXMgdG8gYXBwbHkgdG8gdGhlIGNvbXBvbmVudFxuICogQHBhcmFtIHtcImlvc1wiIHwgXCJtZFwiIHwgdW5kZWZpbmVkfSBtb2RlIC0gQ29tcG9uZW50IHBsYXRmb3JtIHN0eWxlXG4gKlxuICogQGNvbXBvbmVudCBOZ3hCYXNlQ29tcG9uZW50XG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogQENvbXBvbmVudCh7XG4gKiAgIHNlbGVjdG9yOiAnYXBwLW15LWNvbXBvbmVudCcsXG4gKiAgIHRlbXBsYXRlVXJsOiAnLi9teS1jb21wb25lbnQuY29tcG9uZW50Lmh0bWwnLFxuICogICBzdHlsZVVybHM6IFsnLi9teS1jb21wb25lbnQuY29tcG9uZW50LnNjc3MnXVxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBNeUNvbXBvbmVudCBleHRlbmRzIE5neEJhc2VDb21wb25lbnQge1xuICogICBjb25zdHJ1Y3RvcihASW5qZWN0KCdpbnN0YW5jZVRva2VuJykgaW5zdGFuY2U6IHN0cmluZykge1xuICogICAgIHN1cGVyKGluc3RhbmNlKTtcbiAqICAgfVxuICpcbiAqICAgbmdPbkluaXQoKSB7XG4gKiAgICAgdGhpcy5pbml0aWFsaXplKCk7XG4gKiAgICAgLy8gQ29tcG9uZW50LXNwZWNpZmljIGluaXRpYWxpemF0aW9uXG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBBcHAgYXMgQXBwbGljYXRpb25cbiAqICAgcGFydGljaXBhbnQgQ29tcCBhcyBDb21wb25lbnRcbiAqICAgcGFydGljaXBhbnQgQmFzZSBhcyBOZ3hCYXNlQ29tcG9uZW50XG4gKiAgIHBhcnRpY2lwYW50IEVuZ2luZSBhcyBOZ3hSZW5kZXJpbmdFbmdpbmVcbiAqXG4gKiAgIEFwcC0+PkNvbXA6IENyZWF0ZSBjb21wb25lbnRcbiAqICAgQ29tcC0+PkJhc2U6IHN1cGVyKGluc3RhbmNlKVxuICogICBCYXNlLT4+QmFzZTogU2V0IGNvbXBvbmVudE5hbWUgJiBjb21wb25lbnRMb2NhbGVcbiAqXG4gKiAgIEFwcC0+PkNvbXA6IFNldCBASW5wdXQgcHJvcGVydGllc1xuICogICBDb21wLT4+QmFzZTogbmdPbkNoYW5nZXMoY2hhbmdlcylcbiAqXG4gKiAgIGFsdCBtb2RlbCBjaGFuZ2VkXG4gKiAgICAgQmFzZS0+PkJhc2U6IGdldE1vZGVsKG1vZGVsKVxuICogICAgIEJhc2UtPj5FbmdpbmU6IGdldERlY29yYXRvcnMobW9kZWwsIHt9KVxuICogICAgIEVuZ2luZS0tPj5CYXNlOiBSZXR1cm4gZGVjb3JhdG9yIG1ldGFkYXRhXG4gKiAgICAgQmFzZS0+PkJhc2U6IENvbmZpZ3VyZSBtYXBwZXIgYW5kIGl0ZW1cbiAqICAgICBCYXNlLT4+QmFzZTogZ2V0TG9jYWxlKHRyYW5zbGF0YWJsZSlcbiAqICAgZWxzZSBsb2NhbGUvdHJhbnNsYXRhYmxlIGNoYW5nZWRcbiAqICAgICBCYXNlLT4+QmFzZTogZ2V0TG9jYWxlKHRyYW5zbGF0YWJsZSlcbiAqICAgZW5kXG4gKlxuICogICBBcHAtPj5Db21wOiBuZ09uSW5pdCgpXG4gKiAgIENvbXAtPj5CYXNlOiBpbml0aWFsaXplKClcbiAqICAgQmFzZS0+PkJhc2U6IFNldCBpbml0aWFsaXplZCBmbGFnXG4gKi9cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICB0ZW1wbGF0ZTogJzxkaXY+PC9kaXY+JyxcbiAgaG9zdDogeyAnW2F0dHIuaWRdJzogJ3VpZCcgfSxcbn0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTmd4QmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNlIHRvIHRoZSBjb21wb25lbnQncyBlbGVtZW50LlxuICAgKiBAc3VtbWFyeSBQcm92aWRlcyBkaXJlY3QgYWNjZXNzIHRvIHRoZSBuYXRpdmUgRE9NIGVsZW1lbnQgb2YgdGhlIGNvbXBvbmVudCB0aHJvdWdoIEFuZ3VsYXInc1xuICAgKiBWaWV3Q2hpbGQgZGVjb3JhdG9yLiBUaGlzIHJlZmVyZW5jZSBjYW4gYmUgdXNlZCB0byBtYW5pcHVsYXRlIHRoZSBET00gZWxlbWVudCBkaXJlY3RseSxcbiAgICogYXBwbHkgY3VzdG9tIHN0eWxlcywgb3IgYWNjZXNzIG5hdGl2ZSBlbGVtZW50IHByb3BlcnRpZXMgYW5kIG1ldGhvZHMuIFRoZSBlbGVtZW50IGlzXG4gICAqIGlkZW50aWZpZWQgYnkgdGhlICdjb21wb25lbnQnIHRlbXBsYXRlIHJlZmVyZW5jZSB2YXJpYWJsZS5cbiAgICpcbiAgICogQHR5cGUge0VsZW1lbnRSZWZ9XG4gICAqIEBtZW1iZXJPZiBOZ3hCYXNlQ29tcG9uZW50XG4gICAqL1xuICBAVmlld0NoaWxkKCdjb21wb25lbnQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICBjb21wb25lbnQhOiBFbGVtZW50UmVmO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIG5hbWUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICogQHN1bW1hcnkgU3RvcmVzIHRoZSBuYW1lIG9mIHRoZSBjb21wb25lbnQsIHdoaWNoIGlzIHR5cGljYWxseSBkZXJpdmVkIGZyb20gdGhlIGNsYXNzIG5hbWUuXG4gICAqIFRoaXMgcHJvcGVydHkgaXMgdXNlZCBpbnRlcm5hbGx5IGZvciB2YXJpb3VzIHB1cnBvc2VzIHN1Y2ggYXMgbG9nZ2luZywgZGVyaXZpbmcgdGhlIGRlZmF1bHRcbiAgICogbG9jYWxlLCBhbmQgcG90ZW50aWFsbHkgZm9yIGNvbXBvbmVudCBpZGVudGlmaWNhdGlvbiBpbiBkZWJ1Z2dpbmcgb3IgZXJyb3IgcmVwb3J0aW5nLlxuICAgKlxuICAgKiBUaGUgYGNvbXBvbmVudE5hbWVgIGlzIHNldCBkdXJpbmcgdGhlIGNvbXBvbmVudCdzIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgYW5kIHNob3VsZCBub3RcbiAgICogYmUgbW9kaWZpZWQgZXh0ZXJuYWxseS4gSXQncyBtYXJrZWQgYXMgcHJvdGVjdGVkIHRvIGFsbG93IGFjY2VzcyBpbiBkZXJpdmVkIGNsYXNzZXMgd2hpbGVcbiAgICogcHJldmVudGluZyBkaXJlY3QgYWNjZXNzIGZyb20gb3V0c2lkZSB0aGUgY29tcG9uZW50IGhpZXJhcmNoeS5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQHByb3RlY3RlZFxuICAgKiBAbWVtYmVyT2YgTmd4QmFzZUNvbXBvbmVudFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBJbnNpZGUgYSBkZXJpdmVkIGNvbXBvbmVudCBjbGFzc1xuICAgKiBjb25zb2xlLmxvZyh0aGlzLmNvbXBvbmVudE5hbWUpOyAvLyBPdXRwdXRzOiBcIk15Q3VzdG9tQ29tcG9uZW50XCJcbiAgICovXG4gIGNvbXBvbmVudE5hbWUhOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHJlbmRlcmVyLlxuICAgKiBAc3VtbWFyeSBBIHVuaXF1ZSBpZGVudGlmaWVyIHVzZWQgdG8gcmVmZXJlbmNlIHRoZSBjb21wb25lbnQncyByZW5kZXJlciBpbnN0YW5jZS5cbiAgICogVGhpcyBjYW4gYmUgdXNlZCBmb3IgdGFyZ2V0aW5nIHNwZWNpZmljIHJlbmRlcmVyIGluc3RhbmNlcyB3aGVuIG11bHRpcGxlIGNvbXBvbmVudHNcbiAgICogYXJlIHByZXNlbnQgb24gdGhlIHNhbWUgcGFnZS5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQG1lbWJlck9mIE5neEJhc2VDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHJlbmRlcmVySWQhOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXBvc2l0b3J5IG1vZGVsIGZvciBkYXRhIG9wZXJhdGlvbnMuXG4gICAqIEBzdW1tYXJ5IFRoZSBkYXRhIG1vZGVsIHJlcG9zaXRvcnkgdGhhdCB0aGlzIGNvbXBvbmVudCB3aWxsIHVzZSBmb3IgQ1JVRCBvcGVyYXRpb25zLlxuICAgKiBUaGlzIHByb3ZpZGVzIGEgY29ubmVjdGlvbiB0byB0aGUgZGF0YSBsYXllciBmb3IgcmV0cmlldmluZyBhbmQgbWFuaXB1bGF0aW5nIGRhdGEuXG4gICAqXG4gICAqIEB0eXBlIHtNb2RlbHwgdW5kZWZpbmVkfVxuICAgKiBAbWVtYmVyT2YgTmd4QmFzZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgbW9kZWwhOiBNb2RlbCB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSByZXBvc2l0b3J5IGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBkYXRhIG1vZGVsLlxuICAgKiBAc3VtbWFyeSBQcm92aWRlcyBhIGNvbm5lY3Rpb24gdG8gdGhlIGRhdGEgbGF5ZXIgZm9yIHJldHJpZXZpbmcgYW5kIG1hbmlwdWxhdGluZyBkYXRhLlxuICAgKiBUaGlzIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBgRGVjYWZSZXBvc2l0b3J5YCBjbGFzcyBmcm9tIHRoZSBgQGRlY2FmLXRzL2NvcmVgIHBhY2thZ2UsXG4gICAqIHdoaWNoIGlzIGluaXRpYWxpemVkIGluIHRoZSBgcmVwb3NpdG9yeWAgZ2V0dGVyIG1ldGhvZC5cbiAgICpcbiAgICogVGhlIHJlcG9zaXRvcnkgaXMgdXNlZCB0byBwZXJmb3JtIENSVUQgKENyZWF0ZSwgUmVhZCwgVXBkYXRlLCBEZWxldGUpIG9wZXJhdGlvbnMgb24gdGhlXG4gICAqIGRhdGEgbW9kZWwsIHN1Y2ggYXMgZmV0Y2hpbmcgZGF0YSwgY3JlYXRpbmcgbmV3IGl0ZW1zLCB1cGRhdGluZyBleGlzdGluZyBpdGVtcywgYW5kIGRlbGV0aW5nXG4gICAqIGl0ZW1zLiBJdCBhbHNvIHByb3ZpZGVzIG1ldGhvZHMgZm9yIHF1ZXJ5aW5nIGFuZCBmaWx0ZXJpbmcgZGF0YSBiYXNlZCBvbiBzcGVjaWZpYyBjcml0ZXJpYS5cbiAgICpcbiAgICogQHR5cGUge0RlY2FmUmVwb3NpdG9yeTxNb2RlbD59XG4gICAqIEBwcml2YXRlXG4gICAqIEBtZW1iZXJPZiBOZ3hCYXNlQ29tcG9uZW50XG4gICAqL1xuICBwcm90ZWN0ZWQgX3JlcG9zaXRvcnk/OiBEZWNhZlJlcG9zaXRvcnk8TW9kZWw+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRHluYW1pYyBwcm9wZXJ0aWVzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICAgKiBAc3VtbWFyeSBDb250YWlucyBrZXktdmFsdWUgcGFpcnMgb2YgZHluYW1pYyBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudFxuICAgKiBhdCBydW50aW1lLiBUaGlzIGZsZXhpYmxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGFsbG93cyBmb3IgZHluYW1pYyBwcm9wZXJ0eSBhc3NpZ25tZW50IHdpdGhvdXRcbiAgICogcmVxdWlyaW5nIGV4cGxpY2l0IGlucHV0IGJpbmRpbmdzIGZvciBldmVyeSBwb3NzaWJsZSBjb25maWd1cmF0aW9uIG9wdGlvbi4gUHJvcGVydGllcyBmcm9tXG4gICAqIHRoaXMgb2JqZWN0IGFyZSBwYXJzZWQgYW5kIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudCBpbnN0YW5jZSB0aHJvdWdoIHRoZSBwYXJzZVByb3BzIG1ldGhvZCxcbiAgICogZW5hYmxpbmcgY3VzdG9taXphYmxlIGNvbXBvbmVudCBiZWhhdmlvciBiYXNlZCBvbiBleHRlcm5hbCBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59XG4gICAqIEBkZWZhdWx0IHt9XG4gICAqIEBtZW1iZXJPZiBOZ3hCYXNlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbmZpZ3VyYXRpb24gZm9yIGxpc3QgaXRlbSByZW5kZXJpbmdcbiAgICogQHN1bW1hcnkgRGVmaW5lcyBob3cgbGlzdCBpdGVtcyBzaG91bGQgYmUgcmVuZGVyZWQgaW4gdGhlIGNvbXBvbmVudC5cbiAgICogVGhpcyBwcm9wZXJ0eSBob2xkcyBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRoYXQgc3BlY2lmaWVzIHRoZSB0YWcgbmFtZVxuICAgKiBhbmQgb3RoZXIgcHJvcGVydGllcyBuZWVkZWQgdG8gcmVuZGVyIGxpc3QgaXRlbXMgY29ycmVjdGx5LiBUaGUgdGFnIHByb3BlcnR5XG4gICAqIGlkZW50aWZpZXMgd2hpY2ggY29tcG9uZW50IHNob3VsZCBiZSB1c2VkIHRvIHJlbmRlciBlYWNoIGl0ZW0gaW4gYSBsaXN0LlxuICAgKiBBZGRpdGlvbmFsIHByb3BlcnRpZXMgY2FuIGJlIGluY2x1ZGVkIHRvIGN1c3RvbWl6ZSB0aGUgcmVuZGVyaW5nIGJlaGF2aW9yLlxuICAgKlxuICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59XG4gICAqIEBkZWZhdWx0IHt0YWc6IFwiXCJ9XG4gICAqIEBtZW1iZXJPZiBOZ3hCYXNlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBpdGVtOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgdGFnOiAnJyB9O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJpbWFyeSBrZXkgZmllbGQgbmFtZSBmb3IgdGhlIG1vZGVsLlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgd2hpY2ggZmllbGQgaW4gdGhlIG1vZGVsIHNob3VsZCBiZSB1c2VkIGFzIHRoZSBwcmltYXJ5IGtleS5cbiAgICogVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBmb3IgaWRlbnRpZnlpbmcgdW5pcXVlIHJlY29yZHMgaW4gb3BlcmF0aW9ucyBsaWtlIHVwZGF0ZSBhbmQgZGVsZXRlLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnaWQnXG4gICAqIEBtZW1iZXJPZiBOZ3hCYXNlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBwayE6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEJhc2Ugcm91dGUgZm9yIG5hdmlnYXRpb24gcmVsYXRlZCB0byB0aGlzIGNvbXBvbmVudC5cbiAgICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgYmFzZSByb3V0ZSBwYXRoIHVzZWQgZm9yIG5hdmlnYXRpb24gYWN0aW9ucyByZWxhdGVkIHRvIHRoaXMgY29tcG9uZW50LlxuICAgKiBUaGlzIGlzIG9mdGVuIHVzZWQgYXMgYSBwcmVmaXggZm9yIGNvbnN0cnVjdGluZyBuYXZpZ2F0aW9uIFVSTHMuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBtZW1iZXJPZiBOZ3hCYXNlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICByb3V0ZSE6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEF2YWlsYWJsZSBDUlVEIG9wZXJhdGlvbnMgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKiBAc3VtbWFyeSBEZWZpbmVzIHdoaWNoIENSVUQgb3BlcmF0aW9ucyAoQ3JlYXRlLCBSZWFkLCBVcGRhdGUsIERlbGV0ZSkgYXJlIGF2YWlsYWJsZVxuICAgKiBmb3IgdGhpcyBjb21wb25lbnQuIFRoaXMgYWZmZWN0cyB3aGljaCBvcGVyYXRpb25zIGNhbiBiZSBwZXJmb3JtZWQgb24gdGhlIGRhdGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtPcGVyYXRpb25LZXlzLlJFQURdXG4gICAqIEBtZW1iZXJPZiBOZ3hCYXNlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBvcGVyYXRpb25zOiBDcnVkT3BlcmF0aW9uc1tdID0gW09wZXJhdGlvbktleXMuUkVBRF07XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGN1cnJlbnQgcmVjb3JkLlxuICAgKiBAc3VtbWFyeSBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY3VycmVudCByZWNvcmQgYmVpbmcgZGlzcGxheWVkIG9yIG1hbmlwdWxhdGVkLlxuICAgKiBUaGlzIGlzIHR5cGljYWxseSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIHByaW1hcnkga2V5IGZvciBvcGVyYXRpb25zIG9uIHNwZWNpZmljIHJlY29yZHMuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmcgfCBudW1iZXJ9XG4gICAqIEBtZW1iZXJPZiBOZ3hCYXNlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICB1aWQhOiBzdHJpbmcgfCBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBGaWVsZCBtYXBwaW5nIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBzdW1tYXJ5IERlZmluZXMgaG93IGZpZWxkcyBmcm9tIHRoZSBkYXRhIG1vZGVsIHNob3VsZCBiZSBtYXBwZWQgdG8gcHJvcGVydGllcyB1c2VkIGJ5IHRoZSBjb21wb25lbnQuXG4gICAqIFRoaXMgYWxsb3dzIGZvciBmbGV4aWJsZSBkYXRhIGJpbmRpbmcgYmV0d2VlbiB0aGUgbW9kZWwgYW5kIHRoZSBjb21wb25lbnQncyBkaXNwbGF5IGxvZ2ljLlxuICAgKlxuICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn1cbiAgICogQG1lbWJlck9mIE5neEJhc2VDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIG1hcHBlcjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGxvY2FsZSB0byBiZSB1c2VkIGZvciB0cmFuc2xhdGlvbnMuXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB0aGUgbG9jYWxlIGlkZW50aWZpZXIgdG8gdXNlIHdoZW4gdHJhbnNsYXRpbmcgY29tcG9uZW50IHRleHQuXG4gICAqIFRoaXMgY2FuIGJlIHNldCBleHBsaWNpdGx5IHZpYSBpbnB1dCBwcm9wZXJ0eSB0byBvdmVycmlkZSB0aGUgYXV0b21hdGljYWxseSBkZXJpdmVkXG4gICAqIGxvY2FsZSBmcm9tIHRoZSBjb21wb25lbnQgbmFtZS4gVGhlIGxvY2FsZSBpcyB0eXBpY2FsbHkgYSBsYW5ndWFnZSBjb2RlIChlLmcuLCAnZW4nLCAnZnInKVxuICAgKiBvciBhIGxhbmd1YWdlLXJlZ2lvbiBjb2RlIChlLmcuLCAnZW4tVVMnLCAnZnItQ0EnKSB0aGF0IGRldGVybWluZXMgd2hpY2ggdHJhbnNsYXRpb25cbiAgICogc2V0IHRvIHVzZSBmb3IgdGhlIGNvbXBvbmVudCdzIHRleHQgY29udGVudC5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQG1lbWJlck9mIE5neEJhc2VDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGxvY2FsZSE6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERldGVybWluZXMgaWYgdGhlIGNvbXBvbmVudCBzaG91bGQgYmUgdHJhbnNsYXRlZC5cbiAgICogQHN1bW1hcnkgQ29udHJvbHMgd2hldGhlciB0aGUgY29tcG9uZW50J3MgdGV4dCBjb250ZW50IHNob3VsZCBiZSBwcm9jZXNzZWQgZm9yIHRyYW5zbGF0aW9uLlxuICAgKiBXaGVuIHRydWUsIHRoZSBjb21wb25lbnQgd2lsbCBhdHRlbXB0IHRvIHRyYW5zbGF0ZSB0ZXh0IHVzaW5nIHRoZSBzcGVjaWZpZWQgbG9jYWxlLlxuICAgKiBXaGVuIGZhbHNlLCB0ZXh0IGlzIGRpc3BsYXllZCBhcy1pcyB3aXRob3V0IHRyYW5zbGF0aW9uLiBUaGlzIHByb3BlcnR5IGFjY2VwdHMgZWl0aGVyXG4gICAqIGEgYm9vbGVhbiB2YWx1ZSBvciBhIHN0cmluZyB0aGF0IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYSBib29sZWFuIChlLmcuLCAndHJ1ZScsICdmYWxzZScsICcxJywgJzAnKS5cbiAgICpcbiAgICogQHR5cGUge1N0cmluZ09yQm9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICogQG1lbWJlck9mIE5neEJhc2VDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHRyYW5zbGF0YWJsZTogU3RyaW5nT3JCb29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFkZGl0aW9uYWwgQ1NTIGNsYXNzIG5hbWVzIHRvIGFwcGx5IHRvIHRoZSBjb21wb25lbnQuXG4gICAqIEBzdW1tYXJ5IEFsbG93cyBjdXN0b20gQ1NTIGNsYXNzZXMgdG8gYmUgYWRkZWQgdG8gdGhlIGNvbXBvbmVudCdzIHJvb3QgZWxlbWVudC5cbiAgICogVGhlc2UgY2xhc3NlcyBhcmUgYXBwZW5kZWQgdG8gYW55IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGNsYXNzZXMgYmFzZWQgb24gb3RoZXJcbiAgICogY29tcG9uZW50IHByb3BlcnRpZXMuIE11bHRpcGxlIGNsYXNzZXMgY2FuIGJlIHByb3ZpZGVkIGFzIGEgc3BhY2Utc2VwYXJhdGVkIHN0cmluZy5cbiAgICogVGhpcyBwcm92aWRlcyBhIHdheSB0byBjdXN0b21pemUgdGhlIGNvbXBvbmVudCdzIGFwcGVhcmFuY2UgYmV5b25kIHRoZSBidWlsdC1pbiBzdHlsaW5nIG9wdGlvbnMuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0IFwiXCJcbiAgICogQG1lbWJlck9mIE5neEJhc2VDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGNsYXNzTmFtZTogc3RyaW5nID0gJyc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDb21wb25lbnQgcGxhdGZvcm0gc3R5bGUuXG4gICAqIEBzdW1tYXJ5IENvbnRyb2xzIHRoZSB2aXN1YWwgYXBwZWFyYW5jZSBvZiB0aGUgY29tcG9uZW50IGJhc2VkIG9uIHBsYXRmb3JtIGRlc2lnbiBndWlkZWxpbmVzLlxuICAgKiBUaGUgJ2lvcycgbW9kZSBmb2xsb3dzIGlPUyBkZXNpZ24gcGF0dGVybnMsIHdoaWxlICdtZCcgKE1hdGVyaWFsIERlc2lnbikgZm9sbG93cyBBbmRyb2lkL0dvb2dsZVxuICAgKiBkZXNpZ24gcGF0dGVybnMuIFRoaXMgcHJvcGVydHkgYWZmZWN0cyB2YXJpb3VzIHZpc3VhbCBhc3BlY3RzIHN1Y2ggYXMgYW5pbWF0aW9ucywgZm9ybSBlbGVtZW50cyxcbiAgICogYW5kIGljb25zLiBTZXR0aW5nIHRoaXMgcHJvcGVydHkgYWxsb3dzIGNvbXBvbmVudHMgdG8gbWFpbnRhaW4gcGxhdGZvcm0tc3BlY2lmaWMgc3R5bGluZ1xuICAgKiBmb3IgYSBtb3JlIG5hdGl2ZSBsb29rIGFuZCBmZWVsLlxuICAgKlxuICAgKiBAdHlwZSB7KFwiaW9zXCIgfCBcIm1kXCIgfCB1bmRlZmluZWQpfVxuICAgKiBAZGVmYXVsdCBcIm1kXCJcbiAgICogQG1lbWJlck9mIE5neEJhc2VDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIG1vZGU6ICdpb3MnIHwgJ21kJyB8IHVuZGVmaW5lZCA9ICdtZCc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgbG9jYWxlIGRlcml2ZWQgZnJvbSB0aGUgY29tcG9uZW50J3MgY2xhc3MgbmFtZS5cbiAgICogQHN1bW1hcnkgU3RvcmVzIHRoZSBhdXRvbWF0aWNhbGx5IGRlcml2ZWQgbG9jYWxlIGJhc2VkIG9uIHRoZSBjb21wb25lbnQncyBjbGFzcyBuYW1lLlxuICAgKiBUaGlzIGlzIGRldGVybWluZWQgZHVyaW5nIGNvbXBvbmVudCBpbml0aWFsaXphdGlvbiBhbmQgc2VydmVzIGFzIGEgZmFsbGJhY2sgd2hlbiBub1xuICAgKiBleHBsaWNpdCBsb2NhbGUgaXMgcHJvdmlkZWQgdmlhIHRoZSBsb2NhbGUgaW5wdXQgcHJvcGVydHkuIFRoZSBkZXJpdmF0aW9uIGlzIGhhbmRsZWRcbiAgICogYnkgdGhlIGdldExvY2FsZUNvbnRleHQgdXRpbGl0eSBmdW5jdGlvbiwgd2hpY2ggZXh0cmFjdHMgYSBsb2NhbGUgaWRlbnRpZmllclxuICAgKiBmcm9tIHRoZSBjb21wb25lbnQncyBjbGFzcyBuYW1lLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAbWVtYmVyT2YgTmd4QmFzZUNvbXBvbmVudFxuICAgKi9cbiAgY29tcG9uZW50TG9jYWxlITogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29udHJvbHMgd2hldGhlciBjaGlsZCBjb21wb25lbnRzIHNob3VsZCBiZSByZW5kZXJlZFxuICAgKiBAc3VtbWFyeSBEZXRlcm1pbmVzIGlmIGNoaWxkIGNvbXBvbmVudHMgc2hvdWxkIGJlIHJlbmRlcmVkIGJ5IHRoZSBjb21wb25lbnQuXG4gICAqIFRoaXMgY2FuIGJlIHNldCB0byBhIGJvb2xlYW4gdmFsdWUgb3IgYSBzdHJpbmcgdGhhdCBjYW4gYmUgY29udmVydGVkIHRvIGEgYm9vbGVhbi5cbiAgICogV2hlbiB0cnVlLCBjaGlsZCBjb21wb25lbnRzIGRlZmluZWQgaW4gdGhlIG1vZGVsIHdpbGwgYmUgcmVuZGVyZWQuIFdoZW4gZmFsc2UsXG4gICAqIGNoaWxkIGNvbXBvbmVudHMgd2lsbCBiZSBza2lwcGVkLiBUaGlzIHByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgcmVuZGVyaW5nIGRlcHRoLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nIHwgU3RyaW5nT3JCb29sZWFufVxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqIEBtZW1iZXJPZiBOZ3hCYXNlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICByZW5kZXJDaGlsZDogc3RyaW5nIHwgU3RyaW5nT3JCb29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEZsYWcgaW5kaWNhdGluZyBpZiB0aGUgY29tcG9uZW50IGhhcyBiZWVuIGluaXRpYWxpemVkXG4gICAqIEBzdW1tYXJ5IFRyYWNrcyB3aGV0aGVyIHRoZSBjb21wb25lbnQgaGFzIGNvbXBsZXRlZCBpdHMgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy5cbiAgICogVGhpcyBmbGFnIGlzIHVzZWQgdG8gcHJldmVudCBkdXBsaWNhdGUgaW5pdGlhbGl6YXRpb24gYW5kIHRvIGRldGVybWluZSBpZlxuICAgKiBjZXJ0YWluIG9wZXJhdGlvbnMgdGhhdCByZXF1aXJlIGluaXRpYWxpemF0aW9uIGNhbiBiZSBwZXJmb3JtZWQuXG4gICAqXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEV2ZW50IGVtaXR0ZXIgZm9yIGN1c3RvbSByZW5kZXJlciBldmVudHMuXG4gICAqIEBzdW1tYXJ5IEVtaXRzIGN1c3RvbSBldmVudHMgdGhhdCBvY2N1ciB3aXRoaW4gY2hpbGQgY29tcG9uZW50cyBvciB0aGUgbGF5b3V0IGl0c2VsZi5cbiAgICogVGhpcyBhbGxvd3MgcGFyZW50IGNvbXBvbmVudHMgdG8gbGlzdGVuIGZvciBhbmQgcmVzcG9uZCB0byB1c2VyIGludGVyYWN0aW9ucyBvclxuICAgKiBzdGF0ZSBjaGFuZ2VzIHdpdGhpbiB0aGUgZ3JpZCBsYXlvdXQuIEV2ZW50cyBhcmUgcGFzc2VkIHVwIHRoZSBjb21wb25lbnQgaGllcmFyY2h5XG4gICAqIHRvIGVuYWJsZSBjb29yZGluYXRlZCBiZWhhdmlvciBhY3Jvc3MgdGhlIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAdHlwZSB7RXZlbnRFbWl0dGVyPFJlbmRlcmVyQ3VzdG9tRXZlbnQ+fVxuICAgKiBAbWVtYmVyT2YgTmd4QmFzZUNvbXBvbmVudFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIGxpc3RlbkV2ZW50OiBFdmVudEVtaXR0ZXI8UmVuZGVyZXJDdXN0b21FdmVudD4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8UmVuZGVyZXJDdXN0b21FdmVudD4oKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlZmVyZW5jZSB0byB0aGUgcmVuZGVyaW5nIGVuZ2luZSBpbnN0YW5jZVxuICAgKiBAc3VtbWFyeSBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIE5neFJlbmRlcmluZ0VuZ2luZSBzaW5nbGV0b24gaW5zdGFuY2UsXG4gICAqIHdoaWNoIGhhbmRsZXMgdGhlIHJlbmRlcmluZyBvZiBjb21wb25lbnRzIGJhc2VkIG9uIG1vZGVsIGRlZmluaXRpb25zLlxuICAgKiBUaGlzIGVuZ2luZSBpcyB1c2VkIHRvIGV4dHJhY3QgZGVjb3JhdG9yIG1ldGFkYXRhIGFuZCByZW5kZXIgY2hpbGQgY29tcG9uZW50cy5cbiAgICpcbiAgICogQHR5cGUge05neFJlbmRlcmluZ0VuZ2luZX1cbiAgICovXG4gIHJlbmRlcmluZ0VuZ2luZTogTmd4UmVuZGVyaW5nRW5naW5lID1cbiAgICBOZ3hSZW5kZXJpbmdFbmdpbmUuZ2V0KCkgYXMgdW5rbm93biBhcyBOZ3hSZW5kZXJpbmdFbmdpbmU7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBMb2dnZXIgaW5zdGFuY2UgZm9yIHRoZSBjb21wb25lbnQuXG4gICAqIEBzdW1tYXJ5IFByb3ZpZGVzIGxvZ2dpbmcgY2FwYWJpbGl0aWVzIGZvciB0aGUgY29tcG9uZW50LCBhbGxvd2luZyBmb3IgY29uc2lzdGVudFxuICAgKiBhbmQgc3RydWN0dXJlZCBsb2dnaW5nIG9mIGluZm9ybWF0aW9uLCB3YXJuaW5ncywgYW5kIGVycm9ycy4gVGhpcyBsb2dnZXIgaXMgaW5pdGlhbGl6ZWRcbiAgICogaW4gdGhlIG5nT25Jbml0IG1ldGhvZCB1c2luZyB0aGUgZ2V0TG9nZ2VyIGZ1bmN0aW9uIGZyb20gdGhlIEZvckFuZ3VsYXJDb21tb25Nb2R1bGUuXG4gICAqXG4gICAqIFRoZSBsb2dnZXIgaXMgdXNlZCB0aHJvdWdob3V0IHRoZSBjb21wb25lbnQgdG8gcmVjb3JkIGltcG9ydGFudCBldmVudHMsIGRlYnVnIGluZm9ybWF0aW9uLFxuICAgKiBhbmQgcG90ZW50aWFsIGlzc3Vlcy4gSXQgaGVscHMgaW4gbW9uaXRvcmluZyB0aGUgY29tcG9uZW50J3MgYmVoYXZpb3IsIHRyYWNraW5nIHRoZSBmbG93XG4gICAqIG9mIG9wZXJhdGlvbnMsIGFuZCBmYWNpbGl0YXRpbmcgZWFzaWVyIGRlYnVnZ2luZyBhbmQgbWFpbnRlbmFuY2UuXG4gICAqXG4gICAqIEB0eXBlIHtMb2dnZXJ9XG4gICAqIEBwcml2YXRlXG4gICAqIEBtZW1iZXJPZiBOZ3hCYXNlQ29tcG9uZW50XG4gICAqL1xuICBsb2dnZXIhOiBMb2dnZXI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIE5neEJhc2VDb21wb25lbnQuXG4gICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBiYXNlIGNvbXBvbmVudCB3aXRoIHRoZSBwcm92aWRlZCBpbnN0YW5jZSB0b2tlbi5cbiAgICogVGhpcyBjb25zdHJ1Y3RvciBzZXRzIHVwIHRoZSBmdW5kYW1lbnRhbCBwcm9wZXJ0aWVzIHJlcXVpcmVkIGJ5IGFsbCBEZWNhZiBjb21wb25lbnRzLFxuICAgKiBpbmNsdWRpbmcgdGhlIGNvbXBvbmVudCBuYW1lLCBsb2NhbGUgc2V0dGluZ3MsIGFuZCBsb2dnaW5nIGNhcGFiaWxpdGllcy4gVGhlIGluc3RhbmNlXG4gICAqIHRva2VuIGlzIHVzZWQgZm9yIGNvbXBvbmVudCBpZGVudGlmaWNhdGlvbiBhbmQgbG9jYWxlIGRlcml2YXRpb24uXG4gICAqXG4gICAqIFRoZSBjb25zdHJ1Y3RvciBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIGluaXRpYWxpemF0aW9uIHN0ZXBzOlxuICAgKiAxLiBTZXRzIHRoZSBjb21wb25lbnROYW1lIGZyb20gdGhlIHByb3ZpZGVkIGluc3RhbmNlIHRva2VuXG4gICAqIDIuIERlcml2ZXMgdGhlIGNvbXBvbmVudExvY2FsZSBmcm9tIHRoZSBjbGFzcyBuYW1lIHVzaW5nIHV0aWxpdHkgZnVuY3Rpb25zXG4gICAqIDMuIEluaXRpYWxpemVzIHRoZSBsb2dnZXIgaW5zdGFuY2UgZm9yIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGluc3RhbmNlIC0gVGhlIGNvbXBvbmVudCBpbnN0YW5jZSB0b2tlbiB1c2VkIGZvciBpZGVudGlmaWNhdGlvblxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBBIGFzIEFuZ3VsYXJcbiAgICogICBwYXJ0aWNpcGFudCBDIGFzIENvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IEIgYXMgTmd4QmFzZUNvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IFUgYXMgVXRpbHNcbiAgICogICBwYXJ0aWNpcGFudCBMIGFzIExvZ2dlclxuICAgKlxuICAgKiAgIEEtPj5DOiBuZXcgQ29tcG9uZW50KGluc3RhbmNlKVxuICAgKiAgIEMtPj5COiBzdXBlcihpbnN0YW5jZSlcbiAgICogICBCLT4+QjogU2V0IGNvbXBvbmVudE5hbWUgPSBpbnN0YW5jZVxuICAgKiAgIEItPj5VOiBnZXRMb2NhbGVDb250ZXh0KGluc3RhbmNlKVxuICAgKiAgIFUtLT4+QjogUmV0dXJuIGRlcml2ZWQgbG9jYWxlXG4gICAqICAgQi0+PkI6IFNldCBjb21wb25lbnRMb2NhbGVcbiAgICogICBCLT4+TDogZ2V0TG9nZ2VyKHRoaXMpXG4gICAqICAgTC0tPj5COiBSZXR1cm4gbG9nZ2VyIGluc3RhbmNlXG4gICAqICAgQi0+PkI6IFNldCBsb2dnZXJcbiAgICpcbiAgICogQG1lbWJlck9mIE5neEJhc2VDb21wb25lbnRcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvcHJlZmVyLWluamVjdFxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoQEluamVjdCgnaW5zdGFuY2VUb2tlbicpIHByb3RlY3RlZCBpbnN0YW5jZTogc3RyaW5nKSB7XG4gICAgdGhpcy5jb21wb25lbnROYW1lID0gaW5zdGFuY2U7XG4gICAgdGhpcy5jb21wb25lbnRMb2NhbGUgPSBnZXRMb2NhbGVDb250ZXh0KGluc3RhbmNlKTtcbiAgICB0aGlzLmxvZ2dlciA9IGdldExvZ2dlcih0aGlzKTtcbiAgICB0aGlzLmdldExvY2FsZSh0aGlzLnRyYW5zbGF0YWJsZSk7XG4gICAgdGhpcy51aWQgPSBnZW5lcmF0ZVJhbmRvbVZhbHVlKDEyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2V0dGVyIGZvciB0aGUgcmVwb3NpdG9yeSBpbnN0YW5jZS5cbiAgICogQHN1bW1hcnkgUHJvdmlkZXMgYSBjb25uZWN0aW9uIHRvIHRoZSBkYXRhIGxheWVyIGZvciByZXRyaWV2aW5nIGFuZCBtYW5pcHVsYXRpbmcgZGF0YS5cbiAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIGBfcmVwb3NpdG9yeWAgcHJvcGVydHkgaWYgaXQgaXMgbm90IGFscmVhZHkgc2V0LCBlbnN1cmluZ1xuICAgKiB0aGF0IGEgc2luZ2xlIGluc3RhbmNlIG9mIHRoZSByZXBvc2l0b3J5IGlzIHVzZWQgdGhyb3VnaG91dCB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBUaGUgcmVwb3NpdG9yeSBpcyB1c2VkIHRvIHBlcmZvcm0gQ1JVRCBvcGVyYXRpb25zIG9uIHRoZSBkYXRhIG1vZGVsLCBzdWNoIGFzIGZldGNoaW5nIGRhdGEsXG4gICAqIGNyZWF0aW5nIG5ldyBpdGVtcywgdXBkYXRpbmcgZXhpc3RpbmcgaXRlbXMsIGFuZCBkZWxldGluZyBpdGVtcy4gSXQgYWxzbyBwcm92aWRlcyBtZXRob2RzXG4gICAqIGZvciBxdWVyeWluZyBhbmQgZmlsdGVyaW5nIGRhdGEgYmFzZWQgb24gc3BlY2lmaWMgY3JpdGVyaWEuXG4gICAqXG4gICAqIEByZXR1cm5zIHtEZWNhZlJlcG9zaXRvcnk8TW9kZWw+fSBUaGUgaW5pdGlhbGl6ZWQgcmVwb3NpdG9yeSBpbnN0YW5jZS5cbiAgICogQHByaXZhdGVcbiAgICogQG1lbWJlck9mIE5neEJhc2VDb21wb25lbnRcbiAgICovXG4gIHByb3RlY3RlZCBnZXQgcmVwb3NpdG9yeSgpOiBEZWNhZlJlcG9zaXRvcnk8TW9kZWw+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKCF0aGlzLl9yZXBvc2l0b3J5KSB7XG4gICAgICAgIGNvbnN0IG1vZGVsTmFtZSA9ICh0aGlzLm1vZGVsIGFzIE1vZGVsKS5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgICAgICBjb25zdCBjb25zdHJ1Y3RvciA9IE1vZGVsLmdldChtb2RlbE5hbWUpO1xuICAgICAgICBpZiAoIWNvbnN0cnVjdG9yKVxuICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICAgICAgJ0Nhbm5vdCBmaW5kIG1vZGVsLiB3YXMgaXQgcmVnaXN0ZXJlZCB3aXRoIEBtb2RlbD8nXG4gICAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fcmVwb3NpdG9yeSA9IFJlcG9zaXRvcnkuZm9yTW9kZWwoY29uc3RydWN0b3IpO1xuICAgICAgICB0aGlzLm1vZGVsID0gbmV3IGNvbnN0cnVjdG9yKCkgYXMgTW9kZWw7XG4gICAgICAgIGlmICh0aGlzLm1vZGVsICYmICF0aGlzLnBrKVxuICAgICAgICAgIHRoaXMucGsgPVxuICAgICAgICAgICAgKHRoaXMuX3JlcG9zaXRvcnkgYXMgdW5rbm93biBhcyBEZWNhZlJlcG9zaXRvcnk8TW9kZWw+KS5wayB8fCAnaWQnO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcigoZXJyb3IgYXMgRXJyb3IpPy5tZXNzYWdlIHx8IChlcnJvciBhcyBzdHJpbmcpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3JlcG9zaXRvcnk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgY2hhbmdlcyB0byBjb21wb25lbnQgaW5wdXRzXG4gICAqIEBzdW1tYXJ5IFRoaXMgQW5ndWxhciBsaWZlY3ljbGUgaG9vayBpcyBjYWxsZWQgd2hlbiBpbnB1dCBwcm9wZXJ0aWVzIGNoYW5nZS5cbiAgICogSXQgcmVzcG9uZHMgdG8gY2hhbmdlcyBpbiB0aGUgbW9kZWwsIGxvY2FsZSwgb3IgdHJhbnNsYXRhYmxlIHByb3BlcnRpZXMgYnlcbiAgICogdXBkYXRpbmcgdGhlIGNvbXBvbmVudCdzIGludGVybmFsIHN0YXRlIGFjY29yZGluZ2x5LiBXaGVuIHRoZSBtb2RlbCBjaGFuZ2VzLFxuICAgKiBpdCBjYWxscyBnZXRNb2RlbCB0byBwcm9jZXNzIHRoZSBuZXcgbW9kZWwgYW5kIGdldExvY2FsZSB0byB1cGRhdGUgdGhlIGxvY2FsZS5cbiAgICogV2hlbiBsb2NhbGUgb3IgdHJhbnNsYXRhYmxlIHByb3BlcnRpZXMgY2hhbmdlLCBpdCBjYWxscyBnZXRMb2NhbGUgdG8gdXBkYXRlXG4gICAqIHRoZSB0cmFuc2xhdGlvbiBzZXR0aW5ncy5cbiAgICpcbiAgICogQHBhcmFtIHtTaW1wbGVDaGFuZ2VzfSBjaGFuZ2VzIC0gT2JqZWN0IGNvbnRhaW5pbmcgY2hhbmdlZCBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbQmFzZUNvbXBvbmVudFByb3BzLk1PREVMXSkge1xuICAgICAgY29uc3QgeyBjdXJyZW50VmFsdWUgfSA9IGNoYW5nZXNbQmFzZUNvbXBvbmVudFByb3BzLk1PREVMXTtcbiAgICAgIGlmIChjdXJyZW50VmFsdWUpIHRoaXMuZ2V0TW9kZWwoY3VycmVudFZhbHVlKTtcbiAgICAgIHRoaXMuZ2V0TG9jYWxlKHRoaXMudHJhbnNsYXRhYmxlKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgY2hhbmdlc1tCYXNlQ29tcG9uZW50UHJvcHMuSU5JVElBTElaRURdIHx8XG4gICAgICBjaGFuZ2VzW0Jhc2VDb21wb25lbnRQcm9wcy5MT0NBTEVdIHx8XG4gICAgICBjaGFuZ2VzW0Jhc2VDb21wb25lbnRQcm9wcy5UUkFOU0xBVEFCTEVdXG4gICAgKVxuICAgICAgdGhpcy5nZXRMb2NhbGUodGhpcy50cmFuc2xhdGFibGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHZXRzIHRoZSBhcHByb3ByaWF0ZSBsb2NhbGUgc3RyaW5nIGJhc2VkIG9uIHRoZSB0cmFuc2xhdGFibGUgZmxhZyBhbmQgYXZhaWxhYmxlIGxvY2FsZXMuXG4gICAqIEBzdW1tYXJ5IERldGVybWluZXMgd2hpY2ggbG9jYWxlIHN0cmluZyB0byB1c2UgZm9yIHRyYW5zbGF0aW9uIGJhc2VkIG9uIHRoZSB0cmFuc2xhdGFibGUgZmxhZ1xuICAgKiBhbmQgYXZhaWxhYmxlIGxvY2FsZSBzZXR0aW5ncy4gVGhpcyBtZXRob2QgZmlyc3QgY29udmVydHMgdGhlIHRyYW5zbGF0YWJsZSBwYXJhbWV0ZXIgdG8gYSBib29sZWFuXG4gICAqIHVzaW5nIHRoZSBzdHJpbmdUb0Jvb2xlYW4gdXRpbGl0eSBmdW5jdGlvbi4gSWYgdHJhbnNsYXRhYmxlIGlzIGZhbHNlLCBpdCByZXR1cm5zIGFuIGVtcHR5IHN0cmluZyxcbiAgICogaW5kaWNhdGluZyBubyB0cmFuc2xhdGlvbiBzaG91bGQgYmUgcGVyZm9ybWVkLiBJZiB0cmFuc2xhdGFibGUgaXMgdHJ1ZSwgaXQgY2hlY2tzIGZvciBhbiBleHBsaWNpdGx5XG4gICAqIHByb3ZpZGVkIGxvY2FsZSB2aWEgdGhlIGxvY2FsZSBwcm9wZXJ0eS4gSWYgbm8gZXhwbGljaXQgbG9jYWxlIGlzIGF2YWlsYWJsZSwgaXQgZmFsbHMgYmFjayB0byB0aGVcbiAgICogY29tcG9uZW50TG9jYWxlIGRlcml2ZWQgZnJvbSB0aGUgY29tcG9uZW50J3MgY2xhc3MgbmFtZS5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmdPckJvb2xlYW59IHRyYW5zbGF0YWJsZSAtIFdoZXRoZXIgdGhlIGNvbXBvbmVudCBzaG91bGQgYmUgdHJhbnNsYXRlZFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBsb2NhbGUgc3RyaW5nIHRvIHVzZSBmb3IgdHJhbnNsYXRpb24sIG9yIGVtcHR5IHN0cmluZyBpZiBub3QgdHJhbnNsYXRhYmxlXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IEMgYXMgQ29tcG9uZW50XG4gICAqICAgcGFydGljaXBhbnQgTiBhcyBOZ3hCYXNlQ29tcG9uZW50XG4gICAqICAgcGFydGljaXBhbnQgUyBhcyBTdHJpbmdVdGlsc1xuICAgKlxuICAgKiAgIEMtPj5OOiBnZXRMb2NhbGUodHJhbnNsYXRhYmxlKVxuICAgKiAgIE4tPj5TOiBzdHJpbmdUb0Jvb2xlYW4odHJhbnNsYXRhYmxlKVxuICAgKiAgIFMtLT4+TjogUmV0dXJuIGJvb2xlYW4gdmFsdWVcbiAgICogICBOLT4+TjogU3RvcmUgaW4gdGhpcy50cmFuc2xhdGFibGVcbiAgICogICBhbHQgdHJhbnNsYXRhYmxlIGlzIGZhbHNlXG4gICAqICAgICBOLS0+PkM6IFJldHVybiBlbXB0eSBzdHJpbmdcbiAgICogICBlbHNlIHRyYW5zbGF0YWJsZSBpcyB0cnVlXG4gICAqICAgICBhbHQgdGhpcy5sb2NhbGUgaXMgZGVmaW5lZFxuICAgKiAgICAgICBOLS0+PkM6IFJldHVybiB0aGlzLmxvY2FsZVxuICAgKiAgICAgZWxzZSB0aGlzLmxvY2FsZSBpcyBub3QgZGVmaW5lZFxuICAgKiAgICAgICBOLS0+PkM6IFJldHVybiB0aGlzLmNvbXBvbmVudExvY2FsZVxuICAgKiAgICAgZW5kXG4gICAqICAgZW5kXG4gICAqL1xuICBnZXRMb2NhbGUodHJhbnNsYXRhYmxlOiBTdHJpbmdPckJvb2xlYW4pOiBzdHJpbmcge1xuICAgIHRoaXMudHJhbnNsYXRhYmxlID0gc3RyaW5nVG9Cb29sZWFuKHRyYW5zbGF0YWJsZSk7XG4gICAgaWYgKCF0aGlzLnRyYW5zbGF0YWJsZSkgcmV0dXJuICcnO1xuICAgIGlmICghdGhpcy5sb2NhbGUpIHRoaXMubG9jYWxlID0gdGhpcy5jb21wb25lbnRMb2NhbGU7XG4gICAgcmV0dXJuIHRoaXMubG9jYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHZXRzIHRoZSByb3V0ZSBmb3IgdGhlIGNvbXBvbmVudFxuICAgKiBAc3VtbWFyeSBSZXRyaWV2ZXMgdGhlIHJvdXRlIHBhdGggZm9yIHRoZSBjb21wb25lbnQsIGdlbmVyYXRpbmcgb25lIGJhc2VkIG9uIHRoZSBtb2RlbFxuICAgKiBpZiBubyByb3V0ZSBpcyBleHBsaWNpdGx5IHNldC4gVGhpcyBtZXRob2QgY2hlY2tzIGlmIGEgcm91dGUgaXMgYWxyZWFkeSBkZWZpbmVkLCBhbmQgaWYgbm90LFxuICAgKiBpdCBjcmVhdGVzIGEgZGVmYXVsdCByb3V0ZSBiYXNlZCBvbiB0aGUgbW9kZWwncyBjb25zdHJ1Y3RvciBuYW1lLiBUaGUgZ2VuZXJhdGVkIHJvdXRlIGZvbGxvd3NcbiAgICogdGhlIHBhdHRlcm4gJy9tb2RlbC97TW9kZWxOYW1lfScuIFRoaXMgaXMgdXNlZnVsIGZvciBhdXRvbWF0aWMgcm91dGluZyBpbiBDUlVEIG9wZXJhdGlvbnMuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHJvdXRlIHBhdGggZm9yIHRoZSBjb21wb25lbnQsIG9yIGVtcHR5IHN0cmluZyBpZiBubyByb3V0ZSBpcyBhdmFpbGFibGVcbiAgICovXG4gIGdldFJvdXRlKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLnJvdXRlICYmIHRoaXMubW9kZWwgaW5zdGFuY2VvZiBNb2RlbClcbiAgICAgIHRoaXMucm91dGUgPSBgL21vZGVsLyR7dGhpcy5tb2RlbD8uY29uc3RydWN0b3IubmFtZX1gO1xuICAgIHJldHVybiB0aGlzLnJvdXRlIHx8ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXNvbHZlcyBhbmQgc2V0cyB0aGUgY29tcG9uZW50J3MgbW9kZWxcbiAgICogQHN1bW1hcnkgUHJvY2Vzc2VzIHRoZSBwcm92aWRlZCBtb2RlbCBwYXJhbWV0ZXIsIHdoaWNoIGNhbiBiZSBlaXRoZXIgYSBNb2RlbCBpbnN0YW5jZVxuICAgKiBvciBhIHN0cmluZyBpZGVudGlmaWVyLiBJZiBhIHN0cmluZyBpcyBwcm92aWRlZCwgaXQgYXR0ZW1wdHMgdG8gcmVzb2x2ZSB0aGUgYWN0dWFsIG1vZGVsXG4gICAqIGZyb20gdGhlIGluamVjdGFibGVzIHJlZ2lzdHJ5LiBBZnRlciByZXNvbHZpbmcgdGhlIG1vZGVsLCBpdCBjYWxscyBzZXRNb2RlbERlZmluaXRpb25zXG4gICAqIHRvIGNvbmZpZ3VyZSB0aGUgY29tcG9uZW50IGJhc2VkIG9uIHRoZSBtb2RlbCdzIG1ldGFkYXRhLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IE1vZGVsfSBtb2RlbCAtIFRoZSBtb2RlbCBpbnN0YW5jZSBvciBpZGVudGlmaWVyIHN0cmluZ1xuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgZ2V0TW9kZWwobW9kZWw6IHN0cmluZyB8IE1vZGVsKTogdm9pZCB7XG4gICAgaWYgKCEobW9kZWwgaW5zdGFuY2VvZiBNb2RlbCkpXG4gICAgICB0aGlzLm1vZGVsID0gZ2V0SW5qZWN0YWJsZXNSZWdpc3RyeSgpLmdldChtb2RlbCkgYXMgTW9kZWw7XG4gICAgdGhpcy5zZXRNb2RlbERlZmluaXRpb25zKHRoaXMubW9kZWwgYXMgTW9kZWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDb25maWd1cmVzIGNvbXBvbmVudCBwcm9wZXJ0aWVzIGJhc2VkIG9uIG1vZGVsIG1ldGFkYXRhXG4gICAqIEBzdW1tYXJ5IEV4dHJhY3RzIGFuZCBhcHBsaWVzIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgbW9kZWwncyBkZWNvcmF0b3JzIHRvIHNldCB1cFxuICAgKiB0aGUgY29tcG9uZW50LiBUaGlzIG1ldGhvZCB1c2VzIHRoZSByZW5kZXJpbmcgZW5naW5lIHRvIHJldHJpZXZlIGRlY29yYXRvciBtZXRhZGF0YVxuICAgKiBmcm9tIHRoZSBtb2RlbCwgdGhlbiBjb25maWd1cmVzIHRoZSBjb21wb25lbnQncyBtYXBwZXIgYW5kIGl0ZW0gcHJvcGVydGllcyBhY2NvcmRpbmdseS5cbiAgICogSXQgZW5zdXJlcyB0aGUgcm91dGUgaXMgcHJvcGVybHkgc2V0IGFuZCBtZXJnZXMgdmFyaW91cyBwcm9wZXJ0aWVzIGZyb20gdGhlIG1vZGVsJ3NcbiAgICogbWV0YWRhdGEgaW50byB0aGUgY29tcG9uZW50J3MgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtNb2RlbH0gbW9kZWwgLSBUaGUgbW9kZWwgdG8gZXh0cmFjdCBjb25maWd1cmF0aW9uIGZyb21cbiAgICogQHJldHVybiB7dm9pZH1cbiAgICovXG4gIHNldE1vZGVsRGVmaW5pdGlvbnMobW9kZWw6IE1vZGVsKTogdm9pZCB7XG4gICAgaWYgKG1vZGVsIGluc3RhbmNlb2YgTW9kZWwpIHtcbiAgICAgIHRoaXMuZ2V0Um91dGUoKTtcbiAgICAgIHRoaXMubW9kZWwgPSBtb2RlbDtcbiAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5yZW5kZXJpbmdFbmdpbmUuZ2V0RGVjb3JhdG9ycyh0aGlzLm1vZGVsIGFzIE1vZGVsLCB7fSk7XG4gICAgICBjb25zdCB7IHByb3BzLCBpdGVtLCBjaGlsZHJlbiB9ID0gZmllbGQ7XG4gICAgICB0aGlzLnByb3BzID0gT2JqZWN0LmFzc2lnbihwcm9wcyB8fCB7fSwgeyBjaGlsZHJlbjogY2hpbGRyZW4gfHwgW10gfSk7XG4gICAgICBpZiAoaXRlbT8ucHJvcHM/LlsnbWFwcGVyJ10pXG4gICAgICAgIHRoaXMubWFwcGVyID0gaXRlbT8ucHJvcHMhWydtYXBwZXInXSB8fCB7fTtcbiAgICAgIHRoaXMuaXRlbSA9IHtcbiAgICAgICAgdGFnOiBpdGVtPy50YWcgfHwgJycsXG4gICAgICAgIC4uLml0ZW0/LnByb3BzLFxuICAgICAgICAuLi4odGhpcy5tYXBwZXIgPyB7IG1hcHBlcjogdGhpcy5tYXBwZXIgfSA6IHt9KSxcbiAgICAgICAgLi4ueyByb3V0ZTogaXRlbT8ucHJvcHM/Llsncm91dGUnXSB8fCB0aGlzLnJvdXRlIH0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSW5pdGlhbGl6ZXMgdGhlIGNvbXBvbmVudFxuICAgKiBAc3VtbWFyeSBQZXJmb3JtcyBvbmUtdGltZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgY29tcG9uZW50LiBUaGlzIG1ldGhvZCBjaGVja3MgaWZcbiAgICogdGhlIGNvbXBvbmVudCBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkIHRvIHByZXZlbnQgZHVwbGljYXRlIGluaXRpYWxpemF0aW9uLlxuICAgKiBXaGVuIGNhbGxlZCBmb3IgdGhlIGZpcnN0IHRpbWUsIGl0IHNldHMgdGhlIGluaXRpYWxpemVkIGZsYWcgdG8gdHJ1ZSBhbmQgbG9nc1xuICAgKiBhbiBpbml0aWFsaXphdGlvbiBtZXNzYWdlIHdpdGggdGhlIGNvbXBvbmVudCBuYW1lLiBUaGlzIG1ldGhvZCBpcyB0eXBpY2FsbHkgY2FsbGVkXG4gICAqIGR1cmluZyB0aGUgY29tcG9uZW50J3MgbGlmZWN5Y2xlIHNldHVwLlxuICAgKi9cbiAgYXN5bmMgaW5pdGlhbGl6ZShwYXJzZVByb3BzOiBib29sZWFuID0gdHJ1ZSwgc2tpcD86IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYoIXRoaXMuaW5pdGlhbGl6ZWQgJiYgcGFyc2VQcm9wcylcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlUHJvcHModGhpcywgc2tpcCB8fCBbXSk7XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgY3VzdG9tIGV2ZW50cyBmcm9tIGNoaWxkIGNvbXBvbmVudHMuXG4gICAqIEBzdW1tYXJ5IFJlY2VpdmVzIGV2ZW50cyBmcm9tIGNoaWxkIHJlbmRlcmVyIGNvbXBvbmVudHMgYW5kIGZvcndhcmRzIHRoZW0gdG8gcGFyZW50XG4gICAqIGNvbXBvbmVudHMgdGhyb3VnaCB0aGUgbGlzdGVuRXZlbnQgb3V0cHV0LiBUaGlzIGNyZWF0ZXMgYW4gZXZlbnQgcHJvcGFnYXRpb24gY2hhaW5cbiAgICogdGhhdCBhbGxvd3MgZXZlbnRzIHRvIGJ1YmJsZSB1cCB0aHJvdWdoIHRoZSBjb21wb25lbnQgaGllcmFyY2h5LCBlbmFibGluZyBjb29yZGluYXRlZFxuICAgKiByZXNwb25zZXMgdG8gdXNlciBpbnRlcmFjdGlvbnMgYWNyb3NzIHRoZSBsYXlvdXQgc3RydWN0dXJlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlbmRlcmVyQ3VzdG9tRXZlbnR9IGV2ZW50IC0gVGhlIGN1c3RvbSBldmVudCBmcm9tIGEgY2hpbGQgY29tcG9uZW50XG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IEMgYXMgQ2hpbGQgQ29tcG9uZW50XG4gICAqICAgcGFydGljaXBhbnQgTCBhcyBOZ3hCYXNlQ29tcG9uZW50XG4gICAqICAgcGFydGljaXBhbnQgUCBhcyBQYXJlbnQgQ29tcG9uZW50XG4gICAqXG4gICAqICAgQy0+Pkw6IEVtaXQgUmVuZGVyZXJDdXN0b21FdmVudFxuICAgKiAgIEwtPj5MOiBoYW5kbGVFdmVudChldmVudClcbiAgICogICBMLT4+UDogbGlzdGVuRXZlbnQuZW1pdChldmVudClcbiAgICogICBOb3RlIG92ZXIgUDogSGFuZGxlIGV2ZW50IGluIHBhcmVudFxuICAgKlxuICAgKiBAbWVtYmVyT2YgTmd4QmFzZUNvbXBvbmVudFxuICAgKi9cbiAgaGFuZGxlRXZlbnQoZXZlbnQ6IFJlbmRlcmVyQ3VzdG9tRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RlbkV2ZW50LmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUcmFja3MgaXRlbXMgaW4gbmdGb3IgbG9vcHMgZm9yIG9wdGltYWwgY2hhbmdlIGRldGVjdGlvbi5cbiAgICogQHN1bW1hcnkgUHJvdmlkZXMgYSB0cmFja2luZyBmdW5jdGlvbiBmb3IgQW5ndWxhcidzICpuZ0ZvciBkaXJlY3RpdmUgdG8gb3B0aW1pemUgcmVuZGVyaW5nXG4gICAqIHBlcmZvcm1hbmNlLiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgdW5pcXVlIGlkZW50aWZpZXJzIGZvciBsaXN0IGl0ZW1zIGJhc2VkIG9uIHRoZWlyIGluZGV4XG4gICAqIGFuZCBjb250ZW50LCBhbGxvd2luZyBBbmd1bGFyIHRvIGVmZmljaWVudGx5IHRyYWNrIGNoYW5nZXMgYW5kIG1pbmltaXplIERPTSBtYW5pcHVsYXRpb25zXG4gICAqIGR1cmluZyBsaXN0IHVwZGF0ZXMuIFRoZSB0cmFja2luZyBmdW5jdGlvbiBpcyBlc3NlbnRpYWwgZm9yIG1haW50YWluaW5nIGNvbXBvbmVudCBzdGF0ZVxuICAgKiBhbmQgcHJldmVudGluZyB1bm5lY2Vzc2FyeSByZS1yZW5kZXJpbmcgb2YgdW5jaGFuZ2VkIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIGl0ZW0gaW4gdGhlIGxpc3RcbiAgICogQHBhcmFtIHtLZXlWYWx1ZSB8IHN0cmluZyB8IG51bWJlcn0gaXRlbSAtIFRoZSBpdGVtIGRhdGEgdG8gdHJhY2tcbiAgICogQHJldHVybnMge3N0cmluZyB8IG51bWJlcn0gQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGl0ZW1cbiAgICogQG1lbWJlck9mIE5neEJhc2VDb21wb25lbnRcbiAgICovXG4gIHRyYWNrSXRlbUZuKFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgaXRlbTogS2V5VmFsdWUgfCBzdHJpbmcgfCBudW1iZXJcbiAgKTogc3RyaW5nIHwgbnVtYmVyIHtcbiAgICByZXR1cm4gYCR7aW5kZXh9LSR7aXRlbX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQYXJzZXMgYW5kIGFwcGxpZXMgcHJvcGVydGllcyBmcm9tIHRoZSBwcm9wcyBvYmplY3QgdG8gdGhlIGNvbXBvbmVudCBpbnN0YW5jZS5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgcHJvcGVydGllcyBvZiB0aGUgcHJvdmlkZWQgaW5zdGFuY2Ugb2JqZWN0XG4gICAqIGFuZCBhcHBsaWVzIGFueSBtYXRjaGluZyBwcm9wZXJ0aWVzIGZyb20gdGhlIGNvbXBvbmVudCdzIHByb3BzIGNvbmZpZ3VyYXRpb24gdG8gdGhlXG4gICAqIGNvbXBvbmVudCBpbnN0YW5jZS4gVGhpcyBhbGxvd3MgZm9yIGR5bmFtaWMgcHJvcGVydHkgYXNzaWdubWVudCBiYXNlZCBvbiBjb25maWd1cmF0aW9uXG4gICAqIHN0b3JlZCBpbiB0aGUgcHJvcHMgb2JqZWN0LCBlbmFibGluZyBmbGV4aWJsZSBjb21wb25lbnQgY3VzdG9taXphdGlvbiB3aXRob3V0IHJlcXVpcmluZ1xuICAgKiBleHBsaWNpdCBwcm9wZXJ0eSBiaW5kaW5nIGZvciBldmVyeSBwb3NzaWJsZSBjb25maWd1cmF0aW9uIG9wdGlvbi5cbiAgICpcbiAgICogVGhlIG1ldGhvZCBwZXJmb3JtcyBhIHNhZmUgcHJvcGVydHkgYXNzaWdubWVudCBieSBjaGVja2luZyBpZiBlYWNoIGtleSBmcm9tIHRoZSBpbnN0YW5jZVxuICAgKiBleGlzdHMgaW4gdGhlIHByb3BzIG9iamVjdCBiZWZvcmUgYXBwbHlpbmcgaXQuIFRoaXMgcHJldmVudHMgYWNjaWRlbnRhbCBwcm9wZXJ0eVxuICAgKiBvdmVyd3JpdGluZyBhbmQgZW5zdXJlcyBvbmx5IGludGVuZGVkIHByb3BlcnRpZXMgYXJlIG1vZGlmaWVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0tleVZhbHVlfSBpbnN0YW5jZSAtIFRoZSBjb21wb25lbnQgaW5zdGFuY2Ugb2JqZWN0IHRvIHByb2Nlc3NcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQyBhcyBDb21wb25lbnRcbiAgICogICBwYXJ0aWNpcGFudCBCIGFzIE5neEJhc2VDb21wb25lbnRcbiAgICogICBwYXJ0aWNpcGFudCBQIGFzIFByb3BzIE9iamVjdFxuICAgKlxuICAgKiAgIEMtPj5COiBwYXJzZVByb3BzKGluc3RhbmNlKVxuICAgKiAgIEItPj5COiBHZXQgT2JqZWN0LmtleXMoaW5zdGFuY2UpXG4gICAqICAgbG9vcCBGb3IgZWFjaCBrZXkgaW4gaW5zdGFuY2VcbiAgICogICAgIEItPj5QOiBDaGVjayBpZiBrZXkgZXhpc3RzIGluIHRoaXMucHJvcHNcbiAgICogICAgIGFsdCBLZXkgZXhpc3RzIGluIHByb3BzXG4gICAqICAgICAgIEItPj5COiBTZXQgdGhpc1trZXldID0gdGhpcy5wcm9wc1trZXldXG4gICAqICAgICBlbHNlIEtleSBub3QgaW4gcHJvcHNcbiAgICogICAgICAgTm90ZSBvdmVyIEI6IFNraXAgdGhpcyBrZXlcbiAgICogICAgIGVuZFxuICAgKiAgIGVuZFxuICAgKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBtZW1iZXJPZiBOZ3hCYXNlQ29tcG9uZW50XG4gICAqL1xuICBwcm90ZWN0ZWQgcGFyc2VQcm9wcyhpbnN0YW5jZTogS2V5VmFsdWUsIHNraXA6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgT2JqZWN0LmtleXMoaW5zdGFuY2UpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMucHJvcHMpLmluY2x1ZGVzKGtleSkgJiYgIXNraXAuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAodGhpcyBhcyBLZXlWYWx1ZSlba2V5XSA9IHRoaXMucHJvcHNba2V5XTtcbiAgICAgICAgZGVsZXRlIHRoaXMucHJvcHNba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZighdGhpcy5pbml0aWFsaXplZClcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICB9XG59XG4iXX0=
@@ -111,25 +111,27 @@ export class NgxCrudFormField {
111
111
  */
112
112
  getErrors(parent) {
113
113
  const formControl = this.formControl;
114
- const accordionComponent = parent.closest('ngx-decaf-fieldset')?.querySelector('ion-accordion-group');
115
- if ((!formControl.pristine || formControl.touched) && !formControl.valid) {
116
- const errors = Object.keys(formControl.errors ?? {}).map(key => ({
117
- key: key,
118
- message: key,
119
- }));
120
- if (errors.length) {
121
- if (accordionComponent && !this.validationErrorEventDispateched) {
122
- const validationErrorEvent = new CustomEvent(EventConstants.VALIDATION_ERROR, {
123
- detail: { fieldName: this.name, hasErrors: true },
124
- bubbles: true
125
- });
126
- accordionComponent.dispatchEvent(validationErrorEvent);
127
- this.validationErrorEventDispateched = true;
114
+ if (formControl) {
115
+ const accordionComponent = parent.closest('ngx-decaf-fieldset')?.querySelector('ion-accordion-group');
116
+ if ((!formControl.pristine || formControl.touched) && !formControl.valid) {
117
+ const errors = Object.keys(formControl.errors ?? {}).map(key => ({
118
+ key: key,
119
+ message: key,
120
+ }));
121
+ if (errors.length) {
122
+ if (accordionComponent && !this.validationErrorEventDispateched) {
123
+ const validationErrorEvent = new CustomEvent(EventConstants.VALIDATION_ERROR, {
124
+ detail: { fieldName: this.name, hasErrors: true },
125
+ bubbles: true
126
+ });
127
+ accordionComponent.dispatchEvent(validationErrorEvent);
128
+ this.validationErrorEventDispateched = true;
129
+ }
128
130
  }
131
+ for (const error of errors)
132
+ return `* ${this.sf(this.translateService.instant(`errors.${error?.['message']}`), this[error?.['key']] ?? "")}`;
129
133
  }
130
- for (const error of errors)
131
- return `* ${this.sf(this.translateService.instant(`errors.${error?.['message']}`), this[error?.['key']] ?? "")}`;
132
134
  }
133
135
  }
134
136
  }
135
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmd4Q3J1ZEZvcm1GaWVsZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL05neENydWRGb3JtRmllbGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFzQyxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU3RixPQUFPLEVBQWtCLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV2RixPQUFPLEVBQWMsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU3Qzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFnQixnQkFBZ0I7SUFBdEM7UUF3RFkscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFOUMsb0NBQStCLEdBQVksS0FBSyxDQUFDO1FBUXpELDZCQUE2QjtRQUU3Qjs7OztXQUlHO1FBQ0gsT0FBRSxHQUFHLEVBQUUsQ0FBQztRQUVSOzs7O1dBSUc7UUFDSCxnRUFBZ0U7UUFDaEUsYUFBUSxHQUFrQixHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFFbkM7Ozs7V0FJRztRQUNILGdFQUFnRTtRQUNoRSxZQUFPLEdBQWtCLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQW1HcEMsQ0FBQztJQWpHQzs7OztPQUlHO0lBQ0gsVUFBVSxDQUFDLEdBQVc7UUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxnQkFBZ0IsQ0FBQyxFQUFpQjtRQUNoQyxJQUFJLENB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QUFPLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFVBQVUsS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFHLElBQWlCLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ25JLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDcnVkT3BlcmF0aW9uS2V5cywgRmllbGRQcm9wZXJ0aWVzLCBSZW5kZXJpbmdFcnJvciB9IGZyb20gJ0BkZWNhZi10cy91aS1kZWNvcmF0b3JzJztcbmltcG9ydCB7IEtleVZhbHVlLCBQb3NzaWJsZUlucHV0VHlwZXMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IENydWRPcGVyYXRpb25zLCBJbnRlcm5hbEVycm9yLCBPcGVyYXRpb25LZXlzIH0gZnJvbSAnQGRlY2FmLXRzL2RiLWRlY29yYXRvcnMnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBFbGVtZW50UmVmLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5neEZvcm1TZXJ2aWNlIH0gZnJvbSAnLi9OZ3hGb3JtU2VydmljZSc7XG5pbXBvcnQgeyBzZiB9IGZyb20gJ0BkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvbic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBFdmVudENvbnN0YW50cyB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuLyoqXG4gKiBAY2xhc3MgTmd4Q3J1ZEZvcm1GaWVsZFxuICogQGltcGxlbWVudHMge0ZpZWxkUHJvcGVydGllc31cbiAqIEBpbXBsZW1lbnRzIHtDb250cm9sVmFsdWVBY2Nlc3Nvcn1cbiAqIEBzdW1tYXJ5IEFic3RyYWN0IGNsYXNzIHJlcHJlc2VudGluZyBhIENSVUQgZm9ybSBmaWVsZCBmb3IgQW5ndWxhciBhcHBsaWNhdGlvbnNcbiAqIEBkZXNjcmlwdGlvbiBUaGlzIGNsYXNzIHByb3ZpZGVzIHRoZSBiYXNlIGltcGxlbWVudGF0aW9uIGZvciBDUlVEIGZvcm0gZmllbGRzIGluIEFuZ3VsYXIsXG4gKiBpbXBsZW1lbnRpbmcgYm90aCBDcnVkRm9ybUZpZWxkIGFuZCBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTmd4Q3J1ZEZvcm1GaWVsZCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGaWVsZFByb3BlcnRpZXMge1xuICAvKipcbiAgICogQHN1bW1hcnkgUmVmZXJlbmNlIHRvIHRoZSBjb21wb25lbnQncyBlbGVtZW50XG4gICAqIEBkZXNjcmlwdGlvbiBFbGVtZW50UmVmIHJlcHJlc2VudGluZyB0aGUgY29tcG9uZW50J3MgbmF0aXZlIGVsZW1lbnRcbiAgICovXG4gIGNvbXBvbmVudCE6IEVsZW1lbnRSZWY7XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IEN1cnJlbnQgQ1JVRCBvcGVyYXRpb25cbiAgICogQGRlc2NyaXB0aW9uIFJlcHJlc2VudHMgdGhlIGN1cnJlbnQgQ1JVRCBvcGVyYXRpb24gYmVpbmcgcGVyZm9ybWVkXG4gICAqL1xuICBvcGVyYXRpb24hOiBDcnVkT3BlcmF0aW9ucztcblxuICAvKipcbiAgICogQHN1bW1hcnkgRm9ybSBncm91cCBmb3IgdGhlIGZpZWxkXG4gICAqIEBkZXNjcmlwdGlvbiBBbmd1bGFyIEZvcm1Hcm91cCBpbnN0YW5jZSBmb3IgdGhlIGZpZWxkXG4gICAqL1xuICBmb3JtR3JvdXAhOiBGb3JtR3JvdXAgfCB1bmRlZmluZWQ7XG5cbiAgZm9ybUNvbnRyb2whOiBGb3JtQ29udHJvbDtcblxuICBuYW1lITogc3RyaW5nO1xuXG4gIHBhdGghOiBzdHJpbmc7XG5cbiAgY2hpbGRPZj86IHN0cmluZztcblxuICB0eXBlITogUG9zc2libGVJbnB1dFR5cGVzO1xuXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcblxuICB1aWQ/OiBzdHJpbmc7XG5cbiAgLy8gVmFsaWRhdGlvblxuXG4gIGZvcm1hdD86IHN0cmluZztcbiAgaGlkZGVuPzogYm9vbGVhbiB8IENydWRPcGVyYXRpb25LZXlzW107XG4gIG1heD86IG51bWJlciB8IERhdGU7XG4gIG1heGxlbmd0aD86IG51bWJlcjtcbiAgbWluPzogbnVtYmVyIHwgRGF0ZTtcbiAgbWlubGVuZ3RoPzogbnVtYmVyO1xuICBwYXR0ZXJuPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZWFkb25seT86IGJvb2xlYW47XG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbiAgc3RlcD86IG51bWJlcjtcbiAgZXF1YWxzPzogc3RyaW5nO1xuICBkaWZmZXJlbnQ/OiBzdHJpbmc7XG4gIGxlc3NUaGFuPzogc3RyaW5nO1xuICBsZXNzVGhhbk9yRXF1YWw/OiBzdHJpbmc7XG4gIGdyZWF0ZXJUaGFuPzogc3RyaW5nO1xuICBncmVhdGVyVGhhbk9yRXF1YWw/OiBzdHJpbmc7XG5cbiAgdmFsdWUhOiBzdHJpbmcgfCBudW1iZXIgfCBEYXRlO1xuXG4gIG11bHRpcGxlITogYm9vbGVhbjtcblxuICBwcm90ZWN0ZWQgdHJhbnNsYXRlU2VydmljZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcblxuICBwcml2YXRlIHZhbGlkYXRpb25FcnJvckV2ZW50RGlzcGF0ZWNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQHN1bW1hcnkgUGFyZW50IEhUTUwgZWxlbWVudFxuICAgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgSFRNTCBlbGVtZW50IG9mIHRoZSBmaWVsZFxuICAgKi9cbiAgcHJvdGVjdGVkIHBhcmVudD86IEhUTUxFbGVtZW50O1xuXG4gIC8vIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFN0cmluZyBmb3JtYXR0aW5nIGZ1bmN0aW9uXG4gICAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIHNmIGZ1bmN0aW9uIGZvciBlcnJvciBtZXNzYWdlIGZvcm1hdHRpbmdcbiAgICogQHByb3Age2Z1bmN0aW9uKHN0cmluZywgLi4uc3RyaW5nKTogc3RyaW5nfSBzZiAtIFN0cmluZyBmb3JtYXR0aW5nIGZ1bmN0aW9uXG4gICAqL1xuICBzZiA9IHNmO1xuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBDaGFuZ2UgY2FsbGJhY2sgZnVuY3Rpb25cbiAgICogQGRlc2NyaXB0aW9uIEZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBmaWVsZCB2YWx1ZSBjaGFuZ2VzXG4gICAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTogdW5rbm93bn0gb25DaGFuZ2UgLSBvbkNoYW5nZSBldmVudCBoYW5kbGVyXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIG9uQ2hhbmdlOiAoKSA9PiB1bmtub3duID0gKCkgPT4ge307XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFRvdWNoIGNhbGxiYWNrIGZ1bmN0aW9uXG4gICAqIEBkZXNjcmlwdGlvbiBGdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgZmllbGQgaXMgdG91Y2hlZFxuICAgKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IHVua25vd259IG9uVG91Y2ggLSBvblRvdWNoIGV2ZW50IGhhbmRsZXJcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgb25Ub3VjaDogKCkgPT4gdW5rbm93biA9ICgpID0+IHt9O1xuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBXcml0ZSB2YWx1ZSB0byB0aGUgZmllbGRcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gb2JqIC0gVGhlIHZhbHVlIHRvIGJlIHNldFxuICAgKi9cbiAgd3JpdGVWYWx1ZShvYmo6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSBvYmo7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgUmVnaXN0ZXIgY2hhbmdlIGNhbGxiYWNrXG4gICAqIEBkZXNjcmlwdGlvbiBSZWdpc3RlcnMgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgZmllbGQgdmFsdWUgY2hhbmdlc1xuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCk6IHVua25vd259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBvbiBjaGFuZ2VcbiAgICovXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICgpID0+IHVua25vd24pOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgUmVnaXN0ZXIgdG91Y2ggY2FsbGJhY2tcbiAgICogQGRlc2NyaXB0aW9uIFJlZ2lzdGVycyBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBmaWVsZCBpcyB0b3VjaGVkXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oKTogdW5rbm93bn0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uIHRvdWNoXG4gICAqL1xuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaCA9IGZuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFNldCBkaXNhYmxlZCBzdGF0ZVxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIGZpZWxkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNEaXNhYmxlZCAtIFdoZXRoZXIgdGhlIGZpZWxkIHNob3VsZCBiZSBkaXNhYmxlZFxuICAgKi9cbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IEFmdGVyIHZpZXcgaW5pdGlhbGl6YXRpb24gbG9naWNcbiAgICogQGRlc2NyaXB0aW9uIFBlcmZvcm1zIG5lY2Vzc2FyeSBzZXR1cCBhZnRlciB0aGUgdmlldyBoYXMgYmVlbiBpbml0aWFsaXplZFxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9IFRoZSBwYXJlbnQgZWxlbWVudCBvZiB0aGUgZmllbGRcbiAgICovXG4gIGFmdGVyVmlld0luaXQoKTogSFRNTEVsZW1lbnQge1xuICAgIGxldCBwYXJlbnQ6IEhUTUxFbGVtZW50O1xuICAgIHN3aXRjaCAodGhpcy5vcGVyYXRpb24pIHtcbiAgICAgIGNhc2UgT3BlcmF0aW9uS2V5cy5SRUFEOlxuICAgICAgY2FzZSBPcGVyYXRpb25LZXlzLkRFTEVURTpcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcG9uZW50Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgIGNhc2UgT3BlcmF0aW9uS2V5cy5DUkVBVEU6XG4gICAgICBjYXNlIE9wZXJhdGlvbktleXMuVVBEQVRFOlxuICAgICAgICB0cnkge1xuICAgICAgICAgIHBhcmVudCA9IE5neEZvcm1TZXJ2aWNlLmdldFBhcmVudEVsKHRoaXMuY29tcG9uZW50Lm5hdGl2ZUVsZW1lbnQsICdkaXYnKTtcbiAgICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICAgIHRocm93IG5ldyBSZW5kZXJpbmdFcnJvcihgVW5hYmxlIHRvIHJldHJpZXZlIHBhcmVudCBmb3JtIGVsZW1lbnQgZm9yIHRoZSAke3RoaXMub3BlcmF0aW9ufTogJHtlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBlfWApO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5neEZvcm1TZXJ2aWNlLnJlZ2lzdGVyKHBhcmVudC5pZCwgdGhpcy5mb3JtR3JvdXAsIHRoaXMgYXMgQW5ndWxhckZpZWxkRGVmaW5pdGlvbik7XG4gICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgSW52YWxpZCBvcGVyYXRpb246ICR7dGhpcy5vcGVyYXRpb259YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IENsZWFudXAgb24gY29tcG9uZW50IGRlc3RydWN0aW9uXG4gICAqIEBkZXNjcmlwdGlvbiBVbnJlZ2lzdGVycyB0aGUgZmllbGQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZFxuICAgKi9cbiAgb25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmKHRoaXMuZm9ybUdyb3VwKVxuICAgICAgTmd4Rm9ybVNlcnZpY2UudW5yZWdpc3Rlcih0aGlzLmZvcm1Hcm91cCk7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgR2V0IGZpZWxkIGVycm9yc1xuICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGFsbCBlcnJvcnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWVsZFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfHZvaWR9IEFuIGFycmF5IG9mIGVycm9yIG9iamVjdHNcbiAgICovXG4gIGdldEVycm9ycyhwYXJlbnQ6IEhUTUxFbGVtZW50KTogc3RyaW5nIHwgdm9pZCB7XG4gICAgY29uc3QgZm9ybUNvbnRyb2wgPSB0aGlzLmZvcm1Db250cm9sO1xuICAgIGNvbnN0IGFjY29yZGlvbkNvbXBvbmVudCA9IHBhcmVudC5jbG9zZXN0KCduZ3gtZGVjYWYtZmllbGRzZXQnKT8ucXVlcnlTZWxlY3RvcignaW9uLWFjY29yZGlvbi1ncm91cCcpO1xuICAgIGlmKCghZm9ybUNvbnRyb2wucHJpc3RpbmUgfHwgZm9ybUNvbnRyb2wudG91Y2hlZCkgJiYgIWZvcm1Db250cm9sLnZhbGlkKSB7XG4gICAgICBjb25zdCBlcnJvcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5bXSA9IE9iamVjdC5rZXlzKGZvcm1Db250cm9sLmVycm9ycyA/PyB7fSkubWFwKGtleSA9PiAoe1xuICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgbWVzc2FnZToga2V5LFxuICAgICAgfSkpO1xuICAgICAgaWYoZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICBpZihhY2NvcmRpb25Db21wb25lbnQgJiYgIXRoaXMudmFsaWRhdGlvbkVycm9yRXZlbnREaXNwYXRlY2hlZCkge1xuICAgICAgICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvckV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KEV2ZW50Q29uc3RhbnRzLlZBTElEQVRJT05fRVJST1IsIHtcbiAgICAgICAgICAgIGRldGFpbDoge2ZpZWxkTmFtZTogdGhpcy5uYW1lLCBoYXNFcnJvcnM6IHRydWV9LFxuICAgICAgICAgICAgYnViYmxlczogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGFjY29yZGlvbkNvbXBvbmVudC5kaXNwYXRjaEV2ZW50KHZhbGlkYXRpb25FcnJvckV2ZW50KTtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25FcnJvckV2ZW50RGlzcGF0ZWNoZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IoY29uc3QgZXJyb3Igb2YgZXJyb3JzKVxuICAgICAgICByZXR1cm4gYCogJHt0aGlzLnNmKHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBlcnJvcnMuJHtlcnJvcj8uWydtZXNzYWdlJ119YCksICh0aGlzIGFzIEtleVZhbHVlKVtlcnJvcj8uWydrZXknXV0gPz8gXCJcIil9YDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
137
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmd4Q3J1ZEZvcm1GaWVsZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL05neENydWRGb3JtRmllbGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFzQyxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU3RixPQUFPLEVBQWtCLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV2RixPQUFPLEVBQWMsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU3Qzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFnQixnQkFBZ0I7SUFBdEM7UUEwRFkscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFOUMsb0NBQStCLEdBQVksS0FBSyxDQUFDO1FBUXpELDZCQUE2QjtRQUU3Qjs7OztXQUlHO1FBQ0gsT0FBRSxHQUFHLEVBQUUsQ0FBQztRQUVSOzs7O1dBSUc7UUFDSCxnRUFBZ0U7UUFDaEUsYUFBUSxHQUFrQixHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFFbkM7Ozs7V0FJRztRQUNILGdFQUFnRTtRQUNoRSxZQUFPLEdBQWtCLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQXNHcEMsQ0FBQztJQXBHQzs7OztPQUlHO0lBQ0gsVUFBVSxDQUFDLEdBQVc7UUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxnQkFBZ0IsQ0FBQyxFQUFpQjtRQUNoQyxJQUFJLENB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SSxNQUFNLEtBQUssSUFBSSxNQUFNO29CQUN2QixPQUFPLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFVBQVUsS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFHLElBQWlCLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ25JLENBQUM7UUFDSCxDQUFDO0lBRUgsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ3J1ZE9wZXJhdGlvbktleXMsIEZpZWxkUHJvcGVydGllcywgUmVuZGVyaW5nRXJyb3IgfSBmcm9tICdAZGVjYWYtdHMvdWktZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBLZXlWYWx1ZSwgUG9zc2libGVJbnB1dFR5cGVzIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBDcnVkT3BlcmF0aW9ucywgSW50ZXJuYWxFcnJvciwgT3BlcmF0aW9uS2V5cyB9IGZyb20gJ0BkZWNhZi10cy9kYi1kZWNvcmF0b3JzJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRWxlbWVudFJlZiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3hGb3JtU2VydmljZSB9IGZyb20gJy4vTmd4Rm9ybVNlcnZpY2UnO1xuaW1wb3J0IHsgc2YgfSBmcm9tICdAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb24nO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRXZlbnRDb25zdGFudHMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8qKlxuICogQGNsYXNzIE5neENydWRGb3JtRmllbGRcbiAqIEBpbXBsZW1lbnRzIHtGaWVsZFByb3BlcnRpZXN9XG4gKiBAaW1wbGVtZW50cyB7Q29udHJvbFZhbHVlQWNjZXNzb3J9XG4gKiBAc3VtbWFyeSBBYnN0cmFjdCBjbGFzcyByZXByZXNlbnRpbmcgYSBDUlVEIGZvcm0gZmllbGQgZm9yIEFuZ3VsYXIgYXBwbGljYXRpb25zXG4gKiBAZGVzY3JpcHRpb24gVGhpcyBjbGFzcyBwcm92aWRlcyB0aGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBmb3IgQ1JVRCBmb3JtIGZpZWxkcyBpbiBBbmd1bGFyLFxuICogaW1wbGVtZW50aW5nIGJvdGggQ3J1ZEZvcm1GaWVsZCBhbmQgQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlcy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5neENydWRGb3JtRmllbGQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRmllbGRQcm9wZXJ0aWVzIHtcbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFJlZmVyZW5jZSB0byB0aGUgY29tcG9uZW50J3MgZWxlbWVudFxuICAgKiBAZGVzY3JpcHRpb24gRWxlbWVudFJlZiByZXByZXNlbnRpbmcgdGhlIGNvbXBvbmVudCdzIG5hdGl2ZSBlbGVtZW50XG4gICAqL1xuICBjb21wb25lbnQhOiBFbGVtZW50UmVmO1xuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBDdXJyZW50IENSVUQgb3BlcmF0aW9uXG4gICAqIEBkZXNjcmlwdGlvbiBSZXByZXNlbnRzIHRoZSBjdXJyZW50IENSVUQgb3BlcmF0aW9uIGJlaW5nIHBlcmZvcm1lZFxuICAgKi9cbiAgb3BlcmF0aW9uITogQ3J1ZE9wZXJhdGlvbnM7XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IEZvcm0gZ3JvdXAgZm9yIHRoZSBmaWVsZFxuICAgKiBAZGVzY3JpcHRpb24gQW5ndWxhciBGb3JtR3JvdXAgaW5zdGFuY2UgZm9yIHRoZSBmaWVsZFxuICAgKi9cbiAgZm9ybUdyb3VwITogRm9ybUdyb3VwIHwgdW5kZWZpbmVkO1xuXG4gIGZvcm1Db250cm9sITogRm9ybUNvbnRyb2w7XG5cbiAgbmFtZSE6IHN0cmluZztcblxuICBwYXRoITogc3RyaW5nO1xuXG4gIGNoaWxkT2Y/OiBzdHJpbmc7XG5cbiAgdHlwZSE6IFBvc3NpYmxlSW5wdXRUeXBlcztcblxuICBkaXNhYmxlZD86IGJvb2xlYW47XG5cbiAgdWlkPzogc3RyaW5nO1xuXG4gIHBhZ2UhOiBudW1iZXI7XG5cbiAgLy8gVmFsaWRhdGlvblxuXG4gIGZvcm1hdD86IHN0cmluZztcbiAgaGlkZGVuPzogYm9vbGVhbiB8IENydWRPcGVyYXRpb25LZXlzW107XG4gIG1heD86IG51bWJlciB8IERhdGU7XG4gIG1heGxlbmd0aD86IG51bWJlcjtcbiAgbWluPzogbnVtYmVyIHwgRGF0ZTtcbiAgbWlubGVuZ3RoPzogbnVtYmVyO1xuICBwYXR0ZXJuPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZWFkb25seT86IGJvb2xlYW47XG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbiAgc3RlcD86IG51bWJlcjtcbiAgZXF1YWxzPzogc3RyaW5nO1xuICBkaWZmZXJlbnQ/OiBzdHJpbmc7XG4gIGxlc3NUaGFuPzogc3RyaW5nO1xuICBsZXNzVGhhbk9yRXF1YWw/OiBzdHJpbmc7XG4gIGdyZWF0ZXJUaGFuPzogc3RyaW5nO1xuICBncmVhdGVyVGhhbk9yRXF1YWw/OiBzdHJpbmc7XG5cbiAgdmFsdWUhOiBzdHJpbmcgfCBudW1iZXIgfCBEYXRlO1xuXG4gIG11bHRpcGxlITogYm9vbGVhbjtcblxuICBwcm90ZWN0ZWQgdHJhbnNsYXRlU2VydmljZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcblxuICBwcml2YXRlIHZhbGlkYXRpb25FcnJvckV2ZW50RGlzcGF0ZWNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQHN1bW1hcnkgUGFyZW50IEhUTUwgZWxlbWVudFxuICAgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgSFRNTCBlbGVtZW50IG9mIHRoZSBmaWVsZFxuICAgKi9cbiAgcHJvdGVjdGVkIHBhcmVudD86IEhUTUxFbGVtZW50O1xuXG4gIC8vIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFN0cmluZyBmb3JtYXR0aW5nIGZ1bmN0aW9uXG4gICAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIHNmIGZ1bmN0aW9uIGZvciBlcnJvciBtZXNzYWdlIGZvcm1hdHRpbmdcbiAgICogQHByb3Age2Z1bmN0aW9uKHN0cmluZywgLi4uc3RyaW5nKTogc3RyaW5nfSBzZiAtIFN0cmluZyBmb3JtYXR0aW5nIGZ1bmN0aW9uXG4gICAqL1xuICBzZiA9IHNmO1xuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBDaGFuZ2UgY2FsbGJhY2sgZnVuY3Rpb25cbiAgICogQGRlc2NyaXB0aW9uIEZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBmaWVsZCB2YWx1ZSBjaGFuZ2VzXG4gICAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTogdW5rbm93bn0gb25DaGFuZ2UgLSBvbkNoYW5nZSBldmVudCBoYW5kbGVyXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIG9uQ2hhbmdlOiAoKSA9PiB1bmtub3duID0gKCkgPT4ge307XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFRvdWNoIGNhbGxiYWNrIGZ1bmN0aW9uXG4gICAqIEBkZXNjcmlwdGlvbiBGdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgZmllbGQgaXMgdG91Y2hlZFxuICAgKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IHVua25vd259IG9uVG91Y2ggLSBvblRvdWNoIGV2ZW50IGhhbmRsZXJcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgb25Ub3VjaDogKCkgPT4gdW5rbm93biA9ICgpID0+IHt9O1xuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBXcml0ZSB2YWx1ZSB0byB0aGUgZmllbGRcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gb2JqIC0gVGhlIHZhbHVlIHRvIGJlIHNldFxuICAgKi9cbiAgd3JpdGVWYWx1ZShvYmo6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSBvYmo7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgUmVnaXN0ZXIgY2hhbmdlIGNhbGxiYWNrXG4gICAqIEBkZXNjcmlwdGlvbiBSZWdpc3RlcnMgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgZmllbGQgdmFsdWUgY2hhbmdlc1xuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCk6IHVua25vd259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBvbiBjaGFuZ2VcbiAgICovXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICgpID0+IHVua25vd24pOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgUmVnaXN0ZXIgdG91Y2ggY2FsbGJhY2tcbiAgICogQGRlc2NyaXB0aW9uIFJlZ2lzdGVycyBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBmaWVsZCBpcyB0b3VjaGVkXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oKTogdW5rbm93bn0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uIHRvdWNoXG4gICAqL1xuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaCA9IGZuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFNldCBkaXNhYmxlZCBzdGF0ZVxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIGZpZWxkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNEaXNhYmxlZCAtIFdoZXRoZXIgdGhlIGZpZWxkIHNob3VsZCBiZSBkaXNhYmxlZFxuICAgKi9cbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IEFmdGVyIHZpZXcgaW5pdGlhbGl6YXRpb24gbG9naWNcbiAgICogQGRlc2NyaXB0aW9uIFBlcmZvcm1zIG5lY2Vzc2FyeSBzZXR1cCBhZnRlciB0aGUgdmlldyBoYXMgYmVlbiBpbml0aWFsaXplZFxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9IFRoZSBwYXJlbnQgZWxlbWVudCBvZiB0aGUgZmllbGRcbiAgICovXG4gIGFmdGVyVmlld0luaXQoKTogSFRNTEVsZW1lbnQge1xuICAgIGxldCBwYXJlbnQ6IEhUTUxFbGVtZW50O1xuICAgIHN3aXRjaCAodGhpcy5vcGVyYXRpb24pIHtcbiAgICAgIGNhc2UgT3BlcmF0aW9uS2V5cy5SRUFEOlxuICAgICAgY2FzZSBPcGVyYXRpb25LZXlzLkRFTEVURTpcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcG9uZW50Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgIGNhc2UgT3BlcmF0aW9uS2V5cy5DUkVBVEU6XG4gICAgICBjYXNlIE9wZXJhdGlvbktleXMuVVBEQVRFOlxuICAgICAgICB0cnkge1xuICAgICAgICAgIHBhcmVudCA9IE5neEZvcm1TZXJ2aWNlLmdldFBhcmVudEVsKHRoaXMuY29tcG9uZW50Lm5hdGl2ZUVsZW1lbnQsICdkaXYnKTtcbiAgICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICAgIHRocm93IG5ldyBSZW5kZXJpbmdFcnJvcihgVW5hYmxlIHRvIHJldHJpZXZlIHBhcmVudCBmb3JtIGVsZW1lbnQgZm9yIHRoZSAke3RoaXMub3BlcmF0aW9ufTogJHtlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBlfWApO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5neEZvcm1TZXJ2aWNlLnJlZ2lzdGVyKHBhcmVudC5pZCwgdGhpcy5mb3JtR3JvdXAsIHRoaXMgYXMgQW5ndWxhckZpZWxkRGVmaW5pdGlvbik7XG4gICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgSW52YWxpZCBvcGVyYXRpb246ICR7dGhpcy5vcGVyYXRpb259YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IENsZWFudXAgb24gY29tcG9uZW50IGRlc3RydWN0aW9uXG4gICAqIEBkZXNjcmlwdGlvbiBVbnJlZ2lzdGVycyB0aGUgZmllbGQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZFxuICAgKi9cbiAgb25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmKHRoaXMuZm9ybUdyb3VwKVxuICAgICAgTmd4Rm9ybVNlcnZpY2UudW5yZWdpc3Rlcih0aGlzLmZvcm1Hcm91cCk7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgR2V0IGZpZWxkIGVycm9yc1xuICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGFsbCBlcnJvcnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWVsZFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfHZvaWR9IEFuIGFycmF5IG9mIGVycm9yIG9iamVjdHNcbiAgICovXG4gIGdldEVycm9ycyhwYXJlbnQ6IEhUTUxFbGVtZW50KTogc3RyaW5nIHwgdm9pZCB7XG4gICAgY29uc3QgZm9ybUNvbnRyb2wgPSB0aGlzLmZvcm1Db250cm9sO1xuICAgIGlmKGZvcm1Db250cm9sKSB7XG4gICAgICBjb25zdCBhY2NvcmRpb25Db21wb25lbnQgPSBwYXJlbnQuY2xvc2VzdCgnbmd4LWRlY2FmLWZpZWxkc2V0Jyk/LnF1ZXJ5U2VsZWN0b3IoJ2lvbi1hY2NvcmRpb24tZ3JvdXAnKTtcbiAgICAgIGlmKCghZm9ybUNvbnRyb2wucHJpc3RpbmUgfHwgZm9ybUNvbnRyb2wudG91Y2hlZCkgJiYgIWZvcm1Db250cm9sLnZhbGlkKSB7XG4gICAgICAgIGNvbnN0IGVycm9yczogUmVjb3JkPHN0cmluZywgc3RyaW5nPltdID0gT2JqZWN0LmtleXMoZm9ybUNvbnRyb2wuZXJyb3JzID8/IHt9KS5tYXAoa2V5ID0+ICh7XG4gICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgbWVzc2FnZToga2V5LFxuICAgICAgICB9KSk7XG4gICAgICAgIGlmKGVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICBpZihhY2NvcmRpb25Db21wb25lbnQgJiYgIXRoaXMudmFsaWRhdGlvbkVycm9yRXZlbnREaXNwYXRlY2hlZCkge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGlvbkVycm9yRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoRXZlbnRDb25zdGFudHMuVkFMSURBVElPTl9FUlJPUiwge1xuICAgICAgICAgICAgICBkZXRhaWw6IHtmaWVsZE5hbWU6IHRoaXMubmFtZSwgaGFzRXJyb3JzOiB0cnVlfSxcbiAgICAgICAgICAgICAgYnViYmxlczogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhY2NvcmRpb25Db21wb25lbnQuZGlzcGF0Y2hFdmVudCh2YWxpZGF0aW9uRXJyb3JFdmVudCk7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25FcnJvckV2ZW50RGlzcGF0ZWNoZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IoY29uc3QgZXJyb3Igb2YgZXJyb3JzKVxuICAgICAgICAgIHJldHVybiBgKiAke3RoaXMuc2YodGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYGVycm9ycy4ke2Vycm9yPy5bJ21lc3NhZ2UnXX1gKSwgKHRoaXMgYXMgS2V5VmFsdWUpW2Vycm9yPy5bJ2tleSddXSA/PyBcIlwiKX1gO1xuICAgICAgfVxuICAgIH1cblxuICB9XG59XG4iXX0=