@rivet-health/design-system 40.15.0 → 40.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,19 +1,38 @@
1
- import { ChangeDetectionStrategy, Component, HostBinding, Input, } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, HostBinding, Input, Optional, } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
+ import * as i1 from "./card.component";
3
4
  /**
4
5
  * Body of a `riv-card`.
5
6
  *
6
7
  * Grows to absorb any spare height by default, which keeps `riv-card-actions`
7
8
  * pinned to the bottom when cards of differing content sit in an equal-height
8
9
  * grid. Set `[grow]="false"` when the card should shrink to its content.
10
+ *
11
+ * In a card with an expandable header, this is the region the toggle controls —
12
+ * it takes an id from the card so that `aria-controls` resolves as soon as the
13
+ * body is rendered.
9
14
  */
10
15
  export class CardContentComponent {
11
- constructor() {
16
+ constructor(el, renderer, card) {
17
+ this.el = el;
18
+ this.renderer = renderer;
19
+ this.card = card;
12
20
  this.padding = 'medium';
13
21
  this.grow = true;
14
22
  /** Draws a separator below the content. */
15
23
  this.divider = false;
16
24
  }
25
+ /**
26
+ * Wears the region id an expandable header's toggle points `aria-controls`
27
+ * at, so neither side needs the consumer to name the body. An id the consumer
28
+ * set of their own is left alone.
29
+ */
30
+ ngOnInit() {
31
+ const regionId = this.card?.regionId;
32
+ if (regionId && !this.el.nativeElement.id) {
33
+ this.renderer.setAttribute(this.el.nativeElement, 'id', regionId);
34
+ }
35
+ }
17
36
  get classes() {
18
37
  return Object.entries({
19
38
  [`padding-${this.padding}`]: true,
@@ -25,12 +44,14 @@ export class CardContentComponent {
25
44
  .join(' ');
26
45
  }
27
46
  }
28
- CardContentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CardContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
47
+ CardContentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CardContentComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.CardComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component });
29
48
  CardContentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: CardContentComponent, selector: "riv-card-content", inputs: { padding: "padding", grow: "grow", divider: "divider" }, host: { properties: { "class": "this.classes" } }, ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{display:block;min-width:0;font:var(--body-medium)}:host.grow{flex-grow:1}:host.divider{border-bottom:var(--border-width) solid var(--border-light-blend)}:host.padding-small{padding:var(--size-small)}:host.padding-medium{padding:var(--size-medium)}:host.padding-large{padding:var(--size-large)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
30
49
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CardContentComponent, decorators: [{
31
50
  type: Component,
32
51
  args: [{ selector: 'riv-card-content', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content></ng-content>\n", styles: [":host{display:block;min-width:0;font:var(--body-medium)}:host.grow{flex-grow:1}:host.divider{border-bottom:var(--border-width) solid var(--border-light-blend)}:host.padding-small{padding:var(--size-small)}:host.padding-medium{padding:var(--size-medium)}:host.padding-large{padding:var(--size-large)}\n"] }]
33
- }], propDecorators: { padding: [{
52
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.CardComponent, decorators: [{
53
+ type: Optional
54
+ }] }]; }, propDecorators: { padding: [{
34
55
  type: Input
35
56
  }], grow: [{
36
57
  type: Input
@@ -40,4 +61,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
40
61
  type: HostBinding,
41
62
  args: ['class']
42
63
  }] } });
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC1jb250ZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL2xheW91dC9jYXJkL2NhcmQtY29udGVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9sYXlvdXQvY2FyZC9jYXJkLWNvbnRlbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsV0FBVyxFQUNYLEtBQUssR0FDTixNQUFNLGVBQWUsQ0FBQzs7QUFHdkI7Ozs7OztHQU1HO0FBT0gsTUFBTSxPQUFPLG9CQUFvQjtJQU5qQztRQVFFLFlBQU8sR0FBMEIsUUFBUSxDQUFDO1FBRzFDLFNBQUksR0FBWSxJQUFJLENBQUM7UUFFckIsMkNBQTJDO1FBRTNDLFlBQU8sR0FBWSxLQUFLLENBQUM7S0FhMUI7SUFYQyxJQUNJLE9BQU87UUFDVCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDcEIsQ0FBQyxXQUFXLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUk7WUFDakMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1NBQ3RCLENBQUM7YUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNmLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNmLENBQUM7O2tIQXJCVSxvQkFBb0I7c0dBQXBCLG9CQUFvQiw2S0NyQmpDLDZCQUNBOzRGRG9CYSxvQkFBb0I7a0JBTmhDLFNBQVM7K0JBQ0Usa0JBQWtCLG1CQUdYLHVCQUF1QixDQUFDLE1BQU07OEJBSS9DLE9BQU87c0JBRE4sS0FBSztnQkFJTixJQUFJO3NCQURILEtBQUs7Z0JBS04sT0FBTztzQkFETixLQUFLO2dCQUlGLE9BQU87c0JBRFYsV0FBVzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENhcmRDb21wb25lbnQgfSBmcm9tICcuL2NhcmQuY29tcG9uZW50JztcblxuLyoqXG4gKiBCb2R5IG9mIGEgYHJpdi1jYXJkYC5cbiAqXG4gKiBHcm93cyB0byBhYnNvcmIgYW55IHNwYXJlIGhlaWdodCBieSBkZWZhdWx0LCB3aGljaCBrZWVwcyBgcml2LWNhcmQtYWN0aW9uc2BcbiAqIHBpbm5lZCB0byB0aGUgYm90dG9tIHdoZW4gY2FyZHMgb2YgZGlmZmVyaW5nIGNvbnRlbnQgc2l0IGluIGFuIGVxdWFsLWhlaWdodFxuICogZ3JpZC4gU2V0IGBbZ3Jvd109XCJmYWxzZVwiYCB3aGVuIHRoZSBjYXJkIHNob3VsZCBzaHJpbmsgdG8gaXRzIGNvbnRlbnQuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Jpdi1jYXJkLWNvbnRlbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2FyZC1jb250ZW50LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FyZC1jb250ZW50LmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIENhcmRDb250ZW50Q29tcG9uZW50IHtcbiAgQElucHV0KClcbiAgcGFkZGluZzogQ2FyZENvbXBvbmVudC5QYWRkaW5nID0gJ21lZGl1bSc7XG5cbiAgQElucHV0KClcbiAgZ3JvdzogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqIERyYXdzIGEgc2VwYXJhdG9yIGJlbG93IHRoZSBjb250ZW50LiAqL1xuICBASW5wdXQoKVxuICBkaXZpZGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIGdldCBjbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHtcbiAgICAgIFtgcGFkZGluZy0ke3RoaXMucGFkZGluZ31gXTogdHJ1ZSxcbiAgICAgIGdyb3c6IHRoaXMuZ3JvdyxcbiAgICAgIGRpdmlkZXI6IHRoaXMuZGl2aWRlcixcbiAgICB9KVxuICAgICAgLmZpbHRlcigoW18sIHZdKSA9PiB2KVxuICAgICAgLm1hcCgoW2tdKSA9PiBrKVxuICAgICAgLmpvaW4oJyAnKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuIl19
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC1jb250ZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL2xheW91dC9jYXJkL2NhcmQtY29udGVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9sYXlvdXQvY2FyZC9jYXJkLWNvbnRlbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsV0FBVyxFQUNYLEtBQUssRUFFTCxRQUFRLEdBRVQsTUFBTSxlQUFlLENBQUM7OztBQUd2Qjs7Ozs7Ozs7OztHQVVHO0FBT0gsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQixZQUNtQixFQUEyQixFQUMzQixRQUFtQixFQUNQLElBQTBCO1FBRnRDLE9BQUUsR0FBRixFQUFFLENBQXlCO1FBQzNCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDUCxTQUFJLEdBQUosSUFBSSxDQUFzQjtRQUl6RCxZQUFPLEdBQTBCLFFBQVEsQ0FBQztRQUcxQyxTQUFJLEdBQVksSUFBSSxDQUFDO1FBRXJCLDJDQUEyQztRQUUzQyxZQUFPLEdBQVksS0FBSyxDQUFDO0lBVnRCLENBQUM7SUFZSjs7OztPQUlHO0lBQ0gsUUFBUTtRQUNOLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDO1FBQ3JDLElBQUksUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFO1lBQ3pDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztTQUNuRTtJQUNILENBQUM7SUFFRCxJQUNJLE9BQU87UUFDVCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDcEIsQ0FBQyxXQUFXLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUk7WUFDakMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1NBQ3RCLENBQUM7YUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNmLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNmLENBQUM7O2tIQXZDVSxvQkFBb0I7c0dBQXBCLG9CQUFvQiw2S0M3QmpDLDZCQUNBOzRGRDRCYSxvQkFBb0I7a0JBTmhDLFNBQVM7K0JBQ0Usa0JBQWtCLG1CQUdYLHVCQUF1QixDQUFDLE1BQU07OzBCQU01QyxRQUFROzRDQUlYLE9BQU87c0JBRE4sS0FBSztnQkFJTixJQUFJO3NCQURILEtBQUs7Z0JBS04sT0FBTztzQkFETixLQUFLO2dCQWdCRixPQUFPO3NCQURWLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgUmVuZGVyZXIyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENhcmRDb21wb25lbnQgfSBmcm9tICcuL2NhcmQuY29tcG9uZW50JztcblxuLyoqXG4gKiBCb2R5IG9mIGEgYHJpdi1jYXJkYC5cbiAqXG4gKiBHcm93cyB0byBhYnNvcmIgYW55IHNwYXJlIGhlaWdodCBieSBkZWZhdWx0LCB3aGljaCBrZWVwcyBgcml2LWNhcmQtYWN0aW9uc2BcbiAqIHBpbm5lZCB0byB0aGUgYm90dG9tIHdoZW4gY2FyZHMgb2YgZGlmZmVyaW5nIGNvbnRlbnQgc2l0IGluIGFuIGVxdWFsLWhlaWdodFxuICogZ3JpZC4gU2V0IGBbZ3Jvd109XCJmYWxzZVwiYCB3aGVuIHRoZSBjYXJkIHNob3VsZCBzaHJpbmsgdG8gaXRzIGNvbnRlbnQuXG4gKlxuICogSW4gYSBjYXJkIHdpdGggYW4gZXhwYW5kYWJsZSBoZWFkZXIsIHRoaXMgaXMgdGhlIHJlZ2lvbiB0aGUgdG9nZ2xlIGNvbnRyb2xzIOKAlFxuICogaXQgdGFrZXMgYW4gaWQgZnJvbSB0aGUgY2FyZCBzbyB0aGF0IGBhcmlhLWNvbnRyb2xzYCByZXNvbHZlcyBhcyBzb29uIGFzIHRoZVxuICogYm9keSBpcyByZW5kZXJlZC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncml2LWNhcmQtY29udGVudCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXJkLWNvbnRlbnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYXJkLWNvbnRlbnQuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQ2FyZENvbnRlbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBjYXJkOiBDYXJkQ29tcG9uZW50IHwgbnVsbCxcbiAgKSB7fVxuXG4gIEBJbnB1dCgpXG4gIHBhZGRpbmc6IENhcmRDb21wb25lbnQuUGFkZGluZyA9ICdtZWRpdW0nO1xuXG4gIEBJbnB1dCgpXG4gIGdyb3c6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKiBEcmF3cyBhIHNlcGFyYXRvciBiZWxvdyB0aGUgY29udGVudC4gKi9cbiAgQElucHV0KClcbiAgZGl2aWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXZWFycyB0aGUgcmVnaW9uIGlkIGFuIGV4cGFuZGFibGUgaGVhZGVyJ3MgdG9nZ2xlIHBvaW50cyBgYXJpYS1jb250cm9sc2BcbiAgICogYXQsIHNvIG5laXRoZXIgc2lkZSBuZWVkcyB0aGUgY29uc3VtZXIgdG8gbmFtZSB0aGUgYm9keS4gQW4gaWQgdGhlIGNvbnN1bWVyXG4gICAqIHNldCBvZiB0aGVpciBvd24gaXMgbGVmdCBhbG9uZS5cbiAgICovXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IHJlZ2lvbklkID0gdGhpcy5jYXJkPy5yZWdpb25JZDtcbiAgICBpZiAocmVnaW9uSWQgJiYgIXRoaXMuZWwubmF0aXZlRWxlbWVudC5pZCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAnaWQnLCByZWdpb25JZCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIGdldCBjbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHtcbiAgICAgIFtgcGFkZGluZy0ke3RoaXMucGFkZGluZ31gXTogdHJ1ZSxcbiAgICAgIGdyb3c6IHRoaXMuZ3JvdyxcbiAgICAgIGRpdmlkZXI6IHRoaXMuZGl2aWRlcixcbiAgICB9KVxuICAgICAgLmZpbHRlcigoW18sIHZdKSA9PiB2KVxuICAgICAgLm1hcCgoW2tdKSA9PiBrKVxuICAgICAgLmpvaW4oJyAnKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuIl19
@@ -1,8 +1,9 @@
1
- import { ChangeDetectionStrategy, Component, HostBinding, Input, Optional, } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, Optional, Output, } from '@angular/core';
2
2
  import { uniqueId } from 'lodash';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "./card.component";
5
5
  import * as i2 from "@angular/common";
6
+ import * as i3 from "../../icon/icon.component";
6
7
  /**
7
8
  * Top row of a `riv-card`: heading text plus optional adornments.
8
9
  *
@@ -26,8 +27,33 @@ import * as i2 from "@angular/common";
26
27
  * outline; pick the level that follows the surrounding content rather than the
27
28
  * one that looks right, since size comes from the design tokens either way.
28
29
  *
29
- * The heading font can be overridden per-instance with the
30
- * `--card-heading-font` custom property.
30
+ * The heading font and colour can be overridden per-instance with the
31
+ * `--card-heading-font` and `--card-heading-color` custom properties.
32
+ *
33
+ * ## Expanding and collapsing
34
+ *
35
+ * `expandable` turns the header into the toggle for the card's body: it renders
36
+ * a chevron and covers the row with a real `<button>` carrying `aria-expanded`
37
+ * and `aria-controls`, so the pattern is keyboard operable and announces its
38
+ * state. Controls in `[actions]` sit above that button and stay independently
39
+ * clickable, so a menu beside the toggle needs no `stopPropagation`.
40
+ *
41
+ * The header holds no state of its own — bind `expanded` and act on
42
+ * `expandedChange`, or use `[(expanded)]`:
43
+ *
44
+ * ```html
45
+ * <riv-card>
46
+ * <riv-card-header
47
+ * [heading]="'Patient info'"
48
+ * [expandable]="true"
49
+ * [(expanded)]="open"
50
+ * ></riv-card-header>
51
+ * <riv-card-content *ngIf="open">...</riv-card-content>
52
+ * </riv-card>
53
+ * ```
54
+ *
55
+ * The toggle is named by the header's title, so an expandable header needs a
56
+ * `heading` or a projected title.
31
57
  */
32
58
  export class CardHeaderComponent {
33
59
  constructor(card) {
@@ -37,6 +63,11 @@ export class CardHeaderComponent {
37
63
  * target from the title rather than from the card's whole text.
38
64
  */
39
65
  this.titleId = uniqueId('riv-card-title-');
66
+ /**
67
+ * Names the body the toggle controls. Handed to the enclosing card, which
68
+ * relays it to the projected `riv-card-content`.
69
+ */
70
+ this.regionId = uniqueId('riv-card-region-');
40
71
  /** Heading element rendered for `heading`, for document outline purposes. */
41
72
  this.headingLevel = 3;
42
73
  /** `filled` gives the header its own background, separating it from the body. */
@@ -46,11 +77,26 @@ export class CardHeaderComponent {
46
77
  this.divider = false;
47
78
  /** Cross-axis alignment of the leading slot, heading block, and actions. */
48
79
  this.align = 'start';
80
+ /** Turns the header row into the toggle for the card's body. */
81
+ this.expandable = false;
82
+ /** Whether the body is currently open. The consumer owns this state. */
83
+ this.expanded = false;
84
+ /** Side of the header the chevron sits on. */
85
+ this.togglePosition = 'trailing';
86
+ /**
87
+ * Blocks the toggle, for a section that is not yet available to open. Set it
88
+ * alongside a disabled `riv-card`, whose own `disabled` mutes the surface but
89
+ * does not reach the header's controls.
90
+ */
91
+ this.disabled = false;
92
+ /** Emitted with the state the consumer is being asked to move to. */
93
+ this.expandedChange = new EventEmitter();
49
94
  }
50
95
  /**
51
- * Offers the heading to an enclosing card as the name for its click target.
52
- * Only a text heading is offered: projected titles can be anything, so those
53
- * cards fall back to naming against their whole content.
96
+ * Offers the heading to an enclosing card as the name for its click target,
97
+ * and the toggle's region so a projected `riv-card-content` can wear it. Only
98
+ * a text heading is offered: projected titles can be anything, so those cards
99
+ * fall back to naming against their whole content.
54
100
  */
55
101
  ngOnChanges(changes) {
56
102
  if (changes['heading']) {
@@ -61,10 +107,26 @@ export class CardHeaderComponent {
61
107
  this.card?.clearTitleId(this.titleId);
62
108
  }
63
109
  }
110
+ if (changes['expandable']) {
111
+ if (this.expandable) {
112
+ this.card?.setRegionId(this.regionId);
113
+ }
114
+ else {
115
+ this.card?.clearRegionId(this.regionId);
116
+ }
117
+ }
64
118
  }
65
119
  /** Withdraws the offer, so the card stops naming itself against this header. */
66
120
  ngOnDestroy() {
67
121
  this.card?.clearTitleId(this.titleId);
122
+ this.card?.clearRegionId(this.regionId);
123
+ }
124
+ /**
125
+ * Asks for the opposite state rather than taking it, which keeps the header
126
+ * free of state that could drift from the consumer's.
127
+ */
128
+ toggle() {
129
+ this.expandedChange.emit(!this.expanded);
68
130
  }
69
131
  get classes() {
70
132
  return Object.entries({
@@ -72,6 +134,7 @@ export class CardHeaderComponent {
72
134
  [`padding-${this.padding}`]: true,
73
135
  [`align-${this.align}`]: true,
74
136
  divider: this.divider,
137
+ expandable: this.expandable,
75
138
  })
76
139
  .filter(([_, v]) => v)
77
140
  .map(([k]) => k)
@@ -93,10 +156,10 @@ export class CardHeaderComponent {
93
156
  }
94
157
  }
95
158
  CardHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CardHeaderComponent, deps: [{ token: i1.CardComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component });
96
- CardHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: CardHeaderComponent, selector: "riv-card-header", inputs: { heading: "heading", subheading: "subheading", headingLevel: "headingLevel", variant: "variant", padding: "padding", divider: "divider", align: "align", clamp: "clamp" }, host: { properties: { "class": "this.classes" } }, usesOnChanges: true, ngImport: i0, template: "<div class=\"leading\"><ng-content select=\"[leading]\"></ng-content></div>\n<div class=\"main\">\n <div class=\"title-row\" [id]=\"titleId\">\n <div *ngIf=\"heading?.trim()\" class=\"heading\" [ngStyle]=\"clampStyle\">\n <ng-container [ngSwitch]=\"headingLevel\">\n <h1 *ngSwitchCase=\"1\">{{ heading }}</h1>\n <h2 *ngSwitchCase=\"2\">{{ heading }}</h2>\n <h3 *ngSwitchCase=\"3\">{{ heading }}</h3>\n <h4 *ngSwitchCase=\"4\">{{ heading }}</h4>\n <h5 *ngSwitchCase=\"5\">{{ heading }}</h5>\n <h6 *ngSwitchCase=\"6\">{{ heading }}</h6>\n </ng-container>\n </div>\n <ng-content></ng-content>\n </div>\n <div *ngIf=\"subheading?.trim()\" class=\"subheading\">{{ subheading }}</div>\n</div>\n<div class=\"actions\"><ng-content select=\"[actions]\"></ng-content></div>\n", styles: [":host{display:flex;gap:var(--size-medium);min-width:0}:host.align-start{align-items:flex-start}:host.align-center{align-items:center}:host.padding-small{padding:var(--size-small)}:host.padding-medium{padding:var(--size-medium)}:host.padding-large{padding:var(--size-large)}:host.filled{background-color:var(--surface-light-1)}:host.filled,:host.divider{border-bottom:var(--border-width) solid var(--border-light-blend)}.main{flex-grow:1;min-width:0}.title-row{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--size-xsmall);min-width:0;font:var(--card-heading-font, var(--title-04));color:var(--type-light-high-contrast)}:host.filled .title-row{font:var(--card-heading-font, var(--title-02))}.leading{flex-shrink:0}.actions{position:relative;z-index:var(--card-raised-z-index);display:flex;flex-shrink:0;align-items:center;gap:var(--size-small)}.leading:not(:has(*)),.actions:not(:has(*)){display:none}.heading{min-width:0}.heading>*{display:inline;margin:0;font:inherit;color:inherit}.subheading{font:var(--body-small);color:var(--type-light-low-contrast)}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
159
+ CardHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: CardHeaderComponent, selector: "riv-card-header", inputs: { heading: "heading", subheading: "subheading", headingLevel: "headingLevel", variant: "variant", padding: "padding", divider: "divider", align: "align", clamp: "clamp", expandable: "expandable", expanded: "expanded", togglePosition: "togglePosition", disabled: "disabled" }, outputs: { expandedChange: "expandedChange" }, host: { properties: { "class": "this.classes" } }, usesOnChanges: true, ngImport: i0, template: "<button\n *ngIf=\"expandable\"\n type=\"button\"\n class=\"expand-toggle\"\n [disabled]=\"disabled\"\n [attr.aria-expanded]=\"expanded\"\n [attr.aria-controls]=\"regionId\"\n [attr.aria-labelledby]=\"titleId\"\n (click)=\"toggle()\"\n></button>\n<ng-container\n *ngIf=\"expandable && togglePosition === 'leading'\"\n [ngTemplateOutlet]=\"chevron\"\n></ng-container>\n<div class=\"leading\"><ng-content select=\"[leading]\"></ng-content></div>\n<div class=\"main\">\n <div class=\"title-row\" [id]=\"titleId\">\n <div *ngIf=\"heading?.trim()\" class=\"heading\" [ngStyle]=\"clampStyle\">\n <ng-container [ngSwitch]=\"headingLevel\">\n <h1 *ngSwitchCase=\"1\">{{ heading }}</h1>\n <h2 *ngSwitchCase=\"2\">{{ heading }}</h2>\n <h3 *ngSwitchCase=\"3\">{{ heading }}</h3>\n <h4 *ngSwitchCase=\"4\">{{ heading }}</h4>\n <h5 *ngSwitchCase=\"5\">{{ heading }}</h5>\n <h6 *ngSwitchCase=\"6\">{{ heading }}</h6>\n </ng-container>\n </div>\n <ng-content></ng-content>\n </div>\n <div *ngIf=\"subheading?.trim()\" class=\"subheading\">{{ subheading }}</div>\n</div>\n<ng-container\n *ngIf=\"expandable && togglePosition === 'trailing'\"\n [ngTemplateOutlet]=\"chevron\"\n></ng-container>\n<div class=\"actions\"><ng-content select=\"[actions]\"></ng-content></div>\n\n<ng-template #chevron>\n <riv-icon\n class=\"expand-chevron\"\n [class.expanded]=\"expanded\"\n [name]=\"'ChevronDown'\"\n [size]=\"20\"\n ></riv-icon>\n</ng-template>\n", styles: [":host{display:flex;gap:var(--size-medium);min-width:0}:host.expandable{position:relative}:host.align-start{align-items:flex-start}:host.align-center{align-items:center}:host.padding-small{padding:var(--size-small)}:host.padding-medium{padding:var(--size-medium)}:host.padding-large{padding:var(--size-large)}:host.filled{background-color:var(--surface-light-1)}:host.filled,:host.divider{border-bottom:var(--border-width) solid var(--border-light-blend)}.main{flex-grow:1;min-width:0}.title-row{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--size-xsmall);min-width:0;font:var(--card-heading-font, var(--title-04));color:var(--card-heading-color, var(--type-light-high-contrast))}:host.filled .title-row{font:var(--card-heading-font, var(--title-02))}.leading{flex-shrink:0}.actions{position:relative;z-index:var(--card-raised-z-index);display:flex;flex-shrink:0;align-items:center;gap:var(--size-small)}.expand-toggle{position:absolute;inset:0;z-index:var(--card-click-target-z-index);padding:0;border:none;background:none;cursor:pointer;transition:background-color var(--short-transition)}.expand-toggle:not(:disabled):hover{background-color:var(--black-20)}.expand-toggle:disabled{cursor:default}.expand-toggle:focus-visible{outline:var(--border-width-large) solid var(--type-light-link);outline-offset:calc(-1 * var(--border-width-large))}.expand-chevron{flex-shrink:0;transition:transform var(--medium-transition)}.expand-chevron.expanded{transform:rotate(-180deg)}.leading:not(:has(*)),.actions:not(:has(*)){display:none}.heading{min-width:0}.heading>*{display:inline;margin:0;font:inherit;color:inherit}.subheading{font:var(--body-small);color:var(--type-light-low-contrast)}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i3.IconComponent, selector: "riv-icon", inputs: ["name", "fillColor", "size", "customSize", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
97
160
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CardHeaderComponent, decorators: [{
98
161
  type: Component,
99
- args: [{ selector: 'riv-card-header', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"leading\"><ng-content select=\"[leading]\"></ng-content></div>\n<div class=\"main\">\n <div class=\"title-row\" [id]=\"titleId\">\n <div *ngIf=\"heading?.trim()\" class=\"heading\" [ngStyle]=\"clampStyle\">\n <ng-container [ngSwitch]=\"headingLevel\">\n <h1 *ngSwitchCase=\"1\">{{ heading }}</h1>\n <h2 *ngSwitchCase=\"2\">{{ heading }}</h2>\n <h3 *ngSwitchCase=\"3\">{{ heading }}</h3>\n <h4 *ngSwitchCase=\"4\">{{ heading }}</h4>\n <h5 *ngSwitchCase=\"5\">{{ heading }}</h5>\n <h6 *ngSwitchCase=\"6\">{{ heading }}</h6>\n </ng-container>\n </div>\n <ng-content></ng-content>\n </div>\n <div *ngIf=\"subheading?.trim()\" class=\"subheading\">{{ subheading }}</div>\n</div>\n<div class=\"actions\"><ng-content select=\"[actions]\"></ng-content></div>\n", styles: [":host{display:flex;gap:var(--size-medium);min-width:0}:host.align-start{align-items:flex-start}:host.align-center{align-items:center}:host.padding-small{padding:var(--size-small)}:host.padding-medium{padding:var(--size-medium)}:host.padding-large{padding:var(--size-large)}:host.filled{background-color:var(--surface-light-1)}:host.filled,:host.divider{border-bottom:var(--border-width) solid var(--border-light-blend)}.main{flex-grow:1;min-width:0}.title-row{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--size-xsmall);min-width:0;font:var(--card-heading-font, var(--title-04));color:var(--type-light-high-contrast)}:host.filled .title-row{font:var(--card-heading-font, var(--title-02))}.leading{flex-shrink:0}.actions{position:relative;z-index:var(--card-raised-z-index);display:flex;flex-shrink:0;align-items:center;gap:var(--size-small)}.leading:not(:has(*)),.actions:not(:has(*)){display:none}.heading{min-width:0}.heading>*{display:inline;margin:0;font:inherit;color:inherit}.subheading{font:var(--body-small);color:var(--type-light-low-contrast)}\n"] }]
162
+ args: [{ selector: 'riv-card-header', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n *ngIf=\"expandable\"\n type=\"button\"\n class=\"expand-toggle\"\n [disabled]=\"disabled\"\n [attr.aria-expanded]=\"expanded\"\n [attr.aria-controls]=\"regionId\"\n [attr.aria-labelledby]=\"titleId\"\n (click)=\"toggle()\"\n></button>\n<ng-container\n *ngIf=\"expandable && togglePosition === 'leading'\"\n [ngTemplateOutlet]=\"chevron\"\n></ng-container>\n<div class=\"leading\"><ng-content select=\"[leading]\"></ng-content></div>\n<div class=\"main\">\n <div class=\"title-row\" [id]=\"titleId\">\n <div *ngIf=\"heading?.trim()\" class=\"heading\" [ngStyle]=\"clampStyle\">\n <ng-container [ngSwitch]=\"headingLevel\">\n <h1 *ngSwitchCase=\"1\">{{ heading }}</h1>\n <h2 *ngSwitchCase=\"2\">{{ heading }}</h2>\n <h3 *ngSwitchCase=\"3\">{{ heading }}</h3>\n <h4 *ngSwitchCase=\"4\">{{ heading }}</h4>\n <h5 *ngSwitchCase=\"5\">{{ heading }}</h5>\n <h6 *ngSwitchCase=\"6\">{{ heading }}</h6>\n </ng-container>\n </div>\n <ng-content></ng-content>\n </div>\n <div *ngIf=\"subheading?.trim()\" class=\"subheading\">{{ subheading }}</div>\n</div>\n<ng-container\n *ngIf=\"expandable && togglePosition === 'trailing'\"\n [ngTemplateOutlet]=\"chevron\"\n></ng-container>\n<div class=\"actions\"><ng-content select=\"[actions]\"></ng-content></div>\n\n<ng-template #chevron>\n <riv-icon\n class=\"expand-chevron\"\n [class.expanded]=\"expanded\"\n [name]=\"'ChevronDown'\"\n [size]=\"20\"\n ></riv-icon>\n</ng-template>\n", styles: [":host{display:flex;gap:var(--size-medium);min-width:0}:host.expandable{position:relative}:host.align-start{align-items:flex-start}:host.align-center{align-items:center}:host.padding-small{padding:var(--size-small)}:host.padding-medium{padding:var(--size-medium)}:host.padding-large{padding:var(--size-large)}:host.filled{background-color:var(--surface-light-1)}:host.filled,:host.divider{border-bottom:var(--border-width) solid var(--border-light-blend)}.main{flex-grow:1;min-width:0}.title-row{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--size-xsmall);min-width:0;font:var(--card-heading-font, var(--title-04));color:var(--card-heading-color, var(--type-light-high-contrast))}:host.filled .title-row{font:var(--card-heading-font, var(--title-02))}.leading{flex-shrink:0}.actions{position:relative;z-index:var(--card-raised-z-index);display:flex;flex-shrink:0;align-items:center;gap:var(--size-small)}.expand-toggle{position:absolute;inset:0;z-index:var(--card-click-target-z-index);padding:0;border:none;background:none;cursor:pointer;transition:background-color var(--short-transition)}.expand-toggle:not(:disabled):hover{background-color:var(--black-20)}.expand-toggle:disabled{cursor:default}.expand-toggle:focus-visible{outline:var(--border-width-large) solid var(--type-light-link);outline-offset:calc(-1 * var(--border-width-large))}.expand-chevron{flex-shrink:0;transition:transform var(--medium-transition)}.expand-chevron.expanded{transform:rotate(-180deg)}.leading:not(:has(*)),.actions:not(:has(*)){display:none}.heading{min-width:0}.heading>*{display:inline;margin:0;font:inherit;color:inherit}.subheading{font:var(--body-small);color:var(--type-light-low-contrast)}\n"] }]
100
163
  }], ctorParameters: function () { return [{ type: i1.CardComponent, decorators: [{
101
164
  type: Optional
102
165
  }] }]; }, propDecorators: { heading: [{
@@ -115,6 +178,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
115
178
  type: Input
116
179
  }], clamp: [{
117
180
  type: Input
181
+ }], expandable: [{
182
+ type: Input
183
+ }], expanded: [{
184
+ type: Input
185
+ }], togglePosition: [{
186
+ type: Input
187
+ }], disabled: [{
188
+ type: Input
189
+ }], expandedChange: [{
190
+ type: Output
118
191
  }], classes: [{
119
192
  type: HostBinding,
120
193
  args: ['class']
@@ -123,5 +196,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
123
196
  CardHeaderComponent.Variants = ['plain', 'filled'];
124
197
  CardHeaderComponent.HeadingLevels = [1, 2, 3, 4, 5, 6];
125
198
  CardHeaderComponent.Aligns = ['start', 'center'];
199
+ CardHeaderComponent.TogglePositions = ['leading', 'trailing'];
126
200
  })(CardHeaderComponent || (CardHeaderComponent = {}));
127
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvbGF5b3V0L2NhcmQvY2FyZC1oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvbGF5b3V0L2NhcmQvY2FyZC1oZWFkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsV0FBVyxFQUNYLEtBQUssRUFHTCxRQUFRLEdBRVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFFBQVEsQ0FBQzs7OztBQUdsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQU9ILE1BQU0sT0FBTyxtQkFBbUI7SUFDOUIsWUFBeUMsSUFBMEI7UUFBMUIsU0FBSSxHQUFKLElBQUksQ0FBc0I7UUFFbkU7OztXQUdHO1FBQ00sWUFBTyxHQUFXLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBVXZELDZFQUE2RTtRQUU3RSxpQkFBWSxHQUFxQyxDQUFDLENBQUM7UUFFbkQsaUZBQWlGO1FBRWpGLFlBQU8sR0FBZ0MsT0FBTyxDQUFDO1FBRy9DLFlBQU8sR0FBMEIsUUFBUSxDQUFDO1FBRTFDLDJFQUEyRTtRQUUzRSxZQUFPLEdBQVksS0FBSyxDQUFDO1FBRXpCLDRFQUE0RTtRQUU1RSxVQUFLLEdBQThCLE9BQU8sQ0FBQztJQWpDMkIsQ0FBQztJQTBDdkU7Ozs7T0FJRztJQUNILFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUN0QixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUNyQztpQkFBTTtnQkFDTCxJQUFJLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDdkM7U0FDRjtJQUNILENBQUM7SUFFRCxnRkFBZ0Y7SUFDaEYsV0FBVztRQUNULElBQUksQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFDSSxPQUFPO1FBQ1QsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDO1lBQ3BCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUk7WUFDcEIsQ0FBQyxXQUFXLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUk7WUFDakMsQ0FBQyxTQUFTLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUk7WUFDN0IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1NBQ3RCLENBQUM7YUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNmLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNmLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSTtZQUN2QixDQUFDLENBQUMsRUFBRTtZQUNKLENBQUMsQ0FBQztnQkFDRSxPQUFPLEVBQUUsYUFBYTtnQkFDdEIsb0JBQW9CLEVBQUUsVUFBVTtnQkFDaEMsb0JBQW9CLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNyQyxRQUFRLEVBQUUsUUFBUTthQUNuQixDQUFDO0lBQ1IsQ0FBQzs7aUhBekZVLG1CQUFtQjtxR0FBbkIsbUJBQW1CLG1UQzdDaEMsK3pCQWtCQTs0RkQyQmEsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNFLGlCQUFpQixtQkFHVix1QkFBdUIsQ0FBQyxNQUFNOzswQkFHbEMsUUFBUTs0Q0FVckIsT0FBTztzQkFETixLQUFLO2dCQUtOLFVBQVU7c0JBRFQsS0FBSztnQkFLTixZQUFZO3NCQURYLEtBQUs7Z0JBS04sT0FBTztzQkFETixLQUFLO2dCQUlOLE9BQU87c0JBRE4sS0FBSztnQkFLTixPQUFPO3NCQUROLEtBQUs7Z0JBS04sS0FBSztzQkFESixLQUFLO2dCQVFOLEtBQUs7c0JBREosS0FBSztnQkF3QkYsT0FBTztzQkFEVixXQUFXO3VCQUFDLE9BQU87O0FBNkJ0QixXQUFpQixtQkFBbUI7SUFDckIsNEJBQVEsR0FBRyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQVUsQ0FBQztJQUd4QyxpQ0FBYSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQVUsQ0FBQztJQUc1QywwQkFBTSxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBVSxDQUFDO0FBRXJELENBQUMsRUFUZ0IsbUJBQW1CLEtBQW5CLG1CQUFtQixRQVNuQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHVuaXF1ZUlkIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IENhcmRDb21wb25lbnQgfSBmcm9tICcuL2NhcmQuY29tcG9uZW50JztcblxuLyoqXG4gKiBUb3Agcm93IG9mIGEgYHJpdi1jYXJkYDogaGVhZGluZyB0ZXh0IHBsdXMgb3B0aW9uYWwgYWRvcm5tZW50cy5cbiAqXG4gKiBUaHJlZSBwcm9qZWN0aW9uIHNsb3RzLCBhbGwgb3B0aW9uYWw6XG4gKiAtIGBbbGVhZGluZ11gIOKAlCBpY29uLCBhdmF0YXIsIG9yIHN0YXR1cyBkb3Qgc2hvd24gYmVmb3JlIHRoZSBoZWFkaW5nXG4gKiAtIGRlZmF1bHQg4oCUIGxhaWQgb3V0IG9uIHRoZSBoZWFkaW5nJ3MgYmFzZWxpbmUsIHNvIHN0YXR1cyBiYWRnZXMgc2l0IGJlc2lkZVxuICogICB0aGUgdGl0bGUgYW5kIHdyYXAgYmVsb3cgaXQgd2hlbiBzcGFjZSBydW5zIG91dC4gQWxzbyB0YWtlcyBhIHdob2xlIGN1c3RvbVxuICogICB0aXRsZSAoYW4gaW5saW5lIHJlbmFtZSBmaWVsZCwgc2F5KSB3aGVuIGBoZWFkaW5nYCBpcyBsZWZ0IHVuc2V0O1xuICogICBgc3ViaGVhZGluZ2Agc3RpbGwgcmVuZGVycyBiZWxvdyBlaXRoZXIgd2F5LlxuICogLSBgW2FjdGlvbnNdYCDigJQgdHJhaWxpbmcgY29udHJvbHMgc3VjaCBhcyBgcml2LW1lbnVgXG4gKlxuICogYGBgaHRtbFxuICogPHJpdi1jYXJkLWhlYWRlciBbaGVhZGluZ109XCInQ29tbWVyY2lhbCAyMDI1J1wiIFtzdWJoZWFkaW5nXT1cIidBZXRuYSdcIj5cbiAqICAgPHJpdi1pY29uIGxlYWRpbmcgW25hbWVdPVwiJ0ZpbGVUZXh0J1wiPjwvcml2LWljb24+XG4gKiAgIDxyaXYtYmFkZ2UgW3NpemVdPVwiJ3NtYWxsJ1wiIFt2YXJpYW50XT1cIidjYXRlZ29yaWNhbC04J1wiPkRyYWZ0PC9yaXYtYmFkZ2U+XG4gKiAgIDxyaXYtbWVudSBhY3Rpb25zPi4uLjwvcml2LW1lbnU+XG4gKiA8L3Jpdi1jYXJkLWhlYWRlcj5cbiAqIGBgYFxuICpcbiAqIGBoZWFkaW5nTGV2ZWxgIHJlbmRlcnMgYSByZWFsIGBoMWDigJNgaDZgIHNvIHRoZSBjYXJkIGZpdHMgdGhlIHBhZ2UncyBoZWFkaW5nXG4gKiBvdXRsaW5lOyBwaWNrIHRoZSBsZXZlbCB0aGF0IGZvbGxvd3MgdGhlIHN1cnJvdW5kaW5nIGNvbnRlbnQgcmF0aGVyIHRoYW4gdGhlXG4gKiBvbmUgdGhhdCBsb29rcyByaWdodCwgc2luY2Ugc2l6ZSBjb21lcyBmcm9tIHRoZSBkZXNpZ24gdG9rZW5zIGVpdGhlciB3YXkuXG4gKlxuICogVGhlIGhlYWRpbmcgZm9udCBjYW4gYmUgb3ZlcnJpZGRlbiBwZXItaW5zdGFuY2Ugd2l0aCB0aGVcbiAqIGAtLWNhcmQtaGVhZGluZy1mb250YCBjdXN0b20gcHJvcGVydHkuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Jpdi1jYXJkLWhlYWRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXJkLWhlYWRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NhcmQtaGVhZGVyLmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIENhcmRIZWFkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgY2FyZDogQ2FyZENvbXBvbmVudCB8IG51bGwpIHt9XG5cbiAgLyoqXG4gICAqIElkZW50aWZpZXMgdGhlIHRpdGxlIGZvciBhIGNsaWNrYWJsZSBgcml2LWNhcmRgLCB3aGljaCBuYW1lcyBpdHMgY2xpY2tcbiAgICogdGFyZ2V0IGZyb20gdGhlIHRpdGxlIHJhdGhlciB0aGFuIGZyb20gdGhlIGNhcmQncyB3aG9sZSB0ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgdGl0bGVJZDogc3RyaW5nID0gdW5pcXVlSWQoJ3Jpdi1jYXJkLXRpdGxlLScpO1xuXG4gIC8qKiBIZWFkaW5nIHRleHQuIE9taXQgd2hlbiBwcm9qZWN0aW5nIGN1c3RvbSBoZWFkaW5nIG1hcmt1cCBpbnN0ZWFkLiAqL1xuICBASW5wdXQoKVxuICBoZWFkaW5nPzogc3RyaW5nO1xuXG4gIC8qKiBTdXBwb3J0aW5nIHRleHQgcmVuZGVyZWQgYmVsb3cgdGhlIGhlYWRpbmcuICovXG4gIEBJbnB1dCgpXG4gIHN1YmhlYWRpbmc/OiBzdHJpbmc7XG5cbiAgLyoqIEhlYWRpbmcgZWxlbWVudCByZW5kZXJlZCBmb3IgYGhlYWRpbmdgLCBmb3IgZG9jdW1lbnQgb3V0bGluZSBwdXJwb3Nlcy4gKi9cbiAgQElucHV0KClcbiAgaGVhZGluZ0xldmVsOiBDYXJkSGVhZGVyQ29tcG9uZW50LkhlYWRpbmdMZXZlbCA9IDM7XG5cbiAgLyoqIGBmaWxsZWRgIGdpdmVzIHRoZSBoZWFkZXIgaXRzIG93biBiYWNrZ3JvdW5kLCBzZXBhcmF0aW5nIGl0IGZyb20gdGhlIGJvZHkuICovXG4gIEBJbnB1dCgpXG4gIHZhcmlhbnQ6IENhcmRIZWFkZXJDb21wb25lbnQuVmFyaWFudCA9ICdwbGFpbic7XG5cbiAgQElucHV0KClcbiAgcGFkZGluZzogQ2FyZENvbXBvbmVudC5QYWRkaW5nID0gJ21lZGl1bSc7XG5cbiAgLyoqIERyYXdzIGEgc2VwYXJhdG9yIGJlbG93IHRoZSBoZWFkZXIuIEltcGxpZWQgYnkgdGhlIGBmaWxsZWRgIHZhcmlhbnQuICovXG4gIEBJbnB1dCgpXG4gIGRpdmlkZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogQ3Jvc3MtYXhpcyBhbGlnbm1lbnQgb2YgdGhlIGxlYWRpbmcgc2xvdCwgaGVhZGluZyBibG9jaywgYW5kIGFjdGlvbnMuICovXG4gIEBJbnB1dCgpXG4gIGFsaWduOiBDYXJkSGVhZGVyQ29tcG9uZW50LkFsaWduID0gJ3N0YXJ0JztcblxuICAvKipcbiAgICogVHJ1bmNhdGVzIHRoZSBoZWFkaW5nIHRvIHRoaXMgbWFueSBsaW5lcyB3aXRoIGFuIGVsbGlwc2lzLiBMZWF2ZSB1bnNldCB0b1xuICAgKiBsZXQgdGhlIGhlYWRpbmcgd3JhcCBmcmVlbHkuXG4gICAqL1xuICBASW5wdXQoKVxuICBjbGFtcD86IG51bWJlcjtcblxuICAvKipcbiAgICogT2ZmZXJzIHRoZSBoZWFkaW5nIHRvIGFuIGVuY2xvc2luZyBjYXJkIGFzIHRoZSBuYW1lIGZvciBpdHMgY2xpY2sgdGFyZ2V0LlxuICAgKiBPbmx5IGEgdGV4dCBoZWFkaW5nIGlzIG9mZmVyZWQ6IHByb2plY3RlZCB0aXRsZXMgY2FuIGJlIGFueXRoaW5nLCBzbyB0aG9zZVxuICAgKiBjYXJkcyBmYWxsIGJhY2sgdG8gbmFtaW5nIGFnYWluc3QgdGhlaXIgd2hvbGUgY29udGVudC5cbiAgICovXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1snaGVhZGluZyddKSB7XG4gICAgICBpZiAodGhpcy5oZWFkaW5nPy50cmltKCkpIHtcbiAgICAgICAgdGhpcy5jYXJkPy5zZXRUaXRsZUlkKHRoaXMudGl0bGVJZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNhcmQ/LmNsZWFyVGl0bGVJZCh0aGlzLnRpdGxlSWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBXaXRoZHJhd3MgdGhlIG9mZmVyLCBzbyB0aGUgY2FyZCBzdG9wcyBuYW1pbmcgaXRzZWxmIGFnYWluc3QgdGhpcyBoZWFkZXIuICovXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuY2FyZD8uY2xlYXJUaXRsZUlkKHRoaXMudGl0bGVJZCk7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgZ2V0IGNsYXNzZXMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoe1xuICAgICAgW3RoaXMudmFyaWFudF06IHRydWUsXG4gICAgICBbYHBhZGRpbmctJHt0aGlzLnBhZGRpbmd9YF06IHRydWUsXG4gICAgICBbYGFsaWduLSR7dGhpcy5hbGlnbn1gXTogdHJ1ZSxcbiAgICAgIGRpdmlkZXI6IHRoaXMuZGl2aWRlcixcbiAgICB9KVxuICAgICAgLmZpbHRlcigoW18sIHZdKSA9PiB2KVxuICAgICAgLm1hcCgoW2tdKSA9PiBrKVxuICAgICAgLmpvaW4oJyAnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaW5lIGNsYW1waW5nIGlzIGFwcGxpZWQgaW5saW5lIHNvIHRoZSBsaW5lIGNvdW50IHN0YXlzIGEgcGxhaW4gaW5wdXRcbiAgICogcmF0aGVyIHRoYW4gYSBmaXhlZCBzZXQgb2YgQ1NTIGNsYXNzZXMuXG4gICAqL1xuICBnZXQgY2xhbXBTdHlsZSgpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5jbGFtcCA9PSBudWxsXG4gICAgICA/IHt9XG4gICAgICA6IHtcbiAgICAgICAgICBkaXNwbGF5OiAnLXdlYmtpdC1ib3gnLFxuICAgICAgICAgICctd2Via2l0LWJveC1vcmllbnQnOiAndmVydGljYWwnLFxuICAgICAgICAgICctd2Via2l0LWxpbmUtY2xhbXAnOiBgJHt0aGlzLmNsYW1wfWAsXG4gICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ2FyZEhlYWRlckNvbXBvbmVudCB7XG4gIGV4cG9ydCBjb25zdCBWYXJpYW50cyA9IFsncGxhaW4nLCAnZmlsbGVkJ10gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIFZhcmlhbnQgPSAodHlwZW9mIFZhcmlhbnRzKVtudW1iZXJdO1xuXG4gIGV4cG9ydCBjb25zdCBIZWFkaW5nTGV2ZWxzID0gWzEsIDIsIDMsIDQsIDUsIDZdIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBIZWFkaW5nTGV2ZWwgPSAodHlwZW9mIEhlYWRpbmdMZXZlbHMpW251bWJlcl07XG5cbiAgZXhwb3J0IGNvbnN0IEFsaWducyA9IFsnc3RhcnQnLCAnY2VudGVyJ10gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIEFsaWduID0gKHR5cGVvZiBBbGlnbnMpW251bWJlcl07XG59XG4iLCI8ZGl2IGNsYXNzPVwibGVhZGluZ1wiPjxuZy1jb250ZW50IHNlbGVjdD1cIltsZWFkaW5nXVwiPjwvbmctY29udGVudD48L2Rpdj5cbjxkaXYgY2xhc3M9XCJtYWluXCI+XG4gIDxkaXYgY2xhc3M9XCJ0aXRsZS1yb3dcIiBbaWRdPVwidGl0bGVJZFwiPlxuICAgIDxkaXYgKm5nSWY9XCJoZWFkaW5nPy50cmltKClcIiBjbGFzcz1cImhlYWRpbmdcIiBbbmdTdHlsZV09XCJjbGFtcFN0eWxlXCI+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJoZWFkaW5nTGV2ZWxcIj5cbiAgICAgICAgPGgxICpuZ1N3aXRjaENhc2U9XCIxXCI+e3sgaGVhZGluZyB9fTwvaDE+XG4gICAgICAgIDxoMiAqbmdTd2l0Y2hDYXNlPVwiMlwiPnt7IGhlYWRpbmcgfX08L2gyPlxuICAgICAgICA8aDMgKm5nU3dpdGNoQ2FzZT1cIjNcIj57eyBoZWFkaW5nIH19PC9oMz5cbiAgICAgICAgPGg0ICpuZ1N3aXRjaENhc2U9XCI0XCI+e3sgaGVhZGluZyB9fTwvaDQ+XG4gICAgICAgIDxoNSAqbmdTd2l0Y2hDYXNlPVwiNVwiPnt7IGhlYWRpbmcgfX08L2g1PlxuICAgICAgICA8aDYgKm5nU3dpdGNoQ2FzZT1cIjZcIj57eyBoZWFkaW5nIH19PC9oNj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJzdWJoZWFkaW5nPy50cmltKClcIiBjbGFzcz1cInN1YmhlYWRpbmdcIj57eyBzdWJoZWFkaW5nIH19PC9kaXY+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+PG5nLWNvbnRlbnQgc2VsZWN0PVwiW2FjdGlvbnNdXCI+PC9uZy1jb250ZW50PjwvZGl2PlxuIl19
201
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvbGF5b3V0L2NhcmQvY2FyZC1oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvbGF5b3V0L2NhcmQvY2FyZC1oZWFkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sUUFBUSxDQUFDOzs7OztBQUdsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrREc7QUFPSCxNQUFNLE9BQU8sbUJBQW1CO0lBQzlCLFlBQXlDLElBQTBCO1FBQTFCLFNBQUksR0FBSixJQUFJLENBQXNCO1FBRW5FOzs7V0FHRztRQUNNLFlBQU8sR0FBVyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUV2RDs7O1dBR0c7UUFDTSxhQUFRLEdBQVcsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFVekQsNkVBQTZFO1FBRTdFLGlCQUFZLEdBQXFDLENBQUMsQ0FBQztRQUVuRCxpRkFBaUY7UUFFakYsWUFBTyxHQUFnQyxPQUFPLENBQUM7UUFHL0MsWUFBTyxHQUEwQixRQUFRLENBQUM7UUFFMUMsMkVBQTJFO1FBRTNFLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFFekIsNEVBQTRFO1FBRTVFLFVBQUssR0FBOEIsT0FBTyxDQUFDO1FBUzNDLGdFQUFnRTtRQUVoRSxlQUFVLEdBQVksS0FBSyxDQUFDO1FBRTVCLHdFQUF3RTtRQUV4RSxhQUFRLEdBQVksS0FB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S0FBSztnQkFLTixLQUFLO3NCQURKLEtBQUs7Z0JBUU4sS0FBSztzQkFESixLQUFLO2dCQUtOLFVBQVU7c0JBRFQsS0FBSztnQkFLTixRQUFRO3NCQURQLEtBQUs7Z0JBS04sY0FBYztzQkFEYixLQUFLO2dCQVNOLFFBQVE7c0JBRFAsS0FBSztnQkFLTixjQUFjO3NCQURiLE1BQU07Z0JBeUNILE9BQU87c0JBRFYsV0FBVzt1QkFBQyxPQUFPOztBQThCdEIsV0FBaUIsbUJBQW1CO0lBQ3JCLDRCQUFRLEdBQUcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFVLENBQUM7SUFHeEMsaUNBQWEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFVLENBQUM7SUFHNUMsMEJBQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQVUsQ0FBQztJQUd0QyxtQ0FBZSxHQUFHLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBVSxDQUFDO0FBRWxFLENBQUMsRUFaZ0IsbUJBQW1CLEtBQW5CLG1CQUFtQixRQVluQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB1bmlxdWVJZCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBDYXJkQ29tcG9uZW50IH0gZnJvbSAnLi9jYXJkLmNvbXBvbmVudCc7XG5cbi8qKlxuICogVG9wIHJvdyBvZiBhIGByaXYtY2FyZGA6IGhlYWRpbmcgdGV4dCBwbHVzIG9wdGlvbmFsIGFkb3JubWVudHMuXG4gKlxuICogVGhyZWUgcHJvamVjdGlvbiBzbG90cywgYWxsIG9wdGlvbmFsOlxuICogLSBgW2xlYWRpbmddYCDigJQgaWNvbiwgYXZhdGFyLCBvciBzdGF0dXMgZG90IHNob3duIGJlZm9yZSB0aGUgaGVhZGluZ1xuICogLSBkZWZhdWx0IOKAlCBsYWlkIG91dCBvbiB0aGUgaGVhZGluZydzIGJhc2VsaW5lLCBzbyBzdGF0dXMgYmFkZ2VzIHNpdCBiZXNpZGVcbiAqICAgdGhlIHRpdGxlIGFuZCB3cmFwIGJlbG93IGl0IHdoZW4gc3BhY2UgcnVucyBvdXQuIEFsc28gdGFrZXMgYSB3aG9sZSBjdXN0b21cbiAqICAgdGl0bGUgKGFuIGlubGluZSByZW5hbWUgZmllbGQsIHNheSkgd2hlbiBgaGVhZGluZ2AgaXMgbGVmdCB1bnNldDtcbiAqICAgYHN1YmhlYWRpbmdgIHN0aWxsIHJlbmRlcnMgYmVsb3cgZWl0aGVyIHdheS5cbiAqIC0gYFthY3Rpb25zXWAg4oCUIHRyYWlsaW5nIGNvbnRyb2xzIHN1Y2ggYXMgYHJpdi1tZW51YFxuICpcbiAqIGBgYGh0bWxcbiAqIDxyaXYtY2FyZC1oZWFkZXIgW2hlYWRpbmddPVwiJ0NvbW1lcmNpYWwgMjAyNSdcIiBbc3ViaGVhZGluZ109XCInQWV0bmEnXCI+XG4gKiAgIDxyaXYtaWNvbiBsZWFkaW5nIFtuYW1lXT1cIidGaWxlVGV4dCdcIj48L3Jpdi1pY29uPlxuICogICA8cml2LWJhZGdlIFtzaXplXT1cIidzbWFsbCdcIiBbdmFyaWFudF09XCInY2F0ZWdvcmljYWwtOCdcIj5EcmFmdDwvcml2LWJhZGdlPlxuICogICA8cml2LW1lbnUgYWN0aW9ucz4uLi48L3Jpdi1tZW51PlxuICogPC9yaXYtY2FyZC1oZWFkZXI+XG4gKiBgYGBcbiAqXG4gKiBgaGVhZGluZ0xldmVsYCByZW5kZXJzIGEgcmVhbCBgaDFg4oCTYGg2YCBzbyB0aGUgY2FyZCBmaXRzIHRoZSBwYWdlJ3MgaGVhZGluZ1xuICogb3V0bGluZTsgcGljayB0aGUgbGV2ZWwgdGhhdCBmb2xsb3dzIHRoZSBzdXJyb3VuZGluZyBjb250ZW50IHJhdGhlciB0aGFuIHRoZVxuICogb25lIHRoYXQgbG9va3MgcmlnaHQsIHNpbmNlIHNpemUgY29tZXMgZnJvbSB0aGUgZGVzaWduIHRva2VucyBlaXRoZXIgd2F5LlxuICpcbiAqIFRoZSBoZWFkaW5nIGZvbnQgYW5kIGNvbG91ciBjYW4gYmUgb3ZlcnJpZGRlbiBwZXItaW5zdGFuY2Ugd2l0aCB0aGVcbiAqIGAtLWNhcmQtaGVhZGluZy1mb250YCBhbmQgYC0tY2FyZC1oZWFkaW5nLWNvbG9yYCBjdXN0b20gcHJvcGVydGllcy5cbiAqXG4gKiAjIyBFeHBhbmRpbmcgYW5kIGNvbGxhcHNpbmdcbiAqXG4gKiBgZXhwYW5kYWJsZWAgdHVybnMgdGhlIGhlYWRlciBpbnRvIHRoZSB0b2dnbGUgZm9yIHRoZSBjYXJkJ3MgYm9keTogaXQgcmVuZGVyc1xuICogYSBjaGV2cm9uIGFuZCBjb3ZlcnMgdGhlIHJvdyB3aXRoIGEgcmVhbCBgPGJ1dHRvbj5gIGNhcnJ5aW5nIGBhcmlhLWV4cGFuZGVkYFxuICogYW5kIGBhcmlhLWNvbnRyb2xzYCwgc28gdGhlIHBhdHRlcm4gaXMga2V5Ym9hcmQgb3BlcmFibGUgYW5kIGFubm91bmNlcyBpdHNcbiAqIHN0YXRlLiBDb250cm9scyBpbiBgW2FjdGlvbnNdYCBzaXQgYWJvdmUgdGhhdCBidXR0b24gYW5kIHN0YXkgaW5kZXBlbmRlbnRseVxuICogY2xpY2thYmxlLCBzbyBhIG1lbnUgYmVzaWRlIHRoZSB0b2dnbGUgbmVlZHMgbm8gYHN0b3BQcm9wYWdhdGlvbmAuXG4gKlxuICogVGhlIGhlYWRlciBob2xkcyBubyBzdGF0ZSBvZiBpdHMgb3duIOKAlCBiaW5kIGBleHBhbmRlZGAgYW5kIGFjdCBvblxuICogYGV4cGFuZGVkQ2hhbmdlYCwgb3IgdXNlIGBbKGV4cGFuZGVkKV1gOlxuICpcbiAqIGBgYGh0bWxcbiAqIDxyaXYtY2FyZD5cbiAqICAgPHJpdi1jYXJkLWhlYWRlclxuICogICAgIFtoZWFkaW5nXT1cIidQYXRpZW50IGluZm8nXCJcbiAqICAgICBbZXhwYW5kYWJsZV09XCJ0cnVlXCJcbiAqICAgICBbKGV4cGFuZGVkKV09XCJvcGVuXCJcbiAqICAgPjwvcml2LWNhcmQtaGVhZGVyPlxuICogICA8cml2LWNhcmQtY29udGVudCAqbmdJZj1cIm9wZW5cIj4uLi48L3Jpdi1jYXJkLWNvbnRlbnQ+XG4gKiA8L3Jpdi1jYXJkPlxuICogYGBgXG4gKlxuICogVGhlIHRvZ2dsZSBpcyBuYW1lZCBieSB0aGUgaGVhZGVyJ3MgdGl0bGUsIHNvIGFuIGV4cGFuZGFibGUgaGVhZGVyIG5lZWRzIGFcbiAqIGBoZWFkaW5nYCBvciBhIHByb2plY3RlZCB0aXRsZS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncml2LWNhcmQtaGVhZGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhcmQtaGVhZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FyZC1oZWFkZXIuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQ2FyZEhlYWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBjYXJkOiBDYXJkQ29tcG9uZW50IHwgbnVsbCkge31cblxuICAvKipcbiAgICogSWRlbnRpZmllcyB0aGUgdGl0bGUgZm9yIGEgY2xpY2thYmxlIGByaXYtY2FyZGAsIHdoaWNoIG5hbWVzIGl0cyBjbGlja1xuICAgKiB0YXJnZXQgZnJvbSB0aGUgdGl0bGUgcmF0aGVyIHRoYW4gZnJvbSB0aGUgY2FyZCdzIHdob2xlIHRleHQuXG4gICAqL1xuICByZWFkb25seSB0aXRsZUlkOiBzdHJpbmcgPSB1bmlxdWVJZCgncml2LWNhcmQtdGl0bGUtJyk7XG5cbiAgLyoqXG4gICAqIE5hbWVzIHRoZSBib2R5IHRoZSB0b2dnbGUgY29udHJvbHMuIEhhbmRlZCB0byB0aGUgZW5jbG9zaW5nIGNhcmQsIHdoaWNoXG4gICAqIHJlbGF5cyBpdCB0byB0aGUgcHJvamVjdGVkIGByaXYtY2FyZC1jb250ZW50YC5cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbklkOiBzdHJpbmcgPSB1bmlxdWVJZCgncml2LWNhcmQtcmVnaW9uLScpO1xuXG4gIC8qKiBIZWFkaW5nIHRleHQuIE9taXQgd2hlbiBwcm9qZWN0aW5nIGN1c3RvbSBoZWFkaW5nIG1hcmt1cCBpbnN0ZWFkLiAqL1xuICBASW5wdXQoKVxuICBoZWFkaW5nPzogc3RyaW5nO1xuXG4gIC8qKiBTdXBwb3J0aW5nIHRleHQgcmVuZGVyZWQgYmVsb3cgdGhlIGhlYWRpbmcuICovXG4gIEBJbnB1dCgpXG4gIHN1YmhlYWRpbmc/OiBzdHJpbmc7XG5cbiAgLyoqIEhlYWRpbmcgZWxlbWVudCByZW5kZXJlZCBmb3IgYGhlYWRpbmdgLCBmb3IgZG9jdW1lbnQgb3V0bGluZSBwdXJwb3Nlcy4gKi9cbiAgQElucHV0KClcbiAgaGVhZGluZ0xldmVsOiBDYXJkSGVhZGVyQ29tcG9uZW50LkhlYWRpbmdMZXZlbCA9IDM7XG5cbiAgLyoqIGBmaWxsZWRgIGdpdmVzIHRoZSBoZWFkZXIgaXRzIG93biBiYWNrZ3JvdW5kLCBzZXBhcmF0aW5nIGl0IGZyb20gdGhlIGJvZHkuICovXG4gIEBJbnB1dCgpXG4gIHZhcmlhbnQ6IENhcmRIZWFkZXJDb21wb25lbnQuVmFyaWFudCA9ICdwbGFpbic7XG5cbiAgQElucHV0KClcbiAgcGFkZGluZzogQ2FyZENvbXBvbmVudC5QYWRkaW5nID0gJ21lZGl1bSc7XG5cbiAgLyoqIERyYXdzIGEgc2VwYXJhdG9yIGJlbG93IHRoZSBoZWFkZXIuIEltcGxpZWQgYnkgdGhlIGBmaWxsZWRgIHZhcmlhbnQuICovXG4gIEBJbnB1dCgpXG4gIGRpdmlkZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogQ3Jvc3MtYXhpcyBhbGlnbm1lbnQgb2YgdGhlIGxlYWRpbmcgc2xvdCwgaGVhZGluZyBibG9jaywgYW5kIGFjdGlvbnMuICovXG4gIEBJbnB1dCgpXG4gIGFsaWduOiBDYXJkSGVhZGVyQ29tcG9uZW50LkFsaWduID0gJ3N0YXJ0JztcblxuICAvKipcbiAgICogVHJ1bmNhdGVzIHRoZSBoZWFkaW5nIHRvIHRoaXMgbWFueSBsaW5lcyB3aXRoIGFuIGVsbGlwc2lzLiBMZWF2ZSB1bnNldCB0b1xuICAgKiBsZXQgdGhlIGhlYWRpbmcgd3JhcCBmcmVlbHkuXG4gICAqL1xuICBASW5wdXQoKVxuICBjbGFtcD86IG51bWJlcjtcblxuICAvKiogVHVybnMgdGhlIGhlYWRlciByb3cgaW50byB0aGUgdG9nZ2xlIGZvciB0aGUgY2FyZCdzIGJvZHkuICovXG4gIEBJbnB1dCgpXG4gIGV4cGFuZGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogV2hldGhlciB0aGUgYm9keSBpcyBjdXJyZW50bHkgb3Blbi4gVGhlIGNvbnN1bWVyIG93bnMgdGhpcyBzdGF0ZS4gKi9cbiAgQElucHV0KClcbiAgZXhwYW5kZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogU2lkZSBvZiB0aGUgaGVhZGVyIHRoZSBjaGV2cm9uIHNpdHMgb24uICovXG4gIEBJbnB1dCgpXG4gIHRvZ2dsZVBvc2l0aW9uOiBDYXJkSGVhZGVyQ29tcG9uZW50LlRvZ2dsZVBvc2l0aW9uID0gJ3RyYWlsaW5nJztcblxuICAvKipcbiAgICogQmxvY2tzIHRoZSB0b2dnbGUsIGZvciBhIHNlY3Rpb24gdGhhdCBpcyBub3QgeWV0IGF2YWlsYWJsZSB0byBvcGVuLiBTZXQgaXRcbiAgICogYWxvbmdzaWRlIGEgZGlzYWJsZWQgYHJpdi1jYXJkYCwgd2hvc2Ugb3duIGBkaXNhYmxlZGAgbXV0ZXMgdGhlIHN1cmZhY2UgYnV0XG4gICAqIGRvZXMgbm90IHJlYWNoIHRoZSBoZWFkZXIncyBjb250cm9scy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIEVtaXR0ZWQgd2l0aCB0aGUgc3RhdGUgdGhlIGNvbnN1bWVyIGlzIGJlaW5nIGFza2VkIHRvIG1vdmUgdG8uICovXG4gIEBPdXRwdXQoKVxuICBleHBhbmRlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogT2ZmZXJzIHRoZSBoZWFkaW5nIHRvIGFuIGVuY2xvc2luZyBjYXJkIGFzIHRoZSBuYW1lIGZvciBpdHMgY2xpY2sgdGFyZ2V0LFxuICAgKiBhbmQgdGhlIHRvZ2dsZSdzIHJlZ2lvbiBzbyBhIHByb2plY3RlZCBgcml2LWNhcmQtY29udGVudGAgY2FuIHdlYXIgaXQuIE9ubHlcbiAgICogYSB0ZXh0IGhlYWRpbmcgaXMgb2ZmZXJlZDogcHJvamVjdGVkIHRpdGxlcyBjYW4gYmUgYW55dGhpbmcsIHNvIHRob3NlIGNhcmRzXG4gICAqIGZhbGwgYmFjayB0byBuYW1pbmcgYWdhaW5zdCB0aGVpciB3aG9sZSBjb250ZW50LlxuICAgKi9cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWydoZWFkaW5nJ10pIHtcbiAgICAgIGlmICh0aGlzLmhlYWRpbmc/LnRyaW0oKSkge1xuICAgICAgICB0aGlzLmNhcmQ/LnNldFRpdGxlSWQodGhpcy50aXRsZUlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2FyZD8uY2xlYXJUaXRsZUlkKHRoaXMudGl0bGVJZCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydleHBhbmRhYmxlJ10pIHtcbiAgICAgIGlmICh0aGlzLmV4cGFuZGFibGUpIHtcbiAgICAgICAgdGhpcy5jYXJkPy5zZXRSZWdpb25JZCh0aGlzLnJlZ2lvbklkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2FyZD8uY2xlYXJSZWdpb25JZCh0aGlzLnJlZ2lvbklkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogV2l0aGRyYXdzIHRoZSBvZmZlciwgc28gdGhlIGNhcmQgc3RvcHMgbmFtaW5nIGl0c2VsZiBhZ2FpbnN0IHRoaXMgaGVhZGVyLiAqL1xuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmNhcmQ/LmNsZWFyVGl0bGVJZCh0aGlzLnRpdGxlSWQpO1xuICAgIHRoaXMuY2FyZD8uY2xlYXJSZWdpb25JZCh0aGlzLnJlZ2lvbklkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc2tzIGZvciB0aGUgb3Bwb3NpdGUgc3RhdGUgcmF0aGVyIHRoYW4gdGFraW5nIGl0LCB3aGljaCBrZWVwcyB0aGUgaGVhZGVyXG4gICAqIGZyZWUgb2Ygc3RhdGUgdGhhdCBjb3VsZCBkcmlmdCBmcm9tIHRoZSBjb25zdW1lcidzLlxuICAgKi9cbiAgcHJvdGVjdGVkIHRvZ2dsZSgpIHtcbiAgICB0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQoIXRoaXMuZXhwYW5kZWQpO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIGdldCBjbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHtcbiAgICAgIFt0aGlzLnZhcmlhbnRdOiB0cnVlLFxuICAgICAgW2BwYWRkaW5nLSR7dGhpcy5wYWRkaW5nfWBdOiB0cnVlLFxuICAgICAgW2BhbGlnbi0ke3RoaXMuYWxpZ259YF06IHRydWUsXG4gICAgICBkaXZpZGVyOiB0aGlzLmRpdmlkZXIsXG4gICAgICBleHBhbmRhYmxlOiB0aGlzLmV4cGFuZGFibGUsXG4gICAgfSlcbiAgICAgIC5maWx0ZXIoKFtfLCB2XSkgPT4gdilcbiAgICAgIC5tYXAoKFtrXSkgPT4gaylcbiAgICAgIC5qb2luKCcgJyk7XG4gIH1cblxuICAvKipcbiAgICogTGluZSBjbGFtcGluZyBpcyBhcHBsaWVkIGlubGluZSBzbyB0aGUgbGluZSBjb3VudCBzdGF5cyBhIHBsYWluIGlucHV0XG4gICAqIHJhdGhlciB0aGFuIGEgZml4ZWQgc2V0IG9mIENTUyBjbGFzc2VzLlxuICAgKi9cbiAgZ2V0IGNsYW1wU3R5bGUoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuY2xhbXAgPT0gbnVsbFxuICAgICAgPyB7fVxuICAgICAgOiB7XG4gICAgICAgICAgZGlzcGxheTogJy13ZWJraXQtYm94JyxcbiAgICAgICAgICAnLXdlYmtpdC1ib3gtb3JpZW50JzogJ3ZlcnRpY2FsJyxcbiAgICAgICAgICAnLXdlYmtpdC1saW5lLWNsYW1wJzogYCR7dGhpcy5jbGFtcH1gLFxuICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICAgICAgfTtcbiAgfVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIENhcmRIZWFkZXJDb21wb25lbnQge1xuICBleHBvcnQgY29uc3QgVmFyaWFudHMgPSBbJ3BsYWluJywgJ2ZpbGxlZCddIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBWYXJpYW50ID0gKHR5cGVvZiBWYXJpYW50cylbbnVtYmVyXTtcblxuICBleHBvcnQgY29uc3QgSGVhZGluZ0xldmVscyA9IFsxLCAyLCAzLCA0LCA1LCA2XSBhcyBjb25zdDtcbiAgZXhwb3J0IHR5cGUgSGVhZGluZ0xldmVsID0gKHR5cGVvZiBIZWFkaW5nTGV2ZWxzKVtudW1iZXJdO1xuXG4gIGV4cG9ydCBjb25zdCBBbGlnbnMgPSBbJ3N0YXJ0JywgJ2NlbnRlciddIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBBbGlnbiA9ICh0eXBlb2YgQWxpZ25zKVtudW1iZXJdO1xuXG4gIGV4cG9ydCBjb25zdCBUb2dnbGVQb3NpdGlvbnMgPSBbJ2xlYWRpbmcnLCAndHJhaWxpbmcnXSBhcyBjb25zdDtcbiAgZXhwb3J0IHR5cGUgVG9nZ2xlUG9zaXRpb24gPSAodHlwZW9mIFRvZ2dsZVBvc2l0aW9ucylbbnVtYmVyXTtcbn1cbiIsIjxidXR0b25cbiAgKm5nSWY9XCJleHBhbmRhYmxlXCJcbiAgdHlwZT1cImJ1dHRvblwiXG4gIGNsYXNzPVwiZXhwYW5kLXRvZ2dsZVwiXG4gIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiZXhwYW5kZWRcIlxuICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cInJlZ2lvbklkXCJcbiAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cInRpdGxlSWRcIlxuICAoY2xpY2spPVwidG9nZ2xlKClcIlxuPjwvYnV0dG9uPlxuPG5nLWNvbnRhaW5lclxuICAqbmdJZj1cImV4cGFuZGFibGUgJiYgdG9nZ2xlUG9zaXRpb24gPT09ICdsZWFkaW5nJ1wiXG4gIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNoZXZyb25cIlxuPjwvbmctY29udGFpbmVyPlxuPGRpdiBjbGFzcz1cImxlYWRpbmdcIj48bmctY29udGVudCBzZWxlY3Q9XCJbbGVhZGluZ11cIj48L25nLWNvbnRlbnQ+PC9kaXY+XG48ZGl2IGNsYXNzPVwibWFpblwiPlxuICA8ZGl2IGNsYXNzPVwidGl0bGUtcm93XCIgW2lkXT1cInRpdGxlSWRcIj5cbiAgICA8ZGl2ICpuZ0lmPVwiaGVhZGluZz8udHJpbSgpXCIgY2xhc3M9XCJoZWFkaW5nXCIgW25nU3R5bGVdPVwiY2xhbXBTdHlsZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiaGVhZGluZ0xldmVsXCI+XG4gICAgICAgIDxoMSAqbmdTd2l0Y2hDYXNlPVwiMVwiPnt7IGhlYWRpbmcgfX08L2gxPlxuICAgICAgICA8aDIgKm5nU3dpdGNoQ2FzZT1cIjJcIj57eyBoZWFkaW5nIH19PC9oMj5cbiAgICAgICAgPGgzICpuZ1N3aXRjaENhc2U9XCIzXCI+e3sgaGVhZGluZyB9fTwvaDM+XG4gICAgICAgIDxoNCAqbmdTd2l0Y2hDYXNlPVwiNFwiPnt7IGhlYWRpbmcgfX08L2g0PlxuICAgICAgICA8aDUgKm5nU3dpdGNoQ2FzZT1cIjVcIj57eyBoZWFkaW5nIH19PC9oNT5cbiAgICAgICAgPGg2ICpuZ1N3aXRjaENhc2U9XCI2XCI+e3sgaGVhZGluZyB9fTwvaDY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwic3ViaGVhZGluZz8udHJpbSgpXCIgY2xhc3M9XCJzdWJoZWFkaW5nXCI+e3sgc3ViaGVhZGluZyB9fTwvZGl2PlxuPC9kaXY+XG48bmctY29udGFpbmVyXG4gICpuZ0lmPVwiZXhwYW5kYWJsZSAmJiB0b2dnbGVQb3NpdGlvbiA9PT0gJ3RyYWlsaW5nJ1wiXG4gIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNoZXZyb25cIlxuPjwvbmctY29udGFpbmVyPlxuPGRpdiBjbGFzcz1cImFjdGlvbnNcIj48bmctY29udGVudCBzZWxlY3Q9XCJbYWN0aW9uc11cIj48L25nLWNvbnRlbnQ+PC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjY2hldnJvbj5cbiAgPHJpdi1pY29uXG4gICAgY2xhc3M9XCJleHBhbmQtY2hldnJvblwiXG4gICAgW2NsYXNzLmV4cGFuZGVkXT1cImV4cGFuZGVkXCJcbiAgICBbbmFtZV09XCInQ2hldnJvbkRvd24nXCJcbiAgICBbc2l6ZV09XCIyMFwiXG4gID48L3Jpdi1pY29uPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -58,6 +58,30 @@ import * as i1 from "@angular/common";
58
58
  * Selection is separate from `tone`, so it composes with any tint — a selected
59
59
  * `danger` card keeps its danger background.
60
60
  *
61
+ * ## Making the card expand and collapse
62
+ *
63
+ * Set `expandable` on `riv-card-header` and render the body only while it is
64
+ * open. The header owns the toggle affordance and its accessibility; the
65
+ * consumer owns the state:
66
+ *
67
+ * ```html
68
+ * <riv-card>
69
+ * <riv-card-header
70
+ * [heading]="'Patient info'"
71
+ * [expandable]="true"
72
+ * [(expanded)]="open"
73
+ * ></riv-card-header>
74
+ * <riv-card-content *ngIf="open">...</riv-card-content>
75
+ * </riv-card>
76
+ * ```
77
+ *
78
+ * The card relays the region id from the header to the content, so the toggle's
79
+ * `aria-controls` names the body with no ids wired by hand.
80
+ *
81
+ * Do not combine `expandable` with `clickable`: both claim the same click, and
82
+ * a card that opens as well as expands leaves the user no way to tell which one
83
+ * they are about to get.
84
+ *
61
85
  * ## Notes
62
86
  *
63
87
  * When projecting raw content with no sub-components, set `padding` so the
@@ -114,6 +138,13 @@ export class CardComponent {
114
138
  */
115
139
  this.cardId = '';
116
140
  }
141
+ /**
142
+ * Id an expandable header's toggle points `aria-controls` at, worn by a
143
+ * projected `riv-card-content`.
144
+ */
145
+ get regionId() {
146
+ return this.expandRegionId;
147
+ }
117
148
  ngOnInit() {
118
149
  this.cardId = this.el.nativeElement.id || uniqueId('riv-card-');
119
150
  if (!this.el.nativeElement.id) {
@@ -139,6 +170,24 @@ export class CardComponent {
139
170
  this.setTitleId(undefined);
140
171
  }
141
172
  }
173
+ /**
174
+ * Relays the region an expandable header controls to the projected
175
+ * `riv-card-content`, so neither side needs the consumer to wire an id.
176
+ * Called by `riv-card-header`; not part of the public API.
177
+ */
178
+ setRegionId(id) {
179
+ this.expandRegionId = id;
180
+ this.cdr.markForCheck();
181
+ }
182
+ /**
183
+ * Gives up a region registered by `setRegionId`. Ignores ids that are no
184
+ * longer the one in use.
185
+ */
186
+ clearRegionId(id) {
187
+ if (this.expandRegionId === id) {
188
+ this.setRegionId(undefined);
189
+ }
190
+ }
142
191
  /**
143
192
  * Element whose text names the click target, unless `clickLabel` is set. The
144
193
  * host id is read from the DOM rather than cached, so a bound `[id]` that
@@ -216,4 +265,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
216
265
  /** Shared padding scale for the card and its sub-components. */
217
266
  CardComponent.Paddings = ['none', 'small', 'medium', 'large'];
218
267
  })(CardComponent || (CardComponent = {}));
219
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9sYXlvdXQvY2FyZC9jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL2xheW91dC9jYXJkL2NhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBRUwsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUFRLENBQUM7OztBQUVsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1FRztBQU9ILE1BQU0sT0FBTyxhQUFhO0lBQ3hCLFlBQ21CLEVBQTJCLEVBQzNCLFFBQW1CLEVBQ25CLEdBQXNCO1FBRnRCLE9BQUUsR0FBRixFQUFFLENBQXlCO1FBQzNCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFHekMsa0RBQWtEO1FBRWxELFlBQU8sR0FBMEIsVUFBVSxDQUFDO1FBRTVDLDZFQUE2RTtRQUU3RSxZQUFPLEdBQTBCLEdBQUcsQ0FBQztRQUVyQyx3RUFBd0U7UUFFeEUsU0FBSSxHQUF1QixTQUFTLENBQUM7UUFFckMsaURBQWlEO1FBRWpELGdCQUFXLEdBQThCLFVBQVUsQ0FBQztRQUVwRDs7OztXQUlHO1FBRUgsWUFBTyxHQUEwQixNQUFNLENBQUM7UUFFeEM7OztXQUdHO1FBRUgsY0FBUyxHQUFZLEtBQUssQ0FBQztRQVUzQjs7OztXQUlHO1FBRUgsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUUxQjs7OztXQUlHO1FBRUgsYUFBUSxHQUFZLEtB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O2dCQW9ESCxXQUFXO3NCQURkLFdBQVc7dUJBQUMsbUJBQW1CO2dCQU01QixPQUFPO3NCQURWLFdBQVc7dUJBQUMsT0FBTzs7QUFrQnRCLFdBQWlCLGFBQWE7SUFDZixzQkFBUSxHQUFHLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQVUsQ0FBQztJQUdyRCxzQkFBUSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQVUsQ0FBQztJQUdwQyxtQkFBSyxHQUFHO1FBQ25CLFNBQVM7UUFDVCxRQUFRO1FBQ1IsU0FBUztRQUNULFNBQVM7UUFDVCxRQUFRO1FBQ1IsVUFBVTtLQUNGLENBQUM7SUFHRSwwQkFBWSxHQUFHLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBVSxDQUFDO0lBR2hFLGdFQUFnRTtJQUNuRCxzQkFBUSxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFVLENBQUM7QUFFeEUsQ0FBQyxFQXZCZ0IsYUFBYSxLQUFiLGFBQWEsUUF1QjdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHVuaXF1ZUlkIH0gZnJvbSAnbG9kYXNoJztcblxuLyoqXG4gKiBTdXJmYWNlIGNvbnRhaW5lciB0aGF0IGdyb3VwcyByZWxhdGVkIGNvbnRlbnQgaW50byBhIHNpbmdsZSBzY2FubmFibGUgdW5pdC5cbiAqXG4gKiBBIGNhcmQgaXMgY29tcG9zZWQsIG5vdCBjb25maWd1cmVkOiBwcm9qZWN0IHRoZSBwYXJ0cyB5b3UgbmVlZCwgaW4gdGhlIG9yZGVyXG4gKiB5b3UgbmVlZCB0aGVtLiBFdmVyeSBwYXJ0IGlzIG9wdGlvbmFsLCBzbyBhIGJhcmUgYHJpdi1jYXJkYCBpcyBhIHZhbGlkXG4gKiBzdXJmYWNlIG9uIGl0cyBvd24uXG4gKlxuICogLSBgcml2LWNhcmQtbWVkaWFgIOKAlCBsZWFkaW5nIGltYWdlIG9yIHZpZGVvXG4gKiAtIGByaXYtY2FyZC1oZWFkZXJgIOKAlCBoZWFkaW5nLCBzdWJoZWFkaW5nLCBsZWFkaW5nIGFkb3JubWVudCwgYWN0aW9uc1xuICogLSBgcml2LWNhcmQtY29udGVudGAg4oCUIGJvZHlcbiAqIC0gYHJpdi1jYXJkLWFjdGlvbnNgIOKAlCB0cmFpbGluZyBjb250cm9sIHJvd1xuICpcbiAqIGBgYGh0bWxcbiAqIDxyaXYtY2FyZD5cbiAqICAgPHJpdi1jYXJkLWhlYWRlciBbaGVhZGluZ109XCJ3b3JrYm9vay5uYW1lXCIgW3N1YmhlYWRpbmddPVwicGF5ZXJOYW1lXCI+XG4gKiAgICAgPHJpdi1tZW51IGFjdGlvbnM+Li4uPC9yaXYtbWVudT5cbiAqICAgPC9yaXYtY2FyZC1oZWFkZXI+XG4gKiAgIDxyaXYtY2FyZC1jb250ZW50PlxuICogICAgIExhc3QgZWRpdDoge3sgd29ya2Jvb2subW9kaWZpZWQgfCByaXZEYXRlIH19XG4gKiAgIDwvcml2LWNhcmQtY29udGVudD5cbiAqIDwvcml2LWNhcmQ+XG4gKiBgYGBcbiAqXG4gKiAjIyBNYWtpbmcgdGhlIGNhcmQgYWN0aXZhdGVcbiAqXG4gKiBTZXQgYGNsaWNrYWJsZWAgYW5kIGhhbmRsZSBgY2FyZENsaWNrYCB0byBtYWtlIHRoZSB3aG9sZSBzdXJmYWNlIGFjdCBvbiBhXG4gKiBjbGljazpcbiAqXG4gKiBgYGBodG1sXG4gKiA8cml2LWNhcmQgW2NsaWNrYWJsZV09XCJ0cnVlXCIgKGNhcmRDbGljayk9XCJnb1RvV29ya2Jvb2soKVwiPlxuICogYGBgXG4gKlxuICogVGhlIGNhcmQgcmVuZGVycyBpdHMgb3duIGZ1bGwtc3VyZmFjZSBidXR0b24gZm9yIHRoaXMsIHNvIGFjdGl2YXRpb24gd29ya3NcbiAqIHdpdGggYSBwb2ludGVyLCB3aXRoIEVudGVyLCBhbmQgd2l0aCBTcGFjZSwgYW5kIHRoZSBmb2N1cyByaW5nIHRyYWNlcyB0aGVcbiAqIHdob2xlIGNhcmQuIENvbnRyb2xzIGluIGByaXYtY2FyZC1oZWFkZXJgJ3MgYFthY3Rpb25zXWAgc2xvdCBhbmQgaW5cbiAqIGByaXYtY2FyZC1hY3Rpb25zYCBzaXQgYWJvdmUgaXQgYW5kIHN0YXkgaW5kZXBlbmRlbnRseSBjbGlja2FibGUg4oCUIGEgbWVudVxuICogaW5zaWRlIGEgY2xpY2thYmxlIGNhcmQgbmVlZHMgbm8gYHN0b3BQcm9wYWdhdGlvbmAuIE90aGVyIGludGVyYWN0aXZlIGNvbnRlbnRcbiAqIHByb2plY3RlZCBpbnRvIHRoZSBjYXJkIG11c3QgcmFpc2UgaXRzZWxmIHdpdGggYHBvc2l0aW9uOiByZWxhdGl2ZWAgYW5kXG4gKiBgei1pbmRleDogdmFyKC0tY2FyZC1yYWlzZWQtei1pbmRleClgLlxuICpcbiAqIFdoZW4gdGhlIGNhcmQncyBhY3Rpb24gaXMgcmVhbGx5IGEgbmF2aWdhdGlvbiwgcHJlZmVyIGBbcml2LWNhcmQtbGlua11gIG9uIGFuXG4gKiBgPGE+YCBpbnN0ZWFkOiB0aGF0IGtlZXBzIHRoZSBVUkwsIG1pZGRsZS1jbGljaywgYW5kIFwib3BlbiBpbiBuZXcgdGFiXCIuXG4gKlxuICogIyMgU2VsZWN0aW9uXG4gKlxuICogU2V0IGBzZWxlY3RlZGAgdG8gbWFyayB0aGUgY2FyZCB0aGUgdXNlciBpcyBjdXJyZW50bHkgbG9va2luZyBhdC4gSXQgZ2l2ZXNcbiAqIHRoZSBzdXJmYWNlIGEgZGlzdGluY3QgYm9yZGVyIGFuZCBzaGFkb3csIGFuZCBhbm5vdW5jZXMgdGhyb3VnaFxuICogYGFyaWEtY3VycmVudGAgc28gdGhlIHN0YXRlIGlzIG5vdCBjb252ZXllZCBieSBjb2xvdXIgYWxvbmUuXG4gKlxuICogYGBgaHRtbFxuICogPHJpdi1jYXJkIFtzZWxlY3RlZF09XCJ3b3JrYm9vay5pZCA9PT0gYWN0aXZlSWRcIj5cbiAqIGBgYFxuICpcbiAqIFNlbGVjdGlvbiBpcyBzZXBhcmF0ZSBmcm9tIGB0b25lYCwgc28gaXQgY29tcG9zZXMgd2l0aCBhbnkgdGludCDigJQgYSBzZWxlY3RlZFxuICogYGRhbmdlcmAgY2FyZCBrZWVwcyBpdHMgZGFuZ2VyIGJhY2tncm91bmQuXG4gKlxuICogIyMgTm90ZXNcbiAqXG4gKiBXaGVuIHByb2plY3RpbmcgcmF3IGNvbnRlbnQgd2l0aCBubyBzdWItY29tcG9uZW50cywgc2V0IGBwYWRkaW5nYCBzbyB0aGVcbiAqIGNvbnRlbnQgaXMgbm90IGZsdXNoIGFnYWluc3QgdGhlIGJvcmRlci5cbiAqXG4gKiBUaGUgY2FyZCBjbGlwcyBpdHMgb3duIGNvbnRlbnQgc28gbWVkaWEgYW5kIGZpbGxlZCBoZWFkZXIvYWN0aW9uIHJvd3MgZm9sbG93XG4gKiBpdHMgY29ybmVycy4gUG9wdXBzIChgcml2LW1lbnVgLCBgcml2VG9vbHRpcGApIHJlbmRlciB0aHJvdWdoIHRoZSBvdmVybGF5XG4gKiBvdXRsZXQsIHNvIHRoZXkgYXJlIG5vdCBhZmZlY3RlZCBieSB0aGF0IGNsaXBwaW5nLlxuICpcbiAqIFBlci1pbnN0YW5jZSByYWRpdXMgY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgYC0tY2FyZC1ib3JkZXItcmFkaXVzYFxuICogY3VzdG9tIHByb3BlcnR5LlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtY2FyZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FyZC5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDYXJkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7fVxuXG4gIC8qKiBCb3JkZXIgYW5kIHNoYWRvdyB0cmVhdG1lbnQgb2YgdGhlIHN1cmZhY2UuICovXG4gIEBJbnB1dCgpXG4gIHZhcmlhbnQ6IENhcmRDb21wb25lbnQuVmFyaWFudCA9ICdvdXRsaW5lZCc7XG5cbiAgLyoqIE5ldXRyYWwgYmFja2dyb3VuZCBlbGV2YXRpb24sIG1hdGNoaW5nIHRoZSBgLS1zdXJmYWNlLWxpZ2h0LSpgIHRva2Vucy4gKi9cbiAgQElucHV0KClcbiAgc3VyZmFjZTogQ2FyZENvbXBvbmVudC5TdXJmYWNlID0gJzAnO1xuXG4gIC8qKiBTZW1hbnRpYyBiYWNrZ3JvdW5kIHRpbnQuIE92ZXJyaWRlcyBgc3VyZmFjZWAgd2hlbiBub3QgYG5ldXRyYWxgLiAqL1xuICBASW5wdXQoKVxuICB0b25lOiBDYXJkQ29tcG9uZW50LlRvbmUgPSAnbmV1dHJhbCc7XG5cbiAgLyoqIFN0YWNraW5nIGRpcmVjdGlvbiBvZiB0aGUgcHJvamVjdGVkIHBhcnRzLiAqL1xuICBASW5wdXQoKVxuICBvcmllbnRhdGlvbjogQ2FyZENvbXBvbmVudC5PcmllbnRhdGlvbiA9ICd2ZXJ0aWNhbCc7XG5cbiAgLyoqXG4gICAqIFBhZGRpbmcgYXBwbGllZCB0byB0aGUgY2FyZCBpdHNlbGYuIExlYXZlIGFzIGBub25lYCB3aGVuIGNvbXBvc2luZyB3aXRoXG4gICAqIGByaXYtY2FyZC1oZWFkZXJgIC8gYHJpdi1jYXJkLWNvbnRlbnRgIC8gYHJpdi1jYXJkLWFjdGlvbnNgLCB3aGljaCBvd25cbiAgICogdGhlaXIgb3duIHBhZGRpbmcuXG4gICAqL1xuICBASW5wdXQoKVxuICBwYWRkaW5nOiBDYXJkQ29tcG9uZW50LlBhZGRpbmcgPSAnbm9uZSc7XG5cbiAgLyoqXG4gICAqIE1ha2VzIHRoZSB3aG9sZSBzdXJmYWNlIGFjdGl2YXRlLCBlbWl0dGluZyBgY2FyZENsaWNrYC4gQWRkcyB0aGUgaG92ZXJcbiAgICogYWZmb3JkYW5jZSBhbmQga2V5Ym9hcmQgc3VwcG9ydC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGNsaWNrYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBBY2Nlc3NpYmxlIG5hbWUgZm9yIHRoZSBjYXJkJ3MgYWN0aW9uLiBEZWZhdWx0cyB0byB0aGUgYHJpdi1jYXJkLWhlYWRlcmBcbiAgICogdGl0bGUsIGZhbGxpbmcgYmFjayB0byB0aGUgY2FyZCdzIHdob2xlIHRleHQgY29udGVudCB3aGVuIHRoZXJlIGlzIG5vXG4gICAqIGhlYWRlci4gU2V0IHRoaXMgd2hlbiBuZWl0aGVyIHJlYWRzIHdlbGwgb24gaXRzIG93bi5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGNsaWNrTGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1hcmtzIHRoZSBjYXJkIGFzIHRoZSBjdXJyZW50IHNlbGVjdGlvbiwgZ2l2aW5nIGl0IGEgZGlzdGluY3QgYm9yZGVyIGFuZFxuICAgKiBzaGFkb3cuIENvbXBvc2VzIHdpdGggYW55IGB0b25lYCwgc28gYSBzZWxlY3RlZCBkYW5nZXIgY2FyZCBrZWVwcyBpdHNcbiAgICogdGludC4gQW5ub3VuY2VkIHRvIGFzc2lzdGl2ZSB0ZWNobm9sb2d5IHRocm91Z2ggYGFyaWEtY3VycmVudGAuXG4gICAqL1xuICBASW5wdXQoKVxuICBzZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBNdXRlcyB0aGUgc3VyZmFjZSwgc3VwcHJlc3NlcyBob3ZlciBmZWVkYmFjaywgYW5kIGRpc2FibGVzIHRoZSBjbGlja1xuICAgKiB0YXJnZXQuIFByZXNlbnRhdGlvbmFsIGZvciBldmVyeXRoaW5nIGVsc2Ug4oCUIGRpc2FibGUgdGhlIGNhcmQncyBvd25cbiAgICogY29udHJvbHMgdG9vLlxuICAgKi9cbiAgQElucHV0KClcbiAgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogRW1pdHRlZCB3aGVuIGEgY2xpY2thYmxlIGNhcmQgaXMgYWN0aXZhdGVkIGJ5IHBvaW50ZXIgb3Iga2V5Ym9hcmQuICovXG4gIEBPdXRwdXQoKVxuICBjYXJkQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIE5hbWVzIHRoZSBjbGljayB0YXJnZXQgZnJvbSB0aGUgY2FyZCdzIGNvbnRlbnQuIEdlbmVyYXRlZCBvbmx5IHdoZW4gdGhlXG4gICAqIGNvbnN1bWVyIGhhcyBub3Qgc2V0IHRoZWlyIG93biBpZC5cbiAgICovXG4gIHByaXZhdGUgY2FyZElkOiBzdHJpbmcgPSAnJztcblxuICAvKiogU2V0IGJ5IGEgcHJvamVjdGVkIGByaXYtY2FyZC1oZWFkZXJgIHRoYXQgaGFzIGEgdGl0bGUgdG8gbmFtZSBhZ2FpbnN0LiAqL1xuICBwcml2YXRlIHRpdGxlSWQ/OiBzdHJpbmc7XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jYXJkSWQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuaWQgfHwgdW5pcXVlSWQoJ3Jpdi1jYXJkLScpO1xuICAgIGlmICghdGhpcy5lbC5uYXRpdmVFbGVtZW50LmlkKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICdpZCcsIHRoaXMuY2FyZElkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIHRoZSBoZWFkZXIncyB0aXRsZSBhcyB0aGUgY2xpY2sgdGFyZ2V0J3MgYWNjZXNzaWJsZSBuYW1lLCB3aGljaFxuICAgKiBrZWVwcyB0aGUgYW5ub3VuY2VtZW50IHRvIHRoZSBjYXJkJ3Mgc3ViamVjdCBpbnN0ZWFkIG9mIGV2ZXJ5IHdvcmQgb24gdGhlXG4gICAqIHN1cmZhY2UuIENhbGxlZCBieSBgcml2LWNhcmQtaGVhZGVyYDsgbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkuXG4gICAqL1xuICBzZXRUaXRsZUlkKGlkOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLnRpdGxlSWQgPSBpZDtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHaXZlcyB1cCBhIHRpdGxlIHJlZ2lzdGVyZWQgYnkgYHNldFRpdGxlSWRgLCBzbyBhIGhlYWRlciB0aGF0IGlzIHJlbW92ZWRcbiAgICogZG9lcyBub3QgbGVhdmUgdGhlIGNsaWNrIHRhcmdldCBuYW1pbmcgaXRzZWxmIGFnYWluc3QgYSBkZXRhY2hlZCBlbGVtZW50LlxuICAgKiBJZ25vcmVzIGlkcyB0aGF0IGFyZSBubyBsb25nZXIgdGhlIG9uZSBpbiB1c2UuXG4gICAqL1xuICBjbGVhclRpdGxlSWQoaWQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLnRpdGxlSWQgPT09IGlkKSB7XG4gICAgICB0aGlzLnNldFRpdGxlSWQodW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRWxlbWVudCB3aG9zZSB0ZXh0IG5hbWVzIHRoZSBjbGljayB0YXJnZXQsIHVubGVzcyBgY2xpY2tMYWJlbGAgaXMgc2V0LiBUaGVcbiAgICogaG9zdCBpZCBpcyByZWFkIGZyb20gdGhlIERPTSByYXRoZXIgdGhhbiBjYWNoZWQsIHNvIGEgYm91bmQgYFtpZF1gIHRoYXRcbiAgICogY2hhbmdlcyBpcyBwaWNrZWQgdXAgb24gdGhlIGNhcmQncyBuZXh0IGNoYW5nZSBkZXRlY3Rpb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGxhYmVsbGVkQnkoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuY2xpY2tMYWJlbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMudGl0bGVJZCA/PyAodGhpcy5lbC5uYXRpdmVFbGVtZW50LmlkIHx8IHRoaXMuY2FyZElkKTtcbiAgfVxuXG4gIC8qKiBBbm5vdW5jZXMgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHRvIGFzc2lzdGl2ZSB0ZWNobm9sb2d5LiAqL1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1jdXJyZW50JylcbiAgZ2V0IGFyaWFDdXJyZW50KCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkID8gJ3RydWUnIDogbnVsbDtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBnZXQgY2xhc3NlcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh7XG4gICAgICBbdGhpcy52YXJpYW50XTogdHJ1ZSxcbiAgICAgIFtgc3VyZmFjZS0ke3RoaXMuc3VyZmFjZX1gXTogdHJ1ZSxcbiAgICAgIFtgdG9uZS0ke3RoaXMudG9uZX1gXTogdHJ1ZSxcbiAgICAgIFt0aGlzLm9yaWVudGF0aW9uXTogdHJ1ZSxcbiAgICAgIFtgcGFkZGluZy0ke3RoaXMucGFkZGluZ31gXTogdHJ1ZSxcbiAgICAgIGNsaWNrYWJsZTogdGhpcy5jbGlja2FibGUsXG4gICAgICBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZCxcbiAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkLFxuICAgIH0pXG4gICAgICAuZmlsdGVyKChbXywgdl0pID0+IHYpXG4gICAgICAubWFwKChba10pID0+IGspXG4gICAgICAuam9pbignICcpO1xuICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ2FyZENvbXBvbmVudCB7XG4gIGV4cG9ydCBjb25zdCBWYXJpYW50cyA9IFsnb3V0bGluZWQnLCAnZWxldmF0ZWQnLCAnZmxhdCddIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBWYXJpYW50ID0gKHR5cGVvZiBWYXJpYW50cylbbnVtYmVyXTtcblxuICBleHBvcnQgY29uc3QgU3VyZmFjZXMgPSBbJzAnLCAnMScsICcyJ10gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIFN1cmZhY2UgPSAodHlwZW9mIFN1cmZhY2VzKVtudW1iZXJdO1xuXG4gIGV4cG9ydCBjb25zdCBUb25lcyA9IFtcbiAgICAnbmV1dHJhbCcsXG4gICAgJ2RhbmdlcicsXG4gICAgJ2NhdXRpb24nLFxuICAgICd3YXJuaW5nJyxcbiAgICAnc2FmZXR5JyxcbiAgICAnc2VsZWN0ZWQnLFxuICBdIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBUb25lID0gKHR5cGVvZiBUb25lcylbbnVtYmVyXTtcblxuICBleHBvcnQgY29uc3QgT3JpZW50YXRpb25zID0gWyd2ZXJ0aWNhbCcsICdob3Jpem9udGFsJ10gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIE9yaWVudGF0aW9uID0gKHR5cGVvZiBPcmllbnRhdGlvbnMpW251bWJlcl07XG5cbiAgLyoqIFNoYXJlZCBwYWRkaW5nIHNjYWxlIGZvciB0aGUgY2FyZCBhbmQgaXRzIHN1Yi1jb21wb25lbnRzLiAqL1xuICBleHBvcnQgY29uc3QgUGFkZGluZ3MgPSBbJ25vbmUnLCAnc21hbGwnLCAnbWVkaXVtJywgJ2xhcmdlJ10gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIFBhZGRpbmcgPSAodHlwZW9mIFBhZGRpbmdzKVtudW1iZXJdO1xufVxuIiwiPGJ1dHRvblxuICAqbmdJZj1cImNsaWNrYWJsZVwiXG4gIHR5cGU9XCJidXR0b25cIlxuICBjbGFzcz1cImNsaWNrLXRhcmdldFwiXG4gIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gIFthdHRyLmFyaWEtbGFiZWxdPVwiY2xpY2tMYWJlbFwiXG4gIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJsYWJlbGxlZEJ5XCJcbiAgKGNsaWNrKT1cImNhcmRDbGljay5lbWl0KCRldmVudClcIlxuPjwvYnV0dG9uPlxuPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuIl19
268
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9sYXlvdXQvY2FyZC9jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL2xheW91dC9jYXJkL2NhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBRUwsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUFRLENBQUM7OztBQUVsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJGRztBQU9ILE1BQU0sT0FBTyxhQUFhO0lBQ3hCLFlBQ21CLEVBQTJCLEVBQzNCLFFBQW1CLEVBQ25CLEdBQXNCO1FBRnRCLE9BQUUsR0FBRixFQUFFLENBQXlCO1FBQzNCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFHekMsa0RBQWtEO1FBRWxELFlBQU8sR0FBMEIsVUFBVSxDQUFDO1FBRTVDLDZFQUE2RTtRQUU3RSxZQUFPLEdBQTBCLEdBQUcsQ0FBQztRQUVyQyx3RUFBd0U7UUFFeEUsU0FBSSxHQUF1QixTQUFTLENBQUM7UUFFckMsaURBQWlEO1FBRWpELGdCQUFXLEdBQThCLFVBQVUsQ0FBQztRQUVwRDs7OztXQUlHO1FBRUgsWUFBTyxHQUEwQixNQUFNLENBQUM7UUFFeEM7OztXQUdHO1FBRUgsY0FBUyxHQUFZLEtBQUssQ0FBQztRQVUzQjs7OztXQUlHO1FBRUgsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUUxQjs7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QUMsR0FBRyxDQUFDLENBQUM7SUFDZixDQUFDOzsyR0FyS1UsYUFBYTsrRkFBYixhQUFhLGlZQ2hIMUIsb1FBVUE7NEZEc0dhLGFBQWE7a0JBTnpCLFNBQVM7K0JBQ0UsVUFBVSxtQkFHSCx1QkFBdUIsQ0FBQyxNQUFNO3lKQVcvQyxPQUFPO3NCQUROLEtBQUs7Z0JBS04sT0FBTztzQkFETixLQUFLO2dCQUtOLElBQUk7c0JBREgsS0FBSztnQkFLTixXQUFXO3NCQURWLEtBQUs7Z0JBU04sT0FBTztzQkFETixLQUFLO2dCQVFOLFNBQVM7c0JBRFIsS0FBSztnQkFTTixVQUFVO3NCQURULEtBQUs7Z0JBU04sUUFBUTtzQkFEUCxLQUFLO2dCQVNOLFFBQVE7c0JBRFAsS0FBSztnQkFLTixTQUFTO3NCQURSLE1BQU07Z0JBbUZILFdBQVc7c0JBRGQsV0FBVzt1QkFBQyxtQkFBbUI7Z0JBTTVCLE9BQU87c0JBRFYsV0FBVzt1QkFBQyxPQUFPOztBQWtCdEIsV0FBaUIsYUFBYTtJQUNmLHNCQUFRLEdBQUcsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBVSxDQUFDO0lBR3JELHNCQUFRLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBVSxDQUFDO0lBR3BDLG1CQUFLLEdBQUc7UUFDbkIsU0FBUztRQUNULFFBQVE7UUFDUixTQUFTO1FBQ1QsU0FBUztRQUNULFFBQVE7UUFDUixVQUFVO0tBQ0YsQ0FBQztJQUdFLDBCQUFZLEdBQUcsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFVLENBQUM7SUFHaEUsZ0VBQWdFO0lBQ25ELHNCQUFRLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQVUsQ0FBQztBQUV4RSxDQUFDLEVBdkJnQixhQUFhLEtBQWIsYUFBYSxRQXVCN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBSZW5kZXJlcjIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdW5pcXVlSWQgfSBmcm9tICdsb2Rhc2gnO1xuXG4vKipcbiAqIFN1cmZhY2UgY29udGFpbmVyIHRoYXQgZ3JvdXBzIHJlbGF0ZWQgY29udGVudCBpbnRvIGEgc2luZ2xlIHNjYW5uYWJsZSB1bml0LlxuICpcbiAqIEEgY2FyZCBpcyBjb21wb3NlZCwgbm90IGNvbmZpZ3VyZWQ6IHByb2plY3QgdGhlIHBhcnRzIHlvdSBuZWVkLCBpbiB0aGUgb3JkZXJcbiAqIHlvdSBuZWVkIHRoZW0uIEV2ZXJ5IHBhcnQgaXMgb3B0aW9uYWwsIHNvIGEgYmFyZSBgcml2LWNhcmRgIGlzIGEgdmFsaWRcbiAqIHN1cmZhY2Ugb24gaXRzIG93bi5cbiAqXG4gKiAtIGByaXYtY2FyZC1tZWRpYWAg4oCUIGxlYWRpbmcgaW1hZ2Ugb3IgdmlkZW9cbiAqIC0gYHJpdi1jYXJkLWhlYWRlcmAg4oCUIGhlYWRpbmcsIHN1YmhlYWRpbmcsIGxlYWRpbmcgYWRvcm5tZW50LCBhY3Rpb25zXG4gKiAtIGByaXYtY2FyZC1jb250ZW50YCDigJQgYm9keVxuICogLSBgcml2LWNhcmQtYWN0aW9uc2Ag4oCUIHRyYWlsaW5nIGNvbnRyb2wgcm93XG4gKlxuICogYGBgaHRtbFxuICogPHJpdi1jYXJkPlxuICogICA8cml2LWNhcmQtaGVhZGVyIFtoZWFkaW5nXT1cIndvcmtib29rLm5hbWVcIiBbc3ViaGVhZGluZ109XCJwYXllck5hbWVcIj5cbiAqICAgICA8cml2LW1lbnUgYWN0aW9ucz4uLi48L3Jpdi1tZW51PlxuICogICA8L3Jpdi1jYXJkLWhlYWRlcj5cbiAqICAgPHJpdi1jYXJkLWNvbnRlbnQ+XG4gKiAgICAgTGFzdCBlZGl0OiB7eyB3b3JrYm9vay5tb2RpZmllZCB8IHJpdkRhdGUgfX1cbiAqICAgPC9yaXYtY2FyZC1jb250ZW50PlxuICogPC9yaXYtY2FyZD5cbiAqIGBgYFxuICpcbiAqICMjIE1ha2luZyB0aGUgY2FyZCBhY3RpdmF0ZVxuICpcbiAqIFNldCBgY2xpY2thYmxlYCBhbmQgaGFuZGxlIGBjYXJkQ2xpY2tgIHRvIG1ha2UgdGhlIHdob2xlIHN1cmZhY2UgYWN0IG9uIGFcbiAqIGNsaWNrOlxuICpcbiAqIGBgYGh0bWxcbiAqIDxyaXYtY2FyZCBbY2xpY2thYmxlXT1cInRydWVcIiAoY2FyZENsaWNrKT1cImdvVG9Xb3JrYm9vaygpXCI+XG4gKiBgYGBcbiAqXG4gKiBUaGUgY2FyZCByZW5kZXJzIGl0cyBvd24gZnVsbC1zdXJmYWNlIGJ1dHRvbiBmb3IgdGhpcywgc28gYWN0aXZhdGlvbiB3b3Jrc1xuICogd2l0aCBhIHBvaW50ZXIsIHdpdGggRW50ZXIsIGFuZCB3aXRoIFNwYWNlLCBhbmQgdGhlIGZvY3VzIHJpbmcgdHJhY2VzIHRoZVxuICogd2hvbGUgY2FyZC4gQ29udHJvbHMgaW4gYHJpdi1jYXJkLWhlYWRlcmAncyBgW2FjdGlvbnNdYCBzbG90IGFuZCBpblxuICogYHJpdi1jYXJkLWFjdGlvbnNgIHNpdCBhYm92ZSBpdCBhbmQgc3RheSBpbmRlcGVuZGVudGx5IGNsaWNrYWJsZSDigJQgYSBtZW51XG4gKiBpbnNpZGUgYSBjbGlja2FibGUgY2FyZCBuZWVkcyBubyBgc3RvcFByb3BhZ2F0aW9uYC4gT3RoZXIgaW50ZXJhY3RpdmUgY29udGVudFxuICogcHJvamVjdGVkIGludG8gdGhlIGNhcmQgbXVzdCByYWlzZSBpdHNlbGYgd2l0aCBgcG9zaXRpb246IHJlbGF0aXZlYCBhbmRcbiAqIGB6LWluZGV4OiB2YXIoLS1jYXJkLXJhaXNlZC16LWluZGV4KWAuXG4gKlxuICogV2hlbiB0aGUgY2FyZCdzIGFjdGlvbiBpcyByZWFsbHkgYSBuYXZpZ2F0aW9uLCBwcmVmZXIgYFtyaXYtY2FyZC1saW5rXWAgb24gYW5cbiAqIGA8YT5gIGluc3RlYWQ6IHRoYXQga2VlcHMgdGhlIFVSTCwgbWlkZGxlLWNsaWNrLCBhbmQgXCJvcGVuIGluIG5ldyB0YWJcIi5cbiAqXG4gKiAjIyBTZWxlY3Rpb25cbiAqXG4gKiBTZXQgYHNlbGVjdGVkYCB0byBtYXJrIHRoZSBjYXJkIHRoZSB1c2VyIGlzIGN1cnJlbnRseSBsb29raW5nIGF0LiBJdCBnaXZlc1xuICogdGhlIHN1cmZhY2UgYSBkaXN0aW5jdCBib3JkZXIgYW5kIHNoYWRvdywgYW5kIGFubm91bmNlcyB0aHJvdWdoXG4gKiBgYXJpYS1jdXJyZW50YCBzbyB0aGUgc3RhdGUgaXMgbm90IGNvbnZleWVkIGJ5IGNvbG91ciBhbG9uZS5cbiAqXG4gKiBgYGBodG1sXG4gKiA8cml2LWNhcmQgW3NlbGVjdGVkXT1cIndvcmtib29rLmlkID09PSBhY3RpdmVJZFwiPlxuICogYGBgXG4gKlxuICogU2VsZWN0aW9uIGlzIHNlcGFyYXRlIGZyb20gYHRvbmVgLCBzbyBpdCBjb21wb3NlcyB3aXRoIGFueSB0aW50IOKAlCBhIHNlbGVjdGVkXG4gKiBgZGFuZ2VyYCBjYXJkIGtlZXBzIGl0cyBkYW5nZXIgYmFja2dyb3VuZC5cbiAqXG4gKiAjIyBNYWtpbmcgdGhlIGNhcmQgZXhwYW5kIGFuZCBjb2xsYXBzZVxuICpcbiAqIFNldCBgZXhwYW5kYWJsZWAgb24gYHJpdi1jYXJkLWhlYWRlcmAgYW5kIHJlbmRlciB0aGUgYm9keSBvbmx5IHdoaWxlIGl0IGlzXG4gKiBvcGVuLiBUaGUgaGVhZGVyIG93bnMgdGhlIHRvZ2dsZSBhZmZvcmRhbmNlIGFuZCBpdHMgYWNjZXNzaWJpbGl0eTsgdGhlXG4gKiBjb25zdW1lciBvd25zIHRoZSBzdGF0ZTpcbiAqXG4gKiBgYGBodG1sXG4gKiA8cml2LWNhcmQ+XG4gKiAgIDxyaXYtY2FyZC1oZWFkZXJcbiAqICAgICBbaGVhZGluZ109XCInUGF0aWVudCBpbmZvJ1wiXG4gKiAgICAgW2V4cGFuZGFibGVdPVwidHJ1ZVwiXG4gKiAgICAgWyhleHBhbmRlZCldPVwib3BlblwiXG4gKiAgID48L3Jpdi1jYXJkLWhlYWRlcj5cbiAqICAgPHJpdi1jYXJkLWNvbnRlbnQgKm5nSWY9XCJvcGVuXCI+Li4uPC9yaXYtY2FyZC1jb250ZW50PlxuICogPC9yaXYtY2FyZD5cbiAqIGBgYFxuICpcbiAqIFRoZSBjYXJkIHJlbGF5cyB0aGUgcmVnaW9uIGlkIGZyb20gdGhlIGhlYWRlciB0byB0aGUgY29udGVudCwgc28gdGhlIHRvZ2dsZSdzXG4gKiBgYXJpYS1jb250cm9sc2AgbmFtZXMgdGhlIGJvZHkgd2l0aCBubyBpZHMgd2lyZWQgYnkgaGFuZC5cbiAqXG4gKiBEbyBub3QgY29tYmluZSBgZXhwYW5kYWJsZWAgd2l0aCBgY2xpY2thYmxlYDogYm90aCBjbGFpbSB0aGUgc2FtZSBjbGljaywgYW5kXG4gKiBhIGNhcmQgdGhhdCBvcGVucyBhcyB3ZWxsIGFzIGV4cGFuZHMgbGVhdmVzIHRoZSB1c2VyIG5vIHdheSB0byB0ZWxsIHdoaWNoIG9uZVxuICogdGhleSBhcmUgYWJvdXQgdG8gZ2V0LlxuICpcbiAqICMjIE5vdGVzXG4gKlxuICogV2hlbiBwcm9qZWN0aW5nIHJhdyBjb250ZW50IHdpdGggbm8gc3ViLWNvbXBvbmVudHMsIHNldCBgcGFkZGluZ2Agc28gdGhlXG4gKiBjb250ZW50IGlzIG5vdCBmbHVzaCBhZ2FpbnN0IHRoZSBib3JkZXIuXG4gKlxuICogVGhlIGNhcmQgY2xpcHMgaXRzIG93biBjb250ZW50IHNvIG1lZGlhIGFuZCBmaWxsZWQgaGVhZGVyL2FjdGlvbiByb3dzIGZvbGxvd1xuICogaXRzIGNvcm5lcnMuIFBvcHVwcyAoYHJpdi1tZW51YCwgYHJpdlRvb2x0aXBgKSByZW5kZXIgdGhyb3VnaCB0aGUgb3ZlcmxheVxuICogb3V0bGV0LCBzbyB0aGV5IGFyZSBub3QgYWZmZWN0ZWQgYnkgdGhhdCBjbGlwcGluZy5cbiAqXG4gKiBQZXItaW5zdGFuY2UgcmFkaXVzIGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIGAtLWNhcmQtYm9yZGVyLXJhZGl1c2BcbiAqIGN1c3RvbSBwcm9wZXJ0eS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncml2LWNhcmQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2FyZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NhcmQuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQ2FyZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZWw6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICkge31cblxuICAvKiogQm9yZGVyIGFuZCBzaGFkb3cgdHJlYXRtZW50IG9mIHRoZSBzdXJmYWNlLiAqL1xuICBASW5wdXQoKVxuICB2YXJpYW50OiBDYXJkQ29tcG9uZW50LlZhcmlhbnQgPSAnb3V0bGluZWQnO1xuXG4gIC8qKiBOZXV0cmFsIGJhY2tncm91bmQgZWxldmF0aW9uLCBtYXRjaGluZyB0aGUgYC0tc3VyZmFjZS1saWdodC0qYCB0b2tlbnMuICovXG4gIEBJbnB1dCgpXG4gIHN1cmZhY2U6IENhcmRDb21wb25lbnQuU3VyZmFjZSA9ICcwJztcblxuICAvKiogU2VtYW50aWMgYmFja2dyb3VuZCB0aW50LiBPdmVycmlkZXMgYHN1cmZhY2VgIHdoZW4gbm90IGBuZXV0cmFsYC4gKi9cbiAgQElucHV0KClcbiAgdG9uZTogQ2FyZENvbXBvbmVudC5Ub25lID0gJ25ldXRyYWwnO1xuXG4gIC8qKiBTdGFja2luZyBkaXJlY3Rpb24gb2YgdGhlIHByb2plY3RlZCBwYXJ0cy4gKi9cbiAgQElucHV0KClcbiAgb3JpZW50YXRpb246IENhcmRDb21wb25lbnQuT3JpZW50YXRpb24gPSAndmVydGljYWwnO1xuXG4gIC8qKlxuICAgKiBQYWRkaW5nIGFwcGxpZWQgdG8gdGhlIGNhcmQgaXRzZWxmLiBMZWF2ZSBhcyBgbm9uZWAgd2hlbiBjb21wb3Npbmcgd2l0aFxuICAgKiBgcml2LWNhcmQtaGVhZGVyYCAvIGByaXYtY2FyZC1jb250ZW50YCAvIGByaXYtY2FyZC1hY3Rpb25zYCwgd2hpY2ggb3duXG4gICAqIHRoZWlyIG93biBwYWRkaW5nLlxuICAgKi9cbiAgQElucHV0KClcbiAgcGFkZGluZzogQ2FyZENvbXBvbmVudC5QYWRkaW5nID0gJ25vbmUnO1xuXG4gIC8qKlxuICAgKiBNYWtlcyB0aGUgd2hvbGUgc3VyZmFjZSBhY3RpdmF0ZSwgZW1pdHRpbmcgYGNhcmRDbGlja2AuIEFkZHMgdGhlIGhvdmVyXG4gICAqIGFmZm9yZGFuY2UgYW5kIGtleWJvYXJkIHN1cHBvcnQuXG4gICAqL1xuICBASW5wdXQoKVxuICBjbGlja2FibGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQWNjZXNzaWJsZSBuYW1lIGZvciB0aGUgY2FyZCdzIGFjdGlvbi4gRGVmYXVsdHMgdG8gdGhlIGByaXYtY2FyZC1oZWFkZXJgXG4gICAqIHRpdGxlLCBmYWxsaW5nIGJhY2sgdG8gdGhlIGNhcmQncyB3aG9sZSB0ZXh0IGNvbnRlbnQgd2hlbiB0aGVyZSBpcyBub1xuICAgKiBoZWFkZXIuIFNldCB0aGlzIHdoZW4gbmVpdGhlciByZWFkcyB3ZWxsIG9uIGl0cyBvd24uXG4gICAqL1xuICBASW5wdXQoKVxuICBjbGlja0xhYmVsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNYXJrcyB0aGUgY2FyZCBhcyB0aGUgY3VycmVudCBzZWxlY3Rpb24sIGdpdmluZyBpdCBhIGRpc3RpbmN0IGJvcmRlciBhbmRcbiAgICogc2hhZG93LiBDb21wb3NlcyB3aXRoIGFueSBgdG9uZWAsIHNvIGEgc2VsZWN0ZWQgZGFuZ2VyIGNhcmQga2VlcHMgaXRzXG4gICAqIHRpbnQuIEFubm91bmNlZCB0byBhc3Npc3RpdmUgdGVjaG5vbG9neSB0aHJvdWdoIGBhcmlhLWN1cnJlbnRgLlxuICAgKi9cbiAgQElucHV0KClcbiAgc2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogTXV0ZXMgdGhlIHN1cmZhY2UsIHN1cHByZXNzZXMgaG92ZXIgZmVlZGJhY2ssIGFuZCBkaXNhYmxlcyB0aGUgY2xpY2tcbiAgICogdGFyZ2V0LiBQcmVzZW50YXRpb25hbCBmb3IgZXZlcnl0aGluZyBlbHNlIOKAlCBkaXNhYmxlIHRoZSBjYXJkJ3Mgb3duXG4gICAqIGNvbnRyb2xzIHRvby5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIEVtaXR0ZWQgd2hlbiBhIGNsaWNrYWJsZSBjYXJkIGlzIGFjdGl2YXRlZCBieSBwb2ludGVyIG9yIGtleWJvYXJkLiAqL1xuICBAT3V0cHV0KClcbiAgY2FyZENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PigpO1xuXG4gIC8qKlxuICAgKiBOYW1lcyB0aGUgY2xpY2sgdGFyZ2V0IGZyb20gdGhlIGNhcmQncyBjb250ZW50LiBHZW5lcmF0ZWQgb25seSB3aGVuIHRoZVxuICAgKiBjb25zdW1lciBoYXMgbm90IHNldCB0aGVpciBvd24gaWQuXG4gICAqL1xuICBwcml2YXRlIGNhcmRJZDogc3RyaW5nID0gJyc7XG5cbiAgLyoqIFNldCBieSBhIHByb2plY3RlZCBgcml2LWNhcmQtaGVhZGVyYCB0aGF0IGhhcyBhIHRpdGxlIHRvIG5hbWUgYWdhaW5zdC4gKi9cbiAgcHJpdmF0ZSB0aXRsZUlkPzogc3RyaW5nO1xuXG4gIC8qKiBTZXQgYnkgYSBwcm9qZWN0ZWQgYHJpdi1jYXJkLWhlYWRlcmAgdGhhdCBpcyBleHBhbmRhYmxlLiAqL1xuICBwcml2YXRlIGV4cGFuZFJlZ2lvbklkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZCBhbiBleHBhbmRhYmxlIGhlYWRlcidzIHRvZ2dsZSBwb2ludHMgYGFyaWEtY29udHJvbHNgIGF0LCB3b3JuIGJ5IGFcbiAgICogcHJvamVjdGVkIGByaXYtY2FyZC1jb250ZW50YC5cbiAgICovXG4gIGdldCByZWdpb25JZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmV4cGFuZFJlZ2lvbklkO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jYXJkSWQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuaWQgfHwgdW5pcXVlSWQoJ3Jpdi1jYXJkLScpO1xuICAgIGlmICghdGhpcy5lbC5uYXRpdmVFbGVtZW50LmlkKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICdpZCcsIHRoaXMuY2FyZElkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIHRoZSBoZWFkZXIncyB0aXRsZSBhcyB0aGUgY2xpY2sgdGFyZ2V0J3MgYWNjZXNzaWJsZSBuYW1lLCB3aGljaFxuICAgKiBrZWVwcyB0aGUgYW5ub3VuY2VtZW50IHRvIHRoZSBjYXJkJ3Mgc3ViamVjdCBpbnN0ZWFkIG9mIGV2ZXJ5IHdvcmQgb24gdGhlXG4gICAqIHN1cmZhY2UuIENhbGxlZCBieSBgcml2LWNhcmQtaGVhZGVyYDsgbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkuXG4gICAqL1xuICBzZXRUaXRsZUlkKGlkOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLnRpdGxlSWQgPSBpZDtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHaXZlcyB1cCBhIHRpdGxlIHJlZ2lzdGVyZWQgYnkgYHNldFRpdGxlSWRgLCBzbyBhIGhlYWRlciB0aGF0IGlzIHJlbW92ZWRcbiAgICogZG9lcyBub3QgbGVhdmUgdGhlIGNsaWNrIHRhcmdldCBuYW1pbmcgaXRzZWxmIGFnYWluc3QgYSBkZXRhY2hlZCBlbGVtZW50LlxuICAgKiBJZ25vcmVzIGlkcyB0aGF0IGFyZSBubyBsb25nZXIgdGhlIG9uZSBpbiB1c2UuXG4gICAqL1xuICBjbGVhclRpdGxlSWQoaWQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLnRpdGxlSWQgPT09IGlkKSB7XG4gICAgICB0aGlzLnNldFRpdGxlSWQodW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVsYXlzIHRoZSByZWdpb24gYW4gZXhwYW5kYWJsZSBoZWFkZXIgY29udHJvbHMgdG8gdGhlIHByb2plY3RlZFxuICAgKiBgcml2LWNhcmQtY29udGVudGAsIHNvIG5laXRoZXIgc2lkZSBuZWVkcyB0aGUgY29uc3VtZXIgdG8gd2lyZSBhbiBpZC5cbiAgICogQ2FsbGVkIGJ5IGByaXYtY2FyZC1oZWFkZXJgOyBub3QgcGFydCBvZiB0aGUgcHVibGljIEFQSS5cbiAgICovXG4gIHNldFJlZ2lvbklkKGlkOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmV4cGFuZFJlZ2lvbklkID0gaWQ7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogR2l2ZXMgdXAgYSByZWdpb24gcmVnaXN0ZXJlZCBieSBgc2V0UmVnaW9uSWRgLiBJZ25vcmVzIGlkcyB0aGF0IGFyZSBub1xuICAgKiBsb25nZXIgdGhlIG9uZSBpbiB1c2UuXG4gICAqL1xuICBjbGVhclJlZ2lvbklkKGlkOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5leHBhbmRSZWdpb25JZCA9PT0gaWQpIHtcbiAgICAgIHRoaXMuc2V0UmVnaW9uSWQodW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRWxlbWVudCB3aG9zZSB0ZXh0IG5hbWVzIHRoZSBjbGljayB0YXJnZXQsIHVubGVzcyBgY2xpY2tMYWJlbGAgaXMgc2V0LiBUaGVcbiAgICogaG9zdCBpZCBpcyByZWFkIGZyb20gdGhlIERPTSByYXRoZXIgdGhhbiBjYWNoZWQsIHNvIGEgYm91bmQgYFtpZF1gIHRoYXRcbiAgICogY2hhbmdlcyBpcyBwaWNrZWQgdXAgb24gdGhlIGNhcmQncyBuZXh0IGNoYW5nZSBkZXRlY3Rpb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGxhYmVsbGVkQnkoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuY2xpY2tMYWJlbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMudGl0bGVJZCA/PyAodGhpcy5lbC5uYXRpdmVFbGVtZW50LmlkIHx8IHRoaXMuY2FyZElkKTtcbiAgfVxuXG4gIC8qKiBBbm5vdW5jZXMgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHRvIGFzc2lzdGl2ZSB0ZWNobm9sb2d5LiAqL1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1jdXJyZW50JylcbiAgZ2V0IGFyaWFDdXJyZW50KCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkID8gJ3RydWUnIDogbnVsbDtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBnZXQgY2xhc3NlcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh7XG4gICAgICBbdGhpcy52YXJpYW50XTogdHJ1ZSxcbiAgICAgIFtgc3VyZmFjZS0ke3RoaXMuc3VyZmFjZX1gXTogdHJ1ZSxcbiAgICAgIFtgdG9uZS0ke3RoaXMudG9uZX1gXTogdHJ1ZSxcbiAgICAgIFt0aGlzLm9yaWVudGF0aW9uXTogdHJ1ZSxcbiAgICAgIFtgcGFkZGluZy0ke3RoaXMucGFkZGluZ31gXTogdHJ1ZSxcbiAgICAgIGNsaWNrYWJsZTogdGhpcy5jbGlja2FibGUsXG4gICAgICBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZCxcbiAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkLFxuICAgIH0pXG4gICAgICAuZmlsdGVyKChbXywgdl0pID0+IHYpXG4gICAgICAubWFwKChba10pID0+IGspXG4gICAgICAuam9pbignICcpO1xuICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ2FyZENvbXBvbmVudCB7XG4gIGV4cG9ydCBjb25zdCBWYXJpYW50cyA9IFsnb3V0bGluZWQnLCAnZWxldmF0ZWQnLCAnZmxhdCddIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBWYXJpYW50ID0gKHR5cGVvZiBWYXJpYW50cylbbnVtYmVyXTtcblxuICBleHBvcnQgY29uc3QgU3VyZmFjZXMgPSBbJzAnLCAnMScsICcyJ10gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIFN1cmZhY2UgPSAodHlwZW9mIFN1cmZhY2VzKVtudW1iZXJdO1xuXG4gIGV4cG9ydCBjb25zdCBUb25lcyA9IFtcbiAgICAnbmV1dHJhbCcsXG4gICAgJ2RhbmdlcicsXG4gICAgJ2NhdXRpb24nLFxuICAgICd3YXJuaW5nJyxcbiAgICAnc2FmZXR5JyxcbiAgICAnc2VsZWN0ZWQnLFxuICBdIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBUb25lID0gKHR5cGVvZiBUb25lcylbbnVtYmVyXTtcblxuICBleHBvcnQgY29uc3QgT3JpZW50YXRpb25zID0gWyd2ZXJ0aWNhbCcsICdob3Jpem9udGFsJ10gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIE9yaWVudGF0aW9uID0gKHR5cGVvZiBPcmllbnRhdGlvbnMpW251bWJlcl07XG5cbiAgLyoqIFNoYXJlZCBwYWRkaW5nIHNjYWxlIGZvciB0aGUgY2FyZCBhbmQgaXRzIHN1Yi1jb21wb25lbnRzLiAqL1xuICBleHBvcnQgY29uc3QgUGFkZGluZ3MgPSBbJ25vbmUnLCAnc21hbGwnLCAnbWVkaXVtJywgJ2xhcmdlJ10gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIFBhZGRpbmcgPSAodHlwZW9mIFBhZGRpbmdzKVtudW1iZXJdO1xufVxuIiwiPGJ1dHRvblxuICAqbmdJZj1cImNsaWNrYWJsZVwiXG4gIHR5cGU9XCJidXR0b25cIlxuICBjbGFzcz1cImNsaWNrLXRhcmdldFwiXG4gIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gIFthdHRyLmFyaWEtbGFiZWxdPVwiY2xpY2tMYWJlbFwiXG4gIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJsYWJlbGxlZEJ5XCJcbiAgKGNsaWNrKT1cImNhcmRDbGljay5lbWl0KCRldmVudClcIlxuPjwvYnV0dG9uPlxuPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuIl19