valtech-components 2.0.538 → 2.0.540

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.
@@ -5,7 +5,7 @@ import { I18nService } from '../../../services/i18n';
5
5
  import { addIcons } from 'ionicons';
6
6
  import { personOutline, mailOutline, callOutline, ticketOutline, locationOutline, calendarOutline, trophyOutline, ellipsisVertical, checkmarkCircle, timeOutline, closeCircle, } from 'ionicons/icons';
7
7
  import { AvatarComponent } from '../../atoms/avatar/avatar.component';
8
- import { DEFAULT_PAYMENT_STATUS_LABELS, DEFAULT_PAYMENT_STATUS_COLORS, } from './types';
8
+ import { DEFAULT_PAYMENT_STATUS_COLORS, } from './types';
9
9
  import * as i0 from "@angular/core";
10
10
  addIcons({
11
11
  personOutline,
@@ -144,8 +144,20 @@ export class ParticipantCardComponent {
144
144
  const status = this.props.participant.paymentStatus;
145
145
  if (!status)
146
146
  return '';
147
- const labels = { ...DEFAULT_PAYMENT_STATUS_LABELS, ...this.props.paymentStatusLabels };
148
- return labels[status] || status;
147
+ // If custom labels are provided, use them first
148
+ if (this.props.paymentStatusLabels?.[status]) {
149
+ return this.props.paymentStatusLabels[status];
150
+ }
151
+ // Use i18n for default labels
152
+ const i18nKeys = {
153
+ pending: 'paymentPending',
154
+ processing: 'paymentProcessing',
155
+ paid: 'paymentPaid',
156
+ refunded: 'paymentRefunded',
157
+ failed: 'paymentFailed',
158
+ };
159
+ const key = i18nKeys[status];
160
+ return key ? this.i18n.t(key) : status;
149
161
  }
150
162
  getPaymentStatusColor() {
151
163
  const status = this.props.participant.paymentStatus;
@@ -499,4 +511,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
499
511
  }], actionClick: [{
500
512
  type: Output
501
513
  }] } });
