valtech-components 4.0.944 → 4.0.945
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/avatar/avatar.component.mjs +3 -3
- package/esm2022/lib/components/atoms/box/box.component.mjs +3 -3
- package/esm2022/lib/components/atoms/button/button.component.mjs +15 -5
- package/esm2022/lib/components/atoms/container/container.component.mjs +2 -2
- package/esm2022/lib/components/atoms/display/display.component.mjs +3 -3
- package/esm2022/lib/components/atoms/divider/divider.component.mjs +3 -3
- package/esm2022/lib/components/atoms/href/href.component.mjs +3 -3
- package/esm2022/lib/components/atoms/icon/icon.component.mjs +3 -3
- package/esm2022/lib/components/atoms/image/image.component.mjs +3 -3
- package/esm2022/lib/components/atoms/progress-bar/progress-bar.component.mjs +3 -3
- package/esm2022/lib/components/atoms/qr-code/qr-code.component.mjs +3 -3
- package/esm2022/lib/components/atoms/text/text.component.mjs +3 -3
- package/esm2022/lib/components/atoms/title/title.component.mjs +3 -3
- package/esm2022/lib/components/molecules/alert-box/alert-box.component.mjs +3 -3
- package/esm2022/lib/components/molecules/button-group/button-group.component.mjs +3 -3
- package/esm2022/lib/components/molecules/card/card.component.mjs +3 -3
- package/esm2022/lib/components/molecules/chip-group/chip-group.component.mjs +3 -3
- package/esm2022/lib/components/molecules/code-display/code-display.component.mjs +3 -3
- package/esm2022/lib/components/molecules/command-display/command-display.component.mjs +3 -3
- package/esm2022/lib/components/molecules/comment/comment.component.mjs +3 -3
- package/esm2022/lib/components/molecules/content-loader/content-loader.component.mjs +3 -3
- package/esm2022/lib/components/molecules/date-input/date-input.component.mjs +3 -3
- package/esm2022/lib/components/molecules/file-input/file-input.component.mjs +3 -3
- package/esm2022/lib/components/molecules/glow-card/glow-card.component.mjs +3 -3
- package/esm2022/lib/components/molecules/hint/hint.component.mjs +3 -3
- package/esm2022/lib/components/molecules/layered-card/layered-card.component.mjs +3 -3
- package/esm2022/lib/components/molecules/link/link.component.mjs +3 -3
- package/esm2022/lib/components/molecules/links-cake/links-cake.component.mjs +3 -3
- package/esm2022/lib/components/molecules/notes-box/notes-box.component.mjs +3 -3
- package/esm2022/lib/components/molecules/password-input/password-input.component.mjs +3 -3
- package/esm2022/lib/components/molecules/pill/pill.component.mjs +3 -3
- package/esm2022/lib/components/molecules/pin-input/pin-input.component.mjs +3 -3
- package/esm2022/lib/components/molecules/popover-selector/popover-selector.component.mjs +3 -3
- package/esm2022/lib/components/molecules/progress-status/progress-status.component.mjs +3 -3
- package/esm2022/lib/components/molecules/prompter/prompter.component.mjs +3 -3
- package/esm2022/lib/components/molecules/rating/rating.component.mjs +3 -3
- package/esm2022/lib/components/molecules/searchbar/searchbar.component.mjs +3 -3
- package/esm2022/lib/components/molecules/select-input/select-input.component.mjs +3 -3
- package/esm2022/lib/components/molecules/stepper/stepper.component.mjs +3 -3
- package/esm2022/lib/components/molecules/text-input/text-input.component.mjs +3 -3
- package/esm2022/lib/components/molecules/title-block/title-block.component.mjs +3 -3
- package/esm2022/lib/components/organisms/about-view/about-view.component.mjs +209 -195
- package/esm2022/lib/components/organisms/account-view/account-view.component.mjs +315 -309
- package/esm2022/lib/components/organisms/api-keys-view/api-keys-view.component.mjs +105 -99
- package/esm2022/lib/components/organisms/article/article.component.mjs +3 -3
- package/esm2022/lib/components/organisms/banner/banner.component.mjs +3 -3
- package/esm2022/lib/components/organisms/comment-section/comment-section.component.mjs +3 -3
- package/esm2022/lib/components/organisms/data-table/data-table.component.mjs +3 -3
- package/esm2022/lib/components/organisms/form/form.component.mjs +3 -3
- package/esm2022/lib/components/organisms/header/header.component.mjs +3 -3
- package/esm2022/lib/components/organisms/item-list/item-list.component.mjs +3 -3
- package/esm2022/lib/components/organisms/no-content/no-content.component.mjs +3 -3
- package/esm2022/lib/components/organisms/notification-preferences-view/notification-preferences-view.component.mjs +217 -204
- package/esm2022/lib/components/organisms/notifications-view/notifications-view.component.mjs +277 -271
- package/esm2022/lib/components/organisms/organization-view/organization-view.component.mjs +497 -483
- package/esm2022/lib/components/organisms/permissions-view/permissions-view.component.mjs +269 -263
- package/esm2022/lib/components/organisms/preferences-view/preferences-view.component.mjs +135 -130
- package/esm2022/lib/components/organisms/profile-view/profile-content.component.mjs +111 -105
- package/esm2022/lib/components/organisms/security-view/security-view.component.mjs +241 -235
- package/esm2022/lib/components/organisms/settings-hub/settings-hub.component.mjs +53 -48
- package/esm2022/lib/components/organisms/toolbar/toolbar.component.mjs +3 -3
- package/esm2022/lib/components/organisms/wizard/wizard.component.mjs +3 -3
- package/esm2022/lib/components/templates/simple/simple.component.mjs +3 -3
- package/esm2022/lib/components/types.mjs +1 -1
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/valtech-components.mjs +2524 -2438
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/atoms/button/button.component.d.ts +6 -0
- package/lib/components/organisms/article/article.component.d.ts +1 -1
- package/lib/components/types.d.ts +12 -2
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
- package/src/lib/components/styles/variables.scss +5 -0
|
@@ -6,6 +6,7 @@ import { addIcons } from 'ionicons';
|
|
|
6
6
|
import { appsOutline, businessOutline } from 'ionicons/icons';
|
|
7
7
|
import { SkeletonLayoutComponent } from '../skeleton-layout/skeleton-layout.component';
|
|
8
8
|
import { ButtonComponent } from '../../atoms/button/button.component';
|
|
9
|
+
import { ContainerComponent } from '../../atoms/container/container.component';
|
|
9
10
|
import { DisplayComponent } from '../../atoms/display/display.component';
|
|
10
11
|
import { PillComponent } from '../../molecules/pill/pill.component';
|
|
11
12
|
import { TextComponent } from '../../atoms/text/text.component';
|
|
@@ -169,140 +170,67 @@ export class PermissionsViewComponent {
|
|
|
169
170
|
}
|
|
170
171
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PermissionsViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
171
172
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: PermissionsViewComponent, isStandalone: true, selector: "val-permissions-view", inputs: { config: "config", isModal: "isModal" }, ngImport: i0, template: `
|
|
172
|
-
<
|
|
173
|
-
<
|
|
174
|
-
<
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
size: 'large',
|
|
178
|
-
color: 'dark',
|
|
179
|
-
bold: false,
|
|
180
|
-
content: tt('pageDescription'),
|
|
181
|
-
}"
|
|
182
|
-
/>
|
|
183
|
-
</header>
|
|
184
|
-
|
|
185
|
-
@if (loading()) {
|
|
186
|
-
<val-skeleton-layout [props]="{ preset: 'list', rows: 4 }" />
|
|
187
|
-
} @else if (loadError()) {
|
|
188
|
-
<div class="error-row">
|
|
189
|
-
<val-text
|
|
173
|
+
<val-container [props]="{ size: 'md', padding: 'none' }">
|
|
174
|
+
<div class="page">
|
|
175
|
+
<header class="page-header">
|
|
176
|
+
<val-display [props]="{ size: 'small', color: 'dark', content: tt('pageTitle') }" />
|
|
177
|
+
<val-title
|
|
190
178
|
[props]="{
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
color: 'medium',
|
|
179
|
+
size: 'large',
|
|
180
|
+
color: 'dark',
|
|
194
181
|
bold: false,
|
|
182
|
+
content: tt('pageDescription'),
|
|
195
183
|
}"
|
|
196
184
|
/>
|
|
197
|
-
|
|
198
|
-
</div>
|
|
199
|
-
} @else {
|
|
200
|
-
@if (resolvedConfig().showSystemRoles) {
|
|
201
|
-
<section class="perm-section">
|
|
202
|
-
<div class="perm-section__header">
|
|
203
|
-
<val-title
|
|
204
|
-
[props]="{
|
|
205
|
-
size: 'medium',
|
|
206
|
-
color: 'dark',
|
|
207
|
-
bold: true,
|
|
208
|
-
content: tt('systemRolesTitle'),
|
|
209
|
-
}"
|
|
210
|
-
/>
|
|
211
|
-
<val-text
|
|
212
|
-
[props]="{
|
|
213
|
-
content: tt('systemRolesHint'),
|
|
214
|
-
size: 'medium',
|
|
215
|
-
color: 'medium',
|
|
216
|
-
bold: false,
|
|
217
|
-
}"
|
|
218
|
-
/>
|
|
219
|
-
</div>
|
|
220
|
-
<div class="role-list">
|
|
221
|
-
@for (role of systemRoles(); track role.id) {
|
|
222
|
-
<div class="role-card">
|
|
223
|
-
<div class="role-card__header">
|
|
224
|
-
<span class="role-card__name">{{ roleLabel(role.name) }}</span>
|
|
225
|
-
<val-pill
|
|
226
|
-
[props]="{
|
|
227
|
-
label: tt('systemBadge'),
|
|
228
|
-
color: 'primary',
|
|
229
|
-
weight: 'bold',
|
|
230
|
-
}"
|
|
231
|
-
/>
|
|
232
|
-
</div>
|
|
233
|
-
@if (role.description) {
|
|
234
|
-
<span class="role-card__desc">{{ role.description }}</span>
|
|
235
|
-
}
|
|
236
|
-
@if (!role.hasPerms) {
|
|
237
|
-
<div class="perm-chips">
|
|
238
|
-
<span class="perm-chip perm-chip--empty">{{ tt('noPermissions') }}</span>
|
|
239
|
-
</div>
|
|
240
|
-
} @else {
|
|
241
|
-
@for (g of role.groups; track g.key) {
|
|
242
|
-
<div [class]="'perm-group perm-group--' + g.scope">
|
|
243
|
-
<span class="perm-group__badge">
|
|
244
|
-
@if (g.scope === 'app') {
|
|
245
|
-
<ion-icon name="apps-outline" />
|
|
246
|
-
}
|
|
247
|
-
@if (g.scope === 'org') {
|
|
248
|
-
<ion-icon name="business-outline" />
|
|
249
|
-
}
|
|
250
|
-
{{ g.label }}
|
|
251
|
-
</span>
|
|
252
|
-
<div class="perm-chips">
|
|
253
|
-
@for (chip of g.chips; track chip.resource) {
|
|
254
|
-
<span [class]="'perm-chip perm-chip--' + chipType(chip)">
|
|
255
|
-
<strong class="perm-chip__resource">{{ chip.resource }}</strong>
|
|
256
|
-
@if (!chip.isAll) {
|
|
257
|
-
<span class="perm-chip__actions">{{ chip.actions.join(', ') }}</span>
|
|
258
|
-
}
|
|
259
|
-
</span>
|
|
260
|
-
}
|
|
261
|
-
</div>
|
|
262
|
-
</div>
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
</div>
|
|
266
|
-
}
|
|
267
|
-
</div>
|
|
268
|
-
</section>
|
|
269
|
-
}
|
|
185
|
+
</header>
|
|
270
186
|
|
|
271
|
-
@if (
|
|
272
|
-
<
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
187
|
+
@if (loading()) {
|
|
188
|
+
<val-skeleton-layout [props]="{ preset: 'list', rows: 4 }" />
|
|
189
|
+
} @else if (loadError()) {
|
|
190
|
+
<div class="error-row">
|
|
191
|
+
<val-text
|
|
192
|
+
[props]="{
|
|
193
|
+
content: tt('errorTitle'),
|
|
194
|
+
size: 'medium',
|
|
195
|
+
color: 'medium',
|
|
196
|
+
bold: false,
|
|
197
|
+
}"
|
|
198
|
+
/>
|
|
199
|
+
<val-button [props]="retryButtonProps()" (click)="load()" />
|
|
200
|
+
</div>
|
|
201
|
+
} @else {
|
|
202
|
+
@if (resolvedConfig().showSystemRoles) {
|
|
203
|
+
<section class="perm-section">
|
|
204
|
+
<div class="perm-section__header">
|
|
205
|
+
<val-title
|
|
206
|
+
[props]="{
|
|
207
|
+
size: 'medium',
|
|
208
|
+
color: 'dark',
|
|
209
|
+
bold: true,
|
|
210
|
+
content: tt('systemRolesTitle'),
|
|
211
|
+
}"
|
|
212
|
+
/>
|
|
213
|
+
<val-text
|
|
214
|
+
[props]="{
|
|
215
|
+
content: tt('systemRolesHint'),
|
|
216
|
+
size: 'medium',
|
|
217
|
+
color: 'medium',
|
|
218
|
+
bold: false,
|
|
219
|
+
}"
|
|
220
|
+
/>
|
|
221
|
+
</div>
|
|
301
222
|
<div class="role-list">
|
|
302
|
-
@for (role of
|
|
223
|
+
@for (role of systemRoles(); track role.id) {
|
|
303
224
|
<div class="role-card">
|
|
304
225
|
<div class="role-card__header">
|
|
305
|
-
<span class="role-card__name">{{ role.name }}</span>
|
|
226
|
+
<span class="role-card__name">{{ roleLabel(role.name) }}</span>
|
|
227
|
+
<val-pill
|
|
228
|
+
[props]="{
|
|
229
|
+
label: tt('systemBadge'),
|
|
230
|
+
color: 'primary',
|
|
231
|
+
weight: 'bold',
|
|
232
|
+
}"
|
|
233
|
+
/>
|
|
306
234
|
</div>
|
|
307
235
|
@if (role.description) {
|
|
308
236
|
<span class="role-card__desc">{{ role.description }}</span>
|
|
@@ -339,12 +267,87 @@ export class PermissionsViewComponent {
|
|
|
339
267
|
</div>
|
|
340
268
|
}
|
|
341
269
|
</div>
|
|
342
|
-
|
|
343
|
-
|
|
270
|
+
</section>
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
@if (resolvedConfig().showCustomRoles) {
|
|
274
|
+
<section class="perm-section">
|
|
275
|
+
<div class="perm-section__header">
|
|
276
|
+
<val-title
|
|
277
|
+
[props]="{
|
|
278
|
+
size: 'medium',
|
|
279
|
+
color: 'dark',
|
|
280
|
+
bold: true,
|
|
281
|
+
content: tt('customRolesTitle'),
|
|
282
|
+
}"
|
|
283
|
+
/>
|
|
284
|
+
<val-text
|
|
285
|
+
[props]="{
|
|
286
|
+
content: tt('customRolesHint'),
|
|
287
|
+
size: 'medium',
|
|
288
|
+
color: 'medium',
|
|
289
|
+
bold: false,
|
|
290
|
+
}"
|
|
291
|
+
/>
|
|
292
|
+
</div>
|
|
293
|
+
@if (customRoles().length === 0) {
|
|
294
|
+
<val-text
|
|
295
|
+
[props]="{
|
|
296
|
+
content: tt('noCustomRoles'),
|
|
297
|
+
size: 'medium',
|
|
298
|
+
color: 'medium',
|
|
299
|
+
bold: false,
|
|
300
|
+
}"
|
|
301
|
+
/>
|
|
302
|
+
} @else {
|
|
303
|
+
<div class="role-list">
|
|
304
|
+
@for (role of customRoles(); track role.id) {
|
|
305
|
+
<div class="role-card">
|
|
306
|
+
<div class="role-card__header">
|
|
307
|
+
<span class="role-card__name">{{ role.name }}</span>
|
|
308
|
+
</div>
|
|
309
|
+
@if (role.description) {
|
|
310
|
+
<span class="role-card__desc">{{ role.description }}</span>
|
|
311
|
+
}
|
|
312
|
+
@if (!role.hasPerms) {
|
|
313
|
+
<div class="perm-chips">
|
|
314
|
+
<span class="perm-chip perm-chip--empty">{{ tt('noPermissions') }}</span>
|
|
315
|
+
</div>
|
|
316
|
+
} @else {
|
|
317
|
+
@for (g of role.groups; track g.key) {
|
|
318
|
+
<div [class]="'perm-group perm-group--' + g.scope">
|
|
319
|
+
<span class="perm-group__badge">
|
|
320
|
+
@if (g.scope === 'app') {
|
|
321
|
+
<ion-icon name="apps-outline" />
|
|
322
|
+
}
|
|
323
|
+
@if (g.scope === 'org') {
|
|
324
|
+
<ion-icon name="business-outline" />
|
|
325
|
+
}
|
|
326
|
+
{{ g.label }}
|
|
327
|
+
</span>
|
|
328
|
+
<div class="perm-chips">
|
|
329
|
+
@for (chip of g.chips; track chip.resource) {
|
|
330
|
+
<span [class]="'perm-chip perm-chip--' + chipType(chip)">
|
|
331
|
+
<strong class="perm-chip__resource">{{ chip.resource }}</strong>
|
|
332
|
+
@if (!chip.isAll) {
|
|
333
|
+
<span class="perm-chip__actions">{{ chip.actions.join(', ') }}</span>
|
|
334
|
+
}
|
|
335
|
+
</span>
|
|
336
|
+
}
|
|
337
|
+
</div>
|
|
338
|
+
</div>
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
</div>
|
|
342
|
+
}
|
|
343
|
+
</div>
|
|
344
|
+
}
|
|
345
|
+
</section>
|
|
346
|
+
}
|
|
344
347
|
}
|
|
345
|
-
|
|
346
|
-
</
|
|
347
|
-
`, isInline: true, styles: [".page{padding:16px 0
|
|
348
|
+
</div>
|
|
349
|
+
</val-container>
|
|
350
|
+
`, isInline: true, styles: [".page{padding:16px 0}.page-header{margin-bottom:24px}.spinner-row,.error-row{display:flex;flex-direction:column;align-items:center;gap:16px;padding:32px 0}.perm-section{margin-bottom:32px}.perm-section__header{margin-bottom:12px}.role-list{display:flex;flex-direction:column;gap:10px}.role-card{border:1.5px solid var(--ion-border-color, rgba(0, 0, 0, .12));border-radius:12px;padding:14px 16px;display:flex;flex-direction:column;gap:10px;background:var(--ion-card-background, var(--ion-background-color, #fff));box-shadow:0 2px 8px #00000012}.role-card__header{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.role-card__name{font-size:.9375rem;font-weight:600;color:var(--ion-color-dark)}.role-card__desc{font-size:.8125rem;color:var(--ion-color-medium);line-height:1.4}.perm-group{display:flex;flex-direction:column;gap:6px}.perm-group__badge{align-self:flex-start;display:inline-flex;align-items:center;gap:4px;font-size:.6875rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:3px 9px;border-radius:6px}.perm-group--app .perm-group__badge{color:var(--ion-color-primary);background:rgba(var(--ion-color-primary-rgb),.12)}.perm-group--org .perm-group__badge{color:var(--ion-color-medium-shade, var(--ion-color-medium));background:var(--ion-color-light-shade, rgba(0, 0, 0, .06))}.perm-group--other .perm-group__badge{color:var(--ion-color-tertiary);background:rgba(var(--ion-color-tertiary-rgb),.12)}.perm-chips{display:flex;flex-wrap:wrap;gap:6px}.perm-chip{display:inline-flex;align-items:baseline;gap:4px;font-size:.75rem;padding:4px 10px;border-radius:20px;background:var(--ion-color-light);color:var(--ion-color-dark);border:1px solid transparent}.perm-chip__resource{font-weight:600}.perm-chip__actions{font-weight:400;color:var(--ion-color-medium);font-size:.6875rem}.perm-chip--all{background:rgba(var(--ion-color-primary-rgb),.1);border-color:rgba(var(--ion-color-primary-rgb),.3);color:var(--ion-color-primary-shade, var(--ion-color-primary))}.perm-chip--all .perm-chip__resource{color:var(--ion-color-primary-shade, var(--ion-color-primary))}.perm-chip--write{background:rgba(var(--ion-color-secondary-rgb),.08);border-color:rgba(var(--ion-color-secondary-rgb),.2)}.perm-chip--write .perm-chip__resource{color:var(--ion-color-secondary-shade, var(--ion-color-secondary))}.perm-chip--read{background:var(--ion-color-light, rgba(0, 0, 0, .04))}.perm-chip--empty{color:var(--ion-color-medium);background:transparent;padding-left:0}\n"], dependencies: [{ kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: SkeletonLayoutComponent, selector: "val-skeleton-layout", inputs: ["props"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: PillComponent, selector: "val-pill", inputs: ["preset", "props"], outputs: ["pillClick", "pillAction"] }, { 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: ContainerComponent, selector: "val-container", inputs: ["props"] }] }); }
|
|
348
351
|
}
|
|
349
352
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PermissionsViewComponent, decorators: [{
|
|
350
353
|
type: Component,
|
|
@@ -356,141 +359,69 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
356
359
|
TitleComponent,
|
|
357
360
|
TextComponent,
|
|
358
361
|
ButtonComponent,
|
|
362
|
+
ContainerComponent,
|
|
359
363
|
], template: `
|
|
360
|
-
<
|
|
361
|
-
<
|
|
362
|
-
<
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
size: 'large',
|
|
366
|
-
color: 'dark',
|
|
367
|
-
bold: false,
|
|
368
|
-
content: tt('pageDescription'),
|
|
369
|
-
}"
|
|
370
|
-
/>
|
|
371
|
-
</header>
|
|
372
|
-
|
|
373
|
-
@if (loading()) {
|
|
374
|
-
<val-skeleton-layout [props]="{ preset: 'list', rows: 4 }" />
|
|
375
|
-
} @else if (loadError()) {
|
|
376
|
-
<div class="error-row">
|
|
377
|
-
<val-text
|
|
364
|
+
<val-container [props]="{ size: 'md', padding: 'none' }">
|
|
365
|
+
<div class="page">
|
|
366
|
+
<header class="page-header">
|
|
367
|
+
<val-display [props]="{ size: 'small', color: 'dark', content: tt('pageTitle') }" />
|
|
368
|
+
<val-title
|
|
378
369
|
[props]="{
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
color: 'medium',
|
|
370
|
+
size: 'large',
|
|
371
|
+
color: 'dark',
|
|
382
372
|
bold: false,
|
|
373
|
+
content: tt('pageDescription'),
|
|
383
374
|
}"
|
|
384
375
|
/>
|
|
385
|
-
|
|
386
|
-
</div>
|
|
387
|
-
} @else {
|
|
388
|
-
@if (resolvedConfig().showSystemRoles) {
|
|
389
|
-
<section class="perm-section">
|
|
390
|
-
<div class="perm-section__header">
|
|
391
|
-
<val-title
|
|
392
|
-
[props]="{
|
|
393
|
-
size: 'medium',
|
|
394
|
-
color: 'dark',
|
|
395
|
-
bold: true,
|
|
396
|
-
content: tt('systemRolesTitle'),
|
|
397
|
-
}"
|
|
398
|
-
/>
|
|
399
|
-
<val-text
|
|
400
|
-
[props]="{
|
|
401
|
-
content: tt('systemRolesHint'),
|
|
402
|
-
size: 'medium',
|
|
403
|
-
color: 'medium',
|
|
404
|
-
bold: false,
|
|
405
|
-
}"
|
|
406
|
-
/>
|
|
407
|
-
</div>
|
|
408
|
-
<div class="role-list">
|
|
409
|
-
@for (role of systemRoles(); track role.id) {
|
|
410
|
-
<div class="role-card">
|
|
411
|
-
<div class="role-card__header">
|
|
412
|
-
<span class="role-card__name">{{ roleLabel(role.name) }}</span>
|
|
413
|
-
<val-pill
|
|
414
|
-
[props]="{
|
|
415
|
-
label: tt('systemBadge'),
|
|
416
|
-
color: 'primary',
|
|
417
|
-
weight: 'bold',
|
|
418
|
-
}"
|
|
419
|
-
/>
|
|
420
|
-
</div>
|
|
421
|
-
@if (role.description) {
|
|
422
|
-
<span class="role-card__desc">{{ role.description }}</span>
|
|
423
|
-
}
|
|
424
|
-
@if (!role.hasPerms) {
|
|
425
|
-
<div class="perm-chips">
|
|
426
|
-
<span class="perm-chip perm-chip--empty">{{ tt('noPermissions') }}</span>
|
|
427
|
-
</div>
|
|
428
|
-
} @else {
|
|
429
|
-
@for (g of role.groups; track g.key) {
|
|
430
|
-
<div [class]="'perm-group perm-group--' + g.scope">
|
|
431
|
-
<span class="perm-group__badge">
|
|
432
|
-
@if (g.scope === 'app') {
|
|
433
|
-
<ion-icon name="apps-outline" />
|
|
434
|
-
}
|
|
435
|
-
@if (g.scope === 'org') {
|
|
436
|
-
<ion-icon name="business-outline" />
|
|
437
|
-
}
|
|
438
|
-
{{ g.label }}
|
|
439
|
-
</span>
|
|
440
|
-
<div class="perm-chips">
|
|
441
|
-
@for (chip of g.chips; track chip.resource) {
|
|
442
|
-
<span [class]="'perm-chip perm-chip--' + chipType(chip)">
|
|
443
|
-
<strong class="perm-chip__resource">{{ chip.resource }}</strong>
|
|
444
|
-
@if (!chip.isAll) {
|
|
445
|
-
<span class="perm-chip__actions">{{ chip.actions.join(', ') }}</span>
|
|
446
|
-
}
|
|
447
|
-
</span>
|
|
448
|
-
}
|
|
449
|
-
</div>
|
|
450
|
-
</div>
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
</div>
|
|
454
|
-
}
|
|
455
|
-
</div>
|
|
456
|
-
</section>
|
|
457
|
-
}
|
|
376
|
+
</header>
|
|
458
377
|
|
|
459
|
-
@if (
|
|
460
|
-
<
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
378
|
+
@if (loading()) {
|
|
379
|
+
<val-skeleton-layout [props]="{ preset: 'list', rows: 4 }" />
|
|
380
|
+
} @else if (loadError()) {
|
|
381
|
+
<div class="error-row">
|
|
382
|
+
<val-text
|
|
383
|
+
[props]="{
|
|
384
|
+
content: tt('errorTitle'),
|
|
385
|
+
size: 'medium',
|
|
386
|
+
color: 'medium',
|
|
387
|
+
bold: false,
|
|
388
|
+
}"
|
|
389
|
+
/>
|
|
390
|
+
<val-button [props]="retryButtonProps()" (click)="load()" />
|
|
391
|
+
</div>
|
|
392
|
+
} @else {
|
|
393
|
+
@if (resolvedConfig().showSystemRoles) {
|
|
394
|
+
<section class="perm-section">
|
|
395
|
+
<div class="perm-section__header">
|
|
396
|
+
<val-title
|
|
397
|
+
[props]="{
|
|
398
|
+
size: 'medium',
|
|
399
|
+
color: 'dark',
|
|
400
|
+
bold: true,
|
|
401
|
+
content: tt('systemRolesTitle'),
|
|
402
|
+
}"
|
|
403
|
+
/>
|
|
404
|
+
<val-text
|
|
405
|
+
[props]="{
|
|
406
|
+
content: tt('systemRolesHint'),
|
|
407
|
+
size: 'medium',
|
|
408
|
+
color: 'medium',
|
|
409
|
+
bold: false,
|
|
410
|
+
}"
|
|
411
|
+
/>
|
|
412
|
+
</div>
|
|
489
413
|
<div class="role-list">
|
|
490
|
-
@for (role of
|
|
414
|
+
@for (role of systemRoles(); track role.id) {
|
|
491
415
|
<div class="role-card">
|
|
492
416
|
<div class="role-card__header">
|
|
493
|
-
<span class="role-card__name">{{ role.name }}</span>
|
|
417
|
+
<span class="role-card__name">{{ roleLabel(role.name) }}</span>
|
|
418
|
+
<val-pill
|
|
419
|
+
[props]="{
|
|
420
|
+
label: tt('systemBadge'),
|
|
421
|
+
color: 'primary',
|
|
422
|
+
weight: 'bold',
|
|
423
|
+
}"
|
|
424
|
+
/>
|
|
494
425
|
</div>
|
|
495
426
|
@if (role.description) {
|
|
496
427
|
<span class="role-card__desc">{{ role.description }}</span>
|
|
@@ -527,15 +458,90 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
527
458
|
</div>
|
|
528
459
|
}
|
|
529
460
|
</div>
|
|
530
|
-
|
|
531
|
-
|
|
461
|
+
</section>
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
@if (resolvedConfig().showCustomRoles) {
|
|
465
|
+
<section class="perm-section">
|
|
466
|
+
<div class="perm-section__header">
|
|
467
|
+
<val-title
|
|
468
|
+
[props]="{
|
|
469
|
+
size: 'medium',
|
|
470
|
+
color: 'dark',
|
|
471
|
+
bold: true,
|
|
472
|
+
content: tt('customRolesTitle'),
|
|
473
|
+
}"
|
|
474
|
+
/>
|
|
475
|
+
<val-text
|
|
476
|
+
[props]="{
|
|
477
|
+
content: tt('customRolesHint'),
|
|
478
|
+
size: 'medium',
|
|
479
|
+
color: 'medium',
|
|
480
|
+
bold: false,
|
|
481
|
+
}"
|
|
482
|
+
/>
|
|
483
|
+
</div>
|
|
484
|
+
@if (customRoles().length === 0) {
|
|
485
|
+
<val-text
|
|
486
|
+
[props]="{
|
|
487
|
+
content: tt('noCustomRoles'),
|
|
488
|
+
size: 'medium',
|
|
489
|
+
color: 'medium',
|
|
490
|
+
bold: false,
|
|
491
|
+
}"
|
|
492
|
+
/>
|
|
493
|
+
} @else {
|
|
494
|
+
<div class="role-list">
|
|
495
|
+
@for (role of customRoles(); track role.id) {
|
|
496
|
+
<div class="role-card">
|
|
497
|
+
<div class="role-card__header">
|
|
498
|
+
<span class="role-card__name">{{ role.name }}</span>
|
|
499
|
+
</div>
|
|
500
|
+
@if (role.description) {
|
|
501
|
+
<span class="role-card__desc">{{ role.description }}</span>
|
|
502
|
+
}
|
|
503
|
+
@if (!role.hasPerms) {
|
|
504
|
+
<div class="perm-chips">
|
|
505
|
+
<span class="perm-chip perm-chip--empty">{{ tt('noPermissions') }}</span>
|
|
506
|
+
</div>
|
|
507
|
+
} @else {
|
|
508
|
+
@for (g of role.groups; track g.key) {
|
|
509
|
+
<div [class]="'perm-group perm-group--' + g.scope">
|
|
510
|
+
<span class="perm-group__badge">
|
|
511
|
+
@if (g.scope === 'app') {
|
|
512
|
+
<ion-icon name="apps-outline" />
|
|
513
|
+
}
|
|
514
|
+
@if (g.scope === 'org') {
|
|
515
|
+
<ion-icon name="business-outline" />
|
|
516
|
+
}
|
|
517
|
+
{{ g.label }}
|
|
518
|
+
</span>
|
|
519
|
+
<div class="perm-chips">
|
|
520
|
+
@for (chip of g.chips; track chip.resource) {
|
|
521
|
+
<span [class]="'perm-chip perm-chip--' + chipType(chip)">
|
|
522
|
+
<strong class="perm-chip__resource">{{ chip.resource }}</strong>
|
|
523
|
+
@if (!chip.isAll) {
|
|
524
|
+
<span class="perm-chip__actions">{{ chip.actions.join(', ') }}</span>
|
|
525
|
+
}
|
|
526
|
+
</span>
|
|
527
|
+
}
|
|
528
|
+
</div>
|
|
529
|
+
</div>
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
</div>
|
|
533
|
+
}
|
|
534
|
+
</div>
|
|
535
|
+
}
|
|
536
|
+
</section>
|
|
537
|
+
}
|
|
532
538
|
}
|
|
533
|
-
|
|
534
|
-
</
|
|
535
|
-
`, styles: [".page{padding:16px 0
|
|
539
|
+
</div>
|
|
540
|
+
</val-container>
|
|
541
|
+
`, styles: [".page{padding:16px 0}.page-header{margin-bottom:24px}.spinner-row,.error-row{display:flex;flex-direction:column;align-items:center;gap:16px;padding:32px 0}.perm-section{margin-bottom:32px}.perm-section__header{margin-bottom:12px}.role-list{display:flex;flex-direction:column;gap:10px}.role-card{border:1.5px solid var(--ion-border-color, rgba(0, 0, 0, .12));border-radius:12px;padding:14px 16px;display:flex;flex-direction:column;gap:10px;background:var(--ion-card-background, var(--ion-background-color, #fff));box-shadow:0 2px 8px #00000012}.role-card__header{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.role-card__name{font-size:.9375rem;font-weight:600;color:var(--ion-color-dark)}.role-card__desc{font-size:.8125rem;color:var(--ion-color-medium);line-height:1.4}.perm-group{display:flex;flex-direction:column;gap:6px}.perm-group__badge{align-self:flex-start;display:inline-flex;align-items:center;gap:4px;font-size:.6875rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:3px 9px;border-radius:6px}.perm-group--app .perm-group__badge{color:var(--ion-color-primary);background:rgba(var(--ion-color-primary-rgb),.12)}.perm-group--org .perm-group__badge{color:var(--ion-color-medium-shade, var(--ion-color-medium));background:var(--ion-color-light-shade, rgba(0, 0, 0, .06))}.perm-group--other .perm-group__badge{color:var(--ion-color-tertiary);background:rgba(var(--ion-color-tertiary-rgb),.12)}.perm-chips{display:flex;flex-wrap:wrap;gap:6px}.perm-chip{display:inline-flex;align-items:baseline;gap:4px;font-size:.75rem;padding:4px 10px;border-radius:20px;background:var(--ion-color-light);color:var(--ion-color-dark);border:1px solid transparent}.perm-chip__resource{font-weight:600}.perm-chip__actions{font-weight:400;color:var(--ion-color-medium);font-size:.6875rem}.perm-chip--all{background:rgba(var(--ion-color-primary-rgb),.1);border-color:rgba(var(--ion-color-primary-rgb),.3);color:var(--ion-color-primary-shade, var(--ion-color-primary))}.perm-chip--all .perm-chip__resource{color:var(--ion-color-primary-shade, var(--ion-color-primary))}.perm-chip--write{background:rgba(var(--ion-color-secondary-rgb),.08);border-color:rgba(var(--ion-color-secondary-rgb),.2)}.perm-chip--write .perm-chip__resource{color:var(--ion-color-secondary-shade, var(--ion-color-secondary))}.perm-chip--read{background:var(--ion-color-light, rgba(0, 0, 0, .04))}.perm-chip--empty{color:var(--ion-color-medium);background:transparent;padding-left:0}\n"] }]
|
|
536
542
|
}], ctorParameters: () => [], propDecorators: { config: [{
|
|
537
543
|
type: Input
|
|
538
544
|
}], isModal: [{
|
|
539
545
|
type: Input
|
|
540
546
|
}] } });
|
|
541
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL3Blcm1pc3Npb25zLXZpZXcvcGVybWlzc2lvbnMtdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUV2RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkUsT0FBTyxFQUFrQixlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxP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QUNQLE9BQU87d0JBQ1AsdUJBQXVCO3dCQUN2QixnQkFBZ0I7d0JBQ2hCLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxhQUFhO3dCQUNiLGVBQWU7cUJBQ2hCLFlBQ1M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0xUO3dEQWlLUSxNQUFNO3NCQUFkLEtBQUs7Z0JBTUcsT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5qZWN0LCBJbnB1dCwgT25Jbml0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJb25JY29uIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7IGFwcHNPdXRsaW5lLCBidXNpbmVzc091dGxpbmUgfSBmcm9tICdpb25pY29ucy9pY29ucyc7XG5pbXBvcnQgeyBTa2VsZXRvbkxheW91dENvbXBvbmVudCB9IGZyb20gJy4uL3NrZWxldG9uLWxheW91dC9za2VsZXRvbi1sYXlvdXQuY29tcG9uZW50JztcblxuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGlzcGxheUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2Rpc3BsYXkvZGlzcGxheS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGlsbENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9waWxsL3BpbGwuY29tcG9uZW50JztcbmltcG9ydCB7IFRleHRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy90ZXh0L3RleHQuY29tcG9uZW50JztcbmltcG9ydCB7IFRpdGxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdGl0bGUvdGl0bGUuY29tcG9uZW50JztcbmltcG9ydCB7IEJ1dHRvbk1ldGFkYXRhLCBDb21wb25lbnRTdGF0ZXMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aC9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pMThuJztcbmltcG9ydCB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3JnU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL29yZy9vcmcuc2VydmljZSc7XG5pbXBvcnQgeyBjb25uZWN0UGFnZVJlZnJlc2ggfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wYWdlLXJlZnJlc2gvcGFnZS1yZWZyZXNoLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgUGVybWlzc2lvbkNhdGFsb2dTZXJ2aWNlLFxuICBQZXJtaXNzaW9uQ2F0YWxvZ1Jlc3BvbnNlLFxuICBQZXJtQ2hpcCxcbiAgUGVybWlzc2lvblNjb3BlR3JvdXAsXG4gIGNsYXNzaWZ5Q2hpcCxcbiAgZ3JvdXBQZXJtaXNzaW9uc0J5U2NvcGUsXG59IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL29yZy9wZXJtaXNzaW9uLWNhdGFsb2cuc2VydmljZSc7XG5cbmltcG9ydCB7IFBlcm1pc3Npb25zVmlld0NvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgUEVSTUlTU0lPTlNfVklFV19JMThOIH0gZnJvbSAnLi9wZXJtaXNzaW9ucy12aWV3LmkxOG4nO1xuXG5jb25zdCBERUZBVUxUX05BTUVTUEFDRSA9ICdTZXR0aW5ncy5QZXJtaXNzaW9ucyc7XG5cbmludGVyZmFjZSBSb2xlVmlldyB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGlzU3lzdGVtOiBib29sZWFuO1xuICBncm91cHM6IFBlcm1pc3Npb25TY29wZUdyb3VwW107XG4gIGhhc1Blcm1zOiBib29sZWFuO1xufVxuXG4vKipcbiAqIGB2YWwtcGVybWlzc2lvbnMtdmlld2Ag4oCUIHZpc3RhIFBlcm1pc29zIGZ1bGwtZmVhdHVyZSBhdXRvY29udGVuaWRhIChvcmdhbmlzbSkuXG4gKiBWaXNvciBSQkFDIGRlIHNvbG8gbGVjdHVyYTogbXVlc3RyYSBsb3Mgcm9sZXMgZGVsIHNpc3RlbWEgKFZpc29yL0VkaXRvci9BZG1pbiArXG4gKiByb2xlcyBkZSBwbGF0YWZvcm1hKSB5IGxvcyByb2xlcyBwZXJzb25hbGl6YWRvcyBkZSBsYSBvcmcgYWN0aXZhLCBjb24gZWxcbiAqIGNhdMOhbG9nbyBkZSBwZXJtaXNvcyBhZ3J1cGFkbyBwb3IgYWxjYW5jZSAoYXBwIGFjdHVhbCAvIHBsYXRhZm9ybWEgLyBvdHJhcyBhcHBzKS5cbiAqIFByb21vdmlkYSBkZXNkZSBgc2hvd2Nhc2VgIGJham8gZWwgcHJvY2VzbyBkZSBBRFItMDIxLlxuICpcbiAqICoqUkJBQyBpbnRlcm5vKiogKGNvbW8gYG9yZ2FuaXphdGlvbi12aWV3YCk6IGxlZSBsYSBvcmcgYWN0aXZhIHbDrWFcbiAqIGBBdXRoU2VydmljZS51c2VyKCkuYWN0aXZlT3JnSWRgLiBMYSB2aXN0YSBOTyBtdXRhIG5hZGEg4oCUIGVsIGNvbnRyb2wgZGUgcXVpw6luXG4gKiBwdWVkZSB2ZXJsYSBlcyByZXNwb25zYWJpbGlkYWQgZGVsIGd1YXJkIGRlIHJ1dGEgZGVsIGNvbnN1bWVyOyBubyBoYXkgZ2F0aW5nXG4gKiBmaW5vIGludGVybm8gbmkgc2UgZXhwb25lIGNvbW8gY29uZmlnLlxuICpcbiAqIERhdG9zOiBgZm9ya0pvaW5gIGRlIGBPcmdTZXJ2aWNlLmxpc3RPcmdSb2xlcyhvcmdJZClgIChyb2xlcyBkZSBsYSBvcmcpICtcbiAqIGBQZXJtaXNzaW9uQ2F0YWxvZ1NlcnZpY2UuZ2V0Q2F0YWxvZyhvcmdJZClgIChjYXTDoWxvZ28gKyBhcHBJZCBhY3R1YWwpLiBFbFxuICogY2F0w6Fsb2dvIGRlZmluZSBlbCBhbGNhbmNlIChgc2NvcGVgL2BhcHBJZGApIGRlIGNhZGEgcmVjdXJzbyBwYXJhIGFncnVwYXIuXG4gKlxuICogTk8gcmVuZGVyaXphIGlvbi1jb250ZW50IOKAlCB2aXZlIGRlbnRybyBkZSB2YWwtcGFnZS13cmFwcGVyLiBgQWN0aXZhdGVkUm91dGVgIHNlXG4gKiBpbnllY3RhIGB7IG9wdGlvbmFsOiB0cnVlIH1gIHNvbG8gcGFyYSBsZWVyIGVsIHJvdXRlIGRhdGEgZGUgY29uZmlnLiBBdXRvLXJlZ2lzdHJhXG4gKiBzdXMgZGVmYXVsdHMgaTE4biAoZXMvZW4pIHNpIGVsIGNvbnN1bWVyIG5vIHByb3ZlecOzIGVsIG5hbWVzcGFjZSAoZGVmYXVsdFxuICogYFNldHRpbmdzLlBlcm1pc3Npb25zYCkuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1wZXJtaXNzaW9ucy12aWV3JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIElvbkljb24sXG4gICAgU2tlbGV0b25MYXlvdXRDb21wb25lbnQsXG4gICAgRGlzcGxheUNvbXBvbmVudCxcbiAgICBQaWxsQ29tcG9uZW50LFxuICAgIFRpdGxlQ29tcG9uZW50LFxuICAgIFRleHRDb21wb25lbnQsXG4gICAgQnV0dG9uQ29tcG9uZW50LFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJwYWdlXCI+XG4gICAgICA8aGVhZGVyIGNsYXNzPVwicGFnZS1oZWFkZXJcIj5cbiAgICAgICAgPHZhbC1kaXNwbGF5IFtwcm9wc109XCJ7IHNpemU6ICdzbWFsbCcsIGNvbG9yOiAnZGFyaycsIGNvbnRlbnQ6IHR0KCdwYWdlVGl0bGUnKSB9XCIgLz5cbiAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICBzaXplOiAnbGFyZ2UnLFxuICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgY29udGVudDogdHQoJ3BhZ2VEZXNjcmlwdGlvbicpLFxuICAgICAgICAgIH1cIlxuICAgICAgICAvPlxuICAgICAgPC9oZWFkZXI+XG5cbiAgICAgIEBpZiAobG9hZGluZygpKSB7XG4gICAgICAgIDx2YWwtc2tlbGV0b24tbGF5b3V0IFtwcm9wc109XCJ7IHByZXNldDogJ2xpc3QnLCByb3dzOiA0IH1cIiAvPlxuICAgICAgfSBAZWxzZSBpZiAobG9hZEVycm9yKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImVycm9yLXJvd1wiPlxuICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgY29udGVudDogdHQoJ2Vycm9yVGl0bGUnKSxcbiAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgIGNvbG9yOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDx2YWwtYnV0dG9uIFtwcm9wc109XCJyZXRyeUJ1dHRvblByb3BzKClcIiAoY2xpY2spPVwibG9hZCgpXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgQGlmIChyZXNvbHZlZENvbmZpZygpLnNob3dTeXN0ZW1Sb2xlcykge1xuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwicGVybS1zZWN0aW9uXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGVybS1zZWN0aW9uX19oZWFkZXJcIj5cbiAgICAgICAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgY29udGVudDogdHQoJ3N5c3RlbVJvbGVzVGl0bGUnKSxcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHR0KCdzeXN0ZW1Sb2xlc0hpbnQnKSxcbiAgICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgICAgY29sb3I6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb2xlLWxpc3RcIj5cbiAgICAgICAgICAgICAgQGZvciAocm9sZSBvZiBzeXN0ZW1Sb2xlcygpOyB0cmFjayByb2xlLmlkKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvbGUtY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvbGUtY2FyZF9faGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicm9sZS1jYXJkX19uYW1lXCI+e3sgcm9sZUxhYmVsKHJvbGUubmFtZSkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtcGlsbFxuICAgICAgICAgICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdHQoJ3N5c3RlbUJhZGdlJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3ByaW1hcnknLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAnYm9sZCcsXG4gICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIEBpZiAocm9sZS5kZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJvbGUtY2FyZF9fZGVzY1wiPnt7IHJvbGUuZGVzY3JpcHRpb24gfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAaWYgKCFyb2xlLmhhc1Blcm1zKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwZXJtLWNoaXBzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwZXJtLWNoaXAgcGVybS1jaGlwLS1lbXB0eVwiPnt7IHR0KCdub1Blcm1pc3Npb25zJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGcgb2Ygcm9sZS5ncm91cHM7IHRyYWNrIGcua2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiJ3Blcm0tZ3JvdXAgcGVybS1ncm91cC0tJyArIGcuc2NvcGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGVybS1ncm91cF9fYmFkZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChnLnNjb3BlID09PSAnYXBwJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiYXBwcy1vdXRsaW5lXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGcuc2NvcGUgPT09ICdvcmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJidXNpbmVzcy1vdXRsaW5lXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBnLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGVybS1jaGlwc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChjaGlwIG9mIGcuY2hpcHM7IHRyYWNrIGNoaXAucmVzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiJ3Blcm0tY2hpcCBwZXJtLWNoaXAtLScgKyBjaGlwVHlwZShjaGlwKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZyBjbGFzcz1cInBlcm0tY2hpcF9fcmVzb3VyY2VcIj57eyBjaGlwLnJlc291cmNlIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFjaGlwLmlzQWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGVybS1jaGlwX19hY3Rpb25zXCI+e3sgY2hpcC5hY3Rpb25zLmpvaW4oJywgJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKHJlc29sdmVkQ29uZmlnKCkuc2hvd0N1c3RvbVJvbGVzKSB7XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJwZXJtLXNlY3Rpb25cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwZXJtLXNlY3Rpb25fX2hlYWRlclwiPlxuICAgICAgICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgnY3VzdG9tUm9sZXNUaXRsZScpLFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8dmFsLXRleHRcbiAgICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgICAgY29udGVudDogdHQoJ2N1c3RvbVJvbGVzSGludCcpLFxuICAgICAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgICBjb2xvcjogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGlmIChjdXN0b21Sb2xlcygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICA8dmFsLXRleHRcbiAgICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgICAgY29udGVudDogdHQoJ25vQ3VzdG9tUm9sZXMnKSxcbiAgICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgICAgY29sb3I6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvbGUtbGlzdFwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKHJvbGUgb2YgY3VzdG9tUm9sZXMoKTsgdHJhY2sgcm9sZS5pZCkge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvbGUtY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm9sZS1jYXJkX19oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJvbGUtY2FyZF9fbmFtZVwiPnt7IHJvbGUubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAocm9sZS5kZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicm9sZS1jYXJkX19kZXNjXCI+e3sgcm9sZS5kZXNjcmlwdGlvbiB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAaWYgKCFyb2xlLmhhc1Blcm1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBlcm0tY2hpcHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGVybS1jaGlwIHBlcm0tY2hpcC0tZW1wdHlcIj57eyB0dCgnbm9QZXJtaXNzaW9ucycpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBAZm9yIChnIG9mIHJvbGUuZ3JvdXBzOyB0cmFjayBnLmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiJ3Blcm0tZ3JvdXAgcGVybS1ncm91cC0tJyArIGcuc2NvcGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwZXJtLWdyb3VwX19iYWRnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZy5zY29wZSA9PT0gJ2FwcCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiYXBwcy1vdXRsaW5lXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChnLnNjb3BlID09PSAnb3JnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJidXNpbmVzcy1vdXRsaW5lXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZy5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwZXJtLWNoaXBzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoY2hpcCBvZiBnLmNoaXBzOyB0cmFjayBjaGlwLnJlc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiJ3Blcm0tY2hpcCBwZXJtLWNoaXAtLScgKyBjaGlwVHlwZShjaGlwKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nIGNsYXNzPVwicGVybS1jaGlwX19yZXNvdXJjZVwiPnt7IGNoaXAucmVzb3VyY2UgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghY2hpcC5pc0FsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGVybS1jaGlwX19hY3Rpb25zXCI+e3sgY2hpcC5hY3Rpb25zLmpvaW4oJywgJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICAucGFnZSB7XG4gICAgICAgIHBhZGRpbmc6IDE2cHggMDtcbiAgICAgICAgbWF4LXdpZHRoOiA3MjBweDtcbiAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICB9XG5cbiAgICAgIC8qIFNlZ3VuZG8gYW5jaG8sIGRlc2t0b3AgY29uIGVsIHJhaWwgcmV0cmHDrWRvLiBWZXIgc2V0dGluZ3MtaHViIHBhcmEgbGFcbiAgICAgICAgIGV4cGxpY2FjacOzbiBjb21wbGV0YSBkZWwgbWVjYW5pc21vLiAqL1xuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS1tZW51PSdjb2xsYXBzZWQnXSkgLnBhZ2Uge1xuICAgICAgICBAbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7XG4gICAgICAgICAgbWF4LXdpZHRoOiA5MDBweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLnBhZ2UtaGVhZGVyIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDtcbiAgICAgIH1cbiAgICAgIC5zcGlubmVyLXJvdyxcbiAgICAgIC5lcnJvci1yb3cge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDE2cHg7XG4gICAgICAgIHBhZGRpbmc6IDMycHggMDtcbiAgICAgIH1cbiAgICAgIC5wZXJtLXNlY3Rpb24ge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAzMnB4O1xuICAgICAgfVxuICAgICAgLnBlcm0tc2VjdGlvbl9faGVhZGVyIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgICAgIH1cbiAgICAgIC5yb2xlLWxpc3Qge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDEwcHg7XG4gICAgICB9XG4gICAgICAucm9sZS1jYXJkIHtcbiAgICAgICAgYm9yZGVyOiAxLjVweCBzb2xpZCB2YXIoLS1pb24tYm9yZGVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMTIpKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgICAgICAgcGFkZGluZzogMTRweCAxNnB4O1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDEwcHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jYXJkLWJhY2tncm91bmQsIHZhcigtLWlvbi1iYWNrZ3JvdW5kLWNvbG9yLCAjZmZmKSk7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMDcpO1xuICAgICAgfVxuICAgICAgLnJvbGUtY2FyZF9faGVhZGVyIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgIH1cbiAgICAgIC5yb2xlLWNhcmRfX25hbWUge1xuICAgICAgICBmb250LXNpemU6IDAuOTM3NXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrKTtcbiAgICAgIH1cbiAgICAgIC5yb2xlLWNhcmRfX2Rlc2Mge1xuICAgICAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0pO1xuICAgICAgICBsaW5lLWhlaWdodDogMS40O1xuICAgICAgfVxuICAgICAgLnBlcm0tZ3JvdXAge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDZweDtcbiAgICAgIH1cbiAgICAgIC8qIEJhZGdlIGRlIGFsY2FuY2UgZGVsIGdydXBvIOKAlCBjb2xvciBjb211bmljYSBzaSBlbCBwZXJtaXNvIGVzIGdlbmVyYWwsXG4gICAgICAgICBkZSBsYSBhcHAgYWN0dWFsLCBvIGRlIG90cmEgYXBwIChhbnRlcyBlcmEgdW4gbGFiZWwgZ3JpcyBwbGFubykuICovXG4gICAgICAucGVybS1ncm91cF9fYmFkZ2Uge1xuICAgICAgICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0O1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiA0cHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMC42ODc1cmVtO1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wNGVtO1xuICAgICAgICBwYWRkaW5nOiAzcHggOXB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgICB9XG4gICAgICAucGVybS1ncm91cC0tYXBwIC5wZXJtLWdyb3VwX19iYWRnZSB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSk7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEodmFyKC0taW9uLWNvbG9yLXByaW1hcnktcmdiKSwgMC4xMik7XG4gICAgICB9XG4gICAgICAucGVybS1ncm91cC0tb3JnIC5wZXJtLWdyb3VwX19iYWRnZSB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItbWVkaXVtLXNoYWRlLCB2YXIoLS1pb24tY29sb3ItbWVkaXVtKSk7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1saWdodC1zaGFkZSwgcmdiYSgwLCAwLCAwLCAwLjA2KSk7XG4gICAgICB9XG4gICAgICAucGVybS1ncm91cC0tb3RoZXIgLnBlcm0tZ3JvdXBfX2JhZGdlIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci10ZXJ0aWFyeSk7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEodmFyKC0taW9uLWNvbG9yLXRlcnRpYXJ5LXJnYiksIDAuMTIpO1xuICAgICAgfVxuICAgICAgLnBlcm0tY2hpcHMge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICAgIGdhcDogNnB4O1xuICAgICAgfVxuICAgICAgLnBlcm0tY2hpcCB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7XG4gICAgICAgIGdhcDogNHB4O1xuICAgICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICAgIHBhZGRpbmc6IDRweCAxMHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAyMHB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItbGlnaHQpO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmspO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgIH1cbiAgICAgIC5wZXJtLWNoaXBfX3Jlc291cmNlIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIH1cbiAgICAgIC5wZXJtLWNoaXBfX2FjdGlvbnMge1xuICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSk7XG4gICAgICAgIGZvbnQtc2l6ZTogMC42ODc1cmVtO1xuICAgICAgfVxuICAgICAgLyogU2Vtw6FudGljbzogVG9kbyA9IHByaW1hcnkgdGludCArIGJvcmRlICovXG4gICAgICAucGVybS1jaGlwLS1hbGwge1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKHZhcigtLWlvbi1jb2xvci1wcmltYXJ5LXJnYiksIDAuMSk7XG4gICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSh2YXIoLS1pb24tY29sb3ItcHJpbWFyeS1yZ2IpLCAwLjMpO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXByaW1hcnktc2hhZGUsIHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KSk7XG4gICAgICB9XG4gICAgICAucGVybS1jaGlwLS1hbGwgLnBlcm0tY2hpcF9fcmVzb3VyY2Uge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXByaW1hcnktc2hhZGUsIHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KSk7XG4gICAgICB9XG4gICAgICAvKiBFc2NyaXR1cmEvZ2VzdGnDs24gPSBzZWNvbmRhcnkgdGludCAqL1xuICAgICAgLnBlcm0tY2hpcC0td3JpdGUge1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKHZhcigtLWlvbi1jb2xvci1zZWNvbmRhcnktcmdiKSwgMC4wOCk7XG4gICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSh2YXIoLS1pb24tY29sb3Itc2Vjb25kYXJ5LXJnYiksIDAuMik7XG4gICAgICB9XG4gICAgICAucGVybS1jaGlwLS13cml0ZSAucGVybS1jaGlwX19yZXNvdXJjZSB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3Itc2Vjb25kYXJ5LXNoYWRlLCB2YXIoLS1pb24tY29sb3Itc2Vjb25kYXJ5KSk7XG4gICAgICB9XG4gICAgICAvKiBMZWN0dXJhID0gbmV1dHJvICovXG4gICAgICAucGVybS1jaGlwLS1yZWFkIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLWxpZ2h0LCByZ2JhKDAsIDAsIDAsIDAuMDQpKTtcbiAgICAgIH1cbiAgICAgIC5wZXJtLWNoaXAtLWVtcHR5IHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0pO1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25zVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG4gIHByaXZhdGUgb3JnU2VydmljZSA9IGluamVjdChPcmdTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBjYXRhbG9nID0gaW5qZWN0KFBlcm1pc3Npb25DYXRhbG9nU2VydmljZSk7XG4gIHByaXZhdGUgYXV0aCA9IGluamVjdChBdXRoU2VydmljZSk7XG4gIHByaXZhdGUgbmF2ID0gaW5qZWN0KE5hdmlnYXRpb25TZXJ2aWNlKTtcbiAgcHJpdmF0ZSByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAvKipcbiAgICogQ29uZmlnIHbDrWEgQElucHV0IChvYmplY3QtZmlyc3QpLiBTaSBubyBzZSBwYXNhLCBzZSBjYWUgYWwgcm91dGUgZGF0YVxuICAgKiBgcGVybWlzc2lvbnNDb25maWdgIChwb2JsYWRvIHBvciBgcHJvdmlkZVZhbHRlY2hQZXJtaXNzaW9uc1JvdXRlc2ApLlxuICAgKiBgcmVzb2x2ZWRDb25maWdgIG1lcmdlYSBjb24gbG9zIGRlZmF1bHRzIOKAlCBgQElucHV0YCBnYW5hIHNvYnJlIHJvdXRlIGRhdGEuXG4gICAqL1xuICBASW5wdXQoKSBjb25maWc/OiBQZXJtaXNzaW9uc1ZpZXdDb25maWc7XG5cbiAgLyoqXG4gICAqIEN1YW5kbyBgdHJ1ZWAsIGxhIHZpc3RhIGVzdMOhIGVtYmViaWRhIGVuIHVuIG1vZGFsIOKAlCBzdXByaW1lIGVsIGJhY2staGVhZGVyXG4gICAqIChsbyBnZXN0aW9uYSBlbCBtb2RhbCBwYWRyZSkuIERlZmF1bHQgYGZhbHNlYCAodXNvIGNvbW8gcnV0YSkuXG4gICAqL1xuICBASW5wdXQoKSBpc01vZGFsID0gZmFsc2U7XG5cbiAgcmVhZG9ubHkgcmVzb2x2ZWRDb25maWcgPSBjb21wdXRlZDxSZXF1aXJlZDxQZXJtaXNzaW9uc1ZpZXdDb25maWc+PigoKSA9PiB7XG4gICAgY29uc3QgZnJvbVJvdXRlID0gKHRoaXMucm91dGU/LnNuYXBzaG90LmRhdGFbJ3Blcm1pc3Npb25zQ29uZmlnJ10gPz8ge30pIGFzIFBlcm1pc3Npb25zVmlld0NvbmZpZztcbiAgICBjb25zdCBtZXJnZWQ6IFBlcm1pc3Npb25zVmlld0NvbmZpZyA9IHsgLi4uZnJvbVJvdXRlLCAuLi4odGhpcy5jb25maWcgPz8ge30pIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dTeXN0ZW1Sb2xlczogbWVyZ2VkLnNob3dTeXN0ZW1Sb2xlcyA/PyB0cnVlLFxuICAgICAgc2hvd0N1c3RvbVJvbGVzOiBtZXJnZWQuc2hvd0N1c3RvbVJvbGVzID8/IHRydWUsXG4gICAgICBzaG93T3RoZXJBcHBQZXJtaXNzaW9uczogbWVyZ2VkLnNob3dPdGhlckFwcFBlcm1pc3Npb25zID8/IGZhbHNlLFxuICAgICAgaTE4bk5hbWVzcGFjZTogbWVyZ2VkLmkxOG5OYW1lc3BhY2UgPz8gREVGQVVMVF9OQU1FU1BBQ0UsXG4gICAgfTtcbiAgfSk7XG5cbiAgLyoqIE5hbWVzcGFjZSBpMThuIHJlc3VlbHRvIChjYXB0dXJhZG8gcGFyYSBsbGFtYWRhcyBuby1yZWFjdGl2YXMpLiAqL1xuICBwcml2YXRlIGdldCBucygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVkQ29uZmlnKCkuaTE4bk5hbWVzcGFjZTtcbiAgfVxuXG4gIHJlYWRvbmx5IGxvYWRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBsb2FkRXJyb3IgPSBzaWduYWw8dW5rbm93biB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJvbGVzID0gc2lnbmFsPFJvbGVWaWV3W10+KFtdKTtcblxuICByZWFkb25seSBzeXN0ZW1Sb2xlcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMucm9sZXMoKS5maWx0ZXIociA9PiByLmlzU3lzdGVtKSk7XG4gIHJlYWRvbmx5IGN1c3RvbVJvbGVzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yb2xlcygpLmZpbHRlcihyID0+ICFyLmlzU3lzdGVtKSk7XG5cbiAgcmVhZG9ubHkgYWN0aXZlT3JnSWQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdSA9IHRoaXMuYXV0aC51c2VyKCkgYXMge1xuICAgICAgYWN0aXZlT3JnSWQ/OiBzdHJpbmc7XG4gICAgICBhY3RpdmVPcmc/OiBzdHJpbmc7XG4gICAgfSB8IG51bGw7XG4gICAgcmV0dXJuIHU/LmFjdGl2ZU9yZ0lkID8/IHU/LmFjdGl2ZU9yZyA/PyAnJztcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcmV0cnlCdXR0b25Qcm9wcyA9IGNvbXB1dGVkPFBhcnRpYWw8QnV0dG9uTWV0YWRhdGE+PigoKSA9PiAoe1xuICAgIHRleHQ6IHRoaXMudHQoJ3JldHJ5JyksXG4gICAgY29sb3I6ICdkYXJrJyxcbiAgICBmaWxsOiAnb3V0bGluZScsXG4gICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgIHR5cGU6ICdidXR0b24nLFxuICAgIHN0YXRlOiB0aGlzLmxvYWRpbmcoKSA/IENvbXBvbmVudFN0YXRlcy5ESVNBQkxFRCA6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICB9KSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgYWRkSWNvbnMoeyBhcHBzT3V0bGluZSwgYnVzaW5lc3NPdXRsaW5lIH0pO1xuICAgIGNvbnN0IG5zID0gdGhpcy5ucztcbiAgICB0aGlzLmkxOG4ucmVnaXN0ZXJEZWZhdWx0cyhucywgUEVSTUlTU0lPTlNfVklFV19JMThOKTtcbiAgICB0aGlzLmxvYWQoKTtcbiAgICBjb25uZWN0UGFnZVJlZnJlc2goKCkgPT4gdGhpcy5sb2FkKCkpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzTW9kYWwpIHtcbiAgICAgIHRoaXMubmF2LnNldEJhY2tIZWFkZXIoJ3BhZ2VUaXRsZScsIHRoaXMubnMsIHsgd2l0aE1lbnU6IHRydWUgfSk7XG4gICAgfVxuICB9XG5cbiAgbG9hZCgpOiB2b2lkIHtcbiAgICBjb25zdCBvcmdJZCA9IHRoaXMuYWN0aXZlT3JnSWQoKTtcbiAgICBpZiAoIW9yZ0lkKSByZXR1cm47XG4gICAgdGhpcy5sb2FkaW5nLnNldCh0cnVlKTtcbiAgICB0aGlzLmxvYWRFcnJvci5zZXQobnVsbCk7XG4gICAgZm9ya0pvaW4oe1xuICAgICAgcm9sZXM6IHRoaXMub3JnU2VydmljZS5saXN0T3JnUm9sZXMob3JnSWQpLFxuICAgICAgY2F0YWxvZzogdGhpcy5jYXRhbG9nLmdldENhdGFsb2cob3JnSWQpLFxuICAgIH0pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoeyByb2xlczogcmF3Um9sZXMsIGNhdGFsb2cgfSkgPT4ge1xuICAgICAgICBjb25zdCBjdXJyZW50QXBwSWQgPSBjYXRhbG9nLmFwcElkO1xuICAgICAgICBjb25zdCBsb2NhbGUgPSB0aGlzLmkxOG4ubGFuZygpO1xuICAgICAgICB0aGlzLnJvbGVzLnNldChcbiAgICAgICAgICAocmF3Um9sZXMgPz8gW10pLm1hcCgocjogYW55KSA9PlxuICAgICAgICAgICAgdGhpcy5idWlsZFJvbGVWaWV3KFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWQ6IHIuaWQsXG4gICAgICAgICAgICAgICAgbmFtZTogci5uYW1lLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiByLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zOiByLnBlcm1pc3Npb25zID8/IFtdLFxuICAgICAgICAgICAgICAgIGlzU3lzdGVtOiByLmlzU3lzdGVtID8/IGZhbHNlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBjYXRhbG9nLFxuICAgICAgICAgICAgICBjdXJyZW50QXBwSWQsXG4gICAgICAgICAgICAgIGxvY2FsZVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgIHRoaXMubG9hZEVycm9yLnNldChlcnIpO1xuICAgICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBjaGlwVHlwZShjaGlwOiBQZXJtQ2hpcCk6ICdhbGwnIHwgJ3dyaXRlJyB8ICdyZWFkJyB7XG4gICAgcmV0dXJuIGNsYXNzaWZ5Q2hpcChjaGlwLnJhd0FjdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFJvbGVWaWV3KFxuICAgIHJvbGU6IHtcbiAgICAgIGlkOiBzdHJpbmc7XG4gICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICAgIHBlcm1pc3Npb25zOiBzdHJpbmdbXTtcbiAgICAgIGlzU3lzdGVtOiBib29sZWFuO1xuICAgIH0sXG4gICAgY2F0YWxvZzogUGljazxQZXJtaXNzaW9uQ2F0YWxvZ1Jlc3BvbnNlLCAncGVybWlzc2lvbnMnIHwgJ2FjdGlvbkxhYmVscyc+LFxuICAgIGN1cnJlbnRBcHBJZDogc3RyaW5nLFxuICAgIGxvY2FsZTogc3RyaW5nXG4gICk6IFJvbGVWaWV3IHtcbiAgICBjb25zdCBhbGxHcm91cHMgPSBncm91cFBlcm1pc3Npb25zQnlTY29wZShcbiAgICAgIHJvbGUucGVybWlzc2lvbnMsXG4gICAgICBjYXRhbG9nLFxuICAgICAgY3VycmVudEFwcElkLFxuICAgICAgbG9jYWxlLFxuICAgICAge1xuICAgICAgICBhcHA6IHRoaXMudHQoJ2dyb3VwQXBwJyksXG4gICAgICAgIG9yZzogdGhpcy50dCgnZ3JvdXBPcmcnKSxcbiAgICAgICAgb3RoZXI6IHRoaXMudHQoJ2dyb3VwT3RoZXInKSxcbiAgICAgICAgYXBwTGFiZWw6IChhcHBJZDogc3RyaW5nKSA9PiB0aGlzLmFwcExhYmVsKGFwcElkKSxcbiAgICAgIH0sXG4gICAgICB7IGFsbExhYmVsOiB0aGlzLnR0KCdwZXJtQWxsJykgfVxuICAgICk7XG4gICAgY29uc3QgZ3JvdXBzID0gdGhpcy5yZXNvbHZlZENvbmZpZygpLnNob3dPdGhlckFwcFBlcm1pc3Npb25zXG4gICAgICA/IGFsbEdyb3Vwc1xuICAgICAgOiBhbGxHcm91cHMuZmlsdGVyKGcgPT4gZy5zY29wZSAhPT0gJ290aGVyJyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJvbGUuaWQsXG4gICAgICBuYW1lOiByb2xlLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcm9sZS5kZXNjcmlwdGlvbixcbiAgICAgIGlzU3lzdGVtOiByb2xlLmlzU3lzdGVtLFxuICAgICAgZ3JvdXBzLFxuICAgICAgaGFzUGVybXM6IGdyb3Vwcy5sZW5ndGggPiAwLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgdHQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udChrZXksIHRoaXMubnMpO1xuICB9XG5cbiAgYXBwTGFiZWwoYXBwSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qga2V5ID0gYGFwcF8ke2FwcElkfWA7XG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLnR0KGtleSk7XG4gICAgcmV0dXJuIGxhYmVsID09PSBrZXkgPyBhcHBJZCA6IGxhYmVsO1xuICB9XG5cbiAgcm9sZUxhYmVsKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgdmlld2VyOiAncm9sZVZpZXdlcicsXG4gICAgICBlZGl0b3I6ICdyb2xlRWRpdG9yJyxcbiAgICAgIGFkbWluOiAncm9sZUFkbWluJyxcbiAgICAgIHN1cGVyX2FkbWluOiAncm9sZVN1cGVyQWRtaW4nLFxuICAgICAgYmluZ29fYWRtaW46ICdyb2xlQmluZ29BZG1pbicsXG4gICAgICBiaW5nb190ZXNvcmVybzogJ3JvbGVCaW5nb1Rlc29yZXJvJyxcbiAgICAgIGJpbmdvX3RhcXVpbGxhOiAncm9sZUJpbmdvVGFxdWlsbGEnLFxuICAgICAgYmluZ29fb3BlcmF0b3I6ICdyb2xlQmluZ29PcGVyYXRvcicsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy50dChtYXBbbmFtZV0gPz8gbmFtZSk7XG4gIH1cbn1cbiJdfQ==
|
|
547
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL3Blcm1pc3Npb25zLXZpZXcvcGVybWlzc2lvbnMtdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUV2RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkUsT0FBTyxFQUFrQixlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2xF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Ozs0RkFnVVQsd0JBQXdCO2tCQTNVcEMsU0FBUzsrQkFDRSxzQkFBc0IsY0FDcEIsSUFBSSxXQUNQO3dCQUNQLE9BQU87d0JBQ1AsdUJBQXVCO3dCQUN2QixnQkFBZ0I7d0JBQ2hCLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxhQUFhO3dCQUNiLGVBQWU7d0JBQ2Ysa0JBQWtCO3FCQUNuQixZQUNTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0xUO3dEQXlKUSxNQUFNO3NCQUFkLEtBQUs7Z0JBTUcsT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5qZWN0LCBJbnB1dCwgT25Jbml0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJb25JY29uIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7IGFwcHNPdXRsaW5lLCBidXNpbmVzc091dGxpbmUgfSBmcm9tICdpb25pY29ucy9pY29ucyc7XG5pbXBvcnQgeyBTa2VsZXRvbkxheW91dENvbXBvbmVudCB9IGZyb20gJy4uL3NrZWxldG9uLWxheW91dC9za2VsZXRvbi1sYXlvdXQuY29tcG9uZW50JztcblxuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29udGFpbmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvY29udGFpbmVyL2NvbnRhaW5lci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGlzcGxheUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2Rpc3BsYXkvZGlzcGxheS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGlsbENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9waWxsL3BpbGwuY29tcG9uZW50JztcbmltcG9ydCB7IFRleHRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy90ZXh0L3RleHQuY29tcG9uZW50JztcbmltcG9ydCB7IFRpdGxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdGl0bGUvdGl0bGUuY29tcG9uZW50JztcbmltcG9ydCB7IEJ1dHRvbk1ldGFkYXRhLCBDb21wb25lbnRTdGF0ZXMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aC9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pMThuJztcbmltcG9ydCB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3JnU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL29yZy9vcmcuc2VydmljZSc7XG5pbXBvcnQgeyBjb25uZWN0UGFnZVJlZnJlc2ggfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wYWdlLXJlZnJlc2gvcGFnZS1yZWZyZXNoLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgUGVybWlzc2lvbkNhdGFsb2dTZXJ2aWNlLFxuICBQZXJtaXNzaW9uQ2F0YWxvZ1Jlc3BvbnNlLFxuICBQZXJtQ2hpcCxcbiAgUGVybWlzc2lvblNjb3BlR3JvdXAsXG4gIGNsYXNzaWZ5Q2hpcCxcbiAgZ3JvdXBQZXJtaXNzaW9uc0J5U2NvcGUsXG59IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL29yZy9wZXJtaXNzaW9uLWNhdGFsb2cuc2VydmljZSc7XG5cbmltcG9ydCB7IFBlcm1pc3Npb25zVmlld0NvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgUEVSTUlTU0lPTlNfVklFV19JMThOIH0gZnJvbSAnLi9wZXJtaXNzaW9ucy12aWV3LmkxOG4nO1xuXG5jb25zdCBERUZBVUxUX05BTUVTUEFDRSA9ICdTZXR0aW5ncy5QZXJtaXNzaW9ucyc7XG5cbmludGVyZmFjZSBSb2xlVmlldyB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGlzU3lzdGVtOiBib29sZWFuO1xuICBncm91cHM6IFBlcm1pc3Npb25TY29wZUdyb3VwW107XG4gIGhhc1Blcm1zOiBib29sZWFuO1xufVxuXG4vKipcbiAqIGB2YWwtcGVybWlzc2lvbnMtdmlld2Ag4oCUIHZpc3RhIFBlcm1pc29zIGZ1bGwtZmVhdHVyZSBhdXRvY29udGVuaWRhIChvcmdhbmlzbSkuXG4gKiBWaXNvciBSQkFDIGRlIHNvbG8gbGVjdHVyYTogbXVlc3RyYSBsb3Mgcm9sZXMgZGVsIHNpc3RlbWEgKFZpc29yL0VkaXRvci9BZG1pbiArXG4gKiByb2xlcyBkZSBwbGF0YWZvcm1hKSB5IGxvcyByb2xlcyBwZXJzb25hbGl6YWRvcyBkZSBsYSBvcmcgYWN0aXZhLCBjb24gZWxcbiAqIGNhdMOhbG9nbyBkZSBwZXJtaXNvcyBhZ3J1cGFkbyBwb3IgYWxjYW5jZSAoYXBwIGFjdHVhbCAvIHBsYXRhZm9ybWEgLyBvdHJhcyBhcHBzKS5cbiAqIFByb21vdmlkYSBkZXNkZSBgc2hvd2Nhc2VgIGJham8gZWwgcHJvY2VzbyBkZSBBRFItMDIxLlxuICpcbiAqICoqUkJBQyBpbnRlcm5vKiogKGNvbW8gYG9yZ2FuaXphdGlvbi12aWV3YCk6IGxlZSBsYSBvcmcgYWN0aXZhIHbDrWFcbiAqIGBBdXRoU2VydmljZS51c2VyKCkuYWN0aXZlT3JnSWRgLiBMYSB2aXN0YSBOTyBtdXRhIG5hZGEg4oCUIGVsIGNvbnRyb2wgZGUgcXVpw6luXG4gKiBwdWVkZSB2ZXJsYSBlcyByZXNwb25zYWJpbGlkYWQgZGVsIGd1YXJkIGRlIHJ1dGEgZGVsIGNvbnN1bWVyOyBubyBoYXkgZ2F0aW5nXG4gKiBmaW5vIGludGVybm8gbmkgc2UgZXhwb25lIGNvbW8gY29uZmlnLlxuICpcbiAqIERhdG9zOiBgZm9ya0pvaW5gIGRlIGBPcmdTZXJ2aWNlLmxpc3RPcmdSb2xlcyhvcmdJZClgIChyb2xlcyBkZSBsYSBvcmcpICtcbiAqIGBQZXJtaXNzaW9uQ2F0YWxvZ1NlcnZpY2UuZ2V0Q2F0YWxvZyhvcmdJZClgIChjYXTDoWxvZ28gKyBhcHBJZCBhY3R1YWwpLiBFbFxuICogY2F0w6Fsb2dvIGRlZmluZSBlbCBhbGNhbmNlIChgc2NvcGVgL2BhcHBJZGApIGRlIGNhZGEgcmVjdXJzbyBwYXJhIGFncnVwYXIuXG4gKlxuICogTk8gcmVuZGVyaXphIGlvbi1jb250ZW50IOKAlCB2aXZlIGRlbnRybyBkZSB2YWwtcGFnZS13cmFwcGVyLiBgQWN0aXZhdGVkUm91dGVgIHNlXG4gKiBpbnllY3RhIGB7IG9wdGlvbmFsOiB0cnVlIH1gIHNvbG8gcGFyYSBsZWVyIGVsIHJvdXRlIGRhdGEgZGUgY29uZmlnLiBBdXRvLXJlZ2lzdHJhXG4gKiBzdXMgZGVmYXVsdHMgaTE4biAoZXMvZW4pIHNpIGVsIGNvbnN1bWVyIG5vIHByb3ZlecOzIGVsIG5hbWVzcGFjZSAoZGVmYXVsdFxuICogYFNldHRpbmdzLlBlcm1pc3Npb25zYCkuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1wZXJtaXNzaW9ucy12aWV3JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIElvbkljb24sXG4gICAgU2tlbGV0b25MYXlvdXRDb21wb25lbnQsXG4gICAgRGlzcGxheUNvbXBvbmVudCxcbiAgICBQaWxsQ29tcG9uZW50LFxuICAgIFRpdGxlQ29tcG9uZW50LFxuICAgIFRleHRDb21wb25lbnQsXG4gICAgQnV0dG9uQ29tcG9uZW50LFxuICAgIENvbnRhaW5lckNvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8dmFsLWNvbnRhaW5lciBbcHJvcHNdPVwieyBzaXplOiAnbWQnLCBwYWRkaW5nOiAnbm9uZScgfVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInBhZ2VcIj5cbiAgICAgICAgPGhlYWRlciBjbGFzcz1cInBhZ2UtaGVhZGVyXCI+XG4gICAgICAgICAgPHZhbC1kaXNwbGF5IFtwcm9wc109XCJ7IHNpemU6ICdzbWFsbCcsIGNvbG9yOiAnZGFyaycsIGNvbnRlbnQ6IHR0KCdwYWdlVGl0bGUnKSB9XCIgLz5cbiAgICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICBzaXplOiAnbGFyZ2UnLFxuICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgY29udGVudDogdHQoJ3BhZ2VEZXNjcmlwdGlvbicpLFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgQGlmIChsb2FkaW5nKCkpIHtcbiAgICAgICAgICA8dmFsLXNrZWxldG9uLWxheW91dCBbcHJvcHNdPVwieyBwcmVzZXQ6ICdsaXN0Jywgcm93czogNCB9XCIgLz5cbiAgICAgICAgfSBAZWxzZSBpZiAobG9hZEVycm9yKCkpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXJyb3Itcm93XCI+XG4gICAgICAgICAgICA8dmFsLXRleHRcbiAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgnZXJyb3JUaXRsZScpLFxuICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cInJldHJ5QnV0dG9uUHJvcHMoKVwiIChjbGljayk9XCJsb2FkKClcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICBAaWYgKHJlc29sdmVkQ29uZmlnKCkuc2hvd1N5c3RlbVJvbGVzKSB7XG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInBlcm0tc2VjdGlvblwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGVybS1zZWN0aW9uX19oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogdHQoJ3N5c3RlbVJvbGVzVGl0bGUnKSxcbiAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgnc3lzdGVtUm9sZXNIaW50JyksXG4gICAgICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb2xlLWxpc3RcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChyb2xlIG9mIHN5c3RlbVJvbGVzKCk7IHRyYWNrIHJvbGUuaWQpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb2xlLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvbGUtY2FyZF9faGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyb2xlLWNhcmRfX25hbWVcIj57eyByb2xlTGFiZWwocm9sZS5uYW1lKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8dmFsLXBpbGxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0dCgnc3lzdGVtQmFkZ2UnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAnYm9sZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChyb2xlLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyb2xlLWNhcmRfX2Rlc2NcIj57eyByb2xlLmRlc2NyaXB0aW9uIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoIXJvbGUuaGFzUGVybXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGVybS1jaGlwc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwZXJtLWNoaXAgcGVybS1jaGlwLS1lbXB0eVwiPnt7IHR0KCdub1Blcm1pc3Npb25zJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGcgb2Ygcm9sZS5ncm91cHM7IHRyYWNrIGcua2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzc109XCIncGVybS1ncm91cCBwZXJtLWdyb3VwLS0nICsgZy5zY29wZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBlcm0tZ3JvdXBfX2JhZGdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChnLnNjb3BlID09PSAnYXBwJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJhcHBzLW91dGxpbmVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGcuc2NvcGUgPT09ICdvcmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImJ1c2luZXNzLW91dGxpbmVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBnLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBlcm0tY2hpcHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChjaGlwIG9mIGcuY2hpcHM7IHRyYWNrIGNoaXAucmVzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCIncGVybS1jaGlwIHBlcm0tY2hpcC0tJyArIGNoaXBUeXBlKGNoaXApXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmcgY2xhc3M9XCJwZXJtLWNoaXBfX3Jlc291cmNlXCI+e3sgY2hpcC5yZXNvdXJjZSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFjaGlwLmlzQWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwZXJtLWNoaXBfX2FjdGlvbnNcIj57eyBjaGlwLmFjdGlvbnMuam9pbignLCAnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQGlmIChyZXNvbHZlZENvbmZpZygpLnNob3dDdXN0b21Sb2xlcykge1xuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJwZXJtLXNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBlcm0tc2VjdGlvbl9faGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHR0KCdjdXN0b21Sb2xlc1RpdGxlJyksXG4gICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogdHQoJ2N1c3RvbVJvbGVzSGludCcpLFxuICAgICAgICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICBAaWYgKGN1c3RvbVJvbGVzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgnbm9DdXN0b21Sb2xlcycpLFxuICAgICAgICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb2xlLWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKHJvbGUgb2YgY3VzdG9tUm9sZXMoKTsgdHJhY2sgcm9sZS5pZCkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm9sZS1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvbGUtY2FyZF9faGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJvbGUtY2FyZF9fbmFtZVwiPnt7IHJvbGUubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKHJvbGUuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicm9sZS1jYXJkX19kZXNjXCI+e3sgcm9sZS5kZXNjcmlwdGlvbiB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgQGlmICghcm9sZS5oYXNQZXJtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBlcm0tY2hpcHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwZXJtLWNoaXAgcGVybS1jaGlwLS1lbXB0eVwiPnt7IHR0KCdub1Blcm1pc3Npb25zJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGcgb2Ygcm9sZS5ncm91cHM7IHRyYWNrIGcua2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cIidwZXJtLWdyb3VwIHBlcm0tZ3JvdXAtLScgKyBnLnNjb3BlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwZXJtLWdyb3VwX19iYWRnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChnLnNjb3BlID09PSAnYXBwJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImFwcHMtb3V0bGluZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGcuc2NvcGUgPT09ICdvcmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiYnVzaW5lc3Mtb3V0bGluZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBnLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwZXJtLWNoaXBzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChjaGlwIG9mIGcuY2hpcHM7IHRyYWNrIGNoaXAucmVzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cIidwZXJtLWNoaXAgcGVybS1jaGlwLS0nICsgY2hpcFR5cGUoY2hpcClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nIGNsYXNzPVwicGVybS1jaGlwX19yZXNvdXJjZVwiPnt7IGNoaXAucmVzb3VyY2UgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFjaGlwLmlzQWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBlcm0tY2hpcF9fYWN0aW9uc1wiPnt7IGNoaXAuYWN0aW9ucy5qb2luKCcsICcpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L3ZhbC1jb250YWluZXI+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC8qIEFuY2hvIHkgY3JlY2ltaWVudG8gY29uIGVsIHJhaWwgY29sYXBzYWRvIGxvcyBkYSB2YWwtY29udGFpbmVyIChzaXplXG4gICAgICAgICAnbWQnKSwgbm8gQ1NTIGxvY2FsOiB2ZXIgY29udGFpbmVyLmNvbXBvbmVudC5zY3NzLiAqL1xuICAgICAgLnBhZ2Uge1xuICAgICAgICBwYWRkaW5nOiAxNnB4IDA7XG4gICAgICB9XG4gICAgICAucGFnZS1oZWFkZXIge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4O1xuICAgICAgfVxuICAgICAgLnNwaW5uZXItcm93LFxuICAgICAgLmVycm9yLXJvdyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogMTZweDtcbiAgICAgICAgcGFkZGluZzogMzJweCAwO1xuICAgICAgfVxuICAgICAgLnBlcm0tc2VjdGlvbiB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDMycHg7XG4gICAgICB9XG4gICAgICAucGVybS1zZWN0aW9uX19oZWFkZXIge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICAgICAgfVxuICAgICAgLnJvbGUtbGlzdCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMTBweDtcbiAgICAgIH1cbiAgICAgIC5yb2xlLWNhcmQge1xuICAgICAgICBib3JkZXI6IDEuNXB4IHNvbGlkIHZhcigtLWlvbi1ib3JkZXItY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4xMikpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgICAgICBwYWRkaW5nOiAxNHB4IDE2cHg7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMTBweDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNhcmQtYmFja2dyb3VuZCwgdmFyKC0taW9uLWJhY2tncm91bmQtY29sb3IsICNmZmYpKTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4wNyk7XG4gICAgICB9XG4gICAgICAucm9sZS1jYXJkX19oZWFkZXIge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgfVxuICAgICAgLnJvbGUtY2FyZF9fbmFtZSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC45Mzc1cmVtO1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmspO1xuICAgICAgfVxuICAgICAgLnJvbGUtY2FyZF9fZGVzYyB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSk7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gICAgICB9XG4gICAgICAucGVybS1ncm91cCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogNnB4O1xuICAgICAgfVxuICAgICAgLyogQmFkZ2UgZGUgYWxjYW5jZSBkZWwgZ3J1cG8g4oCUIGNvbG9yIGNvbXVuaWNhIHNpIGVsIHBlcm1pc28gZXMgZ2VuZXJhbCxcbiAgICAgICAgIGRlIGxhIGFwcCBhY3R1YWwsIG8gZGUgb3RyYSBhcHAgKGFudGVzIGVyYSB1biBsYWJlbCBncmlzIHBsYW5vKS4gKi9cbiAgICAgIC5wZXJtLWdyb3VwX19iYWRnZSB7XG4gICAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDRweDtcbiAgICAgICAgZm9udC1zaXplOiAwLjY4NzVyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA0ZW07XG4gICAgICAgIHBhZGRpbmc6IDNweCA5cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgICAgIH1cbiAgICAgIC5wZXJtLWdyb3VwLS1hcHAgLnBlcm0tZ3JvdXBfX2JhZGdlIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KTtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSh2YXIoLS1pb24tY29sb3ItcHJpbWFyeS1yZ2IpLCAwLjEyKTtcbiAgICAgIH1cbiAgICAgIC5wZXJtLWdyb3VwLS1vcmcgLnBlcm0tZ3JvdXBfX2JhZGdlIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0tc2hhZGUsIHZhcigtLWlvbi1jb2xvci1tZWRpdW0pKTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLWxpZ2h0LXNoYWRlLCByZ2JhKDAsIDAsIDAsIDAuMDYpKTtcbiAgICAgIH1cbiAgICAgIC5wZXJtLWdyb3VwLS1vdGhlciAucGVybS1ncm91cF9fYmFkZ2Uge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXRlcnRpYXJ5KTtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSh2YXIoLS1pb24tY29sb3ItdGVydGlhcnktcmdiKSwgMC4xMik7XG4gICAgICB9XG4gICAgICAucGVybS1jaGlwcyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgZ2FwOiA2cHg7XG4gICAgICB9XG4gICAgICAucGVybS1jaGlwIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbiAgICAgICAgZ2FwOiA0cHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgICAgcGFkZGluZzogNHB4IDEwcHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1saWdodCk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFyayk7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgfVxuICAgICAgLnBlcm0tY2hpcF9fcmVzb3VyY2Uge1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgfVxuICAgICAgLnBlcm0tY2hpcF9fYWN0aW9ucyB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItbWVkaXVtKTtcbiAgICAgICAgZm9udC1zaXplOiAwLjY4NzVyZW07XG4gICAgICB9XG4gICAgICAvKiBTZW3DoW50aWNvOiBUb2RvID0gcHJpbWFyeSB0aW50ICsgYm9yZGUgKi9cbiAgICAgIC5wZXJtLWNoaXAtLWFsbCB7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEodmFyKC0taW9uLWNvbG9yLXByaW1hcnktcmdiKSwgMC4xKTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKHZhcigtLWlvbi1jb2xvci1wcmltYXJ5LXJnYiksIDAuMyk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeS1zaGFkZSwgdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpKTtcbiAgICAgIH1cbiAgICAgIC5wZXJtLWNoaXAtLWFsbCAucGVybS1jaGlwX19yZXNvdXJjZSB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeS1zaGFkZSwgdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpKTtcbiAgICAgIH1cbiAgICAgIC8qIEVzY3JpdHVyYS9nZXN0acOzbiA9IHNlY29uZGFyeSB0aW50ICovXG4gICAgICAucGVybS1jaGlwLS13cml0ZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEodmFyKC0taW9uLWNvbG9yLXNlY29uZGFyeS1yZ2IpLCAwLjA4KTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKHZhcigtLWlvbi1jb2xvci1zZWNvbmRhcnktcmdiKSwgMC4yKTtcbiAgICAgIH1cbiAgICAgIC5wZXJtLWNoaXAtLXdyaXRlIC5wZXJtLWNoaXBfX3Jlc291cmNlIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1zZWNvbmRhcnktc2hhZGUsIHZhcigtLWlvbi1jb2xvci1zZWNvbmRhcnkpKTtcbiAgICAgIH1cbiAgICAgIC8qIExlY3R1cmEgPSBuZXV0cm8gKi9cbiAgICAgIC5wZXJtLWNoaXAtLXJlYWQge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItbGlnaHQsIHJnYmEoMCwgMCwgMCwgMC4wNCkpO1xuICAgICAgfVxuICAgICAgLnBlcm0tY2hpcC0tZW1wdHkge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSk7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbnNWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBvcmdTZXJ2aWNlID0gaW5qZWN0KE9yZ1NlcnZpY2UpO1xuICBwcml2YXRlIGNhdGFsb2cgPSBpbmplY3QoUGVybWlzc2lvbkNhdGFsb2dTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBhdXRoID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBuYXYgPSBpbmplY3QoTmF2aWdhdGlvblNlcnZpY2UpO1xuICBwcml2YXRlIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIC8qKlxuICAgKiBDb25maWcgdsOtYSBASW5wdXQgKG9iamVjdC1maXJzdCkuIFNpIG5vIHNlIHBhc2EsIHNlIGNhZSBhbCByb3V0ZSBkYXRhXG4gICAqIGBwZXJtaXNzaW9uc0NvbmZpZ2AgKHBvYmxhZG8gcG9yIGBwcm92aWRlVmFsdGVjaFBlcm1pc3Npb25zUm91dGVzYCkuXG4gICAqIGByZXNvbHZlZENvbmZpZ2AgbWVyZ2VhIGNvbiBsb3MgZGVmYXVsdHMg4oCUIGBASW5wdXRgIGdhbmEgc29icmUgcm91dGUgZGF0YS5cbiAgICovXG4gIEBJbnB1dCgpIGNvbmZpZz86IFBlcm1pc3Npb25zVmlld0NvbmZpZztcblxuICAvKipcbiAgICogQ3VhbmRvIGB0cnVlYCwgbGEgdmlzdGEgZXN0w6EgZW1iZWJpZGEgZW4gdW4gbW9kYWwg4oCUIHN1cHJpbWUgZWwgYmFjay1oZWFkZXJcbiAgICogKGxvIGdlc3Rpb25hIGVsIG1vZGFsIHBhZHJlKS4gRGVmYXVsdCBgZmFsc2VgICh1c28gY29tbyBydXRhKS5cbiAgICovXG4gIEBJbnB1dCgpIGlzTW9kYWwgPSBmYWxzZTtcblxuICByZWFkb25seSByZXNvbHZlZENvbmZpZyA9IGNvbXB1dGVkPFJlcXVpcmVkPFBlcm1pc3Npb25zVmlld0NvbmZpZz4+KCgpID0+IHtcbiAgICBjb25zdCBmcm9tUm91dGUgPSAodGhpcy5yb3V0ZT8uc25hcHNob3QuZGF0YVsncGVybWlzc2lvbnNDb25maWcnXSA/PyB7fSkgYXMgUGVybWlzc2lvbnNWaWV3Q29uZmlnO1xuICAgIGNvbnN0IG1lcmdlZDogUGVybWlzc2lvbnNWaWV3Q29uZmlnID0geyAuLi5mcm9tUm91dGUsIC4uLih0aGlzLmNvbmZpZyA/PyB7fSkgfTtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvd1N5c3RlbVJvbGVzOiBtZXJnZWQuc2hvd1N5c3RlbVJvbGVzID8/IHRydWUsXG4gICAgICBzaG93Q3VzdG9tUm9sZXM6IG1lcmdlZC5zaG93Q3VzdG9tUm9sZXMgPz8gdHJ1ZSxcbiAgICAgIHNob3dPdGhlckFwcFBlcm1pc3Npb25zOiBtZXJnZWQuc2hvd090aGVyQXBwUGVybWlzc2lvbnMgPz8gZmFsc2UsXG4gICAgICBpMThuTmFtZXNwYWNlOiBtZXJnZWQuaTE4bk5hbWVzcGFjZSA/PyBERUZBVUxUX05BTUVTUEFDRSxcbiAgICB9O1xuICB9KTtcblxuICAvKiogTmFtZXNwYWNlIGkxOG4gcmVzdWVsdG8gKGNhcHR1cmFkbyBwYXJhIGxsYW1hZGFzIG5vLXJlYWN0aXZhcykuICovXG4gIHByaXZhdGUgZ2V0IG5zKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZWRDb25maWcoKS5pMThuTmFtZXNwYWNlO1xuICB9XG5cbiAgcmVhZG9ubHkgbG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGxvYWRFcnJvciA9IHNpZ25hbDx1bmtub3duIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcm9sZXMgPSBzaWduYWw8Um9sZVZpZXdbXT4oW10pO1xuXG4gIHJlYWRvbmx5IHN5c3RlbVJvbGVzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yb2xlcygpLmZpbHRlcihyID0+IHIuaXNTeXN0ZW0pKTtcbiAgcmVhZG9ubHkgY3VzdG9tUm9sZXMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJvbGVzKCkuZmlsdGVyKHIgPT4gIXIuaXNTeXN0ZW0pKTtcblxuICByZWFkb25seSBhY3RpdmVPcmdJZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB1ID0gdGhpcy5hdXRoLnVzZXIoKSBhcyB7XG4gICAgICBhY3RpdmVPcmdJZD86IHN0cmluZztcbiAgICAgIGFjdGl2ZU9yZz86IHN0cmluZztcbiAgICB9IHwgbnVsbDtcbiAgICByZXR1cm4gdT8uYWN0aXZlT3JnSWQgPz8gdT8uYWN0aXZlT3JnID8/ICcnO1xuICB9KTtcblxuICByZWFkb25seSByZXRyeUJ1dHRvblByb3BzID0gY29tcHV0ZWQ8UGFydGlhbDxCdXR0b25NZXRhZGF0YT4+KCgpID0+ICh7XG4gICAgdGV4dDogdGhpcy50dCgncmV0cnknKSxcbiAgICBjb2xvcjogJ2RhcmsnLFxuICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgdHlwZTogJ2J1dHRvbicsXG4gICAgc3RhdGU6IHRoaXMubG9hZGluZygpID8gQ29tcG9uZW50U3RhdGVzLkRJU0FCTEVEIDogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gIH0pKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBhZGRJY29ucyh7IGFwcHNPdXRsaW5lLCBidXNpbmVzc091dGxpbmUgfSk7XG4gICAgY29uc3QgbnMgPSB0aGlzLm5zO1xuICAgIHRoaXMuaTE4bi5yZWdpc3RlckRlZmF1bHRzKG5zLCBQRVJNSVNTSU9OU19WSUVXX0kxOE4pO1xuICAgIHRoaXMubG9hZCgpO1xuICAgIGNvbm5lY3RQYWdlUmVmcmVzaCgoKSA9PiB0aGlzLmxvYWQoKSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNNb2RhbCkge1xuICAgICAgdGhpcy5uYXYuc2V0QmFja0hlYWRlcigncGFnZVRpdGxlJywgdGhpcy5ucywgeyB3aXRoTWVudTogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cblxuICBsb2FkKCk6IHZvaWQge1xuICAgIGNvbnN0IG9yZ0lkID0gdGhpcy5hY3RpdmVPcmdJZCgpO1xuICAgIGlmICghb3JnSWQpIHJldHVybjtcbiAgICB0aGlzLmxvYWRpbmcuc2V0KHRydWUpO1xuICAgIHRoaXMubG9hZEVycm9yLnNldChudWxsKTtcbiAgICBmb3JrSm9pbih7XG4gICAgICByb2xlczogdGhpcy5vcmdTZXJ2aWNlLmxpc3RPcmdSb2xlcyhvcmdJZCksXG4gICAgICBjYXRhbG9nOiB0aGlzLmNhdGFsb2cuZ2V0Q2F0YWxvZyhvcmdJZCksXG4gICAgfSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICh7IHJvbGVzOiByYXdSb2xlcywgY2F0YWxvZyB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRBcHBJZCA9IGNhdGFsb2cuYXBwSWQ7XG4gICAgICAgIGNvbnN0IGxvY2FsZSA9IHRoaXMuaTE4bi5sYW5nKCk7XG4gICAgICAgIHRoaXMucm9sZXMuc2V0KFxuICAgICAgICAgIChyYXdSb2xlcyA/PyBbXSkubWFwKChyOiBhbnkpID0+XG4gICAgICAgICAgICB0aGlzLmJ1aWxkUm9sZVZpZXcoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZDogci5pZCxcbiAgICAgICAgICAgICAgICBuYW1lOiByLm5hbWUsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHIuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbnM6IHIucGVybWlzc2lvbnMgPz8gW10sXG4gICAgICAgICAgICAgICAgaXNTeXN0ZW06IHIuaXNTeXN0ZW0gPz8gZmFsc2UsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGNhdGFsb2csXG4gICAgICAgICAgICAgIGN1cnJlbnRBcHBJZCxcbiAgICAgICAgICAgICAgbG9jYWxlXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgdGhpcy5sb2FkRXJyb3Iuc2V0KGVycik7XG4gICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGNoaXBUeXBlKGNoaXA6IFBlcm1DaGlwKTogJ2FsbCcgfCAnd3JpdGUnIHwgJ3JlYWQnIHtcbiAgICByZXR1cm4gY2xhc3NpZnlDaGlwKGNoaXAucmF3QWN0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUm9sZVZpZXcoXG4gICAgcm9sZToge1xuICAgICAgaWQ6IHN0cmluZztcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgICAgcGVybWlzc2lvbnM6IHN0cmluZ1tdO1xuICAgICAgaXNTeXN0ZW06IGJvb2xlYW47XG4gICAgfSxcbiAgICBjYXRhbG9nOiBQaWNrPFBlcm1pc3Npb25DYXRhbG9nUmVzcG9uc2UsICdwZXJtaXNzaW9ucycgfCAnYWN0aW9uTGFiZWxzJz4sXG4gICAgY3VycmVudEFwcElkOiBzdHJpbmcsXG4gICAgbG9jYWxlOiBzdHJpbmdcbiAgKTogUm9sZVZpZXcge1xuICAgIGNvbnN0IGFsbEdyb3VwcyA9IGdyb3VwUGVybWlzc2lvbnNCeVNjb3BlKFxuICAgICAgcm9sZS5wZXJtaXNzaW9ucyxcbiAgICAgIGNhdGFsb2csXG4gICAgICBjdXJyZW50QXBwSWQsXG4gICAgICBsb2NhbGUsXG4gICAgICB7XG4gICAgICAgIGFwcDogdGhpcy50dCgnZ3JvdXBBcHAnKSxcbiAgICAgICAgb3JnOiB0aGlzLnR0KCdncm91cE9yZycpLFxuICAgICAgICBvdGhlcjogdGhpcy50dCgnZ3JvdXBPdGhlcicpLFxuICAgICAgICBhcHBMYWJlbDogKGFwcElkOiBzdHJpbmcpID0+IHRoaXMuYXBwTGFiZWwoYXBwSWQpLFxuICAgICAgfSxcbiAgICAgIHsgYWxsTGFiZWw6IHRoaXMudHQoJ3Blcm1BbGwnKSB9XG4gICAgKTtcbiAgICBjb25zdCBncm91cHMgPSB0aGlzLnJlc29sdmVkQ29uZmlnKCkuc2hvd090aGVyQXBwUGVybWlzc2lvbnNcbiAgICAgID8gYWxsR3JvdXBzXG4gICAgICA6IGFsbEdyb3Vwcy5maWx0ZXIoZyA9PiBnLnNjb3BlICE9PSAnb3RoZXInKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpZDogcm9sZS5pZCxcbiAgICAgIG5hbWU6IHJvbGUubmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiByb2xlLmRlc2NyaXB0aW9uLFxuICAgICAgaXNTeXN0ZW06IHJvbGUuaXNTeXN0ZW0sXG4gICAgICBncm91cHMsXG4gICAgICBoYXNQZXJtczogZ3JvdXBzLmxlbmd0aCA+IDAsXG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0dChrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi50KGtleSwgdGhpcy5ucyk7XG4gIH1cblxuICBhcHBMYWJlbChhcHBJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBrZXkgPSBgYXBwXyR7YXBwSWR9YDtcbiAgICBjb25zdCBsYWJlbCA9IHRoaXMudHQoa2V5KTtcbiAgICByZXR1cm4gbGFiZWwgPT09IGtleSA/IGFwcElkIDogbGFiZWw7XG4gIH1cblxuICByb2xlTGFiZWwobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBtYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICB2aWV3ZXI6ICdyb2xlVmlld2VyJyxcbiAgICAgIGVkaXRvcjogJ3JvbGVFZGl0b3InLFxuICAgICAgYWRtaW46ICdyb2xlQWRtaW4nLFxuICAgICAgc3VwZXJfYWRtaW46ICdyb2xlU3VwZXJBZG1pbicsXG4gICAgICBiaW5nb19hZG1pbjogJ3JvbGVCaW5nb0FkbWluJyxcbiAgICAgIGJpbmdvX3Rlc29yZXJvOiAncm9sZUJpbmdvVGVzb3Jlcm8nLFxuICAgICAgYmluZ29fdGFxdWlsbGE6ICdyb2xlQmluZ29UYXF1aWxsYScsXG4gICAgICBiaW5nb19vcGVyYXRvcjogJ3JvbGVCaW5nb09wZXJhdG9yJyxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLnR0KG1hcFtuYW1lXSA/PyBuYW1lKTtcbiAgfVxufVxuIl19
|