@esfaenza/forms-and-validations 15.2.9 → 15.2.11

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.
@@ -193,7 +193,7 @@ export class BaseFormControl {
193
193
  v._createValidator();
194
194
  });
195
195
  }
196
- this.ngControl.control.addValidators(this._validators);
196
+ this.ngControl.control.addValidators(this._validators.filter(v => !v.ngOnInit));
197
197
  this.ngControl.control.updateValueAndValidity();
198
198
  }
199
199
  }
@@ -542,4 +542,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
542
542
  }], inputFinalized: [{
543
543
  type: Output
544
544
  }] } });
545
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1mb3JtLWNvbnRyb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3Jtcy1hbmQtdmFsaWRhdGlvbnMvc3JjL2xpYi9mb3Jtcy9iYXNlLWZvcm0tY29udHJvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFvRCxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JHLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBSXZILE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzFELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQUUzQyxrRUFBa0U7QUFFbEUsTUFBTSxPQUFnQixlQUFlO0lBb0pqQzs7OztPQUlHO0lBQ0gsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBYSxRQUFRLENBQUMsS0FBYztRQUNoQyxJQUFJLElBQUksQ0FBQyxtQkFBbUI7WUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFhLGVBQWUsQ0FBQyxLQUFhO1FBQ3RDLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEMs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R0csVUFBVTtzQkFBbEIsS0FBSztnQkFNRyxNQUFNO3NCQUFkLEtBQUs7Z0JBR0csV0FBVztzQkFBbkIsS0FBSztnQkFHRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQUdHLEtBQUs7c0JBQWIsS0FBSztnQkFHRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csSUFBSTtzQkFBWixLQUFLO2dCQUdHLElBQUk7c0JBQVosS0FBSztnQkFHRyxNQUFNO3NCQUFkLEtBQUs7Z0JBR0csT0FBTztzQkFBZixLQUFLO2dCQU9HLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csV0FBVztzQkFBbkIsS0FBSztnQkFHRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBR0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csZUFBZTtzQkFBdkIsS0FBSztnQkFRRyxPQUFPO3NCQUFmLEtBQUs7Z0JBc0JPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBVU8sZUFBZTtzQkFBM0IsS0FBSztnQkFjaUQsa0JBQWtCO3NCQUF4RSxTQUFTO3VCQUFDLG1CQUFtQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFPSyx3QkFBd0I7c0JBQTdFLFNBQVM7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUd0QyxXQUFXO3NCQUFwQixNQUFNO2dCQUdHLFVBQVU7c0JBQW5CLE1BQU07Z0JBR0csY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCwgTmdGb3JtLCBOZ01vZGVsLCBSZXF1aXJlZFZhbGlkYXRvciB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFZpZXdDaGlsZCwgT3B0aW9uYWwsIEluamVjdCwgRGlyZWN0aXZlLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vLyAvLyBDb25maWd1cmF6aW9uaVxyXG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sU2VydmljZSwgQ29tcG9uZW50Q29udGV4dCB9IGZyb20gXCJAZXNmYWVuemEvYWNjZXNzLWNvbnRyb2xcIjtcclxuaW1wb3J0IHsgQUNPX0NVU1RPTUtFWSwgRkFWX0RFQlVHX01PREUgfSBmcm9tICcuLi90b2tlbnMnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgVGVtcGxhdGVSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBDaGFuZ2VFdmVudCB9IGZyb20gXCIuLi9tb2RlbHMvQ2hhbmdlRXZlbnRcIjtcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcblxyXG4vKiogQ29tcG9uZW50ZSBiYXNlIGRhIGN1aSB0dXR0aSBpIGNvbXBvbmVudGkgRm9ybSBpbXBsZW1lbnRhbm8gKi9cclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRm9ybUNvbnRyb2wgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xNDk4OFxyXG4gICAgICogVEw6RFI7IElsIHByaW1vIHZhbG9yZSBwYXNzYXRvIGFsIHdyaXRlVmFsdWUgw6ggbnVsbG8gcGVyY2jDqSBxdWFuZG8gaSBjYWduYWNjaSBmYW5ubyBuZXcgRm9ybUNvbnRyb2woKVxyXG4gICAgICogc2NyaXZvbm8gdW4gd3JpdGVWYWx1ZSBudWxsby4uLiBxdWluZGkgYWwgcHJpbW8gYmluZGluZyBzYWx0byBsJ2luaXppYWxpenphemlvbmUgc2UgaG8gbGEgY29wcGlhIG51bGwtZmlyc3RCaW5kXHJcbiAgICAgKiBwb2kgbWV0dGVuZG8gZmlyc3RCaW5kIGEgZmFsc2UgZGkgbMOsIGluIHBvaSBmdW56aW9ubyBjb21lIGRldm8uIFZpc3RhIGxhIGNhc2lzdGljYSBldml0byBlc3NlbnppYWxtZW50ZSBtZXTDoCBkZXRlY3RDaGFuZ2VzXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZmlyc3RCaW5kOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAvKipcclxuICAgICogSW5kaWNhIGRpIHV0aWxpenphcmUgaSB2YWxpZGF0b3JpIGNoZSBsJ3V0ZW50ZSBwaWF6emEgc3VsIGNvbXBvbmVudGUuIFxyXG4gICAgKiBEYSBub24gdXNhcmUgbmVsIGNhc28gZGkgZm9ybS1hZGFwdGl2ZSBkYXRvIGNoZSBpIHZhbGlkYXRvcmkgdmVuZ29ubyB2YWx1dGF0aSBpbiBiYXNlIGFsIHRpcG8gZWNjXHJcbiAgICAqL1xyXG4gICAgcHJvdGVjdGVkIFVzZVVzZXJWYWxpZGF0b3JzOmJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIC8qKiBJbmRpY2Egc2UgaWwgY2FtcG8gw6ggb2JibGlnYXRvcmlvIGkgb3B6aW9uYWxlICovXHJcbiAgICBwdWJsaWMgUmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogTW9kZWxsbyByYXBwcmVzZW50YXRvIGRhIHF1ZXN0byBjYW1wbyAqL1xyXG4gICAgcHVibGljIE1vZGVsOiBhbnk7XHJcblxyXG4gICAgLyoqIFZhbG9yZSBkZWwgTW9kZWxsbyAqL1xyXG4gICAgcHVibGljIEV2YWx1YXRlZE1vZGVsOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqIE5vbWUgZ2VuZXJhdG8gcGVyIGlsIGNvbnRyb2xsbyBpbnRlcm5vLiBEaSBkZWZhdWx0IMOoIGlsIG5vbWUgZGVsIGNvbnRyb2xsbyBlc3Rlcm5vIGNvbiBsJ2FnZ2l1bnRhIGRpIFwiX2ludGVybmFsXCIuIFNlcnZlIHBlciBldml0YXJlIGNyb3NzLWJpbmQgKi9cclxuICAgIHB1YmxpYyBHZW5lcmF0ZWROYW1lOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqIEluZGljYSBzZSBpbCBGb3JtIGNoZSBjb250aWVuZSBxdWVzdG8gY2FtcG8gw6ggZ2nDoCBzdGF0byByZWdpc3RyYXRvICovXHJcbiAgICBwcm90ZWN0ZWQgZm9ybUhhc0Jlbm5Cb3VuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhIHNlIHF1ZXN0byBjYW1wbyDDqCBzdGFjY2F0byBkYWwgRm9ybSwgYWQgZXNlbXBpbyBuZWwgY2FzbyBzaWEgaW4gdW4gbmctdGVtcGxhdGUgcHJvaWV0dGF0byBuZWwgZm9ybS5cclxuICAgICAqIFxyXG4gICAgICogSW4gcXVlbCBjYXNvIGxhIHZhcmlhYmlsZSAqKkZvcm0qKiBkZWwgY29tcG9uZW50ZSBkZXYnZXNzZXJlIHZhbG9yaXp6YXRhXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBkZXRhdGNoZWRGcm9tZm9ybTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwcm90ZWN0ZWQgcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4geyB9O1xyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwcm90ZWN0ZWQgb25Ub3VjaGVkID0gKCkgPT4geyB9O1xyXG5cclxuICAgIC8qKiBAaWdub3JlIFZlZGkgZ2V0dGVyIGUgc2V0dGVyICovXHJcbiAgICBwdWJsaWMgX3JlYWRvbmx5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBRdWFsb3JhIGNpIGZvc3NlIHVuIGNvbnRlc3RvIGNvbGxlZ2F0byBxdWVzdGEgdmFyaWFiaWxlIGlkZW50aWZpY2Egc2UgU29ubyBsJ093bmVyIG8gbWVuby5cclxuICAgICAqIFxyXG4gICAgICogU2Ugbm9uIGxvIHNvbm8sIGlsIGNhbXBvIHJpc3VsdGVyw6AgaW4gc29sYSBsZXR0dXJhIFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIEFwcENvbnRleHRPd25lcnNoaXA6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIC8qKiBTdWJqZWN0IGEgY3VpIGwnb2dnZXR0byBpbnRlcm5vIHNpIGNvbGxlZ2EgcGVyIGVmZmV0dHVhcmUgaWwgZm9jdXMgZGVsbCdlbGVtZW50byBpbnB1dCBzb3R0b3N0YW50ZSAqL1xyXG4gICAgQElucHV0KCkgRm9jdXNTdWJqZWN0OiBTdWJqZWN0PHZvaWQ+O1xyXG4gICAgLyoqXHJcbiAgICAqIEBFWFBFUklNRU5UQUxcclxuICAgICovXHJcbiAgICBASW5wdXQoKSBTZXRWYWxpZGF0aW9uU3ViamVjdDogU3ViamVjdDx7IGZpZWxkTmFtZTogc3RyaW5nLCBlcnJvcjogc3RyaW5nIH0+O1xyXG5cclxuICAgIC8qKiBNb2RhbGl0w6AgaW4gY3VpIHZpZW5lIG1vc3RyYXRvIGlsIGNhbXBvLCAxLTEgcmlzcGV0dG8gYWxsZSBkZWZpbml6aW9uaSBkaSBBbmd1bGFyIE1hdGVyaWFsICAqL1xyXG4gICAgQElucHV0KCkgRmllbGRBcHBlYXJlbmNlOiBcImxlZ2FjeVwiIHwgXCJzdGFuZGFyZFwiIHwgXCJmaWxsXCIgfCBcIm91dGxpbmVcIiA9IFwib3V0bGluZVwiO1xyXG5cclxuICAgIC8qKiBVdGlsaXp6YSBvIG1lbm8gaWwgTGF5b3V0IGRpIHVuIGZvcm0gKExhYmVsIGNvbiBpbnB1dCBkaSBmaWFuY28pLCBzZSBmYWxzZSBtb3N0cmEgc29sbyBsJ2lucHV0ICovXHJcbiAgICBASW5wdXQoKSBGb3JtTGF5b3V0OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAvKiogRGVmaW5pc2NlIHNlIHJpY2hpYW1hcmUgbCdFdmVudEVtaXR0ZXIgKippbnB1dENoYW5nZSoqIGluIG1hbmllcmEgY2xhc3NpY2EgKHRydWUpIG8gc29sbyBwZXIgbGEgY2hhbmdlIGNvbnNpZGVyYXRlIGRlZmluaXRpdmUgY29tZSB0YXN0byBpbnZpbyAvIGJsdXIgLyBlY2MuLi4gKGZhbHNlKSAqL1xyXG4gICAgQElucHV0KCkgRW1pdFBlbmRpbmdDaGFuZ2VzOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAvKiogQXR0aXZhIG8gZGlzYXR0aXZhIGxhIHZhbGlkYXppb25lIHBlciBxdWVzdG8gY29tcG9uZW50ZSAqL1xyXG4gICAgQElucHV0KCkgVmFsaWRhdGlvbjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLyoqIFxyXG4gICAgICogUGVybWV0dGUgZGkgc2NyaXZlcmUgbyBtZW5vIG5lbCBjYW1wbyBkaSBJbnB1dC4gU2kgZGlmZmVyZW56aWEgZGFsIFJlYWRvbmx5IGluIHF1YW50byBmaXNpY2FtZW50ZSBsJ0lucHV0IMOoIHNjcml2aWJpbGUgZSB2ZW5nb25vIG1hbnRlbnV0aSBpIHRlbWkgZGVsbGEgdmFsaWRhemlvbmVcclxuICAgICAqIG1hIGludGVyYWdpcmUgZGlyZXR0YW1lbnRlIGNvbiBsYSBjYXNlbGxhIGRpIElucHV0IHBlciBsJ3V0ZW50ZSBub24gw6ggcG9zc2liaWxlXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIEZyb3plbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBQbGFjZWhvbGRlciBwZXIgcXVhbmRvIGwnaW5wdXQgw6ggdnVvdG8gKi9cclxuICAgIEBJbnB1dCgpIFBsYWNlaG9sZGVyOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIC8qKiBDbGFzc2UgZXh0cmEgcGVyIGlsIGZvcm0tZ3JvdXAgaW4gY3VpIHZpZW5lIHdyYXBwYXRvIGwnaW5wdXQgKi9cclxuICAgIEBJbnB1dCgpIEZvcm1Hcm91cENsYXNzOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIC8qKiBNZXNzYWdnaW8gZGEgbW9zdHJhcmUgcXVhbmRvIGxhIHZhbGlkYXppb25lIGZhbGxpc2NlIHBlciBxdWVzdG8gY29tcG9uZW50ZS4gRGkgZGVmYXVsdCB2aWVuZSBwcm9wb3N0YSBkYWxsYSBsaWJyZXJpYSAqL1xyXG4gICAgQElucHV0KCkgRmFpbGVkVmFsaWRhdGlvbk1lc3NhZ2U6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgLyoqIElucHV0IGNoZSBmb3J6YSBsJ2ludmFsaWRpdMOgIGRlbCBjb21wb25lbnRlICovXHJcbiAgICBASW5wdXQoKSBGb3JjZWRFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBNb3N0cmEgdW4gdGVzdG8gYSBzaW5pc3RyYSBkZWxsJ2lucHV0IChGb3JtTGF5b3V0IHBlcm1ldHRlbmRvKSAqL1xyXG4gICAgQElucHV0KCkgTGFiZWw6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgLyoqIGNvbC1tZC1YIHBlciBsYSBsYWJlbCAqL1xyXG4gICAgQElucHV0KCkgTGFiZWxDb2xXaWR0aDogbnVtYmVyID0gNDtcclxuXHJcbiAgICAvKiogY29sLW1kLVggcGVyIGwnaW5wdXQgKi9cclxuICAgIEBJbnB1dCgpIElucHV0Q29sV2lkdGg6IG51bWJlciA9IDg7XHJcblxyXG4gICAgLyoqIEluZGljYSBzZSDDqCBsJ3VsdGltbyBjb21wb25lbnRlIGRpIHVuIGZvcm0gKHNlcnZlIHBlciByaW11b3ZlcmUgaWwgbWFyZ2luZSBmaW5hbGUpICovXHJcbiAgICBASW5wdXQoKSBMYXN0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIEFzc29jaWEgaWwgY29tcG9uZW50ZSBGb3JtIGEgcXVlc3RvIGlucHV0ICovXHJcbiAgICBASW5wdXQoKSBGb3JtOiBOZ0Zvcm0gPSBudWxsO1xyXG5cclxuICAgIC8qKiBTb3JnZW50ZSBkYSBjdWkgc2NlZ2xpZXJlIHZhbG9yaSBwZXIgaSBjb21wb25lbnRpIEZvcm0gY2hlIGxvIGNvbnNlbnRvbm8gKi9cclxuICAgIEBJbnB1dCgpIFNvdXJjZTogYW55W107XHJcblxyXG4gICAgLyoqIE5vbWUgZGVsbGEgcHJvcHJpZXTDoCBjaGUgY29udGllbmUgbCdJZCBkZWdsaSBvZ2dldHRpIGJpbmRhdGkgbmVsbGEgKipTb3VyY2UqKiAqL1xyXG4gICAgQElucHV0KCkgSWRGaWVsZDogc3RyaW5nID0gJ2lkJztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYSBzZSBpbCAqKlBsYWNlaG9sZGVyKiogZGV2J2Vzc2VyZSB1c2F0byBjb21lIHVuYSBmbG9hdGluZyBsYWJlbCBkaSBtYXRlcmlhbCBvIHNvbG8gY29tZSB1biBwbGFjZWhvbGRlciBzdGFuZGFyZCBcclxuICAgICAqIFxyXG4gICAgICogSWdub3JhdGEgbGF0byBhdXRvY29tcGxldGUsIGF1dG9jb21wbGV0ZS1tdWx0aSBlIHNlbGVjdCBpbiBxdWFudG8gaGFubm8gZ2VzdGlvbmkgcGFydGljb2xhcmkgZGkgcGxhY2Vob2xkZXIgZWNjLi4uXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIEZsb2F0aW5nTGFiZWw6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIC8qKiBJbmRpY2EgY2hlIGxhIHBhcnRlIGlucHV0IGRlbCBjb250cm9sbG8gZGV2J2Vzc2VyZSB1bmEgbGFiZWwgcmVhZG9ubHkgZSBsYSBwYXJ0ZSBsYWJlbCBkaSB0aXRvbG8gZGV2J2Vzc2VyZSBpbiBib2xkLiBQZXIgdXRpbGl6emFyZSB1biBzb2xvIGNvbXBvbmVudGUgc2lhIHBlciBsYSBtb2RpZmljYSBjaGUgcGVyIGlsIGRldHRhZ2xpbyAqL1xyXG4gICAgQElucHV0KCkgRGlzcGxheU1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogSW5kaWNhIGxhIGNvbmRpemlvbmUgcGVyIGN1aSB1biBlbGVtZW50byBpbiBNb2RhbGl0w6AgRGlzcGxheSBwdcOyIGVzc2VyZSB2aXNpYmlsZSBpbiBiYXNlIGEgdWx0ZXJpb3JpIGNvbnRyb2xsaSAqL1xyXG4gICAgQElucHV0KCkgRGlzcGxheUNvbmRpdGlvbjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLyoqIFRlbXBsYXRlIHBlciB2aXN1YWxpenphcmUgbGEgbW9kYWxpdMOgICoqRGlzcGxheU1vZGUqKiBjb21lIHZ1b2xlIGlsIHByb2dyYW1tYXRvcmUgZnJvY2lvIGRpIHR1cm5vICovXHJcbiAgICBASW5wdXQoKSBEaXNwbGF5TW9kZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIC8qKiBMYXlvdXQgZGVsIEZvcm0gcXVhbmRvIMOoIGluIG1vZGFsaXTDoCBEaXNwbGF5LiBEaSBkZWZhdWx0IG1hbnRpZW5lIGxhIGZvcm1hdHRhemlvbmUgYSBmb3JtICovXHJcbiAgICBASW5wdXQoKSBEaXNwbGF5TGF5b3V0OiAnZm9ybScgfCAnaW5saW5lJyB8ICdoaWRkZW4nID0gJ2Zvcm0nO1xyXG5cclxuICAgIC8qKiBTZXBhcmF0b3JlIGRhIG1ldHRlcmUgaW4gYXV0b21hdGljbyBmcmEgdW4gZWxlbWVudG8gRm9ybSBlIGwnYWx0cm8gcXVhbmRvIHNvbm8gaW4gKipEaXNwbGF5TW9kZSoqIGNvbiAqKkRpc3BsYXlMYXlvdXQqKiBpbmxpbmUgKi9cclxuICAgIEBJbnB1dCgpIElubGluZVNlcGFyYXRvcjogc3RyaW5nID0gJyAnO1xyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIEVzcHJlc3Npb25lIHNpbWlsLUFuZ3VsYXIgcGVyIGNhbWJpYXJlIGlsIHRlc3RvIGRlaSBjb21wb25lbnRpIGNoZSBzY2VsZ29ubyBpbCBwcm9wcmlvIG1vZGVsbG8gZGEgdW5hICoqU291cmNlKipcclxuICAgICAqIFxyXG4gICAgICogSWwgZnVuemlvbmFtZW50byDDqCBpZGVudGljbyBhbCBiaW5kZXIgZGkgYW5ndWxhciwgc29sbyBjb24gdW5hIGdyYWZmYSBpbnZlY2UgY2hlIDIuXHJcbiAgICAgKiDDiCBpbm9sdHJlIHBvc3NpYmlsZSBhZ2dpdW5nZXJlIHBlenppIGRpIGRlc2NyaXppb25lIGluIG1hbmllcmEgY29uZGl6aW9uYWxlIGNvbiBsYSBzaW50YXNzaSAqKjpwcm9wPyhQcm9wIHZhbGUge3Byb3B9KSoqXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIERpc3BsYXk6IHN0cmluZyA9ICd7ZGVzY3JpcHRpb259JztcclxuXHJcbiAgICAvKiogUmlzdWx0YXRvIGRlbGwndW5pb25lIGZyYSBsZSBpbmZvcm1hemlvbmkgZGVnbGkgb2dnZXR0aSBpbiAqKlNvdXJjZSoqIGUgbGUgaW1wb3N0YXppb25pIHNwZWNpZmljYXRlIG5lbGwnSW5wdXQgKipEaXNwbGF5KiogKi9cclxuICAgIHB1YmxpYyBCb3VuZFNvdXJjZTogeyBpZDogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nIH1bXSA9IFtdO1xyXG5cclxuICAgIC8qKiBJbmRpY2Egc2Ugw6ggaWwgcHJpbW8gQmluZCBkZWxsYSBTb3VyY2UgKi9cclxuICAgIHByb3RlY3RlZCBTb3VyY2VGaXJzdEJpbmQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3R0aWVuZSBpbCB2YWxvcmUgZGVsbGEgdmFyaWFiaWxlICoqX3JlYWRvbmx5KipcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59ICoqdHJ1ZSoqIHNlIHNvbGEgbGV0dHVyYSwgKipmYWxzZSoqIGFsdHJpbWVudGlcclxuICAgICAqL1xyXG4gICAgZ2V0IFJlYWRvbmx5KCk6IGJvb2xlYW4geyBcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVhZG9ubHk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbXBvc3RhIGlsIHZhbG9yZSBkZWxsYSB2YXJpYWJpbGUgKipfcmVhZG9ubHkqKiBnZXN0ZW5kbyBhbmNoZSBpbCBDb250ZXN0byBhcHBsaWNhdGl2b1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlIFZhbG9yZSBkYSBpbXBvc3RhcmVcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgc2V0IFJlYWRvbmx5KHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuQXBwQ29udGV4dE93bmVyc2hpcCkgXHJcbiAgICAgICAgICAgIHRoaXMuX3JlYWRvbmx5ID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJtZXR0ZSBkaSBzZXR0YXJlIGluIHVuYSB2b2x0YSBzb2xvIGdsaSBpbnB1dCBMYWJlbENvbFdpZHRoIGUgSW5wdXRDb2xXaWR0aCwgYmFzdGEgc2NyaXZlcmxvIGNvbiBsYSBzaW50YXNzaSBcIlggWVwiXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCBJbnB1dCBuZWwgZm9ybWF0byBcIlggWVwiXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHNldCBMYWJlbElucHV0UmF0aW8oaW5wdXQ6IHN0cmluZykge1xyXG4gICAgICAgIHZhciByYXRpbyA9IGlucHV0LnNwbGl0KC9cXHMvKTtcclxuICAgICAgICB0aGlzLkxhYmVsQ29sV2lkdGggPSBwYXJzZUludChyYXRpb1swXSk7XHJcbiAgICAgICAgdGhpcy5JbnB1dENvbFdpZHRoID0gcGFyc2VJbnQocmF0aW9bMV0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiB2YWwtcXVhbGNvc2EgY2hlIGZhIGVmZmV0dGl2YW1lbnRlIGRhIGlucHV0LCBvIGV2ZW50dWFsbWVudGUgaWwgc2luZ29sbyBpbnB1dCBpbiBjYXNpIHBhcnRpY29sYXJpIChlcyBjaGVja2JveCkgKi9cclxuICAgIHByb3RlY3RlZCB2YWxpZGF0aW9uQ29udHJvbDogTmdNb2RlbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFF1ZXJ5IHN1bGwnZWxlbWVudG8gJ3ZhbGlkYXRpb25Db250cm9sJyBjaGUgZnVuemlvbmEgaW4gYW1iaWVudGUgc3RhdGljb1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge05nTW9kZWx9IGNvbXAgRWxlbWVudG8gSFRNTCBtYXJjYXRvIGNvbiBcIiN2YWxpZGF0aW9uQ29udHJvbFwiXHJcbiAgICAgKi9cclxuICAgIEBWaWV3Q2hpbGQoXCJ2YWxpZGF0aW9uQ29udHJvbFwiLCB7IHN0YXRpYzogZmFsc2UgfSkgc2V0IF92YWxpZGF0aW9uQ29udHJvbChjb21wOiBOZ01vZGVsKSB7IHRoaXMucmVnaXN0ZXJWYWxDb21wKGNvbXApOyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBRdWVyeSBzdWxsJ2VsZW1lbnRvICd2YWxpZGF0aW9uQ29udHJvbCcgY2hlIGZ1bnppb25hIGluIGFtYmllbnRlIGRpbmFtaWNvXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7TmdNb2RlbH0gY29tcCBFbGVtZW50byBIVE1MIG1hcmNhdG8gY29uIFwiI3ZhbGlkYXRpb25Db250cm9sXCJcclxuICAgICAqL1xyXG4gICAgQFZpZXdDaGlsZChcInZhbGlkYXRpb25Db250cm9sXCIsIHsgc3RhdGljOiB0cnVlIH0pIHNldCB2YWxpZGF0aW9uQ29udHJvbF9zdGF0aWMoY29tcDogTmdNb2RlbCkgeyB0aGlzLnJlZ2lzdGVyVmFsQ29tcChjb21wKTsgfTtcclxuXHJcbiAgICAvKiogRXZlbnRvIGNoaWFtYXRvIGFsbGEgbW9kaWZpY2EgZGVsIHZhbG9yZSBjb2xsZWdhdG8gYSBxdWVzdG8gY2FtcG8gKi9cclxuICAgIEBPdXRwdXQoKSBpbnB1dENoYW5nZTogRXZlbnRFbWl0dGVyPENoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8Q2hhbmdlRXZlbnQ+KCk7XHJcblxyXG4gICAgLyoqIEV2ZW50byBjaGlhbWF0byBhbCBmb2N1cyBkZWwgY2FtcG8gZGkgdGVzdG8vY29tYm8vcXVlbGNoZcOoLCByaWVtaXR0YSBsJ2V2ZW50byBvcmlnaW5hbGUgSmF2YXNjcmlwdCAqL1xyXG4gICAgQE91dHB1dCgpIGlucHV0Rm9jdXM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgLyoqIEV2ZW50byBjaGlhbWF0byBhbCBmaW5hbGl6ZSBkZWwgY2FtcG8gZGkgdGVzdG8vY29tYm8vcXVlbGNoZcOoICovXHJcbiAgICBAT3V0cHV0KCkgaW5wdXRGaW5hbGl6ZWQ6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gICAgLyoqIENhY2hlIGRlbGxlIGNvbmRpemlvbmkgc2NyaXR0ZSB0aXBvIDpwcm9wPyhSb2JhIGNvbiB7cHJvcH0pICovXHJcbiAgICBwcml2YXRlIEJpbmRDaGVja2luZ0dyb3VwczogeyBnbG9iYWw6IHN0cmluZywgcHJvcDogc3RyaW5nLCB3aGVuZXhpc3RzOiBzdHJpbmcgfVtdID0gW11cclxuXHJcbiAgICAvKiogQ2FjaGUgZGVsbGUgcHJvcHJpZXTDoCBzY3JpdHRlIHRpcG8gLS0+IHtwcm9wfSAqL1xyXG4gICAgcHJpdmF0ZSBCaW5kUHJvcGVydGllczogeyBnbG9iYWw6IHN0cmluZywgcHJvcDogc3RyaW5nIH1bXSA9IFtdO1xyXG5cclxuICAgIC8qKiBAaWdub3JlIENvc3RydXR0b3JlICAqL1xyXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCwgcHJvdGVjdGVkIF92YWxpZGF0b3JzOiBBcnJheTxhbnk+LCBAT3B0aW9uYWwoKSBwcml2YXRlIGFjOiBBY2Nlc3NDb250cm9sU2VydmljZSwgQE9wdGlvbmFsKCkgcHVibGljIEFwcENvbnRleHQ6IENvbXBvbmVudENvbnRleHQsIEBPcHRpb25hbCgpIEBJbmplY3QoQUNPX0NVU1RPTUtFWSkgcHJpdmF0ZSBBQ09fQ1VTVE9NS0VZOiBzdHJpbmcsIEBPcHRpb25hbCgpIEBJbmplY3QoRkFWX0RFQlVHX01PREUpIHByaXZhdGUgRkFWX0RFQlVHX01PREU6IGJvb2xlYW4sIHByaXZhdGUgbmF0aXZlSW5wdXQ6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG5cclxuICAgICAgICBpZiAobmdDb250cm9sID09IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmhhbmRsZU51bGxOZ0NvbnRyb2woKSlcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJuZ0NvbnRyb2wgbnVsbG8gcGVyIHF1YWxjaGUgbW90aXZvISBJbCA5MCUgZGVsbGUgZnVuemlvbmFsaXTDoCBkaSBxdWVzdG8gaW5wdXQgc2FyYW5ubyBkaXNhYmlsaXRhdGVcIik7XHJcblxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL1NlIG1pIGFycml2YSBsJ2luamVjdGFibGUgZGVsIGNvbnRlc3RvIHBvc3NvIGNhcGlyZSBzZSBxdWVzdG8gY2FtcG8gZGV2ZSBlc3NlcmUgaW4gcmVhZG9ubHkgbyBubywgc29sbyBzZSBobyBnacOgIGluaXppYWxpenphdG8gaSBjb250cm9sbGVyIGN1c3RvbSBkZWxsJ2FjY2VzcyBjb250cm9sXHJcbiAgICAgICAgaWYgKHRoaXMuQXBwQ29udGV4dCAmJiB0aGlzLkFwcENvbnRleHQubmFtZSAmJiB0aGlzLkFDT19DVVNUT01LRVkgJiYgdGhpcy5hYyAmJiB0aGlzLmFjLkluaXRpYWxpemVkQ3VzdG9tKSB7XHJcbiAgICAgICAgICAgIHRoaXMuQXBwQ29udGV4dE93bmVyc2hpcCA9ICF0aGlzLmFjLmhhcyh0aGlzLkFDT19DVVNUT01LRVkgKyBcIjpcIiArIHRoaXMuQXBwQ29udGV4dC5uYW1lLCB0cnVlKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVhZG9ubHkgPSAhdGhpcy5BcHBDb250ZXh0T3duZXJzaGlwXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBuZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XHJcblxyXG4gICAgICAgIC8vU2UgaG8gZ2nDoCB1biBwYXJlbnQgaW1wb3N0YXRvIHZ1b2wgZGlyZSBjaGUgc290dG8gYWwgdGFnIDxmb3JtPiBobyBkaXJldHRhbWVudGUgdW4gdGFnIDxmb3JtLSo+Li5cclxuICAgICAgICAvLy4uIHF1aW5kaSBwb3NzbyBpbXBvc3RhcmUgZGlyZXR0YW1lbnRlIGlsIHJpZmVyaW1lbnRvIGRlbCBGb3JtIGRhIHVzYXJlIGluIEhUTUwgcGVyIGlsIHN1Ym1pdHRlZFxyXG5cclxuICAgICAgICAvL1NlIG5vbiBjJ8OoIHZ1b2wgZGlyZSBjaGUgZGVudHJvIGFsIHRhZyA8Zm9ybT4gYyfDqCB1bm8gc3BsZW5kaWRvIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZTsgY29udGV4dDogLi4uLlwiPi4uXHJcbiAgICAgICAgLy8uLiBpbCBxdWFsZSBhIHN1YSB2b2x0YSBjb250aWVuZSBpbCBjb250cm9sbG8gPGZvcm0tKj4gcXVpbmRpIGF2csOyIGlsIGZvcm0gbmVsbCdpbnB1dCBcIkZvcm1cIlxyXG4gICAgICAgIGlmICgoPGFueT5uZ0NvbnRyb2wpLl9wYXJlbnQpXHJcbiAgICAgICAgICAgIHRoaXMuRm9ybSA9IDxOZ0Zvcm0+KDxhbnk+bmdDb250cm9sKS5fcGFyZW50O1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5kZXRhdGNoZWRGcm9tZm9ybSA9IHRydWU7XHJcblxyXG4gICAgICAgIC8vUXVlc3RhIHNlcnZlIHBlciBpbXBvc3RhcmUgbWUgc3Rlc3NvIGNvbWUgc2kgZGV2ZSwgaWwgdmFsaWRhdG9yZSBpbnZlY2UgbG8gcGFzc28gYWwgdmFsaWRhdGlvbi1pbnB1dCBxdWFuZG8gdmllbmUgc2V0dGF0byBpbCB2YWxpZGF0aW9uQ29udHJvbFxyXG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xyXG4gICAgICAgICAgICAvL1BlciB0dXR0aSBpIHZhbGlkYXRvcmk6IHJpZ2VuZXJvIGxhIGZ1bnppb25lIGRpIHZhbGlkYXppb25lLiBQZXIgcXVhbGNoZSBtb3Rpdm8gYSB2b2x0ZSBobyB2YWxpZGF0b3JpIHNlbnphLi4uXHJcbiAgICAgICAgICAgIC8vLi4uIHF1ZXN0byDDqCB1biB3b3JrYXJvdW5kIHBlciBlc3NlcmUgc2ljdXJvIGRpIGF2ZXJsYSBzZW1wcmUuXHJcbiAgICAgICAgICAgIC8vU29sbyBpIHZhbGlkYXRvcmkgY29uIHBhcmFtZXRyaSBoYW5ubyBiaXNvZ25vIGRlbGxhIF9jcmVhdGVWYWxpZGF0b3IgKGVzLiBcIm1heGxlbmd0aFwiIGNoZSBoYSAxIHBhcmFtZXRybyksIHF1aW5kaSBubyB2YWxpZGF0b3JpIHRpcG8gXCJyZXF1aXJlZFwiXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl92YWxpZGF0b3JzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YWxpZGF0b3JzLmZvckVhY2godiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYuX2NyZWF0ZVZhbGlkYXRvcilcclxuICAgICAgICAgICAgICAgICAgICAgICAgdi5fY3JlYXRlVmFsaWRhdG9yKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sLmFkZFZhbGlkYXRvcnModGhpcy5fdmFsaWRhdG9ycyk7XHJcbiAgICAgICAgICAgIHRoaXMubmdDb250cm9sLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEVmZmV0dHVhIGlsIEJpbmQvUGFyc2UgZGVsbGUgdmFyaWUgKipTb3VyY2UqKiB1bmVuZG8gbGUgaW5mb3JtYXppb25pIHNwZWNpZmljYXRlIGluICoqRGlzcGxheSoqXHJcbiAgICAgKiBcclxuICAgICAqIEV2ZW50dWFsbWVudGUgcmllZmZldHR1YSB1biBiaW5kIGFsIG1vZGVsbG8gaW4gYmFzZSBhbCB2YWxvcmUgZGVsbGEgdmFyaWFiaWxlICoqUmViaW5kTW9kZWxBZnRlclNvdXJjZSoqXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCB0cnlCaW5kU291cmNlRGlzcGxheSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuU291cmNlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlNvdXJjZS5sZW5ndGggPT0gMCAmJiAhdGhpcy5Tb3VyY2VGaXJzdEJpbmQpXHJcbiAgICAgICAgICAgIHRoaXMuQm91bmRTb3VyY2UgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5Tb3VyY2VGaXJzdEJpbmQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gQ2FjaGUgbG9jYWxlIHBlciBldml0YXJlIGRpIHJpZmFyZSBkZWkgcmVnZXgubWF0Y2ggb2duaSBzYW50YSB2b2x0YVxyXG4gICAgICAgIGlmICh0aGlzLlNvdXJjZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuQm91bmRTb3VyY2UgPSBbXTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLkJpbmRDaGVja2luZ0dyb3Vwcy5sZW5ndGggPT0gMClcclxuICAgICAgICAgICAgICAgIHRoaXMuZXZhbHVhdGVCaW5kQ2hlY2tpbmdHcm91cHMoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLkJpbmRQcm9wZXJ0aWVzLmxlbmd0aCA9PSAwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5ldmFsdWF0ZUJpbmRQcm9wZXJ0aWVzKCk7XHJcblxyXG4gICAgICAgICAgICAvLyBCbG9jY28gcGVyIGdlbmVyYXJlIGxhIGRlc2NyaXppb25lIGZpbmFsZSBkaSB1biBlbGVtZW50b1xyXG4gICAgICAgICAgICB0aGlzLlNvdXJjZS5mb3JFYWNoKHMgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gQWdnaXVuZ28gYWxsYSBCb3VuZFNvdXJjZSBpbiBmb3JtYXRvIHN0YW5kYXJkIEtleVZhbHVlXHJcbiAgICAgICAgICAgICAgICB0aGlzLkJvdW5kU291cmNlLnB1c2godGhpcy50cmFuc2Zvcm1Tb3VyY2VJdGVtKHMpKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyBQb3N0IHRyeWJpbmQgc2UgYyfDqCB1biBtb2RlbGxvIGFzc29jaWF0byByaWNhbGNvbG8gbCcqKkV2YWx1YXRlZE1vZGVsKipcclxuICAgICAgICAgICAgaWYgKHRoaXMuTW9kZWwpXHJcbiAgICAgICAgICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gdGhpcy5Cb3VuZFNvdXJjZS5maW5kKHQgPT4gdC5pZCA9PSB0aGlzLk1vZGVsKT8uZGVzY3JpcHRpb247XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBWYWx1dGEgaWwgY29udGVudXRvIGRlbGxhIHZhcmlhYmlsZSBCaW5kQ2hlY2tpbmdHcm91cHMgKi9cclxuICAgIHByaXZhdGUgZXZhbHVhdGVCaW5kQ2hlY2tpbmdHcm91cHMoKSB7XHJcbiAgICAgICAgLy8gQmxvY2NvIHBlciB0aXJhcmUgZnVvcmkgbGUgY29uZGl6aW9uaSBzY3JpdHRlIHRpcG8gLS0+IDpwcm9wPyhSb2JhIGNvbiB7cHJvcH0pXHJcbiAgICAgICAgdmFyIGlmZmVkTWF0Y2hlcyA9IHRoaXMuRGlzcGxheS5tYXRjaCgvOihbYS16XSspXFw/XFwoKFteXFwoXFwpXSspXFwpL2cpO1xyXG4gICAgICAgIGlmIChpZmZlZE1hdGNoZXMpIHtcclxuICAgICAgICAgICAgaWZmZWRNYXRjaGVzLmZvckVhY2gobSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBTdGVzc2EgcmVnZXggZGkgc29wcmEgbWEgaWwgdGFnIFwiaVwiIHNlcnZlIHBlciB0aXJhcmUgZnVvcmkgaSBzaW5nb2xpIGNhcHR1cmluZyBncm91cCBlIHBlciBxdWFsY2hlIG1vdGl2byBcclxuICAgICAgICAgICAgICAgIC8vIG5ldyBSZWdFeHAoYmFzZVJlZ2V4LCBcImdcIikgbm9uIGZ1bnppb25hIHF1aW5kaSBub24gaG8gcG90dXRvIHJhemlvbmFsaXp6YXJsb1xyXG4gICAgICAgICAgICAgICAgbGV0IGdyb3VwcyA9IG0ubWF0Y2goLzooW2Etel0rKVxcP1xcKChbXlxcKFxcKV0rKVxcKS9pKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuQmluZENoZWNraW5nR3JvdXBzLnB1c2goeyBnbG9iYWw6IG0sIHByb3A6IGdyb3Vwc1sxXSwgd2hlbmV4aXN0czogZ3JvdXBzWzJdIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFZhbHV0YSBpbCBjb250ZW51dG8gZGVsbGEgdmFyaWFiaWxlIEJpbmRQcm9wZXJ0aWVzICovXHJcbiAgICBwcml2YXRlIGV2YWx1YXRlQmluZFByb3BlcnRpZXMoKSB7XHJcbiAgICAgICAgLy8gQmxvY2NvIHBlciB0aXJhcmUgZnVvcmkgbGUgcHJvcHJpZXTDoCBzY3JpdHRlIHRpcG8gLS0+IHtwcm9wfVxyXG4gICAgICAgIHZhciBtYXRjaGVzID0gdGhpcy5EaXNwbGF5Lm1hdGNoKC97W2Etel0rfS9naSk7XHJcbiAgICAgICAgaWYgKG1hdGNoZXMpXHJcbiAgICAgICAgICAgIG1hdGNoZXMuZm9yRWFjaChtID0+IHsgdGhpcy5CaW5kUHJvcGVydGllcy5wdXNoKHsgZ2xvYmFsOiBtLCBwcm9wOiBtLnN1YnN0cmluZygxLCBtLmxlbmd0aCAtIDEpIH0pOyB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYXNmb3JtYSB1biBvZ2dldHRvIGRlbGxhIFNvdXJjZSBhbGxhIHN1YSB2ZXJzaW9uZSBcIm51b3ZhXCIgYmFzYW5kb3NpIHN1bGxlIGluZm9ybWF6aW9uaSBzdSBncnVwcGkgZSBwcm9wcmlldMOgXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7YW55fSBpdGVtIE9nZ2V0dG8gZGEgdHJhc2Zvcm1hcmVcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge3tpZDogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nfX0gT2dnZXR0byBmaW5hbGUgdHJhc2Zvcm1hdG9cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSB0cmFuc2Zvcm1Tb3VyY2VJdGVtKHM6IGFueSk6IHtpZDogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nfSB7XHJcbiAgICAgICAgLy8gUGFydG8gc2VtcHJlIGRhbGxhIHZhcmlhYmlsZSBkaSBEaXNwbGF5LCBwb2kgc29zdGl0dWlzY28gcGV6em8gcGVyIHBlenpvXHJcbiAgICAgICAgbGV0IGRlc2MgPSB0aGlzLkRpc3BsYXk7XHJcblxyXG4gICAgICAgIC8vIFRhZ2xpbyBvIG1hbnRlbmdvIGxlIGNvbmRpemlvbmkgaW4gYmFzZSBhbGxhIHByb3ByaWV0w6Agc3UgY3VpIGZhcmUgY2hlY2tcclxuICAgICAgICAvLyBEb3BvZGljaMOpIHNjcml2byB0dXR0ZSBsZSBwcm9wcmlldMOgXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLkJpbmRDaGVja2luZ0dyb3Vwcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgdCA9IHRoaXMuQmluZENoZWNraW5nR3JvdXBzW2ldO1xyXG4gICAgICAgICAgICBkZXNjID0gZGVzYy5yZXBsYWNlKHQuZ2xvYmFsLCAoc1t0LnByb3BdICE9IG51bGwgJiYgc1t0LnByb3BdICE9IHVuZGVmaW5lZCkgPyB0LndoZW5leGlzdHMgOiBcIlwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5CaW5kUHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgdCA9IHRoaXMuQmluZFByb3BlcnRpZXNbaV07XHJcbiAgICAgICAgICAgIGRlc2MgPSBkZXNjLnJlcGxhY2UodC5nbG9iYWwsIHNbdC5wcm9wXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4geyBpZDogc1t0aGlzLklkRmllbGRdLCBkZXNjcmlwdGlvbjogZGVzYyB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhIHNlIGlsIGNvbW9wbmVudGUgaW4gcXVlc3Rpb25lIMOoIGluIGdyYWRvIGRpIGdlc3RpcmUgbmdDb250cm9sIG51bGxpLiBcclxuICAgICAqIERpIGRlZmF1bHQgw6ggKipmYWxzZSoqXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSAqKnRydWUqKiBzZSBnZXN0aXNjbyBuZ0NvbnRyb2wgbnVsbGksICoqZmFsc2UqKiBhbHRyaW1lbnRpXHJcbiAgICAgKi9cclxuICAgIGhhbmRsZU51bGxOZ0NvbnRyb2woKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICAvLyBBIHZvbHRlIG5lbGwnbmdPbkluaXQgbm9uIGNpIHBhc3NhIHF1aW5kaSBsbyBtZXR0byBzaWEgcXVpIHNpYSBuZWxsJ2FmdGVydmlld2luaXQsIHBlbnNvIGNoZSB2YWxnYSBwZXIgaSBjb21wb25lbnRpIGRpIHRlcnplIHBhcnRpXHJcbiAgICAgICAgLy8gY2hlIHNpIGNvbGxlZ2FubyBwZXIgaSBjYXp6aSBsb3JvIGFsIGZvcm0gZWNjLCBxdWluZGkgbGEgcGFydGUgc29wcmEgbm9uIHNlcnZlLi4uIEJPSFxyXG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFZhbGlkYXRvcigpO1xyXG5cclxuICAgICAgICAvL0lsIG5vbWUgbm9uIGMnw6ggc2UgbWV0dG8gc3RhbmRhbG9uZSA6IHRydWUgKENIRSBOT04gw6kgREEgTUVUVEVSRSlcclxuICAgICAgICAvL0RhdG8gY2hlIGFuY2hlIGlsIGNvbnRyb2xsbyBlc3Rlcm5vIHZpZW5lIGNvbnNpZGVyYXRvIGNvbWUgY29tcG9uZW50ZSBkZWwgZm9ybSwgbm9uIHBvc3NvIGJhc2FybWkgc29sbyBzdWwgbm9tZSBtYSBkZXZvIGFnZ2l1bmdlcmUgdW4gdGFnLiBJbiBxdWVzdG8gY2FzbyBcIl9pbnRlcm5hbFwiXHJcbiAgICAgICAgLy8gQVRURU5aSU9ORTogUVVBTFNJQVNJIFNJQSBJTCBNT1RJVk8sIFNFIFNUTyBDT1NPIFZJRU5FIFNQT1NUQVRPIERBTEwgbmdPbkluaXQgTk9OIEZVTlpJT05BIFBJVSBOVUxMQVxyXG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbC5uYW1lKVxyXG4gICAgICAgICAgICB0aGlzLkdlbmVyYXRlZE5hbWUgPSB0aGlzLm5nQ29udHJvbC5uYW1lLnRvU3RyaW5nKCkgKyBcIl9pbnRlcm5hbFwiO1xyXG5cclxuICAgICAgICAvLyBBVFRFTlpJT05FOiBRVUFMU0lBU0kgU0lBIElMIE1PVElWTywgU0UgU1RPIENPU08gVklFTkUgU1BPU1RBVE8gREFMTCBuZ09uSW5pdCBOT04gRlVOWklPTkEgUElVIE5VTExBXHJcbiAgICAgICAgaWYgKHRoaXMuRm9ybSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuZm9ybUhhc0Jlbm5Cb3VuZCAmJiB0aGlzLnZhbGlkYXRpb25Db250cm9sKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkZvcm0uYWRkQ29udHJvbCh0aGlzLnZhbGlkYXRpb25Db250cm9sKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUhhc0Jlbm5Cb3VuZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFF1YW5kbyB1biBmb3JtIHZpZW5lIHN1Ym1pdHRhdG8gbGEgdmFyaWFiaWxlIEZvcm0uc3VibWl0dGVkIHZpZW5lIGFzc2VnbmF0YSBhbGwnaW5wdXQgW3N1Ym1pdHRlZF0gZGVsIHZhbC1jb250cm9sXHJcbiAgICAgICAgICAgIC8vIEVzc2VuZG8gY2hlIHBlcsOyIGxhIENEIMOoIE9uUHVzaCBwZXIgZGlyZSBhZCBBbmd1bGFyIGNoZSBsJ0lucHV0IMOoIGNhbWJpYXRvIGUgcGVybWV0dGVyZSBpIHNpZGVmZmVjdHMgZGkgYXNzZWduYXJlIFtzdWJtaXR0ZWRdXHJcbiAgICAgICAgICAgIC8vIGRldm8gYXR0YWNjYXJtaSBhbCBzdWJtaXQgYXR0dWFsZSBkZWwgZm9ybSBlIHByaW1hIGRpIGVzZWd1aXJsbyBkZXZvIG1hcmNhcmUgaWwgY29tcG9uZW50ZSBwZXIgaWwgY2hlY2tcclxuICAgICAgICAgICAgbGV0IG9yaWdGdW5jID0gdGhpcy5Gb3JtLm9uU3VibWl0O1xyXG4gICAgICAgICAgICB2YXIgZm9ybU91dHNpZGVSZWYgPSB0aGlzLkZvcm07XHJcbiAgICAgICAgICAgIHRoaXMuRm9ybS5vblN1Ym1pdCA9IChldik6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ0Z1bmMuYXBwbHkoZm9ybU91dHNpZGVSZWYpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuU2V0VmFsaWRhdGlvblN1YmplY3QpIHtcclxuICAgICAgICAgICAgdGhpcy5TZXRWYWxpZGF0aW9uU3ViamVjdC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpKS5zdWJzY3JpYmUodiA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodi5maWVsZE5hbWUgKyBcIl9pbnRlcm5hbFwiID09IHRoaXMuR2VuZXJhdGVkTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb250cm9sID0gdGhpcy5Gb3JtLmdldENvbnRyb2wodGhpcy52YWxpZGF0aW9uQ29udHJvbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoeyBmb3JjZWR0b2ludmFsaWQ6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmdDb250cm9sLmNvbnRyb2wuc2V0RXJyb3JzKHsgZm9yY2VkdG9pbnZhbGlkOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmdDb250cm9sLmNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkZXN0cm95ZWQkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlIHNvbm8gaW4gbW9kYWxpdMOgIGRldGF0Y2hlZCBkZXZvIHJpbXVvdmVyZSBtYW51YWxtZW50ZSBxdWVzdG8gY29udHJvbGxvIHF1YW5kbyBlbnRybyBuZWxsYSBkaXNwb3NlLCBhbHRyaW1lbnRpIHNlIHBvaSBuZSBhbmRhc3NpIGEgcmlhZ2dpdW5nZXJlXHJcbiAgICAgKiB1biBhbHRybyBjb24gbG8gc3Rlc3NvIFwibmFtZVwiIG1hIG1hZ2FyaSByZXNldHRhdG8sIEFuZ3VsYXIgbG8gcmUtaWRyYXRlcmViYmUgY29uIGkgdmFsb3JpIHByZWNlZGVudGkgbm9ub3N0YW50ZSBpbCBtb2RlbGxvIGZvc3NlIHZ1b3RvXHJcbiAgICAgKi9cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIGlmICh0aGlzLkZvcm0gJiYgdGhpcy52YWxpZGF0aW9uQ29udHJvbCAmJiAhIXRoaXMuRm9ybS5nZXRDb250cm9sKHRoaXMudmFsaWRhdGlvbkNvbnRyb2wpKVxyXG4gICAgICAgICAgICB0aGlzLkZvcm0ucmVtb3ZlQ29udHJvbCh0aGlzLnZhbGlkYXRpb25Db250cm9sKTtcclxuXHJcblxyXG4gICAgICAgIHRoaXMuZGVzdHJveWVkJC5uZXh0KCk7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95ZWQkLmNvbXBsZXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEVsYWJvcmEgaSB2YWxpZGF0b3JpIGluaWV0dGF0aSBlIGNhcGlzY2Ugc2UgaWwgdmFsb3JlIMOoIG9iYmxpZ2F0b3JpbyBvIG1lbm8gKi9cclxuICAgIGNoZWNrUmVxdWlyZWRWYWxpZGF0b3IoKSB7XHJcbiAgICAgICAgLy8gY29udHJvbGxvIHNlIMOoIHNldHRhdG8gdW4gcmVxdWlyZWQgcGVyIGRlY2lkZXJlIGluIG1hbmllcmEgY29uZGl6aW9uYWxlIHNlIHV0aWxpenphcmUgaWwgdmFsaWRhdG9yZSByZXF1aXJlZCBuZWwgY29tcG9uZW50ZSBpbnRlcm5vXHJcbiAgICAgICAgLy8gTG8gZmFjY2lvIHF1aSBlIG5vbiBpbiB1biBldmVudHVhbGUgbmdPbkluaXQgbyBjb3N0cnV0dG9yZSBwZXJjaMOpIG5nT25Jbml0IG5vbiBzZW1wcmUgdmllbmUgY2hpYW1hdG8gZSBkYSBjb3N0cnV0dG9yZSBpbCB2YWxpZGF0b3JlIG5vbiBoYSBhbmNvcmEgaWwgdmFsb3JlIGdpdXN0b1xyXG4gICAgICAgIGlmICh0aGlzLl92YWxpZGF0b3JzICYmIHRoaXMuX3ZhbGlkYXRvcnMuc29tZShlbGVtID0+IGVsZW0gaW5zdGFuY2VvZiBSZXF1aXJlZFZhbGlkYXRvciAmJiBlbGVtLnJlcXVpcmVkKSlcclxuICAgICAgICAgICAgdGhpcy5SZXF1aXJlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMubmdDb250cm9sKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFZhbGlkYXRvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBIZWxwZXIgY2hlIGNvbGxlZ2EgbGEgZnVuemlvbmUgZGkgcmVzZXQgZGVsIGNvbnRyb2xsbyBmb3JtIGFsIGNvbnRyb2xsbyBkaSB2YWxpZGF6aW9uZSBzb3R0b3N0YW50ZSAqL1xyXG4gICAgcHJpdmF0ZSBiaW5kUmVzZXRGdW5jdGlvbigpIHtcclxuICAgICAgICAvL2ZhY2NpbyBpbiBtb2RvIGNoZSBzZSBjaGlhbW8gaWwgcmVzZXQgZGVsIGNvbnRyb2xsbyAobyBkZWxsYSBmb3JtKSBkYWxsJ2VzdGVybm8gc2kgcmVzZXR0aSBhbmNoZSBpbCBjb250cm9sbG8gbmF0aXZvXHJcbiAgICAgICAgY29uc3Qgb3JpZ0Z1bmMgPSAoPGFueT50aGlzLm5nQ29udHJvbC5jb250cm9sKS5fX29yaWdpbmFsX3Jlc2V0X18gfHwgdGhpcy5uZ0NvbnRyb2wuY29udHJvbC5yZXNldDtcclxuICAgICAgICB2YXIgbmdDb250cm9sX291dHNpZGVSZWZlcmVuY2UgPSB0aGlzLm5nQ29udHJvbC5jb250cm9sO1xyXG4gICAgICAgIHZhciB2YWxpZGF0aW9uQ29udHJvbF9vdXRzaWRlUmVmZXJlbmNlID0gdGhpcy52YWxpZGF0aW9uQ29udHJvbC5jb250cm9sO1xyXG5cclxuICAgICAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sLnJlc2V0ID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBvcmlnRnVuYy5hcHBseShuZ0NvbnRyb2xfb3V0c2lkZVJlZmVyZW5jZSk7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb25Db250cm9sX291dHNpZGVSZWZlcmVuY2UucmVzZXQoKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvL1BlciBjb25zZW50aXJlIHJpY2hpYW1pIG11bHRpcGxpIGRpIHF1ZXN0YSBmdW56aW9uZSBwcmVuZGVuZG8gc2VtcHJlIGxhIGZpdW56aW9uZSBkaSByZXNldCBiYXNlXHJcbiAgICAgICAgKDxhbnk+dGhpcy5uZ0NvbnRyb2wuY29udHJvbCkuX19vcmlnaW5hbF9yZXNldF9fID0gb3JpZ0Z1bmNcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChvYmogPT0gbnVsbCAmJiB0aGlzLmZpcnN0QmluZCkge1xyXG4gICAgICAgICAgICB0aGlzLmZpcnN0QmluZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLk1vZGVsID0gb2JqO1xyXG5cclxuICAgICAgICAvL1BlciBzdmVnbGlhcmUgQW5ndWxhci4gSWwgdmFsb3JlIGNoZSBlbnRyYSBwb3RyZWJiZSBlc3NlcmUgdmFsaWRvL25vbiB2YWxpZG8gZSBxdWVzdG8gbG8gYmluZGEgYSB0dXR0bywgZm9ybSBjb21wcmVzb1xyXG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbClcclxuICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLk1vZGVsKVxyXG4gICAgICAgICAgICB0aGlzLm9uTm90TnVsbFZhbHVlU2V0KCk7XHJcblxyXG4gICAgICAgIC8vIG1hcmtGb3JDaGVjayBub24gdmEgYmVuZSBpbiBxdWFudG8gYXJyaXZhbm8gcG9zc2liaWxtZW50ZSAyIHVwZGF0ZSBzdSB1biBzb2xvIGNpY2xvIGRpIHN0YWNrXHJcbiAgICAgICAgLy8gc2V0VGltZSp1dCBjaGUgd3JhcHBhIHR1dHRvIG5vbiB2YSBiZW5lIHNlbm7DsiBzcGFtbWEgZGVsbGUgY2hhbmdlIGRldGVjdGlvbiBhIHN1b24gZGkgaW50ZXJ2YWwgY2hlIHJhbGxlbnRhbm8gdGFudGlzc2ltbyBsJ2FwcFxyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWdpc3RyYSBpbnRlcm5hbWVudGUgaWwgY29tcG9uZW50ZSBkaSB2YWxpZGF6aW9uZSwgbmUgaW1wb3N0YSBpIHZhbGlkYXRvcmkgZSBjb2xsZWdhIGlsIEZvcm0sIHNlIHByZXNlbnRlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7TmdNb2RlbH0gY29tcCBFbGVtZW50byBIVE1MIG1hcmNhdG8gY29uIFwiI3ZhbGlkYXRpb25Db250cm9sXCJcclxuICAgICAqL1xyXG4gICAgcmVnaXN0ZXJWYWxDb21wKGNvbXA6IE5nTW9kZWwpIHtcclxuICAgICAgICBpZiAoY29tcCkge1xyXG4gICAgICAgICAgICAvLyDDiCBhcnJpdmF0byB1biBudW92byB2YWxpZGF0aW9uQ29udG9ybCAoc3VjY2VkZSBzb2xvIG5lbCBmb3JtLXNlbGVjdCBxdWFuZG8gY2FtYmlhIGxhIHNvdXJjZSBkYSAwIGVsZW1lbnRpIC8gbnVsbCBhZCBOIGVsZW1lbnRpLCBxdWluZGkgYWwgbWFzc2ltbyB1bmEgdm9sdGEpIFxyXG4gICAgICAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uQ29udHJvbCAmJiB0aGlzLkZvcm0pXHJcbiAgICAgICAgICAgICAgICB0aGlzLkZvcm0ucmVtb3ZlQ29udHJvbCh0aGlzLnZhbGlkYXRpb25Db250cm9sKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkNvbnRyb2wgPSBjb21wO1xyXG5cclxuICAgICAgICAgICAgLy9RdWVzdGEgc2VydmUgcGVyIHBhc3NhcmUgYXZhbnRpIGkgdmFsaWRhdG9yaVxyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25Db250cm9sLmNvbnRyb2wuc2V0VmFsaWRhdG9ycyh0aGlzLl92YWxpZGF0b3JzKTtcclxuXHJcbiAgICAgICAgICAgIC8vU2Ugc29ubyBzdGFjY2F0byBkYWwgRm9ybSAodnVvbCBkaXJlIGNoZSBzb25vIGFkIGVzZW1waW8gZGVudHJvIHVuIG5nLXRlbXBsYXRlKSBhZ2dpdW5nbyBpbCBjb250cm9sbG8gYWwgRm9ybSBwYXNzYXRvIGNvbWUgaW5wdXQgKGNvbnRleHQgZGVsIHRlbXBsYXRlKVxyXG4gICAgICAgICAgICBpZiAodGhpcy5kZXRhdGNoZWRGcm9tZm9ybSAmJiB0aGlzLkZvcm0gJiYgIXRoaXMuZm9ybUhhc0Jlbm5Cb3VuZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5Gb3JtLmFkZENvbnRyb2wodGhpcy52YWxpZGF0aW9uQ29udHJvbClcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUhhc0Jlbm5Cb3VuZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5nQ29udHJvbClcclxuICAgICAgICAgICAgICAgIHRoaXMuYmluZFJlc2V0RnVuY3Rpb24oKTtcclxuXHJcbiAgICAgICAgICAgIC8vSSB2YWwtcm9iYSBxdWVzdG8gbG8gZmFubm8gYXV0b21hdGljYW1lbnRlIGRlbnRyby4uLiBnbGkgYWx0cmkgbm8gKGVzLiBzZW1wbGljZSBpbnB1dCBjaGVja2JveClcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVWYWxpZGl0eUZvck5hdGl2ZUlucHV0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWdpc3RlckZvcm0obmdGb3JtOiBOZ0Zvcm0pIHtcclxuICAgICAgICB0aGlzLkZvcm0gPSBuZ0Zvcm07XHJcbiAgICAgICAgdGhpcy5Gb3JtLmFkZENvbnRyb2wodGhpcy52YWxpZGF0aW9uQ29udHJvbClcclxuICAgICAgICB0aGlzLmZvcm1IYXNCZW5uQm91bmQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWdnaW9ybmEgaWwgdmFsb3JlIGUgbGEgdmFsaWRpdMOgIGRlbGwnaW5wdXQgc290dG9zdGFudGUuIE5vbiB2aWVuZSBjaGlhbWF0byBwZXIgaW5wdXQgbmF0aXZpIGNvbWUgbGUgY2hlY2tib3hcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBmb3JjZWRWYWx1ZSBGb3J6YSBsJ2FnZ2lvcm5hbWVudG8gYW5jaGUgc2Ugbm9uIMOoIHVuIGlucHV0IG5hdGl2byAoaW5wdXQgbmF0aXZvID0gY2hlY2tib3gsIGFkIGVzZW1waW8pXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVZhbGlkaXR5Rm9yTmF0aXZlSW5wdXQoZm9yY2VkVmFsdWU6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIGlmIChmb3JjZWRWYWx1ZSB8fCB0aGlzLm5hdGl2ZUlucHV0KVxyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25Db250cm9sLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICogQ2xhc3NpY28gXCJzcGFyYSBmdW9yaVwiLiBNYW50ZW5nbyBsbyBzdGVzc28gbm9tZSBkZWxsJ2V2ZW50byBkZWkgPHZhbC0qPiAoaW5wdXRDaGFuZ2UpIHBlciByZXRyb2NvbXBhdGliaWxpdMOgLlxyXG4gICAgICogXHJcbiAgICAgKiBOb24gcG9zc28gdGVuZXJsbyBwcm90ZWN0ZWQgYWx0cmltZW50aSBwb3NzbyBlc2VndWlybG8gc29sbyBkYWwgLnRzIGUgbm9uIGRhbGwnIC5odG1sXHJcbiAgICAgKi9cclxuICAgIGNoYW5nZWQoZm9yY2VkVmFsdWU6IGFueSA9IG51bGwsIG1hcmtGb3JDaGVjazogYm9vbGVhbiA9IGZhbHNlLCBtb2RlbEV2YWx1YXRpb25IYW5kbGVkOiBib29sZWFuID0gZmFsc2UsIGludGVybmFsOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICBsZXQgdG9FbWl0ID0gZm9yY2VkVmFsdWUgPT0gbnVsbCB8fCBmb3JjZWRWYWx1ZSA9PSBcIlwiID8gdGhpcy5Nb2RlbCA/PyBcIlwiIDogZm9yY2VkVmFsdWU7XHJcblxyXG4gICAgICAgIGlmKCFtb2RlbEV2YWx1YXRpb25IYW5kbGVkKVxyXG4gICAgICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gdG9FbWl0O1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRvRW1pdCk7XHJcbiAgICAgICAgdGhpcy5pbnB1dENoYW5nZS5lbWl0KG5ldyBDaGFuZ2VFdmVudChpbnRlcm5hbCwgdG9FbWl0KSk7XHJcbiAgICAgICAgaWYgKG1hcmtGb3JDaGVjaylcclxuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKiBDbGFzc2ljbyBcInNwYXJhIGZ1b3JpXCIgc3VsIGZvY3VzLiBNYW50ZW5nbyBsbyBzdGVzc28gbm9tZSBkZWxsJ2V2ZW50byBkZWkgPHZhbC0qPiAoaW5wdXRDaGFuZ2UpIHBlciByZXRyb2NvbXBhdGliaWxpdMOgLlxyXG4gICAgICogXHJcbiAgICAgKiBOb24gcG9zc28gdGVuZXJsbyBwcm90ZWN0ZWQgYWx0cmltZW50aSBwb3NzbyBlc2VndWlybG8gc29sbyBkYWwgLnRzIGUgbm9uIGRhbGwnIC5odG1sXHJcbiAgICAgKi9cclxuICAgIGZvY3VzZWQoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIHRoaXMuaW5wdXRGb2N1cy5lbWl0KGV2ZW50KTtcclxuICAgICAgICB0aGlzLmxvZyhcIkNvbnRyb2wgRm9jdXNlZCAtIFwiICsgdGhpcy5HZW5lcmF0ZWROYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqIENsYXNzaWNvIFwic3BhcmEgZnVvcmlcIiBzdWxsYSBmaW5hbGl6emF6aW9uZSBkZWwgdmFsb3JlIGRlbGwnaW5wdXQgKGJsdXIgLyB0YXN0byBpbnZpbywgZWNjLi4uKS4gTWFudGVuZ28gbG8gc3Rlc3NvIG5vbWUgZGVsbCdldmVudG8gZGVpIDx2YWwtKj4gKGlucHV0Q2hhbmdlKSBwZXIgcmV0cm9jb21wYXRpYmlsaXTDoC5cclxuICAgICAqIFxyXG4gICAgICogTm9uIHBvc3NvIHRlbmVybG8gcHJvdGVjdGVkIGFsdHJpbWVudGkgcG9zc28gZXNlZ3VpcmxvIHNvbG8gZGFsIC50cyBlIG5vbiBkYWxsJyAuaHRtbFxyXG4gICAgICovXHJcbiAgICBmaW5hbGl6ZWQoKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dEZpbmFsaXplZC5lbWl0KHRoaXMubmdDb250cm9sPy5uYW1lPy50b1N0cmluZygpKTtcclxuICAgICAgICB0aGlzLmxvZyhcIkNvbnRyb2wgVmFsdWUgRmluYWxpemVkIC0gXCIgKyB0aGlzLkdlbmVyYXRlZE5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RhbXBhIHVuIGxvZyBhIGNvbnNvbGVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgTWVzc2FnZ2lvIGRhIHN0YW1wYXJlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBsb2cobWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuRkFWX0RFQlVHX01PREUpXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQGZvcm1zLWFuZC12YWxpZGF0aW9uczogXCIgKyBtZXNzYWdlKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBhYnN0cmFjdCBvbk5vdE51bGxWYWx1ZVNldCgpOiB2b2lkO1xyXG59Il19
545
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1mb3JtLWNvbnRyb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3Jtcy1hbmQtdmFsaWRhdGlvbnMvc3JjL2xpYi9mb3Jtcy9iYXNlLWZvcm0tY29udHJvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFvRCxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JHLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBSXZILE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzFELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQUUzQyxrRUFBa0U7QUFFbEUsTUFBTSxPQUFnQixlQUFlO0lBb0pqQzs7OztPQUlHO0lBQ0gsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBYSxRQUFRLENBQUMsS0FBYztRQUNoQyxJQUFJLElBQUksQ0FBQyxtQkFBbUI7WUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFhLGVBQWUsQ0FBQyxLQUFhO1FBQ3RDLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEMs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QXZCLEtBQUs7Z0JBR0csVUFBVTtzQkFBbEIsS0FBSztnQkFHRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBR0csVUFBVTtzQkFBbEIsS0FBSztnQkFNRyxNQUFNO3NCQUFkLEtBQUs7Z0JBR0csV0FBVztzQkFBbkIsS0FBSztnQkFHRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQUdHLEtBQUs7c0JBQWIsS0FBSztnQkFHRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csSUFBSTtzQkFBWixLQUFLO2dCQUdHLElBQUk7c0JBQVosS0FBSztnQkFHRyxNQUFNO3NCQUFkLEtBQUs7Z0JBR0csT0FBTztzQkFBZixLQUFLO2dCQU9HLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csV0FBVztzQkFBbkIsS0FBSztnQkFHRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBR0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csZUFBZTtzQkFBdkIsS0FBSztnQkFRRyxPQUFPO3NCQUFmLEtBQUs7Z0JBc0JPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBVU8sZUFBZTtzQkFBM0IsS0FBSztnQkFjaUQsa0JBQWtCO3NCQUF4RSxTQUFTO3VCQUFDLG1CQUFtQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFPSyx3QkFBd0I7c0JBQTdFLFNBQVM7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUd0QyxXQUFXO3NCQUFwQixNQUFNO2dCQUdHLFVBQVU7c0JBQW5CLE1BQU07Z0JBR0csY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCwgTmdGb3JtLCBOZ01vZGVsLCBSZXF1aXJlZFZhbGlkYXRvciB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFZpZXdDaGlsZCwgT3B0aW9uYWwsIEluamVjdCwgRGlyZWN0aXZlLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vLyAvLyBDb25maWd1cmF6aW9uaVxyXG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sU2VydmljZSwgQ29tcG9uZW50Q29udGV4dCB9IGZyb20gXCJAZXNmYWVuemEvYWNjZXNzLWNvbnRyb2xcIjtcclxuaW1wb3J0IHsgQUNPX0NVU1RPTUtFWSwgRkFWX0RFQlVHX01PREUgfSBmcm9tICcuLi90b2tlbnMnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgVGVtcGxhdGVSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBDaGFuZ2VFdmVudCB9IGZyb20gXCIuLi9tb2RlbHMvQ2hhbmdlRXZlbnRcIjtcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcblxyXG4vKiogQ29tcG9uZW50ZSBiYXNlIGRhIGN1aSB0dXR0aSBpIGNvbXBvbmVudGkgRm9ybSBpbXBsZW1lbnRhbm8gKi9cclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRm9ybUNvbnRyb2wgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xNDk4OFxyXG4gICAgICogVEw6RFI7IElsIHByaW1vIHZhbG9yZSBwYXNzYXRvIGFsIHdyaXRlVmFsdWUgw6ggbnVsbG8gcGVyY2jDqSBxdWFuZG8gaSBjYWduYWNjaSBmYW5ubyBuZXcgRm9ybUNvbnRyb2woKVxyXG4gICAgICogc2NyaXZvbm8gdW4gd3JpdGVWYWx1ZSBudWxsby4uLiBxdWluZGkgYWwgcHJpbW8gYmluZGluZyBzYWx0byBsJ2luaXppYWxpenphemlvbmUgc2UgaG8gbGEgY29wcGlhIG51bGwtZmlyc3RCaW5kXHJcbiAgICAgKiBwb2kgbWV0dGVuZG8gZmlyc3RCaW5kIGEgZmFsc2UgZGkgbMOsIGluIHBvaSBmdW56aW9ubyBjb21lIGRldm8uIFZpc3RhIGxhIGNhc2lzdGljYSBldml0byBlc3NlbnppYWxtZW50ZSBtZXTDoCBkZXRlY3RDaGFuZ2VzXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZmlyc3RCaW5kOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAvKipcclxuICAgICogSW5kaWNhIGRpIHV0aWxpenphcmUgaSB2YWxpZGF0b3JpIGNoZSBsJ3V0ZW50ZSBwaWF6emEgc3VsIGNvbXBvbmVudGUuIFxyXG4gICAgKiBEYSBub24gdXNhcmUgbmVsIGNhc28gZGkgZm9ybS1hZGFwdGl2ZSBkYXRvIGNoZSBpIHZhbGlkYXRvcmkgdmVuZ29ubyB2YWx1dGF0aSBpbiBiYXNlIGFsIHRpcG8gZWNjXHJcbiAgICAqL1xyXG4gICAgcHJvdGVjdGVkIFVzZVVzZXJWYWxpZGF0b3JzOmJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIC8qKiBJbmRpY2Egc2UgaWwgY2FtcG8gw6ggb2JibGlnYXRvcmlvIGkgb3B6aW9uYWxlICovXHJcbiAgICBwdWJsaWMgUmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogTW9kZWxsbyByYXBwcmVzZW50YXRvIGRhIHF1ZXN0byBjYW1wbyAqL1xyXG4gICAgcHVibGljIE1vZGVsOiBhbnk7XHJcblxyXG4gICAgLyoqIFZhbG9yZSBkZWwgTW9kZWxsbyAqL1xyXG4gICAgcHVibGljIEV2YWx1YXRlZE1vZGVsOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqIE5vbWUgZ2VuZXJhdG8gcGVyIGlsIGNvbnRyb2xsbyBpbnRlcm5vLiBEaSBkZWZhdWx0IMOoIGlsIG5vbWUgZGVsIGNvbnRyb2xsbyBlc3Rlcm5vIGNvbiBsJ2FnZ2l1bnRhIGRpIFwiX2ludGVybmFsXCIuIFNlcnZlIHBlciBldml0YXJlIGNyb3NzLWJpbmQgKi9cclxuICAgIHB1YmxpYyBHZW5lcmF0ZWROYW1lOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqIEluZGljYSBzZSBpbCBGb3JtIGNoZSBjb250aWVuZSBxdWVzdG8gY2FtcG8gw6ggZ2nDoCBzdGF0byByZWdpc3RyYXRvICovXHJcbiAgICBwcm90ZWN0ZWQgZm9ybUhhc0Jlbm5Cb3VuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhIHNlIHF1ZXN0byBjYW1wbyDDqCBzdGFjY2F0byBkYWwgRm9ybSwgYWQgZXNlbXBpbyBuZWwgY2FzbyBzaWEgaW4gdW4gbmctdGVtcGxhdGUgcHJvaWV0dGF0byBuZWwgZm9ybS5cclxuICAgICAqIFxyXG4gICAgICogSW4gcXVlbCBjYXNvIGxhIHZhcmlhYmlsZSAqKkZvcm0qKiBkZWwgY29tcG9uZW50ZSBkZXYnZXNzZXJlIHZhbG9yaXp6YXRhXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBkZXRhdGNoZWRGcm9tZm9ybTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwcm90ZWN0ZWQgcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4geyB9O1xyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwcm90ZWN0ZWQgb25Ub3VjaGVkID0gKCkgPT4geyB9O1xyXG5cclxuICAgIC8qKiBAaWdub3JlIFZlZGkgZ2V0dGVyIGUgc2V0dGVyICovXHJcbiAgICBwdWJsaWMgX3JlYWRvbmx5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBRdWFsb3JhIGNpIGZvc3NlIHVuIGNvbnRlc3RvIGNvbGxlZ2F0byBxdWVzdGEgdmFyaWFiaWxlIGlkZW50aWZpY2Egc2UgU29ubyBsJ093bmVyIG8gbWVuby5cclxuICAgICAqIFxyXG4gICAgICogU2Ugbm9uIGxvIHNvbm8sIGlsIGNhbXBvIHJpc3VsdGVyw6AgaW4gc29sYSBsZXR0dXJhIFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIEFwcENvbnRleHRPd25lcnNoaXA6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIC8qKiBTdWJqZWN0IGEgY3VpIGwnb2dnZXR0byBpbnRlcm5vIHNpIGNvbGxlZ2EgcGVyIGVmZmV0dHVhcmUgaWwgZm9jdXMgZGVsbCdlbGVtZW50byBpbnB1dCBzb3R0b3N0YW50ZSAqL1xyXG4gICAgQElucHV0KCkgRm9jdXNTdWJqZWN0OiBTdWJqZWN0PHZvaWQ+O1xyXG4gICAgLyoqXHJcbiAgICAqIEBFWFBFUklNRU5UQUxcclxuICAgICovXHJcbiAgICBASW5wdXQoKSBTZXRWYWxpZGF0aW9uU3ViamVjdDogU3ViamVjdDx7IGZpZWxkTmFtZTogc3RyaW5nLCBlcnJvcjogc3RyaW5nIH0+O1xyXG5cclxuICAgIC8qKiBNb2RhbGl0w6AgaW4gY3VpIHZpZW5lIG1vc3RyYXRvIGlsIGNhbXBvLCAxLTEgcmlzcGV0dG8gYWxsZSBkZWZpbml6aW9uaSBkaSBBbmd1bGFyIE1hdGVyaWFsICAqL1xyXG4gICAgQElucHV0KCkgRmllbGRBcHBlYXJlbmNlOiBcImxlZ2FjeVwiIHwgXCJzdGFuZGFyZFwiIHwgXCJmaWxsXCIgfCBcIm91dGxpbmVcIiA9IFwib3V0bGluZVwiO1xyXG5cclxuICAgIC8qKiBVdGlsaXp6YSBvIG1lbm8gaWwgTGF5b3V0IGRpIHVuIGZvcm0gKExhYmVsIGNvbiBpbnB1dCBkaSBmaWFuY28pLCBzZSBmYWxzZSBtb3N0cmEgc29sbyBsJ2lucHV0ICovXHJcbiAgICBASW5wdXQoKSBGb3JtTGF5b3V0OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAvKiogRGVmaW5pc2NlIHNlIHJpY2hpYW1hcmUgbCdFdmVudEVtaXR0ZXIgKippbnB1dENoYW5nZSoqIGluIG1hbmllcmEgY2xhc3NpY2EgKHRydWUpIG8gc29sbyBwZXIgbGEgY2hhbmdlIGNvbnNpZGVyYXRlIGRlZmluaXRpdmUgY29tZSB0YXN0byBpbnZpbyAvIGJsdXIgLyBlY2MuLi4gKGZhbHNlKSAqL1xyXG4gICAgQElucHV0KCkgRW1pdFBlbmRpbmdDaGFuZ2VzOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAvKiogQXR0aXZhIG8gZGlzYXR0aXZhIGxhIHZhbGlkYXppb25lIHBlciBxdWVzdG8gY29tcG9uZW50ZSAqL1xyXG4gICAgQElucHV0KCkgVmFsaWRhdGlvbjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLyoqIFxyXG4gICAgICogUGVybWV0dGUgZGkgc2NyaXZlcmUgbyBtZW5vIG5lbCBjYW1wbyBkaSBJbnB1dC4gU2kgZGlmZmVyZW56aWEgZGFsIFJlYWRvbmx5IGluIHF1YW50byBmaXNpY2FtZW50ZSBsJ0lucHV0IMOoIHNjcml2aWJpbGUgZSB2ZW5nb25vIG1hbnRlbnV0aSBpIHRlbWkgZGVsbGEgdmFsaWRhemlvbmVcclxuICAgICAqIG1hIGludGVyYWdpcmUgZGlyZXR0YW1lbnRlIGNvbiBsYSBjYXNlbGxhIGRpIElucHV0IHBlciBsJ3V0ZW50ZSBub24gw6ggcG9zc2liaWxlXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIEZyb3plbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBQbGFjZWhvbGRlciBwZXIgcXVhbmRvIGwnaW5wdXQgw6ggdnVvdG8gKi9cclxuICAgIEBJbnB1dCgpIFBsYWNlaG9sZGVyOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIC8qKiBDbGFzc2UgZXh0cmEgcGVyIGlsIGZvcm0tZ3JvdXAgaW4gY3VpIHZpZW5lIHdyYXBwYXRvIGwnaW5wdXQgKi9cclxuICAgIEBJbnB1dCgpIEZvcm1Hcm91cENsYXNzOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIC8qKiBNZXNzYWdnaW8gZGEgbW9zdHJhcmUgcXVhbmRvIGxhIHZhbGlkYXppb25lIGZhbGxpc2NlIHBlciBxdWVzdG8gY29tcG9uZW50ZS4gRGkgZGVmYXVsdCB2aWVuZSBwcm9wb3N0YSBkYWxsYSBsaWJyZXJpYSAqL1xyXG4gICAgQElucHV0KCkgRmFpbGVkVmFsaWRhdGlvbk1lc3NhZ2U6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgLyoqIElucHV0IGNoZSBmb3J6YSBsJ2ludmFsaWRpdMOgIGRlbCBjb21wb25lbnRlICovXHJcbiAgICBASW5wdXQoKSBGb3JjZWRFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBNb3N0cmEgdW4gdGVzdG8gYSBzaW5pc3RyYSBkZWxsJ2lucHV0IChGb3JtTGF5b3V0IHBlcm1ldHRlbmRvKSAqL1xyXG4gICAgQElucHV0KCkgTGFiZWw6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgLyoqIGNvbC1tZC1YIHBlciBsYSBsYWJlbCAqL1xyXG4gICAgQElucHV0KCkgTGFiZWxDb2xXaWR0aDogbnVtYmVyID0gNDtcclxuXHJcbiAgICAvKiogY29sLW1kLVggcGVyIGwnaW5wdXQgKi9cclxuICAgIEBJbnB1dCgpIElucHV0Q29sV2lkdGg6IG51bWJlciA9IDg7XHJcblxyXG4gICAgLyoqIEluZGljYSBzZSDDqCBsJ3VsdGltbyBjb21wb25lbnRlIGRpIHVuIGZvcm0gKHNlcnZlIHBlciByaW11b3ZlcmUgaWwgbWFyZ2luZSBmaW5hbGUpICovXHJcbiAgICBASW5wdXQoKSBMYXN0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIEFzc29jaWEgaWwgY29tcG9uZW50ZSBGb3JtIGEgcXVlc3RvIGlucHV0ICovXHJcbiAgICBASW5wdXQoKSBGb3JtOiBOZ0Zvcm0gPSBudWxsO1xyXG5cclxuICAgIC8qKiBTb3JnZW50ZSBkYSBjdWkgc2NlZ2xpZXJlIHZhbG9yaSBwZXIgaSBjb21wb25lbnRpIEZvcm0gY2hlIGxvIGNvbnNlbnRvbm8gKi9cclxuICAgIEBJbnB1dCgpIFNvdXJjZTogYW55W107XHJcblxyXG4gICAgLyoqIE5vbWUgZGVsbGEgcHJvcHJpZXTDoCBjaGUgY29udGllbmUgbCdJZCBkZWdsaSBvZ2dldHRpIGJpbmRhdGkgbmVsbGEgKipTb3VyY2UqKiAqL1xyXG4gICAgQElucHV0KCkgSWRGaWVsZDogc3RyaW5nID0gJ2lkJztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYSBzZSBpbCAqKlBsYWNlaG9sZGVyKiogZGV2J2Vzc2VyZSB1c2F0byBjb21lIHVuYSBmbG9hdGluZyBsYWJlbCBkaSBtYXRlcmlhbCBvIHNvbG8gY29tZSB1biBwbGFjZWhvbGRlciBzdGFuZGFyZCBcclxuICAgICAqIFxyXG4gICAgICogSWdub3JhdGEgbGF0byBhdXRvY29tcGxldGUsIGF1dG9jb21wbGV0ZS1tdWx0aSBlIHNlbGVjdCBpbiBxdWFudG8gaGFubm8gZ2VzdGlvbmkgcGFydGljb2xhcmkgZGkgcGxhY2Vob2xkZXIgZWNjLi4uXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIEZsb2F0aW5nTGFiZWw6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIC8qKiBJbmRpY2EgY2hlIGxhIHBhcnRlIGlucHV0IGRlbCBjb250cm9sbG8gZGV2J2Vzc2VyZSB1bmEgbGFiZWwgcmVhZG9ubHkgZSBsYSBwYXJ0ZSBsYWJlbCBkaSB0aXRvbG8gZGV2J2Vzc2VyZSBpbiBib2xkLiBQZXIgdXRpbGl6emFyZSB1biBzb2xvIGNvbXBvbmVudGUgc2lhIHBlciBsYSBtb2RpZmljYSBjaGUgcGVyIGlsIGRldHRhZ2xpbyAqL1xyXG4gICAgQElucHV0KCkgRGlzcGxheU1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogSW5kaWNhIGxhIGNvbmRpemlvbmUgcGVyIGN1aSB1biBlbGVtZW50byBpbiBNb2RhbGl0w6AgRGlzcGxheSBwdcOyIGVzc2VyZSB2aXNpYmlsZSBpbiBiYXNlIGEgdWx0ZXJpb3JpIGNvbnRyb2xsaSAqL1xyXG4gICAgQElucHV0KCkgRGlzcGxheUNvbmRpdGlvbjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLyoqIFRlbXBsYXRlIHBlciB2aXN1YWxpenphcmUgbGEgbW9kYWxpdMOgICoqRGlzcGxheU1vZGUqKiBjb21lIHZ1b2xlIGlsIHByb2dyYW1tYXRvcmUgZnJvY2lvIGRpIHR1cm5vICovXHJcbiAgICBASW5wdXQoKSBEaXNwbGF5TW9kZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIC8qKiBMYXlvdXQgZGVsIEZvcm0gcXVhbmRvIMOoIGluIG1vZGFsaXTDoCBEaXNwbGF5LiBEaSBkZWZhdWx0IG1hbnRpZW5lIGxhIGZvcm1hdHRhemlvbmUgYSBmb3JtICovXHJcbiAgICBASW5wdXQoKSBEaXNwbGF5TGF5b3V0OiAnZm9ybScgfCAnaW5saW5lJyB8ICdoaWRkZW4nID0gJ2Zvcm0nO1xyXG5cclxuICAgIC8qKiBTZXBhcmF0b3JlIGRhIG1ldHRlcmUgaW4gYXV0b21hdGljbyBmcmEgdW4gZWxlbWVudG8gRm9ybSBlIGwnYWx0cm8gcXVhbmRvIHNvbm8gaW4gKipEaXNwbGF5TW9kZSoqIGNvbiAqKkRpc3BsYXlMYXlvdXQqKiBpbmxpbmUgKi9cclxuICAgIEBJbnB1dCgpIElubGluZVNlcGFyYXRvcjogc3RyaW5nID0gJyAnO1xyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIEVzcHJlc3Npb25lIHNpbWlsLUFuZ3VsYXIgcGVyIGNhbWJpYXJlIGlsIHRlc3RvIGRlaSBjb21wb25lbnRpIGNoZSBzY2VsZ29ubyBpbCBwcm9wcmlvIG1vZGVsbG8gZGEgdW5hICoqU291cmNlKipcclxuICAgICAqIFxyXG4gICAgICogSWwgZnVuemlvbmFtZW50byDDqCBpZGVudGljbyBhbCBiaW5kZXIgZGkgYW5ndWxhciwgc29sbyBjb24gdW5hIGdyYWZmYSBpbnZlY2UgY2hlIDIuXHJcbiAgICAgKiDDiCBpbm9sdHJlIHBvc3NpYmlsZSBhZ2dpdW5nZXJlIHBlenppIGRpIGRlc2NyaXppb25lIGluIG1hbmllcmEgY29uZGl6aW9uYWxlIGNvbiBsYSBzaW50YXNzaSAqKjpwcm9wPyhQcm9wIHZhbGUge3Byb3B9KSoqXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIERpc3BsYXk6IHN0cmluZyA9ICd7ZGVzY3JpcHRpb259JztcclxuXHJcbiAgICAvKiogUmlzdWx0YXRvIGRlbGwndW5pb25lIGZyYSBsZSBpbmZvcm1hemlvbmkgZGVnbGkgb2dnZXR0aSBpbiAqKlNvdXJjZSoqIGUgbGUgaW1wb3N0YXppb25pIHNwZWNpZmljYXRlIG5lbGwnSW5wdXQgKipEaXNwbGF5KiogKi9cclxuICAgIHB1YmxpYyBCb3VuZFNvdXJjZTogeyBpZDogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nIH1bXSA9IFtdO1xyXG5cclxuICAgIC8qKiBJbmRpY2Egc2Ugw6ggaWwgcHJpbW8gQmluZCBkZWxsYSBTb3VyY2UgKi9cclxuICAgIHByb3RlY3RlZCBTb3VyY2VGaXJzdEJpbmQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3R0aWVuZSBpbCB2YWxvcmUgZGVsbGEgdmFyaWFiaWxlICoqX3JlYWRvbmx5KipcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59ICoqdHJ1ZSoqIHNlIHNvbGEgbGV0dHVyYSwgKipmYWxzZSoqIGFsdHJpbWVudGlcclxuICAgICAqL1xyXG4gICAgZ2V0IFJlYWRvbmx5KCk6IGJvb2xlYW4geyBcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVhZG9ubHk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbXBvc3RhIGlsIHZhbG9yZSBkZWxsYSB2YXJpYWJpbGUgKipfcmVhZG9ubHkqKiBnZXN0ZW5kbyBhbmNoZSBpbCBDb250ZXN0byBhcHBsaWNhdGl2b1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlIFZhbG9yZSBkYSBpbXBvc3RhcmVcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgc2V0IFJlYWRvbmx5KHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuQXBwQ29udGV4dE93bmVyc2hpcCkgXHJcbiAgICAgICAgICAgIHRoaXMuX3JlYWRvbmx5ID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJtZXR0ZSBkaSBzZXR0YXJlIGluIHVuYSB2b2x0YSBzb2xvIGdsaSBpbnB1dCBMYWJlbENvbFdpZHRoIGUgSW5wdXRDb2xXaWR0aCwgYmFzdGEgc2NyaXZlcmxvIGNvbiBsYSBzaW50YXNzaSBcIlggWVwiXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCBJbnB1dCBuZWwgZm9ybWF0byBcIlggWVwiXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHNldCBMYWJlbElucHV0UmF0aW8oaW5wdXQ6IHN0cmluZykge1xyXG4gICAgICAgIHZhciByYXRpbyA9IGlucHV0LnNwbGl0KC9cXHMvKTtcclxuICAgICAgICB0aGlzLkxhYmVsQ29sV2lkdGggPSBwYXJzZUludChyYXRpb1swXSk7XHJcbiAgICAgICAgdGhpcy5JbnB1dENvbFdpZHRoID0gcGFyc2VJbnQocmF0aW9bMV0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiB2YWwtcXVhbGNvc2EgY2hlIGZhIGVmZmV0dGl2YW1lbnRlIGRhIGlucHV0LCBvIGV2ZW50dWFsbWVudGUgaWwgc2luZ29sbyBpbnB1dCBpbiBjYXNpIHBhcnRpY29sYXJpIChlcyBjaGVja2JveCkgKi9cclxuICAgIHByb3RlY3RlZCB2YWxpZGF0aW9uQ29udHJvbDogTmdNb2RlbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFF1ZXJ5IHN1bGwnZWxlbWVudG8gJ3ZhbGlkYXRpb25Db250cm9sJyBjaGUgZnVuemlvbmEgaW4gYW1iaWVudGUgc3RhdGljb1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge05nTW9kZWx9IGNvbXAgRWxlbWVudG8gSFRNTCBtYXJjYXRvIGNvbiBcIiN2YWxpZGF0aW9uQ29udHJvbFwiXHJcbiAgICAgKi9cclxuICAgIEBWaWV3Q2hpbGQoXCJ2YWxpZGF0aW9uQ29udHJvbFwiLCB7IHN0YXRpYzogZmFsc2UgfSkgc2V0IF92YWxpZGF0aW9uQ29udHJvbChjb21wOiBOZ01vZGVsKSB7IHRoaXMucmVnaXN0ZXJWYWxDb21wKGNvbXApOyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBRdWVyeSBzdWxsJ2VsZW1lbnRvICd2YWxpZGF0aW9uQ29udHJvbCcgY2hlIGZ1bnppb25hIGluIGFtYmllbnRlIGRpbmFtaWNvXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7TmdNb2RlbH0gY29tcCBFbGVtZW50byBIVE1MIG1hcmNhdG8gY29uIFwiI3ZhbGlkYXRpb25Db250cm9sXCJcclxuICAgICAqL1xyXG4gICAgQFZpZXdDaGlsZChcInZhbGlkYXRpb25Db250cm9sXCIsIHsgc3RhdGljOiB0cnVlIH0pIHNldCB2YWxpZGF0aW9uQ29udHJvbF9zdGF0aWMoY29tcDogTmdNb2RlbCkgeyB0aGlzLnJlZ2lzdGVyVmFsQ29tcChjb21wKTsgfTtcclxuXHJcbiAgICAvKiogRXZlbnRvIGNoaWFtYXRvIGFsbGEgbW9kaWZpY2EgZGVsIHZhbG9yZSBjb2xsZWdhdG8gYSBxdWVzdG8gY2FtcG8gKi9cclxuICAgIEBPdXRwdXQoKSBpbnB1dENoYW5nZTogRXZlbnRFbWl0dGVyPENoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8Q2hhbmdlRXZlbnQ+KCk7XHJcblxyXG4gICAgLyoqIEV2ZW50byBjaGlhbWF0byBhbCBmb2N1cyBkZWwgY2FtcG8gZGkgdGVzdG8vY29tYm8vcXVlbGNoZcOoLCByaWVtaXR0YSBsJ2V2ZW50byBvcmlnaW5hbGUgSmF2YXNjcmlwdCAqL1xyXG4gICAgQE91dHB1dCgpIGlucHV0Rm9jdXM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgLyoqIEV2ZW50byBjaGlhbWF0byBhbCBmaW5hbGl6ZSBkZWwgY2FtcG8gZGkgdGVzdG8vY29tYm8vcXVlbGNoZcOoICovXHJcbiAgICBAT3V0cHV0KCkgaW5wdXRGaW5hbGl6ZWQ6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gICAgLyoqIENhY2hlIGRlbGxlIGNvbmRpemlvbmkgc2NyaXR0ZSB0aXBvIDpwcm9wPyhSb2JhIGNvbiB7cHJvcH0pICovXHJcbiAgICBwcml2YXRlIEJpbmRDaGVja2luZ0dyb3VwczogeyBnbG9iYWw6IHN0cmluZywgcHJvcDogc3RyaW5nLCB3aGVuZXhpc3RzOiBzdHJpbmcgfVtdID0gW11cclxuXHJcbiAgICAvKiogQ2FjaGUgZGVsbGUgcHJvcHJpZXTDoCBzY3JpdHRlIHRpcG8gLS0+IHtwcm9wfSAqL1xyXG4gICAgcHJpdmF0ZSBCaW5kUHJvcGVydGllczogeyBnbG9iYWw6IHN0cmluZywgcHJvcDogc3RyaW5nIH1bXSA9IFtdO1xyXG5cclxuICAgIC8qKiBAaWdub3JlIENvc3RydXR0b3JlICAqL1xyXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCwgcHJvdGVjdGVkIF92YWxpZGF0b3JzOiBBcnJheTxhbnk+LCBAT3B0aW9uYWwoKSBwcml2YXRlIGFjOiBBY2Nlc3NDb250cm9sU2VydmljZSwgQE9wdGlvbmFsKCkgcHVibGljIEFwcENvbnRleHQ6IENvbXBvbmVudENvbnRleHQsIEBPcHRpb25hbCgpIEBJbmplY3QoQUNPX0NVU1RPTUtFWSkgcHJpdmF0ZSBBQ09fQ1VTVE9NS0VZOiBzdHJpbmcsIEBPcHRpb25hbCgpIEBJbmplY3QoRkFWX0RFQlVHX01PREUpIHByaXZhdGUgRkFWX0RFQlVHX01PREU6IGJvb2xlYW4sIHByaXZhdGUgbmF0aXZlSW5wdXQ6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG5cclxuICAgICAgICBpZiAobmdDb250cm9sID09IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmhhbmRsZU51bGxOZ0NvbnRyb2woKSlcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJuZ0NvbnRyb2wgbnVsbG8gcGVyIHF1YWxjaGUgbW90aXZvISBJbCA5MCUgZGVsbGUgZnVuemlvbmFsaXTDoCBkaSBxdWVzdG8gaW5wdXQgc2FyYW5ubyBkaXNhYmlsaXRhdGVcIik7XHJcblxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL1NlIG1pIGFycml2YSBsJ2luamVjdGFibGUgZGVsIGNvbnRlc3RvIHBvc3NvIGNhcGlyZSBzZSBxdWVzdG8gY2FtcG8gZGV2ZSBlc3NlcmUgaW4gcmVhZG9ubHkgbyBubywgc29sbyBzZSBobyBnacOgIGluaXppYWxpenphdG8gaSBjb250cm9sbGVyIGN1c3RvbSBkZWxsJ2FjY2VzcyBjb250cm9sXHJcbiAgICAgICAgaWYgKHRoaXMuQXBwQ29udGV4dCAmJiB0aGlzLkFwcENvbnRleHQubmFtZSAmJiB0aGlzLkFDT19DVVNUT01LRVkgJiYgdGhpcy5hYyAmJiB0aGlzLmFjLkluaXRpYWxpemVkQ3VzdG9tKSB7XHJcbiAgICAgICAgICAgIHRoaXMuQXBwQ29udGV4dE93bmVyc2hpcCA9ICF0aGlzLmFjLmhhcyh0aGlzLkFDT19DVVNUT01LRVkgKyBcIjpcIiArIHRoaXMuQXBwQ29udGV4dC5uYW1lLCB0cnVlKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVhZG9ubHkgPSAhdGhpcy5BcHBDb250ZXh0T3duZXJzaGlwXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBuZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XHJcblxyXG4gICAgICAgIC8vU2UgaG8gZ2nDoCB1biBwYXJlbnQgaW1wb3N0YXRvIHZ1b2wgZGlyZSBjaGUgc290dG8gYWwgdGFnIDxmb3JtPiBobyBkaXJldHRhbWVudGUgdW4gdGFnIDxmb3JtLSo+Li5cclxuICAgICAgICAvLy4uIHF1aW5kaSBwb3NzbyBpbXBvc3RhcmUgZGlyZXR0YW1lbnRlIGlsIHJpZmVyaW1lbnRvIGRlbCBGb3JtIGRhIHVzYXJlIGluIEhUTUwgcGVyIGlsIHN1Ym1pdHRlZFxyXG5cclxuICAgICAgICAvL1NlIG5vbiBjJ8OoIHZ1b2wgZGlyZSBjaGUgZGVudHJvIGFsIHRhZyA8Zm9ybT4gYyfDqCB1bm8gc3BsZW5kaWRvIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZTsgY29udGV4dDogLi4uLlwiPi4uXHJcbiAgICAgICAgLy8uLiBpbCBxdWFsZSBhIHN1YSB2b2x0YSBjb250aWVuZSBpbCBjb250cm9sbG8gPGZvcm0tKj4gcXVpbmRpIGF2csOyIGlsIGZvcm0gbmVsbCdpbnB1dCBcIkZvcm1cIlxyXG4gICAgICAgIGlmICgoPGFueT5uZ0NvbnRyb2wpLl9wYXJlbnQpXHJcbiAgICAgICAgICAgIHRoaXMuRm9ybSA9IDxOZ0Zvcm0+KDxhbnk+bmdDb250cm9sKS5fcGFyZW50O1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5kZXRhdGNoZWRGcm9tZm9ybSA9IHRydWU7XHJcblxyXG4gICAgICAgIC8vUXVlc3RhIHNlcnZlIHBlciBpbXBvc3RhcmUgbWUgc3Rlc3NvIGNvbWUgc2kgZGV2ZSwgaWwgdmFsaWRhdG9yZSBpbnZlY2UgbG8gcGFzc28gYWwgdmFsaWRhdGlvbi1pbnB1dCBxdWFuZG8gdmllbmUgc2V0dGF0byBpbCB2YWxpZGF0aW9uQ29udHJvbFxyXG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xyXG4gICAgICAgICAgICAvL1BlciB0dXR0aSBpIHZhbGlkYXRvcmk6IHJpZ2VuZXJvIGxhIGZ1bnppb25lIGRpIHZhbGlkYXppb25lLiBQZXIgcXVhbGNoZSBtb3Rpdm8gYSB2b2x0ZSBobyB2YWxpZGF0b3JpIHNlbnphLi4uXHJcbiAgICAgICAgICAgIC8vLi4uIHF1ZXN0byDDqCB1biB3b3JrYXJvdW5kIHBlciBlc3NlcmUgc2ljdXJvIGRpIGF2ZXJsYSBzZW1wcmUuXHJcbiAgICAgICAgICAgIC8vU29sbyBpIHZhbGlkYXRvcmkgY29uIHBhcmFtZXRyaSBoYW5ubyBiaXNvZ25vIGRlbGxhIF9jcmVhdGVWYWxpZGF0b3IgKGVzLiBcIm1heGxlbmd0aFwiIGNoZSBoYSAxIHBhcmFtZXRybyksIHF1aW5kaSBubyB2YWxpZGF0b3JpIHRpcG8gXCJyZXF1aXJlZFwiXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl92YWxpZGF0b3JzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YWxpZGF0b3JzLmZvckVhY2godiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYuX2NyZWF0ZVZhbGlkYXRvcilcclxuICAgICAgICAgICAgICAgICAgICAgICAgdi5fY3JlYXRlVmFsaWRhdG9yKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sLmFkZFZhbGlkYXRvcnModGhpcy5fdmFsaWRhdG9ycy5maWx0ZXIodiA9PiAhdi5uZ09uSW5pdCkpO1xyXG4gICAgICAgICAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFZmZldHR1YSBpbCBCaW5kL1BhcnNlIGRlbGxlIHZhcmllICoqU291cmNlKiogdW5lbmRvIGxlIGluZm9ybWF6aW9uaSBzcGVjaWZpY2F0ZSBpbiAqKkRpc3BsYXkqKlxyXG4gICAgICogXHJcbiAgICAgKiBFdmVudHVhbG1lbnRlIHJpZWZmZXR0dWEgdW4gYmluZCBhbCBtb2RlbGxvIGluIGJhc2UgYWwgdmFsb3JlIGRlbGxhIHZhcmlhYmlsZSAqKlJlYmluZE1vZGVsQWZ0ZXJTb3VyY2UqKlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgdHJ5QmluZFNvdXJjZURpc3BsYXkoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLlNvdXJjZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5Tb3VyY2UubGVuZ3RoID09IDAgJiYgIXRoaXMuU291cmNlRmlyc3RCaW5kKVxyXG4gICAgICAgICAgICB0aGlzLkJvdW5kU291cmNlID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuU291cmNlRmlyc3RCaW5kID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vIENhY2hlIGxvY2FsZSBwZXIgZXZpdGFyZSBkaSByaWZhcmUgZGVpIHJlZ2V4Lm1hdGNoIG9nbmkgc2FudGEgdm9sdGFcclxuICAgICAgICBpZiAodGhpcy5Tb3VyY2UubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLkJvdW5kU291cmNlID0gW107XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5CaW5kQ2hlY2tpbmdHcm91cHMubGVuZ3RoID09IDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmV2YWx1YXRlQmluZENoZWNraW5nR3JvdXBzKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5CaW5kUHJvcGVydGllcy5sZW5ndGggPT0gMClcclxuICAgICAgICAgICAgICAgIHRoaXMuZXZhbHVhdGVCaW5kUHJvcGVydGllcygpO1xyXG5cclxuICAgICAgICAgICAgLy8gQmxvY2NvIHBlciBnZW5lcmFyZSBsYSBkZXNjcml6aW9uZSBmaW5hbGUgZGkgdW4gZWxlbWVudG9cclxuICAgICAgICAgICAgdGhpcy5Tb3VyY2UuZm9yRWFjaChzID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIEFnZ2l1bmdvIGFsbGEgQm91bmRTb3VyY2UgaW4gZm9ybWF0byBzdGFuZGFyZCBLZXlWYWx1ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5Cb3VuZFNvdXJjZS5wdXNoKHRoaXMudHJhbnNmb3JtU291cmNlSXRlbShzKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gUG9zdCB0cnliaW5kIHNlIGMnw6ggdW4gbW9kZWxsbyBhc3NvY2lhdG8gcmljYWxjb2xvIGwnKipFdmFsdWF0ZWRNb2RlbCoqXHJcbiAgICAgICAgICAgIGlmICh0aGlzLk1vZGVsKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IHRoaXMuQm91bmRTb3VyY2UuZmluZCh0ID0+IHQuaWQgPT0gdGhpcy5Nb2RlbCk/LmRlc2NyaXB0aW9uO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogVmFsdXRhIGlsIGNvbnRlbnV0byBkZWxsYSB2YXJpYWJpbGUgQmluZENoZWNraW5nR3JvdXBzICovXHJcbiAgICBwcml2YXRlIGV2YWx1YXRlQmluZENoZWNraW5nR3JvdXBzKCkge1xyXG4gICAgICAgIC8vIEJsb2NjbyBwZXIgdGlyYXJlIGZ1b3JpIGxlIGNvbmRpemlvbmkgc2NyaXR0ZSB0aXBvIC0tPiA6cHJvcD8oUm9iYSBjb24ge3Byb3B9KVxyXG4gICAgICAgIHZhciBpZmZlZE1hdGNoZXMgPSB0aGlzLkRpc3BsYXkubWF0Y2goLzooW2Etel0rKVxcP1xcKChbXlxcKFxcKV0rKVxcKS9nKTtcclxuICAgICAgICBpZiAoaWZmZWRNYXRjaGVzKSB7XHJcbiAgICAgICAgICAgIGlmZmVkTWF0Y2hlcy5mb3JFYWNoKG0gPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gU3Rlc3NhIHJlZ2V4IGRpIHNvcHJhIG1hIGlsIHRhZyBcImlcIiBzZXJ2ZSBwZXIgdGlyYXJlIGZ1b3JpIGkgc2luZ29saSBjYXB0dXJpbmcgZ3JvdXAgZSBwZXIgcXVhbGNoZSBtb3Rpdm8gXHJcbiAgICAgICAgICAgICAgICAvLyBuZXcgUmVnRXhwKGJhc2VSZWdleCwgXCJnXCIpIG5vbiBmdW56aW9uYSBxdWluZGkgbm9uIGhvIHBvdHV0byByYXppb25hbGl6emFybG9cclxuICAgICAgICAgICAgICAgIGxldCBncm91cHMgPSBtLm1hdGNoKC86KFthLXpdKylcXD9cXCgoW15cXChcXCldKylcXCkvaSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkJpbmRDaGVja2luZ0dyb3Vwcy5wdXNoKHsgZ2xvYmFsOiBtLCBwcm9wOiBncm91cHNbMV0sIHdoZW5leGlzdHM6IGdyb3Vwc1syXSB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBWYWx1dGEgaWwgY29udGVudXRvIGRlbGxhIHZhcmlhYmlsZSBCaW5kUHJvcGVydGllcyAqL1xyXG4gICAgcHJpdmF0ZSBldmFsdWF0ZUJpbmRQcm9wZXJ0aWVzKCkge1xyXG4gICAgICAgIC8vIEJsb2NjbyBwZXIgdGlyYXJlIGZ1b3JpIGxlIHByb3ByaWV0w6Agc2NyaXR0ZSB0aXBvIC0tPiB7cHJvcH1cclxuICAgICAgICB2YXIgbWF0Y2hlcyA9IHRoaXMuRGlzcGxheS5tYXRjaCgve1thLXpdK30vZ2kpO1xyXG4gICAgICAgIGlmIChtYXRjaGVzKVxyXG4gICAgICAgICAgICBtYXRjaGVzLmZvckVhY2gobSA9PiB7IHRoaXMuQmluZFByb3BlcnRpZXMucHVzaCh7IGdsb2JhbDogbSwgcHJvcDogbS5zdWJzdHJpbmcoMSwgbS5sZW5ndGggLSAxKSB9KTsgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFzZm9ybWEgdW4gb2dnZXR0byBkZWxsYSBTb3VyY2UgYWxsYSBzdWEgdmVyc2lvbmUgXCJudW92YVwiIGJhc2FuZG9zaSBzdWxsZSBpbmZvcm1hemlvbmkgc3UgZ3J1cHBpIGUgcHJvcHJpZXTDoFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gaXRlbSBPZ2dldHRvIGRhIHRyYXNmb3JtYXJlXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHt7aWQ6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZ319IE9nZ2V0dG8gZmluYWxlIHRyYXNmb3JtYXRvXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgdHJhbnNmb3JtU291cmNlSXRlbShzOiBhbnkpOiB7aWQ6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZ30ge1xyXG4gICAgICAgIC8vIFBhcnRvIHNlbXByZSBkYWxsYSB2YXJpYWJpbGUgZGkgRGlzcGxheSwgcG9pIHNvc3RpdHVpc2NvIHBlenpvIHBlciBwZXp6b1xyXG4gICAgICAgIGxldCBkZXNjID0gdGhpcy5EaXNwbGF5O1xyXG5cclxuICAgICAgICAvLyBUYWdsaW8gbyBtYW50ZW5nbyBsZSBjb25kaXppb25pIGluIGJhc2UgYWxsYSBwcm9wcmlldMOgIHN1IGN1aSBmYXJlIGNoZWNrXHJcbiAgICAgICAgLy8gRG9wb2RpY2jDqSBzY3Jpdm8gdHV0dGUgbGUgcHJvcHJpZXTDoFxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5CaW5kQ2hlY2tpbmdHcm91cHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHQgPSB0aGlzLkJpbmRDaGVja2luZ0dyb3Vwc1tpXTtcclxuICAgICAgICAgICAgZGVzYyA9IGRlc2MucmVwbGFjZSh0Lmdsb2JhbCwgKHNbdC5wcm9wXSAhPSBudWxsICYmIHNbdC5wcm9wXSAhPSB1bmRlZmluZWQpID8gdC53aGVuZXhpc3RzIDogXCJcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuQmluZFByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHQgPSB0aGlzLkJpbmRQcm9wZXJ0aWVzW2ldO1xyXG4gICAgICAgICAgICBkZXNjID0gZGVzYy5yZXBsYWNlKHQuZ2xvYmFsLCBzW3QucHJvcF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHsgaWQ6IHNbdGhpcy5JZEZpZWxkXSwgZGVzY3JpcHRpb246IGRlc2MgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYSBzZSBpbCBjb21vcG5lbnRlIGluIHF1ZXN0aW9uZSDDqCBpbiBncmFkbyBkaSBnZXN0aXJlIG5nQ29udHJvbCBudWxsaS4gXHJcbiAgICAgKiBEaSBkZWZhdWx0IMOoICoqZmFsc2UqKlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gKip0cnVlKiogc2UgZ2VzdGlzY28gbmdDb250cm9sIG51bGxpLCAqKmZhbHNlKiogYWx0cmltZW50aVxyXG4gICAgICovXHJcbiAgICBoYW5kbGVOdWxsTmdDb250cm9sKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgLy8gQSB2b2x0ZSBuZWxsJ25nT25Jbml0IG5vbiBjaSBwYXNzYSBxdWluZGkgbG8gbWV0dG8gc2lhIHF1aSBzaWEgbmVsbCdhZnRlcnZpZXdpbml0LCBwZW5zbyBjaGUgdmFsZ2EgcGVyIGkgY29tcG9uZW50aSBkaSB0ZXJ6ZSBwYXJ0aVxyXG4gICAgICAgIC8vIGNoZSBzaSBjb2xsZWdhbm8gcGVyIGkgY2F6emkgbG9ybyBhbCBmb3JtIGVjYywgcXVpbmRpIGxhIHBhcnRlIHNvcHJhIG5vbiBzZXJ2ZS4uLiBCT0hcclxuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRWYWxpZGF0b3IoKTtcclxuXHJcbiAgICAgICAgLy9JbCBub21lIG5vbiBjJ8OoIHNlIG1ldHRvIHN0YW5kYWxvbmUgOiB0cnVlIChDSEUgTk9OIMOpIERBIE1FVFRFUkUpXHJcbiAgICAgICAgLy9EYXRvIGNoZSBhbmNoZSBpbCBjb250cm9sbG8gZXN0ZXJubyB2aWVuZSBjb25zaWRlcmF0byBjb21lIGNvbXBvbmVudGUgZGVsIGZvcm0sIG5vbiBwb3NzbyBiYXNhcm1pIHNvbG8gc3VsIG5vbWUgbWEgZGV2byBhZ2dpdW5nZXJlIHVuIHRhZy4gSW4gcXVlc3RvIGNhc28gXCJfaW50ZXJuYWxcIlxyXG4gICAgICAgIC8vIEFUVEVOWklPTkU6IFFVQUxTSUFTSSBTSUEgSUwgTU9USVZPLCBTRSBTVE8gQ09TTyBWSUVORSBTUE9TVEFUTyBEQUxMIG5nT25Jbml0IE5PTiBGVU5aSU9OQSBQSVUgTlVMTEFcclxuICAgICAgICBpZiAodGhpcy5uZ0NvbnRyb2wubmFtZSlcclxuICAgICAgICAgICAgdGhpcy5HZW5lcmF0ZWROYW1lID0gdGhpcy5uZ0NvbnRyb2wubmFtZS50b1N0cmluZygpICsgXCJfaW50ZXJuYWxcIjtcclxuXHJcbiAgICAgICAgLy8gQVRURU5aSU9ORTogUVVBTFNJQVNJIFNJQSBJTCBNT1RJVk8sIFNFIFNUTyBDT1NPIFZJRU5FIFNQT1NUQVRPIERBTEwgbmdPbkluaXQgTk9OIEZVTlpJT05BIFBJVSBOVUxMQVxyXG4gICAgICAgIGlmICh0aGlzLkZvcm0pIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmZvcm1IYXNCZW5uQm91bmQgJiYgdGhpcy52YWxpZGF0aW9uQ29udHJvbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5Gb3JtLmFkZENvbnRyb2wodGhpcy52YWxpZGF0aW9uQ29udHJvbCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1IYXNCZW5uQm91bmQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBRdWFuZG8gdW4gZm9ybSB2aWVuZSBzdWJtaXR0YXRvIGxhIHZhcmlhYmlsZSBGb3JtLnN1Ym1pdHRlZCB2aWVuZSBhc3NlZ25hdGEgYWxsJ2lucHV0IFtzdWJtaXR0ZWRdIGRlbCB2YWwtY29udHJvbFxyXG4gICAgICAgICAgICAvLyBFc3NlbmRvIGNoZSBwZXLDsiBsYSBDRCDDqCBPblB1c2ggcGVyIGRpcmUgYWQgQW5ndWxhciBjaGUgbCdJbnB1dCDDqCBjYW1iaWF0byBlIHBlcm1ldHRlcmUgaSBzaWRlZmZlY3RzIGRpIGFzc2VnbmFyZSBbc3VibWl0dGVkXVxyXG4gICAgICAgICAgICAvLyBkZXZvIGF0dGFjY2FybWkgYWwgc3VibWl0IGF0dHVhbGUgZGVsIGZvcm0gZSBwcmltYSBkaSBlc2VndWlybG8gZGV2byBtYXJjYXJlIGlsIGNvbXBvbmVudGUgcGVyIGlsIGNoZWNrXHJcbiAgICAgICAgICAgIGxldCBvcmlnRnVuYyA9IHRoaXMuRm9ybS5vblN1Ym1pdDtcclxuICAgICAgICAgICAgdmFyIGZvcm1PdXRzaWRlUmVmID0gdGhpcy5Gb3JtO1xyXG4gICAgICAgICAgICB0aGlzLkZvcm0ub25TdWJtaXQgPSAoZXYpOiBib29sZWFuID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdGdW5jLmFwcGx5KGZvcm1PdXRzaWRlUmVmKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlNldFZhbGlkYXRpb25TdWJqZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuU2V0VmFsaWRhdGlvblN1YmplY3QucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSkuc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHYuZmllbGROYW1lICsgXCJfaW50ZXJuYWxcIiA9PSB0aGlzLkdlbmVyYXRlZE5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY29udHJvbCA9IHRoaXMuRm9ybS5nZXRDb250cm9sKHRoaXMudmFsaWRhdGlvbkNvbnRyb2wpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKHsgZm9yY2VkdG9pbnZhbGlkOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sLnNldEVycm9ycyh7IGZvcmNlZHRvaW52YWxpZDogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZGVzdHJveWVkJDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZSBzb25vIGluIG1vZGFsaXTDoCBkZXRhdGNoZWQgZGV2byByaW11b3ZlcmUgbWFudWFsbWVudGUgcXVlc3RvIGNvbnRyb2xsbyBxdWFuZG8gZW50cm8gbmVsbGEgZGlzcG9zZSwgYWx0cmltZW50aSBzZSBwb2kgbmUgYW5kYXNzaSBhIHJpYWdnaXVuZ2VyZVxyXG4gICAgICogdW4gYWx0cm8gY29uIGxvIHN0ZXNzbyBcIm5hbWVcIiBtYSBtYWdhcmkgcmVzZXR0YXRvLCBBbmd1bGFyIGxvIHJlLWlkcmF0ZXJlYmJlIGNvbiBpIHZhbG9yaSBwcmVjZWRlbnRpIG5vbm9zdGFudGUgaWwgbW9kZWxsbyBmb3NzZSB2dW90b1xyXG4gICAgICovXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICBpZiAodGhpcy5Gb3JtICYmIHRoaXMudmFsaWRhdGlvbkNvbnRyb2wgJiYgISF0aGlzLkZvcm0uZ2V0Q29udHJvbCh0aGlzLnZhbGlkYXRpb25Db250cm9sKSlcclxuICAgICAgICAgICAgdGhpcy5Gb3JtLnJlbW92ZUNvbnRyb2wodGhpcy52YWxpZGF0aW9uQ29udHJvbCk7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmRlc3Ryb3llZCQubmV4dCgpO1xyXG4gICAgICAgIHRoaXMuZGVzdHJveWVkJC5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBFbGFib3JhIGkgdmFsaWRhdG9yaSBpbmlldHRhdGkgZSBjYXBpc2NlIHNlIGlsIHZhbG9yZSDDqCBvYmJsaWdhdG9yaW8gbyBtZW5vICovXHJcbiAgICBjaGVja1JlcXVpcmVkVmFsaWRhdG9yKCkge1xyXG4gICAgICAgIC8vIGNvbnRyb2xsbyBzZSDDqCBzZXR0YXRvIHVuIHJlcXVpcmVkIHBlciBkZWNpZGVyZSBpbiBtYW5pZXJhIGNvbmRpemlvbmFsZSBzZSB1dGlsaXp6YXJlIGlsIHZhbGlkYXRvcmUgcmVxdWlyZWQgbmVsIGNvbXBvbmVudGUgaW50ZXJub1xyXG4gICAgICAgIC8vIExvIGZhY2NpbyBxdWkgZSBub24gaW4gdW4gZXZlbnR1YWxlIG5nT25Jbml0IG8gY29zdHJ1dHRvcmUgcGVyY2jDqSBuZ09uSW5pdCBub24gc2VtcHJlIHZpZW5lIGNoaWFtYXRvIGUgZGEgY29zdHJ1dHRvcmUgaWwgdmFsaWRhdG9yZSBub24gaGEgYW5jb3JhIGlsIHZhbG9yZSBnaXVzdG9cclxuICAgICAgICBpZiAodGhpcy5fdmFsaWRhdG9ycyAmJiB0aGlzLl92YWxpZGF0b3JzLnNvbWUoZWxlbSA9PiBlbGVtIGluc3RhbmNlb2YgUmVxdWlyZWRWYWxpZGF0b3IgJiYgZWxlbS5yZXF1aXJlZCkpXHJcbiAgICAgICAgICAgIHRoaXMuUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm5nQ29udHJvbClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRWYWxpZGF0b3IoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogSGVscGVyIGNoZSBjb2xsZWdhIGxhIGZ1bnppb25lIGRpIHJlc2V0IGRlbCBjb250cm9sbG8gZm9ybSBhbCBjb250cm9sbG8gZGkgdmFsaWRhemlvbmUgc290dG9zdGFudGUgKi9cclxuICAgIHByaXZhdGUgYmluZFJlc2V0RnVuY3Rpb24oKSB7XHJcbiAgICAgICAgLy9mYWNjaW8gaW4gbW9kbyBjaGUgc2UgY2hpYW1vIGlsIHJlc2V0IGRlbCBjb250cm9sbG8gKG8gZGVsbGEgZm9ybSkgZGFsbCdlc3Rlcm5vIHNpIHJlc2V0dGkgYW5jaGUgaWwgY29udHJvbGxvIG5hdGl2b1xyXG4gICAgICAgIGNvbnN0IG9yaWdGdW5jID0gKDxhbnk+dGhpcy5uZ0NvbnRyb2wuY29udHJvbCkuX19vcmlnaW5hbF9yZXNldF9fIHx8IHRoaXMubmdDb250cm9sLmNvbnRyb2wucmVzZXQ7XHJcbiAgICAgICAgdmFyIG5nQ29udHJvbF9vdXRzaWRlUmVmZXJlbmNlID0gdGhpcy5uZ0NvbnRyb2wuY29udHJvbDtcclxuICAgICAgICB2YXIgdmFsaWRhdGlvbkNvbnRyb2xfb3V0c2lkZVJlZmVyZW5jZSA9IHRoaXMudmFsaWRhdGlvbkNvbnRyb2wuY29udHJvbDtcclxuXHJcbiAgICAgICAgdGhpcy5uZ0NvbnRyb2wuY29udHJvbC5yZXNldCA9ICgpID0+IHtcclxuICAgICAgICAgICAgb3JpZ0Z1bmMuYXBwbHkobmdDb250cm9sX291dHNpZGVSZWZlcmVuY2UpO1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uQ29udHJvbF9vdXRzaWRlUmVmZXJlbmNlLnJlc2V0KCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy9QZXIgY29uc2VudGlyZSByaWNoaWFtaSBtdWx0aXBsaSBkaSBxdWVzdGEgZnVuemlvbmUgcHJlbmRlbmRvIHNlbXByZSBsYSBmaXVuemlvbmUgZGkgcmVzZXQgYmFzZVxyXG4gICAgICAgICg8YW55PnRoaXMubmdDb250cm9sLmNvbnRyb2wpLl9fb3JpZ2luYWxfcmVzZXRfXyA9IG9yaWdGdW5jXHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBpZiAob2JqID09IG51bGwgJiYgdGhpcy5maXJzdEJpbmQpIHtcclxuICAgICAgICAgICAgdGhpcy5maXJzdEJpbmQgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5Nb2RlbCA9IG9iajtcclxuXHJcbiAgICAgICAgLy9QZXIgc3ZlZ2xpYXJlIEFuZ3VsYXIuIElsIHZhbG9yZSBjaGUgZW50cmEgcG90cmViYmUgZXNzZXJlIHZhbGlkby9ub24gdmFsaWRvIGUgcXVlc3RvIGxvIGJpbmRhIGEgdHV0dG8sIGZvcm0gY29tcHJlc29cclxuICAgICAgICBpZiAodGhpcy5uZ0NvbnRyb2wpXHJcbiAgICAgICAgICAgIHRoaXMubmdDb250cm9sLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5Nb2RlbClcclxuICAgICAgICAgICAgdGhpcy5vbk5vdE51bGxWYWx1ZVNldCgpO1xyXG5cclxuICAgICAgICAvLyBtYXJrRm9yQ2hlY2sgbm9uIHZhIGJlbmUgaW4gcXVhbnRvIGFycml2YW5vIHBvc3NpYmlsbWVudGUgMiB1cGRhdGUgc3UgdW4gc29sbyBjaWNsbyBkaSBzdGFja1xyXG4gICAgICAgIC8vIHNldFRpbWUqdXQgY2hlIHdyYXBwYSB0dXR0byBub24gdmEgYmVuZSBzZW5uw7Igc3BhbW1hIGRlbGxlIGNoYW5nZSBkZXRlY3Rpb24gYSBzdW9uIGRpIGludGVydmFsIGNoZSByYWxsZW50YW5vIHRhbnRpc3NpbW8gbCdhcHBcclxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVnaXN0cmEgaW50ZXJuYW1lbnRlIGlsIGNvbXBvbmVudGUgZGkgdmFsaWRhemlvbmUsIG5lIGltcG9zdGEgaSB2YWxpZGF0b3JpIGUgY29sbGVnYSBpbCBGb3JtLCBzZSBwcmVzZW50ZVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge05nTW9kZWx9IGNvbXAgRWxlbWVudG8gSFRNTCBtYXJjYXRvIGNvbiBcIiN2YWxpZGF0aW9uQ29udHJvbFwiXHJcbiAgICAgKi9cclxuICAgIHJlZ2lzdGVyVmFsQ29tcChjb21wOiBOZ01vZGVsKSB7XHJcbiAgICAgICAgaWYgKGNvbXApIHtcclxuICAgICAgICAgICAgLy8gw4ggYXJyaXZhdG8gdW4gbnVvdm8gdmFsaWRhdGlvbkNvbnRvcmwgKHN1Y2NlZGUgc29sbyBuZWwgZm9ybS1zZWxlY3QgcXVhbmRvIGNhbWJpYSBsYSBzb3VyY2UgZGEgMCBlbGVtZW50aSAvIG51bGwgYWQgTiBlbGVtZW50aSwgcXVpbmRpIGFsIG1hc3NpbW8gdW5hIHZvbHRhKSBcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFsaWRhdGlvbkNvbnRyb2wgJiYgdGhpcy5Gb3JtKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5Gb3JtLnJlbW92ZUNvbnRyb2wodGhpcy52YWxpZGF0aW9uQ29udHJvbCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25Db250cm9sID0gY29tcDtcclxuXHJcbiAgICAgICAgICAgIC8vUXVlc3RhIHNlcnZlIHBlciBwYXNzYXJlIGF2YW50aSBpIHZhbGlkYXRvcmlcclxuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uQ29udHJvbC5jb250cm9sLnNldFZhbGlkYXRvcnModGhpcy5fdmFsaWRhdG9ycyk7XHJcblxyXG4gICAgICAgICAgICAvL1NlIHNvbm8gc3RhY2NhdG8gZGFsIEZvcm0gKHZ1b2wgZGlyZSBjaGUgc29ubyBhZCBlc2VtcGlvIGRlbnRybyB1biBuZy10ZW1wbGF0ZSkgYWdnaXVuZ28gaWwgY29udHJvbGxvIGFsIEZvcm0gcGFzc2F0byBjb21lIGlucHV0IChjb250ZXh0IGRlbCB0ZW1wbGF0ZSlcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGV0YXRjaGVkRnJvbWZvcm0gJiYgdGhpcy5Gb3JtICYmICF0aGlzLmZvcm1IYXNCZW5uQm91bmQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuRm9ybS5hZGRDb250cm9sKHRoaXMudmFsaWRhdGlvbkNvbnRyb2wpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1IYXNCZW5uQm91bmQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5uZ0NvbnRyb2wpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmJpbmRSZXNldEZ1bmN0aW9uKCk7XHJcblxyXG4gICAgICAgICAgICAvL0kgdmFsLXJvYmEgcXVlc3RvIGxvIGZhbm5vIGF1dG9tYXRpY2FtZW50ZSBkZW50cm8uLi4gZ2xpIGFsdHJpIG5vIChlcy4gc2VtcGxpY2UgaW5wdXQgY2hlY2tib3gpXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsaWRpdHlGb3JOYXRpdmVJbnB1dCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJGb3JtKG5nRm9ybTogTmdGb3JtKSB7XHJcbiAgICAgICAgdGhpcy5Gb3JtID0gbmdGb3JtO1xyXG4gICAgICAgIHRoaXMuRm9ybS5hZGRDb250cm9sKHRoaXMudmFsaWRhdGlvbkNvbnRyb2wpXHJcbiAgICAgICAgdGhpcy5mb3JtSGFzQmVubkJvdW5kID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFnZ2lvcm5hIGlsIHZhbG9yZSBlIGxhIHZhbGlkaXTDoCBkZWxsJ2lucHV0IHNvdHRvc3RhbnRlLiBOb24gdmllbmUgY2hpYW1hdG8gcGVyIGlucHV0IG5hdGl2aSBjb21lIGxlIGNoZWNrYm94XHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZm9yY2VkVmFsdWUgRm9yemEgbCdhZ2dpb3JuYW1lbnRvIGFuY2hlIHNlIG5vbiDDqCB1biBpbnB1dCBuYXRpdm8gKGlucHV0IG5hdGl2byA9IGNoZWNrYm94LCBhZCBlc2VtcGlvKVxyXG4gICAgICovXHJcbiAgICB1cGRhdGVWYWxpZGl0eUZvck5hdGl2ZUlucHV0KGZvcmNlZFZhbHVlOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICBpZiAoZm9yY2VkVmFsdWUgfHwgdGhpcy5uYXRpdmVJbnB1dClcclxuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uQ29udHJvbC5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqIENsYXNzaWNvIFwic3BhcmEgZnVvcmlcIi4gTWFudGVuZ28gbG8gc3Rlc3NvIG5vbWUgZGVsbCdldmVudG8gZGVpIDx2YWwtKj4gKGlucHV0Q2hhbmdlKSBwZXIgcmV0cm9jb21wYXRpYmlsaXTDoC5cclxuICAgICAqIFxyXG4gICAgICogTm9uIHBvc3NvIHRlbmVybG8gcHJvdGVjdGVkIGFsdHJpbWVudGkgcG9zc28gZXNlZ3VpcmxvIHNvbG8gZGFsIC50cyBlIG5vbiBkYWxsJyAuaHRtbFxyXG4gICAgICovXHJcbiAgICBjaGFuZ2VkKGZvcmNlZFZhbHVlOiBhbnkgPSBudWxsLCBtYXJrRm9yQ2hlY2s6IGJvb2xlYW4gPSBmYWxzZSwgbW9kZWxFdmFsdWF0aW9uSGFuZGxlZDogYm9vbGVhbiA9IGZhbHNlLCBpbnRlcm5hbDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgbGV0IHRvRW1pdCA9IGZvcmNlZFZhbHVlID09IG51bGwgfHwgZm9yY2VkVmFsdWUgPT0gXCJcIiA/IHRoaXMuTW9kZWwgPz8gXCJcIiA6IGZvcmNlZFZhbHVlO1xyXG5cclxuICAgICAgICBpZighbW9kZWxFdmFsdWF0aW9uSGFuZGxlZClcclxuICAgICAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IHRvRW1pdDtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0b0VtaXQpO1xyXG4gICAgICAgIHRoaXMuaW5wdXRDaGFuZ2UuZW1pdChuZXcgQ2hhbmdlRXZlbnQoaW50ZXJuYWwsIHRvRW1pdCkpO1xyXG4gICAgICAgIGlmIChtYXJrRm9yQ2hlY2spXHJcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICogQ2xhc3NpY28gXCJzcGFyYSBmdW9yaVwiIHN1bCBmb2N1cy4gTWFudGVuZ28gbG8gc3Rlc3NvIG5vbWUgZGVsbCdldmVudG8gZGVpIDx2YWwtKj4gKGlucHV0Q2hhbmdlKSBwZXIgcmV0cm9jb21wYXRpYmlsaXTDoC5cclxuICAgICAqIFxyXG4gICAgICogTm9uIHBvc3NvIHRlbmVybG8gcHJvdGVjdGVkIGFsdHJpbWVudGkgcG9zc28gZXNlZ3VpcmxvIHNvbG8gZGFsIC50cyBlIG5vbiBkYWxsJyAuaHRtbFxyXG4gICAgICovXHJcbiAgICBmb2N1c2VkKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICB0aGlzLmlucHV0Rm9jdXMuZW1pdChldmVudCk7XHJcbiAgICAgICAgdGhpcy5sb2coXCJDb250cm9sIEZvY3VzZWQgLSBcIiArIHRoaXMuR2VuZXJhdGVkTmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKiBDbGFzc2ljbyBcInNwYXJhIGZ1b3JpXCIgc3VsbGEgZmluYWxpenphemlvbmUgZGVsIHZhbG9yZSBkZWxsJ2lucHV0IChibHVyIC8gdGFzdG8gaW52aW8sIGVjYy4uLikuIE1hbnRlbmdvIGxvIHN0ZXNzbyBub21lIGRlbGwnZXZlbnRvIGRlaSA8dmFsLSo+IChpbnB1dENoYW5nZSkgcGVyIHJldHJvY29tcGF0aWJpbGl0w6AuXHJcbiAgICAgKiBcclxuICAgICAqIE5vbiBwb3NzbyB0ZW5lcmxvIHByb3RlY3RlZCBhbHRyaW1lbnRpIHBvc3NvIGVzZWd1aXJsbyBzb2xvIGRhbCAudHMgZSBub24gZGFsbCcgLmh0bWxcclxuICAgICAqL1xyXG4gICAgZmluYWxpemVkKCkge1xyXG4gICAgICAgIHRoaXMuaW5wdXRGaW5hbGl6ZWQuZW1pdCh0aGlzLm5nQ29udHJvbD8ubmFtZT8udG9TdHJpbmcoKSk7XHJcbiAgICAgICAgdGhpcy5sb2coXCJDb250cm9sIFZhbHVlIEZpbmFsaXplZCAtIFwiICsgdGhpcy5HZW5lcmF0ZWROYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0YW1wYSB1biBsb2cgYSBjb25zb2xlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIE1lc3NhZ2dpbyBkYSBzdGFtcGFyZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbG9nKG1lc3NhZ2U6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLkZBVl9ERUJVR19NT0RFKVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkBmb3Jtcy1hbmQtdmFsaWRhdGlvbnM6IFwiICsgbWVzc2FnZSlcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgYWJzdHJhY3Qgb25Ob3ROdWxsVmFsdWVTZXQoKTogdm9pZDtcclxufSJdfQ==
@@ -91,7 +91,8 @@ export class FormAdaptiveComponent extends BaseFormControl {
91
91
  this.Pattern = this.nvl(this.Options?.Pattern, this.Pattern);
92
92
  }