502
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFydGljaXBhbnQtY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL3BhcnRpY2lwYW50LWNhcmQvcGFydGljaXBhbnQtY2FyZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQ0wsYUFBYSxFQUNiLFdBQVcsRUFDWCxXQUFXLEVBQ1gsYUFBYSxFQUNiLGVBQWUsRUFDZixlQUFlLEVBQ2YsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsV0FBVyxFQUNYLFdBQVcsR0FDWixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBS0wsNkJBQTZCLEVBQzdCLDZCQUE2QixHQUM5QixNQUFNLFNBQVMsQ0FBQzs7QUFFakIsUUFBUSxDQUFDO0lBQ1AsYUFBYTtJQUNiLFdBQVc7SUFDWCxXQUFXO0lBQ1gsYUFBYTtJQUNiLGVBQWU7SUFDZixlQUFlO0lBQ2YsYUFBYTtJQUNiLGdCQUFnQjtJQUNoQixlQUFlO0lBQ2YsV0FBVztJQUNYLFdBQVc7Q0FDWixDQUFDLENBQUM7QUF1Skg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QUNwQixRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDbEMsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVzthQUNwQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzsrR0E1SVUsd0JBQXdCO21HQUF4Qix3QkFBd0IsNktBeE16Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThJVCxxOElBL0lTLFlBQVksK0JBQUUsT0FBTywySkFBRSxRQUFRLGlGQUFFLFNBQVMsb1BBQUUsT0FBTyx1R0FBRSxlQUFlOzs0RkF5TW5FLHdCQUF3QjtrQkE1TXBDLFNBQVM7K0JBQ0Usc0JBQXNCLGNBQ3BCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsZUFBZSxDQUFDLFlBQ3JFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOElUOzhCQTJEUSxLQUFLO3NCQUFiLEtBQUs7Z0JBRUksU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElvbkljb24sIElvbkJhZGdlLCBJb25CdXR0b24sIElvbkNoaXAgfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7XG4gIHBlcnNvbk91dGxpbmUsXG4gIG1haWxPdXRsaW5lLFxuICBjYWxsT3V0bGluZSxcbiAgdGlja2V0T3V0bGluZSxcbiAgbG9jYXRpb25PdXRsaW5lLFxuICBjYWxlbmRhck91dGxpbmUsXG4gIHRyb3BoeU91dGxpbmUsXG4gIGVsbGlwc2lzVmVydGljYWwsXG4gIGNoZWNrbWFya0NpcmNsZSxcbiAgdGltZU91dGxpbmUsXG4gIGNsb3NlQ2lyY2xlLFxufSBmcm9tICdpb25pY29ucy9pY29ucyc7XG5pbXBvcnQgeyBBdmF0YXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9hdmF0YXIvYXZhdGFyLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBQYXJ0aWNpcGFudENhcmRNZXRhZGF0YSxcbiAgUGFydGljaXBhbnRDYXJkQ2xpY2tFdmVudCxcbiAgUGFydGljaXBhbnRDYXJkQWN0aW9uRXZlbnQsXG4gIFBhcnRpY2lwYW50VGlja2V0LFxuICBERUZBVUxUX1BBWU1FTlRfU1RBVFVTX0xBQkVMUyxcbiAgREVGQVVMVF9QQVlNRU5UX1NUQVRVU19DT0xPUlMsXG59IGZyb20gJy4vdHlwZXMnO1xuXG5hZGRJY29ucyh7XG4gIHBlcnNvbk91dGxpbmUsXG4gIG1haWxPdXRsaW5lLFxuICBjYWxsT3V0bGluZSxcbiAgdGlja2V0T3V0bGluZSxcbiAgbG9jYXRpb25PdXRsaW5lLFxuICBjYWxlbmRhck91dGxpbmUsXG4gIHRyb3BoeU91dGxpbmUsXG4gIGVsbGlwc2lzVmVydGljYWwsXG4gIGNoZWNrbWFya0NpcmNsZSxcbiAgdGltZU91dGxpbmUsXG4gIGNsb3NlQ2lyY2xlLFxufSk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1wYXJ0aWNpcGFudC1jYXJkJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSW9uSWNvbiwgSW9uQmFkZ2UsIElvbkJ1dHRvbiwgSW9uQ2hpcCwgQXZhdGFyQ29tcG9uZW50XSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8YXJ0aWNsZVxuICAgICAgY2xhc3M9XCJwYXJ0aWNpcGFudC1jYXJkXCJcbiAgICAgIFtjbGFzc109XCJwcm9wcy5jc3NDbGFzc1wiXG4gICAgICBbY2xhc3MudmFyaWFudC1kZWZhdWx0XT1cInByb3BzLnZhcmlhbnQgPT09ICdkZWZhdWx0JyB8fCAhcHJvcHMudmFyaWFudFwiXG4gICAgICBbY2xhc3MudmFyaWFudC1jb21wYWN0XT1cInByb3BzLnZhcmlhbnQgPT09ICdjb21wYWN0J1wiXG4gICAgICBbY2xhc3MudmFyaWFudC1kZXRhaWxlZF09XCJwcm9wcy52YXJpYW50ID09PSAnZGV0YWlsZWQnXCJcbiAgICAgIFtjbGFzcy52YXJpYW50LWFkbWluXT1cInByb3BzLnZhcmlhbnQgPT09ICdhZG1pbidcIlxuICAgICAgW2NsYXNzLnNpemUtc21hbGxdPVwicHJvcHMuc2l6ZSA9PT0gJ3NtYWxsJ1wiXG4gICAgICBbY2xhc3Muc2l6ZS1tZWRpdW1dPVwicHJvcHMuc2l6ZSA9PT0gJ21lZGl1bScgfHwgIXByb3BzLnNpemVcIlxuICAgICAgW2NsYXNzLnNpemUtbGFyZ2VdPVwicHJvcHMuc2l6ZSA9PT0gJ2xhcmdlJ1wiXG4gICAgICBbY2xhc3MuaXMtd2lubmVyXT1cInByb3BzLnBhcnRpY2lwYW50LmlzV2lubmVyICYmIHByb3BzLmhpZ2hsaWdodFdpbm5lciAhPT0gZmFsc2VcIlxuICAgICAgW2NsYXNzLmNsaWNrYWJsZV09XCJwcm9wcy5jbGlja2FibGVcIlxuICAgICAgKGNsaWNrKT1cIm9uQ2FyZENsaWNrKClcIlxuICAgID5cbiAgICAgIDwhLS0gV2lubmVyIGJhZGdlIC0tPlxuICAgICAgQGlmIChwcm9wcy5wYXJ0aWNpcGFudC5pc1dpbm5lciAmJiBwcm9wcy5oaWdobGlnaHRXaW5uZXIgIT09IGZhbHNlKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3aW5uZXItYmFkZ2VcIj5cbiAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInRyb3BoeS1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyBnZXRXaW5uZXJUZXh0KCkgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuXG4gICAgICA8IS0tIE1haW4gY29udGVudCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLW1haW5cIj5cbiAgICAgICAgPCEtLSBBdmF0YXIgLS0+XG4gICAgICAgIEBpZiAocHJvcHMuc2hvd0F2YXRhciAhPT0gZmFsc2UpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLXNlY3Rpb25cIj5cbiAgICAgICAgICAgIEBpZiAocHJvcHMucGFydGljaXBhbnQuYXZhdGFyKSB7XG4gICAgICAgICAgICAgIDx2YWwtYXZhdGFyIFtwcm9wc109XCJwcm9wcy5wYXJ0aWNpcGFudC5hdmF0YXJcIj48L3ZhbC1hdmF0YXI+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlZmF1bHQtYXZhdGFyXCI+XG4gICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJwZXJzb24tb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSBJbmZvIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1zZWN0aW9uXCI+XG4gICAgICAgICAgPGg0IGNsYXNzPVwicGFydGljaXBhbnQtbmFtZVwiPnt7IHByb3BzLnBhcnRpY2lwYW50Lm5hbWUgfX08L2g0PlxuXG4gICAgICAgICAgQGlmIChwcm9wcy5zaG93RW1haWwgIT09IGZhbHNlICYmIHByb3BzLnBhcnRpY2lwYW50LmVtYWlsKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1pdGVtXCI+XG4gICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwibWFpbC1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgcHJvcHMucGFydGljaXBhbnQuZW1haWwgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBAaWYgKHByb3BzLnNob3dQaG9uZSAhPT0gZmFsc2UgJiYgcHJvcHMucGFydGljaXBhbnQucGhvbmUpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWl0ZW1cIj5cbiAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjYWxsLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICA8c3Bhbj57eyBwcm9wcy5wYXJ0aWNpcGFudC5waG9uZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cblxuICAgICAgICAgIEBpZiAocHJvcHMucGFydGljaXBhbnQubG9jYXRpb24pIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWl0ZW1cIj5cbiAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJsb2NhdGlvbi1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgcHJvcHMucGFydGljaXBhbnQubG9jYXRpb24gfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBAaWYgKHByb3BzLnNob3dEYXRlICE9PSBmYWxzZSAmJiBwcm9wcy5wYXJ0aWNpcGFudC5yZWdpc3RyYXRpb25EYXRlKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1pdGVtXCI+XG4gICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2FsZW5kYXItb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IGZvcm1hdERhdGUocHJvcHMucGFydGljaXBhbnQucmVnaXN0cmF0aW9uRGF0ZSkgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gU3RhdHVzICYgQW1vdW50IChyaWdodCBzaWRlKSAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0YXR1cy1zZWN0aW9uXCI+XG4gICAgICAgICAgQGlmIChwcm9wcy5zaG93UGF5bWVudFN0YXR1cyAhPT0gZmFsc2UgJiYgcHJvcHMucGFydGljaXBhbnQucGF5bWVudFN0YXR1cykge1xuICAgICAgICAgICAgPGlvbi1iYWRnZSBbY29sb3JdPVwiZ2V0UGF5bWVudFN0YXR1c0NvbG9yKClcIiBjbGFzcz1cInBheW1lbnQtYmFkZ2VcIj5cbiAgICAgICAgICAgICAgPGlvbi1pY29uIFtuYW1lXT1cImdldFBheW1lbnRTdGF0dXNJY29uKClcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICB7eyBnZXRQYXltZW50U3RhdHVzTGFiZWwoKSB9fVxuICAgICAgICAgICAgPC9pb24tYmFkZ2U+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQGlmIChwcm9wcy5zaG93QW1vdW50ICE9PSBmYWxzZSAmJiBwcm9wcy5wYXJ0aWNpcGFudC5hbW91bnRQYWlkKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYW1vdW50XCI+XG4gICAgICAgICAgICAgIHt7IGZvcm1hdEN1cnJlbmN5KHByb3BzLnBhcnRpY2lwYW50LmFtb3VudFBhaWQpIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gQWN0aW9ucyBtZW51IC0tPlxuICAgICAgICBAaWYgKHByb3BzLnNob3dBY3Rpb25zICYmIHByb3BzLmFjdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgICBmaWxsPVwiY2xlYXJcIlxuICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb25zLWJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25BY3Rpb25zQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJpY29uLW9ubHlcIiBuYW1lPVwiZWxsaXBzaXMtdmVydGljYWxcIj48L2lvbi1pY29uPlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gVGlja2V0cyBzZWN0aW9uIC0tPlxuICAgICAgQGlmIChwcm9wcy5zaG93VGlja2V0cyAhPT0gZmFsc2UgJiYgdGlja2V0TnVtYmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aWNrZXRzLXNlY3Rpb25cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGlja2V0cy1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwidGlja2V0LW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgPHNwYW4+e3sgZ2V0VGlja2V0c0NvdW50VGV4dCh0aWNrZXROdW1iZXJzLmxlbmd0aCkgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGlja2V0cy1saXN0XCI+XG4gICAgICAgICAgICBAZm9yICh0aWNrZXQgb2YgdmlzaWJsZVRpY2tldHM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICA8aW9uLWNoaXBcbiAgICAgICAgICAgICAgICBbY29sb3JdPVwiZ2V0VGlja2V0Q29sb3IodGlja2V0KVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLndpbm5lci10aWNrZXRdPVwiaXNXaW5uZXJUaWNrZXQodGlja2V0KVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0aWNrZXQtY2hpcFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAaWYgKGlzV2lubmVyVGlja2V0KHRpY2tldCkpIHtcbiAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwidHJvcGh5LW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB7eyBmb3JtYXRUaWNrZXROdW1iZXIodGlja2V0KSB9fVxuICAgICAgICAgICAgICA8L2lvbi1jaGlwPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKGhpZGRlblRpY2tldHNDb3VudCA+IDApIHtcbiAgICAgICAgICAgICAgPGlvbi1jaGlwXG4gICAgICAgICAgICAgICAgY29sb3I9XCJtZWRpdW1cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibW9yZS10aWNrZXRzXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2hvd0FsbFRpY2tldHMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBnZXRNb3JlVGV4dChoaWRkZW5UaWNrZXRzQ291bnQpIH19XG4gICAgICAgICAgICAgIDwvaW9uLWNoaXA+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuXG4gICAgICA8IS0tIE5vdGVzIChhZG1pbiB2YXJpYW50KSAtLT5cbiAgICAgIEBpZiAocHJvcHMudmFyaWFudCA9PT0gJ2FkbWluJyAmJiBwcm9wcy5wYXJ0aWNpcGFudC5ub3Rlcykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwibm90ZXMtc2VjdGlvblwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibm90ZXMtbGFiZWxcIj57eyBnZXROb3Rlc0xhYmVsKCkgfX08L3NwYW4+XG4gICAgICAgICAgPHAgY2xhc3M9XCJub3Rlcy10ZXh0XCI+e3sgcHJvcHMucGFydGljaXBhbnQubm90ZXMgfX08L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvYXJ0aWNsZT5cbiAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vcGFydGljaXBhbnQtY2FyZC5jb21wb25lbnQuc2NzcyddLFxufSlcbi8qKlxuICogdmFsLXBhcnRpY2lwYW50LWNhcmRcbiAqXG4gKiBBIGNhcmQgY29tcG9uZW50IGZvciBkaXNwbGF5aW5nIHBhcnRpY2lwYW50IGluZm9ybWF0aW9uIGluIGEgcmFmZmxlLlxuICpcbiAqIEBleGFtcGxlIEJhc2ljIHVzYWdlXG4gKiBgYGBodG1sXG4gKiA8dmFsLXBhcnRpY2lwYW50LWNhcmRcbiAqICAgW3Byb3BzXT1cIntcbiAqICAgICBwYXJ0aWNpcGFudDoge1xuICogICAgICAgaWQ6ICcxJyxcbiAqICAgICAgIG5hbWU6ICdKdWFuIFDDqXJleicsXG4gKiAgICAgICBlbWFpbDogJ2p1YW5AZW1haWwuY29tJyxcbiAqICAgICAgIHRpY2tldHM6IFs0MiwgMTU2LCA3ODldLFxuICogICAgICAgcGF5bWVudFN0YXR1czogJ3BhaWQnXG4gKiAgICAgfVxuICogICB9XCJcbiAqID48L3ZhbC1wYXJ0aWNpcGFudC1jYXJkPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgQWRtaW4gdmFyaWFudCB3aXRoIGFjdGlvbnNcbiAqIGBgYGh0bWxcbiAqIDx2YWwtcGFydGljaXBhbnQtY2FyZFxuICogICBbcHJvcHNdPVwie1xuICogICAgIHBhcnRpY2lwYW50OiBwYXJ0aWNpcGFudCxcbiAqICAgICB2YXJpYW50OiAnYWRtaW4nLFxuICogICAgIHNob3dBY3Rpb25zOiB0cnVlLFxuICogICAgIGFjdGlvbnM6IFtcbiAqICAgICAgIHsgaWQ6ICdlZGl0JywgbGFiZWw6ICdFZGl0YXInLCBpY29uOiAnY3JlYXRlLW91dGxpbmUnIH0sXG4gKiAgICAgICB7IGlkOiAncmVmdW5kJywgbGFiZWw6ICdSZWVtYm9sc2FyJywgaWNvbjogJ2Nhc2gtb3V0bGluZScsIGNvbG9yOiAnd2FybmluZycgfSxcbiAqICAgICAgIHsgaWQ6ICdkZWxldGUnLCBsYWJlbDogJ0VsaW1pbmFyJywgaWNvbjogJ3RyYXNoLW91dGxpbmUnLCBkZXN0cnVjdGl2ZTogdHJ1ZSB9XG4gKiAgICAgXVxuICogICB9XCJcbiAqICAgKGNhcmRDbGljayk9XCJvblBhcnRpY2lwYW50Q2xpY2soJGV2ZW50KVwiXG4gKiAgIChhY3Rpb25DbGljayk9XCJvbkFjdGlvbkNsaWNrKCRldmVudClcIlxuICogPjwvdmFsLXBhcnRpY2lwYW50LWNhcmQ+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBXaW5uZXIgaGlnaGxpZ2h0XG4gKiBgYGBodG1sXG4gKiA8dmFsLXBhcnRpY2lwYW50LWNhcmRcbiAqICAgW3Byb3BzXT1cIntcbiAqICAgICBwYXJ0aWNpcGFudDoge1xuICogICAgICAgaWQ6ICcxJyxcbiAqICAgICAgIG5hbWU6ICdNYXLDrWEgR2FyY8OtYScsXG4gKiAgICAgICB0aWNrZXRzOiBbeyBudW1iZXI6IDQyLCBzdGF0dXM6ICd3aW5uZXInIH1dLFxuICogICAgICAgaXNXaW5uZXI6IHRydWUsXG4gKiAgICAgICBwYXltZW50U3RhdHVzOiAncGFpZCdcbiAqICAgICB9LFxuICogICAgIGhpZ2hsaWdodFdpbm5lcjogdHJ1ZSxcbiAqICAgICB2YXJpYW50OiAnZGV0YWlsZWQnXG4gKiAgIH1cIlxuICogPjwvdmFsLXBhcnRpY2lwYW50LWNhcmQ+XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFBhcnRpY2lwYW50Q2FyZENvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHByb3BzOiBQYXJ0aWNpcGFudENhcmRNZXRhZGF0YTtcblxuICBAT3V0cHV0KCkgY2FyZENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxQYXJ0aWNpcGFudENhcmRDbGlja0V2ZW50PigpO1xuICBAT3V0cHV0KCkgYWN0aW9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPFBhcnRpY2lwYW50Q2FyZEFjdGlvbkV2ZW50PigpO1xuXG4gIHByaXZhdGUgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG5cbiAgc2hvd0FsbFRpY2tldHMgPSBmYWxzZTtcblxuICAvKiogR2V0IHdpbm5lciBiYWRnZSB0ZXh0ICovXG4gIGdldFdpbm5lclRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pMThuLnQoJ3dpbm5lcicpO1xuICB9XG5cbiAgLyoqIEdldCB0aWNrZXRzIGNvdW50IHRleHQgKi9cbiAgZ2V0VGlja2V0c0NvdW50VGV4dChjb3VudDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7Y291bnR9ICR7Y291bnQgIT09IDEgPyB0aGlzLmkxOG4udCgndGlja2V0cycpIDogdGhpcy5pMThuLnQoJ3RpY2tldCcpfWA7XG4gIH1cblxuICAvKiogR2V0IG1vcmUgdGlja2V0cyB0ZXh0ICovXG4gIGdldE1vcmVUZXh0KGNvdW50OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBgKyR7Y291bnR9ICR7dGhpcy5pMThuLnQoJ21vcmUnKX1gO1xuICB9XG5cbiAgLyoqIEdldCBub3RlcyBsYWJlbCAqL1xuICBnZXROb3Rlc0xhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi50KCdub3RlcycpO1xuICB9XG5cbiAgZ2V0IHRpY2tldE51bWJlcnMoKTogKG51bWJlciB8IFBhcnRpY2lwYW50VGlja2V0KVtdIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5wYXJ0aWNpcGFudC50aWNrZXRzIHx8IFtdO1xuICB9XG5cbiAgZ2V0IHZpc2libGVUaWNrZXRzKCk6IChudW1iZXIgfCBQYXJ0aWNpcGFudFRpY2tldClbXSB7XG4gICAgY29uc3QgbWF4ID0gdGhpcy5wcm9wcy5tYXhUaWNrZXRzVmlzaWJsZSB8fCA1O1xuICAgIGlmICh0aGlzLnNob3dBbGxUaWNrZXRzIHx8IHRoaXMudGlja2V0TnVtYmVycy5sZW5ndGggPD0gbWF4KSB7XG4gICAgICByZXR1cm4gdGhpcy50aWNrZXROdW1iZXJzO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50aWNrZXROdW1iZXJzLnNsaWNlKDAsIG1heCk7XG4gIH1cblxuICBnZXQgaGlkZGVuVGlja2V0c0NvdW50KCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuc2hvd0FsbFRpY2tldHMpIHJldHVybiAwO1xuICAgIGNvbnN0IG1heCA9IHRoaXMucHJvcHMubWF4VGlja2V0c1Zpc2libGUgfHwgNTtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgdGhpcy50aWNrZXROdW1iZXJzLmxlbmd0aCAtIG1heCk7XG4gIH1cblxuICBmb3JtYXRUaWNrZXROdW1iZXIodGlja2V0OiBudW1iZXIgfCBQYXJ0aWNpcGFudFRpY2tldCk6IHN0cmluZyB7XG4gICAgY29uc3QgbnVtID0gdHlwZW9mIHRpY2tldCA9PT0gJ251bWJlcicgPyB0aWNrZXQgOiB0aWNrZXQubnVtYmVyO1xuICAgIGlmICh0aGlzLnByb3BzLm51bWJlclBhZGRpbmcpIHtcbiAgICAgIHJldHVybiBTdHJpbmcobnVtKS5wYWRTdGFydCh0aGlzLnByb3BzLm51bWJlclBhZGRpbmcsICcwJyk7XG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcobnVtKTtcbiAgfVxuXG4gIGdldFRpY2tldENvbG9yKHRpY2tldDogbnVtYmVyIHwgUGFydGljaXBhbnRUaWNrZXQpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgdGlja2V0ID09PSAnbnVtYmVyJykgcmV0dXJuICdwcmltYXJ5JztcbiAgICBzd2l0Y2ggKHRpY2tldC5zdGF0dXMpIHtcbiAgICAgIGNhc2UgJ3dpbm5lcic6XG4gICAgICAgIHJldHVybiAnd2FybmluZyc7XG4gICAgICBjYXNlICdyZXNlcnZlZCc6XG4gICAgICAgIHJldHVybiAndGVydGlhcnknO1xuICAgICAgY2FzZSAnY2FuY2VsbGVkJzpcbiAgICAgICAgcmV0dXJuICdtZWRpdW0nO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdwcmltYXJ5JztcbiAgICB9XG4gIH1cblxuICBpc1dpbm5lclRpY2tldCh0aWNrZXQ6IG51bWJlciB8IFBhcnRpY2lwYW50VGlja2V0KTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiB0aWNrZXQgPT09ICdudW1iZXInKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRpY2tldC5zdGF0dXMgPT09ICd3aW5uZXInO1xuICB9XG5cbiAgZ2V0UGF5bWVudFN0YXR1c0xhYmVsKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RhdHVzID0gdGhpcy5wcm9wcy5wYXJ0aWNpcGFudC5wYXltZW50U3RhdHVzO1xuICAgIGlmICghc3RhdHVzKSByZXR1cm4gJyc7XG4gICAgY29uc3QgbGFiZWxzID0geyAuLi5ERUZBVUxUX1BBWU1FTlRfU1RBVFVTX0xBQkVMUywgLi4udGhpcy5wcm9wcy5wYXltZW50U3RhdHVzTGFiZWxzIH07XG4gICAgcmV0dXJuIGxhYmVsc1tzdGF0dXNdIHx8IHN0YXR1cztcbiAgfVxuXG4gIGdldFBheW1lbnRTdGF0dXNDb2xvcigpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMucHJvcHMucGFydGljaXBhbnQucGF5bWVudFN0YXR1cztcbiAgICBpZiAoIXN0YXR1cykgcmV0dXJuICdtZWRpdW0nO1xuICAgIHJldHVybiBERUZBVUxUX1BBWU1FTlRfU1RBVFVTX0NPTE9SU1tzdGF0dXNdIHx8ICdtZWRpdW0nO1xuICB9XG5cbiAgZ2V0UGF5bWVudFN0YXR1c0ljb24oKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdGF0dXMgPSB0aGlzLnByb3BzLnBhcnRpY2lwYW50LnBheW1lbnRTdGF0dXM7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ3BhaWQnOlxuICAgICAgICByZXR1cm4gJ2NoZWNrbWFyay1jaXJjbGUnO1xuICAgICAgY2FzZSAncGVuZGluZyc6XG4gICAgICBjYXNlICdwcm9jZXNzaW5nJzpcbiAgICAgICAgcmV0dXJuICd0aW1lLW91dGxpbmUnO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgIGNhc2UgJ3JlZnVuZGVkJzpcbiAgICAgICAgcmV0dXJuICdjbG9zZS1jaXJjbGUnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICd0aW1lLW91dGxpbmUnO1xuICAgIH1cbiAgfVxuXG4gIGZvcm1hdEN1cnJlbmN5KGFtb3VudDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBzeW1ib2wgPSB0aGlzLnByb3BzLmN1cnJlbmN5U3ltYm9sIHx8ICckJztcbiAgICByZXR1cm4gYCR7c3ltYm9sfSR7YW1vdW50LnRvTG9jYWxlU3RyaW5nKCdlcy1NWCcpfWA7XG4gIH1cblxuICBmb3JtYXREYXRlKGRhdGU6IERhdGUgfCBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGQgPSB0eXBlb2YgZGF0ZSA9PT0gJ3N0cmluZycgPyBuZXcgRGF0ZShkYXRlKSA6IGRhdGU7XG4gICAgcmV0dXJuIGQudG9Mb2NhbGVEYXRlU3RyaW5nKCdlcy1NWCcsIHtcbiAgICAgIGRheTogJ251bWVyaWMnLFxuICAgICAgbW9udGg6ICdzaG9ydCcsXG4gICAgICB5ZWFyOiAnbnVtZXJpYycsXG4gICAgfSk7XG4gIH1cblxuICB0b2dnbGVTaG93QWxsVGlja2V0cyhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnNob3dBbGxUaWNrZXRzID0gIXRoaXMuc2hvd0FsbFRpY2tldHM7XG4gIH1cblxuICBvbkNhcmRDbGljaygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucHJvcHMuY2xpY2thYmxlKSByZXR1cm47XG4gICAgdGhpcy5jYXJkQ2xpY2suZW1pdCh7XG4gICAgICBwYXJ0aWNpcGFudDogdGhpcy5wcm9wcy5wYXJ0aWNpcGFudCxcbiAgICB9KTtcbiAgfVxuXG4gIG9uQWN0aW9uc0NsaWNrKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIC8vIEluIGEgcmVhbCBpbXBsZW1lbnRhdGlvbiwgdGhpcyB3b3VsZCBvcGVuIGEgcG9wb3ZlciBtZW51XG4gICAgLy8gRm9yIG5vdywgd2UnbGwgZW1pdCB0aGUgZmlyc3QgYWN0aW9uXG4gICAgaWYgKHRoaXMucHJvcHMuYWN0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmFjdGlvbkNsaWNrLmVtaXQoe1xuICAgICAgICBhY3Rpb25JZDogdGhpcy5wcm9wcy5hY3Rpb25zWzBdLmlkLFxuICAgICAgICBwYXJ0aWNpcGFudDogdGhpcy5wcm9wcy5wYXJ0aWNpcGFudCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIl19
514
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFydGljaXBhbnQtY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL3BhcnRpY2lwYW50LWNhcmQvcGFydGljaXBhbnQtY2FyZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQ0wsYUFBYSxFQUNiLFdBQVcsRUFDWCxXQUFXLEVBQ1gsYUFBYSxFQUNiLGVBQWUsRUFDZixlQUFlLEVBQ2YsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsV0FBVyxFQUNYLFdBQVcsR0FDWixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBS0wsNkJBQTZCLEdBQzlCLE1BQU0sU0FBUyxDQUFDOztBQUVqQixRQUFRLENBQUM7SUFDUCxhQUFhO0lBQ2IsV0FBVztJQUNYLFdBQVc7SUFDWCxhQUFhO0lBQ2IsZUFBZTtJQUNmLGVBQWU7SUFDZixhQUFhO0lBQ2IsZ0JBQWdCO0lBQ2hCLGVBQWU7SUFDZixXQUFXO0lBQ1gsV0FBVztDQUNaLENBQUMsQ0FBQztBQXVKSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOElUOzhCQTJEUSxLQUFLO3NCQUFiLEtBQUs7Z0JBRUksU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElvbkljb24sIElvbkJhZGdlLCBJb25CdXR0b24sIElvbkNoaXAgfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7XG4gIHBlcnNvbk91dGxpbmUsXG4gIG1haWxPdXRsaW5lLFxuICBjYWxsT3V0bGluZSxcbiAgdGlja2V0T3V0bGluZSxcbiAgbG9jYXRpb25PdXRsaW5lLFxuICBjYWxlbmRhck91dGxpbmUsXG4gIHRyb3BoeU91dGxpbmUsXG4gIGVsbGlwc2lzVmVydGljYWwsXG4gIGNoZWNrbWFya0NpcmNsZSxcbiAgdGltZU91dGxpbmUsXG4gIGNsb3NlQ2lyY2xlLFxufSBmcm9tICdpb25pY29ucy9pY29ucyc7XG5pbXBvcnQgeyBBdmF0YXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9hdmF0YXIvYXZhdGFyLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBQYXJ0aWNpcGFudENhcmRNZXRhZGF0YSxcbiAgUGFydGljaXBhbnRDYXJkQ2xpY2tFdmVudCxcbiAgUGFydGljaXBhbnRDYXJkQWN0aW9uRXZlbnQsXG4gIFBhcnRpY2lwYW50VGlja2V0LFxuICBERUZBVUxUX1BBWU1FTlRfU1RBVFVTX0NPTE9SUyxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbmFkZEljb25zKHtcbiAgcGVyc29uT3V0bGluZSxcbiAgbWFpbE91dGxpbmUsXG4gIGNhbGxPdXRsaW5lLFxuICB0aWNrZXRPdXRsaW5lLFxuICBsb2NhdGlvbk91dGxpbmUsXG4gIGNhbGVuZGFyT3V0bGluZSxcbiAgdHJvcGh5T3V0bGluZSxcbiAgZWxsaXBzaXNWZXJ0aWNhbCxcbiAgY2hlY2ttYXJrQ2lyY2xlLFxuICB0aW1lT3V0bGluZSxcbiAgY2xvc2VDaXJjbGUsXG59KTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLXBhcnRpY2lwYW50LWNhcmQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBJb25JY29uLCBJb25CYWRnZSwgSW9uQnV0dG9uLCBJb25DaGlwLCBBdmF0YXJDb21wb25lbnRdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxhcnRpY2xlXG4gICAgICBjbGFzcz1cInBhcnRpY2lwYW50LWNhcmRcIlxuICAgICAgW2NsYXNzXT1cInByb3BzLmNzc0NsYXNzXCJcbiAgICAgIFtjbGFzcy52YXJpYW50LWRlZmF1bHRdPVwicHJvcHMudmFyaWFudCA9PT0gJ2RlZmF1bHQnIHx8ICFwcm9wcy52YXJpYW50XCJcbiAgICAgIFtjbGFzcy52YXJpYW50LWNvbXBhY3RdPVwicHJvcHMudmFyaWFudCA9PT0gJ2NvbXBhY3QnXCJcbiAgICAgIFtjbGFzcy52YXJpYW50LWRldGFpbGVkXT1cInByb3BzLnZhcmlhbnQgPT09ICdkZXRhaWxlZCdcIlxuICAgICAgW2NsYXNzLnZhcmlhbnQtYWRtaW5dPVwicHJvcHMudmFyaWFudCA9PT0gJ2FkbWluJ1wiXG4gICAgICBbY2xhc3Muc2l6ZS1zbWFsbF09XCJwcm9wcy5zaXplID09PSAnc21hbGwnXCJcbiAgICAgIFtjbGFzcy5zaXplLW1lZGl1bV09XCJwcm9wcy5zaXplID09PSAnbWVkaXVtJyB8fCAhcHJvcHMuc2l6ZVwiXG4gICAgICBbY2xhc3Muc2l6ZS1sYXJnZV09XCJwcm9wcy5zaXplID09PSAnbGFyZ2UnXCJcbiAgICAgIFtjbGFzcy5pcy13aW5uZXJdPVwicHJvcHMucGFydGljaXBhbnQuaXNXaW5uZXIgJiYgcHJvcHMuaGlnaGxpZ2h0V2lubmVyICE9PSBmYWxzZVwiXG4gICAgICBbY2xhc3MuY2xpY2thYmxlXT1cInByb3BzLmNsaWNrYWJsZVwiXG4gICAgICAoY2xpY2spPVwib25DYXJkQ2xpY2soKVwiXG4gICAgPlxuICAgICAgPCEtLSBXaW5uZXIgYmFkZ2UgLS0+XG4gICAgICBAaWYgKHByb3BzLnBhcnRpY2lwYW50LmlzV2lubmVyICYmIHByb3BzLmhpZ2hsaWdodFdpbm5lciAhPT0gZmFsc2UpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cIndpbm5lci1iYWRnZVwiPlxuICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwidHJvcGh5LW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgIDxzcGFuPnt7IGdldFdpbm5lclRleHQoKSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gTWFpbiBjb250ZW50IC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtbWFpblwiPlxuICAgICAgICA8IS0tIEF2YXRhciAtLT5cbiAgICAgICAgQGlmIChwcm9wcy5zaG93QXZhdGFyICE9PSBmYWxzZSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItc2VjdGlvblwiPlxuICAgICAgICAgICAgQGlmIChwcm9wcy5wYXJ0aWNpcGFudC5hdmF0YXIpIHtcbiAgICAgICAgICAgICAgPHZhbC1hdmF0YXIgW3Byb3BzXT1cInByb3BzLnBhcnRpY2lwYW50LmF2YXRhclwiPjwvdmFsLWF2YXRhcj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVmYXVsdC1hdmF0YXJcIj5cbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInBlcnNvbi1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIEluZm8gLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLXNlY3Rpb25cIj5cbiAgICAgICAgICA8aDQgY2xhc3M9XCJwYXJ0aWNpcGFudC1uYW1lXCI+e3sgcHJvcHMucGFydGljaXBhbnQubmFtZSB9fTwvaDQ+XG5cbiAgICAgICAgICBAaWYgKHByb3BzLnNob3dFbWFpbCAhPT0gZmFsc2UgJiYgcHJvcHMucGFydGljaXBhbnQuZW1haWwpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWl0ZW1cIj5cbiAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJtYWlsLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICA8c3Bhbj57eyBwcm9wcy5wYXJ0aWNpcGFudC5lbWFpbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cblxuICAgICAgICAgIEBpZiAocHJvcHMuc2hvd1Bob25lICE9PSBmYWxzZSAmJiBwcm9wcy5wYXJ0aWNpcGFudC5waG9uZSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm8taXRlbVwiPlxuICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNhbGwtb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IHByb3BzLnBhcnRpY2lwYW50LnBob25lIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQGlmIChwcm9wcy5wYXJ0aWNpcGFudC5sb2NhdGlvbikge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm8taXRlbVwiPlxuICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImxvY2F0aW9uLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICA8c3Bhbj57eyBwcm9wcy5wYXJ0aWNpcGFudC5sb2NhdGlvbiB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cblxuICAgICAgICAgIEBpZiAocHJvcHMuc2hvd0RhdGUgIT09IGZhbHNlICYmIHByb3BzLnBhcnRpY2lwYW50LnJlZ2lzdHJhdGlvbkRhdGUpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWl0ZW1cIj5cbiAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjYWxlbmRhci1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgZm9ybWF0RGF0ZShwcm9wcy5wYXJ0aWNpcGFudC5yZWdpc3RyYXRpb25EYXRlKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBTdGF0dXMgJiBBbW91bnQgKHJpZ2h0IHNpZGUpIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdHVzLXNlY3Rpb25cIj5cbiAgICAgICAgICBAaWYgKHByb3BzLnNob3dQYXltZW50U3RhdHVzICE9PSBmYWxzZSAmJiBwcm9wcy5wYXJ0aWNpcGFudC5wYXltZW50U3RhdHVzKSB7XG4gICAgICAgICAgICA8aW9uLWJhZGdlIFtjb2xvcl09XCJnZXRQYXltZW50U3RhdHVzQ29sb3IoKVwiIGNsYXNzPVwicGF5bWVudC1iYWRnZVwiPlxuICAgICAgICAgICAgICA8aW9uLWljb24gW25hbWVdPVwiZ2V0UGF5bWVudFN0YXR1c0ljb24oKVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgIHt7IGdldFBheW1lbnRTdGF0dXNMYWJlbCgpIH19XG4gICAgICAgICAgICA8L2lvbi1iYWRnZT5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBAaWYgKHByb3BzLnNob3dBbW91bnQgIT09IGZhbHNlICYmIHByb3BzLnBhcnRpY2lwYW50LmFtb3VudFBhaWQpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbW91bnRcIj5cbiAgICAgICAgICAgICAge3sgZm9ybWF0Q3VycmVuY3kocHJvcHMucGFydGljaXBhbnQuYW1vdW50UGFpZCkgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBBY3Rpb25zIG1lbnUgLS0+XG4gICAgICAgIEBpZiAocHJvcHMuc2hvd0FjdGlvbnMgJiYgcHJvcHMuYWN0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICAgIGZpbGw9XCJjbGVhclwiXG4gICAgICAgICAgICBjbGFzcz1cImFjdGlvbnMtYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkFjdGlvbnNDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJlbGxpcHNpcy12ZXJ0aWNhbFwiPjwvaW9uLWljb24+XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBUaWNrZXRzIHNlY3Rpb24gLS0+XG4gICAgICBAaWYgKHByb3BzLnNob3dUaWNrZXRzICE9PSBmYWxzZSAmJiB0aWNrZXROdW1iZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInRpY2tldHMtc2VjdGlvblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aWNrZXRzLWhlYWRlclwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJ0aWNrZXQtb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICA8c3Bhbj57eyBnZXRUaWNrZXRzQ291bnRUZXh0KHRpY2tldE51bWJlcnMubGVuZ3RoKSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aWNrZXRzLWxpc3RcIj5cbiAgICAgICAgICAgIEBmb3IgKHRpY2tldCBvZiB2aXNpYmxlVGlja2V0czsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgIDxpb24tY2hpcFxuICAgICAgICAgICAgICAgIFtjb2xvcl09XCJnZXRUaWNrZXRDb2xvcih0aWNrZXQpXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Mud2lubmVyLXRpY2tldF09XCJpc1dpbm5lclRpY2tldCh0aWNrZXQpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRpY2tldC1jaGlwXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEBpZiAoaXNXaW5uZXJUaWNrZXQodGlja2V0KSkge1xuICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJ0cm9waHktb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHt7IGZvcm1hdFRpY2tldE51bWJlcih0aWNrZXQpIH19XG4gICAgICAgICAgICAgIDwvaW9uLWNoaXA+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpZiAoaGlkZGVuVGlja2V0c0NvdW50ID4gMCkge1xuICAgICAgICAgICAgICA8aW9uLWNoaXBcbiAgICAgICAgICAgICAgICBjb2xvcj1cIm1lZGl1bVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtb3JlLXRpY2tldHNcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTaG93QWxsVGlja2V0cygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGdldE1vcmVUZXh0KGhpZGRlblRpY2tldHNDb3VudCkgfX1cbiAgICAgICAgICAgICAgPC9pb24tY2hpcD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gTm90ZXMgKGFkbWluIHZhcmlhbnQpIC0tPlxuICAgICAgQGlmIChwcm9wcy52YXJpYW50ID09PSAnYWRtaW4nICYmIHByb3BzLnBhcnRpY2lwYW50Lm5vdGVzKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJub3Rlcy1zZWN0aW9uXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJub3Rlcy1sYWJlbFwiPnt7IGdldE5vdGVzTGFiZWwoKSB9fTwvc3Bhbj5cbiAgICAgICAgICA8cCBjbGFzcz1cIm5vdGVzLXRleHRcIj57eyBwcm9wcy5wYXJ0aWNpcGFudC5ub3RlcyB9fTwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9hcnRpY2xlPlxuICBgLFxuICBzdHlsZVVybHM6IFsnLi9wYXJ0aWNpcGFudC1jYXJkLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuLyoqXG4gKiB2YWwtcGFydGljaXBhbnQtY2FyZFxuICpcbiAqIEEgY2FyZCBjb21wb25lbnQgZm9yIGRpc3BsYXlpbmcgcGFydGljaXBhbnQgaW5mb3JtYXRpb24gaW4gYSByYWZmbGUuXG4gKlxuICogQGV4YW1wbGUgQmFzaWMgdXNhZ2VcbiAqIGBgYGh0bWxcbiAqIDx2YWwtcGFydGljaXBhbnQtY2FyZFxuICogICBbcHJvcHNdPVwie1xuICogICAgIHBhcnRpY2lwYW50OiB7XG4gKiAgICAgICBpZDogJzEnLFxuICogICAgICAgbmFtZTogJ0p1YW4gUMOpcmV6JyxcbiAqICAgICAgIGVtYWlsOiAnanVhbkBlbWFpbC5jb20nLFxuICogICAgICAgdGlja2V0czogWzQyLCAxNTYsIDc4OV0sXG4gKiAgICAgICBwYXltZW50U3RhdHVzOiAncGFpZCdcbiAqICAgICB9XG4gKiAgIH1cIlxuICogPjwvdmFsLXBhcnRpY2lwYW50LWNhcmQ+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBBZG1pbiB2YXJpYW50IHdpdGggYWN0aW9uc1xuICogYGBgaHRtbFxuICogPHZhbC1wYXJ0aWNpcGFudC1jYXJkXG4gKiAgIFtwcm9wc109XCJ7XG4gKiAgICAgcGFydGljaXBhbnQ6IHBhcnRpY2lwYW50LFxuICogICAgIHZhcmlhbnQ6ICdhZG1pbicsXG4gKiAgICAgc2hvd0FjdGlvbnM6IHRydWUsXG4gKiAgICAgYWN0aW9uczogW1xuICogICAgICAgeyBpZDogJ2VkaXQnLCBsYWJlbDogJ0VkaXRhcicsIGljb246ICdjcmVhdGUtb3V0bGluZScgfSxcbiAqICAgICAgIHsgaWQ6ICdyZWZ1bmQnLCBsYWJlbDogJ1JlZW1ib2xzYXInLCBpY29uOiAnY2FzaC1vdXRsaW5lJywgY29sb3I6ICd3YXJuaW5nJyB9LFxuICogICAgICAgeyBpZDogJ2RlbGV0ZScsIGxhYmVsOiAnRWxpbWluYXInLCBpY29uOiAndHJhc2gtb3V0bGluZScsIGRlc3RydWN0aXZlOiB0cnVlIH1cbiAqICAgICBdXG4gKiAgIH1cIlxuICogICAoY2FyZENsaWNrKT1cIm9uUGFydGljaXBhbnRDbGljaygkZXZlbnQpXCJcbiAqICAgKGFjdGlvbkNsaWNrKT1cIm9uQWN0aW9uQ2xpY2soJGV2ZW50KVwiXG4gKiA+PC92YWwtcGFydGljaXBhbnQtY2FyZD5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIFdpbm5lciBoaWdobGlnaHRcbiAqIGBgYGh0bWxcbiAqIDx2YWwtcGFydGljaXBhbnQtY2FyZFxuICogICBbcHJvcHNdPVwie1xuICogICAgIHBhcnRpY2lwYW50OiB7XG4gKiAgICAgICBpZDogJzEnLFxuICogICAgICAgbmFtZTogJ01hcsOtYSBHYXJjw61hJyxcbiAqICAgICAgIHRpY2tldHM6IFt7IG51bWJlcjogNDIsIHN0YXR1czogJ3dpbm5lcicgfV0sXG4gKiAgICAgICBpc1dpbm5lcjogdHJ1ZSxcbiAqICAgICAgIHBheW1lbnRTdGF0dXM6ICdwYWlkJ1xuICogICAgIH0sXG4gKiAgICAgaGlnaGxpZ2h0V2lubmVyOiB0cnVlLFxuICogICAgIHZhcmlhbnQ6ICdkZXRhaWxlZCdcbiAqICAgfVwiXG4gKiA+PC92YWwtcGFydGljaXBhbnQtY2FyZD5cbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgUGFydGljaXBhbnRDYXJkQ29tcG9uZW50IHtcbiAgQElucHV0KCkgcHJvcHM6IFBhcnRpY2lwYW50Q2FyZE1ldGFkYXRhO1xuXG4gIEBPdXRwdXQoKSBjYXJkQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPFBhcnRpY2lwYW50Q2FyZENsaWNrRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBhY3Rpb25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8UGFydGljaXBhbnRDYXJkQWN0aW9uRXZlbnQ+KCk7XG5cbiAgcHJpdmF0ZSBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcblxuICBzaG93QWxsVGlja2V0cyA9IGZhbHNlO1xuXG4gIC8qKiBHZXQgd2lubmVyIGJhZGdlIHRleHQgKi9cbiAgZ2V0V2lubmVyVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udCgnd2lubmVyJyk7XG4gIH1cblxuICAvKiogR2V0IHRpY2tldHMgY291bnQgdGV4dCAqL1xuICBnZXRUaWNrZXRzQ291bnRUZXh0KGNvdW50OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtjb3VudH0gJHtjb3VudCAhPT0gMSA/IHRoaXMuaTE4bi50KCd0aWNrZXRzJykgOiB0aGlzLmkxOG4udCgndGlja2V0Jyl9YDtcbiAgfVxuXG4gIC8qKiBHZXQgbW9yZSB0aWNrZXRzIHRleHQgKi9cbiAgZ2V0TW9yZVRleHQoY291bnQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGArJHtjb3VudH0gJHt0aGlzLmkxOG4udCgnbW9yZScpfWA7XG4gIH1cblxuICAvKiogR2V0IG5vdGVzIGxhYmVsICovXG4gIGdldE5vdGVzTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pMThuLnQoJ25vdGVzJyk7XG4gIH1cblxuICBnZXQgdGlja2V0TnVtYmVycygpOiAobnVtYmVyIHwgUGFydGljaXBhbnRUaWNrZXQpW10ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnBhcnRpY2lwYW50LnRpY2tldHMgfHwgW107XG4gIH1cblxuICBnZXQgdmlzaWJsZVRpY2tldHMoKTogKG51bWJlciB8IFBhcnRpY2lwYW50VGlja2V0KVtdIHtcbiAgICBjb25zdCBtYXggPSB0aGlzLnByb3BzLm1heFRpY2tldHNWaXNpYmxlIHx8IDU7XG4gICAgaWYgKHRoaXMuc2hvd0FsbFRpY2tldHMgfHwgdGhpcy50aWNrZXROdW1iZXJzLmxlbmd0aCA8PSBtYXgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRpY2tldE51bWJlcnM7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRpY2tldE51bWJlcnMuc2xpY2UoMCwgbWF4KTtcbiAgfVxuXG4gIGdldCBoaWRkZW5UaWNrZXRzQ291bnQoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5zaG93QWxsVGlja2V0cykgcmV0dXJuIDA7XG4gICAgY29uc3QgbWF4ID0gdGhpcy5wcm9wcy5tYXhUaWNrZXRzVmlzaWJsZSB8fCA1O1xuICAgIHJldHVybiBNYXRoLm1heCgwLCB0aGlzLnRpY2tldE51bWJlcnMubGVuZ3RoIC0gbWF4KTtcbiAgfVxuXG4gIGZvcm1hdFRpY2tldE51bWJlcih0aWNrZXQ6IG51bWJlciB8IFBhcnRpY2lwYW50VGlja2V0KTogc3RyaW5nIHtcbiAgICBjb25zdCBudW0gPSB0eXBlb2YgdGlja2V0ID09PSAnbnVtYmVyJyA/IHRpY2tldCA6IHRpY2tldC5udW1iZXI7XG4gICAgaWYgKHRoaXMucHJvcHMubnVtYmVyUGFkZGluZykge1xuICAgICAgcmV0dXJuIFN0cmluZyhudW0pLnBhZFN0YXJ0KHRoaXMucHJvcHMubnVtYmVyUGFkZGluZywgJzAnKTtcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyhudW0pO1xuICB9XG5cbiAgZ2V0VGlja2V0Q29sb3IodGlja2V0OiBudW1iZXIgfCBQYXJ0aWNpcGFudFRpY2tldCk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiB0aWNrZXQgPT09ICdudW1iZXInKSByZXR1cm4gJ3ByaW1hcnknO1xuICAgIHN3aXRjaCAodGlja2V0LnN0YXR1cykge1xuICAgICAgY2FzZSAnd2lubmVyJzpcbiAgICAgICAgcmV0dXJuICd3YXJuaW5nJztcbiAgICAgIGNhc2UgJ3Jlc2VydmVkJzpcbiAgICAgICAgcmV0dXJuICd0ZXJ0aWFyeSc7XG4gICAgICBjYXNlICdjYW5jZWxsZWQnOlxuICAgICAgICByZXR1cm4gJ21lZGl1bSc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ3ByaW1hcnknO1xuICAgIH1cbiAgfVxuXG4gIGlzV2lubmVyVGlja2V0KHRpY2tldDogbnVtYmVyIHwgUGFydGljaXBhbnRUaWNrZXQpOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHRpY2tldCA9PT0gJ251bWJlcicpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGlja2V0LnN0YXR1cyA9PT0gJ3dpbm5lcic7XG4gIH1cblxuICBnZXRQYXltZW50U3RhdHVzTGFiZWwoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdGF0dXMgPSB0aGlzLnByb3BzLnBhcnRpY2lwYW50LnBheW1lbnRTdGF0dXM7XG4gICAgaWYgKCFzdGF0dXMpIHJldHVybiAnJztcblxuICAgIC8vIElmIGN1c3RvbSBsYWJlbHMgYXJlIHByb3ZpZGVkLCB1c2UgdGhlbSBmaXJzdFxuICAgIGlmICh0aGlzLnByb3BzLnBheW1lbnRTdGF0dXNMYWJlbHM/LltzdGF0dXNdKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5wYXltZW50U3RhdHVzTGFiZWxzW3N0YXR1c107XG4gICAgfVxuXG4gICAgLy8gVXNlIGkxOG4gZm9yIGRlZmF1bHQgbGFiZWxzXG4gICAgY29uc3QgaTE4bktleXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBwZW5kaW5nOiAncGF5bWVudFBlbmRpbmcnLFxuICAgICAgcHJvY2Vzc2luZzogJ3BheW1lbnRQcm9jZXNzaW5nJyxcbiAgICAgIHBhaWQ6ICdwYXltZW50UGFpZCcsXG4gICAgICByZWZ1bmRlZDogJ3BheW1lbnRSZWZ1bmRlZCcsXG4gICAgICBmYWlsZWQ6ICdwYXltZW50RmFpbGVkJyxcbiAgICB9O1xuXG4gICAgY29uc3Qga2V5ID0gaTE4bktleXNbc3RhdHVzXTtcbiAgICByZXR1cm4ga2V5ID8gdGhpcy5pMThuLnQoa2V5KSA6IHN0YXR1cztcbiAgfVxuXG4gIGdldFBheW1lbnRTdGF0dXNDb2xvcigpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMucHJvcHMucGFydGljaXBhbnQucGF5bWVudFN0YXR1cztcbiAgICBpZiAoIXN0YXR1cykgcmV0dXJuICdtZWRpdW0nO1xuICAgIHJldHVybiBERUZBVUxUX1BBWU1FTlRfU1RBVFVTX0NPTE9SU1tzdGF0dXNdIHx8ICdtZWRpdW0nO1xuICB9XG5cbiAgZ2V0UGF5bWVudFN0YXR1c0ljb24oKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdGF0dXMgPSB0aGlzLnByb3BzLnBhcnRpY2lwYW50LnBheW1lbnRTdGF0dXM7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ3BhaWQnOlxuICAgICAgICByZXR1cm4gJ2NoZWNrbWFyay1jaXJjbGUnO1xuICAgICAgY2FzZSAncGVuZGluZyc6XG4gICAgICBjYXNlICdwcm9jZXNzaW5nJzpcbiAgICAgICAgcmV0dXJuICd0aW1lLW91dGxpbmUnO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgIGNhc2UgJ3JlZnVuZGVkJzpcbiAgICAgICAgcmV0dXJuICdjbG9zZS1jaXJjbGUnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICd0aW1lLW91dGxpbmUnO1xuICAgIH1cbiAgfVxuXG4gIGZvcm1hdEN1cnJlbmN5KGFtb3VudDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBzeW1ib2wgPSB0aGlzLnByb3BzLmN1cnJlbmN5U3ltYm9sIHx8ICckJztcbiAgICByZXR1cm4gYCR7c3ltYm9sfSR7YW1vdW50LnRvTG9jYWxlU3RyaW5nKCdlcy1NWCcpfWA7XG4gIH1cblxuICBmb3JtYXREYXRlKGRhdGU6IERhdGUgfCBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGQgPSB0eXBlb2YgZGF0ZSA9PT0gJ3N0cmluZycgPyBuZXcgRGF0ZShkYXRlKSA6IGRhdGU7XG4gICAgcmV0dXJuIGQudG9Mb2NhbGVEYXRlU3RyaW5nKCdlcy1NWCcsIHtcbiAgICAgIGRheTogJ251bWVyaWMnLFxuICAgICAgbW9udGg6ICdzaG9ydCcsXG4gICAgICB5ZWFyOiAnbnVtZXJpYycsXG4gICAgfSk7XG4gIH1cblxuICB0b2dnbGVTaG93QWxsVGlja2V0cyhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnNob3dBbGxUaWNrZXRzID0gIXRoaXMuc2hvd0FsbFRpY2tldHM7XG4gIH1cblxuICBvbkNhcmRDbGljaygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucHJvcHMuY2xpY2thYmxlKSByZXR1cm47XG4gICAgdGhpcy5jYXJkQ2xpY2suZW1pdCh7XG4gICAgICBwYXJ0aWNpcGFudDogdGhpcy5wcm9wcy5wYXJ0aWNpcGFudCxcbiAgICB9KTtcbiAgfVxuXG4gIG9uQWN0aW9uc0NsaWNrKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIC8vIEluIGEgcmVhbCBpbXBsZW1lbnRhdGlvbiwgdGhpcyB3b3VsZCBvcGVuIGEgcG9wb3ZlciBtZW51XG4gICAgLy8gRm9yIG5vdywgd2UnbGwgZW1pdCB0aGUgZmlyc3QgYWN0aW9uXG4gICAgaWYgKHRoaXMucHJvcHMuYWN0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmFjdGlvbkNsaWNrLmVtaXQoe1xuICAgICAgICBhY3Rpb25JZDogdGhpcy5wcm9wcy5hY3Rpb25zWzBdLmlkLFxuICAgICAgICBwYXJ0aWNpcGFudDogdGhpcy5wcm9wcy5wYXJ0aWNpcGFudCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -44,6 +44,7 @@ export class DocsTocComponent {
44
44
  this.headingElements = [];
45
45
  this.scrollHandler = null;
46
46
  this.rafId = null;
47
+ this.scrollContainer = null;
47
48
  }
