igniteui-angular 14.0.10 → 14.0.13

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.
@@ -524,6 +524,9 @@ export class IgxTreeNodeComponent extends ToggleAnimationPlayer {
524
524
  * ```
525
525
  */
526
526
  expand() {
527
+ if (this.expanded && !this.treeService.collapsingNodes.has(this)) {
528
+ return;
529
+ }
527
530
  const args = {
528
531
  owner: this.tree,
529
532
  node: this,
@@ -552,6 +555,9 @@ export class IgxTreeNodeComponent extends ToggleAnimationPlayer {
552
555
  * ```
553
556
  */
554
557
  collapse() {
558
+ if (!this.expanded || this.treeService.collapsingNodes.has(this)) {
559
+ return;
560
+ }
555
561
  const args = {
556
562
  owner: this.tree,
557
563
  node: this,
@@ -645,4 +651,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImpor
645
651
  }], expanded: [{
646
652
  type: Input
647
653
  }] } });
648
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ub2RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi90cmVlL3RyZWUtbm9kZS90cmVlLW5vZGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL3RyZWUvdHJlZS1ub2RlL3RyZWUtbm9kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsU0FBUyxFQUNULGVBQWUsRUFDZixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFFTixRQUFRLEVBQ1IsV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRW5FLE9BQU8sRUFBRSxxQkFBcUIsRUFBMkIsTUFBTSxrREFBa0QsQ0FBQztBQUNsSCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUVoRyxPQUFPLEVBR0gsb0JBQW9CLEVBQ3BCLGtCQUFrQixFQUNsQix1QkFBdUIsRUFFMUIsTUFBTSxXQUFXLENBQUM7Ozs7Ozs7OztBQUtuQixxQ0FBcUM7QUFDckM7OztHQUdHO0FBSUgsTUFBTSxPQUFPLHdCQUF3QjtJQTBDakMsWUFDUSxJQUFzQixFQUNsQixVQUFvQyxFQUNyQyxVQUFzQjtRQUZ6QixTQUFJLEdBQUosSUFBSSxDQUFrQjtRQUNsQixlQUFVLEdBQVYsVUFBVSxDQUEwQjtRQUNy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LEVBQUU7Z0JBS3hELFNBQVM7c0JBRGYsZUFBZTt1QkFBQyx1QkFBdUIsRUFBRSxFQUFFLElBQUksRUFBRSx1QkFBdUIsRUFBRTtnQkFLcEUsV0FBVztzQkFEakIsZUFBZTt1QkFBQyx1QkFBdUIsRUFBRSxFQUFFLElBQUksRUFBRSx1QkFBdUIsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQXNCdkYsTUFBTTtzQkFEWixTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBSXhDLCtCQUErQjtzQkFEdEMsU0FBUzt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJMUQsaUJBQWlCO3NCQUR4QixTQUFTO3VCQUFDLG1CQUFtQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkE4RnpDLFFBQVE7c0JBRGxCLEtBQUs7Z0JBb0NLLFFBQVE7c0JBRGxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNraXBTZWxmLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERpc3BsYXlEZW5zaXR5IH0gZnJvbSAnLi4vLi4vY29yZS9kaXNwbGF5RGVuc2l0eSc7XG5pbXBvcnQgeyBDdXJyZW50UmVzb3VyY2VTdHJpbmdzIH0gZnJvbSAnLi4vLi4vY29yZS9pMThuL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBJVHJlZVJlc291cmNlU3RyaW5ncyB9IGZyb20gJy4uLy4uL2NvcmUvaTE4bi90cmVlLXJlc291cmNlcyc7XG5pbXBvcnQgeyBUb2dnbGVBbmltYXRpb25QbGF5ZXIsIFRvZ2dsZUFuaW1hdGlvblNldHRpbmdzIH0gZnJvbSAnLi4vLi4vZXhwYW5zaW9uLXBhbmVsL3RvZ2dsZS1hbmltYXRpb24tY29tcG9uZW50JztcbmltcG9ydCB7IElneEFuZ3VsYXJBbmltYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYW5pbWF0aW9uL2FuZ3VsYXItYW5pbWF0aW9uLXNlcnZpY2UnO1xuaW1wb3J0IHsgQW5pbWF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FuaW1hdGlvbi9hbmltYXRpb24nO1xuaW1wb3J0IHtcbiAgICBJZ3hUcmVlLFxuICAgIElneFRyZWVOb2RlLFxuICAgIElneFRyZWVTZWxlY3Rpb25UeXBlLFxuICAgIElHWF9UUkVFX0NPTVBPTkVOVCxcbiAgICBJR1hfVFJFRV9OT0RFX0NPTVBPTkVOVCxcbiAgICBJVHJlZU5vZGVUb2dnbGluZ0V2ZW50QXJnc1xufSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgSWd4VHJlZU5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vdHJlZS1uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4VHJlZVNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi90cmVlLXNlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IElneFRyZWVTZXJ2aWNlIH0gZnJvbSAnLi4vdHJlZS5zZXJ2aWNlJztcblxuLy8gVE9ETzogSW1wbGVtZW50IGFyaWEgZnVuY3Rpb25hbGl0eVxuLyoqXG4gKiBAaGlkZGVuIEBpbnRlcm5hbFxuICogVXNlZCBmb3IgbGlua3MgKGBhYCB0YWdzKSBpbiB0aGUgYm9keSBvZiBhbiBgaWd4LXRyZWUtbm9kZWAuIEhhbmRsZXMgYXJpYSBhbmQgZXZlbnQgZGlzcGF0Y2guXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiBgW2lneFRyZWVOb2RlTGlua11gXG59KVxuZXhwb3J0IGNsYXNzIElneFRyZWVOb2RlTGlua0RpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpXG4gICAgcHVibGljIHJvbGUgPSAndHJlZWl0ZW0nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG5vZGUncyBwYXJlbnQuIFNob3VsZCBiZSB1c2VkIG9ubHkgd2hlbiB0aGUgbGluayBpcyBkZWZpbmVkXG4gICAgICogaW4gYDxuZy10ZW1wbGF0ZT5gIHRhZyBvdXRzaWRlIG9mIGl0cyBwYXJlbnQsIGFzIEFuZ3VsYXIgREkgd2lsbCBub3QgcHJvcGVybHkgcHJvdmlkZSBhIHJlZmVyZW5jZVxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdHJlZT5cbiAgICAgKiAgICAgPGlneC10cmVlLW5vZGUgI215Tm9kZSAqbmdGb3I9XCJsZXQgbm9kZSBvZiBkYXRhXCIgW2RhdGFdPVwibm9kZVwiPlxuICAgICAqICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwibm9kZVRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogZGF0YSwgcGFyZW50Tm9kZTogbXlOb2RlIH1cIj5cbiAgICAgKiAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICogICAgIDwvaWd4LXRyZWUtbm9kZT5cbiAgICAgKiAgICAgLi4uXG4gICAgICogICAgIDwhLS0gbm9kZSB0ZW1wbGF0ZSBpcyBkZWZpbmVkIHVuZGVyIHRyZWUgdG8gYWNjZXNzIHJlbGF0ZWQgc2VydmljZXMgLS0+XG4gICAgICogICAgIDxuZy10ZW1wbGF0ZSAjbm9kZVRlbXBsYXRlIGxldC1kYXRhIGxldC1ub2RlPVwicGFyZW50Tm9kZVwiPlxuICAgICAqICAgICAgICAgPGEgW2lneFRyZWVOb2RlTGlua109XCJub2RlXCI+e3sgZGF0YS5sYWJlbCB9fTwvYT5cbiAgICAgKiAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgKiA8L2lneC10cmVlPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgnaWd4VHJlZU5vZGVMaW5rJylcbiAgICBwdWJsaWMgc2V0IHBhcmVudE5vZGUodmFsOiBhbnkpIHtcbiAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5fcGFyZW50Tm9kZSA9IHZhbDtcbiAgICAgICAgICAgICh0aGlzLl9wYXJlbnROb2RlIGFzIGFueSkuYWRkTGlua0NoaWxkKHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwYXJlbnROb2RlKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXJlbnROb2RlO1xuICAgIH1cblxuICAgIC8qKiBBIHBvaW50ZXIgdG8gdGhlIHBhcmVudCBub2RlICovXG4gICAgcHJpdmF0ZSBnZXQgdGFyZ2V0KCk6IElneFRyZWVOb2RlPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2RlIHx8IHRoaXMucGFyZW50Tm9kZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wYXJlbnROb2RlOiBJZ3hUcmVlTm9kZTxhbnk+ID0gbnVsbDtcblxuICAgIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBJbmplY3QoSUdYX1RSRUVfTk9ERV9DT01QT05FTlQpXG4gICAgcHJpdmF0ZSBub2RlOiBJZ3hUcmVlTm9kZTxhbnk+LFxuICAgICAgICBwcml2YXRlIG5hdlNlcnZpY2U6IElneFRyZWVOYXZpZ2F0aW9uU2VydmljZSxcbiAgICAgICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIudGFiaW5kZXgnKVxuICAgIHB1YmxpYyBnZXQgdGFiSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2U2VydmljZS5mb2N1c2VkTm9kZSA9PT0gdGhpcy50YXJnZXQgPyAodGhpcy50YXJnZXQ/LmRpc2FibGVkID8gLTEgOiAwKSA6IC0xO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICogQ2xlYXIgdGhlIG5vZGUncyBmb2N1c2VkIHN0YXRlXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignYmx1cicpXG4gICAgcHVibGljIGhhbmRsZUJsdXIoKSB7XG4gICAgICAgIHRoaXMudGFyZ2V0LmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICogU2V0IHRoZSBub2RlIGFzIGZvY3VzZWRcbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdmb2N1cycpXG4gICAgcHVibGljIGhhbmRsZUZvY3VzKCkge1xuICAgICAgICBpZiAodGhpcy50YXJnZXQgJiYgIXRoaXMudGFyZ2V0LmRpc2FibGVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5uYXZTZXJ2aWNlLmZvY3VzZWROb2RlICE9PSB0aGlzLnRhcmdldCkge1xuICAgICAgICAgICAgICAgIHRoaXMubmF2U2VydmljZS5mb2N1c2VkTm9kZSA9IHRoaXMudGFyZ2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50YXJnZXQuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy50YXJnZXQucmVtb3ZlTGlua0NoaWxkKHRoaXMpO1xuICAgIH1cbn1cblxuLyoqXG4gKlxuICogVGhlIHRyZWUgbm9kZSBjb21wb25lbnQgcmVwcmVzZW50cyBhIGNoaWxkIG5vZGUgb2YgdGhlIHRyZWUgY29tcG9uZW50IG9yIGFub3RoZXIgdHJlZSBub2RlLlxuICogVXNhZ2U6XG4gKlxuICogYGBgaHRtbFxuICogIDxpZ3gtdHJlZT5cbiAqICAuLi5cbiAqICAgIDxpZ3gtdHJlZS1ub2RlIFtkYXRhXT1cImRhdGFcIiBbc2VsZWN0ZWRdPVwic2VydmljZS5pc05vZGVTZWxlY3RlZChkYXRhLktleSlcIiBbZXhwYW5kZWRdPVwic2VydmljZS5pc05vZGVFeHBhbmRlZChkYXRhLktleSlcIj5cbiAqICAgICAge3sgZGF0YS5GaXJzdE5hbWUgfX0ge3sgZGF0YS5MYXN0TmFtZSB9fVxuICogICAgPC9pZ3gtdHJlZS1ub2RlPlxuICogIC4uLlxuICogIDwvaWd4LXRyZWU+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtdHJlZS1ub2RlJyxcbiAgICB0ZW1wbGF0ZVVybDogJ3RyZWUtbm9kZS5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogSUdYX1RSRUVfTk9ERV9DT01QT05FTlQsIHVzZUV4aXN0aW5nOiBJZ3hUcmVlTm9kZUNvbXBvbmVudCB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hUcmVlTm9kZUNvbXBvbmVudDxUPiBleHRlbmRzIFRvZ2dsZUFuaW1hdGlvblBsYXllciBpbXBsZW1lbnRzIElneFRyZWVOb2RlPFQ+LCBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqXG4gICAgICogVGhlIGRhdGEgZW50cnkgdGhhdCB0aGUgbm9kZSBpcyB2aXN1YWxpemluZy5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogUmVxdWlyZWQgZm9yIHNlYXJjaGluZyB0aHJvdWdoIG5vZGVzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtdHJlZT5cbiAgICAgKiAgLi4uXG4gICAgICogICAgPGlneC10cmVlLW5vZGUgW2RhdGFdPVwiZGF0YVwiPlxuICAgICAqICAgICAge3sgZGF0YS5GaXJzdE5hbWUgfX0ge3sgZGF0YS5MYXN0TmFtZSB9fVxuICAgICAqICAgIDwvaWd4LXRyZWUtbm9kZT5cbiAgICAgKiAgLi4uXG4gICAgICogIDwvaWd4LXRyZWU+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGF0YTogVDtcblxuICAgIC8qKlxuICAgICAqIFRvIGJlIHVzZWQgZm9yIGxvYWQtb24tZGVtYW5kIHNjZW5hcmlvcyBpbiBvcmRlciB0byBzcGVjaWZ5IHdoZXRoZXIgdGhlIG5vZGUgaXMgbG9hZGluZyBkYXRhLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBMb2FkaW5nIG5vZGVzIGRvIG5vdCByZW5kZXIgY2hpbGRyZW4uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLy8gVE8gRE86IHJldHVybiBkaWZmZXJlbnQgdGFiIGluZGV4IGRlcGVuZGluZyBvbiBhbmNob3IgY2hpbGRcbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgc2V0IHRhYkluZGV4KHZhbDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX3RhYkluZGV4ID0gdmFsO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgdGFiSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fdGFiSW5kZXggPT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm5hdlNlcnZpY2UuZm9jdXNlZE5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oYXNMaW5rQ2hpbGRyZW4gPyAtMSA6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzTGlua0NoaWxkcmVuID8gLTEgOiB0aGlzLl90YWJJbmRleDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGFuaW1hdGlvblNldHRpbmdzKCk6IFRvZ2dsZUFuaW1hdGlvblNldHRpbmdzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJlZS5hbmltYXRpb25TZXR0aW5ncztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFVzZXMgRU4gcmVzb3VyY2VzIGJ5IGRlZmF1bHQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHJlc291cmNlU3RyaW5ncyh2YWx1ZTogSVRyZWVSZXNvdXJjZVN0cmluZ3MpIHtcbiAgICAgICAgdGhpcy5fcmVzb3VyY2VTdHJpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fcmVzb3VyY2VTdHJpbmdzLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gYWNjZXNzb3IgdGhhdCByZXR1cm5zIHRoZSByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcmVzb3VyY2VTdHJpbmdzKCk6IElUcmVlUmVzb3VyY2VTdHJpbmdzIHtcbiAgICAgICAgaWYgKCF0aGlzLl9yZXNvdXJjZVN0cmluZ3MpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jlc291cmNlU3RyaW5ncyA9IEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MuVHJlZVJlc1N0cmluZ3M7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlU3RyaW5ncztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIGFjdGl2ZSBzdGF0ZSBvZiB0aGUgbm9kZVxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlOiBib29sZWFuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGFjdGl2ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMubmF2U2VydmljZS5hY3RpdmVOb2RlID0gdGhpcztcbiAgICAgICAgICAgIHRoaXMudHJlZS5hY3RpdmVOb2RlQmluZGluZ0NoYW5nZS5lbWl0KHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdlNlcnZpY2UuYWN0aXZlTm9kZSA9PT0gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIG5vZGUncyBgc2VsZWN0ZWRgIHByb3BlcnR5IGNoYW5nZXMuXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10cmVlPlxuICAgICAqICAgICAgPGlneC10cmVlLW5vZGUgKm5nRm9yPVwibGV0IG5vZGUgb2YgZGF0YVwiIFtkYXRhXT1cIm5vZGVcIiBbKHNlbGVjdGVkKV09XCJub2RlLnNlbGVjdGVkXCI+XG4gICAgICogICAgICA8L2lneC10cmVlLW5vZGU+XG4gICAgICogPC9pZ3gtdHJlZT5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBub2RlOiBJZ3hUcmVlTm9kZTxhbnk+ID0gdGhpcy50cmVlLmZpbmROb2RlcyhkYXRhWzBdKVswXTtcbiAgICAgKiBub2RlLnNlbGVjdGVkQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU6IGJvb2xlYW4pID0+IGNvbnNvbGUubG9nKFwiTm9kZSBzZWxlY3Rpb24gY2hhbmdlZCB0byBcIiwgZSkpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHNlbGVjdGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBub2RlJ3MgYGV4cGFuZGVkYCBwcm9wZXJ0eSBjaGFuZ2VzLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdHJlZT5cbiAgICAgKiAgICAgIDxpZ3gtdHJlZS1ub2RlICpuZ0Zvcj1cImxldCBub2RlIG9mIGRhdGFcIiBbZGF0YV09XCJub2RlXCIgWyhleHBhbmRlZCldPVwibm9kZS5leHBhbmRlZFwiPlxuICAgICAqICAgICAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAqIDwvaWd4LXRyZWU+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3Qgbm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IHRoaXMudHJlZS5maW5kTm9kZXMoZGF0YVswXSlbMF07XG4gICAgICogbm9kZS5leHBhbmRlZENoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlOiBib29sZWFuKSA9PiBjb25zb2xlLmxvZyhcIk5vZGUgZXhwYW5zaW9uIHN0YXRlIGNoYW5nZWQgdG8gXCIsIGUpKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBleHBhbmRlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgZm9jdXNlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNGb2N1c2VkICYmXG4gICAgICAgICAgICB0aGlzLm5hdlNlcnZpY2UuZm9jdXNlZE5vZGUgPT09IHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBmdWxsIHBhdGggdG8gdGhlIG5vZGUgaW5jdWRpbmcgaXRzZWxmXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3Qgbm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IHRoaXMudHJlZS5maW5kTm9kZXMoZGF0YVswXSlbMF07XG4gICAgICogY29uc3QgcGF0aDogSWd4VHJlZU5vZGU8YW55PltdID0gbm9kZS5wYXRoO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcGF0aCgpOiBJZ3hUcmVlTm9kZTxhbnk+W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnROb2RlPy5wYXRoID8gWy4uLnRoaXMucGFyZW50Tm9kZS5wYXRoLCB0aGlzXSA6IFt0aGlzXTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBiaW5kIHRvIGRpc2FibGVkIHN0YXRlIHdoZW4gbm9kZSBpcyBkcmFnZ2VkXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSBkaXNhYmxlZCBzdGF0ZSBvZiB0aGUgbm9kZVxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlOiBib29sZWFuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC10cmVlLW5vZGUtLWRpc2FibGVkJylcbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodmFsdWUgIT09IHRoaXMuX2Rpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy50cmVlLmRpc2FibGVkQ2hhbmdlLmVtaXQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC10cmVlLW5vZGUnKVxuICAgIHB1YmxpYyBjc3NDbGFzcyA9ICdpZ3gtdHJlZS1ub2RlJztcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJylcbiAgICBwdWJsaWMgZ2V0IHJvbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc0xpbmtDaGlsZHJlbiA/ICdub25lJyA6ICd0cmVlaXRlbSc7XG4gICAgfTtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oSWd4VHJlZU5vZGVMaW5rRGlyZWN0aXZlLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwdWJsaWMgbGlua0NoaWxkcmVuOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKElHWF9UUkVFX05PREVfQ09NUE9ORU5ULCB7IHJlYWQ6IElHWF9UUkVFX05PREVfQ09NUE9ORU5UIH0pXG4gICAgcHVibGljIF9jaGlsZHJlbjogUXVlcnlMaXN0PElneFRyZWVOb2RlPGFueT4+O1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihJR1hfVFJFRV9OT0RFX0NPTVBPTkVOVCwgeyByZWFkOiBJR1hfVFJFRV9OT0RFX0NPTVBPTkVOVCwgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgICBwdWJsaWMgYWxsQ2hpbGRyZW46IFF1ZXJ5TGlzdDxJZ3hUcmVlTm9kZTxhbnk+PjtcblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhlIG5vZGUgKGlmIGFueSlcbiAgICAgKlxuICAgICAqIEByZW1hcmtcbiAgICAgKiBSZXR1cm5zIGBudWxsYCBpZiBub2RlIGRvZXMgbm90IGhhdmUgY2hpbGRyZW5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG5vZGU6IElneFRyZWVOb2RlPGFueT4gPSB0aGlzLnRyZWUuZmluZE5vZGVzKGRhdGFbMF0pWzBdO1xuICAgICAqIGNvbnN0IGNoaWxkcmVuOiBJZ3hUcmVlTm9kZTxhbnk+W10gPSBub2RlLmNoaWxkcmVuO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY2hpbGRyZW4oKTogSWd4VHJlZU5vZGU8YW55PltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuPy5sZW5ndGggPyB0aGlzLl9jaGlsZHJlbi50b0FycmF5KCkgOiBudWxsO1xuICAgIH1cblxuICAgIC8vIFRPRE86IHdpbGwgYmUgdXNlZCBpbiBEcmFnIGFuZCBEcm9wIGltcGxlbWVudGF0aW9uXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQFZpZXdDaGlsZCgnZ2hvc3RUZW1wbGF0ZScsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHB1YmxpYyBoZWFkZXI6IEVsZW1lbnRSZWY7XG5cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0SW5kaWNhdG9yJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBfZGVmYXVsdEV4cGFuZEluZGljYXRvclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZCgnY2hpbGRyZW5Db250YWluZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwcml2YXRlIGNoaWxkcmVuQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuXG4gICAgcHJpdmF0ZSBnZXQgaGFzTGlua0NoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5saW5rQ2hpbGRyZW4/Lmxlbmd0aCA+IDAgfHwgdGhpcy5yZWdpc3RlcmVkQ2hpbGRyZW4/Lmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBpc0NvbXBhY3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyZWU/LmRpc3BsYXlEZW5zaXR5ID09PSBEaXNwbGF5RGVuc2l0eS5jb21wYWN0O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgaXNDb3N5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlPy5kaXNwbGF5RGVuc2l0eSA9PT0gRGlzcGxheURlbnNpdHkuY29zeTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaXNGb2N1c2VkOiBib29sZWFuO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHJlZ2lzdGVyZWRDaGlsZHJlbjogSWd4VHJlZU5vZGVMaW5rRGlyZWN0aXZlW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHByaXZhdGUgX3Jlc291cmNlU3RyaW5ncyA9IEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MuVHJlZVJlc1N0cmluZ3M7XG5cbiAgICBwcml2YXRlIF90YWJJbmRleCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KElHWF9UUkVFX0NPTVBPTkVOVCkgcHVibGljIHRyZWU6IElneFRyZWUsXG4gICAgICAgIHByb3RlY3RlZCBzZWxlY3Rpb25TZXJ2aWNlOiBJZ3hUcmVlU2VsZWN0aW9uU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIHRyZWVTZXJ2aWNlOiBJZ3hUcmVlU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIG5hdlNlcnZpY2U6IElneFRyZWVOYXZpZ2F0aW9uU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBJbmplY3QoSWd4QW5ndWxhckFuaW1hdGlvblNlcnZpY2UpcHJvdGVjdGVkIGFuaW1hdGlvblNlcnZpY2U6IEFuaW1hdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIEBJbmplY3QoSUdYX1RSRUVfTk9ERV9DT01QT05FTlQpIHB1YmxpYyBwYXJlbnROb2RlOiBJZ3hUcmVlTm9kZTxhbnk+XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGFuaW1hdGlvblNlcnZpY2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBzaG93U2VsZWN0b3JzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlLnNlbGVjdGlvbiAhPT0gSWd4VHJlZVNlbGVjdGlvblR5cGUuTm9uZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaW5kZXRlcm1pbmF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uU2VydmljZS5pc05vZGVJbmRldGVybWluYXRlKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgZGVwdGggb2YgdGhlIG5vZGUsIHJlbGF0aXZlIHRvIHRoZSByb290XG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10cmVlPlxuICAgICAqICAuLi5cbiAgICAgKiAgPGlneC10cmVlLW5vZGUgI25vZGU+XG4gICAgICogICAgICBNeSBsZXZlbCBpcyB7eyBub2RlLmxldmVsIH19XG4gICAgICogIDwvaWd4LXRyZWUtbm9kZT5cbiAgICAgKiA8L2lneC10cmVlPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG5vZGU6IElneFRyZWVOb2RlPGFueT4gPSB0aGlzLnRyZWUuZmluZE5vZGVzKGRhdGFbMTJdKVswXTtcbiAgICAgKiBjb25zdCBsZXZlbDogbnVtYmVyID0gbm9kZS5sZXZlbDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGxldmVsKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudE5vZGUgPyB0aGlzLnBhcmVudE5vZGUubGV2ZWwgKyAxIDogMDtcbiAgICB9XG5cbiAgICAvKiogR2V0L3NldCB3aGV0aGVyIHRoZSBub2RlIGlzIHNlbGVjdGVkLiBTdXBwb3JzdCB0d28td2F5IGJpbmRpbmcuXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10cmVlPlxuICAgICAqICAuLi5cbiAgICAgKiAgPGlneC10cmVlLW5vZGUgKm5nRm9yPVwibGV0IG5vZGUgb2YgZGF0YVwiIFsoc2VsZWN0ZWQpXT1cIm5vZGUuc2VsZWN0ZWRcIj5cbiAgICAgKiAgICAgIHt7IG5vZGUubGFiZWwgfX1cbiAgICAgKiAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAqIDwvaWd4LXRyZWU+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3Qgbm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IHRoaXMudHJlZS5maW5kTm9kZXMoZGF0YVswXSlbMF07XG4gICAgICogY29uc3Qgc2VsZWN0ZWQgPSBub2RlLnNlbGVjdGVkO1xuICAgICAqIG5vZGUuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBzZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uU2VydmljZS5pc05vZGVTZWxlY3RlZCh0aGlzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHNlbGVjdGVkKHZhbDogYm9vbGVhbikge1xuICAgICAgICBpZiAoISh0aGlzLnRyZWU/Lm5vZGVzICYmIHRoaXMudHJlZS5ub2Rlcy5maW5kKChlKSA9PiBlID09PSB0aGlzKSkgJiYgdmFsKSB7XG4gICAgICAgICAgICB0aGlzLnRyZWUuZm9yY2VTZWxlY3QucHVzaCh0aGlzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsICYmICF0aGlzLnNlbGVjdGlvblNlcnZpY2UuaXNOb2RlU2VsZWN0ZWQodGhpcykpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3ROb2Rlc1dpdGhOb0V2ZW50KFt0aGlzXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWwgJiYgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmlzTm9kZVNlbGVjdGVkKHRoaXMpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3ROb2Rlc1dpdGhOb0V2ZW50KFt0aGlzXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogR2V0L3NldCB3aGV0aGVyIHRoZSBub2RlIGlzIGV4cGFuZGVkXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10cmVlPlxuICAgICAqICAuLi5cbiAgICAgKiAgPGlneC10cmVlLW5vZGUgKm5nRm9yPVwibGV0IG5vZGUgb2YgZGF0YVwiIFtleHBhbmRlZF09XCJub2RlLm5hbWUgPT09IHRoaXMuZXhwYW5kZWROb2RlXCI+XG4gICAgICogICAgICB7eyBub2RlLmxhYmVsIH19XG4gICAgICogIDwvaWd4LXRyZWUtbm9kZT5cbiAgICAgKiA8L2lneC10cmVlPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG5vZGU6IElneFRyZWVOb2RlPGFueT4gPSB0aGlzLnRyZWUuZmluZE5vZGVzKGRhdGFbMF0pWzBdO1xuICAgICAqIGNvbnN0IGV4cGFuZGVkID0gbm9kZS5leHBhbmRlZDtcbiAgICAgKiBub2RlLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgZXhwYW5kZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyZWVTZXJ2aWNlLmlzRXhwYW5kZWQodGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBleHBhbmRlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5leHBhbmQodGhpcywgZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5jb2xsYXBzZSh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgZXhwYW5kSW5kaWNhdG9yVGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyZWU/LmV4cGFuZEluZGljYXRvciA/IHRoaXMudHJlZS5leHBhbmRJbmRpY2F0b3IgOiB0aGlzLl9kZWZhdWx0RXhwYW5kSW5kaWNhdG9yVGVtcGxhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hdGl2ZSBET00gZWxlbWVudCByZXByZXNlbnRpbmcgdGhlIG5vZGUuIENvdWxkIGJlIG51bGwgaW4gY2VydGFpbiBlbnZpcm9ubWVudHMuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gZ2V0IHRoZSBuYXRpdmVFbGVtZW50IG9mIHRoZSBzZWNvbmQgbm9kZVxuICAgICAqIGNvbnN0IG5vZGU6IElneFRyZWVOb2RlID0gdGhpcy50cmVlLm5vZGVzLmZpcnN0KCk7XG4gICAgICogY29uc3Qgbm9kZUVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gbm9kZS5uYXRpdmVFbGVtZW50O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgbmF0aXZlRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5vcGVuQW5pbWF0aW9uRG9uZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudHJlZS5ub2RlRXhwYW5kZWQuZW1pdCh7IG93bmVyOiB0aGlzLnRyZWUsIG5vZGU6IHRoaXMgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY2xvc2VBbmltYXRpb25Eb25lLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50cmVlLm5vZGVDb2xsYXBzZWQuZW1pdCh7IG93bmVyOiB0aGlzLnRyZWUsIG5vZGU6IHRoaXMgfSk7XG4gICAgICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLmNvbGxhcHNlKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICogU2V0cyB0aGUgZm9jdXMgdG8gdGhlIG5vZGUncyA8YT4gY2hpbGQsIGlmIHByZXNlbnRcbiAgICAgKiBTZXRzIHRoZSBub2RlIGFzIHRoZSB0cmVlIHNlcnZpY2UncyBmb2N1c2VkTm9kZVxuICAgICAqIE1hcmtzIHRoZSBub2RlIGFzIHRoZSBjdXJyZW50IGFjdGl2ZSBlbGVtZW50XG4gICAgICovXG4gICAgcHVibGljIGhhbmRsZUZvY3VzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm5hdlNlcnZpY2UuZm9jdXNlZE5vZGUgIT09IHRoaXMpIHtcbiAgICAgICAgICAgIHRoaXMubmF2U2VydmljZS5mb2N1c2VkTm9kZSA9IHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0ZvY3VzZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5saW5rQ2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5saW5rQ2hpbGRyZW4uZmlyc3QubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlZ2lzdGVyZWRDaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJlZENoaWxkcmVuWzBdLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKiBDbGVhciB0aGUgbm9kZSdzIGZvY3VzZWQgc3RhdHVzXG4gICAgICovXG4gICAgcHVibGljIGNsZWFyRm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25TZWxlY3RvckNsaWNrKGV2ZW50KSB7XG4gICAgICAgIC8vIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAvLyB0aGlzLm5hdlNlcnZpY2UuaGFuZGxlRm9jdXNlZEFuZEFjdGl2ZU5vZGUodGhpcyk7XG4gICAgICAgIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdE11bHRpcGxlTm9kZXModGhpcywgZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3ROb2RlKHRoaXMsIGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3ROb2RlKHRoaXMsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIG5vZGUgZXhwYW5zaW9uIHN0YXRlLCB0cmlnZ2VyaW5nIGFuaW1hdGlvblxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdHJlZT5cbiAgICAgKiAgICAgIDxpZ3gtdHJlZS1ub2RlICNub2RlPk15IE5vZGU8L2lneC10cmVlLW5vZGU+XG4gICAgICogPC9pZ3gtdHJlZT5cbiAgICAgKiA8YnV0dG9uIGlneEJ1dHRvbiAoY2xpY2spPVwibm9kZS50b2dnbGUoKVwiPlRvZ2dsZSBOb2RlPC9idXR0b24+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgbXlOb2RlOiBJZ3hUcmVlTm9kZTxhbnk+ID0gdGhpcy50cmVlLmZpbmROb2RlcyhkYXRhWzBdKVswXTtcbiAgICAgKiBteU5vZGUudG9nZ2xlKCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY29sbGFwc2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaW5kaWNhdG9yQ2xpY2soKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlKCk7XG4gICAgICAgIHRoaXMubmF2U2VydmljZS5zZXRGb2N1c2VkQW5kQWN0aXZlTm9kZSh0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvblBvaW50ZXJEb3duKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLm5hdlNlcnZpY2Uuc2V0Rm9jdXNlZEFuZEFjdGl2ZU5vZGUodGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZW5zdXJlU3RhdGVPbk5vZGVEZWxldGUodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhwYW5kcyB0aGUgbm9kZSwgdHJpZ2dlcmluZyBhbmltYXRpb25cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRyZWU+XG4gICAgICogICAgICA8aWd4LXRyZWUtbm9kZSAjbm9kZT5NeSBOb2RlPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAqIDwvaWd4LXRyZWU+XG4gICAgICogPGJ1dHRvbiBpZ3hCdXR0b24gKGNsaWNrKT1cIm5vZGUuZXhwYW5kKClcIj5FeHBhbmQgTm9kZTwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG15Tm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IHRoaXMudHJlZS5maW5kTm9kZXMoZGF0YVswXSlbMF07XG4gICAgICogbXlOb2RlLmV4cGFuZCgpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBleHBhbmQoKSB7XG4gICAgICAgIGNvbnN0IGFyZ3M6IElUcmVlTm9kZVRvZ2dsaW5nRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgb3duZXI6IHRoaXMudHJlZSxcbiAgICAgICAgICAgIG5vZGU6IHRoaXMsXG4gICAgICAgICAgICBjYW5jZWw6IGZhbHNlXG5cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50cmVlLm5vZGVFeHBhbmRpbmcuZW1pdChhcmdzKTtcbiAgICAgICAgaWYgKCFhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5leHBhbmQodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB0aGlzLnBsYXlPcGVuQW5pbWF0aW9uKFxuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5Db250YWluZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb2xsYXBzZXMgdGhlIG5vZGUsIHRyaWdnZXJpbmcgYW5pbWF0aW9uXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10cmVlPlxuICAgICAqICAgICAgPGlneC10cmVlLW5vZGUgI25vZGU+TXkgTm9kZTwvaWd4LXRyZWUtbm9kZT5cbiAgICAgKiA8L2lneC10cmVlPlxuICAgICAqIDxidXR0b24gaWd4QnV0dG9uIChjbGljayk9XCJub2RlLmNvbGxhcHNlKClcIj5Db2xsYXBzZSBOb2RlPC9idXR0b24+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgbXlOb2RlOiBJZ3hUcmVlTm9kZTxhbnk+ID0gdGhpcy50cmVlLmZpbmROb2RlcyhkYXRhWzBdKVswXTtcbiAgICAgKiBteU5vZGUuY29sbGFwc2UoKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgY29sbGFwc2UoKSB7XG4gICAgICAgIGNvbnN0IGFyZ3M6IElUcmVlTm9kZVRvZ2dsaW5nRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgb3duZXI6IHRoaXMudHJlZSxcbiAgICAgICAgICAgIG5vZGU6IHRoaXMsXG4gICAgICAgICAgICBjYW5jZWw6IGZhbHNlXG5cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50cmVlLm5vZGVDb2xsYXBzaW5nLmVtaXQoYXJncyk7XG4gICAgICAgIGlmICghYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UuY29sbGFwc2luZyh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucGxheUNsb3NlQW5pbWF0aW9uKFxuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5Db250YWluZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgYWRkTGlua0NoaWxkKGxpbms6IElneFRyZWVOb2RlTGlua0RpcmVjdGl2ZSkge1xuICAgICAgICB0aGlzLl90YWJJbmRleCA9IC0xO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyZWRDaGlsZHJlbi5wdXNoKGxpbmspO1xuICAgIH07XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgcmVtb3ZlTGlua0NoaWxkKGxpbms6IElneFRyZWVOb2RlTGlua0RpcmVjdGl2ZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucmVnaXN0ZXJlZENoaWxkcmVuLmluZGV4T2YobGluayk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJlZENoaWxkcmVuLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8bmctdGVtcGxhdGUgI25vRHJhZ1RlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlclRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gV2lsbCBzd2l0Y2ggdGVtcGxhdGVzIGRlcGVuZGluZyBvbiBkcmFnRHJvcCAtLT5cbjxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cIm5vRHJhZ1RlbXBsYXRlXCI+XG48L25nLXRlbXBsYXRlPlxuXG48ZGl2ICNjaGlsZHJlbkNvbnRhaW5lclxuICAgICpuZ0lmPVwiZXhwYW5kZWQgJiYgIWxvYWRpbmdcIlxuICAgIGNsYXNzPVwiaWd4LXRyZWUtbm9kZV9fZ3JvdXBcIlxuICAgIHJvbGU9XCJncm91cFwiXG4+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LXRyZWUtbm9kZVwiPjwvbmctY29udGVudD5cbjwvZGl2PlxuXG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEluZGljYXRvcj5cbiAgICA8aWd4LWljb24gW2F0dHIuYXJpYS1sYWJlbF09XCJleHBhbmRlZCA/IHJlc291cmNlU3RyaW5ncy5pZ3hfY29sbGFwc2UgOiByZXNvdXJjZVN0cmluZ3MuaWd4X2V4cGFuZFwiPlxuICAgICAgICB7eyBleHBhbmRlZCA/IFwia2V5Ym9hcmRfYXJyb3dfZG93blwiIDogXCJrZXlib2FyZF9hcnJvd19yaWdodFwiIH19XG4gICAgPC9pZ3gtaWNvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gc2VwYXJhdGVkIGluIGEgdGVtcGxhdGUgaW4gY2FzZSB0aGlzIGV2ZXIgbmVlZHMgdG8gYmUgdGVtcGxhdGFibGUgLS0+XG48bmctdGVtcGxhdGUgI3NlbGVjdE1hcmtlclRlbXBsYXRlPlxuICAgIDxpZ3gtY2hlY2tib3ggW2NoZWNrZWRdPVwic2VsZWN0ZWRcIiBbcmVhZG9ubHldPVwidHJ1ZVwiIFtpbmRldGVybWluYXRlXT1cImluZGV0ZXJtaW5hdGVcIiBbdGFiaW5kZXhdPVwiLTFcIj5cbiAgICA8L2lneC1jaGVja2JveD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaGVhZGVyVGVtcGxhdGU+XG4gICAgPGRpdiAjZ2hvc3RUZW1wbGF0ZSBjbGFzcz1cImlneC10cmVlLW5vZGVfX3dyYXBwZXJcIlxuICAgICAgICBbYXR0ci5yb2xlXT1cInJvbGVcIlxuICAgICAgICBbdGFiSW5kZXhdPVwidGFiSW5kZXhcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnaWd4LXRyZWUtbm9kZV9fd3JhcHBlci0tY29zeSc6IGlzQ29zeSxcbiAgICAgICAgICAgICdpZ3gtdHJlZS1ub2RlX193cmFwcGVyLS1jb21wYWN0JzogaXNDb21wYWN0LFxuICAgICAgICAgICAgJ2lneC10cmVlLW5vZGVfX3dyYXBwZXItLXNlbGVjdGVkJzogc2VsZWN0ZWQsXG4gICAgICAgICAgICAnaWd4LXRyZWUtbm9kZV9fd3JhcHBlci0tYWN0aXZlJyA6IHRoaXMuYWN0aXZlLFxuICAgICAgICAgICAgJ2lneC10cmVlLW5vZGVfX3dyYXBwZXItLWZvY3VzZWQnIDogdGhpcy5mb2N1c2VkLFxuICAgICAgICAgICAgJ2lneC10cmVlLW5vZGVfX3dyYXBwZXItLWRpc2FibGVkJyA6IHRoaXMuZGlzYWJsZWRcbiAgICAgICAgfVwiXG4gICAgICAgIChwb2ludGVyZG93bik9XCJvblBvaW50ZXJEb3duKCRldmVudClcIlxuICAgICAgICAoZm9jdXMpPVwiaGFuZGxlRm9jdXMoKVwiXG4gICAgICAgIChibHVyKT1cImNsZWFyRm9jdXMoKVwiXG4gICAgPlxuICAgICAgICA8ZGl2IGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IGl0ZW0gb2YgW10uY29uc3RydWN0b3IobGV2ZWwpXCJcbiAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaWd4LXRyZWUtbm9kZV9fc3BhY2VyXCJcbiAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gRXhwYW5kL0NvbGxhcHNlIGluZGljYXRvciAtLT5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCIhbG9hZGluZ1wiXG4gICAgICAgICAgICBjbGFzcz1cImlneC10cmVlLW5vZGVfX3RvZ2dsZS1idXR0b25cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaWd4LXRyZWUtbm9kZV9fdG9nZ2xlLWJ1dHRvbi0taGlkZGVuJzogIV9jaGlsZHJlbj8ubGVuZ3RoIH1cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImluZGljYXRvckNsaWNrKClcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZXhwYW5kSW5kaWNhdG9yVGVtcGxhdGUsIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBleHBhbmRlZCB9XCI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImxvYWRpbmdcIlxuICAgICAgICAgICAgY2xhc3M9XCJpZ3gtdHJlZS1ub2RlX190b2dnbGUtYnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICBcdDxpZ3gtY2lyY3VsYXItYmFyXG4gICAgICAgICAgICBcdFthbmltYXRlXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFx0W2luZGV0ZXJtaW5hdGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBcdFt0ZXh0VmlzaWJpbGl0eV09XCJmYWxzZVwiXG4gICAgICAgIFx0PlxuICAgICAgICBcdDwvaWd4LWNpcmN1bGFyLWJhcj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gSXRlbSBzZWxlY3Rpb24gLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93U2VsZWN0b3JzXCJcbiAgICAgICAgICAgIGNsYXNzPVwiaWd4LXRyZWUtbm9kZV9fc2VsZWN0XCJcbiAgICAgICAgICAgIChwb2ludGVyZG93bik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25TZWxlY3RvckNsaWNrKCRldmVudClcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWxlY3RNYXJrZXJUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtdHJlZS1ub2RlX19jb250ZW50XCI+XG4gICAgICAgICAgICA8IS0tIEdob3N0IGNvbnRlbnQgLS0+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSAgQnVmZmVyIGVsZW1lbnQgZm9yICdtb3ZlIGFmdGVyJyB3aGVuIEQmRCBpcyBpbXBsZW1lbnRlZC0tPlxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtdHJlZS1ub2RlX19kcm9wLWluZGljYXRvclwiPlxuICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cImlneC10cmVlLW5vZGVfX3NwYWNlclwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIFtdLmNvbnN0cnVjdG9yKGxldmVsKVwiPjwvc3Bhbj5cbiAgICAgICAgPCEtLSBzdHlsZSBydWxlcyB0YXJnZXQgdGhpcyBkaXYsIGRvIG5vdCBkZWxldGUgaXQgLS0+XG4gICAgICAgIDxkaXY+PC9kaXY+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RyYWdUZW1wbGF0ZT5cbiAgICA8IS0tIERyYWcgZHJvcCBnb2VzIGhlcmVcbiAgICAgICAgaWd4RHJvcFxuICAgICAgICAjZHJvcFJlZj1cImRyb3BcIlxuICAgICAgICBbaWd4Tm9kZURyYWddPVwidGhpc1wiXG4gICAgICAgIChkcmFnU3RhcnQpPVwibG9nRHJvcChkcm9wUmVmKVwiXG4gICAgICAgIChsZWF2ZSk9XCJlbWl0TGVhdmUoKVwiXG4gICAgICAgIChlbnRlcik9XCJlbWl0RW50ZXIoKVwiIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtdHJlZS1ub2RlX19kcmFnLXdyYXBwZXJcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
654
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ub2RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi90cmVlL3RyZWUtbm9kZS90cmVlLW5vZGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL3RyZWUvdHJlZS1ub2RlL3RyZWUtbm9kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsU0FBUyxFQUNULGVBQWUsRUFDZixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFFTixRQUFRLEVBQ1IsV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRW5FLE9BQU8sRUFBRSxxQkFBcUIsRUFBMkIsTUFBTSxrREFBa0QsQ0FBQztBQUNsSCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUVoRyxPQUFPLEVBR0gsb0JBQW9CLEVBQ3BCLGtCQUFrQixFQUNsQix1QkFBdUIsRUFFMUIsTUFBTSxXQUFXLENBQUM7Ozs7Ozs7OztBQUtuQixxQ0FBcUM7QUFDckM7OztHQUdHO0FBSUgsTUFBTSxPQUFPLHdCQUF3QjtJQTBDakMsWUFDUSxJQUFzQixFQUNsQixVQUFvQyxFQUNyQyxVQUFzQjtRQUZ6QixTQUFJLEdBQUosSUFBSSxDQUFrQjtRQUNsQixlQUFVLEdBQVYsVUFBVSxDQUEwQjtRQUNy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cEIsTUFBTTtnQkFtQkEsY0FBYztzQkFEcEIsTUFBTTtnQkE2QkksUUFBUTtzQkFGbEIsS0FBSzs7c0JBQ0wsV0FBVzt1QkFBQywrQkFBK0I7Z0JBY3JDLFFBQVE7c0JBRGQsV0FBVzt1QkFBQyxxQkFBcUI7Z0JBS3ZCLElBQUk7c0JBRGQsV0FBVzt1QkFBQyxXQUFXO2dCQU9qQixZQUFZO3NCQURsQixlQUFlO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFLeEQsU0FBUztzQkFEZixlQUFlO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsSUFBSSxFQUFFLHVCQUF1QixFQUFFO2dCQUtwRSxXQUFXO3NCQURqQixlQUFlO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsSUFBSSxFQUFFLHVCQUF1QixFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7Z0JBc0J2RixNQUFNO3NCQURaLFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFJeEMsK0JBQStCO3NCQUR0QyxTQUFTO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUkxRCxpQkFBaUI7c0JBRHhCLFNBQVM7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQThGekMsUUFBUTtzQkFEbEIsS0FBSztnQkFvQ0ssUUFBUTtzQkFEbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2tpcFNlbGYsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRGlzcGxheURlbnNpdHkgfSBmcm9tICcuLi8uLi9jb3JlL2Rpc3BsYXlEZW5zaXR5JztcbmltcG9ydCB7IEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi8uLi9jb3JlL2kxOG4vcmVzb3VyY2VzJztcbmltcG9ydCB7IElUcmVlUmVzb3VyY2VTdHJpbmdzIH0gZnJvbSAnLi4vLi4vY29yZS9pMThuL3RyZWUtcmVzb3VyY2VzJztcbmltcG9ydCB7IFRvZ2dsZUFuaW1hdGlvblBsYXllciwgVG9nZ2xlQW5pbWF0aW9uU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9leHBhbnNpb24tcGFuZWwvdG9nZ2xlLWFuaW1hdGlvbi1jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4QW5ndWxhckFuaW1hdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hbmltYXRpb24vYW5ndWxhci1hbmltYXRpb24tc2VydmljZSc7XG5pbXBvcnQgeyBBbmltYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYW5pbWF0aW9uL2FuaW1hdGlvbic7XG5pbXBvcnQge1xuICAgIElneFRyZWUsXG4gICAgSWd4VHJlZU5vZGUsXG4gICAgSWd4VHJlZVNlbGVjdGlvblR5cGUsXG4gICAgSUdYX1RSRUVfQ09NUE9ORU5ULFxuICAgIElHWF9UUkVFX05PREVfQ09NUE9ORU5ULFxuICAgIElUcmVlTm9kZVRvZ2dsaW5nRXZlbnRBcmdzXG59IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBJZ3hUcmVlTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tICcuLi90cmVlLW5hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hUcmVlU2VsZWN0aW9uU2VydmljZSB9IGZyb20gJy4uL3RyZWUtc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4VHJlZVNlcnZpY2UgfSBmcm9tICcuLi90cmVlLnNlcnZpY2UnO1xuXG4vLyBUT0RPOiBJbXBsZW1lbnQgYXJpYSBmdW5jdGlvbmFsaXR5XG4vKipcbiAqIEBoaWRkZW4gQGludGVybmFsXG4gKiBVc2VkIGZvciBsaW5rcyAoYGFgIHRhZ3MpIGluIHRoZSBib2R5IG9mIGFuIGBpZ3gtdHJlZS1ub2RlYC4gSGFuZGxlcyBhcmlhIGFuZCBldmVudCBkaXNwYXRjaC5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6IGBbaWd4VHJlZU5vZGVMaW5rXWBcbn0pXG5leHBvcnQgY2xhc3MgSWd4VHJlZU5vZGVMaW5rRGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICAgIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJylcbiAgICBwdWJsaWMgcm9sZSA9ICd0cmVlaXRlbSc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbm9kZSdzIHBhcmVudC4gU2hvdWxkIGJlIHVzZWQgb25seSB3aGVuIHRoZSBsaW5rIGlzIGRlZmluZWRcbiAgICAgKiBpbiBgPG5nLXRlbXBsYXRlPmAgdGFnIG91dHNpZGUgb2YgaXRzIHBhcmVudCwgYXMgQW5ndWxhciBESSB3aWxsIG5vdCBwcm9wZXJseSBwcm92aWRlIGEgcmVmZXJlbmNlXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10cmVlPlxuICAgICAqICAgICA8aWd4LXRyZWUtbm9kZSAjbXlOb2RlICpuZ0Zvcj1cImxldCBub2RlIG9mIGRhdGFcIiBbZGF0YV09XCJub2RlXCI+XG4gICAgICogICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub2RlVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBkYXRhLCBwYXJlbnROb2RlOiBteU5vZGUgfVwiPlxuICAgICAqICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgKiAgICAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAqICAgICAuLi5cbiAgICAgKiAgICAgPCEtLSBub2RlIHRlbXBsYXRlIGlzIGRlZmluZWQgdW5kZXIgdHJlZSB0byBhY2Nlc3MgcmVsYXRlZCBzZXJ2aWNlcyAtLT5cbiAgICAgKiAgICAgPG5nLXRlbXBsYXRlICNub2RlVGVtcGxhdGUgbGV0LWRhdGEgbGV0LW5vZGU9XCJwYXJlbnROb2RlXCI+XG4gICAgICogICAgICAgICA8YSBbaWd4VHJlZU5vZGVMaW5rXT1cIm5vZGVcIj57eyBkYXRhLmxhYmVsIH19PC9hPlxuICAgICAqICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAqIDwvaWd4LXRyZWU+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KCdpZ3hUcmVlTm9kZUxpbmsnKVxuICAgIHB1YmxpYyBzZXQgcGFyZW50Tm9kZSh2YWw6IGFueSkge1xuICAgICAgICBpZiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLl9wYXJlbnROb2RlID0gdmFsO1xuICAgICAgICAgICAgKHRoaXMuX3BhcmVudE5vZGUgYXMgYW55KS5hZGRMaW5rQ2hpbGQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBhcmVudE5vZGUoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudE5vZGU7XG4gICAgfVxuXG4gICAgLyoqIEEgcG9pbnRlciB0byB0aGUgcGFyZW50IG5vZGUgKi9cbiAgICBwcml2YXRlIGdldCB0YXJnZXQoKTogSWd4VHJlZU5vZGU8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGUgfHwgdGhpcy5wYXJlbnROb2RlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3BhcmVudE5vZGU6IElneFRyZWVOb2RlPGFueT4gPSBudWxsO1xuXG4gICAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChJR1hfVFJFRV9OT0RFX0NPTVBPTkVOVClcbiAgICBwcml2YXRlIG5vZGU6IElneFRyZWVOb2RlPGFueT4sXG4gICAgICAgIHByaXZhdGUgbmF2U2VydmljZTogSWd4VHJlZU5hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci50YWJpbmRleCcpXG4gICAgcHVibGljIGdldCB0YWJJbmRleCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZTZXJ2aWNlLmZvY3VzZWROb2RlID09PSB0aGlzLnRhcmdldCA/ICh0aGlzLnRhcmdldD8uZGlzYWJsZWQgPyAtMSA6IDApIDogLTE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKiBDbGVhciB0aGUgbm9kZSdzIGZvY3VzZWQgc3RhdGVcbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdibHVyJylcbiAgICBwdWJsaWMgaGFuZGxlQmx1cigpIHtcbiAgICAgICAgdGhpcy50YXJnZXQuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKiBTZXQgdGhlIG5vZGUgYXMgZm9jdXNlZFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2ZvY3VzJylcbiAgICBwdWJsaWMgaGFuZGxlRm9jdXMoKSB7XG4gICAgICAgIGlmICh0aGlzLnRhcmdldCAmJiAhdGhpcy50YXJnZXQuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm5hdlNlcnZpY2UuZm9jdXNlZE5vZGUgIT09IHRoaXMudGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXZTZXJ2aWNlLmZvY3VzZWROb2RlID0gdGhpcy50YXJnZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRhcmdldC5pc0ZvY3VzZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnRhcmdldC5yZW1vdmVMaW5rQ2hpbGQodGhpcyk7XG4gICAgfVxufVxuXG4vKipcbiAqXG4gKiBUaGUgdHJlZSBub2RlIGNvbXBvbmVudCByZXByZXNlbnRzIGEgY2hpbGQgbm9kZSBvZiB0aGUgdHJlZSBjb21wb25lbnQgb3IgYW5vdGhlciB0cmVlIG5vZGUuXG4gKiBVc2FnZTpcbiAqXG4gKiBgYGBodG1sXG4gKiAgPGlneC10cmVlPlxuICogIC4uLlxuICogICAgPGlneC10cmVlLW5vZGUgW2RhdGFdPVwiZGF0YVwiIFtzZWxlY3RlZF09XCJzZXJ2aWNlLmlzTm9kZVNlbGVjdGVkKGRhdGEuS2V5KVwiIFtleHBhbmRlZF09XCJzZXJ2aWNlLmlzTm9kZUV4cGFuZGVkKGRhdGEuS2V5KVwiPlxuICogICAgICB7eyBkYXRhLkZpcnN0TmFtZSB9fSB7eyBkYXRhLkxhc3ROYW1lIH19XG4gKiAgICA8L2lneC10cmVlLW5vZGU+XG4gKiAgLi4uXG4gKiAgPC9pZ3gtdHJlZT5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC10cmVlLW5vZGUnLFxuICAgIHRlbXBsYXRlVXJsOiAndHJlZS1ub2RlLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBJR1hfVFJFRV9OT0RFX0NPTVBPTkVOVCwgdXNlRXhpc3Rpbmc6IElneFRyZWVOb2RlQ29tcG9uZW50IH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIElneFRyZWVOb2RlQ29tcG9uZW50PFQ+IGV4dGVuZHMgVG9nZ2xlQW5pbWF0aW9uUGxheWVyIGltcGxlbWVudHMgSWd4VHJlZU5vZGU8VD4sIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBlbnRyeSB0aGF0IHRoZSBub2RlIGlzIHZpc3VhbGl6aW5nLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBSZXF1aXJlZCBmb3Igc2VhcmNoaW5nIHRocm91Z2ggbm9kZXMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAgPGlneC10cmVlPlxuICAgICAqICAuLi5cbiAgICAgKiAgICA8aWd4LXRyZWUtbm9kZSBbZGF0YV09XCJkYXRhXCI+XG4gICAgICogICAgICB7eyBkYXRhLkZpcnN0TmFtZSB9fSB7eyBkYXRhLkxhc3ROYW1lIH19XG4gICAgICogICAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAqICAuLi5cbiAgICAgKiAgPC9pZ3gtdHJlZT5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkYXRhOiBUO1xuXG4gICAgLyoqXG4gICAgICogVG8gYmUgdXNlZCBmb3IgbG9hZC1vbi1kZW1hbmQgc2NlbmFyaW9zIGluIG9yZGVyIHRvIHNwZWNpZnkgd2hldGhlciB0aGUgbm9kZSBpcyBsb2FkaW5nIGRhdGEuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIExvYWRpbmcgbm9kZXMgZG8gbm90IHJlbmRlciBjaGlsZHJlbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBsb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvLyBUTyBETzogcmV0dXJuIGRpZmZlcmVudCB0YWIgaW5kZXggZGVwZW5kaW5nIG9uIGFuY2hvciBjaGlsZFxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBzZXQgdGFiSW5kZXgodmFsOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fdGFiSW5kZXggPSB2YWw7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCB0YWJJbmRleCgpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl90YWJJbmRleCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHRoaXMubmF2U2VydmljZS5mb2N1c2VkTm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhhc0xpbmtDaGlsZHJlbiA/IC0xIDogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5oYXNMaW5rQ2hpbGRyZW4gPyAtMSA6IHRoaXMuX3RhYkluZGV4O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgYW5pbWF0aW9uU2V0dGluZ3MoKTogVG9nZ2xlQW5pbWF0aW9uU2V0dGluZ3Mge1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlLmFuaW1hdGlvblNldHRpbmdzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgcmVzb3VyY2Ugc3RyaW5ncy5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogVXNlcyBFTiByZXNvdXJjZXMgYnkgZGVmYXVsdC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgcmVzb3VyY2VTdHJpbmdzKHZhbHVlOiBJVHJlZVJlc291cmNlU3RyaW5ncykge1xuICAgICAgICB0aGlzLl9yZXNvdXJjZVN0cmluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9yZXNvdXJjZVN0cmluZ3MsIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBhY2Nlc3NvciB0aGF0IHJldHVybnMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICovXG4gICAgcHVibGljIGdldCByZXNvdXJjZVN0cmluZ3MoKTogSVRyZWVSZXNvdXJjZVN0cmluZ3Mge1xuICAgICAgICBpZiAoIXRoaXMuX3Jlc291cmNlU3RyaW5ncykge1xuICAgICAgICAgICAgdGhpcy5fcmVzb3VyY2VTdHJpbmdzID0gQ3VycmVudFJlc291cmNlU3RyaW5ncy5UcmVlUmVzU3RyaW5ncztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VTdHJpbmdzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgYWN0aXZlIHN0YXRlIG9mIHRoZSBub2RlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWU6IGJvb2xlYW5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgYWN0aXZlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5uYXZTZXJ2aWNlLmFjdGl2ZU5vZGUgPSB0aGlzO1xuICAgICAgICAgICAgdGhpcy50cmVlLmFjdGl2ZU5vZGVCaW5kaW5nQ2hhbmdlLmVtaXQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFjdGl2ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2U2VydmljZS5hY3RpdmVOb2RlID09PSB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgbm9kZSdzIGBzZWxlY3RlZGAgcHJvcGVydHkgY2hhbmdlcy5cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRyZWU+XG4gICAgICogICAgICA8aWd4LXRyZWUtbm9kZSAqbmdGb3I9XCJsZXQgbm9kZSBvZiBkYXRhXCIgW2RhdGFdPVwibm9kZVwiIFsoc2VsZWN0ZWQpXT1cIm5vZGUuc2VsZWN0ZWRcIj5cbiAgICAgKiAgICAgIDwvaWd4LXRyZWUtbm9kZT5cbiAgICAgKiA8L2lneC10cmVlPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG5vZGU6IElneFRyZWVOb2RlPGFueT4gPSB0aGlzLnRyZWUuZmluZE5vZGVzKGRhdGFbMF0pWzBdO1xuICAgICAqIG5vZGUuc2VsZWN0ZWRDaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZTogYm9vbGVhbikgPT4gY29uc29sZS5sb2coXCJOb2RlIHNlbGVjdGlvbiBjaGFuZ2VkIHRvIFwiLCBlKSlcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgc2VsZWN0ZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIG5vZGUncyBgZXhwYW5kZWRgIHByb3BlcnR5IGNoYW5nZXMuXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10cmVlPlxuICAgICAqICAgICAgPGlneC10cmVlLW5vZGUgKm5nRm9yPVwibGV0IG5vZGUgb2YgZGF0YVwiIFtkYXRhXT1cIm5vZGVcIiBbKGV4cGFuZGVkKV09XCJub2RlLmV4cGFuZGVkXCI+XG4gICAgICogICAgICA8L2lneC10cmVlLW5vZGU+XG4gICAgICogPC9pZ3gtdHJlZT5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBub2RlOiBJZ3hUcmVlTm9kZTxhbnk+ID0gdGhpcy50cmVlLmZpbmROb2RlcyhkYXRhWzBdKVswXTtcbiAgICAgKiBub2RlLmV4cGFuZGVkQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU6IGJvb2xlYW4pID0+IGNvbnNvbGUubG9nKFwiTm9kZSBleHBhbnNpb24gc3RhdGUgY2hhbmdlZCB0byBcIiwgZSkpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGV4cGFuZGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBmb2N1c2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0ZvY3VzZWQgJiZcbiAgICAgICAgICAgIHRoaXMubmF2U2VydmljZS5mb2N1c2VkTm9kZSA9PT0gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgbm9kZSBpbmN1ZGluZyBpdHNlbGZcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBub2RlOiBJZ3hUcmVlTm9kZTxhbnk+ID0gdGhpcy50cmVlLmZpbmROb2RlcyhkYXRhWzBdKVswXTtcbiAgICAgKiBjb25zdCBwYXRoOiBJZ3hUcmVlTm9kZTxhbnk+W10gPSBub2RlLnBhdGg7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBwYXRoKCk6IElneFRyZWVOb2RlPGFueT5bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudE5vZGU/LnBhdGggPyBbLi4udGhpcy5wYXJlbnROb2RlLnBhdGgsIHRoaXNdIDogW3RoaXNdO1xuICAgIH1cblxuICAgIC8vIFRPRE86IGJpbmQgdG8gZGlzYWJsZWQgc3RhdGUgd2hlbiBub2RlIGlzIGRyYWdnZWRcbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIGRpc2FibGVkIHN0YXRlIG9mIHRoZSBub2RlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWU6IGJvb2xlYW5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LXRyZWUtbm9kZS0tZGlzYWJsZWQnKVxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5fZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2Rpc2FibGVkID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnRyZWUuZGlzYWJsZWRDaGFuZ2UuZW1pdCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LXRyZWUtbm9kZScpXG4gICAgcHVibGljIGNzc0NsYXNzID0gJ2lneC10cmVlLW5vZGUnO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICAgIHB1YmxpYyBnZXQgcm9sZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzTGlua0NoaWxkcmVuID8gJ25vbmUnIDogJ3RyZWVpdGVtJztcbiAgICB9O1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihJZ3hUcmVlTm9kZUxpbmtEaXJlY3RpdmUsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHB1YmxpYyBsaW5rQ2hpbGRyZW46IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oSUdYX1RSRUVfTk9ERV9DT01QT05FTlQsIHsgcmVhZDogSUdYX1RSRUVfTk9ERV9DT01QT05FTlQgfSlcbiAgICBwdWJsaWMgX2NoaWxkcmVuOiBRdWVyeUxpc3Q8SWd4VHJlZU5vZGU8YW55Pj47XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKElHWF9UUkVFX05PREVfQ09NUE9ORU5ULCB7IHJlYWQ6IElHWF9UUkVFX05PREVfQ09NUE9ORU5ULCBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICAgIHB1YmxpYyBhbGxDaGlsZHJlbjogUXVlcnlMaXN0PElneFRyZWVOb2RlPGFueT4+O1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBjaGlsZCBub2RlcyBvZiB0aGUgbm9kZSAoaWYgYW55KVxuICAgICAqXG4gICAgICogQHJlbWFya1xuICAgICAqIFJldHVybnMgYG51bGxgIGlmIG5vZGUgZG9lcyBub3QgaGF2ZSBjaGlsZHJlblxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3Qgbm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IHRoaXMudHJlZS5maW5kTm9kZXMoZGF0YVswXSlbMF07XG4gICAgICogY29uc3QgY2hpbGRyZW46IElneFRyZWVOb2RlPGFueT5bXSA9IG5vZGUuY2hpbGRyZW47XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBjaGlsZHJlbigpOiBJZ3hUcmVlTm9kZTxhbnk+W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW4/Lmxlbmd0aCA/IHRoaXMuX2NoaWxkcmVuLnRvQXJyYXkoKSA6IG51bGw7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogd2lsbCBiZSB1c2VkIGluIERyYWcgYW5kIERyb3AgaW1wbGVtZW50YXRpb25cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBAVmlld0NoaWxkKCdnaG9zdFRlbXBsYXRlJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgcHVibGljIGhlYWRlcjogRWxlbWVudFJlZjtcblxuICAgIEBWaWV3Q2hpbGQoJ2RlZmF1bHRJbmRpY2F0b3InLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcml2YXRlIF9kZWZhdWx0RXhwYW5kSW5kaWNhdG9yVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAVmlld0NoaWxkKCdjaGlsZHJlbkNvbnRhaW5lcicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHByaXZhdGUgY2hpbGRyZW5Db250YWluZXI6IEVsZW1lbnRSZWY7XG5cbiAgICBwcml2YXRlIGdldCBoYXNMaW5rQ2hpbGRyZW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmxpbmtDaGlsZHJlbj8ubGVuZ3RoID4gMCB8fCB0aGlzLnJlZ2lzdGVyZWRDaGlsZHJlbj8ubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGlzQ29tcGFjdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJlZT8uZGlzcGxheURlbnNpdHkgPT09IERpc3BsYXlEZW5zaXR5LmNvbXBhY3Q7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBpc0Nvc3koKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyZWU/LmRpc3BsYXlEZW5zaXR5ID09PSBEaXNwbGF5RGVuc2l0eS5jb3N5O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBpc0ZvY3VzZWQ6IGJvb2xlYW47XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJlZENoaWxkcmVuOiBJZ3hUcmVlTm9kZUxpbmtEaXJlY3RpdmVbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHJpdmF0ZSBfcmVzb3VyY2VTdHJpbmdzID0gQ3VycmVudFJlc291cmNlU3RyaW5ncy5UcmVlUmVzU3RyaW5ncztcblxuICAgIHByaXZhdGUgX3RhYkluZGV4ID0gbnVsbDtcbiAgICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoSUdYX1RSRUVfQ09NUE9ORU5UKSBwdWJsaWMgdHJlZTogSWd4VHJlZSxcbiAgICAgICAgcHJvdGVjdGVkIHNlbGVjdGlvblNlcnZpY2U6IElneFRyZWVTZWxlY3Rpb25TZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgdHJlZVNlcnZpY2U6IElneFRyZWVTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgbmF2U2VydmljZTogSWd4VHJlZU5hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQEluamVjdChJZ3hBbmd1bGFyQW5pbWF0aW9uU2VydmljZSkgcHJvdGVjdGVkIGFuaW1hdGlvblNlcnZpY2U6IEFuaW1hdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIEBJbmplY3QoSUdYX1RSRUVfTk9ERV9DT01QT05FTlQpIHB1YmxpYyBwYXJlbnROb2RlOiBJZ3hUcmVlTm9kZTxhbnk+XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGFuaW1hdGlvblNlcnZpY2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBzaG93U2VsZWN0b3JzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlLnNlbGVjdGlvbiAhPT0gSWd4VHJlZVNlbGVjdGlvblR5cGUuTm9uZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaW5kZXRlcm1pbmF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uU2VydmljZS5pc05vZGVJbmRldGVybWluYXRlKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgZGVwdGggb2YgdGhlIG5vZGUsIHJlbGF0aXZlIHRvIHRoZSByb290XG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10cmVlPlxuICAgICAqICAuLi5cbiAgICAgKiAgPGlneC10cmVlLW5vZGUgI25vZGU+XG4gICAgICogICAgICBNeSBsZXZlbCBpcyB7eyBub2RlLmxldmVsIH19XG4gICAgICogIDwvaWd4LXRyZWUtbm9kZT5cbiAgICAgKiA8L2lneC10cmVlPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG5vZGU6IElneFRyZWVOb2RlPGFueT4gPSB0aGlzLnRyZWUuZmluZE5vZGVzKGRhdGFbMTJdKVswXTtcbiAgICAgKiBjb25zdCBsZXZlbDogbnVtYmVyID0gbm9kZS5sZXZlbDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGxldmVsKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudE5vZGUgPyB0aGlzLnBhcmVudE5vZGUubGV2ZWwgKyAxIDogMDtcbiAgICB9XG5cbiAgICAvKiogR2V0L3NldCB3aGV0aGVyIHRoZSBub2RlIGlzIHNlbGVjdGVkLiBTdXBwb3JzdCB0d28td2F5IGJpbmRpbmcuXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10cmVlPlxuICAgICAqICAuLi5cbiAgICAgKiAgPGlneC10cmVlLW5vZGUgKm5nRm9yPVwibGV0IG5vZGUgb2YgZGF0YVwiIFsoc2VsZWN0ZWQpXT1cIm5vZGUuc2VsZWN0ZWRcIj5cbiAgICAgKiAgICAgIHt7IG5vZGUubGFiZWwgfX1cbiAgICAgKiAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAqIDwvaWd4LXRyZWU+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3Qgbm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IHRoaXMudHJlZS5maW5kTm9kZXMoZGF0YVswXSlbMF07XG4gICAgICogY29uc3Qgc2VsZWN0ZWQgPSBub2RlLnNlbGVjdGVkO1xuICAgICAqIG5vZGUuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBzZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uU2VydmljZS5pc05vZGVTZWxlY3RlZCh0aGlzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHNlbGVjdGVkKHZhbDogYm9vbGVhbikge1xuICAgICAgICBpZiAoISh0aGlzLnRyZWU/Lm5vZGVzICYmIHRoaXMudHJlZS5ub2Rlcy5maW5kKChlKSA9PiBlID09PSB0aGlzKSkgJiYgdmFsKSB7XG4gICAgICAgICAgICB0aGlzLnRyZWUuZm9yY2VTZWxlY3QucHVzaCh0aGlzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsICYmICF0aGlzLnNlbGVjdGlvblNlcnZpY2UuaXNOb2RlU2VsZWN0ZWQodGhpcykpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3ROb2Rlc1dpdGhOb0V2ZW50KFt0aGlzXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWwgJiYgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmlzTm9kZVNlbGVjdGVkKHRoaXMpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3ROb2Rlc1dpdGhOb0V2ZW50KFt0aGlzXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogR2V0L3NldCB3aGV0aGVyIHRoZSBub2RlIGlzIGV4cGFuZGVkXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10cmVlPlxuICAgICAqICAuLi5cbiAgICAgKiAgPGlneC10cmVlLW5vZGUgKm5nRm9yPVwibGV0IG5vZGUgb2YgZGF0YVwiIFtleHBhbmRlZF09XCJub2RlLm5hbWUgPT09IHRoaXMuZXhwYW5kZWROb2RlXCI+XG4gICAgICogICAgICB7eyBub2RlLmxhYmVsIH19XG4gICAgICogIDwvaWd4LXRyZWUtbm9kZT5cbiAgICAgKiA8L2lneC10cmVlPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG5vZGU6IElneFRyZWVOb2RlPGFueT4gPSB0aGlzLnRyZWUuZmluZE5vZGVzKGRhdGFbMF0pWzBdO1xuICAgICAqIGNvbnN0IGV4cGFuZGVkID0gbm9kZS5leHBhbmRlZDtcbiAgICAgKiBub2RlLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgZXhwYW5kZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyZWVTZXJ2aWNlLmlzRXhwYW5kZWQodGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBleHBhbmRlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5leHBhbmQodGhpcywgZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5jb2xsYXBzZSh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgZXhwYW5kSW5kaWNhdG9yVGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyZWU/LmV4cGFuZEluZGljYXRvciA/IHRoaXMudHJlZS5leHBhbmRJbmRpY2F0b3IgOiB0aGlzLl9kZWZhdWx0RXhwYW5kSW5kaWNhdG9yVGVtcGxhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hdGl2ZSBET00gZWxlbWVudCByZXByZXNlbnRpbmcgdGhlIG5vZGUuIENvdWxkIGJlIG51bGwgaW4gY2VydGFpbiBlbnZpcm9ubWVudHMuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gZ2V0IHRoZSBuYXRpdmVFbGVtZW50IG9mIHRoZSBzZWNvbmQgbm9kZVxuICAgICAqIGNvbnN0IG5vZGU6IElneFRyZWVOb2RlID0gdGhpcy50cmVlLm5vZGVzLmZpcnN0KCk7XG4gICAgICogY29uc3Qgbm9kZUVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gbm9kZS5uYXRpdmVFbGVtZW50O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgbmF0aXZlRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5vcGVuQW5pbWF0aW9uRG9uZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudHJlZS5ub2RlRXhwYW5kZWQuZW1pdCh7IG93bmVyOiB0aGlzLnRyZWUsIG5vZGU6IHRoaXMgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY2xvc2VBbmltYXRpb25Eb25lLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50cmVlLm5vZGVDb2xsYXBzZWQuZW1pdCh7IG93bmVyOiB0aGlzLnRyZWUsIG5vZGU6IHRoaXMgfSk7XG4gICAgICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLmNvbGxhcHNlKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICogU2V0cyB0aGUgZm9jdXMgdG8gdGhlIG5vZGUncyA8YT4gY2hpbGQsIGlmIHByZXNlbnRcbiAgICAgKiBTZXRzIHRoZSBub2RlIGFzIHRoZSB0cmVlIHNlcnZpY2UncyBmb2N1c2VkTm9kZVxuICAgICAqIE1hcmtzIHRoZSBub2RlIGFzIHRoZSBjdXJyZW50IGFjdGl2ZSBlbGVtZW50XG4gICAgICovXG4gICAgcHVibGljIGhhbmRsZUZvY3VzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm5hdlNlcnZpY2UuZm9jdXNlZE5vZGUgIT09IHRoaXMpIHtcbiAgICAgICAgICAgIHRoaXMubmF2U2VydmljZS5mb2N1c2VkTm9kZSA9IHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0ZvY3VzZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5saW5rQ2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5saW5rQ2hpbGRyZW4uZmlyc3QubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlZ2lzdGVyZWRDaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJlZENoaWxkcmVuWzBdLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKiBDbGVhciB0aGUgbm9kZSdzIGZvY3VzZWQgc3RhdHVzXG4gICAgICovXG4gICAgcHVibGljIGNsZWFyRm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25TZWxlY3RvckNsaWNrKGV2ZW50KSB7XG4gICAgICAgIC8vIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAvLyB0aGlzLm5hdlNlcnZpY2UuaGFuZGxlRm9jdXNlZEFuZEFjdGl2ZU5vZGUodGhpcyk7XG4gICAgICAgIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdE11bHRpcGxlTm9kZXModGhpcywgZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3ROb2RlKHRoaXMsIGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3ROb2RlKHRoaXMsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIG5vZGUgZXhwYW5zaW9uIHN0YXRlLCB0cmlnZ2VyaW5nIGFuaW1hdGlvblxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdHJlZT5cbiAgICAgKiAgICAgIDxpZ3gtdHJlZS1ub2RlICNub2RlPk15IE5vZGU8L2lneC10cmVlLW5vZGU+XG4gICAgICogPC9pZ3gtdHJlZT5cbiAgICAgKiA8YnV0dG9uIGlneEJ1dHRvbiAoY2xpY2spPVwibm9kZS50b2dnbGUoKVwiPlRvZ2dsZSBOb2RlPC9idXR0b24+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgbXlOb2RlOiBJZ3hUcmVlTm9kZTxhbnk+ID0gdGhpcy50cmVlLmZpbmROb2RlcyhkYXRhWzBdKVswXTtcbiAgICAgKiBteU5vZGUudG9nZ2xlKCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY29sbGFwc2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaW5kaWNhdG9yQ2xpY2soKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlKCk7XG4gICAgICAgIHRoaXMubmF2U2VydmljZS5zZXRGb2N1c2VkQW5kQWN0aXZlTm9kZSh0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvblBvaW50ZXJEb3duKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLm5hdlNlcnZpY2Uuc2V0Rm9jdXNlZEFuZEFjdGl2ZU5vZGUodGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZW5zdXJlU3RhdGVPbk5vZGVEZWxldGUodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhwYW5kcyB0aGUgbm9kZSwgdHJpZ2dlcmluZyBhbmltYXRpb25cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRyZWU+XG4gICAgICogICAgICA8aWd4LXRyZWUtbm9kZSAjbm9kZT5NeSBOb2RlPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAqIDwvaWd4LXRyZWU+XG4gICAgICogPGJ1dHRvbiBpZ3hCdXR0b24gKGNsaWNrKT1cIm5vZGUuZXhwYW5kKClcIj5FeHBhbmQgTm9kZTwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG15Tm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IHRoaXMudHJlZS5maW5kTm9kZXMoZGF0YVswXSlbMF07XG4gICAgICogbXlOb2RlLmV4cGFuZCgpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBleHBhbmQoKSB7XG4gICAgICAgIGlmICh0aGlzLmV4cGFuZGVkICYmICF0aGlzLnRyZWVTZXJ2aWNlLmNvbGxhcHNpbmdOb2Rlcy5oYXModGhpcykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhcmdzOiBJVHJlZU5vZGVUb2dnbGluZ0V2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIG93bmVyOiB0aGlzLnRyZWUsXG4gICAgICAgICAgICBub2RlOiB0aGlzLFxuICAgICAgICAgICAgY2FuY2VsOiBmYWxzZVxuXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudHJlZS5ub2RlRXhwYW5kaW5nLmVtaXQoYXJncyk7XG4gICAgICAgIGlmICghYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UuZXhwYW5kKHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5wbGF5T3BlbkFuaW1hdGlvbihcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuQ29udGFpbmVyXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29sbGFwc2VzIHRoZSBub2RlLCB0cmlnZ2VyaW5nIGFuaW1hdGlvblxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdHJlZT5cbiAgICAgKiAgICAgIDxpZ3gtdHJlZS1ub2RlICNub2RlPk15IE5vZGU8L2lneC10cmVlLW5vZGU+XG4gICAgICogPC9pZ3gtdHJlZT5cbiAgICAgKiA8YnV0dG9uIGlneEJ1dHRvbiAoY2xpY2spPVwibm9kZS5jb2xsYXBzZSgpXCI+Q29sbGFwc2UgTm9kZTwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG15Tm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IHRoaXMudHJlZS5maW5kTm9kZXMoZGF0YVswXSlbMF07XG4gICAgICogbXlOb2RlLmNvbGxhcHNlKCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNvbGxhcHNlKCkge1xuICAgICAgICBpZiAoIXRoaXMuZXhwYW5kZWQgfHwgdGhpcy50cmVlU2VydmljZS5jb2xsYXBzaW5nTm9kZXMuaGFzKHRoaXMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXJnczogSVRyZWVOb2RlVG9nZ2xpbmdFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICBvd25lcjogdGhpcy50cmVlLFxuICAgICAgICAgICAgbm9kZTogdGhpcyxcbiAgICAgICAgICAgIGNhbmNlbDogZmFsc2VcblxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRyZWUubm9kZUNvbGxhcHNpbmcuZW1pdChhcmdzKTtcbiAgICAgICAgaWYgKCFhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5jb2xsYXBzaW5nKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wbGF5Q2xvc2VBbmltYXRpb24oXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbkNvbnRhaW5lclxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBhZGRMaW5rQ2hpbGQobGluazogSWd4VHJlZU5vZGVMaW5rRGlyZWN0aXZlKSB7XG4gICAgICAgIHRoaXMuX3RhYkluZGV4ID0gLTE7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJlZENoaWxkcmVuLnB1c2gobGluayk7XG4gICAgfTtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyByZW1vdmVMaW5rQ2hpbGQobGluazogSWd4VHJlZU5vZGVMaW5rRGlyZWN0aXZlKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yZWdpc3RlcmVkQ2hpbGRyZW4uaW5kZXhPZihsaW5rKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlcmVkQ2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjbm9EcmFnVGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBXaWxsIHN3aXRjaCB0ZW1wbGF0ZXMgZGVwZW5kaW5nIG9uIGRyYWdEcm9wIC0tPlxuPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwibm9EcmFnVGVtcGxhdGVcIj5cbjwvbmctdGVtcGxhdGU+XG5cbjxkaXYgI2NoaWxkcmVuQ29udGFpbmVyXG4gICAgKm5nSWY9XCJleHBhbmRlZCAmJiAhbG9hZGluZ1wiXG4gICAgY2xhc3M9XCJpZ3gtdHJlZS1ub2RlX19ncm91cFwiXG4gICAgcm9sZT1cImdyb3VwXCJcbj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtdHJlZS1ub2RlXCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0SW5kaWNhdG9yPlxuICAgIDxpZ3gtaWNvbiBbYXR0ci5hcmlhLWxhYmVsXT1cImV4cGFuZGVkID8gcmVzb3VyY2VTdHJpbmdzLmlneF9jb2xsYXBzZSA6IHJlc291cmNlU3RyaW5ncy5pZ3hfZXhwYW5kXCI+XG4gICAgICAgIHt7IGV4cGFuZGVkID8gXCJrZXlib2FyZF9hcnJvd19kb3duXCIgOiBcImtleWJvYXJkX2Fycm93X3JpZ2h0XCIgfX1cbiAgICA8L2lneC1pY29uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBzZXBhcmF0ZWQgaW4gYSB0ZW1wbGF0ZSBpbiBjYXNlIHRoaXMgZXZlciBuZWVkcyB0byBiZSB0ZW1wbGF0YWJsZSAtLT5cbjxuZy10ZW1wbGF0ZSAjc2VsZWN0TWFya2VyVGVtcGxhdGU+XG4gICAgPGlneC1jaGVja2JveCBbY2hlY2tlZF09XCJzZWxlY3RlZFwiIFtyZWFkb25seV09XCJ0cnVlXCIgW2luZGV0ZXJtaW5hdGVdPVwiaW5kZXRlcm1pbmF0ZVwiIFt0YWJpbmRleF09XCItMVwiPlxuICAgIDwvaWd4LWNoZWNrYm94PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNoZWFkZXJUZW1wbGF0ZT5cbiAgICA8ZGl2ICNnaG9zdFRlbXBsYXRlIGNsYXNzPVwiaWd4LXRyZWUtbm9kZV9fd3JhcHBlclwiXG4gICAgICAgIFthdHRyLnJvbGVdPVwicm9sZVwiXG4gICAgICAgIFt0YWJJbmRleF09XCJ0YWJJbmRleFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdpZ3gtdHJlZS1ub2RlX193cmFwcGVyLS1jb3N5JzogaXNDb3N5LFxuICAgICAgICAgICAgJ2lneC10cmVlLW5vZGVfX3dyYXBwZXItLWNvbXBhY3QnOiBpc0NvbXBhY3QsXG4gICAgICAgICAgICAnaWd4LXRyZWUtbm9kZV9fd3JhcHBlci0tc2VsZWN0ZWQnOiBzZWxlY3RlZCxcbiAgICAgICAgICAgICdpZ3gtdHJlZS1ub2RlX193cmFwcGVyLS1hY3RpdmUnIDogdGhpcy5hY3RpdmUsXG4gICAgICAgICAgICAnaWd4LXRyZWUtbm9kZV9fd3JhcHBlci0tZm9jdXNlZCcgOiB0aGlzLmZvY3VzZWQsXG4gICAgICAgICAgICAnaWd4LXRyZWUtbm9kZV9fd3JhcHBlci0tZGlzYWJsZWQnIDogdGhpcy5kaXNhYmxlZFxuICAgICAgICB9XCJcbiAgICAgICAgKHBvaW50ZXJkb3duKT1cIm9uUG9pbnRlckRvd24oJGV2ZW50KVwiXG4gICAgICAgIChmb2N1cyk9XCJoYW5kbGVGb2N1cygpXCJcbiAgICAgICAgKGJsdXIpPVwiY2xlYXJGb2N1cygpXCJcbiAgICA+XG4gICAgICAgIDxkaXYgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBbXS5jb25zdHJ1Y3RvcihsZXZlbClcIlxuICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpZ3gtdHJlZS1ub2RlX19zcGFjZXJcIlxuICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBFeHBhbmQvQ29sbGFwc2UgaW5kaWNhdG9yIC0tPlxuICAgICAgICA8c3BhbiAqbmdJZj1cIiFsb2FkaW5nXCJcbiAgICAgICAgICAgIGNsYXNzPVwiaWd4LXRyZWUtbm9kZV9fdG9nZ2xlLWJ1dHRvblwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpZ3gtdHJlZS1ub2RlX190b2dnbGUtYnV0dG9uLS1oaWRkZW4nOiAhX2NoaWxkcmVuPy5sZW5ndGggfVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiaW5kaWNhdG9yQ2xpY2soKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJleHBhbmRJbmRpY2F0b3JUZW1wbGF0ZSwgY29udGV4dDogeyAkaW1wbGljaXQ6IGV4cGFuZGVkIH1cIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwibG9hZGluZ1wiXG4gICAgICAgICAgICBjbGFzcz1cImlneC10cmVlLW5vZGVfX3RvZ2dsZS1idXR0b25cIlxuICAgICAgICA+XG4gICAgICAgIFx0PGlneC1jaXJjdWxhci1iYXJcbiAgICAgICAgICAgIFx0W2FuaW1hdGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgXHRbaW5kZXRlcm1pbmF0ZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFx0W3RleHRWaXNpYmlsaXR5XT1cImZhbHNlXCJcbiAgICAgICAgXHQ+XG4gICAgICAgIFx0PC9pZ3gtY2lyY3VsYXItYmFyPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSBJdGVtIHNlbGVjdGlvbiAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dTZWxlY3RvcnNcIlxuICAgICAgICAgICAgY2xhc3M9XCJpZ3gtdHJlZS1ub2RlX19zZWxlY3RcIlxuICAgICAgICAgICAgKHBvaW50ZXJkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvblNlbGVjdG9yQ2xpY2soJGV2ZW50KVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlbGVjdE1hcmtlclRlbXBsYXRlXCI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC10cmVlLW5vZGVfX2NvbnRlbnRcIj5cbiAgICAgICAgICAgIDwhLS0gR2hvc3QgY29udGVudCAtLT5cbiAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tICBCdWZmZXIgZWxlbWVudCBmb3IgJ21vdmUgYWZ0ZXInIHdoZW4gRCZEIGlzIGltcGxlbWVudGVkLS0+XG4gICAgPGRpdiBjbGFzcz1cImlneC10cmVlLW5vZGVfX2Ryb3AtaW5kaWNhdG9yXCI+XG4gICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwiaWd4LXRyZWUtbm9kZV9fc3BhY2VyXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgW10uY29uc3RydWN0b3IobGV2ZWwpXCI+PC9zcGFuPlxuICAgICAgICA8IS0tIHN0eWxlIHJ1bGVzIHRhcmdldCB0aGlzIGRpdiwgZG8gbm90IGRlbGV0ZSBpdCAtLT5cbiAgICAgICAgPGRpdj48L2Rpdj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZHJhZ1RlbXBsYXRlPlxuICAgIDwhLS0gRHJhZyBkcm9wIGdvZXMgaGVyZVxuICAgICAgICBpZ3hEcm9wXG4gICAgICAgICNkcm9wUmVmPVwiZHJvcFwiXG4gICAgICAgIFtpZ3hOb2RlRHJhZ109XCJ0aGlzXCJcbiAgICAgICAgKGRyYWdTdGFydCk9XCJsb2dEcm9wKGRyb3BSZWYpXCJcbiAgICAgICAgKGxlYXZlKT1cImVtaXRMZWF2ZSgpXCJcbiAgICAgICAgKGVudGVyKT1cImVtaXRFbnRlcigpXCIgLS0+XG4gICAgPGRpdiBjbGFzcz1cImlneC10cmVlLW5vZGVfX2RyYWctd3JhcHBlclwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19