93
93
  if (this.ngControl) {
94
- let validators = this._validators || [];
94
+ // Esclusi i validatori a componenti
95
+ let validators = [...(this._validators || [])].filter(v => !v.ngOnInit);
95
96
  var pv = new PatternValidator();
96
97
  switch (this.Type) {
97
98
  case 'int':
@@ -155,7 +156,7 @@ export class FormAdaptiveComponent extends BaseFormControl {
155
156
  else if (this.Type == "boolean") {
156
157
  obj = obj ? (obj === true || obj.toLowerCase() == "true") : false;
157
158
  this.alignValues = true;
158
- this.EvaluatedModel = this.lc.loc(obj ? 'Yes' : 'No');
159
+ this.EvaluatedModel = this.lc.loc(obj ? '' : 'No');
159
160
  }
160
161
  else if (this.Type == "time") {
161
162
  const [hours, minutes, seconds] = (obj || "00:00:00").split(":");
@@ -384,4 +385,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
384
385
  }], Options: [{
385
386
  type: Input
386
387
  }] } });
387
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1hZGFwdGl2ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3Jtcy1hbmQtdmFsaWRhdGlvbnMvc3JjL2xpYi9mb3Jtcy9mb3JtLWFkYXB0aXZlL2Zvcm0tYWRhcHRpdmUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybXMtYW5kLXZhbGlkYXRpb25zL3NyYy9saWIvZm9ybXMvZm9ybS1hZGFwdGl2ZS9mb3JtLWFkYXB0aXZlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzSixPQUFPLEVBQXdCLGFBQWEsRUFBYSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxHLHNCQUFzQjtBQUN0QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUs5RCxlQUFlO0FBQ2YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXpFLFVBQVU7QUFDVixPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBYy9DLDJKQUEySjtBQVEzSixNQUFNLE9BQU8scUJBQXNCLFNBQVEsZUFBZTtJQXdEdEQsMkJBQTJCO0lBQzNCLFlBQVksR0FBc0IsRUFBVSxPQUF1QixFQUFVLFNBQXNCLEVBQVUsV0FBbUMsRUFBUyxFQUF1QixFQUFzQixTQUFvQixFQUFxQyxXQUF1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OzRDQXREL2EsSUFBSTtzQkFBWixLQUFLO2dCQUdHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFHRyxPQUFPO3NCQUFmLEtBQUs7Z0JBR0csWUFBWTtzQkFBcEIsS0FBSztnQkFHcUMsT0FBTztzQkFBakQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUdoQyxhQUFhO3NCQUFyQixLQUFLO2dCQU1HLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csU0FBUztzQkFBakIsS0FBSztnQkFHRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBR0csYUFBYTtzQkFBckIsS0FBSztnQkFHRyxPQUFPO3NCQUFmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3QsIElucHV0LCBPcHRpb25hbCwgU2VsZiwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTElEQVRPUlMsIE5nQ29udHJvbCwgUGF0dGVyblZhbGlkYXRvciB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5cclxuLy8gRVMgLyBDb25maWd1cmF6aW9uaVxyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9sb2NhbGl6YXRpb25zXCI7XHJcbmltcG9ydCB7IERhdGVTZXJ2aWNlLCBVdGlsaXR5U2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvZXh0ZW5zaW9uc1wiO1xyXG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sU2VydmljZSwgQ29tcG9uZW50Q29udGV4dCB9IGZyb20gJ0Blc2ZhZW56YS9hY2Nlc3MtY29udHJvbCc7XHJcbmltcG9ydCB7IE5neE1hdERhdGVBZGFwdGVyIH0gZnJvbSBcIkBhbmd1bGFyLW1hdGVyaWFsLWNvbXBvbmVudHMvZGF0ZXRpbWUtcGlja2VyXCI7XHJcblxyXG4vLyBBcHBsaWNhemlvbmVcclxuaW1wb3J0IHsgQmFzZUZvcm1Db250cm9sIH0gZnJvbSBcIi4uL2Jhc2UtZm9ybS1jb250cm9sXCI7XHJcbmltcG9ydCB7IEZvcm1BZGFwdGl2ZUNvbXBvbmVudExvYyB9IGZyb20gXCIuL2Zvcm0tYWRhcHRpdmUuY29tcG9uZW50LmxvY1wiO1xyXG5cclxuLy8gTW9kZWxsaVxyXG5pbXBvcnQgeyBBQ09fQ1VTVE9NS0VZLCBGQVZfREVCVUdfTU9ERSB9IGZyb20gJy4uLy4uL3Rva2Vucyc7XHJcbmltcG9ydCB7IEFwcEZpbGUgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL0FwcEZpbGVcIjtcclxuXHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBDaGFuZ2VFdmVudCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvQ2hhbmdlRXZlbnRcIjtcclxuXHJcbi8qKlxyXG4gKiBEaWNoaWFyYXppb25lIGRlbGxhIHZhcmlhYmlsZSBnbG9iYWxlIGRheWpzLiBMJ29uZXJlIGRpIFwiY3JlYXJsYVwiIMOoIGFmZmlkYXRvIGFsbCdhcHBsaWNhemlvbmUgY2hlIHV0aWxpenphIHF1ZXN0YSBsaWJyZXJpYSwgXHJcbiAqIGNoZSBkb3Zyw6AgaW1wb3J0YXJlIGxvIHNjcmlwdCBnbG9iYWxlIGRpIGRheWpzIG5lbGxhIENMSVxyXG4gKi9cclxuZGVjbGFyZSB2YXIgZGF5anM6IGFueTtcclxuXHJcbi8qKiBPcHppb25pIGdlbmVyaWNoZSBkaXNwb25pYmlsaSAqL1xyXG5leHBvcnQgdHlwZSBBdmFpbGFibGVPcHRpb25zID0gJ0pzRGF0ZXMnIHwgJ0Nhc2VTZW5zaXRpdmUnIHwgJ01pbkNoYXJzJyB8ICdTZWFyY2hGdW5jdGlvbicgfCAnQWxpZ25tZW50JyB8ICdQcmVjaXNpb24nIHwgJ0FsbG93RG93bmxvYWQnIHwgJ0FkanVzdE51bWJlcicgfCAnUGF0dGVybic7XHJcblxyXG4vKiogQ29tcG9uZW50ZSBpbiBncmFkbyBkaSBhc3N1bWVyZSBsYSBmb3JtYSBkaSB1biBxdWFsc2lhc2kgYWx0cm8gY29tcG9uZW50ZSBmb3JtIGluIGJhc2UgYWwgdGlwbyBzcGVjaWZpY2F0by4gVXRpbGUgIHBlciBsYSBjcmVhemlvbmUgZGkgZm9ybSBkaW5hbWljaSAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcImZvcm0tYWRhcHRpdmVcIixcclxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTG9jYWxpemF0aW9uU2VydmljZSwgdXNlQ2xhc3M6IEZvcm1BZGFwdGl2ZUNvbXBvbmVudExvYyB9XSxcclxuICAgIHRlbXBsYXRlVXJsOiBcImZvcm0tYWRhcHRpdmUuY29tcG9uZW50Lmh0bWxcIixcclxuICAgIHN0eWxlVXJsczogW1wiLi4vZm9ybS1maWxlL2Zvcm0tZmlsZS5jb21wb25lbnQuY3NzXCJdLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIEZvcm1BZGFwdGl2ZUNvbXBvbmVudCBleHRlbmRzIEJhc2VGb3JtQ29udHJvbCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuXHJcbiAgICAvKiogVGlwb2xvZ2lhIGNoZSBkZWNpZGUgY2hlIGNvbXBvbmVudGUgbW9zdHJhcmUgKi9cclxuICAgIEBJbnB1dCgpIFR5cGU6ICdzdHJpbmcnIHwgJ2Zsb2F0JyB8ICdkYXRlJyB8ICdudW1iZXInIHwgJ2ludCcgfCAnYm9vbGVhbicgfCAnZW51bScgfCAnYXV0b2NvbXBsZXRlJyB8ICdkYXRldGltZScgfCAndGltZScgfCAnZmlsZScgfCAnY3VycmVuY3knO1xyXG5cclxuICAgIC8qKiBNZXNzYWdnaW8gcGVyIHF1YW5kbyBzaSBiaW5kYSB1biBmb3JtLWFkYXB0aXZlIHNlbnphIHRpcG8gKi9cclxuICAgIEBJbnB1dCgpIFR5cGVNaXNzaW5nTWVzc2FnZTogc3RyaW5nO1xyXG5cclxuICAgIC8qKiBQYXR0ZXJuIGRpIHZhbGlkYXppb25lICovXHJcbiAgICBASW5wdXQoKSBQYXR0ZXJuOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqIEluZGljYSBkaSBhZ2dpdXN0YXJlIGluIHVzY2l0YSBpIG51bWJlciBpbiBtb2RvIGNoZSBzaWFubyBwYXJzYWJpbGkgZGFsIGphdmFzY3JpcHQgKi9cclxuICAgIEBJbnB1dCgpIEFkanVzdE51bWJlcjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLyoqIFJpZmVyaW1lbnRvIGFsbCdlbGVtZW50byBpbnB1dCBkaSB0aXBvIGZpbGUgcXVhbG9yYSBpbCAqKlR5cGUqKiBkaSBxdWVzdG8gY29tcG9uZW50ZSBmb3NzZSAqKmZpbGUqKiAqL1xyXG4gICAgQFZpZXdDaGlsZChcImZpbGVJbnB1dFwiLCB7IHN0YXRpYzogZmFsc2UgfSkgaW5wdXRFbDogRWxlbWVudFJlZjtcclxuXHJcbiAgICAvKiogUGVybWV0dGUgZGkgc2NhcmljYXJlIGwnZXZlbnR1YWxlIGZpbGUgcHJlc2VudGUgcXVhbG9yYSBpbCAqKlR5cGUqKiBkaSBxdWVzdG8gY29tcG9uZW50ZSBmb3NzZSAqKmZpbGUqKiAqL1xyXG4gICAgQElucHV0KCkgQWxsb3dEb3dubG9hZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLyoqIE1vZGVsbG8gdHlwZXNjcmlwdCBkaSBiaW5kIGRlaSBmaWxlICovXHJcbiAgICBNb2RlbEZpbGU6IEFwcEZpbGU7XHJcblxyXG4gICAgLyoqIFV0aWxpenphdGEgbmVsIGZvcm0tYWRhcHRlciBwZXIgc3BlY2lmaWNhcmUgbGEgcHJlY2lzaW9uZSBkZWdsaSBpbnB1dCBjdXJyZW5jeW1hcCAoVHlwZTogY3VycmVuY3kpICovXHJcbiAgICBASW5wdXQoKSBQcmVjaXNpb246IG51bWJlciA9IDI7XHJcblxyXG4gICAgLyoqIEFsbGluZWFtZW50byBkZWxsYSBjdXJyZW5jeSBtYXNrICovXHJcbiAgICBASW5wdXQoKSBBbGlnbm1lbnQ6ICdsZWZ0JyB8ICdyaWdodCcgPSAncmlnaHQnO1xyXG5cclxuICAgIC8qKiBGdW56aW9uZSBkaSByaWNlcmNhIGNoZSB2ZXJyw6AgY2hpYW1hdGEgZGFsIGNvbXBvbmVudGUgKi9cclxuICAgIEBJbnB1dCgpIFNlYXJjaEZ1bmN0aW9uOiAoc2VhcmNoOiBzdHJpbmcsIGJ5aWQ6IGJvb2xlYW4pID0+IE9ic2VydmFibGU8eyBpZDogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nIH1bXT4gPSBudWxsO1xyXG5cclxuICAgIC8qKiBOdW1lcm8gbWluaW1vIGRpIGNhcmF0dGVyaSBjb24gY3VpIGNlcmNhcmUgKi9cclxuICAgIEBJbnB1dCgpIE1pbkNoYXJzOiBudW1iZXIgPSAzO1xyXG5cclxuICAgIC8qKiBJbmRpY2Egc2UgaSBjb250cm9sbGkgZGV2b25vIGVzc2VyZSBlZmZldHR1YXRpIHRlbmVuZG8gY29udG8gZGVsIENhc2UgbyBtZW5vLiBWYWxlIHNvbG8gcXVhbG9yYSBsYSAqKlNvdXJjZSoqIGZvc3NlIGZvcm5pdGEgKi9cclxuICAgIEBJbnB1dCgpIENhc2VTZW5zaXRpdmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogT3B6aW9uaSBzcGVjaWZpY2hlIHBlciBpbCBjb21wb25lbnRlIGNoZSBzaSB2YSBhIHZpc3VhbGl6emFyZS4gRXMuIHBlciBpIHRpcGkgZGF0ZTogeyBKc0RhdGVzOiB0cnVlIH0gKi9cclxuICAgIEBJbnB1dCgpIE9wdGlvbnM6IHsgW2lkIGluIEF2YWlsYWJsZU9wdGlvbnNdPzogYW55IH0gPSB7fTtcclxuXHJcbiAgICAvKiogVmFyaWFiaWxlIGludGVybmEgY2hlIGdlc3Rpc2NlIHNlIGVmZmV0dHVhcmUgaWwgcmlhbGxpbmVhbWVudG8gZGVpIGRhdGkgbyBtZW5vICovXHJcbiAgICBwcml2YXRlIGFsaWduVmFsdWVzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2Egc2UgaWdub3JhcmUgaWwgcHJvc3NpbW8gZXZlbnRvIHdyaXRlVmFsdWUgY2hlIG5vcm1hbG1lbnRlIGRvdnJlYmJlIHJpY2hpZWRlcmUgbGEgbnVvdmEgc291cmNlLiBTZXJ2ZSBwZXIgcXVhbmRvIGwndXRlbnRlIHNlbGV6aW9uYSB1biBlbGVtZW50bzpcclxuICAgICAqIFN1Yml0byBkb3BvIHBhcnRpcmViYmUgdW4gYWx0cm8gZXZlbnRvIG1vZGVsQ2hhbmdlIGNoZSByaWNhcmljaGVyZWJiZSBudW92YW1lbnRlIGxhIHNvdXJjZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGlnbm9yZU5leHRXcml0ZVZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIENhY2hlIGRlbGxhIHNvcmdlbnRlIG9yaWdpbmFsZSBQT1NUIGJpbmRpbmcsIGluIG1vZG8gZGEgcG90ZXIgZmFyZSBmaWx0cmkgaW4gbG9jYWxlIHF1YWxvcmEgbGEgKipTZWFyY2hGdW5jdGlvbioqIG5vbiBmb3NzZSBkZWZpbml0YSBlIGxhICoqU291cmNlKiogZm9zc2UgYXNzZWduYXRhICovXHJcbiAgICBwdWJsaWMgRmlsdGVyZWRCb3VuZFNvdXJjZTogeyBpZDogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nIH1bXSA9IFtdO1xyXG5cclxuICAgIC8qKiBTb2xvIHBlciBnbGkgaW5wdXQgZGkgdGlwbyBcImRhdGVcIi4gQ2FwaXNjZSBjaGUgbW9kYWxpdMOgIHVzYXJlIHBlciBpbCB2YWxpZGF0aW9uLWRhdGUgc290dG9zdGFudGUgKi9cclxuICAgIHB1YmxpYyB1c2VKc0RhdGVzOiBib29sZWFuID0gbnVsbDtcclxuXHJcbiAgICAvKiogQGlnbm9yZSBDb3N0cnV0dG9yZSAgKi9cclxuICAgIGNvbnN0cnVjdG9yKGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgdXRpRXh0czogVXRpbGl0eVNlcnZpY2UsIHByaXZhdGUgZGF0ZXNFeHRzOiBEYXRlU2VydmljZSwgcHJpdmF0ZSBkYXRlQWRhcHRlcjogTmd4TWF0RGF0ZUFkYXB0ZXI8YW55PiwgcHVibGljIGxjOiBMb2NhbGl6YXRpb25TZXJ2aWNlLCBAT3B0aW9uYWwoKSBAU2VsZigpIG5nQ29udHJvbDogTmdDb250cm9sLCBAT3B0aW9uYWwoKSBASW5qZWN0KE5HX1ZBTElEQVRPUlMpIF92YWxpZGF0b3JzOiBBcnJheTxhbnk+LCBhYzogQWNjZXNzQ29udHJvbFNlcnZpY2UsIEBPcHRpb25hbCgpIEFwcENvbnRleHQ6IENvbXBvbmVudENvbnRleHQsIEBPcHRpb25hbCgpIEBJbmplY3QoQUNPX0NVU1RPTUtFWSkgQUNPX0NVU1RPTUtFWTogc3RyaW5nLCBAT3B0aW9uYWwoKSBASW5qZWN0KEZBVl9ERUJVR19NT0RFKSBGQVZfREVCVUdfTU9ERTogYm9vbGVhbikge1xyXG4gICAgICAgIHN1cGVyKGNkciwgbmdDb250cm9sLCBfdmFsaWRhdG9ycywgYWMsIEFwcENvbnRleHQsIEFDT19DVVNUT01LRVksIEZBVl9ERUJVR19NT0RFKTtcclxuXHJcbiAgICAgICAgdGhpcy5Nb2RlbEZpbGUgPSBuZXcgQXBwRmlsZSgpO1xyXG4gICAgICAgIHRoaXMuVXNlVXNlclZhbGlkYXRvcnMgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgSW50UGF0dGVybiA9ICdeWzAtOV1cXFxcZCokJztcclxuICAgIHB1YmxpYyBGbG9hdFBhdHRlcm4gPSAnXihbMC05XSpbLF0pP1swLTldKyQnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTnZsIGNvbiB1biBtaW5pbW8gZGkgc2Vuc29cclxuICAgICAqIEBwYXJhbSB2YWx1ZSBWYWxvcmUgYmFzZVxyXG4gICAgICogQHBhcmFtIGlmbm9kIFZhbG9yZSBkYSB1c2FyZSBzZSAqKnZhbHVlKiogw6ggbnVsbG8gbyB1bmRlZmluZWRcclxuICAgICAqIEByZXR1cm5zIElsIHZhbG9yZSBwcmVzbyBmcmEgaSBkdWUgZGlzcG9uaWJpbGlcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBudmw8VD4odmFsdWU6IFQsIGlmbm9kOiBUKTogVCB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT0gdW5kZWZpbmVkID8gaWZub2QgOiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICAgICAgLy8gQXNzZWduYXppb25lIE9wemlvbmkgZGEgb2dnZXR0b1xyXG4gICAgICAgIGlmKHRoaXMuT3B0aW9ucyl7XHJcbiAgICAgICAgICAgIHRoaXMudXNlSnNEYXRlcyA9IHRoaXMubnZsKHRoaXMuT3B0aW9ucz8uSnNEYXRlcywgdGhpcy51c2VKc0RhdGVzKTs7XHJcbiAgICAgICAgICAgIHRoaXMuQ2FzZVNlbnNpdGl2ZSA9IHRoaXMubnZsKHRoaXMuT3B0aW9ucz8uQ2FzZVNlbnNpdGl2ZSwgdGhpcy5DYXNlU2Vuc2l0aXZlKTtcclxuICAgICAgICAgICAgdGhpcy5NaW5DaGFycyA9IHRoaXMubnZsKHRoaXMuT3B0aW9ucz8uTWluQ2hhcnMsIHRoaXMuTWluQ2hhcnMpO1xyXG4gICAgICAgICAgICB0aGlzLlNlYXJjaEZ1bmN0aW9uID0gdGhpcy5udmwodGhpcy5PcHRpb25zPy5TZWFyY2hGdW5jdGlvbiwgdGhpcy5TZWFyY2hGdW5jdGlvbik7XHJcbiAgICAgICAgICAgIHRoaXMuQWxpZ25tZW50ID0gdGhpcy5udmwodGhpcy5PcHRpb25zPy5BbGlnbm1lbnQsIHRoaXMuQWxpZ25tZW50KTtcclxuICAgICAgICAgICAgdGhpcy5QcmVjaXNpb24gPSB0aGlzLm52bCh0aGlzLk9wdGlvbnM/LlByZWNpc2lvbiwgdGhpcy5QcmVjaXNpb24pO1xyXG4gICAgICAgICAgICB0aGlzLkFsbG93RG93bmxvYWQgPSB0aGlzLm52bCh0aGlzLk9wdGlvbnM/LkFsbG93RG93bmxvYWQsIHRoaXMuQWxsb3dEb3dubG9hZCk7XHJcbiAgICAgICAgICAgIHRoaXMuQWRqdXN0TnVtYmVyID0gdGhpcy5udmwodGhpcy5PcHRpb25zPy5BZGp1c3ROdW1iZXIsIHRoaXMuQWRqdXN0TnVtYmVyKTtcclxuICAgICAgICAgICAgdGhpcy5QYXR0ZXJuID0gdGhpcy5udmwodGhpcy5PcHRpb25zPy5QYXR0ZXJuLCB0aGlzLlBhdHRlcm4pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sKSB7XHJcbiAgICAgICAgICAgIGxldCB2YWxpZGF0b3JzID0gdGhpcy5fdmFsaWRhdG9ycyB8fCBbXTtcclxuXHJcbiAgICAgICAgICAgIHZhciBwdiA9IG5ldyBQYXR0ZXJuVmFsaWRhdG9yKCk7XHJcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdpbnQnOlxyXG4gICAgICAgICAgICAgICAgICAgIHB2LnBhdHRlcm4gPSB0aGlzLlBhdHRlcm4gfHwgdGhpcy5JbnRQYXR0ZXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChwdik7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdmbG9hdCc6XHJcbiAgICAgICAgICAgICAgICBjYXNlICdudW1iZXInOlxyXG4gICAgICAgICAgICAgICAgICAgIHB2LnBhdHRlcm4gPSB0aGlzLlBhdHRlcm4gfHwgdGhpcy5GbG9hdFBhdHRlcm47XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKHB2KTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuUGF0dGVybikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwdi5wYXR0ZXJuID0gdGhpcy5QYXR0ZXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2gocHYpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAoPGFueT50aGlzLm5nQ29udHJvbCkuX3NldFZhbGlkYXRvcnModmFsaWRhdG9ycyk7XHJcbiAgICAgICAgICAgIHRoaXMubmdDb250cm9sLmNvbnRyb2wuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcclxuICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwdWJsaWMgYXN5bmMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgICAgIGNvbnN0IG5ld1NvdXJjZSA9IGNoYW5nZXNbXCJTb3VyY2VcIl07XHJcbiAgICAgICAgY29uc3QgbmV3VHlwZSA9IGNoYW5nZXNbXCJUeXBlXCJdO1xyXG5cclxuICAgICAgICBpZiAobmV3U291cmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJ5QmluZFNvdXJjZURpc3BsYXkoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFByaW1hIGFzc2VnbmF6aW9uZSBzZSBjYW1iaWEgbGEgc291cmNlIHNvdHRvIChxdWluZGkgc2UgdmllbmUgYmluZGF0YSBkaXJldHRhbWVudGUgZGEgSFRNTClcclxuICAgICAgICAgICAgaWYgKHRoaXMuVHlwZSA9PSBcImF1dG9jb21wbGV0ZVwiICYmICh0aGlzLk1vZGVsPy5sZW5ndGggfHwgMCkgPj0gdGhpcy5NaW5DaGFycyAmJiAhdGhpcy5TZWFyY2hGdW5jdGlvbilcclxuICAgICAgICAgICAgICAgIHRoaXMuRmlsdGVyZWRCb3VuZFNvdXJjZSA9IHRoaXMuQm91bmRTb3VyY2U7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuRmlsdGVyZWRCb3VuZFNvdXJjZSA9IFtdO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobmV3VHlwZSAmJiB0aGlzLk1vZGVsKVxyXG4gICAgICAgICAgICB0aGlzLndyaXRlVmFsdWUodGhpcy5Nb2RlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFsaWduVmFsdWVzID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuRXZhbHVhdGVkTW9kZWwgPSBvYmo/LnRvU3RyaW5nKCkgfHwgXCJcIjtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLlR5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy5UeXBlID0gXCJzdHJpbmdcIjtcclxuICAgICAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IG9iajtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlR5cGUgPT0gXCJkYXRlXCIgfHwgdGhpcy5UeXBlID09IFwiZGF0ZXRpbWVcIikge1xyXG4gICAgICAgICAgICB0aGlzLnVzZUpzRGF0ZXMgPSB0aGlzLnVzZUpzRGF0ZXMgPT0gbnVsbCA/IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSBcIltvYmplY3QgRGF0ZV1cIiA6IHRoaXMudXNlSnNEYXRlcztcclxuICAgICAgICAgICAgaWYgKHRoaXMuVHlwZSA9PSBcImRhdGVcIilcclxuICAgICAgICAgICAgICAgIHRoaXMuRXZhbHVhdGVkTW9kZWwgPSB0aGlzLmRhdGVzRXh0cy5nZXRGb3JtYXR0ZWQob2JqLCB0cnVlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLlR5cGUgPT0gXCJkYXRldGltZVwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IHRoaXMuZGF0ZXNFeHRzLmdldEZvcm1hdHRlZChvYmosIGZhbHNlLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoKHRoaXMuVHlwZSA9PSBcImZsb2F0XCIgfHwgdGhpcy5UeXBlID09IFwibnVtYmVyXCIpICYmIG9iaikge1xyXG4gICAgICAgICAgICBvYmogPSBvYmoudG9TdHJpbmcoKS5yZXBsYWNlKFwiLlwiLCBcIixcIik7XHJcbiAgICAgICAgICAgIHRoaXMuRXZhbHVhdGVkTW9kZWwgPSBvYmo7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFBlciBzaWN1cmV6emEgcmlhbGxpbmVvIGkgdmFsb3JpXHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5UeXBlID09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgICAgICAgIG9iaiA9IG9iaiA/IChvYmogPT09IHRydWUgfHwgb2JqLnRvTG93ZXJDYXNlKCkgPT0gXCJ0cnVlXCIpIDogZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuYWxpZ25WYWx1ZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gdGhpcy5sYy5sb2Mob2JqID8gJ1llcycgOiAnTm8nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5UeXBlID09IFwidGltZVwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IFtob3VycywgbWludXRlcywgc2Vjb25kc10gPSAob2JqIHx8IFwiMDA6MDA6MDBcIikuc3BsaXQoXCI6XCIpO1xyXG4gICAgICAgICAgICBvYmogPSBkYXlqcygpLmhvdXIocGFyc2VJbnQoaG91cnMgPz8gMCkpLm1pbnV0ZShwYXJzZUludChtaW51dGVzID8/IDApKS5zZWNvbmQocGFyc2VJbnQoc2Vjb25kcyA/PyAwKSk7XHJcbiAgICAgICAgICAgIHRoaXMuRXZhbHVhdGVkTW9kZWwgPSBgJHtob3VycyB8fCAnMDAnfToke21pbnV0ZXMgfHwgJzAwJ306JHtzZWNvbmRzIHx8ICcwMCd9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5UeXBlID09IFwiZmlsZVwiKSB7XHJcbiAgICAgICAgICAgIG9iaiA9IHRoaXMuTW9kZWxGaWxlO1xyXG4gICAgICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gdGhpcy5Nb2RlbEZpbGUuZmlsZW5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuVHlwZSA9PSBcImF1dG9jb21wbGV0ZVwiKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLlNlYXJjaEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLlNlYXJjaEZ1bmN0aW9uKG9iaiwgdHJ1ZSkuc3Vic2NyaWJlKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuU291cmNlID0gdDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUJpbmRTb3VyY2VEaXNwbGF5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IHRoaXMuZmluYWxpemVWYWx1ZShvYmopOyB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuZmluYWxpemVWYWx1ZShvYmopO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuQm91bmRTb3VyY2UgJiYgdGhpcy5Cb3VuZFNvdXJjZS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gdGhpcy5Cb3VuZFNvdXJjZS5maW5kKHQgPT4gdC5pZCA9PSBvYmopPy5kZXNjcmlwdGlvbjtcclxuXHJcbiAgICAgICAgc3VwZXIud3JpdGVWYWx1ZShvYmopO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5hbGlnblZhbHVlcykge1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGF0byB1biB2YWxvcmUgdmVyaWZpY2Egc2UgcHXDsiByZXN0aXR1aXJlIGxlIGluZm9ybWF6aW9uaSB0cm92YXRlIGluICoqU291cmNlKiogY29uIGlkIHVndWFsZSBhICoqdmFsdWUqKiBvIHNlIGRldmUgcmVzdGl0dWlyZSBpbCB2YWxvcmUgaW4gc2VcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IHZhbHVlIFZhbG9yZSBzY3JpdHRvIG5lbGwnaW5wdXQgZGkgdGVzdG9cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBmaW5hbGl6ZVZhbHVlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB2YXIgdmFsID0gdGhpcy5Tb3VyY2UuZmluZCh0ID0+IHQuaWQgPT0gdmFsdWUpO1xyXG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHZhbCA/IHZhbC5pZCA6IHZhbHVlKTtcclxuICAgICAgICB0aGlzLk1vZGVsID0gdmFsID8gdmFsLmRlc2NyaXB0aW9uIDogdmFsdWU7XHJcbiAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IHRoaXMuTW9kZWw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFdmVudG8gZGkgZmlsdHJvIGRlbGxhIHNvcmdlbnRlIGRhdGkgaW4gYmFzZSBhbGwnaW5wdXQgdXRlbnRlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudCBJbnB1dCB1dGVudGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGZpbHRlclNvdXJjZShldmVudD86IENoYW5nZUV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaWdub3JlTmV4dFdyaXRlVmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5pZ25vcmVOZXh0V3JpdGVWYWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBRdWFuZG8gZmlsdHJvIGxhIHNvdXJjZSwgc2Ugbm9uIGRldm8gaWdub3JhcmUgbCdldmVudG8gZGV2byBjb211bnF1ZSBhc3NpY3VyYXJtaSBkaSBpbXBvc3RhcmUgaWwgdmFsb3JlIHNlbGV6aW9uYXRvIGEgbnVsbFxyXG4gICAgICAgIHN1cGVyLmNoYW5nZWQobnVsbCk7XHJcblxyXG4gICAgICAgIGlmICghZXZlbnQgJiYgdGhpcy5NaW5DaGFycyA9PSAwICYmICF0aGlzLlNlYXJjaEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuRmlsdGVyZWRCb3VuZFNvdXJjZSA9IHRoaXMuQm91bmRTb3VyY2U7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghZXZlbnQgfHwgZXZlbnQudmFsdWUubGVuZ3RoIDwgdGhpcy5NaW5DaGFycykge1xyXG4gICAgICAgICAgICB0aGlzLkZpbHRlcmVkQm91bmRTb3VyY2UgPSBbXTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLlNlYXJjaEZ1bmN0aW9uICYmICghdGhpcy5Tb3VyY2UgfHwgdGhpcy5Tb3VyY2UubGVuZ3RoID09IDApKVxyXG4gICAgICAgICAgICB0aHJvdyBcIkltcG9zc2liaWxlIGZpbHRyYXJlIGdsaSBlbGVtZW50aSBzZW56YSB1bmEgZnVuemlvbmUgZGkgcmljZXJjYSBjaGUgcmVzdGl0dWlzY2EgdW5hIGxpc3RhIGRpIHsgaWQ6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZyB9XCI7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlNlYXJjaEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGhyb3R0bGEoXCJmaWx0ZXJzb3VyY2VcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5TZWFyY2hGdW5jdGlvbihldmVudC52YWx1ZSwgZmFsc2UpLnN1YnNjcmliZSh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLlNvdXJjZSA9IHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlCaW5kU291cmNlRGlzcGxheSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEluIHF1ZXN0byBjYXNvIMOoIGdpw6AgZmlsdHJhdGEgZGFsbGEgU2VhcmNoRnVuY3Rpb25cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLkZpbHRlcmVkQm91bmRTb3VyY2UgPSB0aGlzLkJvdW5kU291cmNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRmlsdGVyZWRTb3VyY2VPbkRlc2NyaXB0aW9uU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSwgNDAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudGhyb3R0bGEoXCJmaWx0ZXJzb3VyY2VcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gSW4gcXVlc3RvIGNhc28gZGV2byBmaWx0cmFyZSBpbyBpbiBtZW1vcmlhXHJcbiAgICAgICAgICAgICAgICB0aGlzLkZpbHRlcmVkQm91bmRTb3VyY2UgPSB0aGlzLkJvdW5kU291cmNlLmZpbHRlcih0ID0+ICh0aGlzLkNhc2VTZW5zaXRpdmUgJiYgdC5kZXNjcmlwdGlvbi5pbmNsdWRlcyhldmVudC52YWx1ZSkpIHx8ICghdGhpcy5DYXNlU2Vuc2l0aXZlICYmIHQuZGVzY3JpcHRpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhldmVudC52YWx1ZS50b0xvd2VyQ2FzZSgpKSkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGaWx0ZXJlZFNvdXJjZU9uRGVzY3JpcHRpb25TZWxlY3Rpb24oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHJpdmF0ZSByZW1vdmVGaWx0ZXJlZFNvdXJjZU9uRGVzY3JpcHRpb25TZWxlY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuRmlsdGVyZWRCb3VuZFNvdXJjZS5sZW5ndGggPT0gMSAmJiAodGhpcy5GaWx0ZXJlZEJvdW5kU291cmNlWzBdLmRlc2NyaXB0aW9uID09PSB0aGlzLk1vZGVsKSkge1xyXG4gICAgICAgICAgICB0aGlzLk1vZGVsID0gdGhpcy5Cb3VuZFNvdXJjZVswXS5pZDtcclxuICAgICAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IHRoaXMuQm91bmRTb3VyY2VbMF0uZGVzY3JpcHRpb247XHJcbiAgICAgICAgICAgIHRoaXMuRmlsdGVyZWRCb3VuZFNvdXJjZSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogTWV0b2RvIHJpY2hpYW1hdG8gcXVhbmRvIHZpZW5lIG1vZGlmaWNhdG8gaWwgbW9kZWxsbyBkZWwgY2FtcG8gZGkgaW5wdXQgKi9cclxuICAgIGNoYW5nZWQoZXZlbnQ/OiBDaGFuZ2VFdmVudCkge1xyXG4gICAgICAgIHZhciB0b0VtaXQgPSB0aGlzLmdldE1vZGVsVG9FbWl0KCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlR5cGUgPT0gXCJhdXRvY29tcGxldGVcIilcclxuICAgICAgICAgICAgdGhpcy5pZ25vcmVOZXh0V3JpdGVWYWx1ZSA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLkVtaXRQZW5kaW5nQ2hhbmdlcylcclxuICAgICAgICAgICAgc3VwZXIuY2hhbmdlZCh0b0VtaXQsIGZhbHNlLCBmYWxzZSwgZXZlbnQ/LmludGVybmFsKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgZmluYWxpemVkKCkge1xyXG4gICAgICAgIHN1cGVyLmZpbmFsaXplZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBNZXRvZG8gcmljaGlhbWF0byBxdWFuZG8gdmllbmUgc2VsZXppb25hdG8gaWwgY2FtcG8gY29sIG1vdXNlICovXHJcbiAgICBmb2N1c2VkKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICBzdXBlci5mb2N1c2VkKGV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogRWZmZXR0dWEgZ2xpIGFnZ2l1c3RhbWVudGkgZGF0aSBkZWwgY2FzbyBlZCBlbWV0dGUgaWwgbW9kZWxsbyBjb3JyZXR0byAqL1xyXG4gICAgcHJpdmF0ZSBnZXRNb2RlbFRvRW1pdCgpIHtcclxuICAgICAgICB2YXIgdG9FbWl0ID0gdGhpcy5Nb2RlbCA/XHJcbiAgICAgICAgICAgICh0aGlzLlR5cGUgPT0gXCJ0aW1lXCIgfHwgdGhpcy51c2VKc0RhdGVzID9cclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZUFkYXB0ZXIuY2xvbmUodGhpcy5kYXRlc0V4dHMuZ2V0RGF0ZUNvbnZlcnRpb24odGhpcy5Nb2RlbCkpXHJcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5Nb2RlbCkpKVxyXG4gICAgICAgICAgICA6IG51bGw7XHJcblxyXG4gICAgICAgIGlmICgodGhpcy5UeXBlID09IFwiZmxvYXRcIiB8fCB0aGlzLlR5cGUgPT0gXCJudW1iZXJcIikgJiYgdG9FbWl0KSB7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuQWRqdXN0TnVtYmVyKVxyXG4gICAgICAgICAgICAgICAgdG9FbWl0ID0gdG9FbWl0LnJlcGxhY2UoXCIuXCIsIFwiXCIpLnJlcGxhY2UoXCIsXCIsIFwiLlwiKTtcclxuICAgICAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IHRvRW1pdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5UeXBlID09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgICAgICAgIHRvRW1pdCA9IHRvRW1pdCA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IHRoaXMubGMubG9jKHRvRW1pdCA/ICdZZXMnIDogJ05vJyk7O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLlR5cGUgPT0gXCJ0aW1lXCIpIHtcclxuICAgICAgICAgICAgdG9FbWl0ID0gdG9FbWl0LmZvcm1hdChcIkhIOm1tOnNzXCIpO1xyXG4gICAgICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gdG9FbWl0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICgodGhpcy5UeXBlID09IFwiZGF0ZVwiIHx8IHRoaXMuVHlwZSA9PSBcImRhdGV0aW1lXCIpICYmIHRoaXMudXNlSnNEYXRlcykge1xyXG4gICAgICAgICAgICB0b0VtaXQgPSB0b0VtaXQudG9EYXRlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuRXZhbHVhdGVkTW9kZWwgPSB0aGlzLmRhdGVzRXh0cy5nZXRGb3JtYXR0ZWQodGhpcy5Nb2RlbCwgdGhpcy5UeXBlID09IFwiZGF0ZVwiLCB0aGlzLlR5cGUgPT0gXCJkYXRldGltZVwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0b0VtaXQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIZWxwZXIgcGVyIGdlc3RpcmUgbGEgbW9kaWZpY2EgZGVsIGZpbGUgYXR0dWFsbWVudGUgYmluZGF0by4gT3Z2aWFtZW50ZSBmdW56aW9uYSBzb2xvIHF1YWxvcmEgaWwgKipUeXBlKiogZm9zc2UgKipmaWxlKipcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBjbGVhciBJbmRpY2Egc2UgYmlzb2duYSBzdnVvdGFyZSBsJ2lucHV0IG8gbWVubyBcclxuICAgICAqL1xyXG4gICAgZmlsZUNoYW5nZShjbGVhcjogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgbGV0IGZpbGVzOiBGaWxlW10gPSBbXTtcclxuICAgICAgICBsZXQgbW9kZWwgPSAoPEFwcEZpbGU+dGhpcy5Nb2RlbCk7XHJcbiAgICAgICAgbGV0IG5lOiBIVE1MSW5wdXRFbGVtZW50ID0gdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgICAgIGlmIChjbGVhcikge1xyXG4gICAgICAgICAgICBtb2RlbC5maWxlbmFtZSA9IFwiXCI7XHJcbiAgICAgICAgICAgIG5lLnZhbHVlID0gXCJcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmUuZmlsZXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKG5lLmZpbGVzLml0ZW0oaSkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG5lLmZpbGVzLmxlbmd0aCA9PSAxKVxyXG4gICAgICAgICAgICAgICAgbW9kZWwuZmlsZW5hbWUgPSBuZS5maWxlc1swXS5uYW1lO1xyXG4gICAgICAgICAgICBpZiAobmUuZmlsZXMubGVuZ3RoID4gMSlcclxuICAgICAgICAgICAgICAgIG1vZGVsLmZpbGVuYW1lID0gbmUuZmlsZXMubGVuZ3RoICsgXCIgXCIgKyB0aGlzLmxjLmxvYyhcIkZpbGVzIFNlbGVjdGVkXCIpO1xyXG4gICAgICAgICAgICBtb2RlbC5uYXRpdmVmaWxlcyA9IGZpbGVzO1xyXG4gICAgICAgICAgICBtb2RlbC5maWxlYjY0ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFBlcm1ldHRlIGRpIHNjYXJpY2FyZSBpbCBmaWxlIGNvbGxlZ2F0byBhbGwnZXZldG51YWxlIGZpbGUgaW5wdXQgcmFwcHJlc2VudGF0byBkYSBxdWVzdG8gY29tcG9uZW50ZSAqL1xyXG4gICAgZG93bmxvYWRBdHRhY2htZW50KCkge1xyXG4gICAgICAgIGxldCBtb2RlbCA9ICg8QXBwRmlsZT50aGlzLk1vZGVsKTtcclxuICAgICAgICB0aGlzLnV0aUV4dHMuc2F2ZUZpbGUobW9kZWwuZmlsZWI2NCwgbW9kZWwuZmlsZW5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBvbk5vdE51bGxWYWx1ZVNldCgpOiB2b2lkIHsgfVxyXG5cclxuICAgIC8vKioqKioqKioqKioqKioqKioqKiogRnVuemlvbmUgZGkgdGhyb3R0bGluZyBwZXIgbm9uIHNwYW1tYXJlIHJpY2hpZXN0ZSBpbiBjYXNvIGRpIGFuaW1hemlvbmkgYXR0aXZhdGVcclxuICAgIC8vVE9ETzogc3Bvc3RhcmxhIGluIHVuIG1ldG9kbyBkaSB1dGlsaXTDoCAoZXNmYWVuemEvZXh0ZW5zaW9ucylcclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwcml2YXRlIGV4ZWN1dGlvblRpbWVyczogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHJpdmF0ZSB0aHJvdHRsYShpZDogc3RyaW5nLCBmdW5jOiBGdW5jdGlvbiwgdGhyb3R0bGVUaW1lOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICAvL1NlIGhvIGxhIGZ1bnppb25lIGNoZSB2dW9sZSBlc2VndWlyZSByaXB1bGlzY28gcXVlbCB0aW1lb3V0XHJcbiAgICAgICAgaWYgKHRoaXMuZXhlY3V0aW9uVGltZXJzW2lkXSlcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZXhlY3V0aW9uVGltZXJzW2lkXSk7XHJcblxyXG4gICAgICAgIC8vUmljcmVvIGlsIHRpbWVvdXQgcGVyIGVzZWd1aXJlIHF1ZWxsYSBmdW56aW9uZSBkb3BvIHRocm90dGxlVGltZSBtaWxsaXNlY29uZGlcclxuICAgICAgICB0aGlzLmV4ZWN1dGlvblRpbWVyc1tpZF0gPSBzZXRUaW1lb3V0KCgpID0+IHsgZnVuYygpOyB0aGlzLmV4ZWN1dGlvblRpbWVyc1tpZF0gPSBudWxsOyB9LCB0aHJvdHRsZVRpbWUpO1xyXG4gICAgfVxyXG4gICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqXHJcbn0iLCI8IS0tIFVndWFsZSBpbiB0dXR0aSBpIGNvbXBvbmVudGkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG48bmctY29udGFpbmVyICpuZ0lmPVwiIUZvcm1MYXlvdXQgJiYgKCFEaXNwbGF5TW9kZSB8fCAoRGlzcGxheUxheW91dCAhPSAnaGlkZGVuJyAmJiBEaXNwbGF5Q29uZGl0aW9uKSlcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJEaXNwbGF5TW9kZSAmJiAhRGlzcGxheU1vZGVUZW1wbGF0ZVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJEaXNwbGF5TGF5b3V0ID09ICdmb3JtJ1wiPnt7IEV2YWx1YXRlZE1vZGVsIH19PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIkRpc3BsYXlMYXlvdXQgPT0gJ2lubGluZSdcIiBjbGFzcz1cImFwcC1pbmxpbmVcIj57eyBFdmFsdWF0ZWRNb2RlbCB9fTwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiRGlzcGxheU1vZGUgJiYgRGlzcGxheU1vZGVUZW1wbGF0ZVwiPjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJEaXNwbGF5TW9kZVRlbXBsYXRlLCBjb250ZXh0OiB7ICRpbXBsaWNpdDogRXZhbHVhdGVkTW9kZWwgfVwiPjwvbmctY29udGFpbmVyPjwvbmctY29udGFpbmVyPlxyXG4gICAgPGRpdiBbaGlkZGVuXT1cIkRpc3BsYXlNb2RlXCI+PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRyb2xUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPjwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcbjxkaXYgKm5nSWY9XCJGb3JtTGF5b3V0ICYmICghRGlzcGxheU1vZGUgfHwgKERpc3BsYXlMYXlvdXQgIT0gJ2hpZGRlbicgJiYgRGlzcGxheUNvbmRpdGlvbikpXCIgY2xhc3M9XCJ7e0Zvcm1Hcm91cENsYXNzICsgKExhc3QgPyAnIGFwcC1tYXJnaW4tYm90dG9tLTAgYXBwLW1hcmdpbi1yaWdodC0wICcgOiAnJykgKyAoRGlzcGxheUxheW91dCA9PSAnaW5saW5lJyAmJiBEaXNwbGF5TW9kZSA/ICgnIGFwcC1pbmxpbmUtYmxvY2sgJyArICghTGFzdCA/ICdhcHAtbWFyZ2luLXJpZ2h0LTEwJyA6ICcnKSkgOiAnIGZvcm0tZ3JvdXAgcm93Jyl9fVwiPlxyXG5cclxuICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC17eyhEaXNwbGF5TW9kZSAmJiBEaXNwbGF5TGF5b3V0ID09ICdpbmxpbmUnID8gJ25vbmUgYXBwLWJvbGQgYXBwLW1hcmdpbi1ib3R0b20tMCcgOiBMYWJlbENvbFdpZHRoKSArIChEaXNwbGF5TW9kZSA/ICcgYXBwLWJvbGQnIDogJyBtLXQtNScpIH19XCI+e3tMYWJlbH19e3tSZXF1aXJlZCAmJiAhRGlzcGxheU1vZGUgPyAnKicgOiAnJ319e3tMYWJlbCA/IFwiOlwiIDogXCJcIn19PC9sYWJlbD5cclxuICAgIDxzcGFuICpuZ0lmPVwiRGlzcGxheU1vZGUgJiYgRGlzcGxheUxheW91dCA9PSAnaW5saW5lJyAmJiBJbmxpbmVTZXBhcmF0b3IgIT0gJydcIj57e0lubGluZVNlcGFyYXRvcn19PC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC17e0Rpc3BsYXlNb2RlICYmIERpc3BsYXlMYXlvdXQgPT0gJ2lubGluZScgPyAnbm9uZSBhcHAtaW5saW5lLWJsb2NrJyA6IElucHV0Q29sV2lkdGh9fVwiPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiRGlzcGxheU1vZGUgJiYgIURpc3BsYXlNb2RlVGVtcGxhdGVcIj57eyBFdmFsdWF0ZWRNb2RlbCB9fTwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJEaXNwbGF5TW9kZSAmJiBEaXNwbGF5TW9kZVRlbXBsYXRlXCI+PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIkRpc3BsYXlNb2RlVGVtcGxhdGUsIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBFdmFsdWF0ZWRNb2RlbCB9XCI+PC9uZy1jb250YWluZXI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPGRpdiBbaGlkZGVuXT1cIkRpc3BsYXlNb2RlXCI+PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRyb2xUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2xlYXJmaXhcIj48L2Rpdj5cclxuPC9kaXY+XHJcbjwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XHJcblxyXG48bmctdGVtcGxhdGUgI2NvbnRyb2xUZW1wbGF0ZT5cclxuICAgIDxkaXYgKm5nSWY9XCIhVHlwZVwiIGNsYXNzPVwiYXBwLW1hcmdpbi10b3AtNVwiPlxyXG4gICAgICAgIDxlbT57e1R5cGVNaXNzaW5nTWVzc2FnZX19PC9lbT5cclxuICAgIDwvZGl2PlxyXG4gICBcclxuICAgICA8IS0tU2UgY3VycmVuY3ktLT5cclxuICAgICA8ZGl2ICpuZ0lmPVwiVHlwZSA9PSAnY3VycmVuY3knXCI+XHJcbiAgICAgICAgPHZhbC1jdXJyZW5jeSAjdmFsaWRhdGlvbkNvbnRyb2w9XCJuZ01vZGVsXCIgW0ZvY3VzU3ViamVjdF09XCJGb2N1c1N1YmplY3RcIiBbU2V0VmFsaWRhdGlvblN1YmplY3RdPVwiU2V0VmFsaWRhdGlvblN1YmplY3RcIiBbRmllbGRBcHBlYXJlbmNlXT1cIkZpZWxkQXBwZWFyZW5jZVwiIFtmb3JjZUludmFsaWRdPVwiRm9yY2VkRXJyb3JcIiBbRmxvYXRpbmdMYWJlbF09XCJGbG9hdGluZ0xhYmVsXCJcclxuICAgICAgICBbQ3VycmVuY3lPcHRpb25zXT1cInsgcHJlZml4OiAnJywgdGhvdXNhbmRzOiAnLicsIGRlY2ltYWw6ICcsJywgcHJlY2lzaW9uOiBQcmVjaXNpb24sIGFsaWduOiBBbGlnbm1lbnQgfVwiIFtub1ZhbGlkYXRlXT1cIiFWYWxpZGF0aW9uXCJcclxuICAgICAgICB0eXBlPVwidGV4dFwiIFtSZWFkb25seV09XCJSZWFkb25seVwiIFtzdWJtaXR0ZWRdPVwiRm9ybT8uc3VibWl0dGVkXCIgW3JlcXVpcmVkXT1cIlJlcXVpcmVkXCIgWyhuZ01vZGVsKV09XCJNb2RlbFwiIFtpZF09XCJHZW5lcmF0ZWROYW1lXCIgbmFtZT1cInt7R2VuZXJhdGVkTmFtZX19XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoKTtcIiAoaW5wdXRGb2N1cyk9XCJmb2N1c2VkKCRldmVudCk7XCIgKGlucHV0RmluYWxpemVkKT1cImZpbmFsaXplZCgpXCI+PC92YWwtY3VycmVuY3k+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS1TZSBkYXRhLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiVHlwZSA9PSAnZGF0ZSdcIj5cclxuICAgICAgICA8dmFsLWRhdGUgI3ZhbGlkYXRpb25Db250cm9sPVwibmdNb2RlbFwiIFtGb2N1c1N1YmplY3RdPVwiRm9jdXNTdWJqZWN0XCIgW1NldFZhbGlkYXRpb25TdWJqZWN0XT1cIlNldFZhbGlkYXRpb25TdWJqZWN0XCIgW0ZpZWxkQXBwZWFyZW5jZV09XCJGaWVsZEFwcGVhcmVuY2VcIiBbZm9yY2VJbnZhbGlkXT1cIkZvcmNlZEVycm9yXCIgW0Zsb2F0aW5nTGFiZWxdPVwiRmxvYXRpbmdMYWJlbFwiIFtub1ZhbGlkYXRlXT1cIiFWYWxpZGF0aW9uXCIgW1JlYWRvbmx5XT1cIlJlYWRvbmx5XCIgW3N1Ym1pdHRlZF09XCJGb3JtPy5zdWJtaXR0ZWRcIiBbcmVxdWlyZWRdPVwiUmVxdWlyZWRcIiBbKG5nTW9kZWwpXT1cIk1vZGVsXCIgW2lkXT1cIkdlbmVyYXRlZE5hbWVcIiBbdXNlSnNEYXRlc109XCJ1c2VKc0RhdGVzXCIgbmFtZT1cInt7R2VuZXJhdGVkTmFtZX19XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoJGV2ZW50KTtcIiAoaW5wdXRGb2N1cyk9XCJmb2N1c2VkKCRldmVudCk7XCIgKGlucHV0RmluYWxpemVkKT1cImZpbmFsaXplZCgpXCI+PC92YWwtZGF0ZT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLVNlIHN0cmluZ2EtLT5cclxuICAgIDxkaXYgKm5nSWY9XCJUeXBlID09ICdzdHJpbmcnXCI+XHJcbiAgICAgICAgPHZhbC1pbnB1dCAjdmFsaWRhdGlvbkNvbnRyb2w9XCJuZ01vZGVsXCIgW0ZvY3VzU3ViamVjdF09XCJGb2N1c1N1YmplY3RcIiBbU2V0VmFsaWRhdGlvblN1YmplY3RdPVwiU2V0VmFsaWRhdGlvblN1YmplY3RcIiBbRmllbGRBcHBlYXJlbmNlXT1cIkZpZWxkQXBwZWFyZW5jZVwiIFtmb3JjZUludmFsaWRdPVwiRm9yY2VkRXJyb3JcIiBbRmxvYXRpbmdMYWJlbF09XCJGbG9hdGluZ0xhYmVsXCIgW25vVmFsaWRhdGVdPVwiIVZhbGlkYXRpb25cIiBbUmVhZG9ubHldPVwiUmVhZG9ubHlcIiBbc3VibWl0dGVkXT1cIkZvcm0/LnN1Ym1pdHRlZFwiIHR5cGU9XCJ0ZXh0XCIgcGF0dGVybj1cInt7UGF0dGVybiB8fCAnJ319XCIgW3JlcXVpcmVkXT1cIlJlcXVpcmVkXCIgWyhuZ01vZGVsKV09XCJNb2RlbFwiIFtpZF09XCJHZW5lcmF0ZWROYW1lXCIgbmFtZT1cInt7R2VuZXJhdGVkTmFtZX19XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoJGV2ZW50KTtcIiAoaW5wdXRGb2N1cyk9XCJmb2N1c2VkKCRldmVudCk7XCIgKGlucHV0RmluYWxpemVkKT1cImZpbmFsaXplZCgpXCI+PC92YWwtaW5wdXQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS1TZSBudW1lcm8tLT5cclxuICAgIDxkaXYgKm5nSWY9XCJUeXBlID09ICdmbG9hdCcgfHwgVHlwZSA9PSAnbnVtYmVyJ1wiPlxyXG4gICAgICAgIDx2YWwtaW5wdXQgI3ZhbGlkYXRpb25Db250cm9sPVwibmdNb2RlbFwiIFtGb2N1c1N1YmplY3RdPVwiRm9jdXNTdWJqZWN0XCIgW1NldFZhbGlkYXRpb25TdWJqZWN0XT1cIlNldFZhbGlkYXRpb25TdWJqZWN0XCIgW0ZpZWxkQXBwZWFyZW5jZV09XCJGaWVsZEFwcGVhcmVuY2VcIiBbZm9yY2VJbnZhbGlkXT1cIkZvcmNlZEVycm9yXCIgW0Zsb2F0aW5nTGFiZWxdPVwiRmxvYXRpbmdMYWJlbFwiIFtub1ZhbGlkYXRlXT1cIiFWYWxpZGF0aW9uXCIgW1JlYWRvbmx5XT1cIlJlYWRvbmx5XCIgW3N1Ym1pdHRlZF09XCJGb3JtPy5zdWJtaXR0ZWRcIiB0eXBlPVwidGV4dFwiIHBhdHRlcm49XCJ7e1BhdHRlcm4gfHwgRmxvYXRQYXR0ZXJufX1cIiBbcmVxdWlyZWRdPVwiUmVxdWlyZWRcIiBbKG5nTW9kZWwpXT1cIk1vZGVsXCIgW2lkXT1cIkdlbmVyYXRlZE5hbWVcIiBuYW1lPVwie3tHZW5lcmF0ZWROYW1lfX1cIiBhdXRvY29tcGxldGU9XCJvZmZcIiAoaW5wdXRDaGFuZ2UpPVwiY2hhbmdlZCgkZXZlbnQpO1wiIChpbnB1dEZvY3VzKT1cImZvY3VzZWQoJGV2ZW50KTtcIiAoaW5wdXRGaW5hbGl6ZWQpPVwiZmluYWxpemVkKClcIj48L3ZhbC1pbnB1dD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLVNlIG51bWVybyBpbnRlcm8tLT5cclxuICAgIDxkaXYgKm5nSWY9XCJUeXBlID09ICdpbnQnXCI+XHJcbiAgICAgICAgPHZhbC1pbnB1dCAjdmFsaWRhdGlvbkNvbnRyb2w9XCJuZ01vZGVsXCIgW0ZvY3VzU3ViamVjdF09XCJGb2N1c1N1YmplY3RcIiBbU2V0VmFsaWRhdGlvblN1YmplY3RdPVwiU2V0VmFsaWRhdGlvblN1YmplY3RcIiBbRmllbGRBcHBlYXJlbmNlXT1cIkZpZWxkQXBwZWFyZW5jZVwiIFtmb3JjZUludmFsaWRdPVwiRm9yY2VkRXJyb3JcIiBbRmxvYXRpbmdMYWJlbF09XCJGbG9hdGluZ0xhYmVsXCIgW25vVmFsaWRhdGVdPVwiIVZhbGlkYXRpb25cIiBbUmVhZG9ubHldPVwiUmVhZG9ubHlcIiBbc3VibWl0dGVkXT1cIkZvcm0/LnN1Ym1pdHRlZFwiIHR5cGU9XCJ0ZXh0XCIgcGF0dGVybj1cInt7UGF0dGVybiB8fCBJbnRQYXR0ZXJufX1cIiBbcmVxdWlyZWRdPVwiUmVxdWlyZWRcIiBbKG5nTW9kZWwpXT1cIk1vZGVsXCIgW2lkXT1cIkdlbmVyYXRlZE5hbWVcIiBuYW1lPVwie3tHZW5lcmF0ZWROYW1lfX1cIiBhdXRvY29tcGxldGU9XCJvZmZcIiAoaW5wdXRDaGFuZ2UpPVwiY2hhbmdlZCgkZXZlbnQpO1wiIChpbnB1dEZvY3VzKT1cImZvY3VzZWQoJGV2ZW50KTtcIiAoaW5wdXRGaW5hbGl6ZWQpPVwiZmluYWxpemVkKClcIj48L3ZhbC1pbnB1dD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLVNlIGJvb2xlYW4tLT5cclxuICAgIDxkaXYgY2xhc3M9XCJtLXQtNVwiICpuZ0lmPVwiVHlwZSA9PSAnYm9vbGVhbidcIj5cclxuICAgICAgICA8aW5wdXQgI3ZhbGlkYXRpb25Db250cm9sPVwibmdNb2RlbFwiIFtyZWFkb25seV09XCJSZWFkb25seVwiIHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiYXBwLXBvaW50ZXJcIiBbKG5nTW9kZWwpXT1cIk1vZGVsXCIgaWQ9XCJ7e0dlbmVyYXRlZE5hbWV9fVwiIG5hbWU9XCJ7e0dlbmVyYXRlZE5hbWV9fVwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZWQoKTsgZmluYWxpemVkKCk7XCIgKGNsaWNrKT1cImZvY3VzZWQoJGV2ZW50KTtcIiAvPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tU2UgZW51bS0tPlxyXG4gICAgPGRpdiAqbmdJZj1cIlR5cGUgPT0gJ2VudW0nXCI+XHJcbiAgICAgICAgPHZhbC1zZWxlY3QgI3ZhbGlkYXRpb25Db250cm9sPVwibmdNb2RlbFwiIFtGb2N1c1N1YmplY3RdPVwiRm9jdXNTdWJqZWN0XCIgW1NldFZhbGlkYXRpb25TdWJqZWN0XT1cIlNldFZhbGlkYXRpb25TdWJqZWN0XCIgW0ZpZWxkQXBwZWFyZW5jZV09XCJGaWVsZEFwcGVhcmVuY2VcIiBbZm9yY2VJbnZhbGlkXT1cIkZvcmNlZEVycm9yXCIgW25vVmFsaWRhdGVdPVwiIVZhbGlkYXRpb25cIiBbUmVhZG9ubHldPVwiUmVhZG9ubHlcIiBbc3VibWl0dGVkXT1cIkZvcm0/LnN1Ym1pdHRlZFwiIFtwbGFjZUhvbGRlclZhbHVlXT1cIicnXCIgW3BsYWNlaG9sZGVyXT1cIlJlcXVpcmVkID8gKCdTZWxlY3QnIHwgbG9jYWxpemUgOiBsYykgKyAnLi4uJyA6IFBsYWNlaG9sZGVyXCIgW3JlcXVpcmVkXT1cIlJlcXVpcmVkXCIgWyhuZ01vZGVsKV09XCJNb2RlbFwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCRldmVudCk7XCIgKGlucHV0Rm9jdXMpPVwiZm9jdXNlZCgkZXZlbnQpO1wiIChpbnB1dEZpbmFsaXplZCk9XCJmaW5hbGl6ZWQoKVwiIFtpZF09XCJHZW5lcmF0ZWROYW1lXCIgbmFtZT1cInt7R2VuZXJhdGVkTmFtZX19XCI+XHJcbiAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHZhbCBvZiBCb3VuZFNvdXJjZVwiIFt2YWx1ZV09XCJ2YWwuaWRcIj57e3ZhbC5kZXNjcmlwdGlvbn19PC9vcHRpb24+XHJcbiAgICAgICAgPC92YWwtc2VsZWN0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tU2UgYXV0b2NvbXBsZXRlLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiVHlwZSA9PSAnYXV0b2NvbXBsZXRlJ1wiPlxyXG4gICAgICAgIDx2YWwtYXV0b2NvbXBsZXRlICN2YWxpZGF0aW9uQ29udHJvbD1cIm5nTW9kZWxcIiBbRm9jdXNTdWJqZWN0XT1cIkZvY3VzU3ViamVjdFwiIFtTZXRWYWxpZGF0aW9uU3ViamVjdF09XCJTZXRWYWxpZGF0aW9uU3ViamVjdFwiIFtGaWVsZEFwcGVhcmVuY2VdPVwiRmllbGRBcHBlYXJlbmNlXCIgW2ZvcmNlSW52YWxpZF09XCJGb3JjZWRFcnJvclwiIFtub1ZhbGlkYXRlXT1cIiFWYWxpZGF0aW9uXCIgW1JlYWRvbmx5XT1cIlJlYWRvbmx5XCIgW3N1Ym1pdHRlZF09XCJGb3JtPy5zdWJtaXR0ZWRcIiBbcmVxdWlyZWRdPVwiUmVxdWlyZWRcIiBbcGxhY2Vob2xkZXJdPVwiUmVxdWlyZWQgPyAoJ1NlbGVjdCcgfCBsb2NhbGl6ZSA6IGxjKSArICcuLi4nIDogUGxhY2Vob2xkZXJcIiBbKG5nTW9kZWwpXT1cIk1vZGVsXCIgW2lkXT1cIkdlbmVyYXRlZE5hbWVcIiBuYW1lPVwie3tHZW5lcmF0ZWROYW1lfX1cIiBbRmlsdGVyZWRTb3VyY2VdPVwiRmlsdGVyZWRCb3VuZFNvdXJjZVwiIChpbnB1dENoYW5nZSk9XCJmaWx0ZXJTb3VyY2UoJGV2ZW50KTsgY2hhbmdlZCgkZXZlbnQpO1wiIChpbnB1dEZvY3VzKT1cImZvY3VzZWQoJGV2ZW50KTtcIiAoaW5wdXRGaW5hbGl6ZWQpPVwiZmluYWxpemVkKClcIj48L3ZhbC1hdXRvY29tcGxldGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS1TZSBkYXRlIHRpbWUtLT5cclxuICAgIDxkaXYgKm5nSWY9XCJUeXBlID09ICdkYXRldGltZSdcIj5cclxuICAgICAgICA8dmFsLWRhdGV0aW1lICN2YWxpZGF0aW9uQ29udHJvbD1cIm5nTW9kZWxcIiBbRm9jdXNTdWJqZWN0XT1cIkZvY3VzU3ViamVjdFwiIFtTZXRWYWxpZGF0aW9uU3ViamVjdF09XCJTZXRWYWxpZGF0aW9uU3ViamVjdFwiIFtGaWVsZEFwcGVhcmVuY2VdPVwiRmllbGRBcHBlYXJlbmNlXCIgW2ZvcmNlSW52YWxpZF09XCJGb3JjZWRFcnJvclwiIFtGbG9hdGluZ0xhYmVsXT1cIkZsb2F0aW5nTGFiZWxcIiBbbm9WYWxpZGF0ZV09XCIhVmFsaWRhdGlvblwiIFtSZWFkb25seV09XCJSZWFkb25seVwiIFtzdWJtaXR0ZWRdPVwiRm9ybT8uc3VibWl0dGVkXCIgW3JlcXVpcmVkXT1cIlJlcXVpcmVkXCIgW3VzZUpzRGF0ZXNdPVwidXNlSnNEYXRlc1wiIFsobmdNb2RlbCldPVwiTW9kZWxcIiBbaWRdPVwiR2VuZXJhdGVkTmFtZVwiIG5hbWU9XCJ7e0dlbmVyYXRlZE5hbWV9fVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCRldmVudCk7XCIgKGlucHV0Rm9jdXMpPVwiZm9jdXNlZCgkZXZlbnQpO1wiIChpbnB1dEZpbmFsaXplZCk9XCJmaW5hbGl6ZWQoKVwiPjwvdmFsLWRhdGV0aW1lPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tU2UgdGltZS0tPlxyXG4gICAgPGRpdiAqbmdJZj1cIlR5cGUgPT0gJ3RpbWUnXCI+XHJcbiAgICAgICAgPG5neC1tYXQtdGltZXBpY2tlciBuYW1lPVwidmFsLXRpbWVcIiAjZWxlbWVudFJlZiAjYmFzZUlucHV0PVwibmdNb2RlbFwiIFsobmdNb2RlbCldPVwiTW9kZWxcIiBbZGlzYWJsZWRdPVwiUmVhZG9ubHlcIlxyXG4gICAgICAgIFtzaG93U3Bpbm5lcnNdPVwiZmFsc2VcIiBbc3RlcEhvdXJdPVwiMlwiIFtzdGVwTWludXRlXT1cIjVcIiBbc3RlcFNlY29uZF09XCIzMFwiXHJcbiAgICAgICAgW3Nob3dTZWNvbmRzXT1cInRydWVcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VkKClcIiAjdmFsaWRhdGlvbkNvbnRyb2w9XCJuZ01vZGVsXCI+XHJcbiAgICAgICAgPC9uZ3gtbWF0LXRpbWVwaWNrZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS1TZSBmaWxlLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiVHlwZSA9PSAnZmlsZSdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgZmlsZS11cGxvYWRcIj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgKGNoYW5nZSk9XCJmaWxlQ2hhbmdlKClcIiAjZmlsZUlucHV0IGlkPVwie3tHZW5lcmF0ZWROYW1lfX1cIiBjbGFzcz1cImZpbGUtdXBsb2FkLWJ0biBhcHAtcG9pbnRlclwiIFttdWx0aXBsZV09XCJudWxsXCIvPlxyXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbY2xhc3MuZnJtLXBhZGRpbmctbGVmdC0yMl09XCJBbGxvd0Rvd25sb2FkICYmIE1vZGVsRmlsZS5maWxlbmFtZSAmJiBNb2RlbEZpbGUuZmlsZWI2NFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGNoZWNraW5nLWZpZWxkXCIgcGxhY2Vob2xkZXI9XCJ7eydTZWxlY3QgYSBmaWxlJyB8IGxvY2FsaXplIDogbGN9fS4uLlwiIFsobmdNb2RlbCldPVwiTW9kZWxGaWxlLmZpbGVuYW1lXCIgbmFtZT1cImRzZmlsZVwiICN2YWxpZGF0aW9uQ29udHJvbD1cIm5nTW9kZWxcIiBbcmVxdWlyZWRdPVwiUmVxdWlyZWRcIi8+XHJcbiAgICBcclxuICAgICAgICAgICAgPGEgY2xhc3M9XCJmYSBmYS1kb3dubG9hZCBhcHAtcG9pbnRlciBhcHAtaW5wdXQtaWNvblwiICpuZ0lmPVwiQWxsb3dEb3dubG9hZCAmJiBNb2RlbEZpbGUuZmlsZW5hbWUgJiYgTW9kZWxGaWxlLmZpbGViNjRcIiAoY2xpY2spPVwiZG93bmxvYWRBdHRhY2htZW50KClcIj48L2E+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdGltZXMgZGVsZXRlLWZpbGVcIiAoY2xpY2spPVwiZmlsZUNoYW5nZSh0cnVlKVwiICpuZ0lmPVwiTW9kZWxGaWxlLmZpbGVuYW1lXCI+PC9pPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0blwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tZmlsZS11cGxvYWRcIiB0eXBlPVwiYnV0dG9uXCI+PGkgY2xhc3M9XCJmYSBmYS11cGxvYWRcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
388
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1hZGFwdGl2ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3Jtcy1hbmQtdmFsaWRhdGlvbnMvc3JjL2xpYi9mb3Jtcy9mb3JtLWFkYXB0aXZlL2Zvcm0tYWRhcHRpdmUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybXMtYW5kLXZhbGlkYXRpb25zL3NyYy9saWIvZm9ybXMvZm9ybS1hZGFwdGl2ZS9mb3JtLWFkYXB0aXZlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzSixPQUFPLEVBQXdCLGFBQWEsRUFBYSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxHLHNCQUFzQjtBQUN0QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUs5RCxlQUFlO0FBQ2YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXpFLFVBQVU7QUFDVixPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBYy9DLDJKQUEySjtBQVEzSixNQUFNLE9BQU8scUJBQXNCLFNBQVEsZUFBZTtJQXdEdEQsMkJBQTJCO0lBQzNCLFlBQVksR0FBc0IsRUFBVSxPQUF1QixFQUFVLFNBQXNCLEVBQVUsV0FBbUMsRUFBUyxFQUF1QixFQUFzQixTQUFvQixFQUFxQyxXQUF1QixFQUFFLEVBQXdCLEVBQWMsVUFBNEIsRUFBcUMsYUFBcUIsRUFBc0MsY0FBdUI7UUFDN2MsS0FBSyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRDFDLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBYTtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUF3QjtRQUFTLE9BQUUsR0FBRixFQUFFLENBQXFCO1FBOUNoTCx5RkFBeUY7UUFDaEYsaUJBQVksR0FBWSxJQUFJLENBQUM7UUFLdEMsOEdBQThHO1FBQ3JHLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBS3ZDLHlHQUF5RztRQUNoRyxjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBRS9CLHVDQUF1QztRQUM5QixjQUFTLEdBQXFCLE9BQU8sQ0FBQztRQUUvQyw0REFBNEQ7UUFDbkQsbUJBQWMsR0FBeUYsSUFBSSxDQUFDO1FBRXJILGlEQUFpRDtRQUN4QyxhQUFRLEdBQVcsQ0FBQyxDQUFDO1FBRTlCLGtJQUFrSTtRQUN6SCxrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUV4Qyw0R0FBNEc7UUFDbkcsWUFBTyxHQUF1QyxFQUFFLENBQUM7UUFFMUQscUZBQXFGO1FBQzdFLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBRXJDOzs7V0FHRztRQUNLLHlCQUFvQixHQUFZLEtBQUssQ0FBQztRQUU5QywyS0FBMks7UUFDcEssd0JBQW1CLEdBQTBDLEVBQUUsQ0FBQztRQUV2RSx1R0FBdUc7UUFDaEcsZUFBVSxHQUFZLElBQUksQ0FBQztRQVUzQixlQUFVLEdBQUcsYUFBYSxDQUFDO1FBQzNCLGlCQUFZLEdBQUcsc0JBQXNCLENBQUM7UUF3UzdDLHVHQUF1RztRQUN2RywrREFBK0Q7UUFDL0QsY0FBYztRQUNOLG9CQUFlLEdBQTZCLEVBQUUsQ0FBQztRQWhUbkQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7SUFDbkMsQ0FBQztJQUtEOzs7OztPQUtHO0lBQ0ssR0FBRyxDQUFJLEtBQVEsRUFBRSxLQUFRO1FBQzdCLE9BQU8sS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUMvRCxDQUFDO0lBRUQsUUFBUTtRQUVKLGtDQUFrQztRQUNsQyxJQUFHLElBQUksQ0FBQyxPQUFPLEVBQUM7WUFDWixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQUEsQ0FBQztZQUNwRSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQy9FLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNsRixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ25FLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbkUsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUMvRSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzVFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDaEU7UUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDaEIsb0NBQW9DO1lBQ3BDLElBQUksVUFBVSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUV4RSxJQUFJLEVBQUUsR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDaEMsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNmLEtBQUssS0FBSztvQkFDTixFQUFFLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQztvQkFDN0MsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDcEIsTUFBTTtnQkFDVixLQUFLLE9BQU8sQ0FBQztnQkFDYixLQUFLLFFBQVE7b0JBQ1QsRUFBRSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUM7b0JBQy9DLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3BCLE1BQU07Z0JBQ1YsS0FBSyxRQUFRO29CQUNULElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTt3QkFDZCxFQUFFLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7d0JBQzFCLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7cUJBQ3ZCO29CQUNELE1BQU07YUFDYjtZQUNLLElBQUksQ0FBQyxTQUFVLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1NBQ25EO1FBRUQsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxjQUFjO0lBQ1AsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFzQjtRQUMzQyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWhDLElBQUksU0FBUyxFQUFFO1lBQ1gsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFFNUIsOEZBQThGO1lBQzlGLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxjQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWM7Z0JBQ2pHLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDOztnQkFFNUMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztZQUVsQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQzNCO1FBRUQsSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDLEtBQUs7WUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELGNBQWM7SUFDZCxVQUFVLENBQUMsR0FBUTtRQUNmLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBRXpCLElBQUksQ0FBQyxjQUFjLEdBQUcsR0FBRyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUU1QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNaLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDO1NBQzdCO1FBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLFVBQVUsRUFBRTtZQUNoRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQ3RILElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxNQUFNO2dCQUNuQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDeEUsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLFVBQVU7Z0JBQ3ZCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztTQUMzRTthQUNJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEdBQUcsRUFBRTtZQUM3RCxHQUFHLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxHQUFHLENBQUM7U0FDN0I7UUFDRCxtQ0FBbUM7YUFDOUIsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLFNBQVMsRUFBRTtZQUM3QixHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDbEUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDeEQ7YUFDSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksTUFBTSxFQUFFO1lBQzFCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqRSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkcsSUFBSSxDQUFDLGNBQWMsR0FBRyxHQUFHLEtBQUssSUFBSSxJQUFJLElBQUksT0FBTyxJQUFJLElBQUksSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7U0FDbEY7YUFDSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksTUFBTSxFQUFFO1lBQzFCLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7U0FDakQ7YUFDSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksY0FBYyxFQUFFO1lBQ2xDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDckIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUN6QyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztvQkFDaEIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7b0JBQzVCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ25ELENBQUMsQ0FBQyxDQUFDO2dCQUNILE9BQU87YUFDVjs7Z0JBRUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMvQjtRQUVELElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQy9DLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLFdBQVcsQ0FBQztRQUUvRSxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXRCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNsQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQzNCO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxhQUFhLENBQUMsS0FBVTtRQUM1QixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDM0MsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksWUFBWSxDQUFDLEtBQW1CO1FBQ25DLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQzNCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7WUFDbEMsT0FBTztTQUNWO1FBRUQsNkhBQTZIO1FBQzdILEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFcEIsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDdEQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDNUMsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQzlDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUM7WUFDOUIsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO1lBQ2pFLE1BQU0sa0lBQWtJLENBQUM7UUFFN0ksSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRTtnQkFDL0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDbEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7b0JBQ2hCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO29CQUM1QixxREFBcUQ7b0JBQ3JELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO29CQUM1QyxJQUFJLENBQUMsMENBQTBDLEVBQUUsQ0FBQztvQkFDbEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDNUIsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDWDthQUNJO1lBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFO2dCQUMvQiw2Q0FBNkM7Z0JBQzdDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqTixJQUFJLENBQUMsMENBQTBDLEVBQUUsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM1QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDWDtJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ04sMENBQTBDO1FBQzlDLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNsRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7WUFDdEQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztTQUNqQztJQUNMLENBQUM7SUFFRCw4RUFBOEU7SUFDOUUsT0FBTyxDQUFDLEtBQW1CO1FBQ3ZCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUVuQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksY0FBYztZQUMzQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1FBRXJDLElBQUksSUFBSSxDQUFDLGtCQUFrQjtZQUN2QixLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsY0FBYztJQUNkLFNBQVM7UUFDTCxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELG9FQUFvRTtJQUNwRSxPQUFPLENBQUMsS0FBVTtRQUNkLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELDZFQUE2RTtJQUNyRSxjQUFjO1FBQ2xCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQixDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3BFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDN0MsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUVYLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLE1BQU0sRUFBRTtZQUMzRCxJQUFHLElBQUksQ0FBQyxZQUFZO2dCQUNoQixNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN2RCxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQztTQUNoQzthQUNJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxTQUFTLEVBQUU7WUFDN0IsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDL0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFBQSxDQUFDO1NBQzdEO2FBQ0ksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLE1BQU0sRUFBRTtZQUMxQixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQztTQUNoQzthQUNJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDMUUsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxVQUFVLENBQUMsQ0FBQztTQUMvRztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsVUFBVSxDQUFDLFFBQWlCLEtBQUs7UUFDN0IsSUFBSSxLQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksS0FBSyxHQUFhLElBQUksQ0FBQyxLQUFNLENBQUM7UUFDbEMsSUFBSSxFQUFFLEdBQXFCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO1FBRXRELElBQUksS0FBSyxFQUFFO1lBQ1AsS0FBSyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDcEIsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7U0FDakI7YUFDSTtZQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7Z0JBQ3BDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVqQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUM7Z0JBQ3BCLEtBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDdEMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDO2dCQUNuQixLQUFLLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzNFLEtBQUssQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQzFCLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1NBQ3hCO1FBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCwwR0FBMEc7SUFDMUcsa0JBQWtCO1FBQ2QsSUFBSSxLQUFLLEdBQWEsSUFBSSxDQUFDLEtBQU0sQ0FBQztRQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsY0FBYztJQUNkLGlCQUFpQixLQUFXLENBQUM7SUFNN0IsY0FBYztJQUNOLFFBQVEsQ0FBQyxFQUFVLEVBQUUsSUFBYyxFQUFFLFlBQW9CO1FBQzdELDZEQUE2RDtRQUM3RCxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1lBQ3hCLFlBQVksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFM0MsK0VBQStFO1FBQy9FLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDNUcsQ0FBQzs7a0hBclhRLHFCQUFxQixxT0F5RGtOLGFBQWEsaUhBQW1ILGFBQWEsNkJBQTZDLGNBQWM7c0dBekQvYSxxQkFBcUIsMFZBTG5CLENBQUMsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLHdCQUF3QixFQUFFLENBQUMsNEtDakNyRiw4eVRBeUZjOzJGRG5ERCxxQkFBcUI7a0JBUGpDLFNBQVM7K0JBQ0ksZUFBZSxhQUNkLENBQUMsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLHdCQUF3QixFQUFFLENBQUMsbUJBR2hFLHVCQUF1QixDQUFDLE1BQU07OzBCQTJEb0ksUUFBUTs7MEJBQUksSUFBSTs7MEJBQTBCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsYUFBYTs7MEJBQXNELFFBQVE7OzBCQUFrQyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGFBQWE7OzBCQUEwQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGNBQWM7NENBdEQvYSxJQUFJO3NCQUFaLEtBQUs7Z0JBR0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUdHLE9BQU87c0JBQWYsS0FBSztnQkFHRyxZQUFZO3NCQUFwQixLQUFLO2dCQUdxQyxPQUFPO3NCQUFqRCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBR2hDLGFBQWE7c0JBQXJCLEtBQUs7Z0JBTUcsU0FBUztzQkFBakIsS0FBSztnQkFHRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBR0csUUFBUTtzQkFBaEIsS0FBSztnQkFHRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdHLE9BQU87c0JBQWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdCwgSW5wdXQsIE9wdGlvbmFsLCBTZWxmLCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMSURBVE9SUywgTmdDb250cm9sLCBQYXR0ZXJuVmFsaWRhdG9yIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcblxyXG4vLyBFUyAvIENvbmZpZ3VyYXppb25pXHJcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2xvY2FsaXphdGlvbnNcIjtcclxuaW1wb3J0IHsgRGF0ZVNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9leHRlbnNpb25zXCI7XHJcbmltcG9ydCB7IEFjY2Vzc0NvbnRyb2xTZXJ2aWNlLCBDb21wb25lbnRDb250ZXh0IH0gZnJvbSAnQGVzZmFlbnphL2FjY2Vzcy1jb250cm9sJztcclxuaW1wb3J0IHsgTmd4TWF0RGF0ZUFkYXB0ZXIgfSBmcm9tIFwiQGFuZ3VsYXItbWF0ZXJpYWwtY29tcG9uZW50cy9kYXRldGltZS1waWNrZXJcIjtcclxuXHJcbi8vIEFwcGxpY2F6aW9uZVxyXG5pbXBvcnQgeyBCYXNlRm9ybUNvbnRyb2wgfSBmcm9tIFwiLi4vYmFzZS1mb3JtLWNvbnRyb2xcIjtcclxuaW1wb3J0IHsgRm9ybUFkYXB0aXZlQ29tcG9uZW50TG9jIH0gZnJvbSBcIi4vZm9ybS1hZGFwdGl2ZS5jb21wb25lbnQubG9jXCI7XHJcblxyXG4vLyBNb2RlbGxpXHJcbmltcG9ydCB7IEFDT19DVVNUT01LRVksIEZBVl9ERUJVR19NT0RFIH0gZnJvbSAnLi4vLi4vdG9rZW5zJztcclxuaW1wb3J0IHsgQXBwRmlsZSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvQXBwRmlsZVwiO1xyXG5cclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IENoYW5nZUV2ZW50IH0gZnJvbSBcIi4uLy4uL21vZGVscy9DaGFuZ2VFdmVudFwiO1xyXG5cclxuLyoqXHJcbiAqIERpY2hpYXJhemlvbmUgZGVsbGEgdmFyaWFiaWxlIGdsb2JhbGUgZGF5anMuIEwnb25lcmUgZGkgXCJjcmVhcmxhXCIgw6ggYWZmaWRhdG8gYWxsJ2FwcGxpY2F6aW9uZSBjaGUgdXRpbGl6emEgcXVlc3RhIGxpYnJlcmlhLCBcclxuICogY2hlIGRvdnLDoCBpbXBvcnRhcmUgbG8gc2NyaXB0IGdsb2JhbGUgZGkgZGF5anMgbmVsbGEgQ0xJXHJcbiAqL1xyXG5kZWNsYXJlIHZhciBkYXlqczogYW55O1xyXG5cclxuLyoqIE9wemlvbmkgZ2VuZXJpY2hlIGRpc3BvbmliaWxpICovXHJcbmV4cG9ydCB0eXBlIEF2YWlsYWJsZU9wdGlvbnMgPSAnSnNEYXRlcycgfCAnQ2FzZVNlbnNpdGl2ZScgfCAnTWluQ2hhcnMnIHwgJ1NlYXJjaEZ1bmN0aW9uJyB8ICdBbGlnbm1lbnQnIHwgJ1ByZWNpc2lvbicgfCAnQWxsb3dEb3dubG9hZCcgfCAnQWRqdXN0TnVtYmVyJyB8ICdQYXR0ZXJuJztcclxuXHJcbi8qKiBDb21wb25lbnRlIGluIGdyYWRvIGRpIGFzc3VtZXJlIGxhIGZvcm1hIGRpIHVuIHF1YWxzaWFzaSBhbHRybyBjb21wb25lbnRlIGZvcm0gaW4gYmFzZSBhbCB0aXBvIHNwZWNpZmljYXRvLiBVdGlsZSAgcGVyIGxhIGNyZWF6aW9uZSBkaSBmb3JtIGRpbmFtaWNpICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6IFwiZm9ybS1hZGFwdGl2ZVwiLFxyXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBMb2NhbGl6YXRpb25TZXJ2aWNlLCB1c2VDbGFzczogRm9ybUFkYXB0aXZlQ29tcG9uZW50TG9jIH1dLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwiZm9ybS1hZGFwdGl2ZS5jb21wb25lbnQuaHRtbFwiLFxyXG4gICAgc3R5bGVVcmxzOiBbXCIuLi9mb3JtLWZpbGUvZm9ybS1maWxlLmNvbXBvbmVudC5jc3NcIl0sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRm9ybUFkYXB0aXZlQ29tcG9uZW50IGV4dGVuZHMgQmFzZUZvcm1Db250cm9sIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG5cclxuICAgIC8qKiBUaXBvbG9naWEgY2hlIGRlY2lkZSBjaGUgY29tcG9uZW50ZSBtb3N0cmFyZSAqL1xyXG4gICAgQElucHV0KCkgVHlwZTogJ3N0cmluZycgfCAnZmxvYXQnIHwgJ2RhdGUnIHwgJ251bWJlcicgfCAnaW50JyB8ICdib29sZWFuJyB8ICdlbnVtJyB8ICdhdXRvY29tcGxldGUnIHwgJ2RhdGV0aW1lJyB8ICd0aW1lJyB8ICdmaWxlJyB8ICdjdXJyZW5jeSc7XHJcblxyXG4gICAgLyoqIE1lc3NhZ2dpbyBwZXIgcXVhbmRvIHNpIGJpbmRhIHVuIGZvcm0tYWRhcHRpdmUgc2VuemEgdGlwbyAqL1xyXG4gICAgQElucHV0KCkgVHlwZU1pc3NpbmdNZXNzYWdlOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqIFBhdHRlcm4gZGkgdmFsaWRhemlvbmUgKi9cclxuICAgIEBJbnB1dCgpIFBhdHRlcm46IHN0cmluZztcclxuXHJcbiAgICAvKiogSW5kaWNhIGRpIGFnZ2l1c3RhcmUgaW4gdXNjaXRhIGkgbnVtYmVyIGluIG1vZG8gY2hlIHNpYW5vIHBhcnNhYmlsaSBkYWwgamF2YXNjcmlwdCAqL1xyXG4gICAgQElucHV0KCkgQWRqdXN0TnVtYmVyOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAvKiogUmlmZXJpbWVudG8gYWxsJ2VsZW1lbnRvIGlucHV0IGRpIHRpcG8gZmlsZSBxdWFsb3JhIGlsICoqVHlwZSoqIGRpIHF1ZXN0byBjb21wb25lbnRlIGZvc3NlICoqZmlsZSoqICovXHJcbiAgICBAVmlld0NoaWxkKFwiZmlsZUlucHV0XCIsIHsgc3RhdGljOiBmYWxzZSB9KSBpbnB1dEVsOiBFbGVtZW50UmVmO1xyXG5cclxuICAgIC8qKiBQZXJtZXR0ZSBkaSBzY2FyaWNhcmUgbCdldmVudHVhbGUgZmlsZSBwcmVzZW50ZSBxdWFsb3JhIGlsICoqVHlwZSoqIGRpIHF1ZXN0byBjb21wb25lbnRlIGZvc3NlICoqZmlsZSoqICovXHJcbiAgICBASW5wdXQoKSBBbGxvd0Rvd25sb2FkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAvKiogTW9kZWxsbyB0eXBlc2NyaXB0IGRpIGJpbmQgZGVpIGZpbGUgKi9cclxuICAgIE1vZGVsRmlsZTogQXBwRmlsZTtcclxuXHJcbiAgICAvKiogVXRpbGl6emF0YSBuZWwgZm9ybS1hZGFwdGVyIHBlciBzcGVjaWZpY2FyZSBsYSBwcmVjaXNpb25lIGRlZ2xpIGlucHV0IGN1cnJlbmN5bWFwIChUeXBlOiBjdXJyZW5jeSkgKi9cclxuICAgIEBJbnB1dCgpIFByZWNpc2lvbjogbnVtYmVyID0gMjtcclxuXHJcbiAgICAvKiogQWxsaW5lYW1lbnRvIGRlbGxhIGN1cnJlbmN5IG1hc2sgKi9cclxuICAgIEBJbnB1dCgpIEFsaWdubWVudDogJ2xlZnQnIHwgJ3JpZ2h0JyA9ICdyaWdodCc7XHJcblxyXG4gICAgLyoqIEZ1bnppb25lIGRpIHJpY2VyY2EgY2hlIHZlcnLDoCBjaGlhbWF0YSBkYWwgY29tcG9uZW50ZSAqL1xyXG4gICAgQElucHV0KCkgU2VhcmNoRnVuY3Rpb246IChzZWFyY2g6IHN0cmluZywgYnlpZDogYm9vbGVhbikgPT4gT2JzZXJ2YWJsZTx7IGlkOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcgfVtdPiA9IG51bGw7XHJcblxyXG4gICAgLyoqIE51bWVybyBtaW5pbW8gZGkgY2FyYXR0ZXJpIGNvbiBjdWkgY2VyY2FyZSAqL1xyXG4gICAgQElucHV0KCkgTWluQ2hhcnM6IG51bWJlciA9IDM7XHJcblxyXG4gICAgLyoqIEluZGljYSBzZSBpIGNvbnRyb2xsaSBkZXZvbm8gZXNzZXJlIGVmZmV0dHVhdGkgdGVuZW5kbyBjb250byBkZWwgQ2FzZSBvIG1lbm8uIFZhbGUgc29sbyBxdWFsb3JhIGxhICoqU291cmNlKiogZm9zc2UgZm9ybml0YSAqL1xyXG4gICAgQElucHV0KCkgQ2FzZVNlbnNpdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBPcHppb25pIHNwZWNpZmljaGUgcGVyIGlsIGNvbXBvbmVudGUgY2hlIHNpIHZhIGEgdmlzdWFsaXp6YXJlLiBFcy4gcGVyIGkgdGlwaSBkYXRlOiB7IEpzRGF0ZXM6IHRydWUgfSAqL1xyXG4gICAgQElucHV0KCkgT3B0aW9uczogeyBbaWQgaW4gQXZhaWxhYmxlT3B0aW9uc10/OiBhbnkgfSA9IHt9O1xyXG5cclxuICAgIC8qKiBWYXJpYWJpbGUgaW50ZXJuYSBjaGUgZ2VzdGlzY2Ugc2UgZWZmZXR0dWFyZSBpbCByaWFsbGluZWFtZW50byBkZWkgZGF0aSBvIG1lbm8gKi9cclxuICAgIHByaXZhdGUgYWxpZ25WYWx1ZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYSBzZSBpZ25vcmFyZSBpbCBwcm9zc2ltbyBldmVudG8gd3JpdGVWYWx1ZSBjaGUgbm9ybWFsbWVudGUgZG92cmViYmUgcmljaGllZGVyZSBsYSBudW92YSBzb3VyY2UuIFNlcnZlIHBlciBxdWFuZG8gbCd1dGVudGUgc2VsZXppb25hIHVuIGVsZW1lbnRvOlxyXG4gICAgICogU3ViaXRvIGRvcG8gcGFydGlyZWJiZSB1biBhbHRybyBldmVudG8gbW9kZWxDaGFuZ2UgY2hlIHJpY2FyaWNoZXJlYmJlIG51b3ZhbWVudGUgbGEgc291cmNlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaWdub3JlTmV4dFdyaXRlVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogQ2FjaGUgZGVsbGEgc29yZ2VudGUgb3JpZ2luYWxlIFBPU1QgYmluZGluZywgaW4gbW9kbyBkYSBwb3RlciBmYXJlIGZpbHRyaSBpbiBsb2NhbGUgcXVhbG9yYSBsYSAqKlNlYXJjaEZ1bmN0aW9uKiogbm9uIGZvc3NlIGRlZmluaXRhIGUgbGEgKipTb3VyY2UqKiBmb3NzZSBhc3NlZ25hdGEgKi9cclxuICAgIHB1YmxpYyBGaWx0ZXJlZEJvdW5kU291cmNlOiB7IGlkOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcgfVtdID0gW107XHJcblxyXG4gICAgLyoqIFNvbG8gcGVyIGdsaSBpbnB1dCBkaSB0aXBvIFwiZGF0ZVwiLiBDYXBpc2NlIGNoZSBtb2RhbGl0w6AgdXNhcmUgcGVyIGlsIHZhbGlkYXRpb24tZGF0ZSBzb3R0b3N0YW50ZSAqL1xyXG4gICAgcHVibGljIHVzZUpzRGF0ZXM6IGJvb2xlYW4gPSBudWxsO1xyXG5cclxuICAgIC8qKiBAaWdub3JlIENvc3RydXR0b3JlICAqL1xyXG4gICAgY29uc3RydWN0b3IoY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSB1dGlFeHRzOiBVdGlsaXR5U2VydmljZSwgcHJpdmF0ZSBkYXRlc0V4dHM6IERhdGVTZXJ2aWNlLCBwcml2YXRlIGRhdGVBZGFwdGVyOiBOZ3hNYXREYXRlQWRhcHRlcjxhbnk+LCBwdWJsaWMgbGM6IExvY2FsaXphdGlvblNlcnZpY2UsIEBPcHRpb25hbCgpIEBTZWxmKCkgbmdDb250cm9sOiBOZ0NvbnRyb2wsIEBPcHRpb25hbCgpIEBJbmplY3QoTkdfVkFMSURBVE9SUykgX3ZhbGlkYXRvcnM6IEFycmF5PGFueT4sIGFjOiBBY2Nlc3NDb250cm9sU2VydmljZSwgQE9wdGlvbmFsKCkgQXBwQ29udGV4dDogQ29tcG9uZW50Q29udGV4dCwgQE9wdGlvbmFsKCkgQEluamVjdChBQ09fQ1VTVE9NS0VZKSBBQ09fQ1VTVE9NS0VZOiBzdHJpbmcsIEBPcHRpb25hbCgpIEBJbmplY3QoRkFWX0RFQlVHX01PREUpIEZBVl9ERUJVR19NT0RFOiBib29sZWFuKSB7XHJcbiAgICAgICAgc3VwZXIoY2RyLCBuZ0NvbnRyb2wsIF92YWxpZGF0b3JzLCBhYywgQXBwQ29udGV4dCwgQUNPX0NVU1RPTUtFWSwgRkFWX0RFQlVHX01PREUpO1xyXG5cclxuICAgICAgICB0aGlzLk1vZGVsRmlsZSA9IG5ldyBBcHBGaWxlKCk7XHJcbiAgICAgICAgdGhpcy5Vc2VVc2VyVmFsaWRhdG9ycyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBJbnRQYXR0ZXJuID0gJ15bMC05XVxcXFxkKiQnO1xyXG4gICAgcHVibGljIEZsb2F0UGF0dGVybiA9ICdeKFswLTldKlssXSk/WzAtOV0rJCc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOdmwgY29uIHVuIG1pbmltbyBkaSBzZW5zb1xyXG4gICAgICogQHBhcmFtIHZhbHVlIFZhbG9yZSBiYXNlXHJcbiAgICAgKiBAcGFyYW0gaWZub2QgVmFsb3JlIGRhIHVzYXJlIHNlICoqdmFsdWUqKiDDqCBudWxsbyBvIHVuZGVmaW5lZFxyXG4gICAgICogQHJldHVybnMgSWwgdmFsb3JlIHByZXNvIGZyYSBpIGR1ZSBkaXNwb25pYmlsaVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIG52bDxUPih2YWx1ZTogVCwgaWZub2Q6IFQpOiBUIHtcclxuICAgICAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PSB1bmRlZmluZWQgPyBpZm5vZCA6IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG5cclxuICAgICAgICAvLyBBc3NlZ25hemlvbmUgT3B6aW9uaSBkYSBvZ2dldHRvXHJcbiAgICAgICAgaWYodGhpcy5PcHRpb25zKXtcclxuICAgICAgICAgICAgdGhpcy51c2VKc0RhdGVzID0gdGhpcy5udmwodGhpcy5PcHRpb25zPy5Kc0RhdGVzLCB0aGlzLnVzZUpzRGF0ZXMpOztcclxuICAgICAgICAgICAgdGhpcy5DYXNlU2Vuc2l0aXZlID0gdGhpcy5udmwodGhpcy5PcHRpb25zPy5DYXNlU2Vuc2l0aXZlLCB0aGlzLkNhc2VTZW5zaXRpdmUpO1xyXG4gICAgICAgICAgICB0aGlzLk1pbkNoYXJzID0gdGhpcy5udmwodGhpcy5PcHRpb25zPy5NaW5DaGFycywgdGhpcy5NaW5DaGFycyk7XHJcbiAgICAgICAgICAgIHRoaXMuU2VhcmNoRnVuY3Rpb24gPSB0aGlzLm52bCh0aGlzLk9wdGlvbnM/LlNlYXJjaEZ1bmN0aW9uLCB0aGlzLlNlYXJjaEZ1bmN0aW9uKTtcclxuICAgICAgICAgICAgdGhpcy5BbGlnbm1lbnQgPSB0aGlzLm52bCh0aGlzLk9wdGlvbnM/LkFsaWdubWVudCwgdGhpcy5BbGlnbm1lbnQpO1xyXG4gICAgICAgICAgICB0aGlzLlByZWNpc2lvbiA9IHRoaXMubnZsKHRoaXMuT3B0aW9ucz8uUHJlY2lzaW9uLCB0aGlzLlByZWNpc2lvbik7XHJcbiAgICAgICAgICAgIHRoaXMuQWxsb3dEb3dubG9hZCA9IHRoaXMubnZsKHRoaXMuT3B0aW9ucz8uQWxsb3dEb3dubG9hZCwgdGhpcy5BbGxvd0Rvd25sb2FkKTtcclxuICAgICAgICAgICAgdGhpcy5BZGp1c3ROdW1iZXIgPSB0aGlzLm52bCh0aGlzLk9wdGlvbnM/LkFkanVzdE51bWJlciwgdGhpcy5BZGp1c3ROdW1iZXIpO1xyXG4gICAgICAgICAgICB0aGlzLlBhdHRlcm4gPSB0aGlzLm52bCh0aGlzLk9wdGlvbnM/LlBhdHRlcm4sIHRoaXMuUGF0dGVybik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcclxuICAgICAgICAgICAgLy8gRXNjbHVzaSBpIHZhbGlkYXRvcmkgYSBjb21wb25lbnRpXHJcbiAgICAgICAgICAgIGxldCB2YWxpZGF0b3JzID0gWy4uLih0aGlzLl92YWxpZGF0b3JzIHx8IFtdKV0uZmlsdGVyKHYgPT4gIXYubmdPbkluaXQpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHB2ID0gbmV3IFBhdHRlcm5WYWxpZGF0b3IoKTtcclxuICAgICAgICAgICAgc3dpdGNoICh0aGlzLlR5cGUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2ludCc6XHJcbiAgICAgICAgICAgICAgICAgICAgcHYucGF0dGVybiA9IHRoaXMuUGF0dGVybiB8fCB0aGlzLkludFBhdHRlcm47XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKHB2KTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2Zsb2F0JzpcclxuICAgICAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XHJcbiAgICAgICAgICAgICAgICAgICAgcHYucGF0dGVybiA9IHRoaXMuUGF0dGVybiB8fCB0aGlzLkZsb2F0UGF0dGVybjtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2gocHYpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5QYXR0ZXJuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHB2LnBhdHRlcm4gPSB0aGlzLlBhdHRlcm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChwdik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICg8YW55PnRoaXMubmdDb250cm9sKS5fc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcclxuICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wuY29udHJvbC5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpO1xyXG4gICAgICAgICAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHB1YmxpYyBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICAgICAgY29uc3QgbmV3U291cmNlID0gY2hhbmdlc1tcIlNvdXJjZVwiXTtcclxuICAgICAgICBjb25zdCBuZXdUeXBlID0gY2hhbmdlc1tcIlR5cGVcIl07XHJcblxyXG4gICAgICAgIGlmIChuZXdTb3VyY2UpIHtcclxuICAgICAgICAgICAgdGhpcy50cnlCaW5kU291cmNlRGlzcGxheSgpO1xyXG5cclxuICAgICAgICAgICAgLy8gUHJpbWEgYXNzZWduYXppb25lIHNlIGNhbWJpYSBsYSBzb3VyY2Ugc290dG8gKHF1aW5kaSBzZSB2aWVuZSBiaW5kYXRhIGRpcmV0dGFtZW50ZSBkYSBIVE1MKVxyXG4gICAgICAgICAgICBpZiAodGhpcy5UeXBlID09IFwiYXV0b2NvbXBsZXRlXCIgJiYgKHRoaXMuTW9kZWw/Lmxlbmd0aCB8fCAwKSA+PSB0aGlzLk1pbkNoYXJzICYmICF0aGlzLlNlYXJjaEZ1bmN0aW9uKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5GaWx0ZXJlZEJvdW5kU291cmNlID0gdGhpcy5Cb3VuZFNvdXJjZTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5GaWx0ZXJlZEJvdW5kU291cmNlID0gW107XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChuZXdUeXBlICYmIHRoaXMuTW9kZWwpXHJcbiAgICAgICAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLk1vZGVsKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYWxpZ25WYWx1ZXMgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IG9iaj8udG9TdHJpbmcoKSB8fCBcIlwiO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuVHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzLlR5cGUgPSBcInN0cmluZ1wiO1xyXG4gICAgICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gb2JqO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuVHlwZSA9PSBcImRhdGVcIiB8fCB0aGlzLlR5cGUgPT0gXCJkYXRldGltZVwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlSnNEYXRlcyA9IHRoaXMudXNlSnNEYXRlcyA9PSBudWxsID8gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09IFwiW29iamVjdCBEYXRlXVwiIDogdGhpcy51c2VKc0RhdGVzO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5UeXBlID09IFwiZGF0ZVwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IHRoaXMuZGF0ZXNFeHRzLmdldEZvcm1hdHRlZChvYmosIHRydWUsIGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuVHlwZSA9PSBcImRhdGV0aW1lXCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gdGhpcy5kYXRlc0V4dHMuZ2V0Rm9ybWF0dGVkKG9iaiwgZmFsc2UsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICgodGhpcy5UeXBlID09IFwiZmxvYXRcIiB8fCB0aGlzLlR5cGUgPT0gXCJudW1iZXJcIikgJiYgb2JqKSB7XHJcbiAgICAgICAgICAgIG9iaiA9IG9iai50b1N0cmluZygpLnJlcGxhY2UoXCIuXCIsIFwiLFwiKTtcclxuICAgICAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IG9iajtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gUGVyIHNpY3VyZXp6YSByaWFsbGluZW8gaSB2YWxvcmlcclxuICAgICAgICBlbHNlIGlmICh0aGlzLlR5cGUgPT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgICAgICAgb2JqID0gb2JqID8gKG9iaiA9PT0gdHJ1ZSB8fCBvYmoudG9Mb3dlckNhc2UoKSA9PSBcInRydWVcIikgOiBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5hbGlnblZhbHVlcyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuRXZhbHVhdGVkTW9kZWwgPSB0aGlzLmxjLmxvYyhvYmogPyAnU8OsJyA6ICdObycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLlR5cGUgPT0gXCJ0aW1lXCIpIHtcclxuICAgICAgICAgICAgY29uc3QgW2hvdXJzLCBtaW51dGVzLCBzZWNvbmRzXSA9IChvYmogfHwgXCIwMDowMDowMFwiKS5zcGxpdChcIjpcIik7XHJcbiAgICAgICAgICAgIG9iaiA9IGRheWpzKCkuaG91cihwYXJzZUludChob3VycyA/PyAwKSkubWludXRlKHBhcnNlSW50KG1pbnV0ZXMgPz8gMCkpLnNlY29uZChwYXJzZUludChzZWNvbmRzID8/IDApKTtcclxuICAgICAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IGAke2hvdXJzIHx8ICcwMCd9OiR7bWludXRlcyB8fCAnMDAnfToke3NlY29uZHMgfHwgJzAwJ31gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLlR5cGUgPT0gXCJmaWxlXCIpIHtcclxuICAgICAgICAgICAgb2JqID0gdGhpcy5Nb2RlbEZpbGU7XHJcbiAgICAgICAgICAgIHRoaXMuRXZhbHVhdGVkTW9kZWwgPSB0aGlzLk1vZGVsRmlsZS5maWxlbmFtZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5UeXBlID09IFwiYXV0b2NvbXBsZXRlXCIpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuU2VhcmNoRnVuY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuU2VhcmNoRnVuY3Rpb24ob2JqLCB0cnVlKS5zdWJzY3JpYmUodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5Tb3VyY2UgPSB0O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5QmluZFNvdXJjZURpc3BsYXkoKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy5maW5hbGl6ZVZhbHVlKG9iaik7IH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5maW5hbGl6ZVZhbHVlKG9iaik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5Cb3VuZFNvdXJjZSAmJiB0aGlzLkJvdW5kU291cmNlLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgIHRoaXMuRXZhbHVhdGVkTW9kZWwgPSB0aGlzLkJvdW5kU291cmNlLmZpbmQodCA9PiB0LmlkID09IG9iaik/LmRlc2NyaXB0aW9uO1xyXG5cclxuICAgICAgICBzdXBlci53cml0ZVZhbHVlKG9iaik7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmFsaWduVmFsdWVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEYXRvIHVuIHZhbG9yZSB2ZXJpZmljYSBzZSBwdcOyIHJlc3RpdHVpcmUgbGUgaW5mb3JtYXppb25pIHRyb3ZhdGUgaW4gKipTb3VyY2UqKiBjb24gaWQgdWd1YWxlIGEgKip2YWx1ZSoqIG8gc2UgZGV2ZSByZXN0aXR1aXJlIGlsIHZhbG9yZSBpbiBzZVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgVmFsb3JlIHNjcml0dG8gbmVsbCdpbnB1dCBkaSB0ZXN0b1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGZpbmFsaXplVmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHZhciB2YWwgPSB0aGlzLlNvdXJjZS5maW5kKHQgPT4gdC5pZCA9PSB2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodmFsID8gdmFsLmlkIDogdmFsdWUpO1xyXG4gICAgICAgIHRoaXMuTW9kZWwgPSB2YWwgPyB2YWwuZGVzY3JpcHRpb24gOiB2YWx1ZTtcclxuICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gdGhpcy5Nb2RlbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEV2ZW50byBkaSBmaWx0cm8gZGVsbGEgc29yZ2VudGUgZGF0aSBpbiBiYXNlIGFsbCdpbnB1dCB1dGVudGVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50IElucHV0IHV0ZW50ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZmlsdGVyU291cmNlKGV2ZW50PzogQ2hhbmdlRXZlbnQpIHtcclxuICAgICAgICBpZiAodGhpcy5pZ25vcmVOZXh0V3JpdGVWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmlnbm9yZU5leHRXcml0ZVZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFF1YW5kbyBmaWx0cm8gbGEgc291cmNlLCBzZSBub24gZGV2byBpZ25vcmFyZSBsJ2V2ZW50byBkZXZvIGNvbXVucXVlIGFzc2ljdXJhcm1pIGRpIGltcG9zdGFyZSBpbCB2YWxvcmUgc2VsZXppb25hdG8gYSBudWxsXHJcbiAgICAgICAgc3VwZXIuY2hhbmdlZChudWxsKTtcclxuXHJcbiAgICAgICAgaWYgKCFldmVudCAmJiB0aGlzLk1pbkNoYXJzID09IDAgJiYgIXRoaXMuU2VhcmNoRnVuY3Rpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5GaWx0ZXJlZEJvdW5kU291cmNlID0gdGhpcy5Cb3VuZFNvdXJjZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFldmVudCB8fCBldmVudC52YWx1ZS5sZW5ndGggPCB0aGlzLk1pbkNoYXJzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuRmlsdGVyZWRCb3VuZFNvdXJjZSA9IFtdO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuU2VhcmNoRnVuY3Rpb24gJiYgKCF0aGlzLlNvdXJjZSB8fCB0aGlzLlNvdXJjZS5sZW5ndGggPT0gMCkpXHJcbiAgICAgICAgICAgIHRocm93IFwiSW1wb3NzaWJpbGUgZmlsdHJhcmUgZ2xpIGVsZW1lbnRpIHNlbnphIHVuYSBmdW56aW9uZSBkaSByaWNlcmNhIGNoZSByZXN0aXR1aXNjYSB1bmEgbGlzdGEgZGkgeyBpZDogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nIH1cIjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuU2VhcmNoRnVuY3Rpb24pIHtcclxuICAgICAgICAgICAgdGhpcy50aHJvdHRsYShcImZpbHRlcnNvdXJjZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLlNlYXJjaEZ1bmN0aW9uKGV2ZW50LnZhbHVlLCBmYWxzZSkuc3Vic2NyaWJlKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuU291cmNlID0gdDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUJpbmRTb3VyY2VEaXNwbGF5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSW4gcXVlc3RvIGNhc28gw6ggZ2nDoCBmaWx0cmF0YSBkYWxsYSBTZWFyY2hGdW5jdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuRmlsdGVyZWRCb3VuZFNvdXJjZSA9IHRoaXMuQm91bmRTb3VyY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGaWx0ZXJlZFNvdXJjZU9uRGVzY3JpcHRpb25TZWxlY3Rpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9LCA0MDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy50aHJvdHRsYShcImZpbHRlcnNvdXJjZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBJbiBxdWVzdG8gY2FzbyBkZXZvIGZpbHRyYXJlIGlvIGluIG1lbW9yaWFcclxuICAgICAgICAgICAgICAgIHRoaXMuRmlsdGVyZWRCb3VuZFNvdXJjZSA9IHRoaXMuQm91bmRTb3VyY2UuZmlsdGVyKHQgPT4gKHRoaXMuQ2FzZVNlbnNpdGl2ZSAmJiB0LmRlc2NyaXB0aW9uLmluY2x1ZGVzKGV2ZW50LnZhbHVlKSkgfHwgKCF0aGlzLkNhc2VTZW5zaXRpdmUgJiYgdC5kZXNjcmlwdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGV2ZW50LnZhbHVlLnRvTG93ZXJDYXNlKCkpKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZpbHRlcmVkU291cmNlT25EZXNjcmlwdGlvblNlbGVjdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwcml2YXRlIHJlbW92ZUZpbHRlcmVkU291cmNlT25EZXNjcmlwdGlvblNlbGVjdGlvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5GaWx0ZXJlZEJvdW5kU291cmNlLmxlbmd0aCA9PSAxICYmICh0aGlzLkZpbHRlcmVkQm91bmRTb3VyY2VbMF0uZGVzY3JpcHRpb24gPT09IHRoaXMuTW9kZWwpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuTW9kZWwgPSB0aGlzLkJvdW5kU291cmNlWzBdLmlkO1xyXG4gICAgICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gdGhpcy5Cb3VuZFNvdXJjZVswXS5kZXNjcmlwdGlvbjtcclxuICAgICAgICAgICAgdGhpcy5GaWx0ZXJlZEJvdW5kU291cmNlID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBNZXRvZG8gcmljaGlhbWF0byBxdWFuZG8gdmllbmUgbW9kaWZpY2F0byBpbCBtb2RlbGxvIGRlbCBjYW1wbyBkaSBpbnB1dCAqL1xyXG4gICAgY2hhbmdlZChldmVudD86IENoYW5nZUV2ZW50KSB7XHJcbiAgICAgICAgdmFyIHRvRW1pdCA9IHRoaXMuZ2V0TW9kZWxUb0VtaXQoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuVHlwZSA9PSBcImF1dG9jb21wbGV0ZVwiKVxyXG4gICAgICAgICAgICB0aGlzLmlnbm9yZU5leHRXcml0ZVZhbHVlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuRW1pdFBlbmRpbmdDaGFuZ2VzKVxyXG4gICAgICAgICAgICBzdXBlci5jaGFuZ2VkKHRvRW1pdCwgZmFsc2UsIGZhbHNlLCBldmVudD8uaW50ZXJuYWwpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBmaW5hbGl6ZWQoKSB7XHJcbiAgICAgICAgc3VwZXIuZmluYWxpemVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIE1ldG9kbyByaWNoaWFtYXRvIHF1YW5kbyB2aWVuZSBzZWxlemlvbmF0byBpbCBjYW1wbyBjb2wgbW91c2UgKi9cclxuICAgIGZvY3VzZWQoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIHN1cGVyLmZvY3VzZWQoZXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBFZmZldHR1YSBnbGkgYWdnaXVzdGFtZW50aSBkYXRpIGRlbCBjYXNvIGVkIGVtZXR0ZSBpbCBtb2RlbGxvIGNvcnJldHRvICovXHJcbiAgICBwcml2YXRlIGdldE1vZGVsVG9FbWl0KCkge1xyXG4gICAgICAgIHZhciB0b0VtaXQgPSB0aGlzLk1vZGVsID9cclxuICAgICAgICAgICAgKHRoaXMuVHlwZSA9PSBcInRpbWVcIiB8fCB0aGlzLnVzZUpzRGF0ZXMgP1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlQWRhcHRlci5jbG9uZSh0aGlzLmRhdGVzRXh0cy5nZXREYXRlQ29udmVydGlvbih0aGlzLk1vZGVsKSlcclxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLk1vZGVsKSkpXHJcbiAgICAgICAgICAgIDogbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKCh0aGlzLlR5cGUgPT0gXCJmbG9hdFwiIHx8IHRoaXMuVHlwZSA9PSBcIm51bWJlclwiKSAmJiB0b0VtaXQpIHtcclxuICAgICAgICAgICAgaWYodGhpcy5BZGp1c3ROdW1iZXIpXHJcbiAgICAgICAgICAgICAgICB0b0VtaXQgPSB0b0VtaXQucmVwbGFjZShcIi5cIiwgXCJcIikucmVwbGFjZShcIixcIiwgXCIuXCIpO1xyXG4gICAgICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gdG9FbWl0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLlR5cGUgPT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgICAgICAgdG9FbWl0ID0gdG9FbWl0ID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gdGhpcy5sYy5sb2ModG9FbWl0ID8gJ1llcycgOiAnTm8nKTs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuVHlwZSA9PSBcInRpbWVcIikge1xyXG4gICAgICAgICAgICB0b0VtaXQgPSB0b0VtaXQuZm9ybWF0KFwiSEg6bW06c3NcIik7XHJcbiAgICAgICAgICAgIHRoaXMuRXZhbHVhdGVkTW9kZWwgPSB0b0VtaXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKCh0aGlzLlR5cGUgPT0gXCJkYXRlXCIgfHwgdGhpcy5UeXBlID09IFwiZGF0ZXRpbWVcIikgJiYgdGhpcy51c2VKc0RhdGVzKSB7XHJcbiAgICAgICAgICAgIHRvRW1pdCA9IHRvRW1pdC50b0RhdGUoKTtcclxuICAgICAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IHRoaXMuZGF0ZXNFeHRzLmdldEZvcm1hdHRlZCh0aGlzLk1vZGVsLCB0aGlzLlR5cGUgPT0gXCJkYXRlXCIsIHRoaXMuVHlwZSA9PSBcImRhdGV0aW1lXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRvRW1pdDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciBwZXIgZ2VzdGlyZSBsYSBtb2RpZmljYSBkZWwgZmlsZSBhdHR1YWxtZW50ZSBiaW5kYXRvLiBPdnZpYW1lbnRlIGZ1bnppb25hIHNvbG8gcXVhbG9yYSBpbCAqKlR5cGUqKiBmb3NzZSAqKmZpbGUqKlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGNsZWFyIEluZGljYSBzZSBiaXNvZ25hIHN2dW90YXJlIGwnaW5wdXQgbyBtZW5vIFxyXG4gICAgICovXHJcbiAgICBmaWxlQ2hhbmdlKGNsZWFyOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICBsZXQgZmlsZXM6IEZpbGVbXSA9IFtdO1xyXG4gICAgICAgIGxldCBtb2RlbCA9ICg8QXBwRmlsZT50aGlzLk1vZGVsKTtcclxuICAgICAgICBsZXQgbmU6IEhUTUxJbnB1dEVsZW1lbnQgPSB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudDtcclxuXHJcbiAgICAgICAgaWYgKGNsZWFyKSB7XHJcbiAgICAgICAgICAgIG1vZGVsLmZpbGVuYW1lID0gXCJcIjtcclxuICAgICAgICAgICAgbmUudmFsdWUgPSBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZS5maWxlcy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgICAgIGZpbGVzLnB1c2gobmUuZmlsZXMuaXRlbShpKSk7XHJcblxyXG4gICAgICAgICAgICBpZiAobmUuZmlsZXMubGVuZ3RoID09IDEpXHJcbiAgICAgICAgICAgICAgICBtb2RlbC5maWxlbmFtZSA9IG5lLmZpbGVzWzBdLm5hbWU7XHJcbiAgICAgICAgICAgIGlmIChuZS5maWxlcy5sZW5ndGggPiAxKVxyXG4gICAgICAgICAgICAgICAgbW9kZWwuZmlsZW5hbWUgPSBuZS5maWxlcy5sZW5ndGggKyBcIiBcIiArIHRoaXMubGMubG9jKFwiRmlsZXMgU2VsZWN0ZWRcIik7XHJcbiAgICAgICAgICAgIG1vZGVsLm5hdGl2ZWZpbGVzID0gZmlsZXM7XHJcbiAgICAgICAgICAgIG1vZGVsLmZpbGViNjQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNoYW5nZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogUGVybWV0dGUgZGkgc2NhcmljYXJlIGlsIGZpbGUgY29sbGVnYXRvIGFsbCdldmV0bnVhbGUgZmlsZSBpbnB1dCByYXBwcmVzZW50YXRvIGRhIHF1ZXN0byBjb21wb25lbnRlICovXHJcbiAgICBkb3dubG9hZEF0dGFjaG1lbnQoKSB7XHJcbiAgICAgICAgbGV0IG1vZGVsID0gKDxBcHBGaWxlPnRoaXMuTW9kZWwpO1xyXG4gICAgICAgIHRoaXMudXRpRXh0cy5zYXZlRmlsZShtb2RlbC5maWxlYjY0LCBtb2RlbC5maWxlbmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIG9uTm90TnVsbFZhbHVlU2V0KCk6IHZvaWQgeyB9XHJcblxyXG4gICAgLy8qKioqKioqKioqKioqKioqKioqKiBGdW56aW9uZSBkaSB0aHJvdHRsaW5nIHBlciBub24gc3BhbW1hcmUgcmljaGllc3RlIGluIGNhc28gZGkgYW5pbWF6aW9uaSBhdHRpdmF0ZVxyXG4gICAgLy9UT0RPOiBzcG9zdGFybGEgaW4gdW4gbWV0b2RvIGRpIHV0aWxpdMOgIChlc2ZhZW56YS9leHRlbnNpb25zKVxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHByaXZhdGUgZXhlY3V0aW9uVGltZXJzOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwcml2YXRlIHRocm90dGxhKGlkOiBzdHJpbmcsIGZ1bmM6IEZ1bmN0aW9uLCB0aHJvdHRsZVRpbWU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIC8vU2UgaG8gbGEgZnVuemlvbmUgY2hlIHZ1b2xlIGVzZWd1aXJlIHJpcHVsaXNjbyBxdWVsIHRpbWVvdXRcclxuICAgICAgICBpZiAodGhpcy5leGVjdXRpb25UaW1lcnNbaWRdKVxyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5leGVjdXRpb25UaW1lcnNbaWRdKTtcclxuXHJcbiAgICAgICAgLy9SaWNyZW8gaWwgdGltZW91dCBwZXIgZXNlZ3VpcmUgcXVlbGxhIGZ1bnppb25lIGRvcG8gdGhyb3R0bGVUaW1lIG1pbGxpc2Vjb25kaVxyXG4gICAgICAgIHRoaXMuZXhlY3V0aW9uVGltZXJzW2lkXSA9IHNldFRpbWVvdXQoKCkgPT4geyBmdW5jKCk7IHRoaXMuZXhlY3V0aW9uVGltZXJzW2lkXSA9IG51bGw7IH0sIHRocm90dGxlVGltZSk7XHJcbiAgICB9XHJcbiAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKipcclxufSIsIjwhLS0gVWd1YWxlIGluIHR1dHRpIGkgY29tcG9uZW50aSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCIhRm9ybUxheW91dCAmJiAoIURpc3BsYXlNb2RlIHx8IChEaXNwbGF5TGF5b3V0ICE9ICdoaWRkZW4nICYmIERpc3BsYXlDb25kaXRpb24pKVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkRpc3BsYXlNb2RlICYmICFEaXNwbGF5TW9kZVRlbXBsYXRlXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkRpc3BsYXlMYXlvdXQgPT0gJ2Zvcm0nXCI+e3sgRXZhbHVhdGVkTW9kZWwgfX08L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiRGlzcGxheUxheW91dCA9PSAnaW5saW5lJ1wiIGNsYXNzPVwiYXBwLWlubGluZVwiPnt7IEV2YWx1YXRlZE1vZGVsIH19PC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJEaXNwbGF5TW9kZSAmJiBEaXNwbGF5TW9kZVRlbXBsYXRlXCI+PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIkRpc3BsYXlNb2RlVGVtcGxhdGUsIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBFdmFsdWF0ZWRNb2RlbCB9XCI+PC9uZy1jb250YWluZXI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8ZGl2IFtoaWRkZW5dPVwiRGlzcGxheU1vZGVcIj48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udHJvbFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+PC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPGRpdiAqbmdJZj1cIkZvcm1MYXlvdXQgJiYgKCFEaXNwbGF5TW9kZSB8fCAoRGlzcGxheUxheW91dCAhPSAnaGlkZGVuJyAmJiBEaXNwbGF5Q29uZGl0aW9uKSlcIiBjbGFzcz1cInt7Rm9ybUdyb3VwQ2xhc3MgKyAoTGFzdCA/ICcgYXBwLW1hcmdpbi1ib3R0b20tMCBhcHAtbWFyZ2luLXJpZ2h0LTAgJyA6ICcnKSArIChEaXNwbGF5TGF5b3V0ID09ICdpbmxpbmUnICYmIERpc3BsYXlNb2RlID8gKCcgYXBwLWlubGluZS1ibG9jayAnICsgKCFMYXN0ID8gJ2FwcC1tYXJnaW4tcmlnaHQtMTAnIDogJycpKSA6ICcgZm9ybS1ncm91cCByb3cnKX19XCI+XHJcblxyXG4gICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLXt7KERpc3BsYXlNb2RlICYmIERpc3BsYXlMYXlvdXQgPT0gJ2lubGluZScgPyAnbm9uZSBhcHAtYm9sZCBhcHAtbWFyZ2luLWJvdHRvbS0wJyA6IExhYmVsQ29sV2lkdGgpICsgKERpc3BsYXlNb2RlID8gJyBhcHAtYm9sZCcgOiAnIG0tdC01JykgfX1cIj57e0xhYmVsfX17e1JlcXVpcmVkICYmICFEaXNwbGF5TW9kZSA/ICcqJyA6ICcnfX17e0xhYmVsID8gXCI6XCIgOiBcIlwifX08L2xhYmVsPlxyXG4gICAgPHNwYW4gKm5nSWY9XCJEaXNwbGF5TW9kZSAmJiBEaXNwbGF5TGF5b3V0ID09ICdpbmxpbmUnICYmIElubGluZVNlcGFyYXRvciAhPSAnJ1wiPnt7SW5saW5lU2VwYXJhdG9yfX08L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLXt7RGlzcGxheU1vZGUgJiYgRGlzcGxheUxheW91dCA9PSAnaW5saW5lJyA/ICdub25lIGFwcC1pbmxpbmUtYmxvY2snIDogSW5wdXRDb2xXaWR0aH19XCI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJEaXNwbGF5TW9kZSAmJiAhRGlzcGxheU1vZGVUZW1wbGF0ZVwiPnt7IEV2YWx1YXRlZE1vZGVsIH19PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkRpc3BsYXlNb2RlICYmIERpc3BsYXlNb2RlVGVtcGxhdGVcIj48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiRGlzcGxheU1vZGVUZW1wbGF0ZSwgY29udGV4dDogeyAkaW1wbGljaXQ6IEV2YWx1YXRlZE1vZGVsIH1cIj48L25nLWNvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8ZGl2IFtoaWRkZW5dPVwiRGlzcGxheU1vZGVcIj48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udHJvbFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjbGVhcmZpeFwiPjwvZGl2PlxyXG48L2Rpdj5cclxuPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjY29udHJvbFRlbXBsYXRlPlxyXG4gICAgPGRpdiAqbmdJZj1cIiFUeXBlXCIgY2xhc3M9XCJhcHAtbWFyZ2luLXRvcC01XCI+XHJcbiAgICAgICAgPGVtPnt7VHlwZU1pc3NpbmdNZXNzYWdlfX08L2VtPlxyXG4gICAgPC9kaXY+XHJcbiAgIFxyXG4gICAgIDwhLS1TZSBjdXJyZW5jeS0tPlxyXG4gICAgIDxkaXYgKm5nSWY9XCJUeXBlID09ICdjdXJyZW5jeSdcIj5cclxuICAgICAgICA8dmFsLWN1cnJlbmN5ICN2YWxpZGF0aW9uQ29udHJvbD1cIm5nTW9kZWxcIiBbRm9jdXNTdWJqZWN0XT1cIkZvY3VzU3ViamVjdFwiIFtTZXRWYWxpZGF0aW9uU3ViamVjdF09XCJTZXRWYWxpZGF0aW9uU3ViamVjdFwiIFtGaWVsZEFwcGVhcmVuY2VdPVwiRmllbGRBcHBlYXJlbmNlXCIgW2ZvcmNlSW52YWxpZF09XCJGb3JjZWRFcnJvclwiIFtGbG9hdGluZ0xhYmVsXT1cIkZsb2F0aW5nTGFiZWxcIlxyXG4gICAgICAgIFtDdXJyZW5jeU9wdGlvbnNdPVwieyBwcmVmaXg6ICcnLCB0aG91c2FuZHM6ICcuJywgZGVjaW1hbDogJywnLCBwcmVjaXNpb246IFByZWNpc2lvbiwgYWxpZ246IEFsaWdubWVudCB9XCIgW25vVmFsaWRhdGVdPVwiIVZhbGlkYXRpb25cIlxyXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCIgW1JlYWRvbmx5XT1cIlJlYWRvbmx5XCIgW3N1Ym1pdHRlZF09XCJGb3JtPy5zdWJtaXR0ZWRcIiBbcmVxdWlyZWRdPVwiUmVxdWlyZWRcIiBbKG5nTW9kZWwpXT1cIk1vZGVsXCIgW2lkXT1cIkdlbmVyYXRlZE5hbWVcIiBuYW1lPVwie3tHZW5lcmF0ZWROYW1lfX1cIiBhdXRvY29tcGxldGU9XCJvZmZcIiAoaW5wdXRDaGFuZ2UpPVwiY2hhbmdlZCgpO1wiIChpbnB1dEZvY3VzKT1cImZvY3VzZWQoJGV2ZW50KTtcIiAoaW5wdXRGaW5hbGl6ZWQpPVwiZmluYWxpemVkKClcIj48L3ZhbC1jdXJyZW5jeT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLVNlIGRhdGEtLT5cclxuICAgIDxkaXYgKm5nSWY9XCJUeXBlID09ICdkYXRlJ1wiPlxyXG4gICAgICAgIDx2YWwtZGF0ZSAjdmFsaWRhdGlvbkNvbnRyb2w9XCJuZ01vZGVsXCIgW0ZvY3VzU3ViamVjdF09XCJGb2N1c1N1YmplY3RcIiBbU2V0VmFsaWRhdGlvblN1YmplY3RdPVwiU2V0VmFsaWRhdGlvblN1YmplY3RcIiBbRmllbGRBcHBlYXJlbmNlXT1cIkZpZWxkQXBwZWFyZW5jZVwiIFtmb3JjZUludmFsaWRdPVwiRm9yY2VkRXJyb3JcIiBbRmxvYXRpbmdMYWJlbF09XCJGbG9hdGluZ0xhYmVsXCIgW25vVmFsaWRhdGVdPVwiIVZhbGlkYXRpb25cIiBbUmVhZG9ubHldPVwiUmVhZG9ubHlcIiBbc3VibWl0dGVkXT1cIkZvcm0/LnN1Ym1pdHRlZFwiIFtyZXF1aXJlZF09XCJSZXF1aXJlZFwiIFsobmdNb2RlbCldPVwiTW9kZWxcIiBbaWRdPVwiR2VuZXJhdGVkTmFtZVwiIFt1c2VKc0RhdGVzXT1cInVzZUpzRGF0ZXNcIiBuYW1lPVwie3tHZW5lcmF0ZWROYW1lfX1cIiBhdXRvY29tcGxldGU9XCJvZmZcIiAoaW5wdXRDaGFuZ2UpPVwiY2hhbmdlZCgkZXZlbnQpO1wiIChpbnB1dEZvY3VzKT1cImZvY3VzZWQoJGV2ZW50KTtcIiAoaW5wdXRGaW5hbGl6ZWQpPVwiZmluYWxpemVkKClcIj48L3ZhbC1kYXRlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tU2Ugc3RyaW5nYS0tPlxyXG4gICAgPGRpdiAqbmdJZj1cIlR5cGUgPT0gJ3N0cmluZydcIj5cclxuICAgICAgICA8dmFsLWlucHV0ICN2YWxpZGF0aW9uQ29udHJvbD1cIm5nTW9kZWxcIiBbRm9jdXNTdWJqZWN0XT1cIkZvY3VzU3ViamVjdFwiIFtTZXRWYWxpZGF0aW9uU3ViamVjdF09XCJTZXRWYWxpZGF0aW9uU3ViamVjdFwiIFtGaWVsZEFwcGVhcmVuY2VdPVwiRmllbGRBcHBlYXJlbmNlXCIgW2ZvcmNlSW52YWxpZF09XCJGb3JjZWRFcnJvclwiIFtGbG9hdGluZ0xhYmVsXT1cIkZsb2F0aW5nTGFiZWxcIiBbbm9WYWxpZGF0ZV09XCIhVmFsaWRhdGlvblwiIFtSZWFkb25seV09XCJSZWFkb25seVwiIFtzdWJtaXR0ZWRdPVwiRm9ybT8uc3VibWl0dGVkXCIgdHlwZT1cInRleHRcIiBwYXR0ZXJuPVwie3tQYXR0ZXJuIHx8ICcnfX1cIiBbcmVxdWlyZWRdPVwiUmVxdWlyZWRcIiBbKG5nTW9kZWwpXT1cIk1vZGVsXCIgW2lkXT1cIkdlbmVyYXRlZE5hbWVcIiBuYW1lPVwie3tHZW5lcmF0ZWROYW1lfX1cIiBhdXRvY29tcGxldGU9XCJvZmZcIiAoaW5wdXRDaGFuZ2UpPVwiY2hhbmdlZCgkZXZlbnQpO1wiIChpbnB1dEZvY3VzKT1cImZvY3VzZWQoJGV2ZW50KTtcIiAoaW5wdXRGaW5hbGl6ZWQpPVwiZmluYWxpemVkKClcIj48L3ZhbC1pbnB1dD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLVNlIG51bWVyby0tPlxyXG4gICAgPGRpdiAqbmdJZj1cIlR5cGUgPT0gJ2Zsb2F0JyB8fCBUeXBlID09ICdudW1iZXInXCI+XHJcbiAgICAgICAgPHZhbC1pbnB1dCAjdmFsaWRhdGlvbkNvbnRyb2w9XCJuZ01vZGVsXCIgW0ZvY3VzU3ViamVjdF09XCJGb2N1c1N1YmplY3RcIiBbU2V0VmFsaWRhdGlvblN1YmplY3RdPVwiU2V0VmFsaWRhdGlvblN1YmplY3RcIiBbRmllbGRBcHBlYXJlbmNlXT1cIkZpZWxkQXBwZWFyZW5jZVwiIFtmb3JjZUludmFsaWRdPVwiRm9yY2VkRXJyb3JcIiBbRmxvYXRpbmdMYWJlbF09XCJGbG9hdGluZ0xhYmVsXCIgW25vVmFsaWRhdGVdPVwiIVZhbGlkYXRpb25cIiBbUmVhZG9ubHldPVwiUmVhZG9ubHlcIiBbc3VibWl0dGVkXT1cIkZvcm0/LnN1Ym1pdHRlZFwiIHR5cGU9XCJ0ZXh0XCIgcGF0dGVybj1cInt7UGF0dGVybiB8fCBGbG9hdFBhdHRlcm59fVwiIFtyZXF1aXJlZF09XCJSZXF1aXJlZFwiIFsobmdNb2RlbCldPVwiTW9kZWxcIiBbaWRdPVwiR2VuZXJhdGVkTmFtZVwiIG5hbWU9XCJ7e0dlbmVyYXRlZE5hbWV9fVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCRldmVudCk7XCIgKGlucHV0Rm9jdXMpPVwiZm9jdXNlZCgkZXZlbnQpO1wiIChpbnB1dEZpbmFsaXplZCk9XCJmaW5hbGl6ZWQoKVwiPjwvdmFsLWlucHV0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tU2UgbnVtZXJvIGludGVyby0tPlxyXG4gICAgPGRpdiAqbmdJZj1cIlR5cGUgPT0gJ2ludCdcIj5cclxuICAgICAgICA8dmFsLWlucHV0ICN2YWxpZGF0aW9uQ29udHJvbD1cIm5nTW9kZWxcIiBbRm9jdXNTdWJqZWN0XT1cIkZvY3VzU3ViamVjdFwiIFtTZXRWYWxpZGF0aW9uU3ViamVjdF09XCJTZXRWYWxpZGF0aW9uU3ViamVjdFwiIFtGaWVsZEFwcGVhcmVuY2VdPVwiRmllbGRBcHBlYXJlbmNlXCIgW2ZvcmNlSW52YWxpZF09XCJGb3JjZWRFcnJvclwiIFtGbG9hdGluZ0xhYmVsXT1cIkZsb2F0aW5nTGFiZWxcIiBbbm9WYWxpZGF0ZV09XCIhVmFsaWRhdGlvblwiIFtSZWFkb25seV09XCJSZWFkb25seVwiIFtzdWJtaXR0ZWRdPVwiRm9ybT8uc3VibWl0dGVkXCIgdHlwZT1cInRleHRcIiBwYXR0ZXJuPVwie3tQYXR0ZXJuIHx8IEludFBhdHRlcm59fVwiIFtyZXF1aXJlZF09XCJSZXF1aXJlZFwiIFsobmdNb2RlbCldPVwiTW9kZWxcIiBbaWRdPVwiR2VuZXJhdGVkTmFtZVwiIG5hbWU9XCJ7e0dlbmVyYXRlZE5hbWV9fVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCRldmVudCk7XCIgKGlucHV0Rm9jdXMpPVwiZm9jdXNlZCgkZXZlbnQpO1wiIChpbnB1dEZpbmFsaXplZCk9XCJmaW5hbGl6ZWQoKVwiPjwvdmFsLWlucHV0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tU2UgYm9vbGVhbi0tPlxyXG4gICAgPGRpdiBjbGFzcz1cIm0tdC01XCIgKm5nSWY9XCJUeXBlID09ICdib29sZWFuJ1wiPlxyXG4gICAgICAgIDxpbnB1dCAjdmFsaWRhdGlvbkNvbnRyb2w9XCJuZ01vZGVsXCIgW3JlYWRvbmx5XT1cIlJlYWRvbmx5XCIgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJhcHAtcG9pbnRlclwiIFsobmdNb2RlbCldPVwiTW9kZWxcIiBpZD1cInt7R2VuZXJhdGVkTmFtZX19XCIgbmFtZT1cInt7R2VuZXJhdGVkTmFtZX19XCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlZCgpOyBmaW5hbGl6ZWQoKTtcIiAoY2xpY2spPVwiZm9jdXNlZCgkZXZlbnQpO1wiIC8+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS1TZSBlbnVtLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiVHlwZSA9PSAnZW51bSdcIj5cclxuICAgICAgICA8dmFsLXNlbGVjdCAjdmFsaWRhdGlvbkNvbnRyb2w9XCJuZ01vZGVsXCIgW0ZvY3VzU3ViamVjdF09XCJGb2N1c1N1YmplY3RcIiBbU2V0VmFsaWRhdGlvblN1YmplY3RdPVwiU2V0VmFsaWRhdGlvblN1YmplY3RcIiBbRmllbGRBcHBlYXJlbmNlXT1cIkZpZWxkQXBwZWFyZW5jZVwiIFtmb3JjZUludmFsaWRdPVwiRm9yY2VkRXJyb3JcIiBbbm9WYWxpZGF0ZV09XCIhVmFsaWRhdGlvblwiIFtSZWFkb25seV09XCJSZWFkb25seVwiIFtzdWJtaXR0ZWRdPVwiRm9ybT8uc3VibWl0dGVkXCIgW3BsYWNlSG9sZGVyVmFsdWVdPVwiJydcIiBbcGxhY2Vob2xkZXJdPVwiUmVxdWlyZWQgPyAoJ1NlbGVjdCcgfCBsb2NhbGl6ZSA6IGxjKSArICcuLi4nIDogUGxhY2Vob2xkZXJcIiBbcmVxdWlyZWRdPVwiUmVxdWlyZWRcIiBbKG5nTW9kZWwpXT1cIk1vZGVsXCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoJGV2ZW50KTtcIiAoaW5wdXRGb2N1cyk9XCJmb2N1c2VkKCRldmVudCk7XCIgKGlucHV0RmluYWxpemVkKT1cImZpbmFsaXplZCgpXCIgW2lkXT1cIkdlbmVyYXRlZE5hbWVcIiBuYW1lPVwie3tHZW5lcmF0ZWROYW1lfX1cIj5cclxuICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgdmFsIG9mIEJvdW5kU291cmNlXCIgW3ZhbHVlXT1cInZhbC5pZFwiPnt7dmFsLmRlc2NyaXB0aW9ufX08L29wdGlvbj5cclxuICAgICAgICA8L3ZhbC1zZWxlY3Q+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS1TZSBhdXRvY29tcGxldGUtLT5cclxuICAgIDxkaXYgKm5nSWY9XCJUeXBlID09ICdhdXRvY29tcGxldGUnXCI+XHJcbiAgICAgICAgPHZhbC1hdXRvY29tcGxldGUgI3ZhbGlkYXRpb25Db250cm9sPVwibmdNb2RlbFwiIFtGb2N1c1N1YmplY3RdPVwiRm9jdXNTdWJqZWN0XCIgW1NldFZhbGlkYXRpb25TdWJqZWN0XT1cIlNldFZhbGlkYXRpb25TdWJqZWN0XCIgW0ZpZWxkQXBwZWFyZW5jZV09XCJGaWVsZEFwcGVhcmVuY2VcIiBbZm9yY2VJbnZhbGlkXT1cIkZvcmNlZEVycm9yXCIgW25vVmFsaWRhdGVdPVwiIVZhbGlkYXRpb25cIiBbUmVhZG9ubHldPVwiUmVhZG9ubHlcIiBbc3VibWl0dGVkXT1cIkZvcm0/LnN1Ym1pdHRlZFwiIFtyZXF1aXJlZF09XCJSZXF1aXJlZFwiIFtwbGFjZWhvbGRlcl09XCJSZXF1aXJlZCA/ICgnU2VsZWN0JyB8IGxvY2FsaXplIDogbGMpICsgJy4uLicgOiBQbGFjZWhvbGRlclwiIFsobmdNb2RlbCldPVwiTW9kZWxcIiBbaWRdPVwiR2VuZXJhdGVkTmFtZVwiIG5hbWU9XCJ7e0dlbmVyYXRlZE5hbWV9fVwiIFtGaWx0ZXJlZFNvdXJjZV09XCJGaWx0ZXJlZEJvdW5kU291cmNlXCIgKGlucHV0Q2hhbmdlKT1cImZpbHRlclNvdXJjZSgkZXZlbnQpOyBjaGFuZ2VkKCRldmVudCk7XCIgKGlucHV0Rm9jdXMpPVwiZm9jdXNlZCgkZXZlbnQpO1wiIChpbnB1dEZpbmFsaXplZCk9XCJmaW5hbGl6ZWQoKVwiPjwvdmFsLWF1dG9jb21wbGV0ZT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLVNlIGRhdGUgdGltZS0tPlxyXG4gICAgPGRpdiAqbmdJZj1cIlR5cGUgPT0gJ2RhdGV0aW1lJ1wiPlxyXG4gICAgICAgIDx2YWwtZGF0ZXRpbWUgI3ZhbGlkYXRpb25Db250cm9sPVwibmdNb2RlbFwiIFtGb2N1c1N1YmplY3RdPVwiRm9jdXNTdWJqZWN0XCIgW1NldFZhbGlkYXRpb25TdWJqZWN0XT1cIlNldFZhbGlkYXRpb25TdWJqZWN0XCIgW0ZpZWxkQXBwZWFyZW5jZV09XCJGaWVsZEFwcGVhcmVuY2VcIiBbZm9yY2VJbnZhbGlkXT1cIkZvcmNlZEVycm9yXCIgW0Zsb2F0aW5nTGFiZWxdPVwiRmxvYXRpbmdMYWJlbFwiIFtub1ZhbGlkYXRlXT1cIiFWYWxpZGF0aW9uXCIgW1JlYWRvbmx5XT1cIlJlYWRvbmx5XCIgW3N1Ym1pdHRlZF09XCJGb3JtPy5zdWJtaXR0ZWRcIiBbcmVxdWlyZWRdPVwiUmVxdWlyZWRcIiBbdXNlSnNEYXRlc109XCJ1c2VKc0RhdGVzXCIgWyhuZ01vZGVsKV09XCJNb2RlbFwiIFtpZF09XCJHZW5lcmF0ZWROYW1lXCIgbmFtZT1cInt7R2VuZXJhdGVkTmFtZX19XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoJGV2ZW50KTtcIiAoaW5wdXRGb2N1cyk9XCJmb2N1c2VkKCRldmVudCk7XCIgKGlucHV0RmluYWxpemVkKT1cImZpbmFsaXplZCgpXCI+PC92YWwtZGF0ZXRpbWU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS1TZSB0aW1lLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiVHlwZSA9PSAndGltZSdcIj5cclxuICAgICAgICA8bmd4LW1hdC10aW1lcGlja2VyIG5hbWU9XCJ2YWwtdGltZVwiICNlbGVtZW50UmVmICNiYXNlSW5wdXQ9XCJuZ01vZGVsXCIgWyhuZ01vZGVsKV09XCJNb2RlbFwiIFtkaXNhYmxlZF09XCJSZWFkb25seVwiXHJcbiAgICAgICAgW3Nob3dTcGlubmVyc109XCJmYWxzZVwiIFtzdGVwSG91cl09XCIyXCIgW3N0ZXBNaW51dGVdPVwiNVwiIFtzdGVwU2Vjb25kXT1cIjMwXCJcclxuICAgICAgICBbc2hvd1NlY29uZHNdPVwidHJ1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZWQoKVwiICN2YWxpZGF0aW9uQ29udHJvbD1cIm5nTW9kZWxcIj5cclxuICAgICAgICA8L25neC1tYXQtdGltZXBpY2tlcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLVNlIGZpbGUtLT5cclxuICAgIDxkaXYgKm5nSWY9XCJUeXBlID09ICdmaWxlJ1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBmaWxlLXVwbG9hZFwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiAoY2hhbmdlKT1cImZpbGVDaGFuZ2UoKVwiICNmaWxlSW5wdXQgaWQ9XCJ7e0dlbmVyYXRlZE5hbWV9fVwiIGNsYXNzPVwiZmlsZS11cGxvYWQtYnRuIGFwcC1wb2ludGVyXCIgW211bHRpcGxlXT1cIm51bGxcIi8+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFtjbGFzcy5mcm0tcGFkZGluZy1sZWZ0LTIyXT1cIkFsbG93RG93bmxvYWQgJiYgTW9kZWxGaWxlLmZpbGVuYW1lICYmIE1vZGVsRmlsZS5maWxlYjY0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgY2hlY2tpbmctZmllbGRcIiBwbGFjZWhvbGRlcj1cInt7J1NlbGVjdCBhIGZpbGUnIHwgbG9jYWxpemUgOiBsY319Li4uXCIgWyhuZ01vZGVsKV09XCJNb2RlbEZpbGUuZmlsZW5hbWVcIiBuYW1lPVwiZHNmaWxlXCIgI3ZhbGlkYXRpb25Db250cm9sPVwibmdNb2RlbFwiIFtyZXF1aXJlZF09XCJSZXF1aXJlZFwiLz5cclxuICAgIFxyXG4gICAgICAgICAgICA8YSBjbGFzcz1cImZhIGZhLWRvd25sb2FkIGFwcC1wb2ludGVyIGFwcC1pbnB1dC1pY29uXCIgKm5nSWY9XCJBbGxvd0Rvd25sb2FkICYmIE1vZGVsRmlsZS5maWxlbmFtZSAmJiBNb2RlbEZpbGUuZmlsZWI2NFwiIChjbGljayk9XCJkb3dubG9hZEF0dGFjaG1lbnQoKVwiPjwvYT5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10aW1lcyBkZWxldGUtZmlsZVwiIChjbGljayk9XCJmaWxlQ2hhbmdlKHRydWUpXCIgKm5nSWY9XCJNb2RlbEZpbGUuZmlsZW5hbWVcIj48L2k+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtYnRuXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1maWxlLXVwbG9hZFwiIHR5cGU9XCJidXR0b25cIj48aSBjbGFzcz1cImZhIGZhLXVwbG9hZFwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19