48
49
  ngOnInit() {
49
50
  this.updateFlatItems();
@@ -131,8 +132,12 @@ export class DocsTocComponent {
131
132
  this.headingElements = items
132
133
  .map(item => document.getElementById(item.id))
133
134
  .filter((el) => el !== null);
134
- if (this.headingElements.length === 0)
135
+ if (this.headingElements.length === 0) {
136
+ console.warn('[docs-toc] No heading elements found for IDs:', items.map(i => i.id));
135
137
  return;
138
+ }
139
+ // Find the scroll container - check for ion-content first, then use window
140
+ this.scrollContainer = this.findScrollContainer();
136
141
  // Set initial active item
137
142
  this.updateActiveHeading();
138
143
  // Use scroll event with requestAnimationFrame for performance
@@ -145,23 +150,40 @@ export class DocsTocComponent {
145
150
  this.updateActiveHeading();
146
151
  });
147
152
  };
153
+ // Listen on both window and the scroll container for maximum compatibility
148
154
  window.addEventListener('scroll', this.scrollHandler, { passive: true });
155
+ document.addEventListener('scroll', this.scrollHandler, { passive: true, capture: true });
156
+ // Also listen on ion-content if present
157
+ const ionContent = document.querySelector('ion-content');
158
+ if (ionContent) {
159
+ ionContent.addEventListener('ionScroll', this.scrollHandler, { passive: true });
160
+ }
149
161
  });
