valtech-components 2.0.985 → 2.0.987
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.
- package/esm2022/lib/components/atoms/button/button.component.mjs +6 -3
- package/esm2022/lib/components/molecules/date-input/date-input.component.mjs +97 -14
- package/esm2022/lib/components/organisms/account-view/account-view.component.mjs +732 -0
- package/esm2022/lib/components/organisms/account-view/account-view.i18n.mjs +96 -0
- package/esm2022/lib/components/organisms/account-view/account.routes.mjs +29 -0
- package/esm2022/lib/components/organisms/account-view/types.mjs +2 -0
- package/esm2022/lib/components/organisms/create-org-modal/create-org-modal.component.mjs +240 -0
- package/esm2022/lib/components/organisms/create-org-modal/create-org-modal.i18n.mjs +46 -0
- package/esm2022/lib/components/organisms/delete-account-modal/delete-account-modal.component.mjs +272 -0
- package/esm2022/lib/components/organisms/delete-account-modal/delete-account-modal.i18n.mjs +40 -0
- package/esm2022/lib/components/organisms/org-info-sheet/org-info-sheet.component.mjs +205 -0
- package/esm2022/lib/components/organisms/org-info-sheet/org-info-sheet.i18n.mjs +35 -0
- package/esm2022/lib/components/organisms/switch-org-modal/switch-org-modal.component.mjs +280 -0
- package/esm2022/lib/components/organisms/switch-org-modal/switch-org-modal.i18n.mjs +26 -0
- package/esm2022/lib/components/types.mjs +1 -1
- package/esm2022/lib/version.mjs +2 -2
- package/esm2022/public-api.mjs +8 -1
- package/fesm2022/valtech-components.mjs +2279 -279
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/molecules/date-input/date-input.component.d.ts +9 -0
- package/lib/components/organisms/account-view/account-view.component.d.ts +88 -0
- package/lib/components/organisms/account-view/account-view.i18n.d.ts +7 -0
- package/lib/components/organisms/account-view/account.routes.d.ts +24 -0
- package/lib/components/organisms/account-view/types.d.ts +44 -0
- package/lib/components/organisms/article/article.component.d.ts +1 -0
- package/lib/components/organisms/create-org-modal/create-org-modal.component.d.ts +45 -0
- package/lib/components/organisms/create-org-modal/create-org-modal.i18n.d.ts +7 -0
- package/lib/components/organisms/delete-account-modal/delete-account-modal.component.d.ts +50 -0
- package/lib/components/organisms/delete-account-modal/delete-account-modal.i18n.d.ts +7 -0
- package/lib/components/organisms/org-info-sheet/org-info-sheet.component.d.ts +44 -0
- package/lib/components/organisms/org-info-sheet/org-info-sheet.i18n.d.ts +12 -0
- package/lib/components/organisms/switch-org-modal/switch-org-modal.component.d.ts +47 -0
- package/lib/components/organisms/switch-org-modal/switch-org-modal.i18n.d.ts +7 -0
- package/lib/components/types.d.ts +2 -0
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +7 -0
|
@@ -0,0 +1,732 @@
|
|
|
1
|
+
import { TitleCasePipe } from '@angular/common';
|
|
2
|
+
import { Component, computed, inject, Input, signal } from '@angular/core';
|
|
3
|
+
import { ActivatedRoute } from '@angular/router';
|
|
4
|
+
import { IonButton, IonIcon } from '@ionic/angular/standalone';
|
|
5
|
+
import { addIcons } from 'ionicons';
|
|
6
|
+
import { businessOutline, chevronForwardOutline, mailOutline, peopleOutline, swapHorizontalOutline, } from 'ionicons/icons';
|
|
7
|
+
import { take } from 'rxjs/operators';
|
|
8
|
+
import { ButtonComponent } from '../../atoms/button/button.component';
|
|
9
|
+
import { DisplayComponent } from '../../atoms/display/display.component';
|
|
10
|
+
import { TextComponent } from '../../atoms/text/text.component';
|
|
11
|
+
import { TitleComponent } from '../../atoms/title/title.component';
|
|
12
|
+
import { CtaCardComponent } from '../../molecules/cta-card/cta-card.component';
|
|
13
|
+
import { EmptyStateComponent } from '../../molecules/empty-state/empty-state.component';
|
|
14
|
+
import { createErrorStateProps } from '../../molecules/empty-state/factory';
|
|
15
|
+
import { InvitationCardComponent } from '../../molecules/invitation-card/invitation-card.component';
|
|
16
|
+
import { SkeletonLayoutComponent } from '../skeleton-layout/skeleton-layout.component';
|
|
17
|
+
import { AuthService } from '../../../services/auth/auth.service';
|
|
18
|
+
import { I18nService } from '../../../services/i18n';
|
|
19
|
+
import { interpretError } from '../../../services/errors/interpret-error';
|
|
20
|
+
import { ModalService } from '../../../services/modal/modal.service';
|
|
21
|
+
import { NavigationService } from '../../../services/navigation/navigation.service';
|
|
22
|
+
import { OrgService } from '../../../services/org/org.service';
|
|
23
|
+
import { connectPageRefresh } from '../../../services/page-refresh/page-refresh.service';
|
|
24
|
+
import { ToastService } from '../../../services/toast.service';
|
|
25
|
+
import { ValtechErrorService } from '../../../services/errors/valtech-error.service';
|
|
26
|
+
import { CreateOrgModalComponent } from '../create-org-modal/create-org-modal.component';
|
|
27
|
+
import { DeleteAccountModalComponent } from '../delete-account-modal/delete-account-modal.component';
|
|
28
|
+
import { OrgInfoSheetComponent } from '../org-info-sheet/org-info-sheet.component';
|
|
29
|
+
import { SwitchOrgModalComponent } from '../switch-org-modal/switch-org-modal.component';
|
|
30
|
+
import { ACCOUNT_VIEW_I18N } from './account-view.i18n';
|
|
31
|
+
import * as i0 from "@angular/core";
|
|
32
|
+
addIcons({ peopleOutline, businessOutline, chevronForwardOutline, swapHorizontalOutline, mailOutline });
|
|
33
|
+
const DEFAULT_NAMESPACE = 'Settings.Account';
|
|
34
|
+
const DEFAULT_MANAGE_ORG_ROUTE = '/app/settings/organization';
|
|
35
|
+
/**
|
|
36
|
+
* `val-account-view` — vista Cuenta full-feature autocontenida (organism).
|
|
37
|
+
* Promovida desde `showcase` bajo el proceso de ADR-021. Reúne:
|
|
38
|
+
* - **Invitaciones pendientes** — aceptar / rechazar (`val-invitation-card`).
|
|
39
|
+
* - **Organizaciones** — card de org activa + empty-card + CTA "Nueva org"
|
|
40
|
+
* (modal `val-create-org-modal`) + "Ver todas" (modal `val-switch-org-modal`).
|
|
41
|
+
* - **Cerrar esta sesión** — `auth.logoutWithConfirmation()`.
|
|
42
|
+
* - **Eliminar cuenta** — modal `val-delete-account-modal`.
|
|
43
|
+
*
|
|
44
|
+
* NO renderiza ion-content — vive dentro de val-page-wrapper. No usa deep-links;
|
|
45
|
+
* `ActivatedRoute` se inyecta `{ optional: true }` solo para leer el route data
|
|
46
|
+
* de config. La navegación a la org route va por `NavigationService`.
|
|
47
|
+
*
|
|
48
|
+
* Auto-registra sus defaults i18n (es/en) en el constructor si el consumer no
|
|
49
|
+
* proveyó el namespace configurado (default `Settings.Account`).
|
|
50
|
+
*/
|
|
51
|
+
export class AccountViewComponent {
|
|
52
|
+
/** Namespace i18n resuelto (capturado para llamadas no-reactivas). */
|
|
53
|
+
get ns() {
|
|
54
|
+
return this.resolvedConfig().i18nNamespace;
|
|
55
|
+
}
|
|
56
|
+
constructor() {
|
|
57
|
+
this.nav = inject(NavigationService);
|
|
58
|
+
this.i18n = inject(I18nService);
|
|
59
|
+
this.auth = inject(AuthService);
|
|
60
|
+
this.orgService = inject(OrgService);
|
|
61
|
+
this.modalService = inject(ModalService);
|
|
62
|
+
this.toast = inject(ToastService);
|
|
63
|
+
this.errors = inject(ValtechErrorService);
|
|
64
|
+
this.route = inject(ActivatedRoute, { optional: true });
|
|
65
|
+
this.resolvedConfig = computed(() => {
|
|
66
|
+
const fromRoute = (this.route?.snapshot.data['accountConfig'] ?? {});
|
|
67
|
+
const merged = { ...fromRoute, ...(this.config ?? {}) };
|
|
68
|
+
return {
|
|
69
|
+
showPendingInvites: merged.showPendingInvites ?? true,
|
|
70
|
+
showOrganizations: merged.showOrganizations ?? true,
|
|
71
|
+
showNewOrgCta: merged.showNewOrgCta ?? true,
|
|
72
|
+
showLogout: merged.showLogout ?? true,
|
|
73
|
+
showDeleteAccount: merged.showDeleteAccount ?? true,
|
|
74
|
+
i18nNamespace: merged.i18nNamespace ?? DEFAULT_NAMESPACE,
|
|
75
|
+
manageOrgRoute: merged.manageOrgRoute ?? DEFAULT_MANAGE_ORG_ROUTE,
|
|
76
|
+
onOrgSwitched: merged.onOrgSwitched,
|
|
77
|
+
onOrgCreated: merged.onOrgCreated,
|
|
78
|
+
onLoggedOut: merged.onLoggedOut,
|
|
79
|
+
onAccountDeleted: merged.onAccountDeleted,
|
|
80
|
+
};
|
|
81
|
+
});
|
|
82
|
+
this.orgs = signal([]);
|
|
83
|
+
this.orgsLoading = signal(false);
|
|
84
|
+
this.orgsError = signal(null);
|
|
85
|
+
this.orgsErrorState = computed(() => {
|
|
86
|
+
this.i18n.lang();
|
|
87
|
+
const err = this.orgsError();
|
|
88
|
+
if (!err)
|
|
89
|
+
return null;
|
|
90
|
+
return createErrorStateProps(err, {
|
|
91
|
+
title: {
|
|
92
|
+
offline: this.tt('orgsOfflineTitle'),
|
|
93
|
+
error: this.tt('orgsErrorTitle'),
|
|
94
|
+
},
|
|
95
|
+
description: {
|
|
96
|
+
offline: this.tt('orgsOfflineHint'),
|
|
97
|
+
error: interpretError(err).message,
|
|
98
|
+
},
|
|
99
|
+
retryLabel: this.tt('orgsRetry'),
|
|
100
|
+
onRetry: () => this.loadOrgs(),
|
|
101
|
+
retrying: this.orgsLoading(),
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
this.pendingInvites = signal([]);
|
|
105
|
+
this.pendingInvitesLoading = signal(false);
|
|
106
|
+
this.inviteAccepting = signal(null);
|
|
107
|
+
this.pageTitle = computed(() => this.tt('pageTitle'));
|
|
108
|
+
this.pageDescription = computed(() => this.tt('pageDescription'));
|
|
109
|
+
this.orgsTitle = computed(() => this.tt('orgsTitle'));
|
|
110
|
+
this.orgsEmpty = computed(() => this.tt('orgsEmpty'));
|
|
111
|
+
this.orgsMoreInfo = computed(() => this.tt('orgsMoreInfo'));
|
|
112
|
+
this.orgsNewQuestion = computed(() => this.tt('orgsNewQuestion'));
|
|
113
|
+
this.orgsNewHint = computed(() => this.tt('orgsNewHint'));
|
|
114
|
+
this.newOrgCtaProps = computed(() => ({
|
|
115
|
+
title: this.tt('orgsNewQuestion'),
|
|
116
|
+
description: this.tt('orgsNewHint'),
|
|
117
|
+
padding: '16px',
|
|
118
|
+
borderRadius: '14px',
|
|
119
|
+
actions: {
|
|
120
|
+
position: 'right',
|
|
121
|
+
columned: false,
|
|
122
|
+
buttons: [
|
|
123
|
+
{
|
|
124
|
+
text: this.tt('orgsNewCta'),
|
|
125
|
+
color: 'primary',
|
|
126
|
+
fill: 'outline',
|
|
127
|
+
shape: 'round',
|
|
128
|
+
size: 'default',
|
|
129
|
+
type: 'button',
|
|
130
|
+
state: 'ENABLED',
|
|
131
|
+
token: 'account-new-org',
|
|
132
|
+
},
|
|
133
|
+
],
|
|
134
|
+
},
|
|
135
|
+
}));
|
|
136
|
+
this.logoutTitle = computed(() => this.tt('logoutTitle'));
|
|
137
|
+
this.logoutHint = computed(() => this.tt('logoutHint'));
|
|
138
|
+
this.dangerTitle = computed(() => this.tt('dangerTitle'));
|
|
139
|
+
this.dangerDeleteTitle = computed(() => this.tt('dangerDeleteTitle'));
|
|
140
|
+
this.dangerDeleteHint = computed(() => this.tt('dangerDeleteHint'));
|
|
141
|
+
this.activeOrgId = computed(() => {
|
|
142
|
+
const u = this.auth.user();
|
|
143
|
+
return u?.activeOrgId ?? u?.activeOrg ?? '';
|
|
144
|
+
});
|
|
145
|
+
this.activeOrgRole = computed(() => {
|
|
146
|
+
const roles = this.auth.roles?.() ?? [];
|
|
147
|
+
return roles[0] ?? null;
|
|
148
|
+
});
|
|
149
|
+
this.activeOrg = computed(() => this.orgs().find(o => o.id === this.activeOrgId()) ?? null);
|
|
150
|
+
this.logoutButtonProps = computed(() => ({
|
|
151
|
+
text: this.tt('logout'),
|
|
152
|
+
color: 'dark',
|
|
153
|
+
fill: 'outline',
|
|
154
|
+
size: 'default',
|
|
155
|
+
shape: 'round',
|
|
156
|
+
type: 'button',
|
|
157
|
+
token: 'account-logout',
|
|
158
|
+
}));
|
|
159
|
+
this.deleteAccountButtonProps = computed(() => ({
|
|
160
|
+
text: this.tt('dangerDeleteCta'),
|
|
161
|
+
color: 'dark',
|
|
162
|
+
fill: 'outline',
|
|
163
|
+
size: 'default',
|
|
164
|
+
shape: 'round',
|
|
165
|
+
type: 'button',
|
|
166
|
+
token: 'account-delete',
|
|
167
|
+
}));
|
|
168
|
+
this.switchAccountButtonProps = computed(() => ({
|
|
169
|
+
text: this.tt('switchAccountCta'),
|
|
170
|
+
color: 'dark',
|
|
171
|
+
fill: 'outline',
|
|
172
|
+
size: 'default',
|
|
173
|
+
shape: 'round',
|
|
174
|
+
type: 'button',
|
|
175
|
+
token: 'account-switch',
|
|
176
|
+
}));
|
|
177
|
+
const ns = this.ns;
|
|
178
|
+
if (!this.i18n.hasNamespace(ns)) {
|
|
179
|
+
this.i18n.registerContent(ns, ACCOUNT_VIEW_I18N);
|
|
180
|
+
}
|
|
181
|
+
this.nav.setBackHeader('pageTitle', ns, { withMenu: true });
|
|
182
|
+
this.loadOrgs();
|
|
183
|
+
this.loadPendingInvites();
|
|
184
|
+
connectPageRefresh(async () => {
|
|
185
|
+
await Promise.all([this.loadOrgs(), this.loadPendingInvites()]);
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
orgTypeLabel(type) {
|
|
189
|
+
const map = {
|
|
190
|
+
PERSONAL: this.tt('orgsTypePersonal'),
|
|
191
|
+
PRIVATE: this.tt('orgsTypePrivate'),
|
|
192
|
+
PUBLIC: this.tt('orgsTypePublic'),
|
|
193
|
+
BUSINESS: this.tt('orgsTypeBusiness'),
|
|
194
|
+
};
|
|
195
|
+
return map[type] ?? type;
|
|
196
|
+
}
|
|
197
|
+
onSwitchAccount() {
|
|
198
|
+
void this.modalService.open({
|
|
199
|
+
component: SwitchOrgModalComponent,
|
|
200
|
+
componentProps: {
|
|
201
|
+
i18nNamespace: 'Settings.SwitchOrg',
|
|
202
|
+
onSuccess: () => {
|
|
203
|
+
this.loadOrgs();
|
|
204
|
+
this.loadPendingInvites();
|
|
205
|
+
this.resolvedConfig().onOrgSwitched?.();
|
|
206
|
+
},
|
|
207
|
+
},
|
|
208
|
+
breakpoints: {
|
|
209
|
+
breakpoints: [0, 0.85],
|
|
210
|
+
initialBreakpoint: 0.85,
|
|
211
|
+
showHandle: true,
|
|
212
|
+
},
|
|
213
|
+
backdropDismiss: true,
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
onDeleteAccount() {
|
|
217
|
+
void this.modalService.open({
|
|
218
|
+
component: DeleteAccountModalComponent,
|
|
219
|
+
componentProps: {
|
|
220
|
+
i18nNamespace: 'Settings.DeleteAccount',
|
|
221
|
+
},
|
|
222
|
+
breakpoints: {
|
|
223
|
+
breakpoints: [0, 0.85],
|
|
224
|
+
initialBreakpoint: 0.85,
|
|
225
|
+
showHandle: true,
|
|
226
|
+
},
|
|
227
|
+
backdropDismiss: false,
|
|
228
|
+
});
|
|
229
|
+
this.resolvedConfig().onAccountDeleted?.();
|
|
230
|
+
}
|
|
231
|
+
onManageOrg() {
|
|
232
|
+
this.nav.navigateByUrl(this.resolvedConfig().manageOrgRoute);
|
|
233
|
+
}
|
|
234
|
+
onNewOrg() {
|
|
235
|
+
void this.modalService.open({
|
|
236
|
+
component: CreateOrgModalComponent,
|
|
237
|
+
componentProps: {
|
|
238
|
+
i18nNamespace: 'CreateOrgModal',
|
|
239
|
+
onSuccess: (newOrg) => {
|
|
240
|
+
this.loadOrgs();
|
|
241
|
+
this.resolvedConfig().onOrgCreated?.(newOrg);
|
|
242
|
+
},
|
|
243
|
+
},
|
|
244
|
+
breakpoints: {
|
|
245
|
+
breakpoints: [0, 0.92],
|
|
246
|
+
initialBreakpoint: 0.92,
|
|
247
|
+
showHandle: true,
|
|
248
|
+
},
|
|
249
|
+
backdropDismiss: true,
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
onMoreInfo() {
|
|
253
|
+
void this.modalService.open({
|
|
254
|
+
component: OrgInfoSheetComponent,
|
|
255
|
+
componentProps: {
|
|
256
|
+
title: this.tt('orgsInfoTitle'),
|
|
257
|
+
subtitle: this.tt('orgsInfoSubtitle'),
|
|
258
|
+
body: this.tt('orgsInfoContent'),
|
|
259
|
+
closeLabel: this.tt('orgsInfoClose'),
|
|
260
|
+
closeProps: {
|
|
261
|
+
text: this.tt('orgsInfoClose'),
|
|
262
|
+
fill: 'outline',
|
|
263
|
+
color: 'dark',
|
|
264
|
+
size: 'default',
|
|
265
|
+
expand: 'block',
|
|
266
|
+
type: 'button',
|
|
267
|
+
},
|
|
268
|
+
},
|
|
269
|
+
breakpoints: {
|
|
270
|
+
breakpoints: [0, 0.85],
|
|
271
|
+
initialBreakpoint: 0.85,
|
|
272
|
+
showHandle: true,
|
|
273
|
+
},
|
|
274
|
+
backdropDismiss: true,
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
onLogout() {
|
|
278
|
+
this.auth.logoutWithConfirmation();
|
|
279
|
+
this.resolvedConfig().onLoggedOut?.();
|
|
280
|
+
}
|
|
281
|
+
loadPendingInvites() {
|
|
282
|
+
this.pendingInvitesLoading.set(true);
|
|
283
|
+
return new Promise(resolve => {
|
|
284
|
+
this.orgService
|
|
285
|
+
.getPendingInvitations()
|
|
286
|
+
.pipe(take(1))
|
|
287
|
+
.subscribe({
|
|
288
|
+
next: items => {
|
|
289
|
+
this.pendingInvites.set(items);
|
|
290
|
+
this.pendingInvitesLoading.set(false);
|
|
291
|
+
resolve();
|
|
292
|
+
},
|
|
293
|
+
error: () => {
|
|
294
|
+
this.pendingInvitesLoading.set(false);
|
|
295
|
+
resolve();
|
|
296
|
+
},
|
|
297
|
+
});
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
acceptPendingInvite(invite) {
|
|
301
|
+
if (this.inviteAccepting())
|
|
302
|
+
return;
|
|
303
|
+
this.inviteAccepting.set(invite.orgId);
|
|
304
|
+
this.orgService
|
|
305
|
+
.acceptInvitation(invite.orgId)
|
|
306
|
+
.pipe(take(1))
|
|
307
|
+
.subscribe({
|
|
308
|
+
next: () => {
|
|
309
|
+
this.toast.show({
|
|
310
|
+
message: this.tt('inviteAccepted'),
|
|
311
|
+
color: 'dark',
|
|
312
|
+
duration: 3500,
|
|
313
|
+
});
|
|
314
|
+
this.pendingInvites.update(list => list.filter(i => i.orgId !== invite.orgId));
|
|
315
|
+
this.loadOrgs();
|
|
316
|
+
},
|
|
317
|
+
error: err => {
|
|
318
|
+
this.errors.handle(err, { context: 'account.acceptPendingInvite' });
|
|
319
|
+
this.inviteAccepting.set(null);
|
|
320
|
+
},
|
|
321
|
+
complete: () => this.inviteAccepting.set(null),
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
declinePendingInvite(invite) {
|
|
325
|
+
if (this.inviteAccepting())
|
|
326
|
+
return;
|
|
327
|
+
this.inviteAccepting.set(invite.orgId);
|
|
328
|
+
this.orgService
|
|
329
|
+
.declineInvitation(invite.orgId)
|
|
330
|
+
.pipe(take(1))
|
|
331
|
+
.subscribe({
|
|
332
|
+
next: () => {
|
|
333
|
+
this.toast.show({
|
|
334
|
+
message: this.tt('inviteDeclined'),
|
|
335
|
+
color: 'dark',
|
|
336
|
+
duration: 2500,
|
|
337
|
+
});
|
|
338
|
+
this.pendingInvites.update(list => list.filter(i => i.orgId !== invite.orgId));
|
|
339
|
+
},
|
|
340
|
+
error: err => {
|
|
341
|
+
this.errors.handle(err, { context: 'account.declinePendingInvite' });
|
|
342
|
+
this.inviteAccepting.set(null);
|
|
343
|
+
},
|
|
344
|
+
complete: () => this.inviteAccepting.set(null),
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
loadOrgs() {
|
|
348
|
+
this.orgsLoading.set(true);
|
|
349
|
+
this.orgsError.set(null);
|
|
350
|
+
return new Promise(resolve => {
|
|
351
|
+
this.orgService.listMyOrgs().subscribe({
|
|
352
|
+
next: orgs => {
|
|
353
|
+
const activeId = this.activeOrgId();
|
|
354
|
+
this.orgs.set([...orgs].sort((a, b) => (a.id === activeId ? -1 : b.id === activeId ? 1 : 0)));
|
|
355
|
+
this.orgsLoading.set(false);
|
|
356
|
+
resolve();
|
|
357
|
+
},
|
|
358
|
+
error: err => {
|
|
359
|
+
this.orgsError.set(err);
|
|
360
|
+
this.orgsLoading.set(false);
|
|
361
|
+
resolve();
|
|
362
|
+
},
|
|
363
|
+
});
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
tt(key) {
|
|
367
|
+
return this.i18n.t(key, this.ns);
|
|
368
|
+
}
|
|
369
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AccountViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
370
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AccountViewComponent, isStandalone: true, selector: "val-account-view", inputs: { config: "config" }, ngImport: i0, template: `
|
|
371
|
+
<div class="page">
|
|
372
|
+
<header class="page-header">
|
|
373
|
+
<val-display [props]="{ size: 'small', color: 'dark', content: pageTitle() }" />
|
|
374
|
+
<val-title
|
|
375
|
+
[props]="{
|
|
376
|
+
size: 'large',
|
|
377
|
+
color: 'dark',
|
|
378
|
+
bold: false,
|
|
379
|
+
content: pageDescription(),
|
|
380
|
+
}"
|
|
381
|
+
/>
|
|
382
|
+
</header>
|
|
383
|
+
|
|
384
|
+
@if (resolvedConfig().showPendingInvites && pendingInvites().length > 0) {
|
|
385
|
+
<val-title
|
|
386
|
+
[props]="{
|
|
387
|
+
size: 'medium',
|
|
388
|
+
color: 'dark',
|
|
389
|
+
bold: true,
|
|
390
|
+
content: tt('pendingInvitesTitle'),
|
|
391
|
+
}"
|
|
392
|
+
/>
|
|
393
|
+
@for (invite of pendingInvites(); track invite.orgId) {
|
|
394
|
+
<val-invitation-card
|
|
395
|
+
[props]="{
|
|
396
|
+
token: invite.orgId,
|
|
397
|
+
orgName: invite.orgName,
|
|
398
|
+
inviterName: invite.inviterName,
|
|
399
|
+
role: invite.roleId,
|
|
400
|
+
accepting: inviteAccepting() === invite.orgId,
|
|
401
|
+
disabled: !!inviteAccepting(),
|
|
402
|
+
acceptLabel: tt('accept'),
|
|
403
|
+
declineLabel: tt('decline'),
|
|
404
|
+
}"
|
|
405
|
+
(onAccept)="acceptPendingInvite(invite)"
|
|
406
|
+
(onDecline)="declinePendingInvite(invite)"
|
|
407
|
+
/>
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
@if (resolvedConfig().showOrganizations) {
|
|
412
|
+
<!-- Organizations -->
|
|
413
|
+
<section class="settings-section">
|
|
414
|
+
<div class="section-header-row">
|
|
415
|
+
<val-title
|
|
416
|
+
[props]="{
|
|
417
|
+
size: 'medium',
|
|
418
|
+
color: 'dark',
|
|
419
|
+
bold: true,
|
|
420
|
+
content: orgsTitle(),
|
|
421
|
+
}"
|
|
422
|
+
/>
|
|
423
|
+
@if (orgs().length > 1) {
|
|
424
|
+
<ion-button fill="outline" color="dark" shape="round" size="small" (click)="onSwitchAccount()">
|
|
425
|
+
{{ tt('orgsViewAll') }}
|
|
426
|
+
</ion-button>
|
|
427
|
+
}
|
|
428
|
+
</div>
|
|
429
|
+
<div class="section-body">
|
|
430
|
+
@if (orgsLoading()) {
|
|
431
|
+
<val-skeleton-layout [props]="{ preset: 'list', rows: 3 }" />
|
|
432
|
+
} @else if (orgsErrorState()) {
|
|
433
|
+
<val-empty-state [props]="orgsErrorState()!" />
|
|
434
|
+
} @else {
|
|
435
|
+
@if (activeOrg(); as org) {
|
|
436
|
+
<div class="orgs-list">
|
|
437
|
+
<div class="org-card org-card--active">
|
|
438
|
+
<div class="org-card__icon">
|
|
439
|
+
<ion-icon name="business-outline" />
|
|
440
|
+
</div>
|
|
441
|
+
<div class="org-card__body">
|
|
442
|
+
<span class="org-card__name">{{ org.name }}</span>
|
|
443
|
+
<div class="org-card__meta">
|
|
444
|
+
<span class="org-card__meta-item">
|
|
445
|
+
<span class="org-card__meta-label">{{ tt('orgsLabelType') }}</span>
|
|
446
|
+
{{ orgTypeLabel(org.type) }}
|
|
447
|
+
</span>
|
|
448
|
+
@if (activeOrgRole()) {
|
|
449
|
+
<span class="org-card__meta-item">
|
|
450
|
+
<span class="org-card__meta-label">{{ tt('orgsLabelRole') }}</span>
|
|
451
|
+
{{ activeOrgRole() | titlecase }}
|
|
452
|
+
</span>
|
|
453
|
+
}
|
|
454
|
+
<span class="org-card__meta-item">
|
|
455
|
+
<span class="org-card__meta-label">{{ tt('orgsLabelStatus') }}</span>
|
|
456
|
+
{{ tt('orgsStatusActive') }}
|
|
457
|
+
</span>
|
|
458
|
+
</div>
|
|
459
|
+
</div>
|
|
460
|
+
<div class="org-card__end">
|
|
461
|
+
<ion-button fill="outline" color="dark" shape="round" size="small" (click)="onManageOrg()">
|
|
462
|
+
{{ tt('orgsManage') }}
|
|
463
|
+
</ion-button>
|
|
464
|
+
</div>
|
|
465
|
+
</div>
|
|
466
|
+
</div>
|
|
467
|
+
} @else if (orgs().length === 0) {
|
|
468
|
+
<div class="orgs-empty-card">
|
|
469
|
+
<div class="orgs-empty-card__main">
|
|
470
|
+
<ion-icon name="people-outline" class="orgs-empty-card__icon" />
|
|
471
|
+
<span class="orgs-empty-card__text">{{ orgsEmpty() }}</span>
|
|
472
|
+
</div>
|
|
473
|
+
<button class="orgs-empty-card__link" (click)="onMoreInfo()">
|
|
474
|
+
{{ orgsMoreInfo() }}
|
|
475
|
+
</button>
|
|
476
|
+
</div>
|
|
477
|
+
}
|
|
478
|
+
@if (resolvedConfig().showNewOrgCta) {
|
|
479
|
+
<!-- Nueva organizacion: CTA card con titulo, subtitulo y boton -->
|
|
480
|
+
<val-cta-card class="org-new-cta-card" [props]="newOrgCtaProps()" (onAction)="onNewOrg()" />
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
</div>
|
|
484
|
+
</section>
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
@if (resolvedConfig().showLogout) {
|
|
488
|
+
<!-- Logout this session -->
|
|
489
|
+
<section class="settings-section">
|
|
490
|
+
<val-title
|
|
491
|
+
[props]="{
|
|
492
|
+
size: 'medium',
|
|
493
|
+
color: 'dark',
|
|
494
|
+
bold: true,
|
|
495
|
+
content: logoutTitle(),
|
|
496
|
+
}"
|
|
497
|
+
/>
|
|
498
|
+
<div class="section-body">
|
|
499
|
+
<val-text
|
|
500
|
+
[props]="{
|
|
501
|
+
content: logoutHint(),
|
|
502
|
+
size: 'medium',
|
|
503
|
+
color: 'dark',
|
|
504
|
+
bold: false,
|
|
505
|
+
}"
|
|
506
|
+
/>
|
|
507
|
+
<div class="row-actions">
|
|
508
|
+
<val-button [props]="logoutButtonProps()" (click)="onLogout()" />
|
|
509
|
+
</div>
|
|
510
|
+
</div>
|
|
511
|
+
</section>
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
@if (resolvedConfig().showDeleteAccount) {
|
|
515
|
+
<!-- Delete account -->
|
|
516
|
+
<section class="settings-section">
|
|
517
|
+
<val-title
|
|
518
|
+
[props]="{
|
|
519
|
+
size: 'medium',
|
|
520
|
+
color: 'dark',
|
|
521
|
+
bold: true,
|
|
522
|
+
content: dangerDeleteTitle(),
|
|
523
|
+
}"
|
|
524
|
+
/>
|
|
525
|
+
<div class="section-body">
|
|
526
|
+
<val-text
|
|
527
|
+
[props]="{
|
|
528
|
+
content: dangerDeleteHint(),
|
|
529
|
+
size: 'medium',
|
|
530
|
+
color: 'dark',
|
|
531
|
+
bold: false,
|
|
532
|
+
}"
|
|
533
|
+
/>
|
|
534
|
+
<div class="row-actions">
|
|
535
|
+
<val-button [props]="deleteAccountButtonProps()" (onClick)="onDeleteAccount()" />
|
|
536
|
+
</div>
|
|
537
|
+
</div>
|
|
538
|
+
</section>
|
|
539
|
+
}
|
|
540
|
+
</div>
|
|
541
|
+
`, isInline: true, styles: [".page{padding:16px 0;max-width:720px;margin:0 auto}.page-header{margin-bottom:16px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.settings-section val-title{display:block;margin-bottom:12px}.section-body{display:flex;flex-direction:column;gap:10px}.row-actions{margin-top:12px}.row-actions--gap{display:flex;flex-wrap:wrap;gap:8px}.section-header-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.org-new-cta-card{display:block;margin-top:12px}.orgs-empty-card{background:var(--ion-color-secondary-tint, rgba(var(--ion-color-secondary-rgb, 130, 101, 208), .2));border-radius:18px;padding:18px 16px 12px;display:flex;flex-direction:column;gap:8px}.orgs-empty-card__main{display:flex;align-items:center;gap:10px}.orgs-empty-card__icon{font-size:20px;flex-shrink:0;color:var(--ion-color-dark)}.orgs-empty-card__text{font-size:.875rem;color:var(--ion-color-dark)}.orgs-empty-card__link{background:none;border:none;padding:0;cursor:pointer;font-size:.8125rem;color:var(--ion-color-primary);text-align:left;text-decoration:underline;text-underline-offset:2px;font-family:inherit}.orgs-list{display:flex;flex-direction:column;gap:8px}.org-card{display:flex;align-items:center;gap:14px;padding:14px 16px;border-radius:12px;background:var(--ion-color-light, #f4f5f8);border:1.5px solid transparent;cursor:pointer;transition:background .15s,border-color .15s}.org-card:active{opacity:.75}.org-card--active{border-color:var(--ion-color-primary);background:color-mix(in srgb,var(--ion-color-primary) 8%,transparent)}:host-context(body.dark) .org-card,:host-context(html.ion-palette-dark) .org-card,:host-context([data-theme=\"dark\"]) .org-card{background:#ffffff0d}:host-context(body.dark) .org-card--active,:host-context(html.ion-palette-dark) .org-card--active,:host-context([data-theme=\"dark\"]) .org-card--active{background:color-mix(in srgb,var(--ion-color-primary) 15%,transparent)}.org-card__icon{width:40px;height:40px;border-radius:50%;background:color-mix(in srgb,var(--ion-color-primary) 15%,transparent);display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:20px;color:var(--ion-color-primary)}.org-card__body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.org-card__name{font-weight:600;font-size:.95rem;color:var(--ion-color-dark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.org-card__meta{display:flex;flex-direction:column;gap:1px;margin-top:3px}.org-card__meta-item{font-size:.78rem;color:var(--ion-color-dark)}.org-card__meta-label{font-weight:600;color:var(--ion-color-dark);margin-right:4px}.org-card__end{display:flex;align-items:center;gap:8px;flex-shrink:0}\n"], dependencies: [{ kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: EmptyStateComponent, selector: "val-empty-state", inputs: ["props"] }, { kind: "component", type: SkeletonLayoutComponent, selector: "val-skeleton-layout", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["preset", "props"], outputs: ["onClick"] }, { kind: "component", type: CtaCardComponent, selector: "val-cta-card", inputs: ["props"], outputs: ["onAction"] }, { kind: "component", type: InvitationCardComponent, selector: "val-invitation-card", inputs: ["props"], outputs: ["onAccept", "onDecline"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { 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"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] }); }
|
|
542
|
+
}
|
|
543
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AccountViewComponent, decorators: [{
|
|
544
|
+
type: Component,
|
|
545
|
+
args: [{ selector: 'val-account-view', standalone: true, imports: [
|
|
546
|
+
DisplayComponent,
|
|
547
|
+
EmptyStateComponent,
|
|
548
|
+
SkeletonLayoutComponent,
|
|
549
|
+
TitleComponent,
|
|
550
|
+
TextComponent,
|
|
551
|
+
ButtonComponent,
|
|
552
|
+
CtaCardComponent,
|
|
553
|
+
InvitationCardComponent,
|
|
554
|
+
IonIcon,
|
|
555
|
+
IonButton,
|
|
556
|
+
TitleCasePipe,
|
|
557
|
+
], template: `
|
|
558
|
+
<div class="page">
|
|
559
|
+
<header class="page-header">
|
|
560
|
+
<val-display [props]="{ size: 'small', color: 'dark', content: pageTitle() }" />
|
|
561
|
+
<val-title
|
|
562
|
+
[props]="{
|
|
563
|
+
size: 'large',
|
|
564
|
+
color: 'dark',
|
|
565
|
+
bold: false,
|
|
566
|
+
content: pageDescription(),
|
|
567
|
+
}"
|
|
568
|
+
/>
|
|
569
|
+
</header>
|
|
570
|
+
|
|
571
|
+
@if (resolvedConfig().showPendingInvites && pendingInvites().length > 0) {
|
|
572
|
+
<val-title
|
|
573
|
+
[props]="{
|
|
574
|
+
size: 'medium',
|
|
575
|
+
color: 'dark',
|
|
576
|
+
bold: true,
|
|
577
|
+
content: tt('pendingInvitesTitle'),
|
|
578
|
+
}"
|
|
579
|
+
/>
|
|
580
|
+
@for (invite of pendingInvites(); track invite.orgId) {
|
|
581
|
+
<val-invitation-card
|
|
582
|
+
[props]="{
|
|
583
|
+
token: invite.orgId,
|
|
584
|
+
orgName: invite.orgName,
|
|
585
|
+
inviterName: invite.inviterName,
|
|
586
|
+
role: invite.roleId,
|
|
587
|
+
accepting: inviteAccepting() === invite.orgId,
|
|
588
|
+
disabled: !!inviteAccepting(),
|
|
589
|
+
acceptLabel: tt('accept'),
|
|
590
|
+
declineLabel: tt('decline'),
|
|
591
|
+
}"
|
|
592
|
+
(onAccept)="acceptPendingInvite(invite)"
|
|
593
|
+
(onDecline)="declinePendingInvite(invite)"
|
|
594
|
+
/>
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
@if (resolvedConfig().showOrganizations) {
|
|
599
|
+
<!-- Organizations -->
|
|
600
|
+
<section class="settings-section">
|
|
601
|
+
<div class="section-header-row">
|
|
602
|
+
<val-title
|
|
603
|
+
[props]="{
|
|
604
|
+
size: 'medium',
|
|
605
|
+
color: 'dark',
|
|
606
|
+
bold: true,
|
|
607
|
+
content: orgsTitle(),
|
|
608
|
+
}"
|
|
609
|
+
/>
|
|
610
|
+
@if (orgs().length > 1) {
|
|
611
|
+
<ion-button fill="outline" color="dark" shape="round" size="small" (click)="onSwitchAccount()">
|
|
612
|
+
{{ tt('orgsViewAll') }}
|
|
613
|
+
</ion-button>
|
|
614
|
+
}
|
|
615
|
+
</div>
|
|
616
|
+
<div class="section-body">
|
|
617
|
+
@if (orgsLoading()) {
|
|
618
|
+
<val-skeleton-layout [props]="{ preset: 'list', rows: 3 }" />
|
|
619
|
+
} @else if (orgsErrorState()) {
|
|
620
|
+
<val-empty-state [props]="orgsErrorState()!" />
|
|
621
|
+
} @else {
|
|
622
|
+
@if (activeOrg(); as org) {
|
|
623
|
+
<div class="orgs-list">
|
|
624
|
+
<div class="org-card org-card--active">
|
|
625
|
+
<div class="org-card__icon">
|
|
626
|
+
<ion-icon name="business-outline" />
|
|
627
|
+
</div>
|
|
628
|
+
<div class="org-card__body">
|
|
629
|
+
<span class="org-card__name">{{ org.name }}</span>
|
|
630
|
+
<div class="org-card__meta">
|
|
631
|
+
<span class="org-card__meta-item">
|
|
632
|
+
<span class="org-card__meta-label">{{ tt('orgsLabelType') }}</span>
|
|
633
|
+
{{ orgTypeLabel(org.type) }}
|
|
634
|
+
</span>
|
|
635
|
+
@if (activeOrgRole()) {
|
|
636
|
+
<span class="org-card__meta-item">
|
|
637
|
+
<span class="org-card__meta-label">{{ tt('orgsLabelRole') }}</span>
|
|
638
|
+
{{ activeOrgRole() | titlecase }}
|
|
639
|
+
</span>
|
|
640
|
+
}
|
|
641
|
+
<span class="org-card__meta-item">
|
|
642
|
+
<span class="org-card__meta-label">{{ tt('orgsLabelStatus') }}</span>
|
|
643
|
+
{{ tt('orgsStatusActive') }}
|
|
644
|
+
</span>
|
|
645
|
+
</div>
|
|
646
|
+
</div>
|
|
647
|
+
<div class="org-card__end">
|
|
648
|
+
<ion-button fill="outline" color="dark" shape="round" size="small" (click)="onManageOrg()">
|
|
649
|
+
{{ tt('orgsManage') }}
|
|
650
|
+
</ion-button>
|
|
651
|
+
</div>
|
|
652
|
+
</div>
|
|
653
|
+
</div>
|
|
654
|
+
} @else if (orgs().length === 0) {
|
|
655
|
+
<div class="orgs-empty-card">
|
|
656
|
+
<div class="orgs-empty-card__main">
|
|
657
|
+
<ion-icon name="people-outline" class="orgs-empty-card__icon" />
|
|
658
|
+
<span class="orgs-empty-card__text">{{ orgsEmpty() }}</span>
|
|
659
|
+
</div>
|
|
660
|
+
<button class="orgs-empty-card__link" (click)="onMoreInfo()">
|
|
661
|
+
{{ orgsMoreInfo() }}
|
|
662
|
+
</button>
|
|
663
|
+
</div>
|
|
664
|
+
}
|
|
665
|
+
@if (resolvedConfig().showNewOrgCta) {
|
|
666
|
+
<!-- Nueva organizacion: CTA card con titulo, subtitulo y boton -->
|
|
667
|
+
<val-cta-card class="org-new-cta-card" [props]="newOrgCtaProps()" (onAction)="onNewOrg()" />
|
|
668
|
+
}
|
|
669
|
+
}
|
|
670
|
+
</div>
|
|
671
|
+
</section>
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
@if (resolvedConfig().showLogout) {
|
|
675
|
+
<!-- Logout this session -->
|
|
676
|
+
<section class="settings-section">
|
|
677
|
+
<val-title
|
|
678
|
+
[props]="{
|
|
679
|
+
size: 'medium',
|
|
680
|
+
color: 'dark',
|
|
681
|
+
bold: true,
|
|
682
|
+
content: logoutTitle(),
|
|
683
|
+
}"
|
|
684
|
+
/>
|
|
685
|
+
<div class="section-body">
|
|
686
|
+
<val-text
|
|
687
|
+
[props]="{
|
|
688
|
+
content: logoutHint(),
|
|
689
|
+
size: 'medium',
|
|
690
|
+
color: 'dark',
|
|
691
|
+
bold: false,
|
|
692
|
+
}"
|
|
693
|
+
/>
|
|
694
|
+
<div class="row-actions">
|
|
695
|
+
<val-button [props]="logoutButtonProps()" (click)="onLogout()" />
|
|
696
|
+
</div>
|
|
697
|
+
</div>
|
|
698
|
+
</section>
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
@if (resolvedConfig().showDeleteAccount) {
|
|
702
|
+
<!-- Delete account -->
|
|
703
|
+
<section class="settings-section">
|
|
704
|
+
<val-title
|
|
705
|
+
[props]="{
|
|
706
|
+
size: 'medium',
|
|
707
|
+
color: 'dark',
|
|
708
|
+
bold: true,
|
|
709
|
+
content: dangerDeleteTitle(),
|
|
710
|
+
}"
|
|
711
|
+
/>
|
|
712
|
+
<div class="section-body">
|
|
713
|
+
<val-text
|
|
714
|
+
[props]="{
|
|
715
|
+
content: dangerDeleteHint(),
|
|
716
|
+
size: 'medium',
|
|
717
|
+
color: 'dark',
|
|
718
|
+
bold: false,
|
|
719
|
+
}"
|
|
720
|
+
/>
|
|
721
|
+
<div class="row-actions">
|
|
722
|
+
<val-button [props]="deleteAccountButtonProps()" (onClick)="onDeleteAccount()" />
|
|
723
|
+
</div>
|
|
724
|
+
</div>
|
|
725
|
+
</section>
|
|
726
|
+
}
|
|
727
|
+
</div>
|
|
728
|
+
`, styles: [".page{padding:16px 0;max-width:720px;margin:0 auto}.page-header{margin-bottom:16px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.settings-section val-title{display:block;margin-bottom:12px}.section-body{display:flex;flex-direction:column;gap:10px}.row-actions{margin-top:12px}.row-actions--gap{display:flex;flex-wrap:wrap;gap:8px}.section-header-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.org-new-cta-card{display:block;margin-top:12px}.orgs-empty-card{background:var(--ion-color-secondary-tint, rgba(var(--ion-color-secondary-rgb, 130, 101, 208), .2));border-radius:18px;padding:18px 16px 12px;display:flex;flex-direction:column;gap:8px}.orgs-empty-card__main{display:flex;align-items:center;gap:10px}.orgs-empty-card__icon{font-size:20px;flex-shrink:0;color:var(--ion-color-dark)}.orgs-empty-card__text{font-size:.875rem;color:var(--ion-color-dark)}.orgs-empty-card__link{background:none;border:none;padding:0;cursor:pointer;font-size:.8125rem;color:var(--ion-color-primary);text-align:left;text-decoration:underline;text-underline-offset:2px;font-family:inherit}.orgs-list{display:flex;flex-direction:column;gap:8px}.org-card{display:flex;align-items:center;gap:14px;padding:14px 16px;border-radius:12px;background:var(--ion-color-light, #f4f5f8);border:1.5px solid transparent;cursor:pointer;transition:background .15s,border-color .15s}.org-card:active{opacity:.75}.org-card--active{border-color:var(--ion-color-primary);background:color-mix(in srgb,var(--ion-color-primary) 8%,transparent)}:host-context(body.dark) .org-card,:host-context(html.ion-palette-dark) .org-card,:host-context([data-theme=\"dark\"]) .org-card{background:#ffffff0d}:host-context(body.dark) .org-card--active,:host-context(html.ion-palette-dark) .org-card--active,:host-context([data-theme=\"dark\"]) .org-card--active{background:color-mix(in srgb,var(--ion-color-primary) 15%,transparent)}.org-card__icon{width:40px;height:40px;border-radius:50%;background:color-mix(in srgb,var(--ion-color-primary) 15%,transparent);display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:20px;color:var(--ion-color-primary)}.org-card__body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.org-card__name{font-weight:600;font-size:.95rem;color:var(--ion-color-dark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.org-card__meta{display:flex;flex-direction:column;gap:1px;margin-top:3px}.org-card__meta-item{font-size:.78rem;color:var(--ion-color-dark)}.org-card__meta-label{font-weight:600;color:var(--ion-color-dark);margin-right:4px}.org-card__end{display:flex;align-items:center;gap:8px;flex-shrink:0}\n"] }]
|
|
729
|
+
}], ctorParameters: () => [], propDecorators: { config: [{
|
|
730
|
+
type: Input
|
|
731
|
+
}] } });
|
|
732
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvYWNjb3VudC12aWV3L2FjY291bnQtdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUNMLGVBQWUsRUFDZixxQkFBcUIsRUFDckIsV0FBVyxFQUNYLGFBQWEsRUFDYixxQkFBcUIsR0FDdEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDL0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFFeEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDNUUsT0FB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJLVCxpeEZBdkxDLGdCQUFnQiwyRUFDaEIsbUJBQW1CLCtFQUNuQix1QkFBdUIsbUZBQ3ZCLGNBQWMseUVBQ2QsYUFBYSx3RUFDYixlQUFlLDBHQUNmLGdCQUFnQixtR0FDaEIsdUJBQXVCLHVIQUN2QixPQUFPLDJKQUNQLFNBQVMsK09BQ1QsYUFBYTs7NEZBa1ZKLG9CQUFvQjtrQkFoV2hDLFNBQVM7K0JBQ0Usa0JBQWtCLGNBQ2hCLElBQUksV0FDUDt3QkFDUCxnQkFBZ0I7d0JBQ2hCLG1CQUFtQjt3QkFDbkIsdUJBQXVCO3dCQUN2QixjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLHVCQUF1Qjt3QkFDdkIsT0FBTzt3QkFDUCxTQUFTO3dCQUNULGFBQWE7cUJBQ2QsWUFDUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMktUO3dEQW9MUSxNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUaXRsZUNhc2VQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGluamVjdCwgSW5wdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSW9uQnV0dG9uLCBJb25JY29uIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7XG4gIGJ1c2luZXNzT3V0bGluZSxcbiAgY2hldnJvbkZvcndhcmRPdXRsaW5lLFxuICBtYWlsT3V0bGluZSxcbiAgcGVvcGxlT3V0bGluZSxcbiAgc3dhcEhvcml6b250YWxPdXRsaW5lLFxufSBmcm9tICdpb25pY29ucy9pY29ucyc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEaXNwbGF5Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvZGlzcGxheS9kaXNwbGF5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZXh0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdGV4dC90ZXh0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaXRsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3RpdGxlL3RpdGxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDdGFDYXJkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2N0YS1jYXJkL2N0YS1jYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFbXB0eVN0YXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2VtcHR5LXN0YXRlL2VtcHR5LXN0YXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFbXB0eVN0YXRlTWV0YWRhdGEgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvZW1wdHktc3RhdGUvdHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlRXJyb3JTdGF0ZVByb3BzIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2VtcHR5LXN0YXRlL2ZhY3RvcnknO1xuaW1wb3J0IHsgSW52aXRhdGlvbkNhcmRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvaW52aXRhdGlvbi1jYXJkL2ludml0YXRpb24tY2FyZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uR3JvdXBNZXRhZGF0YSB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9idXR0b24tZ3JvdXAvdHlwZXMnO1xuaW1wb3J0IHsgU2tlbGV0b25MYXlvdXRDb21wb25lbnQgfSBmcm9tICcuLi9za2VsZXRvbi1sYXlvdXQvc2tlbGV0b24tbGF5b3V0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdXR0b25NZXRhZGF0YSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hdXRoL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4nO1xuaW1wb3J0IHsgaW50ZXJwcmV0RXJyb3IgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9lcnJvcnMvaW50ZXJwcmV0LWVycm9yJztcbmltcG9ydCB7IE1vZGFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21vZGFsL21vZGFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9uYXZpZ2F0aW9uL25hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBPcmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvb3JnL29yZy5zZXJ2aWNlJztcbmltcG9ydCB7IE9yZ2FuaXphdGlvbiwgUGVuZGluZ0ludml0YXRpb24gfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9vcmcvdHlwZXMnO1xuaW1wb3J0IHsgY29ubmVjdFBhZ2VSZWZyZXNoIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcGFnZS1yZWZyZXNoL3BhZ2UtcmVmcmVzaC5zZXJ2aWNlJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RvYXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgVmFsdGVjaEVycm9yU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Vycm9ycy92YWx0ZWNoLWVycm9yLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBDcmVhdGVPcmdNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL2NyZWF0ZS1vcmctbW9kYWwvY3JlYXRlLW9yZy1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGVsZXRlQWNjb3VudE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vZGVsZXRlLWFjY291bnQtbW9kYWwvZGVsZXRlLWFjY291bnQtbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IE9yZ0luZm9TaGVldENvbXBvbmVudCB9IGZyb20gJy4uL29yZy1pbmZvLXNoZWV0L29yZy1pbmZvLXNoZWV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTd2l0Y2hPcmdNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL3N3aXRjaC1vcmctbW9kYWwvc3dpdGNoLW9yZy1tb2RhbC5jb21wb25lbnQnO1xuXG5pbXBvcnQgeyBBY2NvdW50Vmlld0NvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQUNDT1VOVF9WSUVXX0kxOE4gfSBmcm9tICcuL2FjY291bnQtdmlldy5pMThuJztcblxuYWRkSWNvbnMoeyBwZW9wbGVPdXRsaW5lLCBidXNpbmVzc091dGxpbmUsIGNoZXZyb25Gb3J3YXJkT3V0bGluZSwgc3dhcEhvcml6b250YWxPdXRsaW5lLCBtYWlsT3V0bGluZSB9KTtcblxuY29uc3QgREVGQVVMVF9OQU1FU1BBQ0UgPSAnU2V0dGluZ3MuQWNjb3VudCc7XG5jb25zdCBERUZBVUxUX01BTkFHRV9PUkdfUk9VVEUgPSAnL2FwcC9zZXR0aW5ncy9vcmdhbml6YXRpb24nO1xuXG4vKipcbiAqIGB2YWwtYWNjb3VudC12aWV3YCDigJQgdmlzdGEgQ3VlbnRhIGZ1bGwtZmVhdHVyZSBhdXRvY29udGVuaWRhIChvcmdhbmlzbSkuXG4gKiBQcm9tb3ZpZGEgZGVzZGUgYHNob3djYXNlYCBiYWpvIGVsIHByb2Nlc28gZGUgQURSLTAyMS4gUmXDum5lOlxuICogIC0gKipJbnZpdGFjaW9uZXMgcGVuZGllbnRlcyoqIOKAlCBhY2VwdGFyIC8gcmVjaGF6YXIgKGB2YWwtaW52aXRhdGlvbi1jYXJkYCkuXG4gKiAgLSAqKk9yZ2FuaXphY2lvbmVzKiog4oCUIGNhcmQgZGUgb3JnIGFjdGl2YSArIGVtcHR5LWNhcmQgKyBDVEEgXCJOdWV2YSBvcmdcIlxuICogICAgKG1vZGFsIGB2YWwtY3JlYXRlLW9yZy1tb2RhbGApICsgXCJWZXIgdG9kYXNcIiAobW9kYWwgYHZhbC1zd2l0Y2gtb3JnLW1vZGFsYCkuXG4gKiAgLSAqKkNlcnJhciBlc3RhIHNlc2nDs24qKiDigJQgYGF1dGgubG9nb3V0V2l0aENvbmZpcm1hdGlvbigpYC5cbiAqICAtICoqRWxpbWluYXIgY3VlbnRhKiog4oCUIG1vZGFsIGB2YWwtZGVsZXRlLWFjY291bnQtbW9kYWxgLlxuICpcbiAqIE5PIHJlbmRlcml6YSBpb24tY29udGVudCDigJQgdml2ZSBkZW50cm8gZGUgdmFsLXBhZ2Utd3JhcHBlci4gTm8gdXNhIGRlZXAtbGlua3M7XG4gKiBgQWN0aXZhdGVkUm91dGVgIHNlIGlueWVjdGEgYHsgb3B0aW9uYWw6IHRydWUgfWAgc29sbyBwYXJhIGxlZXIgZWwgcm91dGUgZGF0YVxuICogZGUgY29uZmlnLiBMYSBuYXZlZ2FjacOzbiBhIGxhIG9yZyByb3V0ZSB2YSBwb3IgYE5hdmlnYXRpb25TZXJ2aWNlYC5cbiAqXG4gKiBBdXRvLXJlZ2lzdHJhIHN1cyBkZWZhdWx0cyBpMThuIChlcy9lbikgZW4gZWwgY29uc3RydWN0b3Igc2kgZWwgY29uc3VtZXIgbm9cbiAqIHByb3ZlecOzIGVsIG5hbWVzcGFjZSBjb25maWd1cmFkbyAoZGVmYXVsdCBgU2V0dGluZ3MuQWNjb3VudGApLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtYWNjb3VudC12aWV3JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIERpc3BsYXlDb21wb25lbnQsXG4gICAgRW1wdHlTdGF0ZUNvbXBvbmVudCxcbiAgICBTa2VsZXRvbkxheW91dENvbXBvbmVudCxcbiAgICBUaXRsZUNvbXBvbmVudCxcbiAgICBUZXh0Q29tcG9uZW50LFxuICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgICBDdGFDYXJkQ29tcG9uZW50LFxuICAgIEludml0YXRpb25DYXJkQ29tcG9uZW50LFxuICAgIElvbkljb24sXG4gICAgSW9uQnV0dG9uLFxuICAgIFRpdGxlQ2FzZVBpcGUsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInBhZ2VcIj5cbiAgICAgIDxoZWFkZXIgY2xhc3M9XCJwYWdlLWhlYWRlclwiPlxuICAgICAgICA8dmFsLWRpc3BsYXkgW3Byb3BzXT1cInsgc2l6ZTogJ3NtYWxsJywgY29sb3I6ICdkYXJrJywgY29udGVudDogcGFnZVRpdGxlKCkgfVwiIC8+XG4gICAgICAgIDx2YWwtdGl0bGVcbiAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgc2l6ZTogJ2xhcmdlJyxcbiAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHBhZ2VEZXNjcmlwdGlvbigpLFxuICAgICAgICAgIH1cIlxuICAgICAgICAvPlxuICAgICAgPC9oZWFkZXI+XG5cbiAgICAgIEBpZiAocmVzb2x2ZWRDb25maWcoKS5zaG93UGVuZGluZ0ludml0ZXMgJiYgcGVuZGluZ0ludml0ZXMoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIDx2YWwtdGl0bGVcbiAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHR0KCdwZW5kaW5nSW52aXRlc1RpdGxlJyksXG4gICAgICAgICAgfVwiXG4gICAgICAgIC8+XG4gICAgICAgIEBmb3IgKGludml0ZSBvZiBwZW5kaW5nSW52aXRlcygpOyB0cmFjayBpbnZpdGUub3JnSWQpIHtcbiAgICAgICAgICA8dmFsLWludml0YXRpb24tY2FyZFxuICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgdG9rZW46IGludml0ZS5vcmdJZCxcbiAgICAgICAgICAgICAgb3JnTmFtZTogaW52aXRlLm9yZ05hbWUsXG4gICAgICAgICAgICAgIGludml0ZXJOYW1lOiBpbnZpdGUuaW52aXRlck5hbWUsXG4gICAgICAgICAgICAgIHJvbGU6IGludml0ZS5yb2xlSWQsXG4gICAgICAgICAgICAgIGFjY2VwdGluZzogaW52aXRlQWNjZXB0aW5nKCkgPT09IGludml0ZS5vcmdJZCxcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6ICEhaW52aXRlQWNjZXB0aW5nKCksXG4gICAgICAgICAgICAgIGFjY2VwdExhYmVsOiB0dCgnYWNjZXB0JyksXG4gICAgICAgICAgICAgIGRlY2xpbmVMYWJlbDogdHQoJ2RlY2xpbmUnKSxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgKG9uQWNjZXB0KT1cImFjY2VwdFBlbmRpbmdJbnZpdGUoaW52aXRlKVwiXG4gICAgICAgICAgICAob25EZWNsaW5lKT1cImRlY2xpbmVQZW5kaW5nSW52aXRlKGludml0ZSlcIlxuICAgICAgICAgIC8+XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgQGlmIChyZXNvbHZlZENvbmZpZygpLnNob3dPcmdhbml6YXRpb25zKSB7XG4gICAgICAgIDwhLS0gT3JnYW5pemF0aW9ucyAtLT5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyLXJvd1wiPlxuICAgICAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb250ZW50OiBvcmdzVGl0bGUoKSxcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgQGlmIChvcmdzKCkubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwib3V0bGluZVwiIGNvbG9yPVwiZGFya1wiIHNoYXBlPVwicm91bmRcIiBzaXplPVwic21hbGxcIiAoY2xpY2spPVwib25Td2l0Y2hBY2NvdW50KClcIj5cbiAgICAgICAgICAgICAgICB7eyB0dCgnb3Jnc1ZpZXdBbGwnKSB9fVxuICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tYm9keVwiPlxuICAgICAgICAgICAgQGlmIChvcmdzTG9hZGluZygpKSB7XG4gICAgICAgICAgICAgIDx2YWwtc2tlbGV0b24tbGF5b3V0IFtwcm9wc109XCJ7IHByZXNldDogJ2xpc3QnLCByb3dzOiAzIH1cIiAvPlxuICAgICAgICAgICAgfSBAZWxzZSBpZiAob3Jnc0Vycm9yU3RhdGUoKSkge1xuICAgICAgICAgICAgICA8dmFsLWVtcHR5LXN0YXRlIFtwcm9wc109XCJvcmdzRXJyb3JTdGF0ZSgpIVwiIC8+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgQGlmIChhY3RpdmVPcmcoKTsgYXMgb3JnKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9yZ3MtbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9yZy1jYXJkIG9yZy1jYXJkLS1hY3RpdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9yZy1jYXJkX19pY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJidXNpbmVzcy1vdXRsaW5lXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcmctY2FyZF9fYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3JnLWNhcmRfX25hbWVcIj57eyBvcmcubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3JnLWNhcmRfX21ldGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3JnLWNhcmRfX21ldGEtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZy1jYXJkX19tZXRhLWxhYmVsXCI+e3sgdHQoJ29yZ3NMYWJlbFR5cGUnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3JnVHlwZUxhYmVsKG9yZy50eXBlKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChhY3RpdmVPcmdSb2xlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcmctY2FyZF9fbWV0YS1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcmctY2FyZF9fbWV0YS1sYWJlbFwiPnt7IHR0KCdvcmdzTGFiZWxSb2xlJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYWN0aXZlT3JnUm9sZSgpIHwgdGl0bGVjYXNlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3JnLWNhcmRfX21ldGEtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZy1jYXJkX19tZXRhLWxhYmVsXCI+e3sgdHQoJ29yZ3NMYWJlbFN0YXR1cycpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0dCgnb3Jnc1N0YXR1c0FjdGl2ZScpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3JnLWNhcmRfX2VuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJvdXRsaW5lXCIgY29sb3I9XCJkYXJrXCIgc2hhcGU9XCJyb3VuZFwiIHNpemU9XCJzbWFsbFwiIChjbGljayk9XCJvbk1hbmFnZU9yZygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyB0dCgnb3Jnc01hbmFnZScpIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9IEBlbHNlIGlmIChvcmdzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9yZ3MtZW1wdHktY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9yZ3MtZW1wdHktY2FyZF9fbWFpblwiPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInBlb3BsZS1vdXRsaW5lXCIgY2xhc3M9XCJvcmdzLWVtcHR5LWNhcmRfX2ljb25cIiAvPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZ3MtZW1wdHktY2FyZF9fdGV4dFwiPnt7IG9yZ3NFbXB0eSgpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwib3Jncy1lbXB0eS1jYXJkX19saW5rXCIgKGNsaWNrKT1cIm9uTW9yZUluZm8oKVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBvcmdzTW9yZUluZm8oKSB9fVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGlmIChyZXNvbHZlZENvbmZpZygpLnNob3dOZXdPcmdDdGEpIHtcbiAgICAgICAgICAgICAgICA8IS0tIE51ZXZhIG9yZ2FuaXphY2lvbjogQ1RBIGNhcmQgY29uIHRpdHVsbywgc3VidGl0dWxvIHkgYm90b24gLS0+XG4gICAgICAgICAgICAgICAgPHZhbC1jdGEtY2FyZCBjbGFzcz1cIm9yZy1uZXctY3RhLWNhcmRcIiBbcHJvcHNdPVwibmV3T3JnQ3RhUHJvcHMoKVwiIChvbkFjdGlvbik9XCJvbk5ld09yZygpXCIgLz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICB9XG5cbiAgICAgIEBpZiAocmVzb2x2ZWRDb25maWcoKS5zaG93TG9nb3V0KSB7XG4gICAgICAgIDwhLS0gTG9nb3V0IHRoaXMgc2Vzc2lvbiAtLT5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uXCI+XG4gICAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgICAgICAgIGNvbnRlbnQ6IGxvZ291dFRpdGxlKCksXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWJvZHlcIj5cbiAgICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGxvZ291dEhpbnQoKSxcbiAgICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cImxvZ291dEJ1dHRvblByb3BzKClcIiAoY2xpY2spPVwib25Mb2dvdXQoKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgfVxuXG4gICAgICBAaWYgKHJlc29sdmVkQ29uZmlnKCkuc2hvd0RlbGV0ZUFjY291bnQpIHtcbiAgICAgICAgPCEtLSBEZWxldGUgYWNjb3VudCAtLT5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uXCI+XG4gICAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgICAgICAgIGNvbnRlbnQ6IGRhbmdlckRlbGV0ZVRpdGxlKCksXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWJvZHlcIj5cbiAgICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGRhbmdlckRlbGV0ZUhpbnQoKSxcbiAgICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cImRlbGV0ZUFjY291bnRCdXR0b25Qcm9wcygpXCIgKG9uQ2xpY2spPVwib25EZWxldGVBY2NvdW50KClcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgLnBhZ2Uge1xuICAgICAgICBwYWRkaW5nOiAxNnB4IDA7XG4gICAgICAgIG1heC13aWR0aDogNzIwcHg7XG4gICAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgfVxuICAgICAgLnBhZ2UtaGVhZGVyIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDtcbiAgICAgIH1cbiAgICAgIC5zZXR0aW5ncy1zZWN0aW9uIHtcbiAgICAgICAgcGFkZGluZzogMTZweCAwO1xuICAgICAgfVxuICAgICAgLnNldHRpbmdzLXNlY3Rpb24gKyAuc2V0dGluZ3Mtc2VjdGlvbiB7XG4gICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS12YWwtYm9yZGVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMDgpKTtcbiAgICAgIH1cbiAgICAgIC5zZXR0aW5ncy1zZWN0aW9uIHZhbC10aXRsZSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICAgICAgfVxuICAgICAgLnNlY3Rpb24tYm9keSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMTBweDtcbiAgICAgIH1cbiAgICAgIC5yb3ctYWN0aW9ucyB7XG4gICAgICAgIG1hcmdpbi10b3A6IDEycHg7XG4gICAgICB9XG4gICAgICAucm93LWFjdGlvbnMtLWdhcCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICB9XG4gICAgICAuc2VjdGlvbi1oZWFkZXItcm93IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICAgICAgfVxuICAgICAgLm9yZy1uZXctY3RhLWNhcmQge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgbWFyZ2luLXRvcDogMTJweDtcbiAgICAgIH1cbiAgICAgIC5vcmdzLWVtcHR5LWNhcmQge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3Itc2Vjb25kYXJ5LXRpbnQsIHJnYmEodmFyKC0taW9uLWNvbG9yLXNlY29uZGFyeS1yZ2IsIDEzMCwgMTAxLCAyMDgpLCAwLjIpKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMThweDtcbiAgICAgICAgcGFkZGluZzogMThweCAxNnB4IDEycHg7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgfVxuICAgICAgLm9yZ3MtZW1wdHktY2FyZF9fbWFpbiB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogMTBweDtcbiAgICAgIH1cbiAgICAgIC5vcmdzLWVtcHR5LWNhcmRfX2ljb24ge1xuICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmspO1xuICAgICAgfVxuICAgICAgLm9yZ3MtZW1wdHktY2FyZF9fdGV4dCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFyayk7XG4gICAgICB9XG4gICAgICAub3Jncy1lbXB0eS1jYXJkX19saW5rIHtcbiAgICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICAgICAgdGV4dC11bmRlcmxpbmUtb2Zmc2V0OiAycHg7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICAgICAgfVxuICAgICAgLm9yZ3MtbGlzdCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgfVxuICAgICAgLm9yZy1jYXJkIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiAxNHB4O1xuICAgICAgICBwYWRkaW5nOiAxNHB4IDE2cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1saWdodCwgI2Y0ZjVmOCk7XG4gICAgICAgIGJvcmRlcjogMS41cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgdHJhbnNpdGlvbjpcbiAgICAgICAgICBiYWNrZ3JvdW5kIDAuMTVzLFxuICAgICAgICAgIGJvcmRlci1jb2xvciAwLjE1cztcbiAgICAgIH1cbiAgICAgIC5vcmctY2FyZDphY3RpdmUge1xuICAgICAgICBvcGFjaXR5OiAwLjc1O1xuICAgICAgfVxuICAgICAgLm9yZy1jYXJkLS1hY3RpdmUge1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KTtcbiAgICAgICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KSA4JSwgdHJhbnNwYXJlbnQpO1xuICAgICAgfVxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5vcmctY2FyZCxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAub3JnLWNhcmQsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5vcmctY2FyZCB7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7XG4gICAgICB9XG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLm9yZy1jYXJkLS1hY3RpdmUsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLm9yZy1jYXJkLS1hY3RpdmUsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5vcmctY2FyZC0tYWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KSAxNSUsIHRyYW5zcGFyZW50KTtcbiAgICAgIH1cbiAgICAgIC5vcmctY2FyZF9faWNvbiB7XG4gICAgICAgIHdpZHRoOiA0MHB4O1xuICAgICAgICBoZWlnaHQ6IDQwcHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KSAxNSUsIHRyYW5zcGFyZW50KTtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSk7XG4gICAgICB9XG4gICAgICAub3JnLWNhcmRfX2JvZHkge1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMnB4O1xuICAgICAgfVxuICAgICAgLm9yZy1jYXJkX19uYW1lIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgZm9udC1zaXplOiAwLjk1cmVtO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmspO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgIH1cbiAgICAgIC5vcmctY2FyZF9fbWV0YSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMXB4O1xuICAgICAgICBtYXJnaW4tdG9wOiAzcHg7XG4gICAgICB9XG4gICAgICAub3JnLWNhcmRfX21ldGEtaXRlbSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43OHJlbTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrKTtcbiAgICAgIH1cbiAgICAgIC5vcmctY2FyZF9fbWV0YS1sYWJlbCB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFyayk7XG4gICAgICAgIG1hcmdpbi1yaWdodDogNHB4O1xuICAgICAgfVxuICAgICAgLm9yZy1jYXJkX19lbmQge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQWNjb3VudFZpZXdDb21wb25lbnQge1xuICBwcml2YXRlIG5hdiA9IGluamVjdChOYXZpZ2F0aW9uU2VydmljZSk7XG4gIHByaXZhdGUgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG4gIHByaXZhdGUgYXV0aCA9IGluamVjdChBdXRoU2VydmljZSk7XG4gIHByaXZhdGUgb3JnU2VydmljZSA9IGluamVjdChPcmdTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBtb2RhbFNlcnZpY2UgPSBpbmplY3QoTW9kYWxTZXJ2aWNlKTtcbiAgcHJpdmF0ZSB0b2FzdCA9IGluamVjdChUb2FzdFNlcnZpY2UpO1xuICBwcml2YXRlIGVycm9ycyA9IGluamVjdChWYWx0ZWNoRXJyb3JTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAvKipcbiAgICogQ29uZmlnIHbDrWEgQElucHV0IChvYmplY3QtZmlyc3QpLiBTaSBubyBzZSBwYXNhLCBzZSBjYWUgYWwgcm91dGUgZGF0YVxuICAgKiBgYWNjb3VudENvbmZpZ2AgKHBvYmxhZG8gcG9yIGBwcm92aWRlVmFsdGVjaEFjY291bnRSb3V0ZXNgKS4gYHJlc29sdmVkQ29uZmlnYFxuICAgKiBtZXJnZWEgY29uIGxvcyBkZWZhdWx0cyDigJQgYEBJbnB1dGAgZ2FuYSBzb2JyZSByb3V0ZSBkYXRhLlxuICAgKi9cbiAgQElucHV0KCkgY29uZmlnPzogQWNjb3VudFZpZXdDb25maWc7XG5cbiAgcmVhZG9ubHkgcmVzb2x2ZWRDb25maWcgPSBjb21wdXRlZDxcbiAgICBSZXF1aXJlZDxPbWl0PEFjY291bnRWaWV3Q29uZmlnLCAnb25PcmdTd2l0Y2hlZCcgfCAnb25PcmdDcmVhdGVkJyB8ICdvbkxvZ2dlZE91dCcgfCAnb25BY2NvdW50RGVsZXRlZCc+PiAmXG4gICAgICBQaWNrPEFjY291bnRWaWV3Q29uZmlnLCAnb25PcmdTd2l0Y2hlZCcgfCAnb25PcmdDcmVhdGVkJyB8ICdvbkxvZ2dlZE91dCcgfCAnb25BY2NvdW50RGVsZXRlZCc+XG4gID4oKCkgPT4ge1xuICAgIGNvbnN0IGZyb21Sb3V0ZSA9ICh0aGlzLnJvdXRlPy5zbmFwc2hvdC5kYXRhWydhY2NvdW50Q29uZmlnJ10gPz8ge30pIGFzIEFjY291bnRWaWV3Q29uZmlnO1xuICAgIGNvbnN0IG1lcmdlZDogQWNjb3VudFZpZXdDb25maWcgPSB7IC4uLmZyb21Sb3V0ZSwgLi4uKHRoaXMuY29uZmlnID8/IHt9KSB9O1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UGVuZGluZ0ludml0ZXM6IG1lcmdlZC5zaG93UGVuZGluZ0ludml0ZXMgPz8gdHJ1ZSxcbiAgICAgIHNob3dPcmdhbml6YXRpb25zOiBtZXJnZWQuc2hvd09yZ2FuaXphdGlvbnMgPz8gdHJ1ZSxcbiAgICAgIHNob3dOZXdPcmdDdGE6IG1lcmdlZC5zaG93TmV3T3JnQ3RhID8/IHRydWUsXG4gICAgICBzaG93TG9nb3V0OiBtZXJnZWQuc2hvd0xvZ291dCA/PyB0cnVlLFxuICAgICAgc2hvd0RlbGV0ZUFjY291bnQ6IG1lcmdlZC5zaG93RGVsZXRlQWNjb3VudCA/PyB0cnVlLFxuICAgICAgaTE4bk5hbWVzcGFjZTogbWVyZ2VkLmkxOG5OYW1lc3BhY2UgPz8gREVGQVVMVF9OQU1FU1BBQ0UsXG4gICAgICBtYW5hZ2VPcmdSb3V0ZTogbWVyZ2VkLm1hbmFnZU9yZ1JvdXRlID8/IERFRkFVTFRfTUFOQUdFX09SR19ST1VURSxcbiAgICAgIG9uT3JnU3dpdGNoZWQ6IG1lcmdlZC5vbk9yZ1N3aXRjaGVkLFxuICAgICAgb25PcmdDcmVhdGVkOiBtZXJnZWQub25PcmdDcmVhdGVkLFxuICAgICAgb25Mb2dnZWRPdXQ6IG1lcmdlZC5vbkxvZ2dlZE91dCxcbiAgICAgIG9uQWNjb3VudERlbGV0ZWQ6IG1lcmdlZC5vbkFjY291bnREZWxldGVkLFxuICAgIH07XG4gIH0pO1xuXG4gIC8qKiBOYW1lc3BhY2UgaTE4biByZXN1ZWx0byAoY2FwdHVyYWRvIHBhcmEgbGxhbWFkYXMgbm8tcmVhY3RpdmFzKS4gKi9cbiAgcHJpdmF0ZSBnZXQgbnMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZENvbmZpZygpLmkxOG5OYW1lc3BhY2U7XG4gIH1cblxuICByZWFkb25seSBvcmdzID0gc2lnbmFsPE9yZ2FuaXphdGlvbltdPihbXSk7XG4gIHJlYWRvbmx5IG9yZ3NMb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBvcmdzRXJyb3IgPSBzaWduYWw8dW5rbm93bj4obnVsbCk7XG5cbiAgcmVhZG9ubHkgb3Jnc0Vycm9yU3RhdGUgPSBjb21wdXRlZDxFbXB0eVN0YXRlTWV0YWRhdGEgfCBudWxsPigoKSA9PiB7XG4gICAgdGhpcy5pMThuLmxhbmcoKTtcbiAgICBjb25zdCBlcnIgPSB0aGlzLm9yZ3NFcnJvcigpO1xuICAgIGlmICghZXJyKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gY3JlYXRlRXJyb3JTdGF0ZVByb3BzKGVyciwge1xuICAgICAgdGl0bGU6IHtcbiAgICAgICAgb2ZmbGluZTogdGhpcy50dCgnb3Jnc09mZmxpbmVUaXRsZScpLFxuICAgICAgICBlcnJvcjogdGhpcy50dCgnb3Jnc0Vycm9yVGl0bGUnKSxcbiAgICAgIH0sXG4gICAgICBkZXNjcmlwdGlvbjoge1xuICAgICAgICBvZmZsaW5lOiB0aGlzLnR0KCdvcmdzT2ZmbGluZUhpbnQnKSxcbiAgICAgICAgZXJyb3I6IGludGVycHJldEVycm9yKGVycikubWVzc2FnZSxcbiAgICAgIH0sXG4gICAgICByZXRyeUxhYmVsOiB0aGlzLnR0KCdvcmdzUmV0cnknKSxcbiAgICAgIG9uUmV0cnk6ICgpID0+IHRoaXMubG9hZE9yZ3MoKSxcbiAgICAgIHJldHJ5aW5nOiB0aGlzLm9yZ3NMb2FkaW5nKCksXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHBlbmRpbmdJbnZpdGVzID0gc2lnbmFsPFBlbmRpbmdJbnZpdGF0aW9uW10+KFtdKTtcbiAgcmVhZG9ubHkgcGVuZGluZ0ludml0ZXNMb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgaW52aXRlQWNjZXB0aW5nID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIHJlYWRvbmx5IHBhZ2VUaXRsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHQoJ3BhZ2VUaXRsZScpKTtcbiAgcmVhZG9ubHkgcGFnZURlc2NyaXB0aW9uID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50dCgncGFnZURlc2NyaXB0aW9uJykpO1xuICByZWFkb25seSBvcmdzVGl0bGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnR0KCdvcmdzVGl0bGUnKSk7XG4gIHJlYWRvbmx5IG9yZ3NFbXB0eSA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHQoJ29yZ3NFbXB0eScpKTtcbiAgcmVhZG9ubHkgb3Jnc01vcmVJbmZvID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50dCgnb3Jnc01vcmVJbmZvJykpO1xuICByZWFkb25seSBvcmdzTmV3UXVlc3Rpb24gPSBjb21wdXRlZCgoKSA9PiB0aGlzLnR0KCdvcmdzTmV3UXVlc3Rpb24nKSk7XG4gIHJlYWRvbmx5IG9yZ3NOZXdIaW50ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50dCgnb3Jnc05ld0hpbnQnKSk7XG4gIHJlYWRvbmx5IG5ld09yZ0N0YVByb3BzID0gY29tcHV0ZWQoKCkgPT4gKHtcbiAgICB0aXRsZTogdGhpcy50dCgnb3Jnc05ld1F1ZXN0aW9uJyksXG4gICAgZGVzY3JpcHRpb246IHRoaXMudHQoJ29yZ3NOZXdIaW50JyksXG4gICAgcGFkZGluZzogJzE2cHgnLFxuICAgIGJvcmRlclJhZGl1czogJzE0cHgnLFxuICAgIGFjdGlvbnM6IHtcbiAgICAgIHBvc2l0aW9uOiAncmlnaHQnLFxuICAgICAgY29sdW1uZWQ6IGZhbHNlLFxuICAgICAgYnV0dG9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogdGhpcy50dCgnb3Jnc05ld0N0YScpLFxuICAgICAgICAgIGNvbG9yOiAncHJpbWFyeScsXG4gICAgICAgICAgZmlsbDogJ291dGxpbmUnLFxuICAgICAgICAgIHNoYXBlOiAncm91bmQnLFxuICAgICAgICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICBzdGF0ZTogJ0VOQUJMRUQnLFxuICAgICAgICAgIHRva2VuOiAnYWNjb3VudC1uZXctb3JnJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSBhcyBCdXR0b25Hcm91cE1ldGFkYXRhLFxuICB9KSk7XG4gIHJlYWRvbmx5IGxvZ291dFRpdGxlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50dCgnbG9nb3V0VGl0bGUnKSk7XG4gIHJlYWRvbmx5IGxvZ291dEhpbnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnR0KCdsb2dvdXRIaW50JykpO1xuICByZWFkb25seSBkYW5nZXJUaXRsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHQoJ2RhbmdlclRpdGxlJykpO1xuICByZWFkb25seSBkYW5nZXJEZWxldGVUaXRsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHQoJ2RhbmdlckRlbGV0ZVRpdGxlJykpO1xuICByZWFkb25seSBkYW5nZXJEZWxldGVIaW50ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50dCgnZGFuZ2VyRGVsZXRlSGludCcpKTtcblxuICByZWFkb25seSBhY3RpdmVPcmdJZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB1ID0gdGhpcy5hdXRoLnVzZXIoKSBhcyB7XG4gICAgICBhY3RpdmVPcmdJZD86IHN0cmluZztcbiAgICAgIGFjdGl2ZU9yZz86IHN0cmluZztcbiAgICB9IHwgbnVsbDtcbiAgICByZXR1cm4gdT8uYWN0aXZlT3JnSWQgPz8gdT8uYWN0aXZlT3JnID8/ICcnO1xuICB9KTtcblxuICByZWFkb25seSBhY3RpdmVPcmdSb2xlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHJvbGVzID0gKHRoaXMuYXV0aCBhcyB1bmtub3duIGFzIHsgcm9sZXM/OiAoKSA9PiBzdHJpbmdbXSB9KS5yb2xlcz8uKCkgPz8gW107XG4gICAgcmV0dXJuIHJvbGVzWzBdID8/IG51bGw7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGFjdGl2ZU9yZyA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3JncygpLmZpbmQobyA9PiBvLmlkID09PSB0aGlzLmFjdGl2ZU9yZ0lkKCkpID8/IG51bGwpO1xuXG4gIHJlYWRvbmx5IGxvZ291dEJ1dHRvblByb3BzID0gY29tcHV0ZWQ8UGFydGlhbDxCdXR0b25NZXRhZGF0YT4+KCgpID0+ICh7XG4gICAgdGV4dDogdGhpcy50dCgnbG9nb3V0JyksXG4gICAgY29sb3I6ICdkYXJrJyxcbiAgICBmaWxsOiAnb3V0bGluZScsXG4gICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgIHNoYXBlOiAncm91bmQnLFxuICAgIHR5cGU6ICdidXR0b24nLFxuICAgIHRva2VuOiAnYWNjb3VudC1sb2dvdXQnLFxuICB9KSk7XG5cbiAgcmVhZG9ubHkgZGVsZXRlQWNjb3VudEJ1dHRvblByb3BzID0gY29tcHV0ZWQ8UGFydGlhbDxCdXR0b25NZXRhZGF0YT4+KCgpID0+ICh7XG4gICAgdGV4dDogdGhpcy50dCgnZGFuZ2VyRGVsZXRlQ3RhJyksXG4gICAgY29sb3I6ICdkYXJrJyxcbiAgICBmaWxsOiAnb3V0bGluZScsXG4gICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgIHNoYXBlOiAncm91bmQnLFxuICAgIHR5cGU6ICdidXR0b24nLFxuICAgIHRva2VuOiAnYWNjb3VudC1kZWxldGUnLFxuICB9KSk7XG5cbiAgcmVhZG9ubHkgc3dpdGNoQWNjb3VudEJ1dHRvblByb3BzID0gY29tcHV0ZWQ8UGFydGlhbDxCdXR0b25NZXRhZGF0YT4+KCgpID0+ICh7XG4gICAgdGV4dDogdGhpcy50dCgnc3dpdGNoQWNjb3VudEN0YScpLFxuICAgIGNvbG9yOiAnZGFyaycsXG4gICAgZmlsbDogJ291dGxpbmUnLFxuICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICB0b2tlbjogJ2FjY291bnQtc3dpdGNoJyxcbiAgfSkpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5zID0gdGhpcy5ucztcbiAgICBpZiAoIXRoaXMuaTE4bi5oYXNOYW1lc3BhY2UobnMpKSB7XG4gICAgICB0aGlzLmkxOG4ucmVnaXN0ZXJDb250ZW50KG5zLCBBQ0NPVU5UX1ZJRVdfSTE4Tik7XG4gICAgfVxuICAgIHRoaXMubmF2LnNldEJhY2tIZWFkZXIoJ3BhZ2VUaXRsZScsIG5zLCB7IHdpdGhNZW51OiB0cnVlIH0pO1xuICAgIHRoaXMubG9hZE9yZ3MoKTtcbiAgICB0aGlzLmxvYWRQZW5kaW5nSW52aXRlcygpO1xuICAgIGNvbm5lY3RQYWdlUmVmcmVzaChhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbdGhpcy5sb2FkT3JncygpLCB0aGlzLmxvYWRQZW5kaW5nSW52aXRlcygpXSk7XG4gICAgfSk7XG4gIH1cblxuICBvcmdUeXBlTGFiZWwodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBtYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBQRVJTT05BTDogdGhpcy50dCgnb3Jnc1R5cGVQZXJzb25hbCcpLFxuICAgICAgUFJJVkFURTogdGhpcy50dCgnb3Jnc1R5cGVQcml2YXRlJyksXG4gICAgICBQVUJMSUM6IHRoaXMudHQoJ29yZ3NUeXBlUHVibGljJyksXG4gICAgICBCVVNJTkVTUzogdGhpcy50dCgnb3Jnc1R5cGVCdXNpbmVzcycpLFxuICAgIH07XG4gICAgcmV0dXJuIG1hcFt0eXBlXSA/PyB0eXBlO1xuICB9XG5cbiAgb25Td2l0Y2hBY2NvdW50KCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih7XG4gICAgICBjb21wb25lbnQ6IFN3aXRjaE9yZ01vZGFsQ29tcG9uZW50LFxuICAgICAgY29tcG9uZW50UHJvcHM6IHtcbiAgICAgICAgaTE4bk5hbWVzcGFjZTogJ1NldHRpbmdzLlN3aXRjaE9yZycsXG4gICAgICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZE9yZ3MoKTtcbiAgICAgICAgICB0aGlzLmxvYWRQZW5kaW5nSW52aXRlcygpO1xuICAgICAgICAgIHRoaXMucmVzb2x2ZWRDb25maWcoKS5vbk9yZ1N3aXRjaGVkPy4oKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBicmVha3BvaW50czoge1xuICAgICAgICBicmVha3BvaW50czogWzAsIDAuODVdLFxuICAgICAgICBpbml0aWFsQnJlYWtwb2ludDogMC44NSxcbiAgICAgICAgc2hvd0hhbmRsZTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBiYWNrZHJvcERpc21pc3M6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBvbkRlbGV0ZUFjY291bnQoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHtcbiAgICAgIGNvbXBvbmVudDogRGVsZXRlQWNjb3VudE1vZGFsQ29tcG9uZW50LFxuICAgICAgY29tcG9uZW50UHJvcHM6IHtcbiAgICAgICAgaTE4bk5hbWVzcGFjZTogJ1NldHRpbmdzLkRlbGV0ZUFjY291bnQnLFxuICAgICAgfSxcbiAgICAgIGJyZWFrcG9pbnRzOiB7XG4gICAgICAgIGJyZWFrcG9pbnRzOiBbMCwgMC44NV0sXG4gICAgICAgIGluaXRpYWxCcmVha3BvaW50OiAwLjg1LFxuICAgICAgICBzaG93SGFuZGxlOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIGJhY2tkcm9wRGlzbWlzczogZmFsc2UsXG4gICAgfSk7XG4gICAgdGhpcy5yZXNvbHZlZENvbmZpZygpLm9uQWNjb3VudERlbGV0ZWQ/LigpO1xuICB9XG5cbiAgb25NYW5hZ2VPcmcoKTogdm9pZCB7XG4gICAgdGhpcy5uYXYubmF2aWdhdGVCeVVybCh0aGlzLnJlc29sdmVkQ29uZmlnKCkubWFuYWdlT3JnUm91dGUpO1xuICB9XG5cbiAgb25OZXdPcmcoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHtcbiAgICAgIGNvbXBvbmVudDogQ3JlYXRlT3JnTW9kYWxDb21wb25lbnQsXG4gICAgICBjb21wb25lbnRQcm9wczoge1xuICAgICAgICBpMThuTmFtZXNwYWNlOiAnQ3JlYXRlT3JnTW9kYWwnLFxuICAgICAgICBvblN1Y2Nlc3M6IChuZXdPcmc6IE9yZ2FuaXphdGlvbikgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZE9yZ3MoKTtcbiAgICAgICAgICB0aGlzLnJlc29sdmVkQ29uZmlnKCkub25PcmdDcmVhdGVkPy4obmV3T3JnKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBicmVha3BvaW50czoge1xuICAgICAgICBicmVha3BvaW50czogWzAsIDAuOTJdLFxuICAgICAgICBpbml0aWFsQnJlYWtwb2ludDogMC45MixcbiAgICAgICAgc2hvd0hhbmRsZTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBiYWNrZHJvcERpc21pc3M6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBvbk1vcmVJbmZvKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih7XG4gICAgICBjb21wb25lbnQ6IE9yZ0luZm9TaGVldENvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiB7XG4gICAgICAgIHRpdGxlOiB0aGlzLnR0KCdvcmdzSW5mb1RpdGxlJyksXG4gICAgICAgIHN1YnRpdGxlOiB0aGlzLnR0KCdvcmdzSW5mb1N1YnRpdGxlJyksXG4gICAgICAgIGJvZHk6IHRoaXMudHQoJ29yZ3NJbmZvQ29udGVudCcpLFxuICAgICAgICBjbG9zZUxhYmVsOiB0aGlzLnR0KCdvcmdzSW5mb0Nsb3NlJyksXG4gICAgICAgIGNsb3NlUHJvcHM6IHtcbiAgICAgICAgICB0ZXh0OiB0aGlzLnR0KCdvcmdzSW5mb0Nsb3NlJyksXG4gICAgICAgICAgZmlsbDogJ291dGxpbmUnLFxuICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgICAgICAgIGV4cGFuZDogJ2Jsb2NrJyxcbiAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBicmVha3BvaW50czoge1xuICAgICAgICBicmVha3BvaW50czogWzAsIDAuODVdLFxuICAgICAgICBpbml0aWFsQnJlYWtwb2ludDogMC44NSxcbiAgICAgICAgc2hvd0hhbmRsZTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBiYWNrZHJvcERpc21pc3M6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBvbkxvZ291dCgpOiB2b2lkIHtcbiAgICB0aGlzLmF1dGgubG9nb3V0V2l0aENvbmZpcm1hdGlvbigpO1xuICAgIHRoaXMucmVzb2x2ZWRDb25maWcoKS5vbkxvZ2dlZE91dD8uKCk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRQZW5kaW5nSW52aXRlcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnBlbmRpbmdJbnZpdGVzTG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgdGhpcy5vcmdTZXJ2aWNlXG4gICAgICAgIC5nZXRQZW5kaW5nSW52aXRhdGlvbnMoKVxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiBpdGVtcyA9PiB7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdJbnZpdGVzLnNldChpdGVtcyk7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdJbnZpdGVzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ0ludml0ZXNMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhY2NlcHRQZW5kaW5nSW52aXRlKGludml0ZTogUGVuZGluZ0ludml0YXRpb24pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnZpdGVBY2NlcHRpbmcoKSkgcmV0dXJuO1xuICAgIHRoaXMuaW52aXRlQWNjZXB0aW5nLnNldChpbnZpdGUub3JnSWQpO1xuICAgIHRoaXMub3JnU2VydmljZVxuICAgICAgLmFjY2VwdEludml0YXRpb24oaW52aXRlLm9yZ0lkKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy50b2FzdC5zaG93KHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMudHQoJ2ludml0ZUFjY2VwdGVkJyksXG4gICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgZHVyYXRpb246IDM1MDAsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5wZW5kaW5nSW52aXRlcy51cGRhdGUobGlzdCA9PiBsaXN0LmZpbHRlcihpID0+IGkub3JnSWQgIT09IGludml0ZS5vcmdJZCkpO1xuICAgICAgICAgIHRoaXMubG9hZE9yZ3MoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvcnMuaGFuZGxlKGVyciwgeyBjb250ZXh0OiAnYWNjb3VudC5hY2NlcHRQZW5kaW5nSW52aXRlJyB9KTtcbiAgICAgICAgICB0aGlzLmludml0ZUFjY2VwdGluZy5zZXQobnVsbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB0aGlzLmludml0ZUFjY2VwdGluZy5zZXQobnVsbCksXG4gICAgICB9KTtcbiAgfVxuXG4gIGRlY2xpbmVQZW5kaW5nSW52aXRlKGludml0ZTogUGVuZGluZ0ludml0YXRpb24pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnZpdGVBY2NlcHRpbmcoKSkgcmV0dXJuO1xuICAgIHRoaXMuaW52aXRlQWNjZXB0aW5nLnNldChpbnZpdGUub3JnSWQpO1xuICAgIHRoaXMub3JnU2VydmljZVxuICAgICAgLmRlY2xpbmVJbnZpdGF0aW9uKGludml0ZS5vcmdJZClcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMudG9hc3Quc2hvdyh7XG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnR0KCdpbnZpdGVEZWNsaW5lZCcpLFxuICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgIGR1cmF0aW9uOiAyNTAwLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMucGVuZGluZ0ludml0ZXMudXBkYXRlKGxpc3QgPT4gbGlzdC5maWx0ZXIoaSA9PiBpLm9yZ0lkICE9PSBpbnZpdGUub3JnSWQpKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvcnMuaGFuZGxlKGVyciwgeyBjb250ZXh0OiAnYWNjb3VudC5kZWNsaW5lUGVuZGluZ0ludml0ZScgfSk7XG4gICAgICAgICAgdGhpcy5pbnZpdGVBY2NlcHRpbmcuc2V0KG51bGwpO1xuICAgICAgICB9LFxuICAgICAgICBjb21wbGV0ZTogKCkgPT4gdGhpcy5pbnZpdGVBY2NlcHRpbmcuc2V0KG51bGwpLFxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRPcmdzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMub3Jnc0xvYWRpbmcuc2V0KHRydWUpO1xuICAgIHRoaXMub3Jnc0Vycm9yLnNldChudWxsKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICB0aGlzLm9yZ1NlcnZpY2UubGlzdE15T3JncygpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IG9yZ3MgPT4ge1xuICAgICAgICAgIGNvbnN0IGFjdGl2ZUlkID0gdGhpcy5hY3RpdmVPcmdJZCgpO1xuICAgICAgICAgIHRoaXMub3Jncy5zZXQoWy4uLm9yZ3NdLnNvcnQoKGEsIGIpID0+IChhLmlkID09PSBhY3RpdmVJZCA/IC0xIDogYi5pZCA9PT0gYWN0aXZlSWQgPyAxIDogMCkpKTtcbiAgICAgICAgICB0aGlzLm9yZ3NMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgICB0aGlzLm9yZ3NFcnJvci5zZXQoZXJyKTtcbiAgICAgICAgICB0aGlzLm9yZ3NMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdHQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udChrZXksIHRoaXMubnMpO1xuICB9XG59XG4iXX0=
|