@ngneat/helipopper 6.6.0 → 7.0.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.
- package/README.md +46 -42
- package/esm2020/lib/tippy.directive.mjs +67 -39
- package/fesm2015/ngneat-helipopper.mjs +66 -38
- package/fesm2015/ngneat-helipopper.mjs.map +1 -1
- package/fesm2020/ngneat-helipopper.mjs +66 -38
- package/fesm2020/ngneat-helipopper.mjs.map +1 -1
- package/lib/tippy.directive.d.ts +4 -5
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -73,7 +73,7 @@ You have the freedom to [customize](https://atomiks.github.io/tippyjs/v6/themes/
|
|
|
73
73
|
Import the standalone `TippyDirective` and use it in your templates:
|
|
74
74
|
|
|
75
75
|
```html
|
|
76
|
-
<button
|
|
76
|
+
<button tp="Helpful Message">
|
|
77
77
|
I have a tooltip
|
|
78
78
|
</button>
|
|
79
79
|
```
|
|
@@ -95,7 +95,7 @@ export const tooltipVariation = {
|
|
|
95
95
|
### Use `TemplateRef` as content
|
|
96
96
|
|
|
97
97
|
```html
|
|
98
|
-
<button [
|
|
98
|
+
<button [tp]="tpl" tpVariation="popper">
|
|
99
99
|
Click Me
|
|
100
100
|
</button>
|
|
101
101
|
|
|
@@ -117,7 +117,7 @@ class MyComponent {
|
|
|
117
117
|
```
|
|
118
118
|
|
|
119
119
|
```html
|
|
120
|
-
<button [
|
|
120
|
+
<button [tp]="MyComponent">
|
|
121
121
|
Click Me
|
|
122
122
|
</button>
|
|
123
123
|
```
|
|
@@ -128,7 +128,7 @@ You can pass the `onlyTextOverflow` input to show the tooltip only when the host
|
|
|
128
128
|
|
|
129
129
|
```html
|
|
130
130
|
<div style="max-width: 100px;" class="overflow-hidden flex">
|
|
131
|
-
<p class="ellipsis" [
|
|
131
|
+
<p class="ellipsis" [tp]="text" tpPlacement="right" [tpOnlyTextOverflow]="true">
|
|
132
132
|
{{ text }}
|
|
133
133
|
</p>
|
|
134
134
|
</div>
|
|
@@ -141,7 +141,7 @@ Note that it's using [`ResizeObserver`](https://caniuse.com/resizeobserver) api.
|
|
|
141
141
|
You can instruct tippy to use the element textContent as the tooltip content:
|
|
142
142
|
|
|
143
143
|
```html
|
|
144
|
-
<p
|
|
144
|
+
<p tp tpUseTextContent>
|
|
145
145
|
{{ text }}
|
|
146
146
|
</p>
|
|
147
147
|
```
|
|
@@ -149,12 +149,12 @@ You can instruct tippy to use the element textContent as the tooltip content:
|
|
|
149
149
|
|
|
150
150
|
### Lazy
|
|
151
151
|
|
|
152
|
-
You can pass the `
|
|
152
|
+
You can pass the `tpIsLazy` input when you want to defer the creation of tippy only when the element is in the view:
|
|
153
153
|
|
|
154
154
|
```html
|
|
155
155
|
<div *ngFor="let item of items"
|
|
156
|
-
[
|
|
157
|
-
[
|
|
156
|
+
[tp]="item.label"
|
|
157
|
+
[tpIsLazy]="true">{{ item.label }}
|
|
158
158
|
</div>
|
|
159
159
|
```
|
|
160
160
|
|
|
@@ -196,9 +196,9 @@ Now you can use it in your template:
|
|
|
196
196
|
|
|
197
197
|
<ul>
|
|
198
198
|
<li *ngFor="let item of list"
|
|
199
|
-
[
|
|
200
|
-
[
|
|
201
|
-
|
|
199
|
+
[tp]="contextMenu"
|
|
200
|
+
[tpData]="item"
|
|
201
|
+
tpVariation="contextMenu">
|
|
202
202
|
{{ item.label }}
|
|
203
203
|
</li>
|
|
204
204
|
</ul>
|
|
@@ -207,7 +207,7 @@ Now you can use it in your template:
|
|
|
207
207
|
### Manual Trigger
|
|
208
208
|
|
|
209
209
|
```html
|
|
210
|
-
<div
|
|
210
|
+
<div tp="Helpful Message" tpTrigger="manual" #tooltip="tippy">
|
|
211
211
|
Click Open to see me
|
|
212
212
|
</div>
|
|
213
213
|
|
|
@@ -215,12 +215,12 @@ Now you can use it in your template:
|
|
|
215
215
|
<button (click)="tooltip.hide()">Close</button>
|
|
216
216
|
```
|
|
217
217
|
|
|
218
|
-
###
|
|
218
|
+
### Declarative show/hide
|
|
219
219
|
|
|
220
220
|
Use isVisible to trigger show and hide. Set trigger to manual.
|
|
221
221
|
|
|
222
222
|
```html
|
|
223
|
-
<div
|
|
223
|
+
<div tp="Helpful Message" tpTrigger="manual" [tpIsVisible]="visibility">
|
|
224
224
|
Click Open to see me
|
|
225
225
|
</div>
|
|
226
226
|
|
|
@@ -235,38 +235,42 @@ live [here](https://ngneat.github.io/helipopper/).
|
|
|
235
235
|
### Inputs
|
|
236
236
|
|
|
237
237
|
```ts
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
238
|
+
tp: string | TemplateRef<any> | Type<any> | undefined | null;
|
|
239
|
+
tpAppendTo: TippyProps['appendTo'];
|
|
240
|
+
tpDelay: TippyProps['delay'];
|
|
241
|
+
tpDuration: TippyProps['duration'];
|
|
242
|
+
tpHideOnClick: TippyProps['hideOnClick'];
|
|
243
|
+
tpInteractive: TippyProps['interactive'];
|
|
244
|
+
tpInteractiveBorder: TippyProps['interactiveBorder'];
|
|
245
|
+
tpMaxWidth: TippyProps['maxWidth'];
|
|
246
|
+
tpOffset: TippyProps['offset'];
|
|
247
|
+
tpPlacement: TippyProps['placement'];
|
|
248
|
+
tpPopperOptions: TippyProps['popperOptions'];
|
|
249
|
+
tpShowOnCreate: TippyProps['showOnCreate'];
|
|
250
|
+
tpTrigger: TippyProps['trigger'];
|
|
251
|
+
tpTriggerTarget: TippyProps['triggerTarget'];
|
|
252
|
+
tpZIndex: TippyProps['zIndex'];
|
|
253
|
+
tpAnimation: TippyProps['animation'];
|
|
254
|
+
tpUseTextContent: boolean;
|
|
255
|
+
tpIsLazy: boolean;
|
|
256
|
+
tpVariation: string;
|
|
257
|
+
tpIsEnabled: boolean;
|
|
258
|
+
tpIsVisible: boolean;
|
|
259
|
+
tpClassName: string;
|
|
260
|
+
tpOnlyTextOverflow: boolean;
|
|
261
|
+
tpData: any;
|
|
262
|
+
tpUseHostWidth: boolean;
|
|
263
|
+
tpHideOnEscape: boolean;
|
|
264
|
+
tpDetectChangesComponent: boolean;
|
|
265
|
+
tpPopperWidth: number | string;
|
|
266
|
+
tpHost: HTMLElement;
|
|
267
|
+
tpIsVisible: boolean;
|
|
264
268
|
```
|
|
265
269
|
|
|
266
270
|
### Outputs
|
|
267
271
|
|
|
268
272
|
```ts
|
|
269
|
-
|
|
273
|
+
tpVisible = new EventEmitter<boolean>();
|
|
270
274
|
```
|
|
271
275
|
|
|
272
276
|
### Global Config
|
|
@@ -280,8 +284,8 @@ import { TippyService, TippyInstance } from '@ngneat/helipopper';
|
|
|
280
284
|
|
|
281
285
|
class Component {
|
|
282
286
|
@ViewChild('inputName') inputName: ElementRef;
|
|
287
|
+
tippy: TippyInstance;
|
|
283
288
|
private tippyService = inject(TippyService);
|
|
284
|
-
tippy:TippyInstance;
|
|
285
289
|
|
|
286
290
|
show() {
|
|
287
291
|
if(!this.tippy) {
|
|
@@ -21,8 +21,8 @@ export class TippyDirective {
|
|
|
21
21
|
this.useHostWidth = false;
|
|
22
22
|
this.hideOnEscape = false;
|
|
23
23
|
this.detectChangesComponent = true;
|
|
24
|
-
this.visible = new EventEmitter();
|
|
25
24
|
this.isVisible = false;
|
|
25
|
+
this.visible = new EventEmitter();
|
|
26
26
|
this.destroyed = new Subject();
|
|
27
27
|
this.enabled = true;
|
|
28
28
|
this.variationDefined = false;
|
|
@@ -77,7 +77,7 @@ export class TippyDirective {
|
|
|
77
77
|
if (isPlatformServer(this.platformId))
|
|
78
78
|
return;
|
|
79
79
|
this.zone.runOutsideAngular(() => {
|
|
80
|
-
if (this.
|
|
80
|
+
if (this.isLazy) {
|
|
81
81
|
if (this.onlyTextOverflow) {
|
|
82
82
|
inView(this.host)
|
|
83
83
|
.pipe(switchMap(() => overflowChanges(this.host)), takeUntil(this.destroyed))
|
|
@@ -308,12 +308,12 @@ export class TippyDirective {
|
|
|
308
308
|
}
|
|
309
309
|
}
|
|
310
310
|
TippyDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.1", ngImport: i0, type: TippyDirective, deps: [{ token: PLATFORM_ID }, { token: TIPPY_CONFIG }, { token: i0.Injector }, { token: i1.ViewService }, { token: i0.ViewContainerRef }, { token: i0.NgZone }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
311
|
-
TippyDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.1", type: TippyDirective, isStandalone: true, selector: "[
|
|
311
|
+
TippyDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.1", type: TippyDirective, isStandalone: true, selector: "[tp]", inputs: { content: ["tp", "content"], appendTo: ["tpAppendTo", "appendTo"], delay: ["tpDelay", "delay"], duration: ["tpDuration", "duration"], hideOnClick: ["tpHideOnClick", "hideOnClick"], interactive: ["tpInteractive", "interactive"], interactiveBorder: ["tpInteractiveBorder", "interactiveBorder"], maxWidth: ["tpMaxWidth", "maxWidth"], offset: ["tpOffset", "offset"], placement: ["tpPlacement", "placement"], popperOptions: ["tpPopperOptions", "popperOptions"], showOnCreate: ["tpShowOnCreate", "showOnCreate"], trigger: ["tpTrigger", "trigger"], triggerTarget: ["tpTriggerTarget", "triggerTarget"], zIndex: ["tpZIndex", "zIndex"], animation: ["tpAnimation", "animation"], useTextContent: ["tpUseTextContent", "useTextContent"], isLazy: ["tpIsLazy", "isLazy"], variation: ["tpVariation", "variation"], isEnabled: ["tpIsEnabled", "isEnabled"], className: ["tpClassName", "className"], onlyTextOverflow: ["tpOnlyTextOverflow", "onlyTextOverflow"], data: ["tpData", "data"], useHostWidth: ["tpUseHostWidth", "useHostWidth"], hideOnEscape: ["tpHideOnEscape", "hideOnEscape"], detectChangesComponent: ["tpDetectChangesComponent", "detectChangesComponent"], popperWidth: ["tpPopperWidth", "popperWidth"], customHost: ["tpHost", "customHost"], isVisible: ["tpIsVisible", "isVisible"] }, outputs: { visible: "tpVisible" }, exportAs: ["tippy"], usesOnChanges: true, ngImport: i0 });
|
|
312
312
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.1", ngImport: i0, type: TippyDirective, decorators: [{
|
|
313
313
|
type: Directive,
|
|
314
314
|
args: [{
|
|
315
315
|
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
316
|
-
selector: '[
|
|
316
|
+
selector: '[tp]',
|
|
317
317
|
exportAs: 'tippy',
|
|
318
318
|
standalone: true
|
|
319
319
|
}]
|
|
@@ -323,68 +323,96 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.1", ngImpor
|
|
|
323
323
|
}] }, { type: undefined, decorators: [{
|
|
324
324
|
type: Inject,
|
|
325
325
|
args: [TIPPY_CONFIG]
|
|
326
|
-
}] }, { type: i0.Injector }, { type: i1.ViewService }, { type: i0.ViewContainerRef }, { type: i0.NgZone }, { type: i0.ElementRef }]; }, propDecorators: {
|
|
327
|
-
type: Input
|
|
326
|
+
}] }, { type: i0.Injector }, { type: i1.ViewService }, { type: i0.ViewContainerRef }, { type: i0.NgZone }, { type: i0.ElementRef }]; }, propDecorators: { content: [{
|
|
327
|
+
type: Input,
|
|
328
|
+
args: ['tp']
|
|
329
|
+
}], appendTo: [{
|
|
330
|
+
type: Input,
|
|
331
|
+
args: ['tpAppendTo']
|
|
328
332
|
}], delay: [{
|
|
329
|
-
type: Input
|
|
333
|
+
type: Input,
|
|
334
|
+
args: ['tpDelay']
|
|
330
335
|
}], duration: [{
|
|
331
|
-
type: Input
|
|
336
|
+
type: Input,
|
|
337
|
+
args: ['tpDuration']
|
|
332
338
|
}], hideOnClick: [{
|
|
333
|
-
type: Input
|
|
339
|
+
type: Input,
|
|
340
|
+
args: ['tpHideOnClick']
|
|
334
341
|
}], interactive: [{
|
|
335
|
-
type: Input
|
|
342
|
+
type: Input,
|
|
343
|
+
args: ['tpInteractive']
|
|
336
344
|
}], interactiveBorder: [{
|
|
337
|
-
type: Input
|
|
345
|
+
type: Input,
|
|
346
|
+
args: ['tpInteractiveBorder']
|
|
338
347
|
}], maxWidth: [{
|
|
339
|
-
type: Input
|
|
348
|
+
type: Input,
|
|
349
|
+
args: ['tpMaxWidth']
|
|
340
350
|
}], offset: [{
|
|
341
|
-
type: Input
|
|
351
|
+
type: Input,
|
|
352
|
+
args: ['tpOffset']
|
|
342
353
|
}], placement: [{
|
|
343
|
-
type: Input
|
|
354
|
+
type: Input,
|
|
355
|
+
args: ['tpPlacement']
|
|
344
356
|
}], popperOptions: [{
|
|
345
|
-
type: Input
|
|
357
|
+
type: Input,
|
|
358
|
+
args: ['tpPopperOptions']
|
|
346
359
|
}], showOnCreate: [{
|
|
347
|
-
type: Input
|
|
360
|
+
type: Input,
|
|
361
|
+
args: ['tpShowOnCreate']
|
|
348
362
|
}], trigger: [{
|
|
349
|
-
type: Input
|
|
363
|
+
type: Input,
|
|
364
|
+
args: ['tpTrigger']
|
|
350
365
|
}], triggerTarget: [{
|
|
351
|
-
type: Input
|
|
366
|
+
type: Input,
|
|
367
|
+
args: ['tpTriggerTarget']
|
|
352
368
|
}], zIndex: [{
|
|
353
|
-
type: Input
|
|
369
|
+
type: Input,
|
|
370
|
+
args: ['tpZIndex']
|
|
354
371
|
}], animation: [{
|
|
355
|
-
type: Input
|
|
372
|
+
type: Input,
|
|
373
|
+
args: ['tpAnimation']
|
|
356
374
|
}], useTextContent: [{
|
|
357
|
-
type: Input
|
|
358
|
-
|
|
359
|
-
|
|
375
|
+
type: Input,
|
|
376
|
+
args: ['tpUseTextContent']
|
|
377
|
+
}], isLazy: [{
|
|
378
|
+
type: Input,
|
|
379
|
+
args: ['tpIsLazy']
|
|
360
380
|
}], variation: [{
|
|
361
|
-
type: Input
|
|
381
|
+
type: Input,
|
|
382
|
+
args: ['tpVariation']
|
|
362
383
|
}], isEnabled: [{
|
|
363
|
-
type: Input
|
|
384
|
+
type: Input,
|
|
385
|
+
args: ['tpIsEnabled']
|
|
364
386
|
}], className: [{
|
|
365
|
-
type: Input
|
|
387
|
+
type: Input,
|
|
388
|
+
args: ['tpClassName']
|
|
366
389
|
}], onlyTextOverflow: [{
|
|
367
|
-
type: Input
|
|
390
|
+
type: Input,
|
|
391
|
+
args: ['tpOnlyTextOverflow']
|
|
368
392
|
}], data: [{
|
|
369
|
-
type: Input
|
|
393
|
+
type: Input,
|
|
394
|
+
args: ['tpData']
|
|
370
395
|
}], useHostWidth: [{
|
|
371
|
-
type: Input
|
|
396
|
+
type: Input,
|
|
397
|
+
args: ['tpUseHostWidth']
|
|
372
398
|
}], hideOnEscape: [{
|
|
373
|
-
type: Input
|
|
399
|
+
type: Input,
|
|
400
|
+
args: ['tpHideOnEscape']
|
|
374
401
|
}], detectChangesComponent: [{
|
|
375
|
-
type: Input
|
|
402
|
+
type: Input,
|
|
403
|
+
args: ['tpDetectChangesComponent']
|
|
376
404
|
}], popperWidth: [{
|
|
377
|
-
type: Input
|
|
378
|
-
}], content: [{
|
|
379
405
|
type: Input,
|
|
380
|
-
args: ['
|
|
406
|
+
args: ['tpPopperWidth']
|
|
381
407
|
}], customHost: [{
|
|
382
408
|
type: Input,
|
|
383
|
-
args: ['
|
|
384
|
-
}], visible: [{
|
|
385
|
-
type: Output
|
|
409
|
+
args: ['tpHost']
|
|
386
410
|
}], isVisible: [{
|
|
387
|
-
type: Input
|
|
411
|
+
type: Input,
|
|
412
|
+
args: ['tpIsVisible']
|
|
413
|
+
}], visible: [{
|
|
414
|
+
type: Output,
|
|
415
|
+
args: ['tpVisible']
|
|
388
416
|
}] } });
|
|
389
417
|
function isChanged(key, changes) {
|
|
390
418
|
return key in changes;
|
|
@@ -392,4 +420,4 @@ function isChanged(key, changes) {
|
|
|
392
420
|
export function coerceBooleanInput(value) {
|
|
393
421
|
return value != null && `${value}` !== 'false';
|
|
394
422
|
}
|
|
395
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlwcHkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmduZWF0L2hlbGlwb3BwZXIvc3JjL2xpYi90aXBweS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBS0wsTUFBTSxFQUNOLFdBQVcsRUFFWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEtBQW1CLE1BQU0sVUFBVSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQVcsV0FBVyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQXFDLE1BQU0sa0JBQWtCLENBQUM7QUFFcEgsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsTUFBTSxFQUNOLGtCQUFrQixFQUNsQixjQUFjLEVBQ2QsZUFBZSxFQUNoQixNQUFNLFNBQVMsQ0FBQztBQUNqQixPQUFPLEVBQWEsWUFBWSxFQUFFLFNBQVMsRUFBMEMsTUFBTSxlQUFlLENBQUM7OztBQVEzRyxNQUFNLE9BQU8sY0FBYztJQXNEekIsWUFDaUMsVUFBa0IsRUFDakIsWUFBeUIsRUFDL0MsUUFBa0IsRUFDbEIsV0FBd0IsRUFDeEIsR0FBcUIsRUFDckIsSUFBWSxFQUNaLE9BQW1CO1FBTkUsZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQUNqQixpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUMvQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FB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QkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFFVSxPQUFPO3NCQUF0QixLQUFLO3VCQUFDLE9BQU87Z0JBQ00sVUFBVTtzQkFBN0IsS0FBSzt1QkFBQyxXQUFXO2dCQUVSLE9BQU87c0JBQWhCLE1BQU07Z0JBQ1MsU0FBUztzQkFBeEIsS0FBSzs7QUFtVlIsU0FBUyxTQUFTLENBQW1CLEdBQVksRUFBRSxPQUFVO0lBQzNELE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQztBQUN4QixDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEtBQVU7SUFDM0MsT0FBTyxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsS0FBSyxFQUFFLEtBQUssT0FBTyxDQUFDO0FBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBQTEFURk9STV9JRCxcbiAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzUGxhdGZvcm1TZXJ2ZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHRpcHB5LCB7IEluc3RhbmNlIH0gZnJvbSAndGlwcHkuanMnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBtZXJnZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbnRlbnQsIGlzQ29tcG9uZW50LCBpc1N0cmluZywgaXNUZW1wbGF0ZVJlZiwgVmlld09wdGlvbnMsIFZpZXdSZWYsIFZpZXdTZXJ2aWNlIH0gZnJvbSAnQG5nbmVhdC9vdmVydmlldyc7XG5cbmltcG9ydCB7XG4gIGNvZXJjZUNzc1BpeGVsVmFsdWUsXG4gIGRpbWVuc2lvbnNDaGFuZ2VzLFxuICBpblZpZXcsXG4gIG5vcm1hbGl6ZUNsYXNzTmFtZSxcbiAgb25seVRpcHB5UHJvcHMsXG4gIG92ZXJmbG93Q2hhbmdlc1xufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IE5nQ2hhbmdlcywgVElQUFlfQ09ORklHLCBUSVBQWV9SRUYsIFRpcHB5Q29uZmlnLCBUaXBweUluc3RhbmNlLCBUaXBweVByb3BzIH0gZnJvbSAnLi90aXBweS50eXBlcyc7XG5cbkBEaXJlY3RpdmUoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1zZWxlY3RvclxuICBzZWxlY3RvcjogJ1t0aXBweV0nLFxuICBleHBvcnRBczogJ3RpcHB5JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBUaXBweURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBPbkluaXQge1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfdXNlVGV4dENvbnRlbnQ6IGJvb2xlYW4gfCAnJztcblxuICBASW5wdXQoKSBhcHBlbmRUbzogVGlwcHlQcm9wc1snYXBwZW5kVG8nXTtcbiAgQElucHV0KCkgZGVsYXk6IFRpcHB5UHJvcHNbJ2RlbGF5J107XG4gIEBJbnB1dCgpIGR1cmF0aW9uOiBUaXBweVByb3BzWydkdXJhdGlvbiddO1xuICBASW5wdXQoKSBoaWRlT25DbGljazogVGlwcHlQcm9wc1snaGlkZU9uQ2xpY2snXTtcbiAgQElucHV0KCkgaW50ZXJhY3RpdmU6IFRpcHB5UHJvcHNbJ2ludGVyYWN0aXZlJ107XG4gIEBJbnB1dCgpIGludGVyYWN0aXZlQm9yZGVyOiBUaXBweVByb3BzWydpbnRlcmFjdGl2ZUJvcmRlciddO1xuICBASW5wdXQoKSBtYXhXaWR0aDogVGlwcHlQcm9wc1snbWF4V2lkdGgnXTtcbiAgQElucHV0KCkgb2Zmc2V0OiBUaXBweVByb3BzWydvZmZzZXQnXTtcbiAgQElucHV0KCkgcGxhY2VtZW50OiBUaXBweVByb3BzWydwbGFjZW1lbnQnXTtcbiAgQElucHV0KCkgcG9wcGVyT3B0aW9uczogVGlwcHlQcm9wc1sncG9wcGVyT3B0aW9ucyddO1xuICBASW5wdXQoKSBzaG93T25DcmVhdGU6IFRpcHB5UHJvcHNbJ3Nob3dPbkNyZWF0ZSddO1xuICBASW5wdXQoKSB0cmlnZ2VyOiBUaXBweVByb3BzWyd0cmlnZ2VyJ107XG4gIEBJbnB1dCgpIHRyaWdnZXJUYXJnZXQ6IFRpcHB5UHJvcHNbJ3RyaWdnZXJUYXJnZXQnXTtcbiAgQElucHV0KCkgekluZGV4OiBUaXBweVByb3BzWyd6SW5kZXgnXTtcbiAgQElucHV0KCkgYW5pbWF0aW9uOiBUaXBweVByb3BzWydhbmltYXRpb24nXTtcblxuICBASW5wdXQoKSB1c2VUZXh0Q29udGVudDogYm9vbGVhbjtcbiAgQElucHV0KCkgbGF6eTogYm9vbGVhbjtcbiAgQElucHV0KCkgdmFyaWF0aW9uOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlzRW5hYmxlZDogYm9vbGVhbjtcbiAgQElucHV0KCkgY2xhc3NOYW1lOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgQElucHV0KCkgb25seVRleHRPdmVyZmxvdyA9IGZhbHNlO1xuICBASW5wdXQoKSBkYXRhOiBhbnk7XG4gIEBJbnB1dCgpIHVzZUhvc3RXaWR0aCA9IGZhbHNlO1xuICBASW5wdXQoKSBoaWRlT25Fc2NhcGUgPSBmYWxzZTtcbiAgQElucHV0KCkgZGV0ZWN0Q2hhbmdlc0NvbXBvbmVudCA9IHRydWU7XG4gIEBJbnB1dCgpIHBvcHBlcldpZHRoOiBudW1iZXIgfCBzdHJpbmc7XG5cbiAgQElucHV0KCd0aXBweScpIGNvbnRlbnQ6IENvbnRlbnQgfCB1bmRlZmluZWQgfCBudWxsO1xuICBASW5wdXQoJ3RpcHB5SG9zdCcpIGN1c3RvbUhvc3Q6IEhUTUxFbGVtZW50O1xuXG4gIEBPdXRwdXQoKSB2aXNpYmxlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBASW5wdXQoKSBwdWJsaWMgaXNWaXNpYmxlID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIGluc3RhbmNlOiBUaXBweUluc3RhbmNlO1xuICBwcm90ZWN0ZWQgdmlld1JlZjogVmlld1JlZjtcbiAgcHJvdGVjdGVkIGRlc3Ryb3llZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByb3RlY3RlZCBwcm9wczogUGFydGlhbDxUaXBweUNvbmZpZz47XG4gIHByb3RlY3RlZCBlbmFibGVkID0gdHJ1ZTtcbiAgcHJvdGVjdGVkIHZhcmlhdGlvbkRlZmluZWQgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIHZpZXdPcHRpb25zJDogVmlld09wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFdlIGhhZCB1c2UgYHZpc2libGVgIGV2ZW50IGVtaXR0ZXIgcHJldmlvdXNseSBhcyBhIGB0YWtlVW50aWxgIHN1YnNjcmliZXIgaW4gbXVsdGlwbGUgcGxhY2VzXG4gICAqIHdpdGhpbiB0aGUgZGlyZWN0aXZlLlxuICAgKiBUaGlzIGlzIGZvciBpbnRlcm5hbCB1c2Ugb25seTsgdGh1cyB3ZSBkb24ndCBoYXZlIHRvIGRlYWwgd2l0aCB0aGUgYHZpc2libGVgIGV2ZW50IGVtaXR0ZXJcbiAgICogYW5kIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbnMgb25seSB3aGVuIHRoZSBgdmlzaWJsZWAgZXZlbnQgaXMgYmVpbmcgbGlzdGVuZWQgb3V0c2lkZVxuICAgKiBpbiB0aGUgdGVtcGxhdGUgKGA8YnV0dG9uIFt0aXBweV09XCIuLi5cIiAodmlzaWJsZSk9XCIuLi5cIj48L2J1dHRvbj5gKS5cbiAgICovXG4gIHByb3RlY3RlZCB2aXNpYmxlSW50ZXJuYWwgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByb3RlY3RlZCBwbGF0Zm9ybUlkOiBzdHJpbmcsXG4gICAgQEluamVjdChUSVBQWV9DT05GSUcpIHByb3RlY3RlZCBnbG9iYWxDb25maWc6IFRpcHB5Q29uZmlnLFxuICAgIHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJvdGVjdGVkIHZpZXdTZXJ2aWNlOiBWaWV3U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgdmNyOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByb3RlY3RlZCB6b25lOiBOZ1pvbmUsXG4gICAgcHJvdGVjdGVkIGhvc3RSZWY6IEVsZW1lbnRSZWZcbiAgKSB7fVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IE5nQ2hhbmdlczxUaXBweURpcmVjdGl2ZT4pIHtcbiAgICBpZiAoaXNQbGF0Zm9ybVNlcnZlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XG5cbiAgICBsZXQgcHJvcHM6IFBhcnRpYWw8VGlwcHlDb25maWc+ID0gT2JqZWN0LmtleXMoY2hhbmdlcykucmVkdWNlKChhY2MsIGNoYW5nZSkgPT4ge1xuICAgICAgaWYgKGNoYW5nZSA9PT0gJ2lzVmlzaWJsZScpIHJldHVybiBhY2M7XG5cbiAgICAgIGFjY1tjaGFuZ2VdID0gY2hhbmdlc1tjaGFuZ2VdLmN1cnJlbnRWYWx1ZTtcblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG5cbiAgICBsZXQgdmFyaWF0aW9uOiBzdHJpbmc7XG5cbiAgICBpZiAoaXNDaGFuZ2VkPE5nQ2hhbmdlczxUaXBweURpcmVjdGl2ZT4+KCd2YXJpYXRpb24nLCBjaGFuZ2VzKSkge1xuICAgICAgdmFyaWF0aW9uID0gY2hhbmdlcy52YXJpYXRpb24uY3VycmVudFZhbHVlO1xuICAgICAgdGhpcy52YXJpYXRpb25EZWZpbmVkID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnZhcmlhdGlvbkRlZmluZWQpIHtcbiAgICAgIHZhcmlhdGlvbiA9IHRoaXMuZ2xvYmFsQ29uZmlnLmRlZmF1bHRWYXJpYXRpb247XG4gICAgICB0aGlzLnZhcmlhdGlvbkRlZmluZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2YXJpYXRpb24pIHtcbiAgICAgIHByb3BzID0ge1xuICAgICAgICAuLi50aGlzLmdsb2JhbENvbmZpZy52YXJpYXRpb25zW3ZhcmlhdGlvbl0sXG4gICAgICAgIC4uLnByb3BzXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChpc0NoYW5nZWQ8TmdDaGFuZ2VzPFRpcHB5RGlyZWN0aXZlPj4oJ2lzRW5hYmxlZCcsIGNoYW5nZXMpKSB7XG4gICAgICB0aGlzLmVuYWJsZWQgPSBjaGFuZ2VzLmlzRW5hYmxlZC5jdXJyZW50VmFsdWU7XG4gICAgICB0aGlzLnNldFN0YXR1cygpO1xuICAgIH1cblxuICAgIGlmIChpc0NoYW5nZWQ8TmdDaGFuZ2VzPFRpcHB5RGlyZWN0aXZlPj4oJ2lzVmlzaWJsZScsIGNoYW5nZXMpKSB7XG4gICAgICB0aGlzLmlzVmlzaWJsZSA/IHRoaXMuc2hvdygpIDogdGhpcy5oaWRlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRQcm9wcyh7IC4uLnRoaXMucHJvcHMsIC4uLnByb3BzIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMudXNlSG9zdFdpZHRoKSB7XG4gICAgICB0aGlzLnByb3BzLm1heFdpZHRoID0gdGhpcy5ob3N0V2lkdGg7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmIChpc1BsYXRmb3JtU2VydmVyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcblxuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5sYXp5KSB7XG4gICAgICAgIGlmICh0aGlzLm9ubHlUZXh0T3ZlcmZsb3cpIHtcbiAgICAgICAgICBpblZpZXcodGhpcy5ob3N0KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiBvdmVyZmxvd0NoYW5nZXModGhpcy5ob3N0KSksXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoaXNFbGVtZW50T3ZlcmZsb3cgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmNoZWNrT3ZlcmZsb3coaXNFbGVtZW50T3ZlcmZsb3cpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW5WaWV3KHRoaXMuaG9zdClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5jcmVhdGVJbnN0YW5jZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5vbmx5VGV4dE92ZXJmbG93KSB7XG4gICAgICAgIG92ZXJmbG93Q2hhbmdlcyh0aGlzLmhvc3QpXG4gICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKGlzRWxlbWVudE92ZXJmbG93ID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tPdmVyZmxvdyhpc0VsZW1lbnRPdmVyZmxvdyk7XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNyZWF0ZUluc3RhbmNlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3llZC5uZXh0KCk7XG4gICAgdGhpcy5pbnN0YW5jZT8uZGVzdHJveSgpO1xuICAgIHRoaXMuZGVzdHJveVZpZXcoKTtcbiAgfVxuXG4gIGRlc3Ryb3lWaWV3KCkge1xuICAgIHRoaXMudmlld09wdGlvbnMkID0gbnVsbDtcbiAgICB0aGlzLnZpZXdSZWY/LmRlc3Ryb3koKTtcbiAgICB0aGlzLnZpZXdSZWYgPSBudWxsO1xuICB9XG5cbiAgc2hvdygpIHtcbiAgICB0aGlzLmluc3RhbmNlPy5zaG93KCk7XG4gIH1cblxuICBoaWRlKCkge1xuICAgIHRoaXMuaW5zdGFuY2U/LmhpZGUoKTtcbiAgfVxuXG4gIGVuYWJsZSgpIHtcbiAgICB0aGlzLmluc3RhbmNlPy5lbmFibGUoKTtcbiAgfVxuXG4gIGRpc2FibGUoKSB7XG4gICAgdGhpcy5pbnN0YW5jZT8uZGlzYWJsZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldFByb3BzKHByb3BzOiBQYXJ0aWFsPFRpcHB5Q29uZmlnPikge1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICB0aGlzLmluc3RhbmNlPy5zZXRQcm9wcyhvbmx5VGlwcHlQcm9wcyhwcm9wcykpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldFN0YXR1cygpIHtcbiAgICB0aGlzLmVuYWJsZWQgPyB0aGlzLmluc3RhbmNlPy5lbmFibGUoKSA6IHRoaXMuaW5zdGFuY2U/LmRpc2FibGUoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgaG9zdCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tSG9zdCB8fCB0aGlzLmhvc3RSZWYubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgaG9zdFdpZHRoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVJbnN0YW5jZSgpIHtcbiAgICBpZiAoIXRoaXMuY29udGVudCAmJiAhY29lcmNlQm9vbGVhbklucHV0KHRoaXMudXNlVGV4dENvbnRlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMuaW5zdGFuY2UgPSB0aXBweSh0aGlzLmhvc3QsIHtcbiAgICAgICAgYWxsb3dIVE1MOiB0cnVlLFxuICAgICAgICBhcHBlbmRUbzogZG9jdW1lbnQuYm9keSxcbiAgICAgICAgLi4ub25seVRpcHB5UHJvcHModGhpcy5nbG9iYWxDb25maWcpLFxuICAgICAgICAuLi5vbmx5VGlwcHlQcm9wcyh0aGlzLnByb3BzKSxcbiAgICAgICAgb25Nb3VudDogaW5zdGFuY2UgPT4ge1xuICAgICAgICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnZpc2libGVJbnRlcm5hbC5uZXh0KHRoaXMuaXNWaXNpYmxlKTtcbiAgICAgICAgICBpZiAodGhpcy52aXNpYmxlLm9ic2VydmVkKSB7XG4gICAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMudmlzaWJsZS5uZXh0KHRoaXMuaXNWaXNpYmxlKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudXNlSG9zdFdpZHRoICYmIHRoaXMubGlzdGVuVG9Ib3N0UmVzaXplKCk7XG4gICAgICAgICAgdGhpcy5nbG9iYWxDb25maWcub25Nb3VudD8uKGluc3RhbmNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25DcmVhdGU6IGluc3RhbmNlID0+IHtcbiAgICAgICAgICBpbnN0YW5jZS5wb3BwZXIuY2xhc3NMaXN0LmFkZChgdGlwcHktdmFyaWF0aW9uLSR7dGhpcy52YXJpYXRpb24gfHwgdGhpcy5nbG9iYWxDb25maWcuZGVmYXVsdFZhcmlhdGlvbn1gKTtcbiAgICAgICAgICBpZiAodGhpcy5jbGFzc05hbWUpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2xhc3Mgb2Ygbm9ybWFsaXplQ2xhc3NOYW1lKHRoaXMuY2xhc3NOYW1lKSkge1xuICAgICAgICAgICAgICBpbnN0YW5jZS5wb3BwZXIuY2xhc3NMaXN0LmFkZChrbGFzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZ2xvYmFsQ29uZmlnLm9uQ3JlYXRlPy4oaW5zdGFuY2UpO1xuICAgICAgICAgIGlmICh0aGlzLmlzVmlzaWJsZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaW5zdGFuY2Uuc2hvdygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgb25TaG93OiBpbnN0YW5jZSA9PiB7XG4gICAgICAgICAgaW5zdGFuY2UucmVmZXJlbmNlLnNldEF0dHJpYnV0ZSgnZGF0YS10aXBweS1vcGVuJywgJycpO1xuICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGVudCA9IHRoaXMucmVzb2x2ZUNvbnRlbnQoaW5zdGFuY2UpO1xuICAgICAgICAgICAgaWYgKGlzU3RyaW5nKGNvbnRlbnQpKSB7XG4gICAgICAgICAgICAgIGluc3RhbmNlLnNldFByb3BzKHsgYWxsb3dIVE1MOiBmYWxzZSB9KTtcblxuICAgICAgICAgICAgICBpZiAoIWNvbnRlbnQ/LnRyaW0oKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZSgpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5zdGFuY2Uuc2V0Q29udGVudChjb250ZW50KTtcbiAgICAgICAgICAgIHRoaXMuaGlkZU9uRXNjYXBlICYmIHRoaXMuaGFuZGxlRXNjYXBlQnV0dG9uKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKHRoaXMudXNlSG9zdFdpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLnNldEluc3RhbmNlV2lkdGgoaW5zdGFuY2UsIHRoaXMuaG9zdFdpZHRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucG9wcGVyV2lkdGgpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0SW5zdGFuY2VXaWR0aChpbnN0YW5jZSwgdGhpcy5wb3BwZXJXaWR0aCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZ2xvYmFsQ29uZmlnLm9uU2hvdz8uKGluc3RhbmNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25IaWRlKGluc3RhbmNlKSB7XG4gICAgICAgICAgaW5zdGFuY2UucmVmZXJlbmNlLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS10aXBweS1vcGVuJyk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uSGlkZGVuOiBpbnN0YW5jZSA9PiB7XG4gICAgICAgICAgdGhpcy5kZXN0cm95VmlldygpO1xuICAgICAgICAgIHRoaXMuaXNWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy52aXNpYmxlSW50ZXJuYWwubmV4dCh0aGlzLmlzVmlzaWJsZSk7XG4gICAgICAgICAgaWYgKHRoaXMudmlzaWJsZS5vYnNlcnZlZCkge1xuICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLnZpc2libGUubmV4dCh0aGlzLmlzVmlzaWJsZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmdsb2JhbENvbmZpZy5vbkhpZGRlbj8uKGluc3RhbmNlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc2V0U3RhdHVzKCk7XG4gICAgICB0aGlzLnNldFByb3BzKHRoaXMucHJvcHMpO1xuXG4gICAgICB0aGlzLnZhcmlhdGlvbiA9PT0gJ2NvbnRleHRNZW51JyAmJiB0aGlzLmhhbmRsZUNvbnRleHRNZW51KCk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzb2x2ZUNvbnRlbnQoaW5zdGFuY2U6IFRpcHB5SW5zdGFuY2UpIHtcbiAgICBpZiAoIXRoaXMudmlld09wdGlvbnMkICYmICFpc1N0cmluZyh0aGlzLmNvbnRlbnQpKSB7XG4gICAgICBpZiAoaXNDb21wb25lbnQodGhpcy5jb250ZW50KSkge1xuICAgICAgICB0aGlzLmluc3RhbmNlLmRhdGEgPSB0aGlzLmRhdGE7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMkID0ge1xuICAgICAgICAgIGluamVjdG9yOiBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwcm92aWRlOiBUSVBQWV9SRUYsXG4gICAgICAgICAgICAgICAgdXNlVmFsdWU6IHRoaXMuaW5zdGFuY2VcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHBhcmVudDogdGhpcy5pbmplY3RvclxuICAgICAgICAgIH0pXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKGlzVGVtcGxhdGVSZWYodGhpcy5jb250ZW50KSkge1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zJCA9IHtcbiAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAkaW1wbGljaXQ6IHRoaXMuaGlkZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgZGF0YTogdGhpcy5kYXRhXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudmlld1JlZiA9IHRoaXMudmlld1NlcnZpY2UuY3JlYXRlVmlldyh0aGlzLmNvbnRlbnQsIHtcbiAgICAgIHZjcjogdGhpcy52Y3IsXG4gICAgICAuLi50aGlzLnZpZXdPcHRpb25zJFxuICAgIH0pO1xuXG4gICAgLy8gV2UgbmVlZCB0byBjYWxsIGRldGVjdENoYW5nZXMgZm9yIG9uUHVzaCBjb21wb25lbnRzIHRvIHVwZGF0ZSB0aGUgY29udGVudFxuICAgIGlmICh0aGlzLmRldGVjdENoYW5nZXNDb21wb25lbnQgJiYgaXNDb21wb25lbnQodGhpcy5jb250ZW50KSkge1xuICAgICAgdGhpcy52aWV3UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBsZXQgY29udGVudCA9IHRoaXMudmlld1JlZi5nZXRFbGVtZW50KCk7XG5cbiAgICBpZiAoY29lcmNlQm9vbGVhbklucHV0KHRoaXMudXNlVGV4dENvbnRlbnQpKSB7XG4gICAgICBjb250ZW50ID0gaW5zdGFuY2UucmVmZXJlbmNlLnRleHRDb250ZW50O1xuICAgIH1cblxuICAgIGlmIChpc1N0cmluZyhjb250ZW50KSAmJiB0aGlzLmdsb2JhbENvbmZpZy5iZWZvcmVSZW5kZXIpIHtcbiAgICAgIGNvbnRlbnQgPSB0aGlzLmdsb2JhbENvbmZpZy5iZWZvcmVSZW5kZXIoY29udGVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlQ29udGV4dE1lbnUoKSB7XG4gICAgZnJvbUV2ZW50KHRoaXMuaG9zdCwgJ2NvbnRleHRtZW51JylcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCkpXG4gICAgICAuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIHRoaXMuaW5zdGFuY2Uuc2V0UHJvcHMoe1xuICAgICAgICAgIGdldFJlZmVyZW5jZUNsaWVudFJlY3Q6ICgpID0+XG4gICAgICAgICAgICAoe1xuICAgICAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICAgICAgICB0b3A6IGV2ZW50LmNsaWVudFksXG4gICAgICAgICAgICAgIGJvdHRvbTogZXZlbnQuY2xpZW50WSxcbiAgICAgICAgICAgICAgbGVmdDogZXZlbnQuY2xpZW50WCxcbiAgICAgICAgICAgICAgcmlnaHQ6IGV2ZW50LmNsaWVudFhcbiAgICAgICAgICAgIH0gYXMgRE9NUmVjdFJlYWRPbmx5KVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmluc3RhbmNlLnNob3coKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZUVzY2FwZUJ1dHRvbigpOiB2b2lkIHtcbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgZnJvbUV2ZW50KGRvY3VtZW50LmJvZHksICdrZXlkb3duJylcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKCh7IGNvZGUgfTogS2V5Ym9hcmRFdmVudCkgPT4gY29kZSA9PT0gJ0VzY2FwZScpLFxuICAgICAgICAgIHRha2VVbnRpbChtZXJnZSh0aGlzLmRlc3Ryb3llZCwgdGhpcy52aXNpYmxlSW50ZXJuYWwucGlwZShmaWx0ZXIodiA9PiAhdikpKSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuaGlkZSgpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjaGVja092ZXJmbG93KGlzRWxlbWVudE92ZXJmbG93OiBib29sZWFuKSB7XG4gICAgaWYgKGlzRWxlbWVudE92ZXJmbG93KSB7XG4gICAgICBpZiAoIXRoaXMuaW5zdGFuY2UpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVJbnN0YW5jZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pbnN0YW5jZS5lbmFibGUoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnN0YW5jZT8uZGlzYWJsZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBsaXN0ZW5Ub0hvc3RSZXNpemUoKSB7XG4gICAgZGltZW5zaW9uc0NoYW5nZXModGhpcy5ob3N0KVxuICAgICAgLnBpcGUodGFrZVVudGlsKG1lcmdlKHRoaXMuZGVzdHJveWVkLCB0aGlzLnZpc2libGVJbnRlcm5hbCkpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0SW5zdGFuY2VXaWR0aCh0aGlzLmluc3RhbmNlLCB0aGlzLmhvc3RXaWR0aCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRJbnN0YW5jZVdpZHRoKGluc3RhbmNlOiBJbnN0YW5jZSwgd2lkdGg6IHN0cmluZyB8IG51bWJlcikge1xuICAgIGNvbnN0IGluUGl4ZWxzID0gY29lcmNlQ3NzUGl4ZWxWYWx1ZSh3aWR0aCk7XG4gICAgaW5zdGFuY2UucG9wcGVyLnN0eWxlLndpZHRoID0gaW5QaXhlbHM7XG4gICAgaW5zdGFuY2UucG9wcGVyLnN0eWxlLm1heFdpZHRoID0gaW5QaXhlbHM7XG4gICAgKGluc3RhbmNlLnBvcHBlci5maXJzdEVsZW1lbnRDaGlsZCBhcyBIVE1MRWxlbWVudCkuc3R5bGUubWF4V2lkdGggPSBpblBpeGVscztcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NoYW5nZWQ8VCBleHRlbmRzIG9iamVjdD4oa2V5OiBrZXlvZiBULCBjaGFuZ2VzOiBUKSB7XG4gIHJldHVybiBrZXkgaW4gY2hhbmdlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvZXJjZUJvb2xlYW5JbnB1dCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGAke3ZhbHVlfWAgIT09ICdmYWxzZSc7XG59XG4iXX0=
|
|
423
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlwcHkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmduZWF0L2hlbGlwb3BwZXIvc3JjL2xpYi90aXBweS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBS0wsTUFBTSxFQUNOLFdBQVcsRUFFWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEtBQW1CLE1BQU0sVUFBVSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQVcsV0FBVyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQXFDLE1BQU0sa0JBQWtCLENBQUM7QUFFcEgsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsTUFBTSxFQUNOLGtCQUFrQixFQUNsQixjQUFjLEVBQ2QsZUFBZSxFQUNoQixNQUFNLFNBQVMsQ0FBQztBQUNqQixPQUFPLEVBQWEsWUFBWSxFQUFFLFNBQVMsRUFBMEMsTUFBTSxlQUFlLENBQUM7OztBQVEzRyxNQUFNLE9BQU8sY0FBYztJQWtEekIsWUFDaUMsVUFBa0IsRUFDakIsWUFBeUIsRUFDL0MsUUFBa0IsRUFDbEIsV0FBd0IsRUFDeEIsR0FBcUIsRUFDckIsSUFBWSxFQUNaLE9BQW1CO1FBTkUsZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQUNqQixpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUMvQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FB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O2dCQUNPLGNBQWM7c0JBQXhDLEtBQUs7dUJBQUMsa0JBQWtCO2dCQUNOLE1BQU07c0JBQXhCLEtBQUs7dUJBQUMsVUFBVTtnQkFDSyxTQUFTO3NCQUE5QixLQUFLO3VCQUFDLGFBQWE7Z0JBQ0UsU0FBUztzQkFBOUIsS0FBSzt1QkFBQyxhQUFhO2dCQUNFLFNBQVM7c0JBQTlCLEtBQUs7dUJBQUMsYUFBYTtnQkFDUyxnQkFBZ0I7c0JBQTVDLEtBQUs7dUJBQUMsb0JBQW9CO2dCQUNWLElBQUk7c0JBQXBCLEtBQUs7dUJBQUMsUUFBUTtnQkFDVSxZQUFZO3NCQUFwQyxLQUFLO3VCQUFDLGdCQUFnQjtnQkFDRSxZQUFZO3NCQUFwQyxLQUFLO3VCQUFDLGdCQUFnQjtnQkFDWSxzQkFBc0I7c0JBQXhELEtBQUs7dUJBQUMsMEJBQTBCO2dCQUNULFdBQVc7c0JBQWxDLEtBQUs7dUJBQUMsZUFBZTtnQkFDTCxVQUFVO3NCQUExQixLQUFLO3VCQUFDLFFBQVE7Z0JBQ08sU0FBUztzQkFBOUIsS0FBSzt1QkFBQyxhQUFhO2dCQUVDLE9BQU87c0JBQTNCLE1BQU07dUJBQUMsV0FBVzs7QUFtVnJCLFNBQVMsU0FBUyxDQUFtQixHQUFZLEVBQUUsT0FBVTtJQUMzRCxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUM7QUFDeEIsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxLQUFVO0lBQzNDLE9BQU8sS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEtBQUssRUFBRSxLQUFLLE9BQU8sQ0FBQztBQUNqRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUExBVEZPUk1fSUQsXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc1BsYXRmb3JtU2VydmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB0aXBweSwgeyBJbnN0YW5jZSB9IGZyb20gJ3RpcHB5LmpzJztcbmltcG9ydCB7IGZyb21FdmVudCwgbWVyZ2UsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb250ZW50LCBpc0NvbXBvbmVudCwgaXNTdHJpbmcsIGlzVGVtcGxhdGVSZWYsIFZpZXdPcHRpb25zLCBWaWV3UmVmLCBWaWV3U2VydmljZSB9IGZyb20gJ0BuZ25lYXQvb3ZlcnZpZXcnO1xuXG5pbXBvcnQge1xuICBjb2VyY2VDc3NQaXhlbFZhbHVlLFxuICBkaW1lbnNpb25zQ2hhbmdlcyxcbiAgaW5WaWV3LFxuICBub3JtYWxpemVDbGFzc05hbWUsXG4gIG9ubHlUaXBweVByb3BzLFxuICBvdmVyZmxvd0NoYW5nZXNcbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBOZ0NoYW5nZXMsIFRJUFBZX0NPTkZJRywgVElQUFlfUkVGLCBUaXBweUNvbmZpZywgVGlwcHlJbnN0YW5jZSwgVGlwcHlQcm9wcyB9IGZyb20gJy4vdGlwcHkudHlwZXMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdbdHBdJyxcbiAgZXhwb3J0QXM6ICd0aXBweScsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgVGlwcHlEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25Jbml0IHtcbiAgQElucHV0KCd0cCcpIGNvbnRlbnQ6IENvbnRlbnQgfCB1bmRlZmluZWQgfCBudWxsO1xuICBASW5wdXQoJ3RwQXBwZW5kVG8nKSBhcHBlbmRUbzogVGlwcHlQcm9wc1snYXBwZW5kVG8nXTtcbiAgQElucHV0KCd0cERlbGF5JykgZGVsYXk6IFRpcHB5UHJvcHNbJ2RlbGF5J107XG4gIEBJbnB1dCgndHBEdXJhdGlvbicpIGR1cmF0aW9uOiBUaXBweVByb3BzWydkdXJhdGlvbiddO1xuICBASW5wdXQoJ3RwSGlkZU9uQ2xpY2snKSBoaWRlT25DbGljazogVGlwcHlQcm9wc1snaGlkZU9uQ2xpY2snXTtcbiAgQElucHV0KCd0cEludGVyYWN0aXZlJykgaW50ZXJhY3RpdmU6IFRpcHB5UHJvcHNbJ2ludGVyYWN0aXZlJ107XG4gIEBJbnB1dCgndHBJbnRlcmFjdGl2ZUJvcmRlcicpIGludGVyYWN0aXZlQm9yZGVyOiBUaXBweVByb3BzWydpbnRlcmFjdGl2ZUJvcmRlciddO1xuICBASW5wdXQoJ3RwTWF4V2lkdGgnKSBtYXhXaWR0aDogVGlwcHlQcm9wc1snbWF4V2lkdGgnXTtcbiAgQElucHV0KCd0cE9mZnNldCcpIG9mZnNldDogVGlwcHlQcm9wc1snb2Zmc2V0J107XG4gIEBJbnB1dCgndHBQbGFjZW1lbnQnKSBwbGFjZW1lbnQ6IFRpcHB5UHJvcHNbJ3BsYWNlbWVudCddO1xuICBASW5wdXQoJ3RwUG9wcGVyT3B0aW9ucycpIHBvcHBlck9wdGlvbnM6IFRpcHB5UHJvcHNbJ3BvcHBlck9wdGlvbnMnXTtcbiAgQElucHV0KCd0cFNob3dPbkNyZWF0ZScpIHNob3dPbkNyZWF0ZTogVGlwcHlQcm9wc1snc2hvd09uQ3JlYXRlJ107XG4gIEBJbnB1dCgndHBUcmlnZ2VyJykgdHJpZ2dlcjogVGlwcHlQcm9wc1sndHJpZ2dlciddO1xuICBASW5wdXQoJ3RwVHJpZ2dlclRhcmdldCcpIHRyaWdnZXJUYXJnZXQ6IFRpcHB5UHJvcHNbJ3RyaWdnZXJUYXJnZXQnXTtcbiAgQElucHV0KCd0cFpJbmRleCcpIHpJbmRleDogVGlwcHlQcm9wc1snekluZGV4J107XG4gIEBJbnB1dCgndHBBbmltYXRpb24nKSBhbmltYXRpb246IFRpcHB5UHJvcHNbJ2FuaW1hdGlvbiddO1xuICBASW5wdXQoJ3RwVXNlVGV4dENvbnRlbnQnKSB1c2VUZXh0Q29udGVudDogYm9vbGVhbjtcbiAgQElucHV0KCd0cElzTGF6eScpIGlzTGF6eTogYm9vbGVhbjtcbiAgQElucHV0KCd0cFZhcmlhdGlvbicpIHZhcmlhdGlvbjogc3RyaW5nO1xuICBASW5wdXQoJ3RwSXNFbmFibGVkJykgaXNFbmFibGVkOiBib29sZWFuO1xuICBASW5wdXQoJ3RwQ2xhc3NOYW1lJykgY2xhc3NOYW1lOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgQElucHV0KCd0cE9ubHlUZXh0T3ZlcmZsb3cnKSBvbmx5VGV4dE92ZXJmbG93ID0gZmFsc2U7XG4gIEBJbnB1dCgndHBEYXRhJykgZGF0YTogYW55O1xuICBASW5wdXQoJ3RwVXNlSG9zdFdpZHRoJykgdXNlSG9zdFdpZHRoID0gZmFsc2U7XG4gIEBJbnB1dCgndHBIaWRlT25Fc2NhcGUnKSBoaWRlT25Fc2NhcGUgPSBmYWxzZTtcbiAgQElucHV0KCd0cERldGVjdENoYW5nZXNDb21wb25lbnQnKSBkZXRlY3RDaGFuZ2VzQ29tcG9uZW50ID0gdHJ1ZTtcbiAgQElucHV0KCd0cFBvcHBlcldpZHRoJykgcG9wcGVyV2lkdGg6IG51bWJlciB8IHN0cmluZztcbiAgQElucHV0KCd0cEhvc3QnKSBjdXN0b21Ib3N0OiBIVE1MRWxlbWVudDtcbiAgQElucHV0KCd0cElzVmlzaWJsZScpIGlzVmlzaWJsZSA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoJ3RwVmlzaWJsZScpIHZpc2libGUgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgcHJvdGVjdGVkIGluc3RhbmNlOiBUaXBweUluc3RhbmNlO1xuICBwcm90ZWN0ZWQgdmlld1JlZjogVmlld1JlZjtcbiAgcHJvdGVjdGVkIGRlc3Ryb3llZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByb3RlY3RlZCBwcm9wczogUGFydGlhbDxUaXBweUNvbmZpZz47XG4gIHByb3RlY3RlZCBlbmFibGVkID0gdHJ1ZTtcbiAgcHJvdGVjdGVkIHZhcmlhdGlvbkRlZmluZWQgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIHZpZXdPcHRpb25zJDogVmlld09wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFdlIGhhZCB1c2UgYHZpc2libGVgIGV2ZW50IGVtaXR0ZXIgcHJldmlvdXNseSBhcyBhIGB0YWtlVW50aWxgIHN1YnNjcmliZXIgaW4gbXVsdGlwbGUgcGxhY2VzXG4gICAqIHdpdGhpbiB0aGUgZGlyZWN0aXZlLlxuICAgKiBUaGlzIGlzIGZvciBpbnRlcm5hbCB1c2Ugb25seTsgdGh1cyB3ZSBkb24ndCBoYXZlIHRvIGRlYWwgd2l0aCB0aGUgYHZpc2libGVgIGV2ZW50IGVtaXR0ZXJcbiAgICogYW5kIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbnMgb25seSB3aGVuIHRoZSBgdmlzaWJsZWAgZXZlbnQgaXMgYmVpbmcgbGlzdGVuZWQgb3V0c2lkZVxuICAgKiBpbiB0aGUgdGVtcGxhdGUgKGA8YnV0dG9uIFt0aXBweV09XCIuLi5cIiAodmlzaWJsZSk9XCIuLi5cIj48L2J1dHRvbj5gKS5cbiAgICovXG4gIHByb3RlY3RlZCB2aXNpYmxlSW50ZXJuYWwgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByb3RlY3RlZCBwbGF0Zm9ybUlkOiBzdHJpbmcsXG4gICAgQEluamVjdChUSVBQWV9DT05GSUcpIHByb3RlY3RlZCBnbG9iYWxDb25maWc6IFRpcHB5Q29uZmlnLFxuICAgIHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJvdGVjdGVkIHZpZXdTZXJ2aWNlOiBWaWV3U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgdmNyOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByb3RlY3RlZCB6b25lOiBOZ1pvbmUsXG4gICAgcHJvdGVjdGVkIGhvc3RSZWY6IEVsZW1lbnRSZWZcbiAgKSB7fVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IE5nQ2hhbmdlczxUaXBweURpcmVjdGl2ZT4pIHtcbiAgICBpZiAoaXNQbGF0Zm9ybVNlcnZlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XG5cbiAgICBsZXQgcHJvcHM6IFBhcnRpYWw8VGlwcHlDb25maWc+ID0gT2JqZWN0LmtleXMoY2hhbmdlcykucmVkdWNlKChhY2MsIGNoYW5nZSkgPT4ge1xuICAgICAgaWYgKGNoYW5nZSA9PT0gJ2lzVmlzaWJsZScpIHJldHVybiBhY2M7XG5cbiAgICAgIGFjY1tjaGFuZ2VdID0gY2hhbmdlc1tjaGFuZ2VdLmN1cnJlbnRWYWx1ZTtcblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG5cbiAgICBsZXQgdmFyaWF0aW9uOiBzdHJpbmc7XG5cbiAgICBpZiAoaXNDaGFuZ2VkPE5nQ2hhbmdlczxUaXBweURpcmVjdGl2ZT4+KCd2YXJpYXRpb24nLCBjaGFuZ2VzKSkge1xuICAgICAgdmFyaWF0aW9uID0gY2hhbmdlcy52YXJpYXRpb24uY3VycmVudFZhbHVlO1xuICAgICAgdGhpcy52YXJpYXRpb25EZWZpbmVkID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnZhcmlhdGlvbkRlZmluZWQpIHtcbiAgICAgIHZhcmlhdGlvbiA9IHRoaXMuZ2xvYmFsQ29uZmlnLmRlZmF1bHRWYXJpYXRpb247XG4gICAgICB0aGlzLnZhcmlhdGlvbkRlZmluZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2YXJpYXRpb24pIHtcbiAgICAgIHByb3BzID0ge1xuICAgICAgICAuLi50aGlzLmdsb2JhbENvbmZpZy52YXJpYXRpb25zW3ZhcmlhdGlvbl0sXG4gICAgICAgIC4uLnByb3BzXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChpc0NoYW5nZWQ8TmdDaGFuZ2VzPFRpcHB5RGlyZWN0aXZlPj4oJ2lzRW5hYmxlZCcsIGNoYW5nZXMpKSB7XG4gICAgICB0aGlzLmVuYWJsZWQgPSBjaGFuZ2VzLmlzRW5hYmxlZC5jdXJyZW50VmFsdWU7XG4gICAgICB0aGlzLnNldFN0YXR1cygpO1xuICAgIH1cblxuICAgIGlmIChpc0NoYW5nZWQ8TmdDaGFuZ2VzPFRpcHB5RGlyZWN0aXZlPj4oJ2lzVmlzaWJsZScsIGNoYW5nZXMpKSB7XG4gICAgICB0aGlzLmlzVmlzaWJsZSA/IHRoaXMuc2hvdygpIDogdGhpcy5oaWRlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRQcm9wcyh7IC4uLnRoaXMucHJvcHMsIC4uLnByb3BzIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMudXNlSG9zdFdpZHRoKSB7XG4gICAgICB0aGlzLnByb3BzLm1heFdpZHRoID0gdGhpcy5ob3N0V2lkdGg7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmIChpc1BsYXRmb3JtU2VydmVyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcblxuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc0xhenkpIHtcbiAgICAgICAgaWYgKHRoaXMub25seVRleHRPdmVyZmxvdykge1xuICAgICAgICAgIGluVmlldyh0aGlzLmhvc3QpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IG92ZXJmbG93Q2hhbmdlcyh0aGlzLmhvc3QpKSxcbiAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShpc0VsZW1lbnRPdmVyZmxvdyA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuY2hlY2tPdmVyZmxvdyhpc0VsZW1lbnRPdmVyZmxvdyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpblZpZXcodGhpcy5ob3N0KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUluc3RhbmNlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLm9ubHlUZXh0T3ZlcmZsb3cpIHtcbiAgICAgICAgb3ZlcmZsb3dDaGFuZ2VzKHRoaXMuaG9zdClcbiAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpKVxuICAgICAgICAgIC5zdWJzY3JpYmUoaXNFbGVtZW50T3ZlcmZsb3cgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGVja092ZXJmbG93KGlzRWxlbWVudE92ZXJmbG93KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3JlYXRlSW5zdGFuY2UoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZGVzdHJveWVkLm5leHQoKTtcbiAgICB0aGlzLmluc3RhbmNlPy5kZXN0cm95KCk7XG4gICAgdGhpcy5kZXN0cm95VmlldygpO1xuICB9XG5cbiAgZGVzdHJveVZpZXcoKSB7XG4gICAgdGhpcy52aWV3T3B0aW9ucyQgPSBudWxsO1xuICAgIHRoaXMudmlld1JlZj8uZGVzdHJveSgpO1xuICAgIHRoaXMudmlld1JlZiA9IG51bGw7XG4gIH1cblxuICBzaG93KCkge1xuICAgIHRoaXMuaW5zdGFuY2U/LnNob3coKTtcbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgdGhpcy5pbnN0YW5jZT8uaGlkZSgpO1xuICB9XG5cbiAgZW5hYmxlKCkge1xuICAgIHRoaXMuaW5zdGFuY2U/LmVuYWJsZSgpO1xuICB9XG5cbiAgZGlzYWJsZSgpIHtcbiAgICB0aGlzLmluc3RhbmNlPy5kaXNhYmxlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0UHJvcHMocHJvcHM6IFBhcnRpYWw8VGlwcHlDb25maWc+KSB7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICAgIHRoaXMuaW5zdGFuY2U/LnNldFByb3BzKG9ubHlUaXBweVByb3BzKHByb3BzKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0U3RhdHVzKCkge1xuICAgIHRoaXMuZW5hYmxlZCA/IHRoaXMuaW5zdGFuY2U/LmVuYWJsZSgpIDogdGhpcy5pbnN0YW5jZT8uZGlzYWJsZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBob3N0KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5jdXN0b21Ib3N0IHx8IHRoaXMuaG9zdFJlZi5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBob3N0V2lkdGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5ob3N0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZUluc3RhbmNlKCkge1xuICAgIGlmICghdGhpcy5jb250ZW50ICYmICFjb2VyY2VCb29sZWFuSW5wdXQodGhpcy51c2VUZXh0Q29udGVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5pbnN0YW5jZSA9IHRpcHB5KHRoaXMuaG9zdCwge1xuICAgICAgICBhbGxvd0hUTUw6IHRydWUsXG4gICAgICAgIGFwcGVuZFRvOiBkb2N1bWVudC5ib2R5LFxuICAgICAgICAuLi5vbmx5VGlwcHlQcm9wcyh0aGlzLmdsb2JhbENvbmZpZyksXG4gICAgICAgIC4uLm9ubHlUaXBweVByb3BzKHRoaXMucHJvcHMpLFxuICAgICAgICBvbk1vdW50OiBpbnN0YW5jZSA9PiB7XG4gICAgICAgICAgdGhpcy5pc1Zpc2libGUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMudmlzaWJsZUludGVybmFsLm5leHQodGhpcy5pc1Zpc2libGUpO1xuICAgICAgICAgIGlmICh0aGlzLnZpc2libGUub2JzZXJ2ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy52aXNpYmxlLm5leHQodGhpcy5pc1Zpc2libGUpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy51c2VIb3N0V2lkdGggJiYgdGhpcy5saXN0ZW5Ub0hvc3RSZXNpemUoKTtcbiAgICAgICAgICB0aGlzLmdsb2JhbENvbmZpZy5vbk1vdW50Py4oaW5zdGFuY2UpO1xuICAgICAgICB9LFxuICAgICAgICBvbkNyZWF0ZTogaW5zdGFuY2UgPT4ge1xuICAgICAgICAgIGluc3RhbmNlLnBvcHBlci5jbGFzc0xpc3QuYWRkKGB0aXBweS12YXJpYXRpb24tJHt0aGlzLnZhcmlhdGlvbiB8fCB0aGlzLmdsb2JhbENvbmZpZy5kZWZhdWx0VmFyaWF0aW9ufWApO1xuICAgICAgICAgIGlmICh0aGlzLmNsYXNzTmFtZSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrbGFzcyBvZiBub3JtYWxpemVDbGFzc05hbWUodGhpcy5jbGFzc05hbWUpKSB7XG4gICAgICAgICAgICAgIGluc3RhbmNlLnBvcHBlci5jbGFzc0xpc3QuYWRkKGtsYXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5nbG9iYWxDb25maWcub25DcmVhdGU/LihpbnN0YW5jZSk7XG4gICAgICAgICAgaWYgKHRoaXMuaXNWaXNpYmxlID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5zaG93KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvblNob3c6IGluc3RhbmNlID0+IHtcbiAgICAgICAgICBpbnN0YW5jZS5yZWZlcmVuY2Uuc2V0QXR0cmlidXRlKCdkYXRhLXRpcHB5LW9wZW4nLCAnJyk7XG4gICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5yZXNvbHZlQ29udGVudChpbnN0YW5jZSk7XG4gICAgICAgICAgICBpZiAoaXNTdHJpbmcoY29udGVudCkpIHtcbiAgICAgICAgICAgICAgaW5zdGFuY2Uuc2V0UHJvcHMoeyBhbGxvd0hUTUw6IGZhbHNlIH0pO1xuXG4gICAgICAgICAgICAgIGlmICghY29udGVudD8udHJpbSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbnN0YW5jZS5zZXRDb250ZW50KGNvbnRlbnQpO1xuICAgICAgICAgICAgdGhpcy5oaWRlT25Fc2NhcGUgJiYgdGhpcy5oYW5kbGVFc2NhcGVCdXR0b24oKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAodGhpcy51c2VIb3N0V2lkdGgpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0SW5zdGFuY2VXaWR0aChpbnN0YW5jZSwgdGhpcy5ob3N0V2lkdGgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wb3BwZXJXaWR0aCkge1xuICAgICAgICAgICAgdGhpcy5zZXRJbnN0YW5jZVdpZHRoKGluc3RhbmNlLCB0aGlzLnBvcHBlcldpZHRoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5nbG9iYWxDb25maWcub25TaG93Py4oaW5zdGFuY2UpO1xuICAgICAgICB9LFxuICAgICAgICBvbkhpZGUoaW5zdGFuY2UpIHtcbiAgICAgICAgICBpbnN0YW5jZS5yZWZlcmVuY2UucmVtb3ZlQXR0cmlidXRlKCdkYXRhLXRpcHB5LW9wZW4nKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25IaWRkZW46IGluc3RhbmNlID0+IHtcbiAgICAgICAgICB0aGlzLmRlc3Ryb3lWaWV3KCk7XG4gICAgICAgICAgdGhpcy5pc1Zpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnZpc2libGVJbnRlcm5hbC5uZXh0KHRoaXMuaXNWaXNpYmxlKTtcbiAgICAgICAgICBpZiAodGhpcy52aXNpYmxlLm9ic2VydmVkKSB7XG4gICAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMudmlzaWJsZS5uZXh0KHRoaXMuaXNWaXNpYmxlKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZ2xvYmFsQ29uZmlnLm9uSGlkZGVuPy4oaW5zdGFuY2UpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zZXRTdGF0dXMoKTtcbiAgICAgIHRoaXMuc2V0UHJvcHModGhpcy5wcm9wcyk7XG5cbiAgICAgIHRoaXMudmFyaWF0aW9uID09PSAnY29udGV4dE1lbnUnICYmIHRoaXMuaGFuZGxlQ29udGV4dE1lbnUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNvbHZlQ29udGVudChpbnN0YW5jZTogVGlwcHlJbnN0YW5jZSkge1xuICAgIGlmICghdGhpcy52aWV3T3B0aW9ucyQgJiYgIWlzU3RyaW5nKHRoaXMuY29udGVudCkpIHtcbiAgICAgIGlmIChpc0NvbXBvbmVudCh0aGlzLmNvbnRlbnQpKSB7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UuZGF0YSA9IHRoaXMuZGF0YTtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucyQgPSB7XG4gICAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHByb3ZpZGU6IFRJUFBZX1JFRixcbiAgICAgICAgICAgICAgICB1c2VWYWx1ZTogdGhpcy5pbnN0YW5jZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgcGFyZW50OiB0aGlzLmluamVjdG9yXG4gICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoaXNUZW1wbGF0ZVJlZih0aGlzLmNvbnRlbnQpKSB7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMkID0ge1xuICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICRpbXBsaWNpdDogdGhpcy5oaWRlLmJpbmQodGhpcyksXG4gICAgICAgICAgICBkYXRhOiB0aGlzLmRhdGFcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy52aWV3UmVmID0gdGhpcy52aWV3U2VydmljZS5jcmVhdGVWaWV3KHRoaXMuY29udGVudCwge1xuICAgICAgdmNyOiB0aGlzLnZjcixcbiAgICAgIC4uLnRoaXMudmlld09wdGlvbnMkXG4gICAgfSk7XG5cbiAgICAvLyBXZSBuZWVkIHRvIGNhbGwgZGV0ZWN0Q2hhbmdlcyBmb3Igb25QdXNoIGNvbXBvbmVudHMgdG8gdXBkYXRlIHRoZSBjb250ZW50XG4gICAgaWYgKHRoaXMuZGV0ZWN0Q2hhbmdlc0NvbXBvbmVudCAmJiBpc0NvbXBvbmVudCh0aGlzLmNvbnRlbnQpKSB7XG4gICAgICB0aGlzLnZpZXdSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIGxldCBjb250ZW50ID0gdGhpcy52aWV3UmVmLmdldEVsZW1lbnQoKTtcblxuICAgIGlmIChjb2VyY2VCb29sZWFuSW5wdXQodGhpcy51c2VUZXh0Q29udGVudCkpIHtcbiAgICAgIGNvbnRlbnQgPSBpbnN0YW5jZS5yZWZlcmVuY2UudGV4dENvbnRlbnQ7XG4gICAgfVxuXG4gICAgaWYgKGlzU3RyaW5nKGNvbnRlbnQpICYmIHRoaXMuZ2xvYmFsQ29uZmlnLmJlZm9yZVJlbmRlcikge1xuICAgICAgY29udGVudCA9IHRoaXMuZ2xvYmFsQ29uZmlnLmJlZm9yZVJlbmRlcihjb250ZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVDb250ZXh0TWVudSgpIHtcbiAgICBmcm9tRXZlbnQodGhpcy5ob3N0LCAnY29udGV4dG1lbnUnKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgdGhpcy5pbnN0YW5jZS5zZXRQcm9wcyh7XG4gICAgICAgICAgZ2V0UmVmZXJlbmNlQ2xpZW50UmVjdDogKCkgPT5cbiAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgIHdpZHRoOiAwLFxuICAgICAgICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgICAgICAgIHRvcDogZXZlbnQuY2xpZW50WSxcbiAgICAgICAgICAgICAgYm90dG9tOiBldmVudC5jbGllbnRZLFxuICAgICAgICAgICAgICBsZWZ0OiBldmVudC5jbGllbnRYLFxuICAgICAgICAgICAgICByaWdodDogZXZlbnQuY2xpZW50WFxuICAgICAgICAgICAgfSBhcyBET01SZWN0UmVhZE9ubHkpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuaW5zdGFuY2Uuc2hvdygpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlRXNjYXBlQnV0dG9uKCk6IHZvaWQge1xuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBmcm9tRXZlbnQoZG9jdW1lbnQuYm9keSwgJ2tleWRvd24nKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKHsgY29kZSB9OiBLZXlib2FyZEV2ZW50KSA9PiBjb2RlID09PSAnRXNjYXBlJyksXG4gICAgICAgICAgdGFrZVVudGlsKG1lcmdlKHRoaXMuZGVzdHJveWVkLCB0aGlzLnZpc2libGVJbnRlcm5hbC5waXBlKGZpbHRlcih2ID0+ICF2KSkpKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5oaWRlKCkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNoZWNrT3ZlcmZsb3coaXNFbGVtZW50T3ZlcmZsb3c6IGJvb2xlYW4pIHtcbiAgICBpZiAoaXNFbGVtZW50T3ZlcmZsb3cpIHtcbiAgICAgIGlmICghdGhpcy5pbnN0YW5jZSkge1xuICAgICAgICB0aGlzLmNyZWF0ZUluc3RhbmNlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmluc3RhbmNlLmVuYWJsZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluc3RhbmNlPy5kaXNhYmxlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGxpc3RlblRvSG9zdFJlc2l6ZSgpIHtcbiAgICBkaW1lbnNpb25zQ2hhbmdlcyh0aGlzLmhvc3QpXG4gICAgICAucGlwZSh0YWtlVW50aWwobWVyZ2UodGhpcy5kZXN0cm95ZWQsIHRoaXMudmlzaWJsZUludGVybmFsKSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRJbnN0YW5jZVdpZHRoKHRoaXMuaW5zdGFuY2UsIHRoaXMuaG9zdFdpZHRoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldEluc3RhbmNlV2lkdGgoaW5zdGFuY2U6IEluc3RhbmNlLCB3aWR0aDogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgY29uc3QgaW5QaXhlbHMgPSBjb2VyY2VDc3NQaXhlbFZhbHVlKHdpZHRoKTtcbiAgICBpbnN0YW5jZS5wb3BwZXIuc3R5bGUud2lkdGggPSBpblBpeGVscztcbiAgICBpbnN0YW5jZS5wb3BwZXIuc3R5bGUubWF4V2lkdGggPSBpblBpeGVscztcbiAgICAoaW5zdGFuY2UucG9wcGVyLmZpcnN0RWxlbWVudENoaWxkIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5tYXhXaWR0aCA9IGluUGl4ZWxzO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ2hhbmdlZDxUIGV4dGVuZHMgb2JqZWN0PihrZXk6IGtleW9mIFQsIGNoYW5nZXM6IFQpIHtcbiAgcmV0dXJuIGtleSBpbiBjaGFuZ2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29lcmNlQm9vbGVhbklucHV0KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgYCR7dmFsdWV9YCAhPT0gJ2ZhbHNlJztcbn1cbiJdfQ==
|