150
162
  }
163
+ findScrollContainer() {
164
+ // Check for ion-content's scroll element
165
+ const ionContent = document.querySelector('ion-content');
166
+ if (ionContent) {
167
+ // ion-content has a shadow DOM with the actual scrollable element
168
+ const scrollEl = ionContent.shadowRoot?.querySelector('.inner-scroll');
169
+ if (scrollEl)
170
+ return scrollEl;
171
+ }
172
+ return window;
173
+ }
151
174
  updateActiveHeading() {
152
175
  const offsetTop = this.props.offsetTop ?? 100;
153
- const scrollY = window.scrollY;
154
- // Find the heading that is currently at or above the offset point
176
+ // Find the heading closest to or above the trigger point (offset from top of viewport)
177
+ // Using getBoundingClientRect().top which is relative to viewport - works regardless of scroll container
155
178
  let activeHeading = null;
156
179
  for (const heading of this.headingElements) {
157
180
  const rect = heading.getBoundingClientRect();
158
- const headingTop = rect.top + scrollY;
159
- // If heading is at or above the trigger point (scrollY + offset)
160
- if (headingTop <= scrollY + offsetTop + 10) {
181
+ // If heading's top is at or above the trigger point (offset pixels from viewport top)
182
+ if (rect.top <= offsetTop + 10) {
161
183
  activeHeading = heading;
162
184
  }
163
185
  else {
164
- // Headings are in order, so we can stop once we find one below
186
+ // Since headings are in DOM order, stop once we find one below the trigger
165
187
  break;
166
188
  }
167
189
  }
@@ -179,6 +201,11 @@ export class DocsTocComponent {
179
201
  destroyScrollSpy() {
180
202
  if (this.scrollHandler) {
181
203
  window.removeEventListener('scroll', this.scrollHandler);
204
+ document.removeEventListener('scroll', this.scrollHandler, { capture: true });
205
+ const ionContent = document.querySelector('ion-content');
206
+ if (ionContent) {
207
+ ionContent.removeEventListener('ionScroll', this.scrollHandler);
208
+ }
182
209
  this.scrollHandler = null;
183
210
  }
184
211
  if (this.rafId) {
@@ -186,6 +213,7 @@ export class DocsTocComponent {
186
213
  this.rafId = null;
187
214
  }
188
215
  this.headingElements = [];
216
+ this.scrollContainer = null;
189
217
  }
190
218
  scrollToSection(event, id) {
191
219
  event.preventDefault();
@@ -193,11 +221,22 @@ export class DocsTocComponent {
193
221
  if (!element)
194
222
  return;
195
223
  const offsetTop = this.props.offsetTop ?? 100;
196
- const top = element.getBoundingClientRect().top + window.scrollY - offsetTop;
197
- window.scrollTo({
198
- top,
199
- behavior: 'smooth',
200
- });
224
+ // Use scrollIntoView with offset calculation for better cross-container support
225
+ const elementRect = element.getBoundingClientRect();
226
+ const currentScrollY = window.scrollY || document.documentElement.scrollTop;
227
+ const targetY = elementRect.top + currentScrollY - offsetTop;
228
+ // Try ion-content scrollToPoint first (for Ionic apps)
229
+ const ionContent = document.querySelector('ion-content');
230
+ if (ionContent && typeof ionContent.scrollToPoint === 'function') {
231
+ ionContent.scrollToPoint(0, targetY, 300);
232
+ }
233
+ else {
234
+ // Fallback to window scroll
235
+ window.scrollTo({
236
+ top: targetY,
237
+ behavior: 'smooth',
238
+ });
239
+ }
201
240
  // Update active immediately for better UX
202
241
  this.activeId.set(id);
203
242
  // Update URL hash without jumping
@@ -276,4 +315,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
276
315
  }], sectionChange: [{
277
316
  type: Output
278
317
  }] } });
279
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jcy10b2MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9kb2NzLXRvYy9kb2NzLXRvYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBT1osTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDOztBQUd2Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCRztBQXVDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBYTNCLFlBQW9CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBWnpCLFVBQUssR0FBb0IsRUFBRSxDQUFDO1FBRTNCLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUVyRCxpQkFBaUI7UUFDUCxhQUFRLEdBQUcsTUFBTSxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLGNBQVMsR0FBRyxNQUFNLENBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBRXhDLG9CQUFlLEdBQWtCLEVBQUUsQ0FBQztRQUNwQyxrQkFBYSxHQUF3QixJQUFJLENBQUM7UUFDMUMsVUFBSyxHQUFrQixJQUFJLENBQUM7SUFFQyxDQUFDO0lBRXRDLFFBQVE7UUFDTixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELGVBQWU7UUFDYiwrQkFBK0I7UUFDL0IsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDakMsQ0FBQztZQUNELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDNUIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3hELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDMUQsQ0FBQztJQUNILENBQUM7SUFFTyxZQUFZLENBQUMsS0FBb0I7UUFDdkMsTUFBTSxNQUFNLEdBQWtCLEVBQUUsQ0FBQztRQUNqQyxNQUFNLE9BQU8sR0FBRyxDQUFDLFFBQXVCLEVBQUUsRUFBRTtZQUMxQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7b0JBQzFCLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3pCLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUNGLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNmLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSx1QkFBdUIsQ0FBQztRQUN6RSxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRW5ELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUNBQW1DLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDNUQsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsRCxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFN0QsTUFBTSxLQUFLLEdBQWtCLEVBQUUsQ0FBQztRQUNoQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBZ0IsRUFBRSxFQUFFO1lBQ3BDLE1BQU0sRUFBRSxHQUFHLE9BQXNCLENBQUM7WUFDbEMsNkJBQTZCO1lBQzdCLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ1gsRUFBRSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLENBQUM7WUFDaEQsQ0FBQztZQUVELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzFDLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQ1QsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO2dCQUNULEtBQUssRUFBRSxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQ25DLEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLDZCQUE2QjthQUNoRCxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLHFDQUFxQztRQUNyQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVPLFVBQVUsQ0FBQyxJQUFZO1FBQzdCLE9BQU8sSUFBSTthQUNSLFdBQVcsRUFBRTthQUNiLElBQUksRUFBRTthQUNOLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO2FBQ3hCLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO2FBQ3BCLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFeEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQy9CLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTztRQUUvQiwyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLO2FBQ3pCLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQzdDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBcUIsRUFBRSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUVsRCxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBRTlDLDBCQUEwQjtRQUMxQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUUzQiw4REFBOEQ7UUFDOUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDakMsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLEVBQUU7Z0JBQ3hCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNmLG9CQUFvQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkMsQ0FBQztnQkFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLHFCQUFxQixDQUFDLEdBQUcsRUFBRTtvQkFDdEMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQzdCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDO1lBRUYsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDM0UsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQztRQUM5QyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBRS9CLGtFQUFrRTtRQUNsRSxJQUFJLGFBQWEsR0FBdUIsSUFBSSxDQUFDO1FBRTdDLEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzNDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQzdDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDO1lBRXRDLGlFQUFpRTtZQUNqRSxJQUFJLFVBQVUsSUFBSSxPQUFPLEdBQUcsU0FBUyxHQUFHLEVBQUUsRUFBRSxDQUFDO2dCQUMzQyxhQUFhLEdBQUcsT0FBTyxDQUFDO1lBQzFCLENBQUM7aUJBQU0sQ0FBQztnQkFDTiwrREFBK0Q7Z0JBQy9ELE1BQU07WUFDUixDQUFDO1FBQ0gsQ0FBQztRQUVELDhEQUE4RDtRQUM5RCxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3RELGFBQWEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFFRCxJQUFJLGFBQWEsSUFBSSxhQUFhLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQzFELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsYUFBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNyQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDN0MsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixNQUFNLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUM1QixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDZixvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDcEIsQ0FBQztRQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBWSxFQUFFLEVBQVU7UUFDdEMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXZCLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBRXJCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQztRQUU5QyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUM7UUFFN0UsTUFBTSxDQUFDLFFBQVEsQ0FBQztZQUNkLEdBQUc7WUFDSCxRQUFRLEVBQUUsUUFBUTtTQUNuQixDQUFDLENBQUM7UUFFSCwwQ0FBMEM7UUFDMUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFdEIsa0NBQWtDO1FBQ2xDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDeEMsQ0FBQzsrR0F6TVUsZ0JBQWdCO21HQUFoQixnQkFBZ0Isc0tBbENqQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCVCxpZ0RBaENTLFlBQVk7OzRGQW1DWCxnQkFBZ0I7a0JBdEM1QixTQUFTOytCQUNFLGNBQWMsY0FDWixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsWUFDYjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCVDsyRUFJUSxLQUFLO3NCQUFiLEtBQUs7Z0JBRUksYUFBYTtzQkFBdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgTmdab25lLFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9jc1RvY01ldGFkYXRhLCBEb2NzVG9jSXRlbSB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIHZhbC1kb2NzLXRvY1xuICpcbiAqIEEgdGFibGUgb2YgY29udGVudHMgY29tcG9uZW50IHdpdGggc2Nyb2xsIHNweSBmdW5jdGlvbmFsaXR5LlxuICogQXV0b21hdGljYWxseSBoaWdobGlnaHRzIHRoZSBjdXJyZW50IHNlY3Rpb24gYmFzZWQgb24gc2Nyb2xsIHBvc2l0aW9uLlxuICpcbiAqIEBleGFtcGxlIE1hbnVhbCBpdGVtc1xuICogYGBgaHRtbFxuICogPHZhbC1kb2NzLXRvY1xuICogICBbcHJvcHNdPVwie1xuICogICAgIHRpdGxlOiAnT24gdGhpcyBwYWdlJyxcbiAqICAgICBpdGVtczogW1xuICogICAgICAgeyBpZDogJ292ZXJ2aWV3JywgbGFiZWw6ICdPdmVydmlldycsIGxldmVsOiAxIH0sXG4gKiAgICAgICB7IGlkOiAnaW5zdGFsbGF0aW9uJywgbGFiZWw6ICdJbnN0YWxsYXRpb24nLCBsZXZlbDogMSB9LFxuICogICAgICAgeyBpZDogJ25wbScsIGxhYmVsOiAnVXNpbmcgbnBtJywgbGV2ZWw6IDIgfSxcbiAqICAgICAgIHsgaWQ6ICd5YXJuJywgbGFiZWw6ICdVc2luZyB5YXJuJywgbGV2ZWw6IDIgfVxuICogICAgIF1cbiAqICAgfVwiXG4gKiA+PC92YWwtZG9jcy10b2M+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBBdXRvLWdlbmVyYXRlZCBmcm9tIGhlYWRpbmdzXG4gKiBgYGBodG1sXG4gKiA8dmFsLWRvY3MtdG9jXG4gKiAgIFtwcm9wc109XCJ7XG4gKiAgICAgYXV0b0dlbmVyYXRlOiB0cnVlLFxuICogICAgIGNvbnRhaW5lclNlbGVjdG9yOiAnLmFydGljbGUtY29udGVudCcsXG4gKiAgICAgaGVhZGluZ0xldmVsczogWzIsIDNdXG4gKiAgIH1cIlxuICogPjwvdmFsLWRvY3MtdG9jPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1kb2NzLXRvYycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxuYXZcbiAgICAgIGNsYXNzPVwiZG9jcy10b2NcIlxuICAgICAgW2NsYXNzXT1cInByb3BzLmNzc0NsYXNzXCJcbiAgICAgIHJvbGU9XCJuYXZpZ2F0aW9uXCJcbiAgICAgIGFyaWEtbGFiZWw9XCJUYWJsZSBvZiBjb250ZW50c1wiXG4gICAgPlxuICAgICAgQGlmICghcHJvcHMuaGlkZVRpdGxlKSB7XG4gICAgICAgIDxoNCBjbGFzcz1cImRvY3MtdG9jX190aXRsZVwiPnt7IHByb3BzLnRpdGxlIHx8ICdDb250ZW50cycgfX08L2g0PlxuICAgICAgfVxuXG4gICAgICA8dWwgY2xhc3M9XCJkb2NzLXRvY19fbGlzdFwiPlxuICAgICAgICBAZm9yIChpdGVtIG9mIGZsYXRJdGVtcygpOyB0cmFjayBpdGVtLmlkKSB7XG4gICAgICAgICAgPGxpXG4gICAgICAgICAgICBjbGFzcz1cImRvY3MtdG9jX19pdGVtXCJcbiAgICAgICAgICAgIFtjbGFzcy5kb2NzLXRvY19faXRlbS0tbGV2ZWwtMV09XCJpdGVtLmxldmVsID09PSAxXCJcbiAgICAgICAgICAgIFtjbGFzcy5kb2NzLXRvY19faXRlbS0tbGV2ZWwtMl09XCJpdGVtLmxldmVsID09PSAyXCJcbiAgICAgICAgICAgIFtjbGFzcy5kb2NzLXRvY19faXRlbS0tbGV2ZWwtM109XCJpdGVtLmxldmVsID09PSAzXCJcbiAgICAgICAgICAgIFtjbGFzcy5kb2NzLXRvY19faXRlbS0tYWN0aXZlXT1cImFjdGl2ZUlkKCkgPT09IGl0ZW0uaWRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgIGNsYXNzPVwiZG9jcy10b2NfX2xpbmtcIlxuICAgICAgICAgICAgICBbaHJlZl09XCInIycgKyBpdGVtLmlkXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNjcm9sbFRvU2VjdGlvbigkZXZlbnQsIGl0ZW0uaWQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgIDwvbGk+XG4gICAgICAgIH1cbiAgICAgIDwvdWw+XG4gICAgPC9uYXY+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL2RvY3MtdG9jLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIERvY3NUb2NDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KCkgcHJvcHM6IERvY3NUb2NNZXRhZGF0YSA9IHt9O1xuXG4gIEBPdXRwdXQoKSBzZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgLy8gUmVhY3RpdmUgc3RhdGVcbiAgcHJvdGVjdGVkIGFjdGl2ZUlkID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBwcm90ZWN0ZWQgZmxhdEl0ZW1zID0gc2lnbmFsPERvY3NUb2NJdGVtW10+KFtdKTtcblxuICBwcml2YXRlIGhlYWRpbmdFbGVtZW50czogSFRNTEVsZW1lbnRbXSA9IFtdO1xuICBwcml2YXRlIHNjcm9sbEhhbmRsZXI6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHJhZklkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5nWm9uZTogTmdab25lKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlRmxhdEl0ZW1zKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgLy8gRGVsYXkgdG8gZW5zdXJlIERPTSBpcyByZWFkeVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMucHJvcHMuYXV0b0dlbmVyYXRlKSB7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVUb2NGcm9tSGVhZGluZ3MoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0dXBTY3JvbGxTcHkoKTtcbiAgICB9LCAxMDApO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydwcm9wcyddKSB7XG4gICAgICB0aGlzLnVwZGF0ZUZsYXRJdGVtcygpO1xuICAgICAgaWYgKHRoaXMucHJvcHMuYXV0b0dlbmVyYXRlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5nZW5lcmF0ZVRvY0Zyb21IZWFkaW5ncygpLCAxMDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveVNjcm9sbFNweSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGbGF0SXRlbXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvcHMuaXRlbXMpIHtcbiAgICAgIHRoaXMuZmxhdEl0ZW1zLnNldCh0aGlzLmZsYXR0ZW5JdGVtcyh0aGlzLnByb3BzLml0ZW1zKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmbGF0dGVuSXRlbXMoaXRlbXM6IERvY3NUb2NJdGVtW10pOiBEb2NzVG9jSXRlbVtdIHtcbiAgICBjb25zdCByZXN1bHQ6IERvY3NUb2NJdGVtW10gPSBbXTtcbiAgICBjb25zdCBmbGF0dGVuID0gKGl0ZW1MaXN0OiBEb2NzVG9jSXRlbVtdKSA9PiB7XG4gICAgICBpdGVtTGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICByZXN1bHQucHVzaChpdGVtKTtcbiAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgIGZsYXR0ZW4oaXRlbS5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgZmxhdHRlbihpdGVtcyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVUb2NGcm9tSGVhZGluZ3MoKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSB0aGlzLnByb3BzLmNvbnRhaW5lclNlbGVjdG9yIHx8ICcuZG9jcy1sYXlvdXRfX2NvbnRlbnQnO1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuXG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIGNvbnNvbGUud2FybihgW2RvY3MtdG9jXSBDb250YWluZXIgbm90IGZvdW5kOiAke3NlbGVjdG9yfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxldmVscyA9IHRoaXMucHJvcHMuaGVhZGluZ0xldmVscyB8fCBbMiwgM107XG4gICAgY29uc3QgaGVhZGluZ1NlbGVjdG9yID0gbGV2ZWxzLm1hcChsID0+IGBoJHtsfWApLmpvaW4oJywgJyk7XG4gICAgY29uc3QgaGVhZGluZ3MgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbChoZWFkaW5nU2VsZWN0b3IpO1xuXG4gICAgY29uc3QgaXRlbXM6IERvY3NUb2NJdGVtW10gPSBbXTtcbiAgICBoZWFkaW5ncy5mb3JFYWNoKChoZWFkaW5nOiBFbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBlbCA9IGhlYWRpbmcgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAvLyBHZW5lcmF0ZSBJRCBpZiBub3QgcHJlc2VudFxuICAgICAgaWYgKCFlbC5pZCkge1xuICAgICAgICBlbC5pZCA9IHRoaXMuZ2VuZXJhdGVJZChlbC50ZXh0Q29udGVudCB8fCAnJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxldmVsID0gcGFyc2VJbnQoZWwudGFnTmFtZVsxXSwgMTApO1xuICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgIGlkOiBlbC5pZCxcbiAgICAgICAgbGFiZWw6IGVsLnRleHRDb250ZW50Py50cmltKCkgfHwgJycsXG4gICAgICAgIGxldmVsOiBsZXZlbCAtIDEsIC8vIGgyID0gbGV2ZWwgMSwgaDMgPSBsZXZlbCAyXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuZmxhdEl0ZW1zLnNldChpdGVtcyk7XG4gICAgLy8gUmUtc2V0dXAgc2Nyb2xsIHNweSB3aXRoIG5ldyBpdGVtc1xuICAgIHRoaXMuc2V0dXBTY3JvbGxTcHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVJZCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0ZXh0XG4gICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgLnRyaW0oKVxuICAgICAgLnJlcGxhY2UoL1teXFx3XFxzLV0vZywgJycpXG4gICAgICAucmVwbGFjZSgvXFxzKy9nLCAnLScpXG4gICAgICAuc3Vic3RyaW5nKDAsIDUwKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBTY3JvbGxTcHkoKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95U2Nyb2xsU3B5KCk7XG5cbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZmxhdEl0ZW1zKCk7XG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgLy8gQ29sbGVjdCBoZWFkaW5nIGVsZW1lbnRzXG4gICAgdGhpcy5oZWFkaW5nRWxlbWVudHMgPSBpdGVtc1xuICAgICAgLm1hcChpdGVtID0+IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGl0ZW0uaWQpKVxuICAgICAgLmZpbHRlcigoZWwpOiBlbCBpcyBIVE1MRWxlbWVudCA9PiBlbCAhPT0gbnVsbCk7XG5cbiAgICBpZiAodGhpcy5oZWFkaW5nRWxlbWVudHMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICAvLyBTZXQgaW5pdGlhbCBhY3RpdmUgaXRlbVxuICAgIHRoaXMudXBkYXRlQWN0aXZlSGVhZGluZygpO1xuXG4gICAgLy8gVXNlIHNjcm9sbCBldmVudCB3aXRoIHJlcXVlc3RBbmltYXRpb25GcmFtZSBmb3IgcGVyZm9ybWFuY2VcbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLnNjcm9sbEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnJhZklkKSB7XG4gICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5yYWZJZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVIZWFkaW5nKCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuc2Nyb2xsSGFuZGxlciwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVBY3RpdmVIZWFkaW5nKCk6IHZvaWQge1xuICAgIGNvbnN0IG9mZnNldFRvcCA9IHRoaXMucHJvcHMub2Zmc2V0VG9wID8/IDEwMDtcbiAgICBjb25zdCBzY3JvbGxZID0gd2luZG93LnNjcm9sbFk7XG5cbiAgICAvLyBGaW5kIHRoZSBoZWFkaW5nIHRoYXQgaXMgY3VycmVudGx5IGF0IG9yIGFib3ZlIHRoZSBvZmZzZXQgcG9pbnRcbiAgICBsZXQgYWN0aXZlSGVhZGluZzogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAgIGZvciAoY29uc3QgaGVhZGluZyBvZiB0aGlzLmhlYWRpbmdFbGVtZW50cykge1xuICAgICAgY29uc3QgcmVjdCA9IGhlYWRpbmcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBoZWFkaW5nVG9wID0gcmVjdC50b3AgKyBzY3JvbGxZO1xuXG4gICAgICAvLyBJZiBoZWFkaW5nIGlzIGF0IG9yIGFib3ZlIHRoZSB0cmlnZ2VyIHBvaW50IChzY3JvbGxZICsgb2Zmc2V0KVxuICAgICAgaWYgKGhlYWRpbmdUb3AgPD0gc2Nyb2xsWSArIG9mZnNldFRvcCArIDEwKSB7XG4gICAgICAgIGFjdGl2ZUhlYWRpbmcgPSBoZWFkaW5nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSGVhZGluZ3MgYXJlIGluIG9yZGVyLCBzbyB3ZSBjYW4gc3RvcCBvbmNlIHdlIGZpbmQgb25lIGJlbG93XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIG5vIGhlYWRpbmcgaXMgYWJvdmUgdGhlIHRyaWdnZXIgcG9pbnQsIHVzZSB0aGUgZmlyc3Qgb25lXG4gICAgaWYgKCFhY3RpdmVIZWFkaW5nICYmIHRoaXMuaGVhZGluZ0VsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGFjdGl2ZUhlYWRpbmcgPSB0aGlzLmhlYWRpbmdFbGVtZW50c1swXTtcbiAgICB9XG5cbiAgICBpZiAoYWN0aXZlSGVhZGluZyAmJiBhY3RpdmVIZWFkaW5nLmlkICE9PSB0aGlzLmFjdGl2ZUlkKCkpIHtcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgIHRoaXMuYWN0aXZlSWQuc2V0KGFjdGl2ZUhlYWRpbmchLmlkKTtcbiAgICAgICAgdGhpcy5zZWN0aW9uQ2hhbmdlLmVtaXQoYWN0aXZlSGVhZGluZyEuaWQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkZXN0cm95U2Nyb2xsU3B5KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNjcm9sbEhhbmRsZXIpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnNjcm9sbEhhbmRsZXIpO1xuICAgICAgdGhpcy5zY3JvbGxIYW5kbGVyID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMucmFmSWQpIHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMucmFmSWQpO1xuICAgICAgdGhpcy5yYWZJZCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuaGVhZGluZ0VsZW1lbnRzID0gW107XG4gIH1cblxuICBzY3JvbGxUb1NlY3Rpb24oZXZlbnQ6IEV2ZW50LCBpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgaWYgKCFlbGVtZW50KSByZXR1cm47XG5cbiAgICBjb25zdCBvZmZzZXRUb3AgPSB0aGlzLnByb3BzLm9mZnNldFRvcCA/PyAxMDA7XG5cbiAgICBjb25zdCB0b3AgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIHdpbmRvdy5zY3JvbGxZIC0gb2Zmc2V0VG9wO1xuXG4gICAgd2luZG93LnNjcm9sbFRvKHtcbiAgICAgIHRvcCxcbiAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICB9KTtcblxuICAgIC8vIFVwZGF0ZSBhY3RpdmUgaW1tZWRpYXRlbHkgZm9yIGJldHRlciBVWFxuICAgIHRoaXMuYWN0aXZlSWQuc2V0KGlkKTtcblxuICAgIC8vIFVwZGF0ZSBVUkwgaGFzaCB3aXRob3V0IGp1bXBpbmdcbiAgICBoaXN0b3J5LnB1c2hTdGF0ZShudWxsLCAnJywgYCMke2lkfWApO1xuICB9XG59XG4iXX0=
318
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jcy10b2MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9kb2NzLXRvYy9kb2NzLXRvYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBT1osTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDOztBQUd2Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCRztBQXVDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBYTNCLFlBQW9CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBWnpCLFVBQUssR0FBb0IsRUFBRSxDQUFDO1FBRTNCLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUVyRCxpQkFBaUI7UUFDUCxhQUFRLEdBQUcsTUFBTSxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLGNBQVMsR0FBRyxNQUFNLENBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBRXhDLG9CQUFlLEdBQWtCLEVBQUUsQ0FBQztRQUNwQyxrQkFBYSxHQUF3QixJQUFJLENBQUM7UUFDMUMsVUFBSyxHQUFrQixJQUFJLENBQUM7UUE4RjVCLG9CQUFlLEdBQWdDLElBQUksQ0FBQztJQTVGdkIsQ0FBQztJQUV0QyxRQUFRO1FBQ04sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxlQUFlO1FBQ2IsK0JBQStCO1FBQy9CLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ2pDLENBQUM7WUFDRCxJQUFJLENBQUMsY0FB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QUNQLENBQUMsWUFBWSxDQUFDLFlBQ2I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQlQ7MkVBSVEsS0FBSztzQkFBYixLQUFLO2dCQUVJLGFBQWE7c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIE9uSW5pdCxcbiAgT25EZXN0cm95LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIEFmdGVyVmlld0luaXQsXG4gIE5nWm9uZSxcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvY3NUb2NNZXRhZGF0YSwgRG9jc1RvY0l0ZW0gfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiB2YWwtZG9jcy10b2NcbiAqXG4gKiBBIHRhYmxlIG9mIGNvbnRlbnRzIGNvbXBvbmVudCB3aXRoIHNjcm9sbCBzcHkgZnVuY3Rpb25hbGl0eS5cbiAqIEF1dG9tYXRpY2FsbHkgaGlnaGxpZ2h0cyB0aGUgY3VycmVudCBzZWN0aW9uIGJhc2VkIG9uIHNjcm9sbCBwb3NpdGlvbi5cbiAqXG4gKiBAZXhhbXBsZSBNYW51YWwgaXRlbXNcbiAqIGBgYGh0bWxcbiAqIDx2YWwtZG9jcy10b2NcbiAqICAgW3Byb3BzXT1cIntcbiAqICAgICB0aXRsZTogJ09uIHRoaXMgcGFnZScsXG4gKiAgICAgaXRlbXM6IFtcbiAqICAgICAgIHsgaWQ6ICdvdmVydmlldycsIGxhYmVsOiAnT3ZlcnZpZXcnLCBsZXZlbDogMSB9LFxuICogICAgICAgeyBpZDogJ2luc3RhbGxhdGlvbicsIGxhYmVsOiAnSW5zdGFsbGF0aW9uJywgbGV2ZWw6IDEgfSxcbiAqICAgICAgIHsgaWQ6ICducG0nLCBsYWJlbDogJ1VzaW5nIG5wbScsIGxldmVsOiAyIH0sXG4gKiAgICAgICB7IGlkOiAneWFybicsIGxhYmVsOiAnVXNpbmcgeWFybicsIGxldmVsOiAyIH1cbiAqICAgICBdXG4gKiAgIH1cIlxuICogPjwvdmFsLWRvY3MtdG9jPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgQXV0by1nZW5lcmF0ZWQgZnJvbSBoZWFkaW5nc1xuICogYGBgaHRtbFxuICogPHZhbC1kb2NzLXRvY1xuICogICBbcHJvcHNdPVwie1xuICogICAgIGF1dG9HZW5lcmF0ZTogdHJ1ZSxcbiAqICAgICBjb250YWluZXJTZWxlY3RvcjogJy5hcnRpY2xlLWNvbnRlbnQnLFxuICogICAgIGhlYWRpbmdMZXZlbHM6IFsyLCAzXVxuICogICB9XCJcbiAqID48L3ZhbC1kb2NzLXRvYz5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtZG9jcy10b2MnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmF2XG4gICAgICBjbGFzcz1cImRvY3MtdG9jXCJcbiAgICAgIFtjbGFzc109XCJwcm9wcy5jc3NDbGFzc1wiXG4gICAgICByb2xlPVwibmF2aWdhdGlvblwiXG4gICAgICBhcmlhLWxhYmVsPVwiVGFibGUgb2YgY29udGVudHNcIlxuICAgID5cbiAgICAgIEBpZiAoIXByb3BzLmhpZGVUaXRsZSkge1xuICAgICAgICA8aDQgY2xhc3M9XCJkb2NzLXRvY19fdGl0bGVcIj57eyBwcm9wcy50aXRsZSB8fCAnQ29udGVudHMnIH19PC9oND5cbiAgICAgIH1cblxuICAgICAgPHVsIGNsYXNzPVwiZG9jcy10b2NfX2xpc3RcIj5cbiAgICAgICAgQGZvciAoaXRlbSBvZiBmbGF0SXRlbXMoKTsgdHJhY2sgaXRlbS5pZCkge1xuICAgICAgICAgIDxsaVxuICAgICAgICAgICAgY2xhc3M9XCJkb2NzLXRvY19faXRlbVwiXG4gICAgICAgICAgICBbY2xhc3MuZG9jcy10b2NfX2l0ZW0tLWxldmVsLTFdPVwiaXRlbS5sZXZlbCA9PT0gMVwiXG4gICAgICAgICAgICBbY2xhc3MuZG9jcy10b2NfX2l0ZW0tLWxldmVsLTJdPVwiaXRlbS5sZXZlbCA9PT0gMlwiXG4gICAgICAgICAgICBbY2xhc3MuZG9jcy10b2NfX2l0ZW0tLWxldmVsLTNdPVwiaXRlbS5sZXZlbCA9PT0gM1wiXG4gICAgICAgICAgICBbY2xhc3MuZG9jcy10b2NfX2l0ZW0tLWFjdGl2ZV09XCJhY3RpdmVJZCgpID09PSBpdGVtLmlkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICBjbGFzcz1cImRvY3MtdG9jX19saW5rXCJcbiAgICAgICAgICAgICAgW2hyZWZdPVwiJyMnICsgaXRlbS5pZFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzY3JvbGxUb1NlY3Rpb24oJGV2ZW50LCBpdGVtLmlkKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8L2xpPlxuICAgICAgICB9XG4gICAgICA8L3VsPlxuICAgIDwvbmF2PlxuICBgLFxuICBzdHlsZVVybHM6IFsnLi9kb2NzLXRvYy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBEb2NzVG9jQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCgpIHByb3BzOiBEb2NzVG9jTWV0YWRhdGEgPSB7fTtcblxuICBAT3V0cHV0KCkgc2VjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIC8vIFJlYWN0aXZlIHN0YXRlXG4gIHByb3RlY3RlZCBhY3RpdmVJZCA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgcHJvdGVjdGVkIGZsYXRJdGVtcyA9IHNpZ25hbDxEb2NzVG9jSXRlbVtdPihbXSk7XG5cbiAgcHJpdmF0ZSBoZWFkaW5nRWxlbWVudHM6IEhUTUxFbGVtZW50W10gPSBbXTtcbiAgcHJpdmF0ZSBzY3JvbGxIYW5kbGVyOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByYWZJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUZsYXRJdGVtcygpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIC8vIERlbGF5IHRvIGVuc3VyZSBET00gaXMgcmVhZHlcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnByb3BzLmF1dG9HZW5lcmF0ZSkge1xuICAgICAgICB0aGlzLmdlbmVyYXRlVG9jRnJvbUhlYWRpbmdzKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNldHVwU2Nyb2xsU3B5KCk7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1sncHJvcHMnXSkge1xuICAgICAgdGhpcy51cGRhdGVGbGF0SXRlbXMoKTtcbiAgICAgIGlmICh0aGlzLnByb3BzLmF1dG9HZW5lcmF0ZSkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZ2VuZXJhdGVUb2NGcm9tSGVhZGluZ3MoKSwgMTAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3lTY3JvbGxTcHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRmxhdEl0ZW1zKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnByb3BzLml0ZW1zKSB7XG4gICAgICB0aGlzLmZsYXRJdGVtcy5zZXQodGhpcy5mbGF0dGVuSXRlbXModGhpcy5wcm9wcy5pdGVtcykpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmxhdHRlbkl0ZW1zKGl0ZW1zOiBEb2NzVG9jSXRlbVtdKTogRG9jc1RvY0l0ZW1bXSB7XG4gICAgY29uc3QgcmVzdWx0OiBEb2NzVG9jSXRlbVtdID0gW107XG4gICAgY29uc3QgZmxhdHRlbiA9IChpdGVtTGlzdDogRG9jc1RvY0l0ZW1bXSkgPT4ge1xuICAgICAgaXRlbUxpc3QuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgICAgIGlmIChpdGVtLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICBmbGF0dGVuKGl0ZW0uY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGZsYXR0ZW4oaXRlbXMpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlVG9jRnJvbUhlYWRpbmdzKCk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdG9yID0gdGhpcy5wcm9wcy5jb250YWluZXJTZWxlY3RvciB8fCAnLmRvY3MtbGF5b3V0X19jb250ZW50JztcbiAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcblxuICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFtkb2NzLXRvY10gQ29udGFpbmVyIG5vdCBmb3VuZDogJHtzZWxlY3Rvcn1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsZXZlbHMgPSB0aGlzLnByb3BzLmhlYWRpbmdMZXZlbHMgfHwgWzIsIDNdO1xuICAgIGNvbnN0IGhlYWRpbmdTZWxlY3RvciA9IGxldmVscy5tYXAobCA9PiBgaCR7bH1gKS5qb2luKCcsICcpO1xuICAgIGNvbnN0IGhlYWRpbmdzID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoaGVhZGluZ1NlbGVjdG9yKTtcblxuICAgIGNvbnN0IGl0ZW1zOiBEb2NzVG9jSXRlbVtdID0gW107XG4gICAgaGVhZGluZ3MuZm9yRWFjaCgoaGVhZGluZzogRWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgZWwgPSBoZWFkaW5nIGFzIEhUTUxFbGVtZW50O1xuICAgICAgLy8gR2VuZXJhdGUgSUQgaWYgbm90IHByZXNlbnRcbiAgICAgIGlmICghZWwuaWQpIHtcbiAgICAgICAgZWwuaWQgPSB0aGlzLmdlbmVyYXRlSWQoZWwudGV4dENvbnRlbnQgfHwgJycpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsZXZlbCA9IHBhcnNlSW50KGVsLnRhZ05hbWVbMV0sIDEwKTtcbiAgICAgIGl0ZW1zLnB1c2goe1xuICAgICAgICBpZDogZWwuaWQsXG4gICAgICAgIGxhYmVsOiBlbC50ZXh0Q29udGVudD8udHJpbSgpIHx8ICcnLFxuICAgICAgICBsZXZlbDogbGV2ZWwgLSAxLCAvLyBoMiA9IGxldmVsIDEsIGgzID0gbGV2ZWwgMlxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmZsYXRJdGVtcy5zZXQoaXRlbXMpO1xuICAgIC8vIFJlLXNldHVwIHNjcm9sbCBzcHkgd2l0aCBuZXcgaXRlbXNcbiAgICB0aGlzLnNldHVwU2Nyb2xsU3B5KCk7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlSWQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGV4dFxuICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgIC50cmltKClcbiAgICAgIC5yZXBsYWNlKC9bXlxcd1xccy1dL2csICcnKVxuICAgICAgLnJlcGxhY2UoL1xccysvZywgJy0nKVxuICAgICAgLnN1YnN0cmluZygwLCA1MCk7XG4gIH1cblxuICBwcml2YXRlIHNjcm9sbENvbnRhaW5lcjogSFRNTEVsZW1lbnQgfCBXaW5kb3cgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIHNldHVwU2Nyb2xsU3B5KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveVNjcm9sbFNweSgpO1xuXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmZsYXRJdGVtcygpO1xuICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIC8vIENvbGxlY3QgaGVhZGluZyBlbGVtZW50c1xuICAgIHRoaXMuaGVhZGluZ0VsZW1lbnRzID0gaXRlbXNcbiAgICAgIC5tYXAoaXRlbSA9PiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpdGVtLmlkKSlcbiAgICAgIC5maWx0ZXIoKGVsKTogZWwgaXMgSFRNTEVsZW1lbnQgPT4gZWwgIT09IG51bGwpO1xuXG4gICAgaWYgKHRoaXMuaGVhZGluZ0VsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc29sZS53YXJuKCdbZG9jcy10b2NdIE5vIGhlYWRpbmcgZWxlbWVudHMgZm91bmQgZm9yIElEczonLCBpdGVtcy5tYXAoaSA9PiBpLmlkKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRmluZCB0aGUgc2Nyb2xsIGNvbnRhaW5lciAtIGNoZWNrIGZvciBpb24tY29udGVudCBmaXJzdCwgdGhlbiB1c2Ugd2luZG93XG4gICAgdGhpcy5zY3JvbGxDb250YWluZXIgPSB0aGlzLmZpbmRTY3JvbGxDb250YWluZXIoKTtcblxuICAgIC8vIFNldCBpbml0aWFsIGFjdGl2ZSBpdGVtXG4gICAgdGhpcy51cGRhdGVBY3RpdmVIZWFkaW5nKCk7XG5cbiAgICAvLyBVc2Ugc2Nyb2xsIGV2ZW50IHdpdGggcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGZvciBwZXJmb3JtYW5jZVxuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMuc2Nyb2xsSGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucmFmSWQpIHtcbiAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnJhZklkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUFjdGl2ZUhlYWRpbmcoKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICAvLyBMaXN0ZW4gb24gYm90aCB3aW5kb3cgYW5kIHRoZSBzY3JvbGwgY29udGFpbmVyIGZvciBtYXhpbXVtIGNvbXBhdGliaWxpdHlcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnNjcm9sbEhhbmRsZXIsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuc2Nyb2xsSGFuZGxlciwgeyBwYXNzaXZlOiB0cnVlLCBjYXB0dXJlOiB0cnVlIH0pO1xuXG4gICAgICAvLyBBbHNvIGxpc3RlbiBvbiBpb24tY29udGVudCBpZiBwcmVzZW50XG4gICAgICBjb25zdCBpb25Db250ZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW9uLWNvbnRlbnQnKTtcbiAgICAgIGlmIChpb25Db250ZW50KSB7XG4gICAgICAgIGlvbkNvbnRlbnQuYWRkRXZlbnRMaXN0ZW5lcignaW9uU2Nyb2xsJywgdGhpcy5zY3JvbGxIYW5kbGVyIGFzIEV2ZW50TGlzdGVuZXIsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZFNjcm9sbENvbnRhaW5lcigpOiBIVE1MRWxlbWVudCB8IFdpbmRvdyB7XG4gICAgLy8gQ2hlY2sgZm9yIGlvbi1jb250ZW50J3Mgc2Nyb2xsIGVsZW1lbnRcbiAgICBjb25zdCBpb25Db250ZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW9uLWNvbnRlbnQnKTtcbiAgICBpZiAoaW9uQ29udGVudCkge1xuICAgICAgLy8gaW9uLWNvbnRlbnQgaGFzIGEgc2hhZG93IERPTSB3aXRoIHRoZSBhY3R1YWwgc2Nyb2xsYWJsZSBlbGVtZW50XG4gICAgICBjb25zdCBzY3JvbGxFbCA9IChpb25Db250ZW50IGFzIGFueSkuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcignLmlubmVyLXNjcm9sbCcpO1xuICAgICAgaWYgKHNjcm9sbEVsKSByZXR1cm4gc2Nyb2xsRWw7XG4gICAgfVxuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUFjdGl2ZUhlYWRpbmcoKTogdm9pZCB7XG4gICAgY29uc3Qgb2Zmc2V0VG9wID0gdGhpcy5wcm9wcy5vZmZzZXRUb3AgPz8gMTAwO1xuXG4gICAgLy8gRmluZCB0aGUgaGVhZGluZyBjbG9zZXN0IHRvIG9yIGFib3ZlIHRoZSB0cmlnZ2VyIHBvaW50IChvZmZzZXQgZnJvbSB0b3Agb2Ygdmlld3BvcnQpXG4gICAgLy8gVXNpbmcgZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIHdoaWNoIGlzIHJlbGF0aXZlIHRvIHZpZXdwb3J0IC0gd29ya3MgcmVnYXJkbGVzcyBvZiBzY3JvbGwgY29udGFpbmVyXG4gICAgbGV0IGFjdGl2ZUhlYWRpbmc6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgICBmb3IgKGNvbnN0IGhlYWRpbmcgb2YgdGhpcy5oZWFkaW5nRWxlbWVudHMpIHtcbiAgICAgIGNvbnN0IHJlY3QgPSBoZWFkaW5nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAvLyBJZiBoZWFkaW5nJ3MgdG9wIGlzIGF0IG9yIGFib3ZlIHRoZSB0cmlnZ2VyIHBvaW50IChvZmZzZXQgcGl4ZWxzIGZyb20gdmlld3BvcnQgdG9wKVxuICAgICAgaWYgKHJlY3QudG9wIDw9IG9mZnNldFRvcCArIDEwKSB7XG4gICAgICAgIGFjdGl2ZUhlYWRpbmcgPSBoZWFkaW5nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU2luY2UgaGVhZGluZ3MgYXJlIGluIERPTSBvcmRlciwgc3RvcCBvbmNlIHdlIGZpbmQgb25lIGJlbG93IHRoZSB0cmlnZ2VyXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIG5vIGhlYWRpbmcgaXMgYWJvdmUgdGhlIHRyaWdnZXIgcG9pbnQsIHVzZSB0aGUgZmlyc3Qgb25lXG4gICAgaWYgKCFhY3RpdmVIZWFkaW5nICYmIHRoaXMuaGVhZGluZ0VsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGFjdGl2ZUhlYWRpbmcgPSB0aGlzLmhlYWRpbmdFbGVtZW50c1swXTtcbiAgICB9XG5cbiAgICBpZiAoYWN0aXZlSGVhZGluZyAmJiBhY3RpdmVIZWFkaW5nLmlkICE9PSB0aGlzLmFjdGl2ZUlkKCkpIHtcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgIHRoaXMuYWN0aXZlSWQuc2V0KGFjdGl2ZUhlYWRpbmchLmlkKTtcbiAgICAgICAgdGhpcy5zZWN0aW9uQ2hhbmdlLmVtaXQoYWN0aXZlSGVhZGluZyEuaWQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkZXN0cm95U2Nyb2xsU3B5KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNjcm9sbEhhbmRsZXIpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnNjcm9sbEhhbmRsZXIpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5zY3JvbGxIYW5kbGVyLCB7IGNhcHR1cmU6IHRydWUgfSBhcyBFdmVudExpc3RlbmVyT3B0aW9ucyk7XG5cbiAgICAgIGNvbnN0IGlvbkNvbnRlbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpb24tY29udGVudCcpO1xuICAgICAgaWYgKGlvbkNvbnRlbnQpIHtcbiAgICAgICAgaW9uQ29udGVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdpb25TY3JvbGwnLCB0aGlzLnNjcm9sbEhhbmRsZXIgYXMgRXZlbnRMaXN0ZW5lcik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2Nyb2xsSGFuZGxlciA9IG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLnJhZklkKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnJhZklkKTtcbiAgICAgIHRoaXMucmFmSWQgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLmhlYWRpbmdFbGVtZW50cyA9IFtdO1xuICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyID0gbnVsbDtcbiAgfVxuXG4gIHNjcm9sbFRvU2VjdGlvbihldmVudDogRXZlbnQsIGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICBpZiAoIWVsZW1lbnQpIHJldHVybjtcblxuICAgIGNvbnN0IG9mZnNldFRvcCA9IHRoaXMucHJvcHMub2Zmc2V0VG9wID8/IDEwMDtcblxuICAgIC8vIFVzZSBzY3JvbGxJbnRvVmlldyB3aXRoIG9mZnNldCBjYWxjdWxhdGlvbiBmb3IgYmV0dGVyIGNyb3NzLWNvbnRhaW5lciBzdXBwb3J0XG4gICAgY29uc3QgZWxlbWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGN1cnJlbnRTY3JvbGxZID0gd2luZG93LnNjcm9sbFkgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDtcbiAgICBjb25zdCB0YXJnZXRZID0gZWxlbWVudFJlY3QudG9wICsgY3VycmVudFNjcm9sbFkgLSBvZmZzZXRUb3A7XG5cbiAgICAvLyBUcnkgaW9uLWNvbnRlbnQgc2Nyb2xsVG9Qb2ludCBmaXJzdCAoZm9yIElvbmljIGFwcHMpXG4gICAgY29uc3QgaW9uQ29udGVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lvbi1jb250ZW50Jyk7XG4gICAgaWYgKGlvbkNvbnRlbnQgJiYgdHlwZW9mIChpb25Db250ZW50IGFzIGFueSkuc2Nyb2xsVG9Qb2ludCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgKGlvbkNvbnRlbnQgYXMgYW55KS5zY3JvbGxUb1BvaW50KDAsIHRhcmdldFksIDMwMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZhbGxiYWNrIHRvIHdpbmRvdyBzY3JvbGxcbiAgICAgIHdpbmRvdy5zY3JvbGxUbyh7XG4gICAgICAgIHRvcDogdGFyZ2V0WSxcbiAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGFjdGl2ZSBpbW1lZGlhdGVseSBmb3IgYmV0dGVyIFVYXG4gICAgdGhpcy5hY3RpdmVJZC5zZXQoaWQpO1xuXG4gICAgLy8gVXBkYXRlIFVSTCBoYXNoIHdpdGhvdXQganVtcGluZ1xuICAgIGhpc3RvcnkucHVzaFN0YXRlKG51bGwsICcnLCBgIyR7aWR9YCk7XG4gIH1cbn1cbiJdfQ==
@@ -14782,8 +14782,20 @@ class ParticipantCardComponent {
14782
14782
  const status = this.props.participant.paymentStatus;
14783
14783
  if (!status)
14784
14784
  return '';
14785
- const labels = { ...DEFAULT_PAYMENT_STATUS_LABELS, ...this.props.paymentStatusLabels };
14786
- return labels[status] || status;
14785
+ // If custom labels are provided, use them first
14786
+ if (this.props.paymentStatusLabels?.[status]) {
14787
+ return this.props.paymentStatusLabels[status];
14788
+ }
14789
+ // Use i18n for default labels
14790
+ const i18nKeys = {
14791
+ pending: 'paymentPending',
14792
+ processing: 'paymentProcessing',
14793
+ paid: 'paymentPaid',
14794
+ refunded: 'paymentRefunded',
14795
+ failed: 'paymentFailed',
14796
+ };
14797
+ const key = i18nKeys[status];
14798
+ return key ? this.i18n.t(key) : status;
14787
14799
  }
14788
14800
  getPaymentStatusColor() {
14789
14801
  const status = this.props.participant.paymentStatus;
@@ -32802,6 +32814,7 @@ class DocsTocComponent {
32802
32814
  this.headingElements = [];
32803
32815
  this.scrollHandler = null;
32804
32816
  this.rafId = null;
32817
+ this.scrollContainer = null;
32805
32818
  }
32806
32819
  ngOnInit() {
32807
32820
  this.updateFlatItems();
@@ -32889,8 +32902,12 @@ class DocsTocComponent {
32889
32902
  this.headingElements = items
32890
32903
  .map(item => document.getElementById(item.id))
32891
32904
  .filter((el) => el !== null);
32892
- if (this.headingElements.length === 0)
32905
+ if (this.headingElements.length === 0) {
32906
+ console.warn('[docs-toc] No heading elements found for IDs:', items.map(i => i.id));
32893
32907
  return;
32908
+ }
32909
+ // Find the scroll container - check for ion-content first, then use window
32910
+ this.scrollContainer = this.findScrollContainer();
32894
32911
  // Set initial active item
32895
32912
  this.updateActiveHeading();
32896
32913
  // Use scroll event with requestAnimationFrame for performance
@@ -32903,23 +32920,40 @@ class DocsTocComponent {
32903
32920
  this.updateActiveHeading();
32904
32921
  });
32905
32922
  };
32923
+ // Listen on both window and the scroll container for maximum compatibility
32906
32924
  window.addEventListener('scroll', this.scrollHandler, { passive: true });
32925
+ document.addEventListener('scroll', this.scrollHandler, { passive: true, capture: true });
32926
+ // Also listen on ion-content if present
32927
+ const ionContent = document.querySelector('ion-content');
32928
+ if (ionContent) {
32929
+ ionContent.addEventListener('ionScroll', this.scrollHandler, { passive: true });
32930
+ }
32907
32931
  });
