@huntsman-cancer-institute/dashboard 17.9.1 → 17.9.3
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: 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>
|
|
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: 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>
|
|
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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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==
|
|
590
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2Rhc2hib2FyZC9zcmMvZGFzaGJvYXJkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE9BQU8sRUFDTCxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFDdkYsV0FBVyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFL0UsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFPLFVBQVUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBRXBELE9BQU8sRUFBQyxTQUFTLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBQ2hGLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQzdFLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7Ozs7O0FBRTNFOzs7Ozs7R0FNRztBQWtUSCxNQUFNLE9BQU8sa0JBQWtCO0lBb0I3QixZQUFvQixpQkFBb0MsRUFDcEMsVUFBc0IsRUFDdEIsZ0JBQWtDLEVBQ2xDLHNCQUE4QyxFQUM5QyxjQUE4QixFQUM5QixZQUFzQjtRQUx0QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIscUJBQWdCLEdB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QUNULGdCQUFnQjtxQkFDakI7dU9BSXFCLFNBQVM7c0JBQTlCLFdBQVc7dUJBQUMsT0FBTztnQkFjMEMsZ0JBQWdCO3NCQUE3RSxZQUFZO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFFYixlQUFlO3NCQUE3RCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoYykgMjAxNiBIdW50c21hbiBDYW5jZXIgSW5zdGl0dXRlIGF0IHRoZSBVbml2ZXJzaXR5IG9mIFV0YWgsIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnlcclxuICovXHJcbmltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgaXNEZXZNb2RlLCBRdWVyeUxpc3QsIFZpZXdDaGlsZHJlbiwgVmlld0NoaWxkLFxyXG4gIEhvc3RCaW5kaW5nXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHthbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXJ9IGZyb20gXCJAYW5ndWxhci9hbmltYXRpb25zXCI7XHJcblxyXG5pbXBvcnQge0RyYWd1bGFTZXJ2aWNlfSBmcm9tIFwibmcyLWRyYWd1bGFcIjtcclxuaW1wb3J0IGRvbXRvaW1hZ2UgZnJvbSBcImRvbS10by1pbWFnZVwiO1xyXG5pbXBvcnQge05nYk1vZGFsfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuXHJcbmltcG9ydCB7RGFzaGJvYXJkLCBXaWRnZXRJbnN0YW5jZX0gZnJvbSBcIi4vbW9kZWwvbW9kZWxcIjtcclxuaW1wb3J0IHtEYXNoYm9hcmRTZXJ2aWNlfSBmcm9tIFwiLi9zZXJ2aWNlcy9kYXNoYm9hcmQuc2VydmljZVwiO1xyXG5pbXBvcnQge1dpZGdldENvbmZpZ3VyZUNvbXBvbmVudH0gZnJvbSBcIi4vY29uZmlndXJlL3dpZGdldC1jb25maWd1cmUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7V2lkZ2V0Q29udGFpbmVyQ29tcG9uZW50fSBmcm9tIFwiLi93aWRnZXQvd2lkZ2V0LWNvbnRhaW5lci5jb21wb25lbnRcIjtcclxuaW1wb3J0IHtEYXNoYm9hcmRHbG9iYWxTZXJ2aWNlfSBmcm9tIFwiLi9zZXJ2aWNlcy9kYXNoYm9hcmQtZ2xvYmFsLnNlcnZpY2VcIjtcclxuXHJcbi8qKlxyXG4gKiBEYXNoYm9hcmQgKHdpdGhpbiBhIGNhcmQtZ3JvdXApIGl0ZXJhdGVzIG92ZXIgY29uZmlndXJlZCB3aWRnZXRzIHRvIHByb2R1Y2UgZWFjaCBvbmUgaW4gYSBjYXJkLiAgVGhlIHdpZGdldHMgY2FuXHJcbiAqIGFsd2F5cyBnZXQgYWNjZXNzIHRvIGFueSBjb25maWd1cmF0aW9uIGhlbGQgYnkgdGhlIGRhc2hib2FyZCBzZXJ2aWNlLCBidXQgdGhleSBhcmUgaW50ZW5kZWQgdG8gYmUgbGFyZ2VseVxyXG4gKiBpbmRlcGVuZGVudC5cclxuICpcclxuICogQHNpbmNlIDEuMC4wXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJkYXNoYm9hcmRcIixcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPG5nLXRlbXBsYXRlICNjb25maXJtRGlhbG9nIGxldC1jPVwiY2xvc2VcIiBsZXQtZD1cImRpc21pc3NcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+RGVsZXRlPC9oNT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgPHA+QXJlIHlvdSBzdXJlPzwvcD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJjKCdZZXMnKVwiPlllczwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiAoY2xpY2spPVwiZCgnTm8nKVwiPk5vPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8d2lkZ2V0LWFkZCBbZGFzaGJvYXJkSW5kZXhdPVwic2VsZWN0ZWRJbmRleFwiPjwvd2lkZ2V0LWFkZD5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZWRpdC1tb2RlLWhlYWRlclwiXHJcbiAgICAgICAgIFtAb3BlbkVkaXRNb2RlSGVhZGVyXT1cImVkaXRNb2RlXCJcclxuICAgICAgICAgW0BvcGVuRWRpdE1vZGVIZWFkZXJEaXNwbGF5XT1cImVkaXRNb2RlXCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNwYWNlXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkV2lkZ2V0KClcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1wbHVzIGZhLTJ4XCI+PC9pPlxyXG4gICAgICAgIDxiciAvPlxyXG4gICAgICAgIDxzcGFuPldpZGdldDwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJjb25maWdNb2RlID09PSAndHJ1ZSdcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zcGFjZSByZWRcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVXaWRnZXQoKVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzIGZhLTJ4XCI+PC9pPlxyXG4gICAgICAgIDxiciAvPlxyXG4gICAgICAgIDxzcGFuPldpZGdldDwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNwYWNlXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkRGFzaGJvYXJkKClcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1wbHVzIGZhLTJ4XCI+PC9pPlxyXG4gICAgICAgIDxiciAvPlxyXG4gICAgICAgIDxzcGFuPkRhc2hib2FyZDwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNwYWNlIHJlZFwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJkYXNoYm9hcmRzLmxlbmd0aCA+IDFcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVEYXNoYm9hcmQoY29uZmlybURpYWxvZylcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lcyBmYS0yeFwiPjwvaT5cclxuICAgICAgICA8YnIgLz5cclxuICAgICAgICA8c3Bhbj5EYXNoYm9hcmQ8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zcGFjZSBncmVlblwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNldEVkaXRNb2RlKGZhbHNlKVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNoZWNrIGZhLTJ4XCI+PC9pPlxyXG4gICAgICAgIDxiciAvPlxyXG4gICAgICAgIDxzcGFuPkRvbmU8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm91dGxldC1yb3dcIj5cclxuXHJcbiAgICAgIDwhLS0gSXRlcmF0ZSBvdmVyIGFsbCBkYXNoYm9hcmRzLiAgU2hvdyBub24gc2VsZWN0ZWQgZGFzaGJvYXJkcyBvZmYgc2NyZWVuLiAtLT5cclxuICAgICAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1kYXNoYm9hcmQgW25nRm9yT2ZdPVwiZGFzaGJvYXJkc1wiIGxldC1kYXNoYm9hcmRJbmRleD1cImluZGV4XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiXHJcbiAgICAgICAgICAgICBbc3R5bGUubGVmdF09XCJzZWxlY3RlZEluZGV4ICE9PSBkYXNoYm9hcmRJbmRleCA/ICcxMDB2dycgOiAnaW5oZXJpdCdcIlxyXG4gICAgICAgICAgICAgW3N0eWxlLnBvc2l0aW9uXT1cInNlbGVjdGVkSW5kZXggIT09IGRhc2hib2FyZEluZGV4ID8gJ2ZpeGVkJyA6ICdpbmhlcml0J1wiXHJcbiAgICAgICAgICAgICBbQG9wZW5Db25maWdDb250ZW50XT1cImNvbmZpZ01vZGVcIj5cclxuICAgICAgICAgIDx3aWRnZXQtY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgW2Rhc2hib2FyZF09XCJkYXNoYm9hcmRcIlxyXG4gICAgICAgICAgICAgIFtkYXNoYm9hcmRJbmRleF09XCJkYXNoYm9hcmRJbmRleFwiPlxyXG4gICAgICAgICAgPC93aWRnZXQtY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgPGRpdiBbc3R5bGUuZGlzcGxheV09XCJjb25maWdNb2RlID09PSAndHJ1ZScgPyAnZmxleCcgOiAnbm9uZSdcIiBjbGFzcz1cInNpZGViYXItd2lkZ2V0LWNvbmZpZ1wiIFtAb3BlbkNvbmZpZ1NpZGViYXJdPVwiY29uZmlnTW9kZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJvdXRsZXQtY29sdW1uXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgaGVpZ2h0OiAxMDAlOyBwYWRkaW5nOiAycHg7XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtbm93cmFwXCI+XHJcbiAgICAgICAgICAgIDxkaXY+PGg0PlNldHRpbmdzPC9oND48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1yaWdodDogMHB4OyBtYXJnaW4tbGVmdDogYXV0bztcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiB2YXIoLS1wdXJlLWdyZWVuKTtcIiAoY2xpY2spPVwic2F2ZUNvbmZpZ3VyYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY2hlY2stY2lyY2xlIGZhLTJ4XCI+PC9pPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiB2YXIoLS1wdXJlLXJlZCk7XCIgKGNsaWNrKT1cImNhbmNlbENvbmZpZ3VyYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGltZXMtY2lyY2xlIGZhLTJ4XCI+PC9pPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDx3aWRnZXQtY29uZmlndXJlICN3aWRnZXRDb25maWd1cmU+PC93aWRnZXQtY29uZmlndXJlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXNoYm9hcmRzPy5sZW5ndGggPiAxXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkYXNoYm9hcmQtbmF2LXRyaWdnZXJcIj5cclxuICAgICAgICA8c3BhbiAobW91c2VlbnRlcik9XCJvcGVuRGFzaGJvYXJkTmF2U3RhdGUgPSAnb3BlbmVkJ1wiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGggZmEtMnhcIj48L2k+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkYXNoYm9hcmQtbmF2XCJcclxuICAgICAgICAgICBbQG9wZW5EYXNoYm9hcmROYXZdPVwib3BlbkRhc2hib2FyZE5hdlN0YXRlXCJcclxuICAgICAgICAgICBbc3R5bGUubGVmdF09XCInY2FsYyg1MHZ3IC0gJyArIGRhc2hib2FyZHM/Lmxlbmd0aCAqIDUwICsgJ3B4KSdcIlxyXG4gICAgICAgICAgIChtb3VzZWxlYXZlKT1cIm9wZW5EYXNoYm9hcmROYXZTdGF0ZSA9ICdjbG9zZWQnXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZGFzaGJvYXJkIG9mIGRhc2hib2FyZHM7IGluZGV4IGFzIGlcIj5cclxuICAgICAgICAgIDxkaXYgW2lkXT1cIidkYXNoLWltYWdlLScgKyBpXCJcclxuICAgICAgICAgICAgICAgY2xhc3M9XCJ3aWRnZXQtaW1hZ2VcIlxyXG4gICAgICAgICAgICAgICBbbmdDbGFzc109XCJpID09PSBzZWxlY3RlZEluZGV4ID8gJ3NlbGVjdGVkJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdERhc2hib2FyZChpKVwiPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlbHBNb2RlXCI+XHJcbiAgICAgIDxkaXYgaWQ9XCJoZWxwUGFyZW50XCI+XHJcbiAgICAgICAgPGRpdiBpZD1cImhlbHBDaGlsZFwiPlxyXG4gICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOiAxMDAlOyBkaXNwbGF5OiBpbmxpbmUtZmxleDtcIj5cclxuICAgICAgICAgICAgPGg0PkhlbHA8L2g0PlxyXG4gICAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1yaWdodDogMDsgbWFyZ2luLWxlZnQ6IGF1dG87IGNvbG9yOiB2YXIoLS1wdXJlLXJlZCk7XCIgKGNsaWNrKT1cInNldEhlbHBNb2RlKGZhbHNlKVwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzIGZhLWxnXCI+PC9pPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIFRoZSBkYXNoYm9hcmQgaXMgYSBjb2xsZWN0aW9uIG9mIHdpZGdldHMgdGhhdCB5b3UgY2FuIGN1c3RvbWl6ZSB0byB5b3VyIG93biBuZWVkcy4gIEluIHRoaXMgZWRpdCBtb2RlLCB5b3VcclxuICAgICAgICAgICAgY2FuIGRyYWcgYW5kIGRyb3Agd2lkZ2V0cyB0byBjaGFuZ2UgdGhlIG9yZGVyIGFuZCBkb3VibGUgY2xpY2sgYSB3aWRnZXQgdG8gY2hhbmdlIGl0cyBjb25maWd1cmF0aW9uLlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgYCxcclxuICBhbmltYXRpb25zOiBbXHJcbiAgICB0cmlnZ2VyKFwib3BlbkNvbmZpZ0NvbnRlbnRcIixcclxuICAgICAgW1xyXG4gICAgICAgIHN0YXRlKFwiZmFsc2VcIiwgc3R5bGUoe1xyXG4gICAgICAgICAgd2lkdGg6IFwiMTAwJVwiXHJcbiAgICAgICAgfSkpLFxyXG4gICAgICAgIHN0YXRlKFwidHJ1ZVwiLCBzdHlsZSh7XHJcbiAgICAgICAgICB3aWR0aDogXCI4MCVcIlxyXG4gICAgICAgIH0pKSxcclxuICAgICAgICB0cmFuc2l0aW9uKFwiZmFsc2UgPT4gdHJ1ZVwiLCBhbmltYXRlKDMwMCkpLFxyXG4gICAgICAgIHRyYW5zaXRpb24oXCJ0cnVlID0+IGZhbHNlXCIsIGFuaW1hdGUoMzAwKSlcclxuICAgICAgXVxyXG4gICAgKSxcclxuICAgIHRyaWdnZXIoXCJvcGVuQ29uZmlnU2lkZWJhclwiLFxyXG4gICAgICBbXHJcbiAgICAgICAgc3RhdGUoXCJmYWxzZVwiLCBzdHlsZSh7XHJcbiAgICAgICAgICBvcGFjaXR5OiBcIjBcIixcclxuICAgICAgICAgIHdpZHRoOiBcIjAlXCJcclxuICAgICAgICB9KSksXHJcbiAgICAgICAgc3RhdGUoXCJ0cnVlXCIsIHN0eWxlKHtcclxuICAgICAgICAgIG9wYWNpdHk6IFwiMVwiLFxyXG4gICAgICAgICAgd2lkdGg6IFwiMjAlXCJcclxuICAgICAgICB9KSksXHJcbiAgICAgICAgdHJhbnNpdGlvbihcImZhbHNlID0+IHRydWVcIiwgYW5pbWF0ZSgzMDApKSxcclxuICAgICAgICB0cmFuc2l0aW9uKFwidHJ1ZSA9PiBmYWxzZVwiLCBhbmltYXRlKDMwMCkpXHJcbiAgICAgIF1cclxuICAgICksXHJcbiAgICB0cmlnZ2VyKFwib3BlbkRhc2hib2FyZE5hdlwiLFxyXG4gICAgICBbXHJcbiAgICAgICAgc3RhdGUoXCJjbG9zZWRcIiwgc3R5bGUoe1xyXG4gICAgICAgICAgb3BhY2l0eTogXCIwXCIsXHJcbiAgICAgICAgICBib3R0b206IFwiLTE1MHB4XCJcclxuICAgICAgICB9KSksXHJcbiAgICAgICAgc3RhdGUoXCJvcGVuZWRcIiwgc3R5bGUoe1xyXG4gICAgICAgICAgb3BhY2l0eTogXCIxXCIsXHJcbiAgICAgICAgICBib3R0b206IFwiNDBweFwiXHJcbiAgICAgICAgfSkpLFxyXG4gICAgICAgIHRyYW5zaXRpb24oXCJjbG9zZWQgPT4gb3BlbmVkXCIsIGFuaW1hdGUoMjUwKSksXHJcbiAgICAgICAgdHJhbnNpdGlvbihcIm9wZW5lZCA9PiBjbG9zZWRcIiwgYW5pbWF0ZSgxMDApKVxyXG4gICAgICBdXHJcbiAgICApLFxyXG4gICAgLyp0cmlnZ2VyKFwib3BlbkVkaXRNb2RlSGVhZGVyQ29udGVudFwiLCBbXHJcbiAgICAgIHN0YXRlKFwiY2xvc2VkXCIsIHN0eWxlKHtcclxuICAgICAgICBcInBhZGRpbmctdG9wXCI6IFwiMHB4XCJcclxuICAgICAgfSkpLFxyXG4gICAgICBzdGF0ZShcIm9wZW5lZFwiLCBzdHlsZSh7XHJcbiAgICAgICAgXCJwYWRkaW5nLXRvcFwiOiBcIjkxcHhcIlxyXG4gICAgICB9KSksXHJcbiAgICAgIHRyYW5zaXRpb24oXCJjbG9zZWQgPT4gb3BlbmVkXCIsIGFuaW1hdGUoMzAwKSksXHJcbiAgICAgIHRyYW5zaXRpb24oXCJvcGVuZWQgPT4gY2xvc2VkXCIsIGFuaW1hdGUoMzAwKSlcclxuICAgIF0pLCovXHJcbiAgICB0cmlnZ2VyKFwib3BlbkVkaXRNb2RlSGVhZGVyXCIsIFtcclxuICAgICAgc3RhdGUoXCJjbG9zZWRcIiwgc3R5bGUoe1xyXG4gICAgICAgIFwib3BhY2l0eVwiOiBcIjBcIixcclxuICAgICAgICBcIm92ZXJmbG93LXlcIjogXCJoaWRkZW5cIlxyXG4gICAgICB9KSksXHJcbiAgICAgIHN0YXRlKFwib3BlbmVkXCIsIHN0eWxlKHtcclxuICAgICAgICBcIm9wYWNpdHlcIjogXCIxXCIsXHJcbiAgICAgICAgXCJvdmVyZmxvdy15XCI6IFwidmlzaWJsZVwiXHJcbiAgICAgIH0pKSxcclxuICAgICAgdHJhbnNpdGlvbihcImNsb3NlZCA9PiBvcGVuZWRcIiwgYW5pbWF0ZSgzMDApKSxcclxuICAgICAgdHJhbnNpdGlvbihcIm9wZW5lZCA9PiBjbG9zZWRcIiwgYW5pbWF0ZSgzMDApKVxyXG4gICAgXSksXHJcbiAgICB0cmlnZ2VyKFwib3BlbkVkaXRNb2RlSGVhZGVyRGlzcGxheVwiLCBbXHJcbiAgICAgIHN0YXRlKFwiY2xvc2VkXCIsIHN0eWxlKHtcclxuICAgICAgICBcImRpc3BsYXlcIjogXCJub25lXCJcclxuICAgICAgfSkpLFxyXG4gICAgICBzdGF0ZShcIm9wZW5lZFwiLCBzdHlsZSh7XHJcbiAgICAgICAgXCJkaXNwbGF5XCI6IFwiZmxleFwiXHJcbiAgICAgIH0pKSxcclxuICAgICAgdHJhbnNpdGlvbihcImNsb3NlZCA9PiBvcGVuZWRcIiwgYW5pbWF0ZSgxMDApKSxcclxuICAgICAgdHJhbnNpdGlvbihcIm9wZW5lZCA9PiBjbG9zZWRcIiwgYW5pbWF0ZShcIjEwMG1zIDEwMG1zXCIpKVxyXG4gICAgXSlcclxuICBdLFxyXG4gIHN0eWxlczogW2BcclxuXHJcbiAgICAjaGVscFBhcmVudCB7XHJcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgd2lkdGg6IDEwMHZ3O1xyXG4gICAgICBoZWlnaHQ6IDEwMHZoO1xyXG4gICAgICBsZWZ0OiAwO1xyXG4gICAgICB0b3A6IDA7XHJcbiAgICAgIHotaW5kZXg6IDk5OTtcclxuICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjI1KTtcclxuICAgIH1cclxuXHJcbiAgICAjaGVscENoaWxkIHtcclxuICAgICAgd2lkdGg6IDc1JTtcclxuICAgICAgaGVpZ2h0OiA3NSU7XHJcbiAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xyXG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XHJcbiAgICAgIG1hcmdpbi10b3A6IGF1dG87XHJcbiAgICAgIG1hcmdpbi1ib3R0b206IGF1dG87XHJcbiAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xyXG4gICAgICBib3JkZXItcmFkaXVzOiAyNXB4O1xyXG4gICAgICBib3gtc2hhZG93OiAycHggMnB4IGJsYWNrO1xyXG4gICAgICBwYWRkaW5nOiAyMHB4O1xyXG4gICAgfVxyXG5cclxuICAgIC5zaWRlYmFyLXdpZGdldC1jb25maWcge1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZkZGRkO1xyXG4gICAgICBib3JkZXItbGVmdDogZ3JheSAxcHggc29saWQ7XHJcbiAgICAgIHBhZGRpbmc6IDEwcHg7XHJcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDBweDtcclxuICAgICAgb3BhY2l0eTogMDtcclxuICAgICAgd2lkdGg6IDAlO1xyXG4gICAgfVxyXG5cclxuICAgIC5tb2RhbCB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNSk7XHJcbiAgICB9XHJcblxyXG4gICAgLmVkaXQtbW9kZS1oZWFkZXIge1xyXG4gICAgICBib3JkZXItYm90dG9tOiBibGFjayAxcHggZGFzaGVkO1xyXG4gICAgICBwYWRkaW5nLXRvcDogMTBweDtcclxuICAgICAgcGFkZGluZy1ib3R0b206IDEwcHg7XHJcbiAgICAgIHotaW5kZXg6IDEwO1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcclxuICAgIH1cclxuXHJcbiAgICAuZWRpdC1tb2RlLWhlYWRlciBidXR0b24ge1xyXG4gICAgICBwYWRkaW5nOiAuMnJlbSAuNXJlbTtcclxuICAgIH1cclxuXHJcbiAgICAuYnRuLXNwYWNlIHtcclxuICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7XHJcbiAgICB9XHJcblxyXG4gICAgLmJ0bi5ncmVlbiB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGdyZWVuO1xyXG4gICAgfVxyXG5cclxuICAgIC5idG4ucmVkIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkO1xyXG4gICAgfVxyXG5cclxuICAgIC5kYXNoYm9hcmQtbmF2LXRyaWdnZXIge1xyXG4gICAgICBib3R0b206IDQwcHg7XHJcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcclxuICAgICAgei1pbmRleDogMTAwO1xyXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgIHBhZGRpbmctdG9wOiAxNXB4O1xyXG4gICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcclxuICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDBkZWcsIHdoaXRlLCB3aGl0ZSwgdHJhbnNwYXJlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC5kYXNoYm9hcmQtbmF2IHtcclxuICAgICAgYm90dG9tOiAtMTUwcHg7XHJcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcclxuICAgICAgei1pbmRleDogMTAxO1xyXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xyXG4gICAgfVxyXG5cclxuICAgIC53aWRnZXQtaW1hZ2Uge1xyXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgIG1heC1oZWlnaHQ6IDEwMHB4O1xyXG4gICAgICBoZWlnaHQ6IDEwMHB4O1xyXG4gICAgICBtaW4taGVpZ2h0OiAxMDBweDtcclxuICAgICAgbWF4LXdpZHRoOiAxMDBweDtcclxuICAgICAgd2lkdGg6IDEwMHB4O1xyXG4gICAgICBtaW4td2lkdGg6IDEwMHB4O1xyXG4gICAgICBib3JkZXI6IGJsYWNrIDFweCBzb2xpZDtcclxuICAgICAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcclxuICAgICAgb3ZlcmZsb3cteTogaGlkZGVuO1xyXG4gICAgICBvdmVyZmxvdy14OiBoaWRkZW47XHJcbiAgICB9XHJcblxyXG4gICAgLndpZGdldC1pbWFnZS5zZWxlY3RlZCB7XHJcbiAgICAgIGJvcmRlcjogcmVkIDJweCBzb2xpZDtcclxuICAgIH1cclxuICBgXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIERhc2hib2FyZFNlcnZpY2VcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXNoYm9hcmRDb21wb25lbnQge1xyXG5cclxuICBASG9zdEJpbmRpbmcoXCJjbGFzc1wiKSBjbGFzc0xpc3Q6IHN0cmluZyA9IFwib3V0bGV0LWNvbHVtblwiO1xyXG5cclxuICBwdWJsaWMgb3BlbkRhc2hib2FyZE5hdlN0YXRlOiBzdHJpbmcgPSBcImNsb3NlZFwiO1xyXG5cclxuICBwdWJsaWMgaGVscE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgZWRpdE1vZGU6IHN0cmluZyA9IFwiY2xvc2VkXCI7XHJcbiAgcHVibGljIHNlbGVjdGVkSW5kZXggPSAwO1xyXG5cclxuICBwdWJsaWMgZGFzaGJvYXJkczogRGFzaGJvYXJkW10gPSBbXTtcclxuXHJcbiAgcHVibGljIHNob3dXaWRnZXRDb250YWluZXJOYXY6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uZmlnTW9kZTogc3RyaW5nID0gXCJmYWxzZVwiO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKFdpZGdldENvbnRhaW5lckNvbXBvbmVudCwgeyByZWFkOiBFbGVtZW50UmVmIH0pIHdpZGdldENvbnRhaW5lcnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcclxuXHJcbiAgQFZpZXdDaGlsZChcIndpZGdldENvbmZpZ3VyZVwiLCB7c3RhdGljOiBmYWxzZX0pIHdpZGdldENvbmZpZ3VyZTogV2lkZ2V0Q29uZmlndXJlQ29tcG9uZW50O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBkYXNoYm9hcmRTZXJ2aWNlOiBEYXNoYm9hcmRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgZGFzaGJvYXJkR2xvYmFsU2VydmljZTogRGFzaGJvYXJkR2xvYmFsU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIGRyYWd1bGFTZXJ2aWNlOiBEcmFndWxhU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwpIHtcclxuICAgIHRoaXMuZGFzaGJvYXJkcyA9IHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXREYXNoYm9hcmRzKCk7XHJcblxyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmRhc2hib2FyZHNTdGF0ZS5zdWJzY3JpYmUoKGRhc2hib2FyZHM6IERhc2hib2FyZFtdKSA9PiB7XHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkcyA9IGRhc2hib2FyZHM7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuY29uZmlndXJhdGlvbldpZGdldEluc3RhbmNlU3ViamVjdC5zdWJzY3JpYmUoKHdpZGdldEluc3RhbmNlOiBXaWRnZXRJbnN0YW5jZSkgPT4ge1xyXG4gICAgICBpZiAod2lkZ2V0SW5zdGFuY2UpIHtcclxuICAgICAgICB0aGlzLmNvbmZpZ01vZGUgPSBcInRydWVcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmNvbmZpZ01vZGUgPSBcImZhbHNlXCI7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRFZGl0TW9kZSgpLnN1YnNjcmliZSgoZWRpdE1vZGU6IGJvb2xlYW4pID0+IHtcclxuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgY29uc29sZS5pbmZvKFwiZ2V0RWRpdE1vZGUgXCIgKyBlZGl0TW9kZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChlZGl0TW9kZSkge1xyXG4gICAgICAgIHRoaXMuZWRpdE1vZGUgPSBcIm9wZW5lZFwiO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZWRpdE1vZGUgPSBcImNsb3NlZFwiO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvKmxldCBiYWcgPSB0aGlzLmRyYWd1bGFTZXJ2aWNlLmZpbmQoXCJhdHRyaWJ1dGUtY2hvaWNlc1wiKTtcclxuICAgIGlmIChiYWcgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmRyYWd1bGFTZXJ2aWNlLmRlc3Ryb3koXCJhdHRyaWJ1dGUtY2hvaWNlc1wiKTtcclxuICAgIH1cclxuICAgIHRoaXMuZHJhZ3VsYVNlcnZpY2UuY3JlYXRlR3JvdXAoXCJhdHRyaWJ1dGUtY2hvaWNlc1wiLCB7XHJcbiAgICAgIGRpcmVjdGlvbjogXCJ2ZXJ0aWNhbFwiLFxyXG4gICAgICBtb3ZlczogZnVuY3Rpb24gKGVsOiBhbnksIGNvbnRhaW5lcjogYW55LCBoYW5kbGU6IGFueSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZHJhZ3VsYVNlcnZpY2UuZmluZChcImF0dHJpYnV0ZS1jaG9pY2VzXCIpXHJcbiAgICAgIC5kcmFrZVxyXG4gICAgICAuY29udGFpbmVyc1xyXG4gICAgICAucHVzaCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiI2F0dHJpYnV0ZS1jaG9pY2VzXCIpKTtcclxuICAgIHRoaXMuZHJhZ3VsYVNlcnZpY2UuZHJvcChcIlwiKS5zdWJzY3JpYmUoKHZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgbGV0IG46IG51bWJlciA9IDE7XHJcblxyXG4gICAgICBmb3IgKGxldCBlbCBvZiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwid2lkZ2V0LWhvc3RcIikpIHtcclxuICAgICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2Uuc2F2ZVdpZGdldFNvcnRPcmRlcih0aGlzLnNlbGVjdGVkSW5kZXgsICtlbC5nZXRBdHRyaWJ1dGUoXCJpZFwiKSwgbisrKTtcclxuICAgICAgfVxyXG4gICAgfSk7Ki9cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXNoYm9hcmRHbG9iYWxTZXJ2aWNlLnNldEFjdGl2ZURhc2hib2FyZFNlcnZpY2UodGhpcy5kYXNoYm9hcmRTZXJ2aWNlKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMud2lkZ2V0Q29udGFpbmVycy5jaGFuZ2VzLnN1YnNjcmliZSgod2lkZ2V0Q29udGFpbmVyczogUXVlcnlMaXN0IDxFbGVtZW50UmVmPikgPT4ge1xyXG4gICAgICB0aGlzLnJlbmRlckRhc2hib2FyZE5hdkltYWdlcygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGFzaGJvYXJkR2xvYmFsU2VydmljZS5zZXRBY3RpdmVEYXNoYm9hcmRTZXJ2aWNlKCk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3REYXNoYm9hcmQoaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gaW5kZXg7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbmZvcm1zIGRhc2hib2FyZFNlcnZpY2Ugb2YgZWRpdE1vZGUgY2hhbmdlLiAgV2lkZ2V0IGhvc3RzIHdpbGwgbGlzdGVuIGZvciB0aGlzIGNoYW5nZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBlZGl0TW9kZVxyXG4gICAqL1xyXG4gIHNldEVkaXRNb2RlKGVkaXRNb2RlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2Uuc2V0RWRpdE1vZGUoZWRpdE1vZGUpO1xyXG4gIH1cclxuXHJcbiAgc2V0SGVscE1vZGUoaGVscE1vZGU6IGJvb2xlYW4pIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmluZm8oXCJzZXRIZWxwTW9kZSBcIiArIGhlbHBNb2RlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmhlbHBNb2RlID0gaGVscE1vZGU7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXNlIGRvbS10by1pbWFnZSB0byByZW5kZXIgZWFjaCB3aWRnZXRDb250YWluZXIgYXMgYW4gaW1hZ2UuICBBZGQgYW4gaW1hZ2UgZm9yIGVhY2ggd2lkZ2V0Q29udGFpbmVyXHJcbiAgICogdG8gdGhlIGRhc2hib2FyZE5hdiB2aWV3LlxyXG4gICAqL1xyXG4gIHJlbmRlckRhc2hib2FyZE5hdkltYWdlcygpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgIHRoaXMud2lkZ2V0Q29udGFpbmVycy5mb3JFYWNoKChlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgdmFyIGVsID0gc2VsZi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNkYXNoLWltYWdlLVwiICsgaW5kZXgpO1xyXG4gICAgICAgIGlmIChlbCkge1xyXG4gICAgICAgICAgZG9tdG9pbWFnZS50b1BuZyhlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpXHJcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChkYXRhVXJsKSB7XHJcbiAgICAgICAgICAgICAgdmFyIGltZyA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICAgICAgICAgIGltZy53aWR0aCA9IDEwMDtcclxuICAgICAgICAgICAgICBpbWcuc3JjID0gZGF0YVVybDtcclxuICAgICAgICAgICAgICBlbC5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgICAgICAgIGVsLmFwcGVuZENoaWxkKGltZyk7XHJcbiAgICAgICAgICAgICAgc2VsZi5zaG93V2lkZ2V0Q29udGFpbmVyTmF2ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJXaWRnZXQgSW1hZ2UgRXJyb3JcIiwgZXJyb3IpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSwgMjAwMCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZW5kcyB0cmlnZ2VyIHRvIGRhc2hib2FyZFNlcnZpY2UgdG8gb3BlbiB0aGUgd2lkZ2V0IGFkZCBjb21wb25lbnQuICBUaGF0IGNvbXBvbmVudCBsaXN0ZW5zIGZvclxyXG4gICAqIHRoaXMgdHJpZ2dlci5cclxuICAgKi9cclxuICBhZGRXaWRnZXQoKSB7XHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuYWRkV2lkZ2V0U3ViamVjdC5uZXh0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlV2lkZ2V0KCkge1xyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmRlbGV0ZVdpZGdldCh0aGlzLmRhc2hib2FyZFNlcnZpY2UuY29uZmlndXJhdGlvbldpZGdldEluc3RhbmNlU3ViamVjdC5nZXRWYWx1ZSgpKTtcclxuICB9XHJcblxyXG4gIGNhbmNlbENvbmZpZ3VyYXRpb24oKSB7XHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuY2FuY2VsQ29uZmlndXJhdGlvbldpZGdldCgpO1xyXG4gIH1cclxuXHJcbiAgc2F2ZUNvbmZpZ3VyYXRpb24oKSB7XHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2Uuc2F2ZUNvbmZpZ3VyYXRpb25XaWRnZXQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGxzIGRhc2hib2FyZFNlcnZpY2UgdG8gYWRkIGEgZGFzaGJvYXJkLiAgQWRkIGRhc2hib2FyZCB3aWxsIHVwZGF0ZSBkYXNoYm9hcmRzIHRocm91Z2ggc3Vic2NyaWJlIGFuZFxyXG4gICAqIHRoaXMgd2FpdHMgZm9yIGNvbXBsZXRpb24gb2YgdGhlIHByb2Nlc3Mgd2hpY2ggcmV0dXJucyB0aGUgbmV3IHNlbGVjdGVkSW5kZXggKHdoaWNoIGlzIHRoZSBsYXN0IGRhc2hib2FyZCkuXHJcbiAgICovXHJcbiAgYWRkRGFzaGJvYXJkKCkge1xyXG4gICAgbGV0IGRhc2hib2FyZDogRGFzaGJvYXJkID0gbmV3IERhc2hib2FyZCgpO1xyXG4gICAgZGFzaGJvYXJkLm5hbWUgPSBcIlRlbXBcIjtcclxuICAgIGRhc2hib2FyZC5zb3J0T3JkZXIgPSB0aGlzLmRhc2hib2FyZHMubGVuZ3RoO1xyXG4gICAgZGFzaGJvYXJkLndpZGdldEluc3RhbmNlcyA9IFtdO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmFkZERhc2hib2FyZChkYXNoYm9hcmQpLnN1YnNjcmliZSgoaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBpbmRleDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbHMgZGFzaGJvYXJkU2VydmljZSB0byBkZWxldGUgZGFzaGJvYXJkLiAgRGVsZXRlIGRhc2hib2FyZCB3aWxsIHVwZGF0ZSBkYXNoYm9hcmRzIHRocm91Z2ggc3Vic2NyaWJlIGFuZFxyXG4gICAqIHRoaXMgd2FpdHMgZm9yIGNvbXBsZXRpb24gb2YgdGhlIHByb2Nlc3Mgd2hpY2ggcmV0dXJucyB0aGUgbmV3IHNlbGVjdGVkSW5kZXguXHJcbiAgICpcclxuICAgKiBAcGFyYW0gY29udGVudFxyXG4gICAqL1xyXG4gIGRlbGV0ZURhc2hib2FyZChjb250ZW50KSB7XHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKGNvbnRlbnQpLnJlc3VsdC50aGVuKChyZXN1bHQ6IHN0cmluZykgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0ID09PSBcIlllc1wiKSB7XHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmRlbGV0ZURhc2hib2FyZCh0aGlzLnNlbGVjdGVkSW5kZXgpLnN1YnNjcmliZSgoaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
|