@huntsman-cancer-institute/dashboard 17.3.4 → 17.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -190,129 +190,129 @@ export class DashboardComponent {
190
190
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: DashboardComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.DashboardService }, { token: i2.DashboardGlobalService }, { token: i3.DragulaService }, { token: i4.NgbModal }], target: i0.ɵɵFactoryTarget.Component }); }
191
191
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: DashboardComponent, selector: "dashboard", host: { properties: { "class": "this.classList" } }, providers: [
192
192
  DashboardService
193
- ], viewQueries: [{ propertyName: "widgetConfigure", first: true, predicate: ["widgetConfigure"], descendants: true }, { propertyName: "widgetContainers", predicate: WidgetContainerComponent, descendants: true, read: ElementRef }], ngImport: i0, template: `
194
- <ng-template #confirmDialog let-c="close" let-d="dismiss">
195
- <div class="modal-header">
196
- <h5 class="modal-title">Delete</h5>
197
- </div>
198
- <div class="modal-body">
199
- <p>Are you sure?</p>
200
- </div>
201
- <div class="modal-footer">
202
- <button type="button" class="btn btn-primary" (click)="c('Yes')">Yes</button>
203
- <button type="button" class="btn btn-secondary" (click)="d('No')">No</button>
204
- </div>
205
- </ng-template>
206
-
207
- <widget-add [dashboardIndex]="selectedIndex"></widget-add>
208
-
209
- <div class="edit-mode-header"
210
- [@openEditModeHeader]="editMode"
211
- [@openEditModeHeaderDisplay]="editMode">
212
- <button class="btn btn-primary btn-space"
213
- (click)="addWidget()">
214
- <i class="fas fa-plus fa-2x"></i>
215
- <br />
216
- <span>Widget</span>
217
- </button>
218
- <button *ngIf="configMode === 'true'"
219
- class="btn btn-primary btn-space red"
220
- (click)="deleteWidget()">
221
- <i class="fas fa-times fa-2x"></i>
222
- <br />
223
- <span>Widget</span>
224
- </button>
225
- <button class="btn btn-primary btn-space"
226
- (click)="addDashboard()">
227
- <i class="fas fa-plus fa-2x"></i>
228
- <br />
229
- <span>Dashboard</span>
230
- </button>
231
- <button class="btn btn-primary btn-space red"
232
- *ngIf="dashboards.length > 1"
233
- (click)="deleteDashboard(confirmDialog)">
234
- <i class="fas fa-times fa-2x"></i>
235
- <br />
236
- <span>Dashboard</span>
237
- </button>
238
- <button class="btn btn-primary btn-space green"
239
- (click)="setEditMode(false)">
240
- <i class="fas fa-check fa-2x"></i>
241
- <br />
242
- <span>Done</span>
243
- </button>
244
- </div>
245
-
246
- <div class="outlet-row">
247
-
248
- <!-- Iterate over all dashboards. Show non selected dashboards off screen. -->
249
- <ng-template ngFor let-dashboard [ngForOf]="dashboards" let-dashboardIndex="index">
250
- <div class="d-flex"
251
- [style.left]="selectedIndex !== dashboardIndex ? '100vw' : 'inherit'"
252
- [style.position]="selectedIndex !== dashboardIndex ? 'fixed' : 'inherit'"
253
- [@openConfigContent]="configMode">
254
- <widget-container
255
- [dashboard]="dashboard"
256
- [dashboardIndex]="dashboardIndex">
257
- </widget-container>
258
- </div>
259
- </ng-template>
260
-
261
- <div [style.display]="configMode === 'true' ? 'flex' : 'none'" class="sidebar-widget-config" [@openConfigSidebar]="configMode">
262
- <div class="outlet-column" style="background-color: white; height: 100%; padding: 2px;">
263
- <div class="d-flex flex-nowrap">
264
- <div><h4>Settings</h4></div>
265
- <div style="margin-right: 0px; margin-left: auto;">
266
- <span style="color: green;" (click)="saveConfiguration()">
267
- <i class="fas fa-check-circle fa-2x"></i>
268
- </span>
269
- <span style="color: red;" (click)="cancelConfiguration()">
270
- <i class="fas fa-times-circle fa-2x"></i>
271
- </span>
272
- </div>
273
- </div>
274
- <widget-configure #widgetConfigure></widget-configure>
275
- </div>
276
- </div>
277
- </div>
278
-
279
- <ng-container *ngIf="dashboards?.length > 1">
280
- <div class="dashboard-nav-trigger">
281
- <span (mouseenter)="openDashboardNavState = 'opened'">
282
- <i class="fas fa-th fa-2x"></i>
283
- </span>
284
- </div>
285
-
286
- <div class="dashboard-nav"
287
- [@openDashboardNav]="openDashboardNavState"
288
- [style.left]="'calc(50vw - ' + dashboards?.length * 50 + 'px)'"
289
- (mouseleave)="openDashboardNavState = 'closed'">
290
- <ng-container *ngFor="let dashboard of dashboards; index as i">
291
- <div [id]="'dash-image-' + i"
292
- class="widget-image"
293
- [ngClass]="i === selectedIndex ? 'selected' : ''"
294
- (click)="selectDashboard(i)">
295
- </div>
296
- </ng-container>
297
- </div>
298
- </ng-container>
299
-
300
- <ng-container *ngIf="helpMode">
301
- <div id="helpParent">
302
- <div id="helpChild">
303
- <div style="width: 100%; display: inline-flex;">
304
- <h4>Help</h4>
305
- <span style="margin-right: 0; margin-left: auto; color: red;" (click)="setHelpMode(false)">
306
- <i class="fas fa-times fa-lg"></i>
307
- </span>
308
- </div>
309
- <div>
310
- The dashboard is a collection of widgets that you can customize to your own needs. In this edit mode, you
311
- can drag and drop widgets to change the order and double click a widget to change its configuration.
312
- </div>
313
- </div>
314
- </div>
315
- </ng-container>
193
+ ], viewQueries: [{ propertyName: "widgetConfigure", first: true, predicate: ["widgetConfigure"], descendants: true }, { propertyName: "widgetContainers", predicate: WidgetContainerComponent, descendants: true, read: ElementRef }], ngImport: i0, template: `
194
+ <ng-template #confirmDialog let-c="close" let-d="dismiss">
195
+ <div class="modal-header">
196
+ <h5 class="modal-title">Delete</h5>
197
+ </div>
198
+ <div class="modal-body">
199
+ <p>Are you sure?</p>
200
+ </div>
201
+ <div class="modal-footer">
202
+ <button type="button" class="btn btn-primary" (click)="c('Yes')">Yes</button>
203
+ <button type="button" class="btn btn-secondary" (click)="d('No')">No</button>
204
+ </div>
205
+ </ng-template>
206
+
207
+ <widget-add [dashboardIndex]="selectedIndex"></widget-add>
208
+
209
+ <div class="edit-mode-header"
210
+ [@openEditModeHeader]="editMode"
211
+ [@openEditModeHeaderDisplay]="editMode">
212
+ <button class="btn btn-primary btn-space"
213
+ (click)="addWidget()">
214
+ <i class="fas fa-plus fa-2x"></i>
215
+ <br />
216
+ <span>Widget</span>
217
+ </button>
218
+ <button *ngIf="configMode === 'true'"
219
+ class="btn btn-primary btn-space red"
220
+ (click)="deleteWidget()">
221
+ <i class="fas fa-times fa-2x"></i>
222
+ <br />
223
+ <span>Widget</span>
224
+ </button>
225
+ <button class="btn btn-primary btn-space"
226
+ (click)="addDashboard()">
227
+ <i class="fas fa-plus fa-2x"></i>
228
+ <br />
229
+ <span>Dashboard</span>
230
+ </button>
231
+ <button class="btn btn-primary btn-space red"
232
+ *ngIf="dashboards.length > 1"
233
+ (click)="deleteDashboard(confirmDialog)">
234
+ <i class="fas fa-times fa-2x"></i>
235
+ <br />
236
+ <span>Dashboard</span>
237
+ </button>
238
+ <button class="btn btn-primary btn-space green"
239
+ (click)="setEditMode(false)">
240
+ <i class="fas fa-check fa-2x"></i>
241
+ <br />
242
+ <span>Done</span>
243
+ </button>
244
+ </div>
245
+
246
+ <div class="outlet-row">
247
+
248
+ <!-- Iterate over all dashboards. Show non selected dashboards off screen. -->
249
+ <ng-template ngFor let-dashboard [ngForOf]="dashboards" let-dashboardIndex="index">
250
+ <div class="d-flex"
251
+ [style.left]="selectedIndex !== dashboardIndex ? '100vw' : 'inherit'"
252
+ [style.position]="selectedIndex !== dashboardIndex ? 'fixed' : 'inherit'"
253
+ [@openConfigContent]="configMode">
254
+ <widget-container
255
+ [dashboard]="dashboard"
256
+ [dashboardIndex]="dashboardIndex">
257
+ </widget-container>
258
+ </div>
259
+ </ng-template>
260
+
261
+ <div [style.display]="configMode === 'true' ? 'flex' : 'none'" class="sidebar-widget-config" [@openConfigSidebar]="configMode">
262
+ <div class="outlet-column" style="background-color: white; height: 100%; padding: 2px;">
263
+ <div class="d-flex flex-nowrap">
264
+ <div><h4>Settings</h4></div>
265
+ <div style="margin-right: 0px; margin-left: auto;">
266
+ <span style="color: var(--pure-green);" (click)="saveConfiguration()">
267
+ <i class="fas fa-check-circle fa-2x"></i>
268
+ </span>
269
+ <span style="color: var(--pure-red);" (click)="cancelConfiguration()">
270
+ <i class="fas fa-times-circle fa-2x"></i>
271
+ </span>
272
+ </div>
273
+ </div>
274
+ <widget-configure #widgetConfigure></widget-configure>
275
+ </div>
276
+ </div>
277
+ </div>
278
+
279
+ <ng-container *ngIf="dashboards?.length > 1">
280
+ <div class="dashboard-nav-trigger">
281
+ <span (mouseenter)="openDashboardNavState = 'opened'">
282
+ <i class="fas fa-th fa-2x"></i>
283
+ </span>
284
+ </div>
285
+
286
+ <div class="dashboard-nav"
287
+ [@openDashboardNav]="openDashboardNavState"
288
+ [style.left]="'calc(50vw - ' + dashboards?.length * 50 + 'px)'"
289
+ (mouseleave)="openDashboardNavState = 'closed'">
290
+ <ng-container *ngFor="let dashboard of dashboards; index as i">
291
+ <div [id]="'dash-image-' + i"
292
+ class="widget-image"
293
+ [ngClass]="i === selectedIndex ? 'selected' : ''"
294
+ (click)="selectDashboard(i)">
295
+ </div>
296
+ </ng-container>
297
+ </div>
298
+ </ng-container>
299
+
300
+ <ng-container *ngIf="helpMode">
301
+ <div id="helpParent">
302
+ <div id="helpChild">
303
+ <div style="width: 100%; display: inline-flex;">
304
+ <h4>Help</h4>
305
+ <span style="margin-right: 0; margin-left: auto; color: var(--pure-red);" (click)="setHelpMode(false)">
306
+ <i class="fas fa-times fa-lg"></i>
307
+ </span>
308
+ </div>
309
+ <div>
310
+ The dashboard is a collection of widgets that you can customize to your own needs. In this edit mode, you
311
+ can drag and drop widgets to change the order and double click a widget to change its configuration.
312
+ </div>
313
+ </div>
314
+ </div>
315
+ </ng-container>
316
316
  `, isInline: true, styles: ["#helpParent{position:fixed;display:flex;width:100vw;height:100vh;left:0;top:0;z-index:999;background:#00000040}#helpChild{width:75%;height:75%;margin:auto;background:#fff;border-radius:25px;box-shadow:2px 2px #000;padding:20px}.sidebar-widget-config{background-color:#fdd;border-left:gray 1px solid;padding:10px 0 10px 10px;opacity:0;width:0%}.modal{background-color:#00000040}.edit-mode-header{border-bottom:black 1px dashed;padding-top:10px;padding-bottom:10px;z-index:10;background-color:#fff}.edit-mode-header button{padding:.2rem .5rem}.btn-space{margin-left:10px}.btn.green{background-color:green}.btn.red{background-color:red}.dashboard-nav-trigger{bottom:40px;position:fixed;z-index:100;display:inline-block;width:100%;text-align:center;padding-top:15px;background:#fff;background:linear-gradient(0deg,white,white,transparent)}.dashboard-nav{bottom:-150px;position:fixed;z-index:101;display:inline-block;background-color:#fff}.widget-image{display:inline-block;max-height:100px;height:100px;min-height:100px;max-width:100px;width:100px;min-width:100px;border:black 1px solid;vertical-align:bottom;overflow-y:hidden;overflow-x:hidden}.widget-image.selected{border:red 2px solid}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.WidgetContainerComponent, selector: "widget-container", inputs: ["dashboard", "dashboardIndex"] }, { kind: "component", type: i7.WidgetAddComponent, selector: "widget-add", inputs: ["dashboardIndex"] }, { kind: "component", type: i8.WidgetConfigureComponent, selector: "widget-configure" }], animations: [
317
317
  trigger("openConfigContent", [
318
318
  state("false", style({
@@ -384,129 +384,129 @@ export class DashboardComponent {
384
384
  }
385
385
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: DashboardComponent, decorators: [{
386
386
  type: Component,
387
- args: [{ selector: "dashboard", template: `
388
- <ng-template #confirmDialog let-c="close" let-d="dismiss">
389
- <div class="modal-header">
390
- <h5 class="modal-title">Delete</h5>
391
- </div>
392
- <div class="modal-body">
393
- <p>Are you sure?</p>
394
- </div>
395
- <div class="modal-footer">
396
- <button type="button" class="btn btn-primary" (click)="c('Yes')">Yes</button>
397
- <button type="button" class="btn btn-secondary" (click)="d('No')">No</button>
398
- </div>
399
- </ng-template>
400
-
401
- <widget-add [dashboardIndex]="selectedIndex"></widget-add>
402
-
403
- <div class="edit-mode-header"
404
- [@openEditModeHeader]="editMode"
405
- [@openEditModeHeaderDisplay]="editMode">
406
- <button class="btn btn-primary btn-space"
407
- (click)="addWidget()">
408
- <i class="fas fa-plus fa-2x"></i>
409
- <br />
410
- <span>Widget</span>
411
- </button>
412
- <button *ngIf="configMode === 'true'"
413
- class="btn btn-primary btn-space red"
414
- (click)="deleteWidget()">
415
- <i class="fas fa-times fa-2x"></i>
416
- <br />
417
- <span>Widget</span>
418
- </button>
419
- <button class="btn btn-primary btn-space"
420
- (click)="addDashboard()">
421
- <i class="fas fa-plus fa-2x"></i>
422
- <br />
423
- <span>Dashboard</span>
424
- </button>
425
- <button class="btn btn-primary btn-space red"
426
- *ngIf="dashboards.length > 1"
427
- (click)="deleteDashboard(confirmDialog)">
428
- <i class="fas fa-times fa-2x"></i>
429
- <br />
430
- <span>Dashboard</span>
431
- </button>
432
- <button class="btn btn-primary btn-space green"
433
- (click)="setEditMode(false)">
434
- <i class="fas fa-check fa-2x"></i>
435
- <br />
436
- <span>Done</span>
437
- </button>
438
- </div>
439
-
440
- <div class="outlet-row">
441
-
442
- <!-- Iterate over all dashboards. Show non selected dashboards off screen. -->
443
- <ng-template ngFor let-dashboard [ngForOf]="dashboards" let-dashboardIndex="index">
444
- <div class="d-flex"
445
- [style.left]="selectedIndex !== dashboardIndex ? '100vw' : 'inherit'"
446
- [style.position]="selectedIndex !== dashboardIndex ? 'fixed' : 'inherit'"
447
- [@openConfigContent]="configMode">
448
- <widget-container
449
- [dashboard]="dashboard"
450
- [dashboardIndex]="dashboardIndex">
451
- </widget-container>
452
- </div>
453
- </ng-template>
454
-
455
- <div [style.display]="configMode === 'true' ? 'flex' : 'none'" class="sidebar-widget-config" [@openConfigSidebar]="configMode">
456
- <div class="outlet-column" style="background-color: white; height: 100%; padding: 2px;">
457
- <div class="d-flex flex-nowrap">
458
- <div><h4>Settings</h4></div>
459
- <div style="margin-right: 0px; margin-left: auto;">
460
- <span style="color: green;" (click)="saveConfiguration()">
461
- <i class="fas fa-check-circle fa-2x"></i>
462
- </span>
463
- <span style="color: red;" (click)="cancelConfiguration()">
464
- <i class="fas fa-times-circle fa-2x"></i>
465
- </span>
466
- </div>
467
- </div>
468
- <widget-configure #widgetConfigure></widget-configure>
469
- </div>
470
- </div>
471
- </div>
472
-
473
- <ng-container *ngIf="dashboards?.length > 1">
474
- <div class="dashboard-nav-trigger">
475
- <span (mouseenter)="openDashboardNavState = 'opened'">
476
- <i class="fas fa-th fa-2x"></i>
477
- </span>
478
- </div>
479
-
480
- <div class="dashboard-nav"
481
- [@openDashboardNav]="openDashboardNavState"
482
- [style.left]="'calc(50vw - ' + dashboards?.length * 50 + 'px)'"
483
- (mouseleave)="openDashboardNavState = 'closed'">
484
- <ng-container *ngFor="let dashboard of dashboards; index as i">
485
- <div [id]="'dash-image-' + i"
486
- class="widget-image"
487
- [ngClass]="i === selectedIndex ? 'selected' : ''"
488
- (click)="selectDashboard(i)">
489
- </div>
490
- </ng-container>
491
- </div>
492
- </ng-container>
493
-
494
- <ng-container *ngIf="helpMode">
495
- <div id="helpParent">
496
- <div id="helpChild">
497
- <div style="width: 100%; display: inline-flex;">
498
- <h4>Help</h4>
499
- <span style="margin-right: 0; margin-left: auto; color: red;" (click)="setHelpMode(false)">
500
- <i class="fas fa-times fa-lg"></i>
501
- </span>
502
- </div>
503
- <div>
504
- The dashboard is a collection of widgets that you can customize to your own needs. In this edit mode, you
505
- can drag and drop widgets to change the order and double click a widget to change its configuration.
506
- </div>
507
- </div>
508
- </div>
509
- </ng-container>
387
+ args: [{ selector: "dashboard", template: `
388
+ <ng-template #confirmDialog let-c="close" let-d="dismiss">
389
+ <div class="modal-header">
390
+ <h5 class="modal-title">Delete</h5>
391
+ </div>
392
+ <div class="modal-body">
393
+ <p>Are you sure?</p>
394
+ </div>
395
+ <div class="modal-footer">
396
+ <button type="button" class="btn btn-primary" (click)="c('Yes')">Yes</button>
397
+ <button type="button" class="btn btn-secondary" (click)="d('No')">No</button>
398
+ </div>
399
+ </ng-template>
400
+
401
+ <widget-add [dashboardIndex]="selectedIndex"></widget-add>
402
+
403
+ <div class="edit-mode-header"
404
+ [@openEditModeHeader]="editMode"
405
+ [@openEditModeHeaderDisplay]="editMode">
406
+ <button class="btn btn-primary btn-space"
407
+ (click)="addWidget()">
408
+ <i class="fas fa-plus fa-2x"></i>
409
+ <br />
410
+ <span>Widget</span>
411
+ </button>
412
+ <button *ngIf="configMode === 'true'"
413
+ class="btn btn-primary btn-space red"
414
+ (click)="deleteWidget()">
415
+ <i class="fas fa-times fa-2x"></i>
416
+ <br />
417
+ <span>Widget</span>
418
+ </button>
419
+ <button class="btn btn-primary btn-space"
420
+ (click)="addDashboard()">
421
+ <i class="fas fa-plus fa-2x"></i>
422
+ <br />
423
+ <span>Dashboard</span>
424
+ </button>
425
+ <button class="btn btn-primary btn-space red"
426
+ *ngIf="dashboards.length > 1"
427
+ (click)="deleteDashboard(confirmDialog)">
428
+ <i class="fas fa-times fa-2x"></i>
429
+ <br />
430
+ <span>Dashboard</span>
431
+ </button>
432
+ <button class="btn btn-primary btn-space green"
433
+ (click)="setEditMode(false)">
434
+ <i class="fas fa-check fa-2x"></i>
435
+ <br />
436
+ <span>Done</span>
437
+ </button>
438
+ </div>
439
+
440
+ <div class="outlet-row">
441
+
442
+ <!-- Iterate over all dashboards. Show non selected dashboards off screen. -->
443
+ <ng-template ngFor let-dashboard [ngForOf]="dashboards" let-dashboardIndex="index">
444
+ <div class="d-flex"
445
+ [style.left]="selectedIndex !== dashboardIndex ? '100vw' : 'inherit'"
446
+ [style.position]="selectedIndex !== dashboardIndex ? 'fixed' : 'inherit'"
447
+ [@openConfigContent]="configMode">
448
+ <widget-container
449
+ [dashboard]="dashboard"
450
+ [dashboardIndex]="dashboardIndex">
451
+ </widget-container>
452
+ </div>
453
+ </ng-template>
454
+
455
+ <div [style.display]="configMode === 'true' ? 'flex' : 'none'" class="sidebar-widget-config" [@openConfigSidebar]="configMode">
456
+ <div class="outlet-column" style="background-color: white; height: 100%; padding: 2px;">
457
+ <div class="d-flex flex-nowrap">
458
+ <div><h4>Settings</h4></div>
459
+ <div style="margin-right: 0px; margin-left: auto;">
460
+ <span style="color: var(--pure-green);" (click)="saveConfiguration()">
461
+ <i class="fas fa-check-circle fa-2x"></i>
462
+ </span>
463
+ <span style="color: var(--pure-red);" (click)="cancelConfiguration()">
464
+ <i class="fas fa-times-circle fa-2x"></i>
465
+ </span>
466
+ </div>
467
+ </div>
468
+ <widget-configure #widgetConfigure></widget-configure>
469
+ </div>
470
+ </div>
471
+ </div>
472
+
473
+ <ng-container *ngIf="dashboards?.length > 1">
474
+ <div class="dashboard-nav-trigger">
475
+ <span (mouseenter)="openDashboardNavState = 'opened'">
476
+ <i class="fas fa-th fa-2x"></i>
477
+ </span>
478
+ </div>
479
+
480
+ <div class="dashboard-nav"
481
+ [@openDashboardNav]="openDashboardNavState"
482
+ [style.left]="'calc(50vw - ' + dashboards?.length * 50 + 'px)'"
483
+ (mouseleave)="openDashboardNavState = 'closed'">
484
+ <ng-container *ngFor="let dashboard of dashboards; index as i">
485
+ <div [id]="'dash-image-' + i"
486
+ class="widget-image"
487
+ [ngClass]="i === selectedIndex ? 'selected' : ''"
488
+ (click)="selectDashboard(i)">
489
+ </div>
490
+ </ng-container>
491
+ </div>
492
+ </ng-container>
493
+
494
+ <ng-container *ngIf="helpMode">
495
+ <div id="helpParent">
496
+ <div id="helpChild">
497
+ <div style="width: 100%; display: inline-flex;">
498
+ <h4>Help</h4>
499
+ <span style="margin-right: 0; margin-left: auto; color: var(--pure-red);" (click)="setHelpMode(false)">
500
+ <i class="fas fa-times fa-lg"></i>
501
+ </span>
502
+ </div>
503
+ <div>
504
+ The dashboard is a collection of widgets that you can customize to your own needs. In this edit mode, you
505
+ can drag and drop widgets to change the order and double click a widget to change its configuration.
506
+ </div>
507
+ </div>
508
+ </div>
509
+ </ng-container>
510
510
  `, animations: [
511
511
  trigger("openConfigContent", [
512
512
  state("false", style({
@@ -587,4 +587,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
587
587
  type: ViewChild,
588
588
  args: ["widgetConfigure", { static: false }]
589
589
  }] } });
590
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2Rhc2hib2FyZC9zcmMvZGFzaGJvYXJkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE9BQU8sRUFDTCxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFDdkYsV0FBVyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFL0UsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFPLFVBQVUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBRXBELE9BQU8sRUFBQyxTQUFTLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBQ2hGLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQzdFLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7Ozs7O0FBRTNFOzs7Ozs7R0FNRztBQWtUSCxNQUFNLE9BQU8sa0JBQWtCO0lBb0I3QixZQUFvQixpQkFBb0MsRUFDcEMsVUFBc0IsRUFDdEIsZ0JBQWtDLEVBQ2xDLHNCQUE4QyxFQUM5QyxjQUE4QixFQUM5QixZQUFzQjtRQUx0QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIscUJBQWdCLEdB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QUNULGdCQUFnQjtxQkFDakI7dU9BSXFCLFNBQVM7c0JBQTlCLFdBQVc7dUJBQUMsT0FBTztnQkFjMEMsZ0JBQWdCO3NCQUE3RSxZQUFZO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFFYixlQUFlO3NCQUE3RCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoYykgMjAxNiBIdW50c21hbiBDYW5jZXIgSW5zdGl0dXRlIGF0IHRoZSBVbml2ZXJzaXR5IG9mIFV0YWgsIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnlcclxuICovXHJcbmltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgaXNEZXZNb2RlLCBRdWVyeUxpc3QsIFZpZXdDaGlsZHJlbiwgVmlld0NoaWxkLFxyXG4gIEhvc3RCaW5kaW5nXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHthbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXJ9IGZyb20gXCJAYW5ndWxhci9hbmltYXRpb25zXCI7XHJcblxyXG5pbXBvcnQge0RyYWd1bGFTZXJ2aWNlfSBmcm9tIFwibmcyLWRyYWd1bGFcIjtcclxuaW1wb3J0IGRvbXRvaW1hZ2UgZnJvbSBcImRvbS10by1pbWFnZVwiO1xyXG5pbXBvcnQge05nYk1vZGFsfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuXHJcbmltcG9ydCB7RGFzaGJvYXJkLCBXaWRnZXRJbnN0YW5jZX0gZnJvbSBcIi4vbW9kZWwvbW9kZWxcIjtcclxuaW1wb3J0IHtEYXNoYm9hcmRTZXJ2aWNlfSBmcm9tIFwiLi9zZXJ2aWNlcy9kYXNoYm9hcmQuc2VydmljZVwiO1xyXG5pbXBvcnQge1dpZGdldENvbmZpZ3VyZUNvbXBvbmVudH0gZnJvbSBcIi4vY29uZmlndXJlL3dpZGdldC1jb25maWd1cmUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7V2lkZ2V0Q29udGFpbmVyQ29tcG9uZW50fSBmcm9tIFwiLi93aWRnZXQvd2lkZ2V0LWNvbnRhaW5lci5jb21wb25lbnRcIjtcclxuaW1wb3J0IHtEYXNoYm9hcmRHbG9iYWxTZXJ2aWNlfSBmcm9tIFwiLi9zZXJ2aWNlcy9kYXNoYm9hcmQtZ2xvYmFsLnNlcnZpY2VcIjtcclxuXHJcbi8qKlxyXG4gKiBEYXNoYm9hcmQgKHdpdGhpbiBhIGNhcmQtZ3JvdXApIGl0ZXJhdGVzIG92ZXIgY29uZmlndXJlZCB3aWRnZXRzIHRvIHByb2R1Y2UgZWFjaCBvbmUgaW4gYSBjYXJkLiAgVGhlIHdpZGdldHMgY2FuXHJcbiAqIGFsd2F5cyBnZXQgYWNjZXNzIHRvIGFueSBjb25maWd1cmF0aW9uIGhlbGQgYnkgdGhlIGRhc2hib2FyZCBzZXJ2aWNlLCBidXQgdGhleSBhcmUgaW50ZW5kZWQgdG8gYmUgbGFyZ2VseVxyXG4gKiBpbmRlcGVuZGVudC5cclxuICpcclxuICogQHNpbmNlIDEuMC4wXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJkYXNoYm9hcmRcIixcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPG5nLXRlbXBsYXRlICNjb25maXJtRGlhbG9nIGxldC1jPVwiY2xvc2VcIiBsZXQtZD1cImRpc21pc3NcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+RGVsZXRlPC9oNT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgPHA+QXJlIHlvdSBzdXJlPzwvcD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJjKCdZZXMnKVwiPlllczwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiAoY2xpY2spPVwiZCgnTm8nKVwiPk5vPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICBcclxuICAgIDx3aWRnZXQtYWRkIFtkYXNoYm9hcmRJbmRleF09XCJzZWxlY3RlZEluZGV4XCI+PC93aWRnZXQtYWRkPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJlZGl0LW1vZGUtaGVhZGVyXCJcclxuICAgICAgICAgW0BvcGVuRWRpdE1vZGVIZWFkZXJdPVwiZWRpdE1vZGVcIlxyXG4gICAgICAgICBbQG9wZW5FZGl0TW9kZUhlYWRlckRpc3BsYXldPVwiZWRpdE1vZGVcIj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc3BhY2VcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJhZGRXaWRnZXQoKVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXMgZmEtMnhcIj48L2k+XHJcbiAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgPHNwYW4+V2lkZ2V0PC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImNvbmZpZ01vZGUgPT09ICd0cnVlJ1wiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNwYWNlIHJlZFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZVdpZGdldCgpXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGltZXMgZmEtMnhcIj48L2k+XHJcbiAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgPHNwYW4+V2lkZ2V0PC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc3BhY2VcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJhZGREYXNoYm9hcmQoKVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXMgZmEtMnhcIj48L2k+XHJcbiAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgPHNwYW4+RGFzaGJvYXJkPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc3BhY2UgcmVkXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cImRhc2hib2FyZHMubGVuZ3RoID4gMVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZURhc2hib2FyZChjb25maXJtRGlhbG9nKVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzIGZhLTJ4XCI+PC9pPlxyXG4gICAgICAgIDxiciAvPlxyXG4gICAgICAgIDxzcGFuPkRhc2hib2FyZDwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNwYWNlIGdyZWVuXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwic2V0RWRpdE1vZGUoZmFsc2UpXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY2hlY2sgZmEtMnhcIj48L2k+XHJcbiAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgPHNwYW4+RG9uZTwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIFxyXG4gICAgPGRpdiBjbGFzcz1cIm91dGxldC1yb3dcIj5cclxuXHJcbiAgICAgIDwhLS0gSXRlcmF0ZSBvdmVyIGFsbCBkYXNoYm9hcmRzLiAgU2hvdyBub24gc2VsZWN0ZWQgZGFzaGJvYXJkcyBvZmYgc2NyZWVuLiAtLT5cclxuICAgICAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1kYXNoYm9hcmQgW25nRm9yT2ZdPVwiZGFzaGJvYXJkc1wiIGxldC1kYXNoYm9hcmRJbmRleD1cImluZGV4XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiXHJcbiAgICAgICAgICAgICBbc3R5bGUubGVmdF09XCJzZWxlY3RlZEluZGV4ICE9PSBkYXNoYm9hcmRJbmRleCA/ICcxMDB2dycgOiAnaW5oZXJpdCdcIlxyXG4gICAgICAgICAgICAgW3N0eWxlLnBvc2l0aW9uXT1cInNlbGVjdGVkSW5kZXggIT09IGRhc2hib2FyZEluZGV4ID8gJ2ZpeGVkJyA6ICdpbmhlcml0J1wiXHJcbiAgICAgICAgICAgICBbQG9wZW5Db25maWdDb250ZW50XT1cImNvbmZpZ01vZGVcIj5cclxuICAgICAgICAgIDx3aWRnZXQtY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgW2Rhc2hib2FyZF09XCJkYXNoYm9hcmRcIlxyXG4gICAgICAgICAgICAgIFtkYXNoYm9hcmRJbmRleF09XCJkYXNoYm9hcmRJbmRleFwiPlxyXG4gICAgICAgICAgPC93aWRnZXQtY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICBcclxuICAgICAgPGRpdiBbc3R5bGUuZGlzcGxheV09XCJjb25maWdNb2RlID09PSAndHJ1ZScgPyAnZmxleCcgOiAnbm9uZSdcIiBjbGFzcz1cInNpZGViYXItd2lkZ2V0LWNvbmZpZ1wiIFtAb3BlbkNvbmZpZ1NpZGViYXJdPVwiY29uZmlnTW9kZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJvdXRsZXQtY29sdW1uXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgaGVpZ2h0OiAxMDAlOyBwYWRkaW5nOiAycHg7XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtbm93cmFwXCI+XHJcbiAgICAgICAgICAgIDxkaXY+PGg0PlNldHRpbmdzPC9oND48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1yaWdodDogMHB4OyBtYXJnaW4tbGVmdDogYXV0bztcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiBncmVlbjtcIiAoY2xpY2spPVwic2F2ZUNvbmZpZ3VyYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY2hlY2stY2lyY2xlIGZhLTJ4XCI+PC9pPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiByZWQ7XCIgKGNsaWNrKT1cImNhbmNlbENvbmZpZ3VyYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGltZXMtY2lyY2xlIGZhLTJ4XCI+PC9pPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDx3aWRnZXQtY29uZmlndXJlICN3aWRnZXRDb25maWd1cmU+PC93aWRnZXQtY29uZmlndXJlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGFzaGJvYXJkcz8ubGVuZ3RoID4gMVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGFzaGJvYXJkLW5hdi10cmlnZ2VyXCI+XHJcbiAgICAgICAgPHNwYW4gKG1vdXNlZW50ZXIpPVwib3BlbkRhc2hib2FyZE5hdlN0YXRlID0gJ29wZW5lZCdcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRoIGZhLTJ4XCI+PC9pPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIFxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGFzaGJvYXJkLW5hdlwiXHJcbiAgICAgICAgICAgW0BvcGVuRGFzaGJvYXJkTmF2XT1cIm9wZW5EYXNoYm9hcmROYXZTdGF0ZVwiXHJcbiAgICAgICAgICAgW3N0eWxlLmxlZnRdPVwiJ2NhbGMoNTB2dyAtICcgKyBkYXNoYm9hcmRzPy5sZW5ndGggKiA1MCArICdweCknXCJcclxuICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJvcGVuRGFzaGJvYXJkTmF2U3RhdGUgPSAnY2xvc2VkJ1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRhc2hib2FyZCBvZiBkYXNoYm9hcmRzOyBpbmRleCBhcyBpXCI+XHJcbiAgICAgICAgICA8ZGl2IFtpZF09XCInZGFzaC1pbWFnZS0nICsgaVwiXHJcbiAgICAgICAgICAgICAgIGNsYXNzPVwid2lkZ2V0LWltYWdlXCJcclxuICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaSA9PT0gc2VsZWN0ZWRJbmRleCA/ICdzZWxlY3RlZCcgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3REYXNoYm9hcmQoaSlcIj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWxwTW9kZVwiPlxyXG4gICAgICA8ZGl2IGlkPVwiaGVscFBhcmVudFwiPlxyXG4gICAgICAgIDxkaXYgaWQ9XCJoZWxwQ2hpbGRcIj5cclxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogMTAwJTsgZGlzcGxheTogaW5saW5lLWZsZXg7XCI+XHJcbiAgICAgICAgICAgIDxoND5IZWxwPC9oND5cclxuICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDA7IG1hcmdpbi1sZWZ0OiBhdXRvOyBjb2xvcjogcmVkO1wiIChjbGljayk9XCJzZXRIZWxwTW9kZShmYWxzZSlcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lcyBmYS1sZ1wiPjwvaT5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICBUaGUgZGFzaGJvYXJkIGlzIGEgY29sbGVjdGlvbiBvZiB3aWRnZXRzIHRoYXQgeW91IGNhbiBjdXN0b21pemUgdG8geW91ciBvd24gbmVlZHMuICBJbiB0aGlzIGVkaXQgbW9kZSwgeW91XHJcbiAgICAgICAgICAgIGNhbiBkcmFnIGFuZCBkcm9wIHdpZGdldHMgdG8gY2hhbmdlIHRoZSBvcmRlciBhbmQgZG91YmxlIGNsaWNrIGEgd2lkZ2V0IHRvIGNoYW5nZSBpdHMgY29uZmlndXJhdGlvbi5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIGAsXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgdHJpZ2dlcihcIm9wZW5Db25maWdDb250ZW50XCIsXHJcbiAgICAgIFtcclxuICAgICAgICBzdGF0ZShcImZhbHNlXCIsIHN0eWxlKHtcclxuICAgICAgICAgIHdpZHRoOiBcIjEwMCVcIlxyXG4gICAgICAgIH0pKSxcclxuICAgICAgICBzdGF0ZShcInRydWVcIiwgc3R5bGUoe1xyXG4gICAgICAgICAgd2lkdGg6IFwiODAlXCJcclxuICAgICAgICB9KSksXHJcbiAgICAgICAgdHJhbnNpdGlvbihcImZhbHNlID0+IHRydWVcIiwgYW5pbWF0ZSgzMDApKSxcclxuICAgICAgICB0cmFuc2l0aW9uKFwidHJ1ZSA9PiBmYWxzZVwiLCBhbmltYXRlKDMwMCkpXHJcbiAgICAgIF1cclxuICAgICksXHJcbiAgICB0cmlnZ2VyKFwib3BlbkNvbmZpZ1NpZGViYXJcIixcclxuICAgICAgW1xyXG4gICAgICAgIHN0YXRlKFwiZmFsc2VcIiwgc3R5bGUoe1xyXG4gICAgICAgICAgb3BhY2l0eTogXCIwXCIsXHJcbiAgICAgICAgICB3aWR0aDogXCIwJVwiXHJcbiAgICAgICAgfSkpLFxyXG4gICAgICAgIHN0YXRlKFwidHJ1ZVwiLCBzdHlsZSh7XHJcbiAgICAgICAgICBvcGFjaXR5OiBcIjFcIixcclxuICAgICAgICAgIHdpZHRoOiBcIjIwJVwiXHJcbiAgICAgICAgfSkpLFxyXG4gICAgICAgIHRyYW5zaXRpb24oXCJmYWxzZSA9PiB0cnVlXCIsIGFuaW1hdGUoMzAwKSksXHJcbiAgICAgICAgdHJhbnNpdGlvbihcInRydWUgPT4gZmFsc2VcIiwgYW5pbWF0ZSgzMDApKVxyXG4gICAgICBdXHJcbiAgICApLFxyXG4gICAgdHJpZ2dlcihcIm9wZW5EYXNoYm9hcmROYXZcIixcclxuICAgICAgW1xyXG4gICAgICAgIHN0YXRlKFwiY2xvc2VkXCIsIHN0eWxlKHtcclxuICAgICAgICAgIG9wYWNpdHk6IFwiMFwiLFxyXG4gICAgICAgICAgYm90dG9tOiBcIi0xNTBweFwiXHJcbiAgICAgICAgfSkpLFxyXG4gICAgICAgIHN0YXRlKFwib3BlbmVkXCIsIHN0eWxlKHtcclxuICAgICAgICAgIG9wYWNpdHk6IFwiMVwiLFxyXG4gICAgICAgICAgYm90dG9tOiBcIjQwcHhcIlxyXG4gICAgICAgIH0pKSxcclxuICAgICAgICB0cmFuc2l0aW9uKFwiY2xvc2VkID0+IG9wZW5lZFwiLCBhbmltYXRlKDI1MCkpLFxyXG4gICAgICAgIHRyYW5zaXRpb24oXCJvcGVuZWQgPT4gY2xvc2VkXCIsIGFuaW1hdGUoMTAwKSlcclxuICAgICAgXVxyXG4gICAgKSxcclxuICAgIC8qdHJpZ2dlcihcIm9wZW5FZGl0TW9kZUhlYWRlckNvbnRlbnRcIiwgW1xyXG4gICAgICBzdGF0ZShcImNsb3NlZFwiLCBzdHlsZSh7XHJcbiAgICAgICAgXCJwYWRkaW5nLXRvcFwiOiBcIjBweFwiXHJcbiAgICAgIH0pKSxcclxuICAgICAgc3RhdGUoXCJvcGVuZWRcIiwgc3R5bGUoe1xyXG4gICAgICAgIFwicGFkZGluZy10b3BcIjogXCI5MXB4XCJcclxuICAgICAgfSkpLFxyXG4gICAgICB0cmFuc2l0aW9uKFwiY2xvc2VkID0+IG9wZW5lZFwiLCBhbmltYXRlKDMwMCkpLFxyXG4gICAgICB0cmFuc2l0aW9uKFwib3BlbmVkID0+IGNsb3NlZFwiLCBhbmltYXRlKDMwMCkpXHJcbiAgICBdKSwqL1xyXG4gICAgdHJpZ2dlcihcIm9wZW5FZGl0TW9kZUhlYWRlclwiLCBbXHJcbiAgICAgIHN0YXRlKFwiY2xvc2VkXCIsIHN0eWxlKHtcclxuICAgICAgICBcIm9wYWNpdHlcIjogXCIwXCIsXHJcbiAgICAgICAgXCJvdmVyZmxvdy15XCI6IFwiaGlkZGVuXCJcclxuICAgICAgfSkpLFxyXG4gICAgICBzdGF0ZShcIm9wZW5lZFwiLCBzdHlsZSh7XHJcbiAgICAgICAgXCJvcGFjaXR5XCI6IFwiMVwiLFxyXG4gICAgICAgIFwib3ZlcmZsb3cteVwiOiBcInZpc2libGVcIlxyXG4gICAgICB9KSksXHJcbiAgICAgIHRyYW5zaXRpb24oXCJjbG9zZWQgPT4gb3BlbmVkXCIsIGFuaW1hdGUoMzAwKSksXHJcbiAgICAgIHRyYW5zaXRpb24oXCJvcGVuZWQgPT4gY2xvc2VkXCIsIGFuaW1hdGUoMzAwKSlcclxuICAgIF0pLFxyXG4gICAgdHJpZ2dlcihcIm9wZW5FZGl0TW9kZUhlYWRlckRpc3BsYXlcIiwgW1xyXG4gICAgICBzdGF0ZShcImNsb3NlZFwiLCBzdHlsZSh7XHJcbiAgICAgICAgXCJkaXNwbGF5XCI6IFwibm9uZVwiXHJcbiAgICAgIH0pKSxcclxuICAgICAgc3RhdGUoXCJvcGVuZWRcIiwgc3R5bGUoe1xyXG4gICAgICAgIFwiZGlzcGxheVwiOiBcImZsZXhcIlxyXG4gICAgICB9KSksXHJcbiAgICAgIHRyYW5zaXRpb24oXCJjbG9zZWQgPT4gb3BlbmVkXCIsIGFuaW1hdGUoMTAwKSksXHJcbiAgICAgIHRyYW5zaXRpb24oXCJvcGVuZWQgPT4gY2xvc2VkXCIsIGFuaW1hdGUoXCIxMDBtcyAxMDBtc1wiKSlcclxuICAgIF0pXHJcbiAgXSxcclxuICBzdHlsZXM6IFtgXHJcbiAgICBcclxuICAgICNoZWxwUGFyZW50IHtcclxuICAgICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICB3aWR0aDogMTAwdnc7XHJcbiAgICAgIGhlaWdodDogMTAwdmg7XHJcbiAgICAgIGxlZnQ6IDA7XHJcbiAgICAgIHRvcDogMDtcclxuICAgICAgei1pbmRleDogOTk5O1xyXG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMjUpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAjaGVscENoaWxkIHtcclxuICAgICAgd2lkdGg6IDc1JTtcclxuICAgICAgaGVpZ2h0OiA3NSU7XHJcbiAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xyXG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XHJcbiAgICAgIG1hcmdpbi10b3A6IGF1dG87XHJcbiAgICAgIG1hcmdpbi1ib3R0b206IGF1dG87XHJcbiAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xyXG4gICAgICBib3JkZXItcmFkaXVzOiAyNXB4O1xyXG4gICAgICBib3gtc2hhZG93OiAycHggMnB4IGJsYWNrO1xyXG4gICAgICBwYWRkaW5nOiAyMHB4O1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAuc2lkZWJhci13aWRnZXQtY29uZmlnIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZGRkZDtcclxuICAgICAgYm9yZGVyLWxlZnQ6IGdyYXkgMXB4IHNvbGlkO1xyXG4gICAgICBwYWRkaW5nOiAxMHB4O1xyXG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwcHg7XHJcbiAgICAgIG9wYWNpdHk6IDA7XHJcbiAgICAgIHdpZHRoOiAwJTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLm1vZGFsIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLmVkaXQtbW9kZS1oZWFkZXIge1xyXG4gICAgICBib3JkZXItYm90dG9tOiBibGFjayAxcHggZGFzaGVkO1xyXG4gICAgICBwYWRkaW5nLXRvcDogMTBweDtcclxuICAgICAgcGFkZGluZy1ib3R0b206IDEwcHg7XHJcbiAgICAgIHotaW5kZXg6IDEwO1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLmVkaXQtbW9kZS1oZWFkZXIgYnV0dG9uIHtcclxuICAgICAgcGFkZGluZzogLjJyZW0gLjVyZW07XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC5idG4tc3BhY2Uge1xyXG4gICAgICBtYXJnaW4tbGVmdDogMTBweDtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLmJ0bi5ncmVlbiB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGdyZWVuO1xyXG4gICAgfVxyXG5cclxuICAgIC5idG4ucmVkIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkO1xyXG4gICAgfVxyXG5cclxuICAgIC5kYXNoYm9hcmQtbmF2LXRyaWdnZXIge1xyXG4gICAgICBib3R0b206IDQwcHg7XHJcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcclxuICAgICAgei1pbmRleDogMTAwO1xyXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgIHBhZGRpbmctdG9wOiAxNXB4O1xyXG4gICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcclxuICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDBkZWcsIHdoaXRlLCB3aGl0ZSwgdHJhbnNwYXJlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC5kYXNoYm9hcmQtbmF2IHtcclxuICAgICAgYm90dG9tOiAtMTUwcHg7XHJcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcclxuICAgICAgei1pbmRleDogMTAxO1xyXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAud2lkZ2V0LWltYWdlIHtcclxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICBtYXgtaGVpZ2h0OiAxMDBweDtcclxuICAgICAgaGVpZ2h0OiAxMDBweDtcclxuICAgICAgbWluLWhlaWdodDogMTAwcHg7XHJcbiAgICAgIG1heC13aWR0aDogMTAwcHg7XHJcbiAgICAgIHdpZHRoOiAxMDBweDtcclxuICAgICAgbWluLXdpZHRoOiAxMDBweDtcclxuICAgICAgYm9yZGVyOiBibGFjayAxcHggc29saWQ7XHJcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBib3R0b207XHJcbiAgICAgIG92ZXJmbG93LXk6IGhpZGRlbjtcclxuICAgICAgb3ZlcmZsb3cteDogaGlkZGVuO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAud2lkZ2V0LWltYWdlLnNlbGVjdGVkIHtcclxuICAgICAgYm9yZGVyOiByZWQgMnB4IHNvbGlkO1xyXG4gICAgfVxyXG4gIGBdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgRGFzaGJvYXJkU2VydmljZVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIERhc2hib2FyZENvbXBvbmVudCB7XHJcblxyXG4gIEBIb3N0QmluZGluZyhcImNsYXNzXCIpIGNsYXNzTGlzdDogc3RyaW5nID0gXCJvdXRsZXQtY29sdW1uXCI7XHJcblxyXG4gIHB1YmxpYyBvcGVuRGFzaGJvYXJkTmF2U3RhdGU6IHN0cmluZyA9IFwiY2xvc2VkXCI7XHJcblxyXG4gIHB1YmxpYyBoZWxwTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBlZGl0TW9kZTogc3RyaW5nID0gXCJjbG9zZWRcIjtcclxuICBwdWJsaWMgc2VsZWN0ZWRJbmRleCA9IDA7XHJcblxyXG4gIHB1YmxpYyBkYXNoYm9hcmRzOiBEYXNoYm9hcmRbXSA9IFtdO1xyXG5cclxuICBwdWJsaWMgc2hvd1dpZGdldENvbnRhaW5lck5hdjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25maWdNb2RlOiBzdHJpbmcgPSBcImZhbHNlXCI7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oV2lkZ2V0Q29udGFpbmVyQ29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgd2lkZ2V0Q29udGFpbmVyczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xyXG5cclxuICBAVmlld0NoaWxkKFwid2lkZ2V0Q29uZmlndXJlXCIsIHtzdGF0aWM6IGZhbHNlfSkgd2lkZ2V0Q29uZmlndXJlOiBXaWRnZXRDb25maWd1cmVDb21wb25lbnQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgICAgICAgICAgICBwcml2YXRlIGRhc2hib2FyZFNlcnZpY2U6IERhc2hib2FyZFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBkYXNoYm9hcmRHbG9iYWxTZXJ2aWNlOiBEYXNoYm9hcmRHbG9iYWxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgZHJhZ3VsYVNlcnZpY2U6IERyYWd1bGFTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCkge1xyXG4gICAgdGhpcy5kYXNoYm9hcmRzID0gdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmdldERhc2hib2FyZHMoKTtcclxuXHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZGFzaGJvYXJkc1N0YXRlLnN1YnNjcmliZSgoZGFzaGJvYXJkczogRGFzaGJvYXJkW10pID0+IHtcclxuICAgICAgdGhpcy5kYXNoYm9hcmRzID0gZGFzaGJvYXJkcztcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5jb25maWd1cmF0aW9uV2lkZ2V0SW5zdGFuY2VTdWJqZWN0LnN1YnNjcmliZSgod2lkZ2V0SW5zdGFuY2U6IFdpZGdldEluc3RhbmNlKSA9PiB7XHJcbiAgICAgIGlmICh3aWRnZXRJbnN0YW5jZSkge1xyXG4gICAgICAgIHRoaXMuY29uZmlnTW9kZSA9IFwidHJ1ZVwiO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY29uZmlnTW9kZSA9IFwiZmFsc2VcIjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmdldEVkaXRNb2RlKCkuc3Vic2NyaWJlKChlZGl0TW9kZTogYm9vbGVhbikgPT4ge1xyXG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICBjb25zb2xlLmluZm8oXCJnZXRFZGl0TW9kZSBcIiArIGVkaXRNb2RlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGVkaXRNb2RlKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0TW9kZSA9IFwib3BlbmVkXCI7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5lZGl0TW9kZSA9IFwiY2xvc2VkXCI7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qbGV0IGJhZyA9IHRoaXMuZHJhZ3VsYVNlcnZpY2UuZmluZChcImF0dHJpYnV0ZS1jaG9pY2VzXCIpO1xyXG4gICAgaWYgKGJhZyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuZHJhZ3VsYVNlcnZpY2UuZGVzdHJveShcImF0dHJpYnV0ZS1jaG9pY2VzXCIpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kcmFndWxhU2VydmljZS5jcmVhdGVHcm91cChcImF0dHJpYnV0ZS1jaG9pY2VzXCIsIHtcclxuICAgICAgZGlyZWN0aW9uOiBcInZlcnRpY2FsXCIsXHJcbiAgICAgIG1vdmVzOiBmdW5jdGlvbiAoZWw6IGFueSwgY29udGFpbmVyOiBhbnksIGhhbmRsZTogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5kcmFndWxhU2VydmljZS5maW5kKFwiYXR0cmlidXRlLWNob2ljZXNcIilcclxuICAgICAgLmRyYWtlXHJcbiAgICAgIC5jb250YWluZXJzXHJcbiAgICAgIC5wdXNoKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXR0cmlidXRlLWNob2ljZXNcIikpO1xyXG4gICAgdGhpcy5kcmFndWxhU2VydmljZS5kcm9wKFwiXCIpLnN1YnNjcmliZSgodmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICBsZXQgbjogbnVtYmVyID0gMTtcclxuXHJcbiAgICAgIGZvciAobGV0IGVsIG9mIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ3aWRnZXQtaG9zdFwiKSkge1xyXG4gICAgICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5zYXZlV2lkZ2V0U29ydE9yZGVyKHRoaXMuc2VsZWN0ZWRJbmRleCwgK2VsLmdldEF0dHJpYnV0ZShcImlkXCIpLCBuKyspO1xyXG4gICAgICB9XHJcbiAgICB9KTsqL1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRhc2hib2FyZEdsb2JhbFNlcnZpY2Uuc2V0QWN0aXZlRGFzaGJvYXJkU2VydmljZSh0aGlzLmRhc2hib2FyZFNlcnZpY2UpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy53aWRnZXRDb250YWluZXJzLmNoYW5nZXMuc3Vic2NyaWJlKCh3aWRnZXRDb250YWluZXJzOiBRdWVyeUxpc3QgPEVsZW1lbnRSZWY+KSA9PiB7XHJcbiAgICAgIHRoaXMucmVuZGVyRGFzaGJvYXJkTmF2SW1hZ2VzKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXNoYm9hcmRHbG9iYWxTZXJ2aWNlLnNldEFjdGl2ZURhc2hib2FyZFNlcnZpY2UoKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdERhc2hib2FyZChpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBpbmRleDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluZm9ybXMgZGFzaGJvYXJkU2VydmljZSBvZiBlZGl0TW9kZSBjaGFuZ2UuICBXaWRnZXQgaG9zdHMgd2lsbCBsaXN0ZW4gZm9yIHRoaXMgY2hhbmdlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGVkaXRNb2RlXHJcbiAgICovXHJcbiAgc2V0RWRpdE1vZGUoZWRpdE1vZGU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5zZXRFZGl0TW9kZShlZGl0TW9kZSk7XHJcbiAgfVxyXG5cclxuICBzZXRIZWxwTW9kZShoZWxwTW9kZTogYm9vbGVhbikge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuaW5mbyhcInNldEhlbHBNb2RlIFwiICsgaGVscE1vZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaGVscE1vZGUgPSBoZWxwTW9kZTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVc2UgZG9tLXRvLWltYWdlIHRvIHJlbmRlciBlYWNoIHdpZGdldENvbnRhaW5lciBhcyBhbiBpbWFnZS4gIEFkZCBhbiBpbWFnZSBmb3IgZWFjaCB3aWRnZXRDb250YWluZXJcclxuICAgKiB0byB0aGUgZGFzaGJvYXJkTmF2IHZpZXcuXHJcbiAgICovXHJcbiAgcmVuZGVyRGFzaGJvYXJkTmF2SW1hZ2VzKCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgdGhpcy53aWRnZXRDb250YWluZXJzLmZvckVhY2goKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICB2YXIgZWwgPSBzZWxmLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiI2Rhc2gtaW1hZ2UtXCIgKyBpbmRleCk7XHJcbiAgICAgICAgaWYgKGVsKSB7XHJcbiAgICAgICAgICBkb210b2ltYWdlLnRvUG5nKGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudClcclxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGRhdGFVcmwpIHtcclxuICAgICAgICAgICAgICB2YXIgaW1nID0gbmV3IEltYWdlKCk7XHJcbiAgICAgICAgICAgICAgaW1nLndpZHRoID0gMTAwO1xyXG4gICAgICAgICAgICAgIGltZy5zcmMgPSBkYXRhVXJsO1xyXG4gICAgICAgICAgICAgIGVsLmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgZWwuYXBwZW5kQ2hpbGQoaW1nKTtcclxuICAgICAgICAgICAgICBzZWxmLnNob3dXaWRnZXRDb250YWluZXJOYXYgPSB0cnVlO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIldpZGdldCBJbWFnZSBFcnJvclwiLCBlcnJvcik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9LCAyMDAwKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmRzIHRyaWdnZXIgdG8gZGFzaGJvYXJkU2VydmljZSB0byBvcGVuIHRoZSB3aWRnZXQgYWRkIGNvbXBvbmVudC4gIFRoYXQgY29tcG9uZW50IGxpc3RlbnMgZm9yXHJcbiAgICogdGhpcyB0cmlnZ2VyLlxyXG4gICAqL1xyXG4gIGFkZFdpZGdldCgpIHtcclxuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5hZGRXaWRnZXRTdWJqZWN0Lm5leHQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVXaWRnZXQoKSB7XHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZGVsZXRlV2lkZ2V0KHRoaXMuZGFzaGJvYXJkU2VydmljZS5jb25maWd1cmF0aW9uV2lkZ2V0SW5zdGFuY2VTdWJqZWN0LmdldFZhbHVlKCkpO1xyXG4gIH1cclxuXHJcbiAgY2FuY2VsQ29uZmlndXJhdGlvbigpIHtcclxuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5jYW5jZWxDb25maWd1cmF0aW9uV2lkZ2V0KCk7XHJcbiAgfVxyXG5cclxuICBzYXZlQ29uZmlndXJhdGlvbigpIHtcclxuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5zYXZlQ29uZmlndXJhdGlvbldpZGdldCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbHMgZGFzaGJvYXJkU2VydmljZSB0byBhZGQgYSBkYXNoYm9hcmQuICBBZGQgZGFzaGJvYXJkIHdpbGwgdXBkYXRlIGRhc2hib2FyZHMgdGhyb3VnaCBzdWJzY3JpYmUgYW5kXHJcbiAgICogdGhpcyB3YWl0cyBmb3IgY29tcGxldGlvbiBvZiB0aGUgcHJvY2VzcyB3aGljaCByZXR1cm5zIHRoZSBuZXcgc2VsZWN0ZWRJbmRleCAod2hpY2ggaXMgdGhlIGxhc3QgZGFzaGJvYXJkKS5cclxuICAgKi9cclxuICBhZGREYXNoYm9hcmQoKSB7XHJcbiAgICBsZXQgZGFzaGJvYXJkOiBEYXNoYm9hcmQgPSBuZXcgRGFzaGJvYXJkKCk7XHJcbiAgICBkYXNoYm9hcmQubmFtZSA9IFwiVGVtcFwiO1xyXG4gICAgZGFzaGJvYXJkLnNvcnRPcmRlciA9IHRoaXMuZGFzaGJvYXJkcy5sZW5ndGg7XHJcbiAgICBkYXNoYm9hcmQud2lkZ2V0SW5zdGFuY2VzID0gW107XHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuYWRkRGFzaGJvYXJkKGRhc2hib2FyZCkuc3Vic2NyaWJlKChpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IGluZGV4O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWxscyBkYXNoYm9hcmRTZXJ2aWNlIHRvIGRlbGV0ZSBkYXNoYm9hcmQuICBEZWxldGUgZGFzaGJvYXJkIHdpbGwgdXBkYXRlIGRhc2hib2FyZHMgdGhyb3VnaCBzdWJzY3JpYmUgYW5kXHJcbiAgICogdGhpcyB3YWl0cyBmb3IgY29tcGxldGlvbiBvZiB0aGUgcHJvY2VzcyB3aGljaCByZXR1cm5zIHRoZSBuZXcgc2VsZWN0ZWRJbmRleC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBjb250ZW50XHJcbiAgICovXHJcbiAgZGVsZXRlRGFzaGJvYXJkKGNvbnRlbnQpIHtcclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oY29udGVudCkucmVzdWx0LnRoZW4oKHJlc3VsdDogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQgPT09IFwiWWVzXCIpIHtcclxuICAgICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZGVsZXRlRGFzaGJvYXJkKHRoaXMuc2VsZWN0ZWRJbmRleCkuc3Vic2NyaWJlKChpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBpbmRleDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
590
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2Rhc2hib2FyZC9zcmMvZGFzaGJvYXJkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE9BQU8sRUFDTCxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFDdkYsV0FBVyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFL0UsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFPLFVBQVUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBRXBELE9BQU8sRUFBQyxTQUFTLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBQ2hGLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQzdFLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7Ozs7O0FBRTNFOzs7Ozs7R0FNRztBQWtUSCxNQUFNLE9BQU8sa0JBQWtCO0lBb0I3QixZQUFvQixpQkFBb0MsRUFDcEMsVUFBc0IsRUFDdEIsZ0JBQWtDLEVBQ2xDLHNCQUE4QyxFQUM5QyxjQUE4QixFQUM5QixZQUFzQjtRQUx0QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIscUJBQWdCLEdB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QUNULGdCQUFnQjtxQkFDakI7dU9BSXFCLFNBQVM7c0JBQTlCLFdBQVc7dUJBQUMsT0FBTztnQkFjMEMsZ0JBQWdCO3NCQUE3RSxZQUFZO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFFYixlQUFlO3NCQUE3RCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYgSHVudHNtYW4gQ2FuY2VyIEluc3RpdHV0ZSBhdCB0aGUgVW5pdmVyc2l0eSBvZiBVdGFoLCBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5XG4gKi9cbmltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIGlzRGV2TW9kZSwgUXVlcnlMaXN0LCBWaWV3Q2hpbGRyZW4sIFZpZXdDaGlsZCxcbiAgSG9zdEJpbmRpbmdcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7YW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiO1xuXG5pbXBvcnQge0RyYWd1bGFTZXJ2aWNlfSBmcm9tIFwibmcyLWRyYWd1bGFcIjtcbmltcG9ydCBkb210b2ltYWdlIGZyb20gXCJkb20tdG8taW1hZ2VcIjtcbmltcG9ydCB7TmdiTW9kYWx9IGZyb20gXCJAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcFwiO1xuXG5pbXBvcnQge0Rhc2hib2FyZCwgV2lkZ2V0SW5zdGFuY2V9IGZyb20gXCIuL21vZGVsL21vZGVsXCI7XG5pbXBvcnQge0Rhc2hib2FyZFNlcnZpY2V9IGZyb20gXCIuL3NlcnZpY2VzL2Rhc2hib2FyZC5zZXJ2aWNlXCI7XG5pbXBvcnQge1dpZGdldENvbmZpZ3VyZUNvbXBvbmVudH0gZnJvbSBcIi4vY29uZmlndXJlL3dpZGdldC1jb25maWd1cmUuY29tcG9uZW50XCI7XG5pbXBvcnQge1dpZGdldENvbnRhaW5lckNvbXBvbmVudH0gZnJvbSBcIi4vd2lkZ2V0L3dpZGdldC1jb250YWluZXIuY29tcG9uZW50XCI7XG5pbXBvcnQge0Rhc2hib2FyZEdsb2JhbFNlcnZpY2V9IGZyb20gXCIuL3NlcnZpY2VzL2Rhc2hib2FyZC1nbG9iYWwuc2VydmljZVwiO1xuXG4vKipcbiAqIERhc2hib2FyZCAod2l0aGluIGEgY2FyZC1ncm91cCkgaXRlcmF0ZXMgb3ZlciBjb25maWd1cmVkIHdpZGdldHMgdG8gcHJvZHVjZSBlYWNoIG9uZSBpbiBhIGNhcmQuICBUaGUgd2lkZ2V0cyBjYW5cbiAqIGFsd2F5cyBnZXQgYWNjZXNzIHRvIGFueSBjb25maWd1cmF0aW9uIGhlbGQgYnkgdGhlIGRhc2hib2FyZCBzZXJ2aWNlLCBidXQgdGhleSBhcmUgaW50ZW5kZWQgdG8gYmUgbGFyZ2VseVxuICogaW5kZXBlbmRlbnQuXG4gKlxuICogQHNpbmNlIDEuMC4wXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJkYXNoYm9hcmRcIixcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmctdGVtcGxhdGUgI2NvbmZpcm1EaWFsb2cgbGV0LWM9XCJjbG9zZVwiIGxldC1kPVwiZGlzbWlzc1wiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiPkRlbGV0ZTwvaDU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgICAgIDxwPkFyZSB5b3Ugc3VyZT88L3A+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwiYygnWWVzJylcIj5ZZXM8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIChjbGljayk9XCJkKCdObycpXCI+Tm88L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8d2lkZ2V0LWFkZCBbZGFzaGJvYXJkSW5kZXhdPVwic2VsZWN0ZWRJbmRleFwiPjwvd2lkZ2V0LWFkZD5cblxuICAgIDxkaXYgY2xhc3M9XCJlZGl0LW1vZGUtaGVhZGVyXCJcbiAgICAgICAgIFtAb3BlbkVkaXRNb2RlSGVhZGVyXT1cImVkaXRNb2RlXCJcbiAgICAgICAgIFtAb3BlbkVkaXRNb2RlSGVhZGVyRGlzcGxheV09XCJlZGl0TW9kZVwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc3BhY2VcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkV2lkZ2V0KClcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGx1cyBmYS0yeFwiPjwvaT5cbiAgICAgICAgPGJyIC8+XG4gICAgICAgIDxzcGFuPldpZGdldDwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImNvbmZpZ01vZGUgPT09ICd0cnVlJ1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zcGFjZSByZWRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlV2lkZ2V0KClcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGltZXMgZmEtMnhcIj48L2k+XG4gICAgICAgIDxiciAvPlxuICAgICAgICA8c3Bhbj5XaWRnZXQ8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNwYWNlXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZERhc2hib2FyZCgpXCI+XG4gICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXMgZmEtMnhcIj48L2k+XG4gICAgICAgIDxiciAvPlxuICAgICAgICA8c3Bhbj5EYXNoYm9hcmQ8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNwYWNlIHJlZFwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiZGFzaGJvYXJkcy5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZURhc2hib2FyZChjb25maXJtRGlhbG9nKVwiPlxuICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lcyBmYS0yeFwiPjwvaT5cbiAgICAgICAgPGJyIC8+XG4gICAgICAgIDxzcGFuPkRhc2hib2FyZDwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc3BhY2UgZ3JlZW5cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2V0RWRpdE1vZGUoZmFsc2UpXCI+XG4gICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNoZWNrIGZhLTJ4XCI+PC9pPlxuICAgICAgICA8YnIgLz5cbiAgICAgICAgPHNwYW4+RG9uZTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm91dGxldC1yb3dcIj5cblxuICAgICAgPCEtLSBJdGVyYXRlIG92ZXIgYWxsIGRhc2hib2FyZHMuICBTaG93IG5vbiBzZWxlY3RlZCBkYXNoYm9hcmRzIG9mZiBzY3JlZW4uIC0tPlxuICAgICAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1kYXNoYm9hcmQgW25nRm9yT2ZdPVwiZGFzaGJvYXJkc1wiIGxldC1kYXNoYm9hcmRJbmRleD1cImluZGV4XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIlxuICAgICAgICAgICAgIFtzdHlsZS5sZWZ0XT1cInNlbGVjdGVkSW5kZXggIT09IGRhc2hib2FyZEluZGV4ID8gJzEwMHZ3JyA6ICdpbmhlcml0J1wiXG4gICAgICAgICAgICAgW3N0eWxlLnBvc2l0aW9uXT1cInNlbGVjdGVkSW5kZXggIT09IGRhc2hib2FyZEluZGV4ID8gJ2ZpeGVkJyA6ICdpbmhlcml0J1wiXG4gICAgICAgICAgICAgW0BvcGVuQ29uZmlnQ29udGVudF09XCJjb25maWdNb2RlXCI+XG4gICAgICAgICAgPHdpZGdldC1jb250YWluZXJcbiAgICAgICAgICAgICAgW2Rhc2hib2FyZF09XCJkYXNoYm9hcmRcIlxuICAgICAgICAgICAgICBbZGFzaGJvYXJkSW5kZXhdPVwiZGFzaGJvYXJkSW5kZXhcIj5cbiAgICAgICAgICA8L3dpZGdldC1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPGRpdiBbc3R5bGUuZGlzcGxheV09XCJjb25maWdNb2RlID09PSAndHJ1ZScgPyAnZmxleCcgOiAnbm9uZSdcIiBjbGFzcz1cInNpZGViYXItd2lkZ2V0LWNvbmZpZ1wiIFtAb3BlbkNvbmZpZ1NpZGViYXJdPVwiY29uZmlnTW9kZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwib3V0bGV0LWNvbHVtblwiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7IGhlaWdodDogMTAwJTsgcGFkZGluZzogMnB4O1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1ub3dyYXBcIj5cbiAgICAgICAgICAgIDxkaXY+PGg0PlNldHRpbmdzPC9oND48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDBweDsgbWFyZ2luLWxlZnQ6IGF1dG87XCI+XG4gICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiY29sb3I6IHZhcigtLXB1cmUtZ3JlZW4pO1wiIChjbGljayk9XCJzYXZlQ29uZmlndXJhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY2hlY2stY2lyY2xlIGZhLTJ4XCI+PC9pPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiY29sb3I6IHZhcigtLXB1cmUtcmVkKTtcIiAoY2xpY2spPVwiY2FuY2VsQ29uZmlndXJhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGltZXMtY2lyY2xlIGZhLTJ4XCI+PC9pPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8d2lkZ2V0LWNvbmZpZ3VyZSAjd2lkZ2V0Q29uZmlndXJlPjwvd2lkZ2V0LWNvbmZpZ3VyZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXNoYm9hcmRzPy5sZW5ndGggPiAxXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGFzaGJvYXJkLW5hdi10cmlnZ2VyXCI+XG4gICAgICAgIDxzcGFuIChtb3VzZWVudGVyKT1cIm9wZW5EYXNoYm9hcmROYXZTdGF0ZSA9ICdvcGVuZWQnXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGggZmEtMnhcIj48L2k+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZGFzaGJvYXJkLW5hdlwiXG4gICAgICAgICAgIFtAb3BlbkRhc2hib2FyZE5hdl09XCJvcGVuRGFzaGJvYXJkTmF2U3RhdGVcIlxuICAgICAgICAgICBbc3R5bGUubGVmdF09XCInY2FsYyg1MHZ3IC0gJyArIGRhc2hib2FyZHM/Lmxlbmd0aCAqIDUwICsgJ3B4KSdcIlxuICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJvcGVuRGFzaGJvYXJkTmF2U3RhdGUgPSAnY2xvc2VkJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkYXNoYm9hcmQgb2YgZGFzaGJvYXJkczsgaW5kZXggYXMgaVwiPlxuICAgICAgICAgIDxkaXYgW2lkXT1cIidkYXNoLWltYWdlLScgKyBpXCJcbiAgICAgICAgICAgICAgIGNsYXNzPVwid2lkZ2V0LWltYWdlXCJcbiAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImkgPT09IHNlbGVjdGVkSW5kZXggPyAnc2VsZWN0ZWQnIDogJydcIlxuICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdERhc2hib2FyZChpKVwiPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlbHBNb2RlXCI+XG4gICAgICA8ZGl2IGlkPVwiaGVscFBhcmVudFwiPlxuICAgICAgICA8ZGl2IGlkPVwiaGVscENoaWxkXCI+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOiAxMDAlOyBkaXNwbGF5OiBpbmxpbmUtZmxleDtcIj5cbiAgICAgICAgICAgIDxoND5IZWxwPC9oND5cbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAwOyBtYXJnaW4tbGVmdDogYXV0bzsgY29sb3I6IHZhcigtLXB1cmUtcmVkKTtcIiAoY2xpY2spPVwic2V0SGVscE1vZGUoZmFsc2UpXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzIGZhLWxnXCI+PC9pPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICBUaGUgZGFzaGJvYXJkIGlzIGEgY29sbGVjdGlvbiBvZiB3aWRnZXRzIHRoYXQgeW91IGNhbiBjdXN0b21pemUgdG8geW91ciBvd24gbmVlZHMuICBJbiB0aGlzIGVkaXQgbW9kZSwgeW91XG4gICAgICAgICAgICBjYW4gZHJhZyBhbmQgZHJvcCB3aWRnZXRzIHRvIGNoYW5nZSB0aGUgb3JkZXIgYW5kIGRvdWJsZSBjbGljayBhIHdpZGdldCB0byBjaGFuZ2UgaXRzIGNvbmZpZ3VyYXRpb24uXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIGAsXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKFwib3BlbkNvbmZpZ0NvbnRlbnRcIixcbiAgICAgIFtcbiAgICAgICAgc3RhdGUoXCJmYWxzZVwiLCBzdHlsZSh7XG4gICAgICAgICAgd2lkdGg6IFwiMTAwJVwiXG4gICAgICAgIH0pKSxcbiAgICAgICAgc3RhdGUoXCJ0cnVlXCIsIHN0eWxlKHtcbiAgICAgICAgICB3aWR0aDogXCI4MCVcIlxuICAgICAgICB9KSksXG4gICAgICAgIHRyYW5zaXRpb24oXCJmYWxzZSA9PiB0cnVlXCIsIGFuaW1hdGUoMzAwKSksXG4gICAgICAgIHRyYW5zaXRpb24oXCJ0cnVlID0+IGZhbHNlXCIsIGFuaW1hdGUoMzAwKSlcbiAgICAgIF1cbiAgICApLFxuICAgIHRyaWdnZXIoXCJvcGVuQ29uZmlnU2lkZWJhclwiLFxuICAgICAgW1xuICAgICAgICBzdGF0ZShcImZhbHNlXCIsIHN0eWxlKHtcbiAgICAgICAgICBvcGFjaXR5OiBcIjBcIixcbiAgICAgICAgICB3aWR0aDogXCIwJVwiXG4gICAgICAgIH0pKSxcbiAgICAgICAgc3RhdGUoXCJ0cnVlXCIsIHN0eWxlKHtcbiAgICAgICAgICBvcGFjaXR5OiBcIjFcIixcbiAgICAgICAgICB3aWR0aDogXCIyMCVcIlxuICAgICAgICB9KSksXG4gICAgICAgIHRyYW5zaXRpb24oXCJmYWxzZSA9PiB0cnVlXCIsIGFuaW1hdGUoMzAwKSksXG4gICAgICAgIHRyYW5zaXRpb24oXCJ0cnVlID0+IGZhbHNlXCIsIGFuaW1hdGUoMzAwKSlcbiAgICAgIF1cbiAgICApLFxuICAgIHRyaWdnZXIoXCJvcGVuRGFzaGJvYXJkTmF2XCIsXG4gICAgICBbXG4gICAgICAgIHN0YXRlKFwiY2xvc2VkXCIsIHN0eWxlKHtcbiAgICAgICAgICBvcGFjaXR5OiBcIjBcIixcbiAgICAgICAgICBib3R0b206IFwiLTE1MHB4XCJcbiAgICAgICAgfSkpLFxuICAgICAgICBzdGF0ZShcIm9wZW5lZFwiLCBzdHlsZSh7XG4gICAgICAgICAgb3BhY2l0eTogXCIxXCIsXG4gICAgICAgICAgYm90dG9tOiBcIjQwcHhcIlxuICAgICAgICB9KSksXG4gICAgICAgIHRyYW5zaXRpb24oXCJjbG9zZWQgPT4gb3BlbmVkXCIsIGFuaW1hdGUoMjUwKSksXG4gICAgICAgIHRyYW5zaXRpb24oXCJvcGVuZWQgPT4gY2xvc2VkXCIsIGFuaW1hdGUoMTAwKSlcbiAgICAgIF1cbiAgICApLFxuICAgIC8qdHJpZ2dlcihcIm9wZW5FZGl0TW9kZUhlYWRlckNvbnRlbnRcIiwgW1xuICAgICAgc3RhdGUoXCJjbG9zZWRcIiwgc3R5bGUoe1xuICAgICAgICBcInBhZGRpbmctdG9wXCI6IFwiMHB4XCJcbiAgICAgIH0pKSxcbiAgICAgIHN0YXRlKFwib3BlbmVkXCIsIHN0eWxlKHtcbiAgICAgICAgXCJwYWRkaW5nLXRvcFwiOiBcIjkxcHhcIlxuICAgICAgfSkpLFxuICAgICAgdHJhbnNpdGlvbihcImNsb3NlZCA9PiBvcGVuZWRcIiwgYW5pbWF0ZSgzMDApKSxcbiAgICAgIHRyYW5zaXRpb24oXCJvcGVuZWQgPT4gY2xvc2VkXCIsIGFuaW1hdGUoMzAwKSlcbiAgICBdKSwqL1xuICAgIHRyaWdnZXIoXCJvcGVuRWRpdE1vZGVIZWFkZXJcIiwgW1xuICAgICAgc3RhdGUoXCJjbG9zZWRcIiwgc3R5bGUoe1xuICAgICAgICBcIm9wYWNpdHlcIjogXCIwXCIsXG4gICAgICAgIFwib3ZlcmZsb3cteVwiOiBcImhpZGRlblwiXG4gICAgICB9KSksXG4gICAgICBzdGF0ZShcIm9wZW5lZFwiLCBzdHlsZSh7XG4gICAgICAgIFwib3BhY2l0eVwiOiBcIjFcIixcbiAgICAgICAgXCJvdmVyZmxvdy15XCI6IFwidmlzaWJsZVwiXG4gICAgICB9KSksXG4gICAgICB0cmFuc2l0aW9uKFwiY2xvc2VkID0+IG9wZW5lZFwiLCBhbmltYXRlKDMwMCkpLFxuICAgICAgdHJhbnNpdGlvbihcIm9wZW5lZCA9PiBjbG9zZWRcIiwgYW5pbWF0ZSgzMDApKVxuICAgIF0pLFxuICAgIHRyaWdnZXIoXCJvcGVuRWRpdE1vZGVIZWFkZXJEaXNwbGF5XCIsIFtcbiAgICAgIHN0YXRlKFwiY2xvc2VkXCIsIHN0eWxlKHtcbiAgICAgICAgXCJkaXNwbGF5XCI6IFwibm9uZVwiXG4gICAgICB9KSksXG4gICAgICBzdGF0ZShcIm9wZW5lZFwiLCBzdHlsZSh7XG4gICAgICAgIFwiZGlzcGxheVwiOiBcImZsZXhcIlxuICAgICAgfSkpLFxuICAgICAgdHJhbnNpdGlvbihcImNsb3NlZCA9PiBvcGVuZWRcIiwgYW5pbWF0ZSgxMDApKSxcbiAgICAgIHRyYW5zaXRpb24oXCJvcGVuZWQgPT4gY2xvc2VkXCIsIGFuaW1hdGUoXCIxMDBtcyAxMDBtc1wiKSlcbiAgICBdKVxuICBdLFxuICBzdHlsZXM6IFtgXG5cbiAgICAjaGVscFBhcmVudCB7XG4gICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgICAgaGVpZ2h0OiAxMDB2aDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB0b3A6IDA7XG4gICAgICB6LWluZGV4OiA5OTk7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICAgIH1cblxuICAgICNoZWxwQ2hpbGQge1xuICAgICAgd2lkdGg6IDc1JTtcbiAgICAgIGhlaWdodDogNzUlO1xuICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgICBtYXJnaW4tdG9wOiBhdXRvO1xuICAgICAgbWFyZ2luLWJvdHRvbTogYXV0bztcbiAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgICAgYm9yZGVyLXJhZGl1czogMjVweDtcbiAgICAgIGJveC1zaGFkb3c6IDJweCAycHggYmxhY2s7XG4gICAgICBwYWRkaW5nOiAyMHB4O1xuICAgIH1cblxuICAgIC5zaWRlYmFyLXdpZGdldC1jb25maWcge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZGRkZDtcbiAgICAgIGJvcmRlci1sZWZ0OiBncmF5IDFweCBzb2xpZDtcbiAgICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwcHg7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgd2lkdGg6IDAlO1xuICAgIH1cblxuICAgIC5tb2RhbCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICAgIH1cblxuICAgIC5lZGl0LW1vZGUtaGVhZGVyIHtcbiAgICAgIGJvcmRlci1ib3R0b206IGJsYWNrIDFweCBkYXNoZWQ7XG4gICAgICBwYWRkaW5nLXRvcDogMTBweDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAxMHB4O1xuICAgICAgei1pbmRleDogMTA7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICB9XG5cbiAgICAuZWRpdC1tb2RlLWhlYWRlciBidXR0b24ge1xuICAgICAgcGFkZGluZzogLjJyZW0gLjVyZW07XG4gICAgfVxuXG4gICAgLmJ0bi1zcGFjZSB7XG4gICAgICBtYXJnaW4tbGVmdDogMTBweDtcbiAgICB9XG5cbiAgICAuYnRuLmdyZWVuIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGdyZWVuO1xuICAgIH1cblxuICAgIC5idG4ucmVkIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDtcbiAgICB9XG5cbiAgICAuZGFzaGJvYXJkLW5hdi10cmlnZ2VyIHtcbiAgICAgIGJvdHRvbTogNDBweDtcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgIHotaW5kZXg6IDEwMDtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgcGFkZGluZy10b3A6IDE1cHg7XG4gICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgwZGVnLCB3aGl0ZSwgd2hpdGUsIHRyYW5zcGFyZW50KTtcbiAgICB9XG5cbiAgICAuZGFzaGJvYXJkLW5hdiB7XG4gICAgICBib3R0b206IC0xNTBweDtcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgIHotaW5kZXg6IDEwMTtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgIH1cblxuICAgIC53aWRnZXQtaW1hZ2Uge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgbWF4LWhlaWdodDogMTAwcHg7XG4gICAgICBoZWlnaHQ6IDEwMHB4O1xuICAgICAgbWluLWhlaWdodDogMTAwcHg7XG4gICAgICBtYXgtd2lkdGg6IDEwMHB4O1xuICAgICAgd2lkdGg6IDEwMHB4O1xuICAgICAgbWluLXdpZHRoOiAxMDBweDtcbiAgICAgIGJvcmRlcjogYmxhY2sgMXB4IHNvbGlkO1xuICAgICAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbiAgICAgIG92ZXJmbG93LXk6IGhpZGRlbjtcbiAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgICB9XG5cbiAgICAud2lkZ2V0LWltYWdlLnNlbGVjdGVkIHtcbiAgICAgIGJvcmRlcjogcmVkIDJweCBzb2xpZDtcbiAgICB9XG4gIGBdLFxuICBwcm92aWRlcnM6IFtcbiAgICBEYXNoYm9hcmRTZXJ2aWNlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRGFzaGJvYXJkQ29tcG9uZW50IHtcblxuICBASG9zdEJpbmRpbmcoXCJjbGFzc1wiKSBjbGFzc0xpc3Q6IHN0cmluZyA9IFwib3V0bGV0LWNvbHVtblwiO1xuXG4gIHB1YmxpYyBvcGVuRGFzaGJvYXJkTmF2U3RhdGU6IHN0cmluZyA9IFwiY2xvc2VkXCI7XG5cbiAgcHVibGljIGhlbHBNb2RlOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBlZGl0TW9kZTogc3RyaW5nID0gXCJjbG9zZWRcIjtcbiAgcHVibGljIHNlbGVjdGVkSW5kZXggPSAwO1xuXG4gIHB1YmxpYyBkYXNoYm9hcmRzOiBEYXNoYm9hcmRbXSA9IFtdO1xuXG4gIHB1YmxpYyBzaG93V2lkZ2V0Q29udGFpbmVyTmF2OiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uZmlnTW9kZTogc3RyaW5nID0gXCJmYWxzZVwiO1xuXG4gIEBWaWV3Q2hpbGRyZW4oV2lkZ2V0Q29udGFpbmVyQ29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgd2lkZ2V0Q29udGFpbmVyczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXG4gIEBWaWV3Q2hpbGQoXCJ3aWRnZXRDb25maWd1cmVcIiwge3N0YXRpYzogZmFsc2V9KSB3aWRnZXRDb25maWd1cmU6IFdpZGdldENvbmZpZ3VyZUNvbXBvbmVudDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICBwcml2YXRlIGRhc2hib2FyZFNlcnZpY2U6IERhc2hib2FyZFNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgZGFzaGJvYXJkR2xvYmFsU2VydmljZTogRGFzaGJvYXJkR2xvYmFsU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBkcmFndWxhU2VydmljZTogRHJhZ3VsYVNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCkge1xuICAgIHRoaXMuZGFzaGJvYXJkcyA9IHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXREYXNoYm9hcmRzKCk7XG5cbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZGFzaGJvYXJkc1N0YXRlLnN1YnNjcmliZSgoZGFzaGJvYXJkczogRGFzaGJvYXJkW10pID0+IHtcbiAgICAgIHRoaXMuZGFzaGJvYXJkcyA9IGRhc2hib2FyZHM7XG4gICAgfSk7XG5cbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuY29uZmlndXJhdGlvbldpZGdldEluc3RhbmNlU3ViamVjdC5zdWJzY3JpYmUoKHdpZGdldEluc3RhbmNlOiBXaWRnZXRJbnN0YW5jZSkgPT4ge1xuICAgICAgaWYgKHdpZGdldEluc3RhbmNlKSB7XG4gICAgICAgIHRoaXMuY29uZmlnTW9kZSA9IFwidHJ1ZVwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb25maWdNb2RlID0gXCJmYWxzZVwiO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmdldEVkaXRNb2RlKCkuc3Vic2NyaWJlKChlZGl0TW9kZTogYm9vbGVhbikgPT4ge1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhcImdldEVkaXRNb2RlIFwiICsgZWRpdE1vZGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWRpdE1vZGUpIHtcbiAgICAgICAgdGhpcy5lZGl0TW9kZSA9IFwib3BlbmVkXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVkaXRNb2RlID0gXCJjbG9zZWRcIjtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qbGV0IGJhZyA9IHRoaXMuZHJhZ3VsYVNlcnZpY2UuZmluZChcImF0dHJpYnV0ZS1jaG9pY2VzXCIpO1xuICAgIGlmIChiYWcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5kcmFndWxhU2VydmljZS5kZXN0cm95KFwiYXR0cmlidXRlLWNob2ljZXNcIik7XG4gICAgfVxuICAgIHRoaXMuZHJhZ3VsYVNlcnZpY2UuY3JlYXRlR3JvdXAoXCJhdHRyaWJ1dGUtY2hvaWNlc1wiLCB7XG4gICAgICBkaXJlY3Rpb246IFwidmVydGljYWxcIixcbiAgICAgIG1vdmVzOiBmdW5jdGlvbiAoZWw6IGFueSwgY29udGFpbmVyOiBhbnksIGhhbmRsZTogYW55KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuZHJhZ3VsYVNlcnZpY2UuZmluZChcImF0dHJpYnV0ZS1jaG9pY2VzXCIpXG4gICAgICAuZHJha2VcbiAgICAgIC5jb250YWluZXJzXG4gICAgICAucHVzaCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiI2F0dHJpYnV0ZS1jaG9pY2VzXCIpKTtcbiAgICB0aGlzLmRyYWd1bGFTZXJ2aWNlLmRyb3AoXCJcIikuc3Vic2NyaWJlKCh2YWx1ZTogYW55KSA9PiB7XG4gICAgICBsZXQgbjogbnVtYmVyID0gMTtcblxuICAgICAgZm9yIChsZXQgZWwgb2YgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIndpZGdldC1ob3N0XCIpKSB7XG4gICAgICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5zYXZlV2lkZ2V0U29ydE9yZGVyKHRoaXMuc2VsZWN0ZWRJbmRleCwgK2VsLmdldEF0dHJpYnV0ZShcImlkXCIpLCBuKyspO1xuICAgICAgfVxuICAgIH0pOyovXG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmRhc2hib2FyZEdsb2JhbFNlcnZpY2Uuc2V0QWN0aXZlRGFzaGJvYXJkU2VydmljZSh0aGlzLmRhc2hib2FyZFNlcnZpY2UpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMud2lkZ2V0Q29udGFpbmVycy5jaGFuZ2VzLnN1YnNjcmliZSgod2lkZ2V0Q29udGFpbmVyczogUXVlcnlMaXN0IDxFbGVtZW50UmVmPikgPT4ge1xuICAgICAgdGhpcy5yZW5kZXJEYXNoYm9hcmROYXZJbWFnZXMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGFzaGJvYXJkR2xvYmFsU2VydmljZS5zZXRBY3RpdmVEYXNoYm9hcmRTZXJ2aWNlKCk7XG4gIH1cblxuICBzZWxlY3REYXNoYm9hcmQoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IGluZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIEluZm9ybXMgZGFzaGJvYXJkU2VydmljZSBvZiBlZGl0TW9kZSBjaGFuZ2UuICBXaWRnZXQgaG9zdHMgd2lsbCBsaXN0ZW4gZm9yIHRoaXMgY2hhbmdlLlxuICAgKlxuICAgKiBAcGFyYW0gZWRpdE1vZGVcbiAgICovXG4gIHNldEVkaXRNb2RlKGVkaXRNb2RlOiBib29sZWFuKSB7XG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLnNldEVkaXRNb2RlKGVkaXRNb2RlKTtcbiAgfVxuXG4gIHNldEhlbHBNb2RlKGhlbHBNb2RlOiBib29sZWFuKSB7XG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICBjb25zb2xlLmluZm8oXCJzZXRIZWxwTW9kZSBcIiArIGhlbHBNb2RlKTtcbiAgICB9XG5cbiAgICB0aGlzLmhlbHBNb2RlID0gaGVscE1vZGU7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2UgZG9tLXRvLWltYWdlIHRvIHJlbmRlciBlYWNoIHdpZGdldENvbnRhaW5lciBhcyBhbiBpbWFnZS4gIEFkZCBhbiBpbWFnZSBmb3IgZWFjaCB3aWRnZXRDb250YWluZXJcbiAgICogdG8gdGhlIGRhc2hib2FyZE5hdiB2aWV3LlxuICAgKi9cbiAgcmVuZGVyRGFzaGJvYXJkTmF2SW1hZ2VzKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgdGhpcy53aWRnZXRDb250YWluZXJzLmZvckVhY2goKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgdmFyIGVsID0gc2VsZi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNkYXNoLWltYWdlLVwiICsgaW5kZXgpO1xuICAgICAgICBpZiAoZWwpIHtcbiAgICAgICAgICBkb210b2ltYWdlLnRvUG5nKGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudClcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChkYXRhVXJsKSB7XG4gICAgICAgICAgICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgaW1nLndpZHRoID0gMTAwO1xuICAgICAgICAgICAgICBpbWcuc3JjID0gZGF0YVVybDtcbiAgICAgICAgICAgICAgZWwuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgICAgZWwuYXBwZW5kQ2hpbGQoaW1nKTtcbiAgICAgICAgICAgICAgc2VsZi5zaG93V2lkZ2V0Q29udGFpbmVyTmF2ID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJXaWRnZXQgSW1hZ2UgRXJyb3JcIiwgZXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIDIwMDApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIHRyaWdnZXIgdG8gZGFzaGJvYXJkU2VydmljZSB0byBvcGVuIHRoZSB3aWRnZXQgYWRkIGNvbXBvbmVudC4gIFRoYXQgY29tcG9uZW50IGxpc3RlbnMgZm9yXG4gICAqIHRoaXMgdHJpZ2dlci5cbiAgICovXG4gIGFkZFdpZGdldCgpIHtcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuYWRkV2lkZ2V0U3ViamVjdC5uZXh0KHRydWUpO1xuICB9XG5cbiAgZGVsZXRlV2lkZ2V0KCkge1xuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5kZWxldGVXaWRnZXQodGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmNvbmZpZ3VyYXRpb25XaWRnZXRJbnN0YW5jZVN1YmplY3QuZ2V0VmFsdWUoKSk7XG4gIH1cblxuICBjYW5jZWxDb25maWd1cmF0aW9uKCkge1xuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5jYW5jZWxDb25maWd1cmF0aW9uV2lkZ2V0KCk7XG4gIH1cblxuICBzYXZlQ29uZmlndXJhdGlvbigpIHtcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2Uuc2F2ZUNvbmZpZ3VyYXRpb25XaWRnZXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxscyBkYXNoYm9hcmRTZXJ2aWNlIHRvIGFkZCBhIGRhc2hib2FyZC4gIEFkZCBkYXNoYm9hcmQgd2lsbCB1cGRhdGUgZGFzaGJvYXJkcyB0aHJvdWdoIHN1YnNjcmliZSBhbmRcbiAgICogdGhpcyB3YWl0cyBmb3IgY29tcGxldGlvbiBvZiB0aGUgcHJvY2VzcyB3aGljaCByZXR1cm5zIHRoZSBuZXcgc2VsZWN0ZWRJbmRleCAod2hpY2ggaXMgdGhlIGxhc3QgZGFzaGJvYXJkKS5cbiAgICovXG4gIGFkZERhc2hib2FyZCgpIHtcbiAgICBsZXQgZGFzaGJvYXJkOiBEYXNoYm9hcmQgPSBuZXcgRGFzaGJvYXJkKCk7XG4gICAgZGFzaGJvYXJkLm5hbWUgPSBcIlRlbXBcIjtcbiAgICBkYXNoYm9hcmQuc29ydE9yZGVyID0gdGhpcy5kYXNoYm9hcmRzLmxlbmd0aDtcbiAgICBkYXNoYm9hcmQud2lkZ2V0SW5zdGFuY2VzID0gW107XG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmFkZERhc2hib2FyZChkYXNoYm9hcmQpLnN1YnNjcmliZSgoaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gaW5kZXg7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbHMgZGFzaGJvYXJkU2VydmljZSB0byBkZWxldGUgZGFzaGJvYXJkLiAgRGVsZXRlIGRhc2hib2FyZCB3aWxsIHVwZGF0ZSBkYXNoYm9hcmRzIHRocm91Z2ggc3Vic2NyaWJlIGFuZFxuICAgKiB0aGlzIHdhaXRzIGZvciBjb21wbGV0aW9uIG9mIHRoZSBwcm9jZXNzIHdoaWNoIHJldHVybnMgdGhlIG5ldyBzZWxlY3RlZEluZGV4LlxuICAgKlxuICAgKiBAcGFyYW0gY29udGVudFxuICAgKi9cbiAgZGVsZXRlRGFzaGJvYXJkKGNvbnRlbnQpIHtcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKGNvbnRlbnQpLnJlc3VsdC50aGVuKChyZXN1bHQ6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gXCJZZXNcIikge1xuICAgICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZGVsZXRlRGFzaGJvYXJkKHRoaXMuc2VsZWN0ZWRJbmRleCkuc3Vic2NyaWJlKChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gaW5kZXg7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbn1cbiJdfQ==