32908
32932
  }
32933
+ findScrollContainer() {
32934
+ // Check for ion-content's scroll element
32935
+ const ionContent = document.querySelector('ion-content');
32936
+ if (ionContent) {
32937
+ // ion-content has a shadow DOM with the actual scrollable element
32938
+ const scrollEl = ionContent.shadowRoot?.querySelector('.inner-scroll');
32939
+ if (scrollEl)
32940
+ return scrollEl;
32941
+ }
32942
+ return window;
32943
+ }
32909
32944
  updateActiveHeading() {
32910
32945
  const offsetTop = this.props.offsetTop ?? 100;
32911
- const scrollY = window.scrollY;
32912
- // Find the heading that is currently at or above the offset point
32946
+ // Find the heading closest to or above the trigger point (offset from top of viewport)
32947
+ // Using getBoundingClientRect().top which is relative to viewport - works regardless of scroll container
32913
32948
  let activeHeading = null;
32914
32949
  for (const heading of this.headingElements) {
32915
32950
  const rect = heading.getBoundingClientRect();
32916
- const headingTop = rect.top + scrollY;
32917
- // If heading is at or above the trigger point (scrollY + offset)
32918
- if (headingTop <= scrollY + offsetTop + 10) {
32951
+ // If heading's top is at or above the trigger point (offset pixels from viewport top)
32952
+ if (rect.top <= offsetTop + 10) {
32919
32953
  activeHeading = heading;
32920
32954
  }
32921
32955
  else {
32922
- // Headings are in order, so we can stop once we find one below
32956
+ // Since headings are in DOM order, stop once we find one below the trigger
32923
32957
  break;
32924
32958
  }
32925
32959
  }
@@ -32937,6 +32971,11 @@ class DocsTocComponent {
32937
32971
  destroyScrollSpy() {
32938
32972
  if (this.scrollHandler) {
32939
32973
  window.removeEventListener('scroll', this.scrollHandler);
32974
+ document.removeEventListener('scroll', this.scrollHandler, { capture: true });
32975
+ const ionContent = document.querySelector('ion-content');
32976
+ if (ionContent) {
32977
+ ionContent.removeEventListener('ionScroll', this.scrollHandler);
32978
+ }
32940
32979
  this.scrollHandler = null;
32941
32980
  }
32942
32981
  if (this.rafId) {
@@ -32944,6 +32983,7 @@ class DocsTocComponent {
32944
32983
  this.rafId = null;
32945
32984
  }
32946
32985
  this.headingElements = [];
32986
+ this.scrollContainer = null;
32947
32987
  }
32948
32988
  scrollToSection(event, id) {
32949
32989
  event.preventDefault();
@@ -32951,11 +32991,22 @@ class DocsTocComponent {
32951
32991
  if (!element)
32952
32992
  return;
32953
32993
  const offsetTop = this.props.offsetTop ?? 100;
32954
- const top = element.getBoundingClientRect().top + window.scrollY - offsetTop;
32955
- window.scrollTo({
32956
- top,
32957
- behavior: 'smooth',
32958
- });
32994
+ // Use scrollIntoView with offset calculation for better cross-container support
32995
+ const elementRect = element.getBoundingClientRect();
32996
+ const currentScrollY = window.scrollY || document.documentElement.scrollTop;
32997
+ const targetY = elementRect.top + currentScrollY - offsetTop;
32998
+ // Try ion-content scrollToPoint first (for Ionic apps)
32999
+ const ionContent = document.querySelector('ion-content');
33000
+ if (ionContent && typeof ionContent.scrollToPoint === 'function') {
33001
+ ionContent.scrollToPoint(0, targetY, 300);
33002
+ }
33003
+ else {
33004
+ // Fallback to window scroll
33005
+ window.scrollTo({
33006
+ top: targetY,
33007
+ behavior: 'smooth',
33008
+ });
33009
+ }
32959
33010
  // Update active immediately for better UX
32960
33011
  this.activeId.set(id);
32961
33012
  // Update URL hash without jumping