valtech-components 4.0.156 → 4.0.157

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.
@@ -0,0 +1,240 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, computed, effect, inject, signal, untracked, } from '@angular/core';
3
+ import { FormControl, ReactiveFormsModule } from '@angular/forms';
4
+ import { IonButton } from '@ionic/angular/standalone';
5
+ import { AnalyticsService } from '../../../services/firebase/analytics.service';
6
+ import { I18nService } from '../../../services/i18n/i18n.service';
7
+ import { ToastService } from '../../../services/toast.service';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/forms";
10
+ /** I18n namespace used by the component. Apps can override via I18nService. */
11
+ const NS = 'CookieSettings';
12
+ const COOKIE_SETTINGS_I18N = {
13
+ es: {
14
+ title: 'Preferencias de cookies',
15
+ description: 'Controla que tecnologias permites. Puedes cambiar esto en cualquier momento.',
16
+ categoryEssential: 'Esenciales',
17
+ categoryEssentialHint: 'Necesarias para autenticacion y seguridad. Siempre activas.',
18
+ categoryAnalytics: 'Analitica',
19
+ categoryAnalyticsHint: 'Metricas anonimas de uso para mejorar el servicio.',
20
+ categoryFunctionality: 'Funcionalidad',
21
+ categoryFunctionalityHint: 'Recuerdan preferencias como idioma y tema.',
22
+ categoryAdvertising: 'Publicidad',
23
+ categoryAdvertisingHint: 'Personalizacion de anuncios. Requerido para publicidad relevante.',
24
+ notDecidedYet: 'Aun no has tomado una decision explicita.',
25
+ lastUpdated: 'Ultima actualizacion: {date}',
26
+ acceptAll: 'Aceptar todo',
27
+ rejectAll: 'Solo esenciales',
28
+ save: 'Guardar',
29
+ saved: 'Preferencias guardadas',
30
+ },
31
+ en: {
32
+ title: 'Cookie preferences',
33
+ description: 'Control which technologies you allow. You can change this at any time.',
34
+ categoryEssential: 'Essential',
35
+ categoryEssentialHint: 'Required for authentication and security. Always on.',
36
+ categoryAnalytics: 'Analytics',
37
+ categoryAnalyticsHint: 'Anonymous usage metrics to improve the service.',
38
+ categoryFunctionality: 'Functionality',
39
+ categoryFunctionalityHint: 'Remember preferences like language and theme.',
40
+ categoryAdvertising: 'Advertising',
41
+ categoryAdvertisingHint: 'Ad personalization. Required for relevant advertising.',
42
+ notDecidedYet: 'You have not made an explicit decision yet.',
43
+ lastUpdated: 'Last updated: {date}',
44
+ acceptAll: 'Accept all',
45
+ rejectAll: 'Essential only',
46
+ save: 'Save',
47
+ saved: 'Preferences saved',
48
+ },
49
+ };
50
+ /**
51
+ * `val-cookie-settings` — panel de gestion de consent GDPR.
52
+ *
53
+ * Self-contained: inyecta AnalyticsService internamente. Solo necesita montarse.
54
+ * Emite `(saved)` cuando el usuario guarda/acepta/rechaza para que el padre
55
+ * pueda cerrar un modal, navegar, etc.
56
+ *
57
+ * @example
58
+ * <val-cookie-settings (saved)="onConsentSaved()" />
59
+ */
60
+ export class CookieSettingsComponent {
61
+ ngOnInit() {
62
+ this.i18n.registerContent(NS, COOKIE_SETTINGS_I18N);
63
+ }
64
+ constructor() {
65
+ this.analytics = inject(AnalyticsService);
66
+ this.i18n = inject(I18nService);
67
+ this.toast = inject(ToastService);
68
+ /** Muestra titulo y descripcion. Util desactivarlo cuando la pagina ya tiene header propio. */
69
+ this.showTitle = signal(true);
70
+ /** Emite cuando el usuario guarda/acepta/rechaza. */
71
+ this.saved = new EventEmitter();
72
+ // FormControls internos
73
+ this.analyticsCtrl = new FormControl(true, { nonNullable: true });
74
+ this.functionalityCtrl = new FormControl(true, { nonNullable: true });
75
+ this.advertisingCtrl = new FormControl(false, { nonNullable: true });
76
+ this.essentialCtrl = new FormControl({ value: true, disabled: true }, { nonNullable: true });
77
+ this.categories = [
78
+ {
79
+ key: 'security',
80
+ labelKey: 'categoryEssential',
81
+ hintKey: 'categoryEssentialHint',
82
+ control: this.essentialCtrl,
83
+ disabled: true,
84
+ },
85
+ { key: 'analytics', labelKey: 'categoryAnalytics', hintKey: 'categoryAnalyticsHint', control: this.analyticsCtrl },
86
+ {
87
+ key: 'functionality',
88
+ labelKey: 'categoryFunctionality',
89
+ hintKey: 'categoryFunctionalityHint',
90
+ control: this.functionalityCtrl,
91
+ },
92
+ {
93
+ key: 'advertising',
94
+ labelKey: 'categoryAdvertising',
95
+ hintKey: 'categoryAdvertisingHint',
96
+ control: this.advertisingCtrl,
97
+ },
98
+ ];
99
+ this.consentState = computed(() => this.analytics.consentState());
100
+ this.hasDecided = computed(() => this.consentState().hasDecided);
101
+ this.lastUpdatedText = computed(() => {
102
+ const ts = this.consentState().updatedAt;
103
+ if (!ts)
104
+ return '';
105
+ return this.t('lastUpdated').replace('{date}', new Date(ts).toLocaleString(this.i18n.lang()));
106
+ });
107
+ this.alwaysOnLabel = '✓';
108
+ // Sync controls desde estado actual de consent
109
+ effect(() => {
110
+ const settings = this.consentState().settings;
111
+ untracked(() => {
112
+ this.analyticsCtrl.setValue(settings.analytics ?? true, { emitEvent: false });
113
+ this.functionalityCtrl.setValue(settings.functionality ?? true, { emitEvent: false });
114
+ this.advertisingCtrl.setValue(settings.advertising ?? false, { emitEvent: false });
115
+ });
116
+ }, { allowSignalWrites: true });
117
+ }
118
+ onAcceptAll() {
119
+ this.analytics.grantAllConsent();
120
+ this.toast.show({ message: this.t('saved'), duration: 2000, color: 'dark', position: 'top' });
121
+ this.saved.emit({ analytics: true, advertising: true, functionality: true, security: true });
122
+ }
123
+ onRejectAll() {
124
+ this.analytics.denyAllConsent();
125
+ this.toast.show({ message: this.t('saved'), duration: 2000, color: 'dark', position: 'top' });
126
+ this.saved.emit({ analytics: false, advertising: false, functionality: false, security: true });
127
+ }
128
+ onSave() {
129
+ const settings = {
130
+ analytics: this.analyticsCtrl.value,
131
+ functionality: this.functionalityCtrl.value,
132
+ advertising: this.advertisingCtrl.value,
133
+ security: true,
134
+ };
135
+ this.analytics.updateConsent(settings);
136
+ this.toast.show({ message: this.t('saved'), duration: 2000, color: 'dark', position: 'top' });
137
+ this.saved.emit(settings);
138
+ }
139
+ t(key) {
140
+ const v = this.i18n.t(key, NS);
141
+ if (v && !v.startsWith('['))
142
+ return v;
143
+ return COOKIE_SETTINGS_I18N.es[key] ?? key;
144
+ }
145
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CookieSettingsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
146
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: CookieSettingsComponent, isStandalone: true, selector: "val-cookie-settings", inputs: { showTitle: "showTitle" }, outputs: { saved: "saved" }, ngImport: i0, template: `
147
+ <div class="vcs">
148
+ @if (showTitle()) {
149
+ <h2 class="vcs__title">{{ t('title') }}</h2>
150
+ <p class="vcs__desc">{{ t('description') }}</p>
151
+ }
152
+
153
+ @if (!hasDecided()) {
154
+ <p class="vcs__status vcs__status--pending">{{ t('notDecidedYet') }}</p>
155
+ } @else if (lastUpdatedText()) {
156
+ <p class="vcs__status vcs__status--date">{{ lastUpdatedText() }}</p>
157
+ }
158
+
159
+ <div class="vcs__categories">
160
+ @for (cat of categories; track cat.key) {
161
+ <div class="vcs__row" [class.vcs__row--disabled]="cat.disabled">
162
+ <div class="vcs__row-header">
163
+ <label class="vcs__row-label">{{ t(cat.labelKey) }}</label>
164
+ <div class="vcs__toggle-wrap">
165
+ @if (cat.disabled) {
166
+ <div class="vcs__always-on">{{ alwaysOnLabel }}</div>
167
+ } @else {
168
+ <label class="vcs__switch" [attr.aria-label]="t(cat.labelKey)">
169
+ <input type="checkbox" class="vcs__checkbox" [formControl]="cat.control" />
170
+ <span class="vcs__slider"></span>
171
+ </label>
172
+ }
173
+ </div>
174
+ </div>
175
+ <p class="vcs__row-hint">{{ t(cat.hintKey) }}</p>
176
+ </div>
177
+ }
178
+ </div>
179
+
180
+ <div class="vcs__actions">
181
+ <ion-button fill="outline" size="small" color="medium" (click)="onRejectAll()">{{ t('rejectAll') }}</ion-button>
182
+
183
+ <ion-button fill="outline" size="small" color="dark" (click)="onSave()">{{ t('save') }}</ion-button>
184
+
185
+ <ion-button fill="solid" size="small" color="primary" (click)="onAcceptAll()">{{ t('acceptAll') }}</ion-button>
186
+ </div>
187
+ </div>
188
+ `, isInline: true, styles: [".vcs{display:block}.vcs__title{font-size:1.125rem;font-weight:700;color:var(--ion-text-color, #000);margin:0 0 6px}.vcs__desc{font-size:.875rem;color:var(--ion-color-medium, #92949c);margin:0 0 16px;line-height:1.5}.vcs__status{font-size:.8125rem;margin:0 0 16px;padding:8px 12px;border-radius:8px}.vcs__status--pending{background:rgba(var(--ion-color-warning-rgb, 255, 196, 9),.12);color:var(--ion-color-warning-shade, #e0ac08)}.vcs__status--date{background:var(--ion-color-light, #f4f5f8);color:var(--ion-color-medium, #92949c)}.vcs__categories{display:flex;flex-direction:column;gap:0;margin-bottom:20px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .08));border-radius:12px;overflow:hidden}.vcs__row{padding:14px 16px;border-bottom:1px solid var(--ion-border-color, rgba(0, 0, 0, .06))}.vcs__row:last-child{border-bottom:none}.vcs__row--disabled{opacity:.7}.vcs__row-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:4px}.vcs__row-label{font-size:.9375rem;font-weight:600;color:var(--ion-text-color, #000)}.vcs__row-hint{font-size:.8125rem;color:var(--ion-color-medium, #92949c);margin:0;line-height:1.4}.vcs__toggle-wrap{flex-shrink:0}.vcs__always-on{font-size:.75rem;font-weight:600;color:var(--ion-color-success, #2dd36f);padding:2px 8px;background:rgba(var(--ion-color-success-rgb, 45, 211, 111),.12);border-radius:20px}.vcs__switch{position:relative;display:inline-block;width:44px;height:24px;cursor:pointer}.vcs__checkbox{opacity:0;width:0;height:0;position:absolute}.vcs__slider{position:absolute;inset:0;border-radius:24px;background:var(--ion-color-medium, #92949c);transition:background .2s ease}.vcs__slider:before{content:\"\";position:absolute;width:18px;height:18px;border-radius:50%;background:#fff;top:3px;left:3px;transition:transform .2s ease;box-shadow:0 1px 3px #0003}.vcs__checkbox:checked+.vcs__slider{background:var(--ion-color-primary, #7026df)}.vcs__checkbox:checked+.vcs__slider:before{transform:translate(20px)}.vcs__actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}@media (max-width: 480px){.vcs__actions{flex-direction:column-reverse}.vcs__actions ion-button{width:100%}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
189
+ }
190
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CookieSettingsComponent, decorators: [{
191
+ type: Component,
192
+ args: [{ selector: 'val-cookie-settings', standalone: true, imports: [CommonModule, ReactiveFormsModule, IonButton], template: `
193
+ <div class="vcs">
194
+ @if (showTitle()) {
195
+ <h2 class="vcs__title">{{ t('title') }}</h2>
196
+ <p class="vcs__desc">{{ t('description') }}</p>
197
+ }
198
+
199
+ @if (!hasDecided()) {
200
+ <p class="vcs__status vcs__status--pending">{{ t('notDecidedYet') }}</p>
201
+ } @else if (lastUpdatedText()) {
202
+ <p class="vcs__status vcs__status--date">{{ lastUpdatedText() }}</p>
203
+ }
204
+
205
+ <div class="vcs__categories">
206
+ @for (cat of categories; track cat.key) {
207
+ <div class="vcs__row" [class.vcs__row--disabled]="cat.disabled">
208
+ <div class="vcs__row-header">
209
+ <label class="vcs__row-label">{{ t(cat.labelKey) }}</label>
210
+ <div class="vcs__toggle-wrap">
211
+ @if (cat.disabled) {
212
+ <div class="vcs__always-on">{{ alwaysOnLabel }}</div>
213
+ } @else {
214
+ <label class="vcs__switch" [attr.aria-label]="t(cat.labelKey)">
215
+ <input type="checkbox" class="vcs__checkbox" [formControl]="cat.control" />
216
+ <span class="vcs__slider"></span>
217
+ </label>
218
+ }
219
+ </div>
220
+ </div>
221
+ <p class="vcs__row-hint">{{ t(cat.hintKey) }}</p>
222
+ </div>
223
+ }
224
+ </div>
225
+
226
+ <div class="vcs__actions">
227
+ <ion-button fill="outline" size="small" color="medium" (click)="onRejectAll()">{{ t('rejectAll') }}</ion-button>
228
+
229
+ <ion-button fill="outline" size="small" color="dark" (click)="onSave()">{{ t('save') }}</ion-button>
230
+
231
+ <ion-button fill="solid" size="small" color="primary" (click)="onAcceptAll()">{{ t('acceptAll') }}</ion-button>
232
+ </div>
233
+ </div>
234
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".vcs{display:block}.vcs__title{font-size:1.125rem;font-weight:700;color:var(--ion-text-color, #000);margin:0 0 6px}.vcs__desc{font-size:.875rem;color:var(--ion-color-medium, #92949c);margin:0 0 16px;line-height:1.5}.vcs__status{font-size:.8125rem;margin:0 0 16px;padding:8px 12px;border-radius:8px}.vcs__status--pending{background:rgba(var(--ion-color-warning-rgb, 255, 196, 9),.12);color:var(--ion-color-warning-shade, #e0ac08)}.vcs__status--date{background:var(--ion-color-light, #f4f5f8);color:var(--ion-color-medium, #92949c)}.vcs__categories{display:flex;flex-direction:column;gap:0;margin-bottom:20px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .08));border-radius:12px;overflow:hidden}.vcs__row{padding:14px 16px;border-bottom:1px solid var(--ion-border-color, rgba(0, 0, 0, .06))}.vcs__row:last-child{border-bottom:none}.vcs__row--disabled{opacity:.7}.vcs__row-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:4px}.vcs__row-label{font-size:.9375rem;font-weight:600;color:var(--ion-text-color, #000)}.vcs__row-hint{font-size:.8125rem;color:var(--ion-color-medium, #92949c);margin:0;line-height:1.4}.vcs__toggle-wrap{flex-shrink:0}.vcs__always-on{font-size:.75rem;font-weight:600;color:var(--ion-color-success, #2dd36f);padding:2px 8px;background:rgba(var(--ion-color-success-rgb, 45, 211, 111),.12);border-radius:20px}.vcs__switch{position:relative;display:inline-block;width:44px;height:24px;cursor:pointer}.vcs__checkbox{opacity:0;width:0;height:0;position:absolute}.vcs__slider{position:absolute;inset:0;border-radius:24px;background:var(--ion-color-medium, #92949c);transition:background .2s ease}.vcs__slider:before{content:\"\";position:absolute;width:18px;height:18px;border-radius:50%;background:#fff;top:3px;left:3px;transition:transform .2s ease;box-shadow:0 1px 3px #0003}.vcs__checkbox:checked+.vcs__slider{background:var(--ion-color-primary, #7026df)}.vcs__checkbox:checked+.vcs__slider:before{transform:translate(20px)}.vcs__actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}@media (max-width: 480px){.vcs__actions{flex-direction:column-reverse}.vcs__actions ion-button{width:100%}}\n"] }]
235
+ }], ctorParameters: () => [], propDecorators: { showTitle: [{
236
+ type: Input
237
+ }], saved: [{
238
+ type: Output
239
+ }] } });
240
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29va2llLXNldHRpbmdzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvY29va2llLXNldHRpbmdzL2Nvb2tpZS1zZXR0aW5ncy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUVoRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7QUFFL0QsK0VBQStFO0FBQy9FLE1BQU0sRUFBRSxHQUFHLGdCQUFnQixDQUFDO0FBRTVCLE1BQU0sb0JBQW9CLEdBQUc7SUFDM0IsRUFBRSxFQUFFO1FBQ0YsS0FBSyxFQUFFLHlCQUF5QjtRQUNoQyxXQUFXLEVBQUUsOEVBQThFO1FBQzNGLGlCQUFpQixFQUFFLFlBQVk7UUFDL0IscUJBQXFCLEVBQUUsNkRBQTZEO1FBQ3BGLGlCQUFpQixFQUFFLFdBQVc7UUFDOUIscUJBQXFCLEVBQUUsb0RBQW9EO1FBQzNFLHFCQUFxQixFQUFFLGVBQWU7UUFDdEMseUJBQXlCLEVBQUUsNENBQTRDO1FBQ3ZFLG1CQUFtQixFQUFFLFlB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SSxLQUFLO3NCQUFkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgc2lnbmFsLFxuICB1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJb25CdXR0b24gfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9maXJlYmFzZS9hbmFseXRpY3Muc2VydmljZSc7XG5pbXBvcnQgeyBDb25zZW50U2V0dGluZ3MgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9maXJlYmFzZS9hbmFseXRpY3MtdHlwZXMnO1xuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pMThuL2kxOG4uc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90b2FzdC5zZXJ2aWNlJztcblxuLyoqIEkxOG4gbmFtZXNwYWNlIHVzZWQgYnkgdGhlIGNvbXBvbmVudC4gQXBwcyBjYW4gb3ZlcnJpZGUgdmlhIEkxOG5TZXJ2aWNlLiAqL1xuY29uc3QgTlMgPSAnQ29va2llU2V0dGluZ3MnO1xuXG5jb25zdCBDT09LSUVfU0VUVElOR1NfSTE4TiA9IHtcbiAgZXM6IHtcbiAgICB0aXRsZTogJ1ByZWZlcmVuY2lhcyBkZSBjb29raWVzJyxcbiAgICBkZXNjcmlwdGlvbjogJ0NvbnRyb2xhIHF1ZSB0ZWNub2xvZ2lhcyBwZXJtaXRlcy4gUHVlZGVzIGNhbWJpYXIgZXN0byBlbiBjdWFscXVpZXIgbW9tZW50by4nLFxuICAgIGNhdGVnb3J5RXNzZW50aWFsOiAnRXNlbmNpYWxlcycsXG4gICAgY2F0ZWdvcnlFc3NlbnRpYWxIaW50OiAnTmVjZXNhcmlhcyBwYXJhIGF1dGVudGljYWNpb24geSBzZWd1cmlkYWQuIFNpZW1wcmUgYWN0aXZhcy4nLFxuICAgIGNhdGVnb3J5QW5hbHl0aWNzOiAnQW5hbGl0aWNhJyxcbiAgICBjYXRlZ29yeUFuYWx5dGljc0hpbnQ6ICdNZXRyaWNhcyBhbm9uaW1hcyBkZSB1c28gcGFyYSBtZWpvcmFyIGVsIHNlcnZpY2lvLicsXG4gICAgY2F0ZWdvcnlGdW5jdGlvbmFsaXR5OiAnRnVuY2lvbmFsaWRhZCcsXG4gICAgY2F0ZWdvcnlGdW5jdGlvbmFsaXR5SGludDogJ1JlY3VlcmRhbiBwcmVmZXJlbmNpYXMgY29tbyBpZGlvbWEgeSB0ZW1hLicsXG4gICAgY2F0ZWdvcnlBZHZlcnRpc2luZzogJ1B1YmxpY2lkYWQnLFxuICAgIGNhdGVnb3J5QWR2ZXJ0aXNpbmdIaW50OiAnUGVyc29uYWxpemFjaW9uIGRlIGFudW5jaW9zLiBSZXF1ZXJpZG8gcGFyYSBwdWJsaWNpZGFkIHJlbGV2YW50ZS4nLFxuICAgIG5vdERlY2lkZWRZZXQ6ICdBdW4gbm8gaGFzIHRvbWFkbyB1bmEgZGVjaXNpb24gZXhwbGljaXRhLicsXG4gICAgbGFzdFVwZGF0ZWQ6ICdVbHRpbWEgYWN0dWFsaXphY2lvbjoge2RhdGV9JyxcbiAgICBhY2NlcHRBbGw6ICdBY2VwdGFyIHRvZG8nLFxuICAgIHJlamVjdEFsbDogJ1NvbG8gZXNlbmNpYWxlcycsXG4gICAgc2F2ZTogJ0d1YXJkYXInLFxuICAgIHNhdmVkOiAnUHJlZmVyZW5jaWFzIGd1YXJkYWRhcycsXG4gIH0sXG4gIGVuOiB7XG4gICAgdGl0bGU6ICdDb29raWUgcHJlZmVyZW5jZXMnLFxuICAgIGRlc2NyaXB0aW9uOiAnQ29udHJvbCB3aGljaCB0ZWNobm9sb2dpZXMgeW91IGFsbG93LiBZb3UgY2FuIGNoYW5nZSB0aGlzIGF0IGFueSB0aW1lLicsXG4gICAgY2F0ZWdvcnlFc3NlbnRpYWw6ICdFc3NlbnRpYWwnLFxuICAgIGNhdGVnb3J5RXNzZW50aWFsSGludDogJ1JlcXVpcmVkIGZvciBhdXRoZW50aWNhdGlvbiBhbmQgc2VjdXJpdHkuIEFsd2F5cyBvbi4nLFxuICAgIGNhdGVnb3J5QW5hbHl0aWNzOiAnQW5hbHl0aWNzJyxcbiAgICBjYXRlZ29yeUFuYWx5dGljc0hpbnQ6ICdBbm9ueW1vdXMgdXNhZ2UgbWV0cmljcyB0byBpbXByb3ZlIHRoZSBzZXJ2aWNlLicsXG4gICAgY2F0ZWdvcnlGdW5jdGlvbmFsaXR5OiAnRnVuY3Rpb25hbGl0eScsXG4gICAgY2F0ZWdvcnlGdW5jdGlvbmFsaXR5SGludDogJ1JlbWVtYmVyIHByZWZlcmVuY2VzIGxpa2UgbGFuZ3VhZ2UgYW5kIHRoZW1lLicsXG4gICAgY2F0ZWdvcnlBZHZlcnRpc2luZzogJ0FkdmVydGlzaW5nJyxcbiAgICBjYXRlZ29yeUFkdmVydGlzaW5nSGludDogJ0FkIHBlcnNvbmFsaXphdGlvbi4gUmVxdWlyZWQgZm9yIHJlbGV2YW50IGFkdmVydGlzaW5nLicsXG4gICAgbm90RGVjaWRlZFlldDogJ1lvdSBoYXZlIG5vdCBtYWRlIGFuIGV4cGxpY2l0IGRlY2lzaW9uIHlldC4nLFxuICAgIGxhc3RVcGRhdGVkOiAnTGFzdCB1cGRhdGVkOiB7ZGF0ZX0nLFxuICAgIGFjY2VwdEFsbDogJ0FjY2VwdCBhbGwnLFxuICAgIHJlamVjdEFsbDogJ0Vzc2VudGlhbCBvbmx5JyxcbiAgICBzYXZlOiAnU2F2ZScsXG4gICAgc2F2ZWQ6ICdQcmVmZXJlbmNlcyBzYXZlZCcsXG4gIH0sXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvb2tpZUNhdGVnb3J5IHtcbiAga2V5OiBrZXlvZiBDb25zZW50U2V0dGluZ3M7XG4gIGxhYmVsS2V5OiBzdHJpbmc7XG4gIGhpbnRLZXk6IHN0cmluZztcbiAgY29udHJvbDogRm9ybUNvbnRyb2w8Ym9vbGVhbj47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBgdmFsLWNvb2tpZS1zZXR0aW5nc2Ag4oCUIHBhbmVsIGRlIGdlc3Rpb24gZGUgY29uc2VudCBHRFBSLlxuICpcbiAqIFNlbGYtY29udGFpbmVkOiBpbnllY3RhIEFuYWx5dGljc1NlcnZpY2UgaW50ZXJuYW1lbnRlLiBTb2xvIG5lY2VzaXRhIG1vbnRhcnNlLlxuICogRW1pdGUgYChzYXZlZClgIGN1YW5kbyBlbCB1c3VhcmlvIGd1YXJkYS9hY2VwdGEvcmVjaGF6YSBwYXJhIHF1ZSBlbCBwYWRyZVxuICogcHVlZGEgY2VycmFyIHVuIG1vZGFsLCBuYXZlZ2FyLCBldGMuXG4gKlxuICogQGV4YW1wbGVcbiAqIDx2YWwtY29va2llLXNldHRpbmdzIChzYXZlZCk9XCJvbkNvbnNlbnRTYXZlZCgpXCIgLz5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLWNvb2tpZS1zZXR0aW5ncycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIElvbkJ1dHRvbl0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInZjc1wiPlxuICAgICAgQGlmIChzaG93VGl0bGUoKSkge1xuICAgICAgICA8aDIgY2xhc3M9XCJ2Y3NfX3RpdGxlXCI+e3sgdCgndGl0bGUnKSB9fTwvaDI+XG4gICAgICAgIDxwIGNsYXNzPVwidmNzX19kZXNjXCI+e3sgdCgnZGVzY3JpcHRpb24nKSB9fTwvcD5cbiAgICAgIH1cblxuICAgICAgQGlmICghaGFzRGVjaWRlZCgpKSB7XG4gICAgICAgIDxwIGNsYXNzPVwidmNzX19zdGF0dXMgdmNzX19zdGF0dXMtLXBlbmRpbmdcIj57eyB0KCdub3REZWNpZGVkWWV0JykgfX08L3A+XG4gICAgICB9IEBlbHNlIGlmIChsYXN0VXBkYXRlZFRleHQoKSkge1xuICAgICAgICA8cCBjbGFzcz1cInZjc19fc3RhdHVzIHZjc19fc3RhdHVzLS1kYXRlXCI+e3sgbGFzdFVwZGF0ZWRUZXh0KCkgfX08L3A+XG4gICAgICB9XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ2Y3NfX2NhdGVnb3JpZXNcIj5cbiAgICAgICAgQGZvciAoY2F0IG9mIGNhdGVnb3JpZXM7IHRyYWNrIGNhdC5rZXkpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidmNzX19yb3dcIiBbY2xhc3MudmNzX19yb3ctLWRpc2FibGVkXT1cImNhdC5kaXNhYmxlZFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZjc19fcm93LWhlYWRlclwiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2Y3NfX3Jvdy1sYWJlbFwiPnt7IHQoY2F0LmxhYmVsS2V5KSB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2Y3NfX3RvZ2dsZS13cmFwXCI+XG4gICAgICAgICAgICAgICAgQGlmIChjYXQuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2Y3NfX2Fsd2F5cy1vblwiPnt7IGFsd2F5c09uTGFiZWwgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZjc19fc3dpdGNoXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KGNhdC5sYWJlbEtleSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwidmNzX19jaGVja2JveFwiIFtmb3JtQ29udHJvbF09XCJjYXQuY29udHJvbFwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmNzX19zbGlkZXJcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwidmNzX19yb3ctaGludFwiPnt7IHQoY2F0LmhpbnRLZXkpIH19PC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInZjc19fYWN0aW9uc1wiPlxuICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwib3V0bGluZVwiIHNpemU9XCJzbWFsbFwiIGNvbG9yPVwibWVkaXVtXCIgKGNsaWNrKT1cIm9uUmVqZWN0QWxsKClcIj57eyB0KCdyZWplY3RBbGwnKSB9fTwvaW9uLWJ1dHRvbj5cblxuICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwib3V0bGluZVwiIHNpemU9XCJzbWFsbFwiIGNvbG9yPVwiZGFya1wiIChjbGljayk9XCJvblNhdmUoKVwiPnt7IHQoJ3NhdmUnKSB9fTwvaW9uLWJ1dHRvbj5cblxuICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwic29saWRcIiBzaXplPVwic21hbGxcIiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwib25BY2NlcHRBbGwoKVwiPnt7IHQoJ2FjY2VwdEFsbCcpIH19PC9pb24tYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC52Y3Mge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cbiAgICAgIC52Y3NfX3RpdGxlIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjEyNXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi10ZXh0LWNvbG9yLCAjMDAwKTtcbiAgICAgICAgbWFyZ2luOiAwIDAgNnB4O1xuICAgICAgfVxuICAgICAgLnZjc19fZGVzYyB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItbWVkaXVtLCAjOTI5NDljKTtcbiAgICAgICAgbWFyZ2luOiAwIDAgMTZweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgICAgIH1cbiAgICAgIC52Y3NfX3N0YXR1cyB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICAgICAgICBtYXJnaW46IDAgMCAxNnB4O1xuICAgICAgICBwYWRkaW5nOiA4cHggMTJweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgfVxuICAgICAgLnZjc19fc3RhdHVzLS1wZW5kaW5nIHtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSh2YXIoLS1pb24tY29sb3Itd2FybmluZy1yZ2IsIDI1NSwgMTk2LCA5KSwgMC4xMik7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3Itd2FybmluZy1zaGFkZSwgI2UwYWMwOCk7XG4gICAgICB9XG4gICAgICAudmNzX19zdGF0dXMtLWRhdGUge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItbGlnaHQsICNmNGY1ZjgpO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzkyOTQ5Yyk7XG4gICAgICB9XG4gICAgICAudmNzX19jYXRlZ29yaWVzIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAwO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1pb24tYm9yZGVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMDgpKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIH1cbiAgICAgIC52Y3NfX3JvdyB7XG4gICAgICAgIHBhZGRpbmc6IDE0cHggMTZweDtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWlvbi1ib3JkZXItY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4wNikpO1xuICAgICAgfVxuICAgICAgLnZjc19fcm93Omxhc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItYm90dG9tOiBub25lO1xuICAgICAgfVxuICAgICAgLnZjc19fcm93LS1kaXNhYmxlZCB7XG4gICAgICAgIG9wYWNpdHk6IDAuNztcbiAgICAgIH1cbiAgICAgIC52Y3NfX3Jvdy1oZWFkZXIge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIGdhcDogMTJweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgfVxuICAgICAgLnZjc19fcm93LWxhYmVsIHtcbiAgICAgICAgZm9udC1zaXplOiAwLjkzNzVyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tdGV4dC1jb2xvciwgIzAwMCk7XG4gICAgICB9XG4gICAgICAudmNzX19yb3ctaGludCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzkyOTQ5Yyk7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgICAgIH1cbiAgICAgIC52Y3NfX3RvZ2dsZS13cmFwIHtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICB9XG4gICAgICAudmNzX19hbHdheXMtb24ge1xuICAgICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3Itc3VjY2VzcywgIzJkZDM2Zik7XG4gICAgICAgIHBhZGRpbmc6IDJweCA4cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEodmFyKC0taW9uLWNvbG9yLXN1Y2Nlc3MtcmdiLCA0NSwgMjExLCAxMTEpLCAwLjEyKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMjBweDtcbiAgICAgIH1cblxuICAgICAgLyogVG9nZ2xlIHN3aXRjaCBuYXRpdm8g4oCUIG5vIGRlcGVuZGUgZGUgSW9uaWMgKi9cbiAgICAgIC52Y3NfX3N3aXRjaCB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICB3aWR0aDogNDRweDtcbiAgICAgICAgaGVpZ2h0OiAyNHB4O1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB9XG4gICAgICAudmNzX19jaGVja2JveCB7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIHdpZHRoOiAwO1xuICAgICAgICBoZWlnaHQ6IDA7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIH1cbiAgICAgIC52Y3NfX3NsaWRlciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgaW5zZXQ6IDA7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDI0cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0sICM5Mjk0OWMpO1xuICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnMgZWFzZTtcbiAgICAgIH1cbiAgICAgIC52Y3NfX3NsaWRlcjo6YmVmb3JlIHtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgd2lkdGg6IDE4cHg7XG4gICAgICAgIGhlaWdodDogMThweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmO1xuICAgICAgICB0b3A6IDNweDtcbiAgICAgICAgbGVmdDogM3B4O1xuICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBlYXNlO1xuICAgICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjIpO1xuICAgICAgfVxuICAgICAgLnZjc19fY2hlY2tib3g6Y2hlY2tlZCArIC52Y3NfX3NsaWRlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5LCAjNzAyNmRmKTtcbiAgICAgIH1cbiAgICAgIC52Y3NfX2NoZWNrYm94OmNoZWNrZWQgKyAudmNzX19zbGlkZXI6OmJlZm9yZSB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgyMHB4KTtcbiAgICAgIH1cblxuICAgICAgLnZjc19fYWN0aW9ucyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgICB9XG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgICAgICAgLnZjc19fYWN0aW9ucyB7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xuICAgICAgICB9XG4gICAgICAgIC52Y3NfX2FjdGlvbnMgaW9uLWJ1dHRvbiB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBgLFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQ29va2llU2V0dGluZ3NDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIGFuYWx5dGljcyA9IGluamVjdChBbmFseXRpY3NTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcbiAgcHJpdmF0ZSB0b2FzdCA9IGluamVjdChUb2FzdFNlcnZpY2UpO1xuXG4gIC8qKiBNdWVzdHJhIHRpdHVsbyB5IGRlc2NyaXBjaW9uLiBVdGlsIGRlc2FjdGl2YXJsbyBjdWFuZG8gbGEgcGFnaW5hIHlhIHRpZW5lIGhlYWRlciBwcm9waW8uICovXG4gIEBJbnB1dCgpIHNob3dUaXRsZSA9IHNpZ25hbCh0cnVlKTtcblxuICAvKiogRW1pdGUgY3VhbmRvIGVsIHVzdWFyaW8gZ3VhcmRhL2FjZXB0YS9yZWNoYXphLiAqL1xuICBAT3V0cHV0KCkgc2F2ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPENvbnNlbnRTZXR0aW5ncz4oKTtcblxuICAvLyBGb3JtQ29udHJvbHMgaW50ZXJub3NcbiAgcHJpdmF0ZSBhbmFseXRpY3NDdHJsID0gbmV3IEZvcm1Db250cm9sPGJvb2xlYW4+KHRydWUsIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XG4gIHByaXZhdGUgZnVuY3Rpb25hbGl0eUN0cmwgPSBuZXcgRm9ybUNvbnRyb2w8Ym9vbGVhbj4odHJ1ZSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSBhZHZlcnRpc2luZ0N0cmwgPSBuZXcgRm9ybUNvbnRyb2w8Ym9vbGVhbj4oZmFsc2UsIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XG4gIHByaXZhdGUgZXNzZW50aWFsQ3RybCA9IG5ldyBGb3JtQ29udHJvbDxib29sZWFuPih7IHZhbHVlOiB0cnVlLCBkaXNhYmxlZDogdHJ1ZSB9LCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pO1xuXG4gIHJlYWRvbmx5IGNhdGVnb3JpZXM6IENvb2tpZUNhdGVnb3J5W10gPSBbXG4gICAge1xuICAgICAga2V5OiAnc2VjdXJpdHknLFxuICAgICAgbGFiZWxLZXk6ICdjYXRlZ29yeUVzc2VudGlhbCcsXG4gICAgICBoaW50S2V5OiAnY2F0ZWdvcnlFc3NlbnRpYWxIaW50JyxcbiAgICAgIGNvbnRyb2w6IHRoaXMuZXNzZW50aWFsQ3RybCxcbiAgICAgIGRpc2FibGVkOiB0cnVlLFxuICAgIH0sXG4gICAgeyBrZXk6ICdhbmFseXRpY3MnLCBsYWJlbEtleTogJ2NhdGVnb3J5QW5hbHl0aWNzJywgaGludEtleTogJ2NhdGVnb3J5QW5hbHl0aWNzSGludCcsIGNvbnRyb2w6IHRoaXMuYW5hbHl0aWNzQ3RybCB9LFxuICAgIHtcbiAgICAgIGtleTogJ2Z1bmN0aW9uYWxpdHknLFxuICAgICAgbGFiZWxLZXk6ICdjYXRlZ29yeUZ1bmN0aW9uYWxpdHknLFxuICAgICAgaGludEtleTogJ2NhdGVnb3J5RnVuY3Rpb25hbGl0eUhpbnQnLFxuICAgICAgY29udHJvbDogdGhpcy5mdW5jdGlvbmFsaXR5Q3RybCxcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2FkdmVydGlzaW5nJyxcbiAgICAgIGxhYmVsS2V5OiAnY2F0ZWdvcnlBZHZlcnRpc2luZycsXG4gICAgICBoaW50S2V5OiAnY2F0ZWdvcnlBZHZlcnRpc2luZ0hpbnQnLFxuICAgICAgY29udHJvbDogdGhpcy5hZHZlcnRpc2luZ0N0cmwsXG4gICAgfSxcbiAgXTtcblxuICBwcm90ZWN0ZWQgY29uc2VudFN0YXRlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hbmFseXRpY3MuY29uc2VudFN0YXRlKCkpO1xuICBwcm90ZWN0ZWQgaGFzRGVjaWRlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29uc2VudFN0YXRlKCkuaGFzRGVjaWRlZCk7XG5cbiAgcHJvdGVjdGVkIGxhc3RVcGRhdGVkVGV4dCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB0cyA9IHRoaXMuY29uc2VudFN0YXRlKCkudXBkYXRlZEF0O1xuICAgIGlmICghdHMpIHJldHVybiAnJztcbiAgICByZXR1cm4gdGhpcy50KCdsYXN0VXBkYXRlZCcpLnJlcGxhY2UoJ3tkYXRlfScsIG5ldyBEYXRlKHRzKS50b0xvY2FsZVN0cmluZyh0aGlzLmkxOG4ubGFuZygpKSk7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCBhbHdheXNPbkxhYmVsID0gJ+Kckyc7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pMThuLnJlZ2lzdGVyQ29udGVudChOUywgQ09PS0lFX1NFVFRJTkdTX0kxOE4pO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gU3luYyBjb250cm9scyBkZXNkZSBlc3RhZG8gYWN0dWFsIGRlIGNvbnNlbnRcbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5jb25zZW50U3RhdGUoKS5zZXR0aW5ncztcbiAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmFuYWx5dGljc0N0cmwuc2V0VmFsdWUoc2V0dGluZ3MuYW5hbHl0aWNzID8/IHRydWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICB0aGlzLmZ1bmN0aW9uYWxpdHlDdHJsLnNldFZhbHVlKHNldHRpbmdzLmZ1bmN0aW9uYWxpdHkgPz8gdHJ1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgIHRoaXMuYWR2ZXJ0aXNpbmdDdHJsLnNldFZhbHVlKHNldHRpbmdzLmFkdmVydGlzaW5nID8/IGZhbHNlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICk7XG4gIH1cblxuICBvbkFjY2VwdEFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLmFuYWx5dGljcy5ncmFudEFsbENvbnNlbnQoKTtcbiAgICB0aGlzLnRvYXN0LnNob3coeyBtZXNzYWdlOiB0aGlzLnQoJ3NhdmVkJyksIGR1cmF0aW9uOiAyMDAwLCBjb2xvcjogJ2RhcmsnLCBwb3NpdGlvbjogJ3RvcCcgfSk7XG4gICAgdGhpcy5zYXZlZC5lbWl0KHsgYW5hbHl0aWNzOiB0cnVlLCBhZHZlcnRpc2luZzogdHJ1ZSwgZnVuY3Rpb25hbGl0eTogdHJ1ZSwgc2VjdXJpdHk6IHRydWUgfSk7XG4gIH1cblxuICBvblJlamVjdEFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLmFuYWx5dGljcy5kZW55QWxsQ29uc2VudCgpO1xuICAgIHRoaXMudG9hc3Quc2hvdyh7IG1lc3NhZ2U6IHRoaXMudCgnc2F2ZWQnKSwgZHVyYXRpb246IDIwMDAsIGNvbG9yOiAnZGFyaycsIHBvc2l0aW9uOiAndG9wJyB9KTtcbiAgICB0aGlzLnNhdmVkLmVtaXQoeyBhbmFseXRpY3M6IGZhbHNlLCBhZHZlcnRpc2luZzogZmFsc2UsIGZ1bmN0aW9uYWxpdHk6IGZhbHNlLCBzZWN1cml0eTogdHJ1ZSB9KTtcbiAgfVxuXG4gIG9uU2F2ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBzZXR0aW5nczogQ29uc2VudFNldHRpbmdzID0ge1xuICAgICAgYW5hbHl0aWNzOiB0aGlzLmFuYWx5dGljc0N0cmwudmFsdWUsXG4gICAgICBmdW5jdGlvbmFsaXR5OiB0aGlzLmZ1bmN0aW9uYWxpdHlDdHJsLnZhbHVlLFxuICAgICAgYWR2ZXJ0aXNpbmc6IHRoaXMuYWR2ZXJ0aXNpbmdDdHJsLnZhbHVlLFxuICAgICAgc2VjdXJpdHk6IHRydWUsXG4gICAgfTtcbiAgICB0aGlzLmFuYWx5dGljcy51cGRhdGVDb25zZW50KHNldHRpbmdzKTtcbiAgICB0aGlzLnRvYXN0LnNob3coeyBtZXNzYWdlOiB0aGlzLnQoJ3NhdmVkJyksIGR1cmF0aW9uOiAyMDAwLCBjb2xvcjogJ2RhcmsnLCBwb3NpdGlvbjogJ3RvcCcgfSk7XG4gICAgdGhpcy5zYXZlZC5lbWl0KHNldHRpbmdzKTtcbiAgfVxuXG4gIHQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHYgPSB0aGlzLmkxOG4udChrZXksIE5TKTtcbiAgICBpZiAodiAmJiAhdi5zdGFydHNXaXRoKCdbJykpIHJldHVybiB2O1xuICAgIHJldHVybiBDT09LSUVfU0VUVElOR1NfSTE4Ti5lc1trZXkgYXMga2V5b2YgdHlwZW9mIENPT0tJRV9TRVRUSU5HU19JMThOLmVzXSA/PyBrZXk7XG4gIH1cbn1cbiJdfQ==
@@ -59,8 +59,7 @@ export class AnalyticsService {
59
59
  return this.isAnalyticsSupported() && this._consentState().settings.analytics === true;
60
60
  });
61
61
  this.analyticsConfig = config.analyticsConfig ?? {};
62
- this.consentStorageKey =
63
- this.analyticsConfig.consentStorageKey ?? DEFAULT_CONSENT_STORAGE_KEY;
62
+ this.consentStorageKey = this.analyticsConfig.consentStorageKey ?? DEFAULT_CONSENT_STORAGE_KEY;
64
63
  this.eventPrefix = this.analyticsConfig.eventPrefix ?? '';
65
64
  this.samplingRate = this.analyticsConfig.samplingRate ?? 1.0;
66
65
  this.initializeAnalytics();
@@ -75,6 +74,9 @@ export class AnalyticsService {
75
74
  if (!isPlatformBrowser(this.platformId)) {
76
75
  return;
77
76
  }
77
+ // Consent Mode v2: default denied ANTES de que Firebase/gtag inicialice.
78
+ // Garantiza que no se recolectan datos hasta que el usuario decida.
79
+ this.setConsentModeDefault();
78
80
  // Cargar consent desde localStorage
79
81
  this.loadConsentFromStorage();
80
82
  // Configurar debug mode
@@ -455,6 +457,28 @@ export class AnalyticsService {
455
457
  getConsentState() {
456
458
  return this._consentState();
457
459
  }
460
+ /**
461
+ * Establece el consent default ANTES de que Firebase/gtag inicialice.
462
+ * Requerido por Google Consent Mode v2 para no recolectar datos hasta
463
+ * que el usuario tome una decision explicita.
464
+ */
465
+ setConsentModeDefault() {
466
+ // gtag puede no estar disponible aun (Firebase lo carga async).
467
+ // Usamos dataLayer directamente, que si esta disponible desde index.html.
468
+ const w = window;
469
+ const dataLayer = w['dataLayer'] ?? [];
470
+ w['dataLayer'] = dataLayer;
471
+ // push a dataLayer funciona antes de que gtag.js cargue — GA lo consume al cargar.
472
+ dataLayer.push('consent', 'default', {
473
+ analytics_storage: 'denied',
474
+ ad_storage: 'denied',
475
+ ad_user_data: 'denied',
476
+ ad_personalization: 'denied',
477
+ functionality_storage: 'denied',
478
+ security_storage: 'granted',
479
+ wait_for_update: 500,
480
+ });
481
+ }
458
482
  /**
459
483
  * Aplica consent settings a gtag (GA4 Consent Mode v2)
460
484
  */
@@ -602,7 +626,7 @@ export class AnalyticsService {
602
626
  params,
603
627
  sent,
604
628
  };
605
- this._debugHistory.update((history) => {
629
+ this._debugHistory.update(history => {
606
630
  const newHistory = [event, ...history];
607
631
  return newHistory.slice(0, MAX_DEBUG_HISTORY);
608
632
  });
@@ -620,4 +644,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
620
644
  type: Inject,
621
645
  args: [PLATFORM_ID]
622
646
  }] }] });
623
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl0aWNzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2ZpcmViYXNlL2FuYWx5dGljcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQVksV0FBVyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFNUYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sVUFBVSxDQUFDOztBQWVuRCw2REFBNkQ7QUFDN0QsTUFBTSwyQkFBMkIsR0FBRyxtQkFBbUIsQ0FBQztBQUV4RCw4Q0FBOEM7QUFDOUMsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLENBQUM7QUFFOUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUVILE1BQU0sT0FBTyxnQkFBZ0I7SUFrQzNCLFlBQ1UsUUFBa0IsRUFDZSxNQUE2QixFQUN6QyxVQUFrQjtRQUZ2QyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2UsV0FBTSxHQUFOLE1BQU0sQ0FBdUI7UUFDekMsZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQXBDakQsOEVBQThFO1FBQzlFLG1CQUFtQjtRQUNuQiw4RUFBOEU7UUFFN0Qsa0JBQWEsR0FBRyxNQUFNLENBQWU7WUFDcEQsUUFBUSxFQUFFLEVBQUU7WUFDWixTQUFTLEVBQUUsSUFBSTtZQUNmLFVBQVUsRUFBRSxLQUFLO1NBQ2xCLENBQUMsQ0FBQztRQUVjLGlCQUFZLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLGtCQUFhLEdBQUcsTUFBTSxDQUF3QixF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RUFBRTs7MEJBcUM3QixNQUFNOzJCQUFDLHVCQUF1Qjs7MEJBQzlCLE1BQU07MkJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQW5hbHl0aWNzIFNlcnZpY2UgKEZpcmViYXNlIEdBNClcbiAqXG4gKiBTZXJ2aWNpbyBwYXJhIHRyYWNraW5nIGRlIGV2ZW50b3MsIHBhZ2Ugdmlld3MgeSBlcnJvcmVzIGNvbiBGaXJlYmFzZSBBbmFseXRpY3MuXG4gKiBJbnRlZ3JhIGNvbiBlbCBzaXN0ZW1hIGRlIGF1dGggcGFyYSB1c2VyIHByb3BlcnRpZXMgeSByZXNwZXRhIGNvbnNlbnQgbW9kZSBHRFBSLlxuICovXG5cbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIFBMQVRGT1JNX0lELCBzaWduYWwsIGNvbXB1dGVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBbmFseXRpY3MsIGxvZ0V2ZW50LCBzZXRVc2VySWQsIHNldFVzZXJQcm9wZXJ0aWVzIH0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9hbmFseXRpY3MnO1xuXG5pbXBvcnQgeyBWQUxURUNIX0ZJUkVCQVNFX0NPTkZJRyB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IFZhbHRlY2hGaXJlYmFzZUNvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgQW5hbHl0aWNzQ29uZmlnLFxuICBBbmFseXRpY3NEZWJ1Z0V2ZW50LFxuICBBbmFseXRpY3NFdmVudE5hbWUsXG4gIEFuYWx5dGljc0V2ZW50UGFyYW1zLFxuICBBbmFseXRpY3NJdGVtLFxuICBDb25zZW50U2V0dGluZ3MsXG4gIENvbnNlbnRTdGF0ZSxcbiAgRGVidWdFdmVudFR5cGUsXG4gIFRpbWluZ01ldHJpYyxcbiAgVXNlclByb3BlcnRpZXMsXG59IGZyb20gJy4vYW5hbHl0aWNzLXR5cGVzJztcblxuLyoqIEtleSBwb3IgZGVmZWN0byBwYXJhIHBlcnNpc3RpciBjb25zZW50IGVuIGxvY2FsU3RvcmFnZSAqL1xuY29uc3QgREVGQVVMVF9DT05TRU5UX1NUT1JBR0VfS0VZID0gJ2FuYWx5dGljc19jb25zZW50JztcblxuLyoqIE3DoXhpbW8gZGUgZXZlbnRvcyBlbiBoaXN0b3JpYWwgZGUgZGVidWcgKi9cbmNvbnN0IE1BWF9ERUJVR19ISVNUT1JZID0gMTAwO1xuXG4vKipcbiAqIFNlcnZpY2lvIGRlIEZpcmViYXNlIEFuYWx5dGljcyAoR0E0KS5cbiAqXG4gKiBQcm9wb3JjaW9uYSB0cmFja2luZyBkZSBldmVudG9zLCBwYWdlIHZpZXdzLCBlcnJvcmVzIHkgbcOpdHJpY2FzIGRlIHBlcmZvcm1hbmNlLlxuICogU29wb3J0YSBHRFBSIENvbnNlbnQgTW9kZSB5IG1vZG8gZGVidWcgcGFyYSBkZXNhcnJvbGxvLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBAQ29tcG9uZW50KHsuLi59KVxuICogZXhwb3J0IGNsYXNzIFByb2R1Y3RDb21wb25lbnQge1xuICogICBwcml2YXRlIGFuYWx5dGljcyA9IGluamVjdChBbmFseXRpY3NTZXJ2aWNlKTtcbiAqXG4gKiAgIG9uUHVyY2hhc2UocHJvZHVjdDogUHJvZHVjdCkge1xuICogICAgIHRoaXMuYW5hbHl0aWNzLmxvZ0V2ZW50KCdwdXJjaGFzZScsIHtcbiAqICAgICAgIHRyYW5zYWN0aW9uX2lkOiBvcmRlci5pZCxcbiAqICAgICAgIHZhbHVlOiBvcmRlci50b3RhbCxcbiAqICAgICAgIGN1cnJlbmN5OiAnRVVSJ1xuICogICAgIH0pO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBbmFseXRpY3NTZXJ2aWNlIHtcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEVTVEFETyAoU2lnbmFscylcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfY29uc2VudFN0YXRlID0gc2lnbmFsPENvbnNlbnRTdGF0ZT4oe1xuICAgIHNldHRpbmdzOiB7fSxcbiAgICB1cGRhdGVkQXQ6IG51bGwsXG4gICAgaGFzRGVjaWRlZDogZmFsc2UsXG4gIH0pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzRGVidWdNb2RlID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVidWdIaXN0b3J5ID0gc2lnbmFsPEFuYWx5dGljc0RlYnVnRXZlbnRbXT4oW10pO1xuXG4gIC8qKiBFc3RhZG8gZGUgY29uc2VudGltaWVudG8gYWN0dWFsIChyZWFkb25seSkgKi9cbiAgcmVhZG9ubHkgY29uc2VudFN0YXRlID0gdGhpcy5fY29uc2VudFN0YXRlLmFzUmVhZG9ubHkoKTtcblxuICAvKiogSW5kaWNhIHNpIGVzdMOhIGVuIG1vZG8gZGVidWcgKi9cbiAgcmVhZG9ubHkgaXNEZWJ1Z01vZGUgPSB0aGlzLl9pc0RlYnVnTW9kZS5hc1JlYWRvbmx5KCk7XG5cbiAgLyoqIEluZGljYSBzaSBhbmFseXRpY3MgZXN0w6EgaGFiaWxpdGFkbyB5IGZ1bmNpb25hbmRvICovXG4gIHJlYWRvbmx5IGlzRW5hYmxlZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5pc0FuYWx5dGljc1N1cHBvcnRlZCgpICYmIHRoaXMuX2NvbnNlbnRTdGF0ZSgpLnNldHRpbmdzLmFuYWx5dGljcyA9PT0gdHJ1ZTtcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIENPTkZJR1VSQUNJw5NOXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgYW5hbHl0aWNzQ29uZmlnOiBBbmFseXRpY3NDb25maWc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uc2VudFN0b3JhZ2VLZXk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBldmVudFByZWZpeDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHNhbXBsaW5nUmF0ZTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIEBJbmplY3QoVkFMVEVDSF9GSVJFQkFTRV9DT05GSUcpIHByaXZhdGUgY29uZmlnOiBWYWx0ZWNoRmlyZWJhc2VDb25maWcsXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBPYmplY3RcbiAgKSB7XG4gICAgdGhpcy5hbmFseXRpY3NDb25maWcgPSBjb25maWcuYW5hbHl0aWNzQ29uZmlnID8/IHt9O1xuICAgIHRoaXMuY29uc2VudFN0b3JhZ2VLZXkgPVxuICAgICAgdGhpcy5hbmFseXRpY3NDb25maWcuY29uc2VudFN0b3JhZ2VLZXkgPz8gREVGQVVMVF9DT05TRU5UX1NUT1JBR0VfS0VZO1xuICAgIHRoaXMuZXZlbnRQcmVmaXggPSB0aGlzLmFuYWx5dGljc0NvbmZpZy5ldmVudFByZWZpeCA/PyAnJztcbiAgICB0aGlzLnNhbXBsaW5nUmF0ZSA9IHRoaXMuYW5hbHl0aWNzQ29uZmlnLnNhbXBsaW5nUmF0ZSA/PyAxLjA7XG5cbiAgICB0aGlzLmluaXRpYWxpemVBbmFseXRpY3MoKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBJTklDSUFMSVpBQ0nDk05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEluaWNpYWxpemEgZWwgc2VydmljaW8gZGUgYW5hbHl0aWNzXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxpemVBbmFseXRpY3MoKTogdm9pZCB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2FyZ2FyIGNvbnNlbnQgZGVzZGUgbG9jYWxTdG9yYWdlXG4gICAgdGhpcy5sb2FkQ29uc2VudEZyb21TdG9yYWdlKCk7XG5cbiAgICAvLyBDb25maWd1cmFyIGRlYnVnIG1vZGVcbiAgICBjb25zdCBkZWJ1Z01vZGUgPSB0aGlzLmFuYWx5dGljc0NvbmZpZy5kZWJ1Z01vZGUgPz8gZmFsc2U7XG4gICAgdGhpcy5faXNEZWJ1Z01vZGUuc2V0KGRlYnVnTW9kZSk7XG5cbiAgICAvLyBBcGxpY2FyIGNvbnNlbnQgaW5pY2lhbCBhIGd0YWdcbiAgICB0aGlzLmFwcGx5Q29uc2VudFRvR3RhZyh0aGlzLl9jb25zZW50U3RhdGUoKS5zZXR0aW5ncyk7XG5cbiAgICAvLyBTZXRlYXIgdXNlciBwcm9wZXJ0aWVzIHBvciBkZWZlY3RvXG4gICAgaWYgKHRoaXMuYW5hbHl0aWNzQ29uZmlnLmRlZmF1bHRVc2VyUHJvcGVydGllcykge1xuICAgICAgdGhpcy5zZXRVc2VyUHJvcGVydGllcyh0aGlzLmFuYWx5dGljc0NvbmZpZy5kZWZhdWx0VXNlclByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGlmIChkZWJ1Z01vZGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdbQW5hbHl0aWNzXSBJbmljaWFsaXphZG8gZW4gbW9kbyBkZWJ1ZyAtIGV2ZW50b3Mgc2UgbG9ndWVhbiBlbiBjb25zb2xhIFkgc2UgZW52w61hbiBhIEZpcmViYXNlJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgbGEgaW5zdGFuY2lhIGRlIEFuYWx5dGljcyBkZSBmb3JtYSBwZXJlem9zYS5cbiAgICogRXN0byBldml0YSBlbCBlcnJvciBkZSBBUFBfSU5JVElBTElaRVIgZGUgQW5ndWxhckZpcmUuXG4gICAqL1xuICBwcml2YXRlIGdldEFuYWx5dGljc0luc3RhbmNlKCk6IEFuYWx5dGljcyB8IG51bGwge1xuICAgIGlmICghdGhpcy5jb25maWcuZW5hYmxlQW5hbHl0aWNzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IuZ2V0KEFuYWx5dGljcywgbnVsbCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgQW5hbHl0aWNzIGVzdMOhIHNvcG9ydGFkb1xuICAgKi9cbiAgcHJpdmF0ZSBpc0FuYWx5dGljc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY29uZmlnLmVuYWJsZUFuYWx5dGljcykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jb25maWcuZmlyZWJhc2UubWVhc3VyZW1lbnRJZCkge1xuICAgICAgY29uc29sZS53YXJuKCdbQW5hbHl0aWNzXSBtZWFzdXJlbWVudElkIG5vIGNvbmZpZ3VyYWRvIGVuIGZpcmViYXNlIGNvbmZpZycpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIGRlYmUgZW52aWFyIGVsIGV2ZW50byAoc2FtcGxpbmcpXG4gICAqL1xuICBwcml2YXRlIHNob3VsZFNhbXBsZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5zYW1wbGluZ1JhdGUgPj0gMS4wKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgPCB0aGlzLnNhbXBsaW5nUmF0ZTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQQUdFIFZJRVdTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBSZWdpc3RyYSB1biBwYWdlIHZpZXcuXG4gICAqIE5vcm1hbG1lbnRlIHNlIHVzYSBhdXRvbcOhdGljYW1lbnRlIHZpYSBBbmFseXRpY3NSb3V0ZXJUcmFja2VyLlxuICAgKlxuICAgKiBAcGFyYW0gcGFnZVBhdGggLSBSdXRhIGRlIGxhIHDDoWdpbmEgKGVqOiAnL3Byb2R1Y3RzLzEyMycpXG4gICAqIEBwYXJhbSBwYWdlVGl0bGUgLSBUw610dWxvIGRlIGxhIHDDoWdpbmEgKG9wY2lvbmFsKVxuICAgKi9cbiAgbG9nUGFnZVZpZXcocGFnZVBhdGg6IHN0cmluZywgcGFnZVRpdGxlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gU1NSOiBkb2N1bWVudC93aW5kb3cgbm8gZXhpc3RlbiBjb21vIGdsb2JhbHMg4oCUIG9wdGlvbmFsIGNoYWluaW5nIG5vIHByb3RlZ2VcbiAgICAvLyBjb250cmEgUmVmZXJlbmNlRXJyb3IuIENvcnRvY2lyY3VpdG8gZXhwbMOtY2l0byBwb3IgcGxhdGZvcm0uXG4gICAgY29uc3QgaXNCcm93c2VyID0gaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKTtcbiAgICB0aGlzLmxvZ0V2ZW50KCdwYWdlX3ZpZXcnLCB7XG4gICAgICBwYWdlX3BhdGg6IHBhZ2VQYXRoLFxuICAgICAgcGFnZV90aXRsZTogcGFnZVRpdGxlID8/IChpc0Jyb3dzZXIgPyBkb2N1bWVudC50aXRsZSA6IHVuZGVmaW5lZCksXG4gICAgICBwYWdlX2xvY2F0aW9uOiBpc0Jyb3dzZXIgPyB3aW5kb3cubG9jYXRpb24uaHJlZiA6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RyYSB1biBzY3JlZW4gdmlldyAocGFyYSBhcHBzIHRpcG8gU1BBKS5cbiAgICpcbiAgICogQHBhcmFtIHNjcmVlbk5hbWUgLSBOb21icmUgZGVsIHNjcmVlblxuICAgKiBAcGFyYW0gc2NyZWVuQ2xhc3MgLSBDbGFzZSBkZWwgc2NyZWVuIChvcGNpb25hbClcbiAgICovXG4gIGxvZ1NjcmVlblZpZXcoc2NyZWVuTmFtZTogc3RyaW5nLCBzY3JlZW5DbGFzcz86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMubG9nRXZlbnQoJ3NjcmVlbl92aWV3Jywge1xuICAgICAgc2NyZWVuX25hbWU6IHNjcmVlbk5hbWUsXG4gICAgICBzY3JlZW5fY2xhc3M6IHNjcmVlbkNsYXNzLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEVWRU5UT1NcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFJlZ2lzdHJhIHVuIGV2ZW50byB0aXBhZG8gR0E0LlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnROYW1lIC0gTm9tYnJlIGRlbCBldmVudG8gKHRpcGFkbylcbiAgICogQHBhcmFtIHBhcmFtcyAtIFBhcsOhbWV0cm9zIGRlbCBldmVudG8gKHRpcGFkb3Mgc2Vnw7puIGVsIG5vbWJyZSlcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBFdmVudG8gdGlwYWRvIGNvbiBhdXRvY29tcGxldGFkb1xuICAgKiBhbmFseXRpY3MubG9nRXZlbnQoJ2FkZF90b19jYXJ0Jywge1xuICAgKiAgIGl0ZW1faWQ6ICcxMjMnLFxuICAgKiAgIGl0ZW1fbmFtZTogJ1Byb2R1Y3RvJyxcbiAgICogICB2YWx1ZTogOTkuOTksXG4gICAqICAgY3VycmVuY3k6ICdFVVInXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGxvZ0V2ZW50PFQgZXh0ZW5kcyBBbmFseXRpY3NFdmVudE5hbWU+KFxuICAgIGV2ZW50TmFtZTogVCxcbiAgICBwYXJhbXM/OiBBbmFseXRpY3NFdmVudFBhcmFtc1tUXVxuICApOiB2b2lkIHtcbiAgICB0aGlzLnRyYWNrRXZlbnQoZXZlbnROYW1lLCBwYXJhbXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdHJhIHVuIGV2ZW50byBjdXN0b20gY29uIHBhcsOhbWV0cm9zIGxpYnJlcy5cbiAgICogVXNhciBjdWFuZG8gZWwgZXZlbnRvIG5vIGVzdMOhIGVuIGVsIGNhdMOhbG9nbyB0aXBhZG8uXG4gICAqXG4gICAqIEBwYXJhbSBldmVudE5hbWUgLSBOb21icmUgZGVsIGV2ZW50byBjdXN0b21cbiAgICogQHBhcmFtIHBhcmFtcyAtIFBhcsOhbWV0cm9zIGxpYnJlc1xuICAgKi9cbiAgbG9nQ3VzdG9tRXZlbnQoZXZlbnROYW1lOiBzdHJpbmcsIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgY29uc3QgcHJlZml4ZWROYW1lID0gdGhpcy5ldmVudFByZWZpeCArIGV2ZW50TmFtZTtcbiAgICB0aGlzLnRyYWNrRXZlbnQocHJlZml4ZWROYW1lLCBwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEzDs2dpY2EgY29tw7puIHBhcmEgZW52aWFyIGV2ZW50b3NcbiAgICovXG4gIHByaXZhdGUgdHJhY2tFdmVudChldmVudE5hbWU6IHN0cmluZywgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICAvLyBWZXJpZmljYXIgY29uc2VudFxuICAgIGlmICghdGhpcy5fY29uc2VudFN0YXRlKCkuc2V0dGluZ3MuYW5hbHl0aWNzKSB7XG4gICAgICB0aGlzLmFkZFRvRGVidWdIaXN0b3J5KCdldmVudCcsIGV2ZW50TmFtZSwgcGFyYW1zLCBmYWxzZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQXBsaWNhciBzYW1wbGluZ1xuICAgIGlmICghdGhpcy5zaG91bGRTYW1wbGUoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIERlYnVnIG1vZGU6IGxvZ3VlYXIgZW4gY29uc29sYSAocGVybyBzZWd1aXIgZW52aWFuZG8gYSBGaXJlYmFzZSlcbiAgICBpZiAodGhpcy5faXNEZWJ1Z01vZGUoKSkge1xuICAgICAgY29uc29sZS5sb2coYFtBbmFseXRpY3NdIEV2ZW50OiAke2V2ZW50TmFtZX1gLCBwYXJhbXMpO1xuICAgIH1cblxuICAgIC8vIEVudmlhciBhIEZpcmViYXNlXG4gICAgY29uc3QgYW5hbHl0aWNzID0gdGhpcy5nZXRBbmFseXRpY3NJbnN0YW5jZSgpO1xuICAgIGlmIChhbmFseXRpY3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxvZ0V2ZW50KGFuYWx5dGljcywgZXZlbnROYW1lIGFzIHN0cmluZywgcGFyYW1zKTtcbiAgICAgICAgdGhpcy5hZGRUb0RlYnVnSGlzdG9yeSgnZXZlbnQnLCBldmVudE5hbWUsIHBhcmFtcywgdHJ1ZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdbQW5hbHl0aWNzXSBFcnJvciBlbnZpYW5kbyBldmVudG86JywgZXJyb3IpO1xuICAgICAgICB0aGlzLmFkZFRvRGVidWdIaXN0b3J5KCdldmVudCcsIGV2ZW50TmFtZSwgcGFyYW1zLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRkVG9EZWJ1Z0hpc3RvcnkoJ2V2ZW50JywgZXZlbnROYW1lLCBwYXJhbXMsIGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRUNPTU1FUkNFXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBSZWdpc3RyYSB2aXN0YSBkZSBpdGVtXG4gICAqL1xuICBsb2dWaWV3SXRlbShpdGVtOiBBbmFseXRpY3NJdGVtKTogdm9pZCB7XG4gICAgdGhpcy5sb2dFdmVudCgndmlld19pdGVtJywge1xuICAgICAgaXRlbV9pZDogaXRlbS5pdGVtX2lkLFxuICAgICAgaXRlbV9uYW1lOiBpdGVtLml0ZW1fbmFtZSxcbiAgICAgIHZhbHVlOiBpdGVtLnByaWNlLFxuICAgICAgY3VycmVuY3k6IGl0ZW0uY3VycmVuY3ksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0cmEgYWdyZWdhciBhbCBjYXJyaXRvXG4gICAqL1xuICBsb2dBZGRUb0NhcnQoaXRlbTogQW5hbHl0aWNzSXRlbSwgcXVhbnRpdHkgPSAxKTogdm9pZCB7XG4gICAgdGhpcy5sb2dFdmVudCgnYWRkX3RvX2NhcnQnLCB7XG4gICAgICBpdGVtX2lkOiBpdGVtLml0ZW1faWQsXG4gICAgICBpdGVtX25hbWU6IGl0ZW0uaXRlbV9uYW1lLFxuICAgICAgdmFsdWU6IChpdGVtLnByaWNlID8/IDApICogcXVhbnRpdHksXG4gICAgICBjdXJyZW5jeTogaXRlbS5jdXJyZW5jeSxcbiAgICAgIHF1YW50aXR5LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdHJhIGluaWNpbyBkZSBjaGVja291dFxuICAgKi9cbiAgbG9nQmVnaW5DaGVja291dChpdGVtczogQW5hbHl0aWNzSXRlbVtdLCB2YWx1ZTogbnVtYmVyLCBjdXJyZW5jeSA9ICdFVVInKTogdm9pZCB7XG4gICAgdGhpcy5sb2dFdmVudCgnYmVnaW5fY2hlY2tvdXQnLCB7XG4gICAgICB2YWx1ZSxcbiAgICAgIGN1cnJlbmN5LFxuICAgICAgaXRlbXMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0cmEgY29tcHJhIGNvbXBsZXRhZGFcbiAgICovXG4gIGxvZ1B1cmNoYXNlKFxuICAgIHRyYW5zYWN0aW9uSWQ6IHN0cmluZyxcbiAgICBpdGVtczogQW5hbHl0aWNzSXRlbVtdLFxuICAgIHZhbHVlOiBudW1iZXIsXG4gICAgY3VycmVuY3kgPSAnRVVSJ1xuICApOiB2b2lkIHtcbiAgICB0aGlzLmxvZ0V2ZW50KCdwdXJjaGFzZScsIHtcbiAgICAgIHRyYW5zYWN0aW9uX2lkOiB0cmFuc2FjdGlvbklkLFxuICAgICAgdmFsdWUsXG4gICAgICBjdXJyZW5jeSxcbiAgICAgIGl0ZW1zLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFVTRVIgUFJPUEVSVElFU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogU2V0ZWEgZWwgdXNlcklkIHBhcmEgYXNvY2lhciBldmVudG9zIGNvbiBlbCB1c3VhcmlvLlxuICAgKiBMbGFtYWRvIGF1dG9tw6F0aWNhbWVudGUgc2kgZW5hYmxlQXV0aEludGVncmF0aW9uPXRydWUuXG4gICAqXG4gICAqIEBwYXJhbSB1c2VySWQgLSBJRCBkZWwgdXN1YXJpbyBvIG51bGwgcGFyYSBsaW1waWFyXG4gICAqL1xuICBzZXRVc2VySWQodXNlcklkOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzQW5hbHl0aWNzU3VwcG9ydGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEZWJ1ZyBtb2RlOiBsb2d1ZWFyIGVuIGNvbnNvbGEgKHBlcm8gc2VndWlyIGVudmlhbmRvIGEgRmlyZWJhc2UpXG4gICAgaWYgKHRoaXMuX2lzRGVidWdNb2RlKCkpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBbQW5hbHl0aWNzXSBTZXQgdXNlcklkOiAke3VzZXJJZH1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBhbmFseXRpY3MgPSB0aGlzLmdldEFuYWx5dGljc0luc3RhbmNlKCk7XG4gICAgaWYgKGFuYWx5dGljcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0VXNlcklkKGFuYWx5dGljcywgdXNlcklkKTtcbiAgICAgICAgdGhpcy5hZGRUb0RlYnVnSGlzdG9yeSgndXNlcl9wcm9wZXJ0eScsICd1c2VyX2lkJywgeyB1c2VySWQgfSwgdHJ1ZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdbQW5hbHl0aWNzXSBFcnJvciBzZXRlYW5kbyB1c2VySWQ6JywgZXJyb3IpO1xuICAgICAgICB0aGlzLmFkZFRvRGVidWdIaXN0b3J5KCd1c2VyX3Byb3BlcnR5JywgJ3VzZXJfaWQnLCB7IHVzZXJJZCB9LCBmYWxzZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRkVG9EZWJ1Z0hpc3RvcnkoJ3VzZXJfcHJvcGVydHknLCAndXNlcl9pZCcsIHsgdXNlcklkIH0sIGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0ZWEgcHJvcGllZGFkZXMgZGVsIHVzdWFyaW8gcGFyYSBzZWdtZW50YWNpw7NuLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcGVydGllcyAtIFByb3BpZWRhZGVzIGtleS12YWx1ZVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGFuYWx5dGljcy5zZXRVc2VyUHJvcGVydGllcyh7XG4gICAqICAgc3Vic2NyaXB0aW9uX3RpZXI6ICdwcmVtaXVtJyxcbiAgICogICBwcmVmZXJyZWRfbGFuZ3VhZ2U6ICdlcydcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgc2V0VXNlclByb3BlcnRpZXMocHJvcGVydGllczogVXNlclByb3BlcnRpZXMgfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPik6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0FuYWx5dGljc1N1cHBvcnRlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRGVidWcgbW9kZTogbG9ndWVhciBlbiBjb25zb2xhIChwZXJvIHNlZ3VpciBlbnZpYW5kbyBhIEZpcmViYXNlKVxuICAgIGlmICh0aGlzLl9pc0RlYnVnTW9kZSgpKSB7XG4gICAgICBjb25zb2xlLmxvZygnW0FuYWx5dGljc10gU2V0IHVzZXIgcHJvcGVydGllczonLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBjb25zdCBhbmFseXRpY3MgPSB0aGlzLmdldEFuYWx5dGljc0luc3RhbmNlKCk7XG4gICAgaWYgKGFuYWx5dGljcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gQ29udmVydGlyIGEgUmVjb3JkPHN0cmluZywgc3RyaW5nPiBwYXJhIEZpcmViYXNlXG4gICAgICAgIGNvbnN0IHN0cmluZ1Byb3BzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BlcnRpZXMpKSB7XG4gICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN0cmluZ1Byb3BzW2tleV0gPSBTdHJpbmcodmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzZXRVc2VyUHJvcGVydGllcyhhbmFseXRpY3MsIHN0cmluZ1Byb3BzKTtcbiAgICAgICAgdGhpcy5hZGRUb0RlYnVnSGlzdG9yeSgndXNlcl9wcm9wZXJ0eScsICdwcm9wZXJ0aWVzJywgcHJvcGVydGllcywgdHJ1ZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdbQW5hbHl0aWNzXSBFcnJvciBzZXRlYW5kbyB1c2VyIHByb3BlcnRpZXM6JywgZXJyb3IpO1xuICAgICAgICB0aGlzLmFkZFRvRGVidWdIaXN0b3J5KCd1c2VyX3Byb3BlcnR5JywgJ3Byb3BlcnRpZXMnLCBwcm9wZXJ0aWVzLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRkVG9EZWJ1Z0hpc3RvcnkoJ3VzZXJfcHJvcGVydHknLCAncHJvcGVydGllcycsIHByb3BlcnRpZXMsIGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0ZWEgbGEgb3JnYW5pemFjacOzbiBhY3RpdmEgKG11bHRpLXRlbmFudCkuXG4gICAqIExsYW1hZG8gYXV0b23DoXRpY2FtZW50ZSBzaSBlbmFibGVBdXRoSW50ZWdyYXRpb249dHJ1ZS5cbiAgICpcbiAgICogQHBhcmFtIG9yZ0lkIC0gSUQgZGUgbGEgb3JnYW5pemFjacOzbiBvIG51bGxcbiAgICovXG4gIHNldEFjdGl2ZU9yZ2FuaXphdGlvbihvcmdJZDogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmIChvcmdJZCkge1xuICAgICAgdGhpcy5zZXRVc2VyUHJvcGVydGllcyh7IGFjdGl2ZV9vcmdhbml6YXRpb246IG9yZ0lkIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBFUlJPUiBUUkFDS0lOR1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogUmVnaXN0cmEgdW4gZXJyb3IgcGFyYSB0cmFja2luZy5cbiAgICogSW50ZWdyYSBhdXRvbcOhdGljYW1lbnRlIGNvbiBBbmd1bGFyIEVycm9ySGFuZGxlciBzaSBlbmFibGVFcnJvclRyYWNraW5nPXRydWUuXG4gICAqXG4gICAqIEBwYXJhbSBlcnJvciAtIEVycm9yIG8gbWVuc2FqZSBkZSBlcnJvclxuICAgKiBAcGFyYW0gY29udGV4dCAtIENvbnRleHRvIGFkaWNpb25hbFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIHRyeSB7XG4gICAqICAgYXdhaXQgcmlza3lPcGVyYXRpb24oKTtcbiAgICogfSBjYXRjaCAoZXJyb3IpIHtcbiAgICogICBhbmFseXRpY3MubG9nRXJyb3IoZXJyb3IsIHsgY29udGV4dDogJ2NoZWNrb3V0X2Zsb3cnIH0pO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgbG9nRXJyb3IoZXJyb3I6IEVycm9yIHwgc3RyaW5nLCBjb250ZXh0PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHZvaWQge1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogZXJyb3I7XG4gICAgY29uc3QgZXJyb3JTdGFjayA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5zdGFjayA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBlcnJvclR5cGUgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubmFtZSA6ICdFcnJvcic7XG5cbiAgICB0aGlzLmxvZ0V2ZW50KCdlcnJvcl9vY2N1cnJlZCcsIHtcbiAgICAgIGVycm9yX3R5cGU6IGVycm9yVHlwZSxcbiAgICAgIGVycm9yX21lc3NhZ2U6IGVycm9yTWVzc2FnZS5zdWJzdHJpbmcoMCwgMTAwKSwgLy8gTGltaXRhciBsb25naXR1ZFxuICAgICAgZXJyb3Jfc3RhY2s6IGVycm9yU3RhY2s/LnN1YnN0cmluZygwLCA1MDApLFxuICAgICAgY29udGV4dDogY29udGV4dCA/IEpTT04uc3RyaW5naWZ5KGNvbnRleHQpIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdHJhIHVuIGVycm9yIGZhdGFsIChjcmFzaC1sZXZlbCkuXG4gICAqL1xuICBsb2dGYXRhbEVycm9yKGVycm9yOiBFcnJvciwgY29udGV4dD86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiB2b2lkIHtcbiAgICB0aGlzLmxvZ0Vycm9yKGVycm9yLCB7IC4uLmNvbnRleHQsIHNldmVyaXR5OiAnZmF0YWwnIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIENPTlNFTlQgTU9ERSAoR0RQUilcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEFjdHVhbGl6YSBlbCBlc3RhZG8gZGUgY29uc2VudGltaWVudG8gZGVsIHVzdWFyaW8uXG4gICAqIEFmZWN0YSBxdcOpIGRhdG9zIHNlIHJlY29sZWN0YW4geSBlbnbDrWFuLlxuICAgKlxuICAgKiBAcGFyYW0gY29uc2VudCAtIFNldHRpbmdzIGRlIGNvbnNlbnRpbWllbnRvXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gVXN1YXJpbyBhY2VwdGEgdG9kb1xuICAgKiBhbmFseXRpY3MudXBkYXRlQ29uc2VudCh7IGFuYWx5dGljczogdHJ1ZSwgYWR2ZXJ0aXNpbmc6IHRydWUgfSk7XG4gICAqXG4gICAqIC8vIFVzdWFyaW8gcmVjaGF6YSBwdWJsaWNpZGFkXG4gICAqIGFuYWx5dGljcy51cGRhdGVDb25zZW50KHsgYW5hbHl0aWNzOiB0cnVlLCBhZHZlcnRpc2luZzogZmFsc2UgfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgdXBkYXRlQ29uc2VudChjb25zZW50OiBDb25zZW50U2V0dGluZ3MpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdTdGF0ZTogQ29uc2VudFN0YXRlID0ge1xuICAgICAgc2V0dGluZ3M6IHsgLi4udGhpcy5fY29uc2VudFN0YXRlKCkuc2V0dGluZ3MsIC4uLmNvbnNlbnQgfSxcbiAgICAgIHVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgIGhhc0RlY2lkZWQ6IHRydWUsXG4gICAgfTtcblxuICAgIHRoaXMuX2NvbnNlbnRTdGF0ZS5zZXQobmV3U3RhdGUpO1xuICAgIHRoaXMuc2F2ZUNvbnNlbnRUb1N0b3JhZ2UobmV3U3RhdGUpO1xuICAgIHRoaXMuYXBwbHlDb25zZW50VG9HdGFnKG5ld1N0YXRlLnNldHRpbmdzKTtcblxuICAgIHRoaXMuYWRkVG9EZWJ1Z0hpc3RvcnkoJ2NvbnNlbnQnLCAndXBkYXRlJywgY29uc2VudCBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogRGVuaWVnYSB0b2RvIGNvbnNlbnRpbWllbnRvLlxuICAgKi9cbiAgZGVueUFsbENvbnNlbnQoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVDb25zZW50KHtcbiAgICAgIGFuYWx5dGljczogZmFsc2UsXG4gICAgICBhZHZlcnRpc2luZzogZmFsc2UsXG4gICAgICBmdW5jdGlvbmFsaXR5OiBmYWxzZSxcbiAgICAgIHNlY3VyaXR5OiB0cnVlLCAvLyBTaWVtcHJlIHBlcm1pdGlkb1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjZXB0YSB0b2RvIGNvbnNlbnRpbWllbnRvLlxuICAgKi9cbiAgZ3JhbnRBbGxDb25zZW50KCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlQ29uc2VudCh7XG4gICAgICBhbmFseXRpY3M6IHRydWUsXG4gICAgICBhZHZlcnRpc2luZzogdHJ1ZSxcbiAgICAgIGZ1bmN0aW9uYWxpdHk6IHRydWUsXG4gICAgICBzZWN1cml0eTogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGVsIGVzdGFkbyBhY3R1YWwgZGUgY29uc2VudGltaWVudG8uXG4gICAqL1xuICBnZXRDb25zZW50U3RhdGUoKTogQ29uc2VudFN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5fY29uc2VudFN0YXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogQXBsaWNhIGNvbnNlbnQgc2V0dGluZ3MgYSBndGFnIChHQTQgQ29uc2VudCBNb2RlIHYyKVxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseUNvbnNlbnRUb0d0YWcoc2V0dGluZ3M6IENvbnNlbnRTZXR0aW5ncyk6IHZvaWQge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGd0YWcgPSAod2luZG93IGFzIGFueSkuZ3RhZztcbiAgICBpZiAodHlwZW9mIGd0YWcgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgZ3RhZygnY29uc2VudCcsICd1cGRhdGUnLCB7XG4gICAgICAgIGFuYWx5dGljc19zdG9yYWdlOiBzZXR0aW5ncy5hbmFseXRpY3MgPyAnZ3JhbnRlZCcgOiAnZGVuaWVkJyxcbiAgICAgICAgYWRfc3RvcmFnZTogc2V0dGluZ3MuYWR2ZXJ0aXNpbmcgPyAnZ3JhbnRlZCcgOiAnZGVuaWVkJyxcbiAgICAgICAgYWRfdXNlcl9kYXRhOiBzZXR0aW5ncy5hZHZlcnRpc2luZyA/ICdncmFudGVkJyA6ICdkZW5pZWQnLFxuICAgICAgICBhZF9wZXJzb25hbGl6YXRpb246IHNldHRpbmdzLmFkdmVydGlzaW5nID8gJ2dyYW50ZWQnIDogJ2RlbmllZCcsXG4gICAgICAgIGZ1bmN0aW9uYWxpdHlfc3RvcmFnZTogc2V0dGluZ3MuZnVuY3Rpb25hbGl0eSA/ICdncmFudGVkJyA6ICdkZW5pZWQnLFxuICAgICAgICBzZWN1cml0eV9zdG9yYWdlOiBzZXR0aW5ncy5zZWN1cml0eSAhPT0gZmFsc2UgPyAnZ3JhbnRlZCcgOiAnZGVuaWVkJyxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tBbmFseXRpY3NdIEVycm9yIGFwbGljYW5kbyBjb25zZW50IGEgZ3RhZzonLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhcmdhIGNvbnNlbnQgZGVzZGUgbG9jYWxTdG9yYWdlXG4gICAqL1xuICBwcml2YXRlIGxvYWRDb25zZW50RnJvbVN0b3JhZ2UoKTogdm9pZCB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuY29uc2VudFN0b3JhZ2VLZXkpO1xuICAgICAgaWYgKHN0b3JlZCkge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHN0b3JlZCkgYXMgQ29uc2VudFN0YXRlO1xuICAgICAgICB0aGlzLl9jb25zZW50U3RhdGUuc2V0KHtcbiAgICAgICAgICAuLi5wYXJzZWQsXG4gICAgICAgICAgdXBkYXRlZEF0OiBwYXJzZWQudXBkYXRlZEF0ID8gbmV3IERhdGUocGFyc2VkLnVwZGF0ZWRBdCkgOiBudWxsLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5hbmFseXRpY3NDb25maWcuZGVmYXVsdENvbnNlbnRHcmFudGVkKSB7XG4gICAgICAgIC8vIEF1dG8tZ3JhbnQgYWxsIGNvbnNlbnQgcGFyYSBkZXNhcnJvbGxvL3Rlc3RpbmdcbiAgICAgICAgdGhpcy5fY29uc2VudFN0YXRlLnNldCh7XG4gICAgICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgICAgIGFuYWx5dGljczogdHJ1ZSxcbiAgICAgICAgICAgIGFkdmVydGlzaW5nOiB0cnVlLFxuICAgICAgICAgICAgZnVuY3Rpb25hbGl0eTogdHJ1ZSxcbiAgICAgICAgICAgIHNlY3VyaXR5OiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIGhhc0RlY2lkZWQ6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmFuYWx5dGljc0NvbmZpZy5kZWZhdWx0Q29uc2VudCkge1xuICAgICAgICAvLyBBcGxpY2FyIGNvbnNlbnQgcG9yIGRlZmVjdG8gc2kgbm8gaGF5IGd1YXJkYWRvXG4gICAgICAgIHRoaXMuX2NvbnNlbnRTdGF0ZS5zZXQoe1xuICAgICAgICAgIHNldHRpbmdzOiB0aGlzLmFuYWx5dGljc0NvbmZpZy5kZWZhdWx0Q29uc2VudCxcbiAgICAgICAgICB1cGRhdGVkQXQ6IG51bGwsXG4gICAgICAgICAgaGFzRGVjaWRlZDogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tBbmFseXRpY3NdIEVycm9yIGNhcmdhbmRvIGNvbnNlbnQ6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHdWFyZGEgY29uc2VudCBlbiBsb2NhbFN0b3JhZ2VcbiAgICovXG4gIHByaXZhdGUgc2F2ZUNvbnNlbnRUb1N0b3JhZ2Uoc3RhdGU6IENvbnNlbnRTdGF0ZSk6IHZvaWQge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmNvbnNlbnRTdG9yYWdlS2V5LCBKU09OLnN0cmluZ2lmeShzdGF0ZSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tBbmFseXRpY3NdIEVycm9yIGd1YXJkYW5kbyBjb25zZW50OicsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVElNSU5HIC8gUEVSRk9STUFOQ0VcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFJlZ2lzdHJhIHVuYSBtw6l0cmljYSBkZSB0aW1pbmcvcGVyZm9ybWFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIC0gTm9tYnJlIGRlIGxhIG3DqXRyaWNhXG4gICAqIEBwYXJhbSB2YWx1ZU1zIC0gVmFsb3IgZW4gbWlsaXNlZ3VuZG9zXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBQYXLDoW1ldHJvcyBhZGljaW9uYWxlc1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAqIGF3YWl0IGxvYWREYXRhKCk7XG4gICAqIGFuYWx5dGljcy5sb2dUaW1pbmcoJ2RhdGFfbG9hZCcsIHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnQsIHtcbiAgICogICBjYXRlZ29yeTogJ2FwaScsXG4gICAqICAgZW5kcG9pbnQ6ICcvcHJvZHVjdHMnXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGxvZ1RpbWluZyhuYW1lOiBzdHJpbmcsIHZhbHVlTXM6IG51bWJlciwgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHZvaWQge1xuICAgIHRoaXMubG9nRXZlbnQoJ3BlcmZvcm1hbmNlX21ldHJpYycsIHtcbiAgICAgIG1ldHJpY19uYW1lOiBuYW1lLFxuICAgICAgdmFsdWU6IE1hdGgucm91bmQodmFsdWVNcyksXG4gICAgICB1bml0OiAnbXMnLFxuICAgICAgLi4ucGFyYW1zLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIERFQlVHXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBIYWJpbGl0YS9kZXNoYWJpbGl0YSBtb2RvIGRlYnVnLlxuICAgKiBFbiBkZWJ1ZzogbG9nZWEgZXZlbnRvcyBhIGNvbnNvbGEgYWRlbcOhcyBkZSBlbnZpYXJsb3MgYSBGaXJlYmFzZS5cbiAgICovXG4gIHNldERlYnVnTW9kZShlbmFibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5faXNEZWJ1Z01vZGUuc2V0KGVuYWJsZWQpO1xuICAgIGNvbnNvbGUubG9nKGBbQW5hbHl0aWNzXSBEZWJ1ZyBtb2RlOiAke2VuYWJsZWQgPyAnT04nIDogJ09GRid9YCk7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBoaXN0b3JpYWwgZGUgZXZlbnRvcyAoc29sbyBlbiBkZWJ1ZyBtb2RlKS5cbiAgICogw5p0aWwgcGFyYSB0ZXN0aW5nIHkgZGVzYXJyb2xsby5cbiAgICovXG4gIGdldERlYnVnSGlzdG9yeSgpOiBBbmFseXRpY3NEZWJ1Z0V2ZW50W10ge1xuICAgIHJldHVybiB0aGlzLl9kZWJ1Z0hpc3RvcnkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaW1waWEgaGlzdG9yaWFsIGRlIGRlYnVnLlxuICAgKi9cbiAgY2xlYXJEZWJ1Z0hpc3RvcnkoKTogdm9pZCB7XG4gICAgdGhpcy5fZGVidWdIaXN0b3J5LnNldChbXSk7XG4gIH1cblxuICAvKipcbiAgICogQWdyZWdhIGV2ZW50byBhbCBoaXN0b3JpYWwgZGUgZGVidWdcbiAgICovXG4gIHByaXZhdGUgYWRkVG9EZWJ1Z0hpc3RvcnkoXG4gICAgdHlwZTogRGVidWdFdmVudFR5cGUsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIHNlbnQgPSBmYWxzZVxuICApOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2lzRGVidWdNb2RlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBldmVudDogQW5hbHl0aWNzRGVidWdFdmVudCA9IHtcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKSxcbiAgICAgIHR5cGUsXG4gICAgICBuYW1lLFxuICAgICAgcGFyYW1zLFxuICAgICAgc2VudCxcbiAgICB9O1xuXG4gICAgdGhpcy5fZGVidWdIaXN0b3J5LnVwZGF0ZSgoaGlzdG9yeSkgPT4ge1xuICAgICAgY29uc3QgbmV3SGlzdG9yeSA9IFtldmVudCwgLi4uaGlzdG9yeV07XG4gICAgICByZXR1cm4gbmV3SGlzdG9yeS5zbGljZSgwLCBNQVhfREVCVUdfSElTVE9SWSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
647
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl0aWNzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2ZpcmViYXNlL2FuYWx5dGljcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQVksV0FBVyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFNUYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sVUFBVSxDQUFDOztBQWVuRCw2REFBNkQ7QUFDN0QsTUFBTSwyQkFBMkIsR0FBRyxtQkFBbUIsQ0FBQztBQUV4RCw4Q0FBOEM7QUFDOUMsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLENBQUM7QUFFOUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUVILE1BQU0sT0FBTyxnQkFBZ0I7SUFrQzNCLFlBQ1UsUUFBa0IsRUFDZSxNQUE2QixFQUN6QyxVQUFrQjtRQUZ2QyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2UsV0FBTSxHQUFOLE1BQU0sQ0FBdUI7UUFDekMsZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQXBDakQsOEVBQThFO1FBQzlFLG1CQUFtQjtRQUNuQiw4RUFBOEU7UUFFN0Qsa0JBQWEsR0FBRyxNQUFNLENBQWU7WUFDcEQsUUFBUSxFQUFFLEVBQUU7WUFDWixTQUFTLEVBQUUsSUFBSTtZQUNmLFVBQVUsRUFBRSxLQUFLO1NBQ2xCLENBQUMsQ0FBQztRQUVjLGlCQUFZLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLGtCQUFhLEdBQUcsTUFBTSxDQUF3QixF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QUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztZQUN6QixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUF3QjtZQUNqQyxTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUU7WUFDckIsSUFBSTtZQUNKLElBQUk7WUFDSixNQUFNO1lBQ04sSUFBSTtTQUNMLENBQUM7UUFFRixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNsQyxNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZDLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBM3FCVSxnQkFBZ0IsMENBb0NqQix1QkFBdUIsYUFDdkIsV0FBVzttSEFyQ1YsZ0JBQWdCLGNBREgsTUFBTTs7NEZBQ25CLGdCQUFnQjtrQkFENUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQXFDN0IsTUFBTTsyQkFBQyx1QkFBdUI7OzBCQUM5QixNQUFNOzJCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFuYWx5dGljcyBTZXJ2aWNlIChGaXJlYmFzZSBHQTQpXG4gKlxuICogU2VydmljaW8gcGFyYSB0cmFja2luZyBkZSBldmVudG9zLCBwYWdlIHZpZXdzIHkgZXJyb3JlcyBjb24gRmlyZWJhc2UgQW5hbHl0aWNzLlxuICogSW50ZWdyYSBjb24gZWwgc2lzdGVtYSBkZSBhdXRoIHBhcmEgdXNlciBwcm9wZXJ0aWVzIHkgcmVzcGV0YSBjb25zZW50IG1vZGUgR0RQUi5cbiAqL1xuXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yLCBQTEFURk9STV9JRCwgc2lnbmFsLCBjb21wdXRlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQW5hbHl0aWNzLCBsb2dFdmVudCwgc2V0VXNlcklkLCBzZXRVc2VyUHJvcGVydGllcyB9IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvYW5hbHl0aWNzJztcblxuaW1wb3J0IHsgVkFMVEVDSF9GSVJFQkFTRV9DT05GSUcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBWYWx0ZWNoRmlyZWJhc2VDb25maWcgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7XG4gIEFuYWx5dGljc0NvbmZpZyxcbiAgQW5hbHl0aWNzRGVidWdFdmVudCxcbiAgQW5hbHl0aWNzRXZlbnROYW1lLFxuICBBbmFseXRpY3NFdmVudFBhcmFtcyxcbiAgQW5hbHl0aWNzSXRlbSxcbiAgQ29uc2VudFNldHRpbmdzLFxuICBDb25zZW50U3RhdGUsXG4gIERlYnVnRXZlbnRUeXBlLFxuICBUaW1pbmdNZXRyaWMsXG4gIFVzZXJQcm9wZXJ0aWVzLFxufSBmcm9tICcuL2FuYWx5dGljcy10eXBlcyc7XG5cbi8qKiBLZXkgcG9yIGRlZmVjdG8gcGFyYSBwZXJzaXN0aXIgY29uc2VudCBlbiBsb2NhbFN0b3JhZ2UgKi9cbmNvbnN0IERFRkFVTFRfQ09OU0VOVF9TVE9SQUdFX0tFWSA9ICdhbmFseXRpY3NfY29uc2VudCc7XG5cbi8qKiBNw6F4aW1vIGRlIGV2ZW50b3MgZW4gaGlzdG9yaWFsIGRlIGRlYnVnICovXG5jb25zdCBNQVhfREVCVUdfSElTVE9SWSA9IDEwMDtcblxuLyoqXG4gKiBTZXJ2aWNpbyBkZSBGaXJlYmFzZSBBbmFseXRpY3MgKEdBNCkuXG4gKlxuICogUHJvcG9yY2lvbmEgdHJhY2tpbmcgZGUgZXZlbnRvcywgcGFnZSB2aWV3cywgZXJyb3JlcyB5IG3DqXRyaWNhcyBkZSBwZXJmb3JtYW5jZS5cbiAqIFNvcG9ydGEgR0RQUiBDb25zZW50IE1vZGUgeSBtb2RvIGRlYnVnIHBhcmEgZGVzYXJyb2xsby5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogQENvbXBvbmVudCh7Li4ufSlcbiAqIGV4cG9ydCBjbGFzcyBQcm9kdWN0Q29tcG9uZW50IHtcbiAqICAgcHJpdmF0ZSBhbmFseXRpY3MgPSBpbmplY3QoQW5hbHl0aWNzU2VydmljZSk7XG4gKlxuICogICBvblB1cmNoYXNlKHByb2R1Y3Q6IFByb2R1Y3QpIHtcbiAqICAgICB0aGlzLmFuYWx5dGljcy5sb2dFdmVudCgncHVyY2hhc2UnLCB7XG4gKiAgICAgICB0cmFuc2FjdGlvbl9pZDogb3JkZXIuaWQsXG4gKiAgICAgICB2YWx1ZTogb3JkZXIudG90YWwsXG4gKiAgICAgICBjdXJyZW5jeTogJ0VVUidcbiAqICAgICB9KTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQW5hbHl0aWNzU2VydmljZSB7XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBFU1RBRE8gKFNpZ25hbHMpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbnNlbnRTdGF0ZSA9IHNpZ25hbDxDb25zZW50U3RhdGU+KHtcbiAgICBzZXR0aW5nczoge30sXG4gICAgdXBkYXRlZEF0OiBudWxsLFxuICAgIGhhc0RlY2lkZWQ6IGZhbHNlLFxuICB9KTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9pc0RlYnVnTW9kZSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RlYnVnSGlzdG9yeSA9IHNpZ25hbDxBbmFseXRpY3NEZWJ1Z0V2ZW50W10+KFtdKTtcblxuICAvKiogRXN0YWRvIGRlIGNvbnNlbnRpbWllbnRvIGFjdHVhbCAocmVhZG9ubHkpICovXG4gIHJlYWRvbmx5IGNvbnNlbnRTdGF0ZSA9IHRoaXMuX2NvbnNlbnRTdGF0ZS5hc1JlYWRvbmx5KCk7XG5cbiAgLyoqIEluZGljYSBzaSBlc3TDoSBlbiBtb2RvIGRlYnVnICovXG4gIHJlYWRvbmx5IGlzRGVidWdNb2RlID0gdGhpcy5faXNEZWJ1Z01vZGUuYXNSZWFkb25seSgpO1xuXG4gIC8qKiBJbmRpY2Egc2kgYW5hbHl0aWNzIGVzdMOhIGhhYmlsaXRhZG8geSBmdW5jaW9uYW5kbyAqL1xuICByZWFkb25seSBpc0VuYWJsZWQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSAmJiB0aGlzLl9jb25zZW50U3RhdGUoKS5zZXR0aW5ncy5hbmFseXRpY3MgPT09IHRydWU7XG4gIH0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBDT05GSUdVUkFDScOTTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBwcml2YXRlIHJlYWRvbmx5IGFuYWx5dGljc0NvbmZpZzogQW5hbHl0aWNzQ29uZmlnO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbnNlbnRTdG9yYWdlS2V5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRQcmVmaXg6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBzYW1wbGluZ1JhdGU6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBASW5qZWN0KFZBTFRFQ0hfRklSRUJBU0VfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogVmFsdGVjaEZpcmViYXNlQ29uZmlnLFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogT2JqZWN0XG4gICkge1xuICAgIHRoaXMuYW5hbHl0aWNzQ29uZmlnID0gY29uZmlnLmFuYWx5dGljc0NvbmZpZyA/PyB7fTtcbiAgICB0aGlzLmNvbnNlbnRTdG9yYWdlS2V5ID0gdGhpcy5hbmFseXRpY3NDb25maWcuY29uc2VudFN0b3JhZ2VLZXkgPz8gREVGQVVMVF9DT05TRU5UX1NUT1JBR0VfS0VZO1xuICAgIHRoaXMuZXZlbnRQcmVmaXggPSB0aGlzLmFuYWx5dGljc0NvbmZpZy5ldmVudFByZWZpeCA/PyAnJztcbiAgICB0aGlzLnNhbXBsaW5nUmF0ZSA9IHRoaXMuYW5hbHl0aWNzQ29uZmlnLnNhbXBsaW5nUmF0ZSA/PyAxLjA7XG5cbiAgICB0aGlzLmluaXRpYWxpemVBbmFseXRpY3MoKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBJTklDSUFMSVpBQ0nDk05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEluaWNpYWxpemEgZWwgc2VydmljaW8gZGUgYW5hbHl0aWNzXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxpemVBbmFseXRpY3MoKTogdm9pZCB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ29uc2VudCBNb2RlIHYyOiBkZWZhdWx0IGRlbmllZCBBTlRFUyBkZSBxdWUgRmlyZWJhc2UvZ3RhZyBpbmljaWFsaWNlLlxuICAgIC8vIEdhcmFudGl6YSBxdWUgbm8gc2UgcmVjb2xlY3RhbiBkYXRvcyBoYXN0YSBxdWUgZWwgdXN1YXJpbyBkZWNpZGEuXG4gICAgdGhpcy5zZXRDb25zZW50TW9kZURlZmF1bHQoKTtcblxuICAgIC8vIENhcmdhciBjb25zZW50IGRlc2RlIGxvY2FsU3RvcmFnZVxuICAgIHRoaXMubG9hZENvbnNlbnRGcm9tU3RvcmFnZSgpO1xuXG4gICAgLy8gQ29uZmlndXJhciBkZWJ1ZyBtb2RlXG4gICAgY29uc3QgZGVidWdNb2RlID0gdGhpcy5hbmFseXRpY3NDb25maWcuZGVidWdNb2RlID8/IGZhbHNlO1xuICAgIHRoaXMuX2lzRGVidWdNb2RlLnNldChkZWJ1Z01vZGUpO1xuXG4gICAgLy8gQXBsaWNhciBjb25zZW50IGluaWNpYWwgYSBndGFnXG4gICAgdGhpcy5hcHBseUNvbnNlbnRUb0d0YWcodGhpcy5fY29uc2VudFN0YXRlKCkuc2V0dGluZ3MpO1xuXG4gICAgLy8gU2V0ZWFyIHVzZXIgcHJvcGVydGllcyBwb3IgZGVmZWN0b1xuICAgIGlmICh0aGlzLmFuYWx5dGljc0NvbmZpZy5kZWZhdWx0VXNlclByb3BlcnRpZXMpIHtcbiAgICAgIHRoaXMuc2V0VXNlclByb3BlcnRpZXModGhpcy5hbmFseXRpY3NDb25maWcuZGVmYXVsdFVzZXJQcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBpZiAoZGVidWdNb2RlKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgJ1tBbmFseXRpY3NdIEluaWNpYWxpemFkbyBlbiBtb2RvIGRlYnVnIC0gZXZlbnRvcyBzZSBsb2d1ZWFuIGVuIGNvbnNvbGEgWSBzZSBlbnbDrWFuIGEgRmlyZWJhc2UnXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGxhIGluc3RhbmNpYSBkZSBBbmFseXRpY3MgZGUgZm9ybWEgcGVyZXpvc2EuXG4gICAqIEVzdG8gZXZpdGEgZWwgZXJyb3IgZGUgQVBQX0lOSVRJQUxJWkVSIGRlIEFuZ3VsYXJGaXJlLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRBbmFseXRpY3NJbnN0YW5jZSgpOiBBbmFseXRpY3MgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmVuYWJsZUFuYWx5dGljcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLmluamVjdG9yLmdldChBbmFseXRpY3MsIG51bGwpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIEFuYWx5dGljcyBlc3TDoSBzb3BvcnRhZG9cbiAgICovXG4gIHByaXZhdGUgaXNBbmFseXRpY3NTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5lbmFibGVBbmFseXRpY3MpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY29uZmlnLmZpcmViYXNlLm1lYXN1cmVtZW50SWQpIHtcbiAgICAgIGNvbnNvbGUud2FybignW0FuYWx5dGljc10gbWVhc3VyZW1lbnRJZCBubyBjb25maWd1cmFkbyBlbiBmaXJlYmFzZSBjb25maWcnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzaSBkZWJlIGVudmlhciBlbCBldmVudG8gKHNhbXBsaW5nKVxuICAgKi9cbiAgcHJpdmF0ZSBzaG91bGRTYW1wbGUoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuc2FtcGxpbmdSYXRlID49IDEuMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBNYXRoLnJhbmRvbSgpIDwgdGhpcy5zYW1wbGluZ1JhdGU7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUEFHRSBWSUVXU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogUmVnaXN0cmEgdW4gcGFnZSB2aWV3LlxuICAgKiBOb3JtYWxtZW50ZSBzZSB1c2EgYXV0b23DoXRpY2FtZW50ZSB2aWEgQW5hbHl0aWNzUm91dGVyVHJhY2tlci5cbiAgICpcbiAgICogQHBhcmFtIHBhZ2VQYXRoIC0gUnV0YSBkZSBsYSBww6FnaW5hIChlajogJy9wcm9kdWN0cy8xMjMnKVxuICAgKiBAcGFyYW0gcGFnZVRpdGxlIC0gVMOtdHVsbyBkZSBsYSBww6FnaW5hIChvcGNpb25hbClcbiAgICovXG4gIGxvZ1BhZ2VWaWV3KHBhZ2VQYXRoOiBzdHJpbmcsIHBhZ2VUaXRsZT86IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIFNTUjogZG9jdW1lbnQvd2luZG93IG5vIGV4aXN0ZW4gY29tbyBnbG9iYWxzIOKAlCBvcHRpb25hbCBjaGFpbmluZyBubyBwcm90ZWdlXG4gICAgLy8gY29udHJhIFJlZmVyZW5jZUVycm9yLiBDb3J0b2NpcmN1aXRvIGV4cGzDrWNpdG8gcG9yIHBsYXRmb3JtLlxuICAgIGNvbnN0IGlzQnJvd3NlciA9IGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCk7XG4gICAgdGhpcy5sb2dFdmVudCgncGFnZV92aWV3Jywge1xuICAgICAgcGFnZV9wYXRoOiBwYWdlUGF0aCxcbiAgICAgIHBhZ2VfdGl0bGU6IHBhZ2VUaXRsZSA/PyAoaXNCcm93c2VyID8gZG9jdW1lbnQudGl0bGUgOiB1bmRlZmluZWQpLFxuICAgICAgcGFnZV9sb2NhdGlvbjogaXNCcm93c2VyID8gd2luZG93LmxvY2F0aW9uLmhyZWYgOiB1bmRlZmluZWQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0cmEgdW4gc2NyZWVuIHZpZXcgKHBhcmEgYXBwcyB0aXBvIFNQQSkuXG4gICAqXG4gICAqIEBwYXJhbSBzY3JlZW5OYW1lIC0gTm9tYnJlIGRlbCBzY3JlZW5cbiAgICogQHBhcmFtIHNjcmVlbkNsYXNzIC0gQ2xhc2UgZGVsIHNjcmVlbiAob3BjaW9uYWwpXG4gICAqL1xuICBsb2dTY3JlZW5WaWV3KHNjcmVlbk5hbWU6IHN0cmluZywgc2NyZWVuQ2xhc3M/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmxvZ0V2ZW50KCdzY3JlZW5fdmlldycsIHtcbiAgICAgIHNjcmVlbl9uYW1lOiBzY3JlZW5OYW1lLFxuICAgICAgc2NyZWVuX2NsYXNzOiBzY3JlZW5DbGFzcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBFVkVOVE9TXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBSZWdpc3RyYSB1biBldmVudG8gdGlwYWRvIEdBNC5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50TmFtZSAtIE5vbWJyZSBkZWwgZXZlbnRvICh0aXBhZG8pXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBQYXLDoW1ldHJvcyBkZWwgZXZlbnRvICh0aXBhZG9zIHNlZ8O6biBlbCBub21icmUpXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gRXZlbnRvIHRpcGFkbyBjb24gYXV0b2NvbXBsZXRhZG9cbiAgICogYW5hbHl0aWNzLmxvZ0V2ZW50KCdhZGRfdG9fY2FydCcsIHtcbiAgICogICBpdGVtX2lkOiAnMTIzJyxcbiAgICogICBpdGVtX25hbWU6ICdQcm9kdWN0bycsXG4gICAqICAgdmFsdWU6IDk5Ljk5LFxuICAgKiAgIGN1cnJlbmN5OiAnRVVSJ1xuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBsb2dFdmVudDxUIGV4dGVuZHMgQW5hbHl0aWNzRXZlbnROYW1lPihldmVudE5hbWU6IFQsIHBhcmFtcz86IEFuYWx5dGljc0V2ZW50UGFyYW1zW1RdKTogdm9pZCB7XG4gICAgdGhpcy50cmFja0V2ZW50KGV2ZW50TmFtZSwgcGFyYW1zIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RyYSB1biBldmVudG8gY3VzdG9tIGNvbiBwYXLDoW1ldHJvcyBsaWJyZXMuXG4gICAqIFVzYXIgY3VhbmRvIGVsIGV2ZW50byBubyBlc3TDoSBlbiBlbCBjYXTDoWxvZ28gdGlwYWRvLlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnROYW1lIC0gTm9tYnJlIGRlbCBldmVudG8gY3VzdG9tXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBQYXLDoW1ldHJvcyBsaWJyZXNcbiAgICovXG4gIGxvZ0N1c3RvbUV2ZW50KGV2ZW50TmFtZTogc3RyaW5nLCBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuICAgIGNvbnN0IHByZWZpeGVkTmFtZSA9IHRoaXMuZXZlbnRQcmVmaXggKyBldmVudE5hbWU7XG4gICAgdGhpcy50cmFja0V2ZW50KHByZWZpeGVkTmFtZSwgcGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMw7NnaWNhIGNvbcO6biBwYXJhIGVudmlhciBldmVudG9zXG4gICAqL1xuICBwcml2YXRlIHRyYWNrRXZlbnQoZXZlbnROYW1lOiBzdHJpbmcsIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgLy8gVmVyaWZpY2FyIGNvbnNlbnRcbiAgICBpZiAoIXRoaXMuX2NvbnNlbnRTdGF0ZSgpLnNldHRpbmdzLmFuYWx5dGljcykge1xuICAgICAgdGhpcy5hZGRUb0RlYnVnSGlzdG9yeSgnZXZlbnQnLCBldmVudE5hbWUsIHBhcmFtcywgZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEFwbGljYXIgc2FtcGxpbmdcbiAgICBpZiAoIXRoaXMuc2hvdWxkU2FtcGxlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEZWJ1ZyBtb2RlOiBsb2d1ZWFyIGVuIGNvbnNvbGEgKHBlcm8gc2VndWlyIGVudmlhbmRvIGEgRmlyZWJhc2UpXG4gICAgaWYgKHRoaXMuX2lzRGVidWdNb2RlKCkpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBbQW5hbHl0aWNzXSBFdmVudDogJHtldmVudE5hbWV9YCwgcGFyYW1zKTtcbiAgICB9XG5cbiAgICAvLyBFbnZpYXIgYSBGaXJlYmFzZVxuICAgIGNvbnN0IGFuYWx5dGljcyA9IHRoaXMuZ2V0QW5hbHl0aWNzSW5zdGFuY2UoKTtcbiAgICBpZiAoYW5hbHl0aWNzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBsb2dFdmVudChhbmFseXRpY3MsIGV2ZW50TmFtZSBhcyBzdHJpbmcsIHBhcmFtcyk7XG4gICAgICAgIHRoaXMuYWRkVG9EZWJ1Z0hpc3RvcnkoJ2V2ZW50JywgZXZlbnROYW1lLCBwYXJhbXMsIHRydWUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignW0FuYWx5dGljc10gRXJyb3IgZW52aWFuZG8gZXZlbnRvOicsIGVycm9yKTtcbiAgICAgICAgdGhpcy5hZGRUb0RlYnVnSGlzdG9yeSgnZXZlbnQnLCBldmVudE5hbWUsIHBhcmFtcywgZmFsc2UpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFkZFRvRGVidWdIaXN0b3J5KCdldmVudCcsIGV2ZW50TmFtZSwgcGFyYW1zLCBmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEVDT01NRVJDRVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogUmVnaXN0cmEgdmlzdGEgZGUgaXRlbVxuICAgKi9cbiAgbG9nVmlld0l0ZW0oaXRlbTogQW5hbHl0aWNzSXRlbSk6IHZvaWQge1xuICAgIHRoaXMubG9nRXZlbnQoJ3ZpZXdfaXRlbScsIHtcbiAgICAgIGl0ZW1faWQ6IGl0ZW0uaXRlbV9pZCxcbiAgICAgIGl0ZW1fbmFtZTogaXRlbS5pdGVtX25hbWUsXG4gICAgICB2YWx1ZTogaXRlbS5wcmljZSxcbiAgICAgIGN1cnJlbmN5OiBpdGVtLmN1cnJlbmN5LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdHJhIGFncmVnYXIgYWwgY2Fycml0b1xuICAgKi9cbiAgbG9nQWRkVG9DYXJ0KGl0ZW06IEFuYWx5dGljc0l0ZW0sIHF1YW50aXR5ID0gMSk6IHZvaWQge1xuICAgIHRoaXMubG9nRXZlbnQoJ2FkZF90b19jYXJ0Jywge1xuICAgICAgaXRlbV9pZDogaXRlbS5pdGVtX2lkLFxuICAgICAgaXRlbV9uYW1lOiBpdGVtLml0ZW1fbmFtZSxcbiAgICAgIHZhbHVlOiAoaXRlbS5wcmljZSA/PyAwKSAqIHF1YW50aXR5LFxuICAgICAgY3VycmVuY3k6IGl0ZW0uY3VycmVuY3ksXG4gICAgICBxdWFudGl0eSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RyYSBpbmljaW8gZGUgY2hlY2tvdXRcbiAgICovXG4gIGxvZ0JlZ2luQ2hlY2tvdXQoaXRlbXM6IEFuYWx5dGljc0l0ZW1bXSwgdmFsdWU6IG51bWJlciwgY3VycmVuY3kgPSAnRVVSJyk6IHZvaWQge1xuICAgIHRoaXMubG9nRXZlbnQoJ2JlZ2luX2NoZWNrb3V0Jywge1xuICAgICAgdmFsdWUsXG4gICAgICBjdXJyZW5jeSxcbiAgICAgIGl0ZW1zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdHJhIGNvbXByYSBjb21wbGV0YWRhXG4gICAqL1xuICBsb2dQdXJjaGFzZShcbiAgICB0cmFuc2FjdGlvbklkOiBzdHJpbmcsXG4gICAgaXRlbXM6IEFuYWx5dGljc0l0ZW1bXSxcbiAgICB2YWx1ZTogbnVtYmVyLFxuICAgIGN1cnJlbmN5ID0gJ0VVUidcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5sb2dFdmVudCgncHVyY2hhc2UnLCB7XG4gICAgICB0cmFuc2FjdGlvbl9pZDogdHJhbnNhY3Rpb25JZCxcbiAgICAgIHZhbHVlLFxuICAgICAgY3VycmVuY3ksXG4gICAgICBpdGVtcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBVU0VSIFBST1BFUlRJRVNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFNldGVhIGVsIHVzZXJJZCBwYXJhIGFzb2NpYXIgZXZlbnRvcyBjb24gZWwgdXN1YXJpby5cbiAgICogTGxhbWFkbyBhdXRvbcOhdGljYW1lbnRlIHNpIGVuYWJsZUF1dGhJbnRlZ3JhdGlvbj10cnVlLlxuICAgKlxuICAgKiBAcGFyYW0gdXNlcklkIC0gSUQgZGVsIHVzdWFyaW8gbyBudWxsIHBhcmEgbGltcGlhclxuICAgKi9cbiAgc2V0VXNlcklkKHVzZXJJZDogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0FuYWx5dGljc1N1cHBvcnRlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRGVidWcgbW9kZTogbG9ndWVhciBlbiBjb25zb2xhIChwZXJvIHNlZ3VpciBlbnZpYW5kbyBhIEZpcmViYXNlKVxuICAgIGlmICh0aGlzLl9pc0RlYnVnTW9kZSgpKSB7XG4gICAgICBjb25zb2xlLmxvZyhgW0FuYWx5dGljc10gU2V0IHVzZXJJZDogJHt1c2VySWR9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgYW5hbHl0aWNzID0gdGhpcy5nZXRBbmFseXRpY3NJbnN0YW5jZSgpO1xuICAgIGlmIChhbmFseXRpY3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldFVzZXJJZChhbmFseXRpY3MsIHVzZXJJZCk7XG4gICAgICAgIHRoaXMuYWRkVG9EZWJ1Z0hpc3RvcnkoJ3VzZXJfcHJvcGVydHknLCAndXNlcl9pZCcsIHsgdXNlcklkIH0sIHRydWUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignW0FuYWx5dGljc10gRXJyb3Igc2V0ZWFuZG8gdXNlcklkOicsIGVycm9yKTtcbiAgICAgICAgdGhpcy5hZGRUb0RlYnVnSGlzdG9yeSgndXNlcl9wcm9wZXJ0eScsICd1c2VyX2lkJywgeyB1c2VySWQgfSwgZmFsc2UpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFkZFRvRGVidWdIaXN0b3J5KCd1c2VyX3Byb3BlcnR5JywgJ3VzZXJfaWQnLCB7IHVzZXJJZCB9LCBmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldGVhIHByb3BpZWRhZGVzIGRlbCB1c3VhcmlvIHBhcmEgc2VnbWVudGFjacOzbi5cbiAgICpcbiAgICogQHBhcmFtIHByb3BlcnRpZXMgLSBQcm9waWVkYWRlcyBrZXktdmFsdWVcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBhbmFseXRpY3Muc2V0VXNlclByb3BlcnRpZXMoe1xuICAgKiAgIHN1YnNjcmlwdGlvbl90aWVyOiAncHJlbWl1bScsXG4gICAqICAgcHJlZmVycmVkX2xhbmd1YWdlOiAnZXMnXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHNldFVzZXJQcm9wZXJ0aWVzKHByb3BlcnRpZXM6IFVzZXJQcm9wZXJ0aWVzIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIERlYnVnIG1vZGU6IGxvZ3VlYXIgZW4gY29uc29sYSAocGVybyBzZWd1aXIgZW52aWFuZG8gYSBGaXJlYmFzZSlcbiAgICBpZiAodGhpcy5faXNEZWJ1Z01vZGUoKSkge1xuICAgICAgY29uc29sZS5sb2coJ1tBbmFseXRpY3NdIFNldCB1c2VyIHByb3BlcnRpZXM6JywgcHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgY29uc3QgYW5hbHl0aWNzID0gdGhpcy5nZXRBbmFseXRpY3NJbnN0YW5jZSgpO1xuICAgIGlmIChhbmFseXRpY3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIENvbnZlcnRpciBhIFJlY29yZDxzdHJpbmcsIHN0cmluZz4gcGFyYSBGaXJlYmFzZVxuICAgICAgICBjb25zdCBzdHJpbmdQcm9wczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwcm9wZXJ0aWVzKSkge1xuICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzdHJpbmdQcm9wc1trZXldID0gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2V0VXNlclByb3BlcnRpZXMoYW5hbHl0aWNzLCBzdHJpbmdQcm9wcyk7XG4gICAgICAgIHRoaXMuYWRkVG9EZWJ1Z0hpc3RvcnkoJ3VzZXJfcHJvcGVydHknLCAncHJvcGVydGllcycsIHByb3BlcnRpZXMsIHRydWUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignW0FuYWx5dGljc10gRXJyb3Igc2V0ZWFuZG8gdXNlciBwcm9wZXJ0aWVzOicsIGVycm9yKTtcbiAgICAgICAgdGhpcy5hZGRUb0RlYnVnSGlzdG9yeSgndXNlcl9wcm9wZXJ0eScsICdwcm9wZXJ0aWVzJywgcHJvcGVydGllcywgZmFsc2UpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFkZFRvRGVidWdIaXN0b3J5KCd1c2VyX3Byb3BlcnR5JywgJ3Byb3BlcnRpZXMnLCBwcm9wZXJ0aWVzLCBmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldGVhIGxhIG9yZ2FuaXphY2nDs24gYWN0aXZhIChtdWx0aS10ZW5hbnQpLlxuICAgKiBMbGFtYWRvIGF1dG9tw6F0aWNhbWVudGUgc2kgZW5hYmxlQXV0aEludGVncmF0aW9uPXRydWUuXG4gICAqXG4gICAqIEBwYXJhbSBvcmdJZCAtIElEIGRlIGxhIG9yZ2FuaXphY2nDs24gbyBudWxsXG4gICAqL1xuICBzZXRBY3RpdmVPcmdhbml6YXRpb24ob3JnSWQ6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAob3JnSWQpIHtcbiAgICAgIHRoaXMuc2V0VXNlclByb3BlcnRpZXMoeyBhY3RpdmVfb3JnYW5pemF0aW9uOiBvcmdJZCB9KTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRVJST1IgVFJBQ0tJTkdcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFJlZ2lzdHJhIHVuIGVycm9yIHBhcmEgdHJhY2tpbmcuXG4gICAqIEludGVncmEgYXV0b23DoXRpY2FtZW50ZSBjb24gQW5ndWxhciBFcnJvckhhbmRsZXIgc2kgZW5hYmxlRXJyb3JUcmFja2luZz10cnVlLlxuICAgKlxuICAgKiBAcGFyYW0gZXJyb3IgLSBFcnJvciBvIG1lbnNhamUgZGUgZXJyb3JcbiAgICogQHBhcmFtIGNvbnRleHQgLSBDb250ZXh0byBhZGljaW9uYWxcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiB0cnkge1xuICAgKiAgIGF3YWl0IHJpc2t5T3BlcmF0aW9uKCk7XG4gICAqIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAqICAgYW5hbHl0aWNzLmxvZ0Vycm9yKGVycm9yLCB7IGNvbnRleHQ6ICdjaGVja291dF9mbG93JyB9KTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGxvZ0Vycm9yKGVycm9yOiBFcnJvciB8IHN0cmluZywgY29udGV4dD86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiB2b2lkIHtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IGVycm9yO1xuICAgIGNvbnN0IGVycm9yU3RhY2sgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3Iuc3RhY2sgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZXJyb3JUeXBlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm5hbWUgOiAnRXJyb3InO1xuXG4gICAgdGhpcy5sb2dFdmVudCgnZXJyb3Jfb2NjdXJyZWQnLCB7XG4gICAgICBlcnJvcl90eXBlOiBlcnJvclR5cGUsXG4gICAgICBlcnJvcl9tZXNzYWdlOiBlcnJvck1lc3NhZ2Uuc3Vic3RyaW5nKDAsIDEwMCksIC8vIExpbWl0YXIgbG9uZ2l0dWRcbiAgICAgIGVycm9yX3N0YWNrOiBlcnJvclN0YWNrPy5zdWJzdHJpbmcoMCwgNTAwKSxcbiAgICAgIGNvbnRleHQ6IGNvbnRleHQgPyBKU09OLnN0cmluZ2lmeShjb250ZXh0KSA6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RyYSB1biBlcnJvciBmYXRhbCAoY3Jhc2gtbGV2ZWwpLlxuICAgKi9cbiAgbG9nRmF0YWxFcnJvcihlcnJvcjogRXJyb3IsIGNvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogdm9pZCB7XG4gICAgdGhpcy5sb2dFcnJvcihlcnJvciwgeyAuLi5jb250ZXh0LCBzZXZlcml0eTogJ2ZhdGFsJyB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBDT05TRU5UIE1PREUgKEdEUFIpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBBY3R1YWxpemEgZWwgZXN0YWRvIGRlIGNvbnNlbnRpbWllbnRvIGRlbCB1c3VhcmlvLlxuICAgKiBBZmVjdGEgcXXDqSBkYXRvcyBzZSByZWNvbGVjdGFuIHkgZW52w61hbi5cbiAgICpcbiAgICogQHBhcmFtIGNvbnNlbnQgLSBTZXR0aW5ncyBkZSBjb25zZW50aW1pZW50b1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIFVzdWFyaW8gYWNlcHRhIHRvZG9cbiAgICogYW5hbHl0aWNzLnVwZGF0ZUNvbnNlbnQoeyBhbmFseXRpY3M6IHRydWUsIGFkdmVydGlzaW5nOiB0cnVlIH0pO1xuICAgKlxuICAgKiAvLyBVc3VhcmlvIHJlY2hhemEgcHVibGljaWRhZFxuICAgKiBhbmFseXRpY3MudXBkYXRlQ29uc2VudCh7IGFuYWx5dGljczogdHJ1ZSwgYWR2ZXJ0aXNpbmc6IGZhbHNlIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHVwZGF0ZUNvbnNlbnQoY29uc2VudDogQ29uc2VudFNldHRpbmdzKTogdm9pZCB7XG4gICAgY29uc3QgbmV3U3RhdGU6IENvbnNlbnRTdGF0ZSA9IHtcbiAgICAgIHNldHRpbmdzOiB7IC4uLnRoaXMuX2NvbnNlbnRTdGF0ZSgpLnNldHRpbmdzLCAuLi5jb25zZW50IH0sXG4gICAgICB1cGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICBoYXNEZWNpZGVkOiB0cnVlLFxuICAgIH07XG5cbiAgICB0aGlzLl9jb25zZW50U3RhdGUuc2V0KG5ld1N0YXRlKTtcbiAgICB0aGlzLnNhdmVDb25zZW50VG9TdG9yYWdlKG5ld1N0YXRlKTtcbiAgICB0aGlzLmFwcGx5Q29uc2VudFRvR3RhZyhuZXdTdGF0ZS5zZXR0aW5ncyk7XG5cbiAgICB0aGlzLmFkZFRvRGVidWdIaXN0b3J5KFxuICAgICAgJ2NvbnNlbnQnLFxuICAgICAgJ3VwZGF0ZScsXG4gICAgICBjb25zZW50IGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICBmYWxzZVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRGVuaWVnYSB0b2RvIGNvbnNlbnRpbWllbnRvLlxuICAgKi9cbiAgZGVueUFsbENvbnNlbnQoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVDb25zZW50KHtcbiAgICAgIGFuYWx5dGljczogZmFsc2UsXG4gICAgICBhZHZlcnRpc2luZzogZmFsc2UsXG4gICAgICBmdW5jdGlvbmFsaXR5OiBmYWxzZSxcbiAgICAgIHNlY3VyaXR5OiB0cnVlLCAvLyBTaWVtcHJlIHBlcm1pdGlkb1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjZXB0YSB0b2RvIGNvbnNlbnRpbWllbnRvLlxuICAgKi9cbiAgZ3JhbnRBbGxDb25zZW50KCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlQ29uc2VudCh7XG4gICAgICBhbmFseXRpY3M6IHRydWUsXG4gICAgICBhZHZlcnRpc2luZzogdHJ1ZSxcbiAgICAgIGZ1bmN0aW9uYWxpdHk6IHRydWUsXG4gICAgICBzZWN1cml0eTogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGVsIGVzdGFkbyBhY3R1YWwgZGUgY29uc2VudGltaWVudG8uXG4gICAqL1xuICBnZXRDb25zZW50U3RhdGUoKTogQ29uc2VudFN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5fY29uc2VudFN0YXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogRXN0YWJsZWNlIGVsIGNvbnNlbnQgZGVmYXVsdCBBTlRFUyBkZSBxdWUgRmlyZWJhc2UvZ3RhZyBpbmljaWFsaWNlLlxuICAgKiBSZXF1ZXJpZG8gcG9yIEdvb2dsZSBDb25zZW50IE1vZGUgdjIgcGFyYSBubyByZWNvbGVjdGFyIGRhdG9zIGhhc3RhXG4gICAqIHF1ZSBlbCB1c3VhcmlvIHRvbWUgdW5hIGRlY2lzaW9uIGV4cGxpY2l0YS5cbiAgICovXG4gIHByaXZhdGUgc2V0Q29uc2VudE1vZGVEZWZhdWx0KCk6IHZvaWQge1xuICAgIC8vIGd0YWcgcHVlZGUgbm8gZXN0YXIgZGlzcG9uaWJsZSBhdW4gKEZpcmViYXNlIGxvIGNhcmdhIGFzeW5jKS5cbiAgICAvLyBVc2Ftb3MgZGF0YUxheWVyIGRpcmVjdGFtZW50ZSwgcXVlIHNpIGVzdGEgZGlzcG9uaWJsZSBkZXNkZSBpbmRleC5odG1sLlxuICAgIGNvbnN0IHcgPSB3aW5kb3cgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCBkYXRhTGF5ZXIgPSAod1snZGF0YUxheWVyJ10gYXMgdW5rbm93bltdKSA/PyBbXTtcbiAgICB3WydkYXRhTGF5ZXInXSA9IGRhdGFMYXllcjtcbiAgICAvLyBwdXNoIGEgZGF0YUxheWVyIGZ1bmNpb25hIGFudGVzIGRlIHF1ZSBndGFnLmpzIGNhcmd1ZSDigJQgR0EgbG8gY29uc3VtZSBhbCBjYXJnYXIuXG4gICAgZGF0YUxheWVyLnB1c2goJ2NvbnNlbnQnLCAnZGVmYXVsdCcsIHtcbiAgICAgIGFuYWx5dGljc19zdG9yYWdlOiAnZGVuaWVkJyxcbiAgICAgIGFkX3N0b3JhZ2U6ICdkZW5pZWQnLFxuICAgICAgYWRfdXNlcl9kYXRhOiAnZGVuaWVkJyxcbiAgICAgIGFkX3BlcnNvbmFsaXphdGlvbjogJ2RlbmllZCcsXG4gICAgICBmdW5jdGlvbmFsaXR5X3N0b3JhZ2U6ICdkZW5pZWQnLFxuICAgICAgc2VjdXJpdHlfc3RvcmFnZTogJ2dyYW50ZWQnLFxuICAgICAgd2FpdF9mb3JfdXBkYXRlOiA1MDAsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXBsaWNhIGNvbnNlbnQgc2V0dGluZ3MgYSBndGFnIChHQTQgQ29uc2VudCBNb2RlIHYyKVxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseUNvbnNlbnRUb0d0YWcoc2V0dGluZ3M6IENvbnNlbnRTZXR0aW5ncyk6IHZvaWQge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGd0YWcgPSAod2luZG93IGFzIGFueSkuZ3RhZztcbiAgICBpZiAodHlwZW9mIGd0YWcgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgZ3RhZygnY29uc2VudCcsICd1cGRhdGUnLCB7XG4gICAgICAgIGFuYWx5dGljc19zdG9yYWdlOiBzZXR0aW5ncy5hbmFseXRpY3MgPyAnZ3JhbnRlZCcgOiAnZGVuaWVkJyxcbiAgICAgICAgYWRfc3RvcmFnZTogc2V0dGluZ3MuYWR2ZXJ0aXNpbmcgPyAnZ3JhbnRlZCcgOiAnZGVuaWVkJyxcbiAgICAgICAgYWRfdXNlcl9kYXRhOiBzZXR0aW5ncy5hZHZlcnRpc2luZyA/ICdncmFudGVkJyA6ICdkZW5pZWQnLFxuICAgICAgICBhZF9wZXJzb25hbGl6YXRpb246IHNldHRpbmdzLmFkdmVydGlzaW5nID8gJ2dyYW50ZWQnIDogJ2RlbmllZCcsXG4gICAgICAgIGZ1bmN0aW9uYWxpdHlfc3RvcmFnZTogc2V0dGluZ3MuZnVuY3Rpb25hbGl0eSA/ICdncmFudGVkJyA6ICdkZW5pZWQnLFxuICAgICAgICBzZWN1cml0eV9zdG9yYWdlOiBzZXR0aW5ncy5zZWN1cml0eSAhPT0gZmFsc2UgPyAnZ3JhbnRlZCcgOiAnZGVuaWVkJyxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tBbmFseXRpY3NdIEVycm9yIGFwbGljYW5kbyBjb25zZW50IGEgZ3RhZzonLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhcmdhIGNvbnNlbnQgZGVzZGUgbG9jYWxTdG9yYWdlXG4gICAqL1xuICBwcml2YXRlIGxvYWRDb25zZW50RnJvbVN0b3JhZ2UoKTogdm9pZCB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuY29uc2VudFN0b3JhZ2VLZXkpO1xuICAgICAgaWYgKHN0b3JlZCkge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHN0b3JlZCkgYXMgQ29uc2VudFN0YXRlO1xuICAgICAgICB0aGlzLl9jb25zZW50U3RhdGUuc2V0KHtcbiAgICAgICAgICAuLi5wYXJzZWQsXG4gICAgICAgICAgdXBkYXRlZEF0OiBwYXJzZWQudXBkYXRlZEF0ID8gbmV3IERhdGUocGFyc2VkLnVwZGF0ZWRBdCkgOiBudWxsLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5hbmFseXRpY3NDb25maWcuZGVmYXVsdENvbnNlbnRHcmFudGVkKSB7XG4gICAgICAgIC8vIEF1dG8tZ3JhbnQgYWxsIGNvbnNlbnQgcGFyYSBkZXNhcnJvbGxvL3Rlc3RpbmdcbiAgICAgICAgdGhpcy5fY29uc2VudFN0YXRlLnNldCh7XG4gICAgICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgICAgIGFuYWx5dGljczogdHJ1ZSxcbiAgICAgICAgICAgIGFkdmVydGlzaW5nOiB0cnVlLFxuICAgICAgICAgICAgZnVuY3Rpb25hbGl0eTogdHJ1ZSxcbiAgICAgICAgICAgIHNlY3VyaXR5OiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIGhhc0RlY2lkZWQ6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmFuYWx5dGljc0NvbmZpZy5kZWZhdWx0Q29uc2VudCkge1xuICAgICAgICAvLyBBcGxpY2FyIGNvbnNlbnQgcG9yIGRlZmVjdG8gc2kgbm8gaGF5IGd1YXJkYWRvXG4gICAgICAgIHRoaXMuX2NvbnNlbnRTdGF0ZS5zZXQoe1xuICAgICAgICAgIHNldHRpbmdzOiB0aGlzLmFuYWx5dGljc0NvbmZpZy5kZWZhdWx0Q29uc2VudCxcbiAgICAgICAgICB1cGRhdGVkQXQ6IG51bGwsXG4gICAgICAgICAgaGFzRGVjaWRlZDogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tBbmFseXRpY3NdIEVycm9yIGNhcmdhbmRvIGNvbnNlbnQ6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHdWFyZGEgY29uc2VudCBlbiBsb2NhbFN0b3JhZ2VcbiAgICovXG4gIHByaXZhdGUgc2F2ZUNvbnNlbnRUb1N0b3JhZ2Uoc3RhdGU6IENvbnNlbnRTdGF0ZSk6IHZvaWQge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmNvbnNlbnRTdG9yYWdlS2V5LCBKU09OLnN0cmluZ2lmeShzdGF0ZSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tBbmFseXRpY3NdIEVycm9yIGd1YXJkYW5kbyBjb25zZW50OicsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVElNSU5HIC8gUEVSRk9STUFOQ0VcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFJlZ2lzdHJhIHVuYSBtw6l0cmljYSBkZSB0aW1pbmcvcGVyZm9ybWFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIC0gTm9tYnJlIGRlIGxhIG3DqXRyaWNhXG4gICAqIEBwYXJhbSB2YWx1ZU1zIC0gVmFsb3IgZW4gbWlsaXNlZ3VuZG9zXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBQYXLDoW1ldHJvcyBhZGljaW9uYWxlc1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAqIGF3YWl0IGxvYWREYXRhKCk7XG4gICAqIGFuYWx5dGljcy5sb2dUaW1pbmcoJ2RhdGFfbG9hZCcsIHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnQsIHtcbiAgICogICBjYXRlZ29yeTogJ2FwaScsXG4gICAqICAgZW5kcG9pbnQ6ICcvcHJvZHVjdHMnXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGxvZ1RpbWluZyhuYW1lOiBzdHJpbmcsIHZhbHVlTXM6IG51bWJlciwgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHZvaWQge1xuICAgIHRoaXMubG9nRXZlbnQoJ3BlcmZvcm1hbmNlX21ldHJpYycsIHtcbiAgICAgIG1ldHJpY19uYW1lOiBuYW1lLFxuICAgICAgdmFsdWU6IE1hdGgucm91bmQodmFsdWVNcyksXG4gICAgICB1bml0OiAnbXMnLFxuICAgICAgLi4ucGFyYW1zLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIERFQlVHXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBIYWJpbGl0YS9kZXNoYWJpbGl0YSBtb2RvIGRlYnVnLlxuICAgKiBFbiBkZWJ1ZzogbG9nZWEgZXZlbnRvcyBhIGNvbnNvbGEgYWRlbcOhcyBkZSBlbnZpYXJsb3MgYSBGaXJlYmFzZS5cbiAgICovXG4gIHNldERlYnVnTW9kZShlbmFibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5faXNEZWJ1Z01vZGUuc2V0KGVuYWJsZWQpO1xuICAgIGNvbnNvbGUubG9nKGBbQW5hbHl0aWNzXSBEZWJ1ZyBtb2RlOiAke2VuYWJsZWQgPyAnT04nIDogJ09GRid9YCk7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBoaXN0b3JpYWwgZGUgZXZlbnRvcyAoc29sbyBlbiBkZWJ1ZyBtb2RlKS5cbiAgICogw5p0aWwgcGFyYSB0ZXN0aW5nIHkgZGVzYXJyb2xsby5cbiAgICovXG4gIGdldERlYnVnSGlzdG9yeSgpOiBBbmFseXRpY3NEZWJ1Z0V2ZW50W10ge1xuICAgIHJldHVybiB0aGlzLl9kZWJ1Z0hpc3RvcnkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaW1waWEgaGlzdG9yaWFsIGRlIGRlYnVnLlxuICAgKi9cbiAgY2xlYXJEZWJ1Z0hpc3RvcnkoKTogdm9pZCB7XG4gICAgdGhpcy5fZGVidWdIaXN0b3J5LnNldChbXSk7XG4gIH1cblxuICAvKipcbiAgICogQWdyZWdhIGV2ZW50byBhbCBoaXN0b3JpYWwgZGUgZGVidWdcbiAgICovXG4gIHByaXZhdGUgYWRkVG9EZWJ1Z0hpc3RvcnkoXG4gICAgdHlwZTogRGVidWdFdmVudFR5cGUsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIHNlbnQgPSBmYWxzZVxuICApOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2lzRGVidWdNb2RlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBldmVudDogQW5hbHl0aWNzRGVidWdFdmVudCA9IHtcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKSxcbiAgICAgIHR5cGUsXG4gICAgICBuYW1lLFxuICAgICAgcGFyYW1zLFxuICAgICAgc2VudCxcbiAgICB9O1xuXG4gICAgdGhpcy5fZGVidWdIaXN0b3J5LnVwZGF0ZShoaXN0b3J5ID0+IHtcbiAgICAgIGNvbnN0IG5ld0hpc3RvcnkgPSBbZXZlbnQsIC4uLmhpc3RvcnldO1xuICAgICAgcmV0dXJuIG5ld0hpc3Rvcnkuc2xpY2UoMCwgTUFYX0RFQlVHX0hJU1RPUlkpO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -2,5 +2,5 @@
2
2
  * Current version of valtech-components.
3
3
  * This is automatically updated during the publish process.
4
4
  */
5
- export const VERSION = '4.0.156';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC4xNTYnO1xuIl19
5
+ export const VERSION = '4.0.157';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC4xNTcnO1xuIl19