@arsedizioni/ars-utils 18.2.113 → 18.2.115
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/clipper.ui/ui/document-manager/document-manager.d.ts +0 -1
- package/clipper.ui/ui/document-menu/document-menu.component.d.ts +1 -1
- package/esm2022/clipper.ui/ui/document/document.component.mjs +2 -1
- package/esm2022/clipper.ui/ui/document-manager/document-manager.mjs +42 -6
- package/esm2022/clipper.ui/ui/search-result-manager/search-result-manager.mjs +9 -3
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +45 -5
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
- package/package.json +7 -7
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { Clipboard } from '@angular/cdk/clipboard';
|
|
2
|
-
import { Component, inject } from '@angular/core';
|
|
2
|
+
import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
|
|
3
3
|
import { ClipperMessages, ClipperModel, ClipperModule, ClipperQueryReferencesMode, ClipperService } from '@arsedizioni/ars-utils/clipper.common';
|
|
4
4
|
import { BroadcastService, SystemUtils } from '@arsedizioni/ars-utils/core';
|
|
5
5
|
import { ApplicationDialogService, SendToDialogComponent } from '@arsedizioni/ars-utils/ui.application';
|
|
6
6
|
import saveAs from 'file-saver';
|
|
7
7
|
import { ClipperDocumentsUtils } from '../../documents';
|
|
8
|
+
import { ClipperReferencesComponent } from '../references/references.component';
|
|
9
|
+
import { ClipperDocumentComponent } from '../document/document.component';
|
|
8
10
|
import * as i0 from "@angular/core";
|
|
9
11
|
export class ClipperDocumentManager {
|
|
10
12
|
constructor() {
|
|
@@ -258,7 +260,20 @@ export class ClipperDocumentManager {
|
|
|
258
260
|
*/
|
|
259
261
|
openDocument(documentId, query = null) {
|
|
260
262
|
if (documentId) {
|
|
261
|
-
|
|
263
|
+
this.dialogService.open(ClipperDocumentComponent, {
|
|
264
|
+
ariaLabel: 'documento',
|
|
265
|
+
autoFocus: false,
|
|
266
|
+
restoreFocus: false,
|
|
267
|
+
disableClose: false,
|
|
268
|
+
data: {
|
|
269
|
+
id: documentId,
|
|
270
|
+
query: query
|
|
271
|
+
},
|
|
272
|
+
minWidth: '375px',
|
|
273
|
+
maxWidth: '1400px',
|
|
274
|
+
width: '99%',
|
|
275
|
+
height: '99%'
|
|
276
|
+
});
|
|
262
277
|
}
|
|
263
278
|
}
|
|
264
279
|
/**
|
|
@@ -269,10 +284,26 @@ export class ClipperDocumentManager {
|
|
|
269
284
|
* @param anchor: the optional document anchor
|
|
270
285
|
* @param anchorTitle: : the optional anchor title
|
|
271
286
|
* @param update: true if is an update
|
|
272
|
-
* @return the references dialog instance
|
|
273
287
|
*/
|
|
274
288
|
openReferences(documentId, mode = ClipperQueryReferencesMode.ReferencesIn, model = null, anchor = null, anchorTitle = null, update = true) {
|
|
275
|
-
const d =
|
|
289
|
+
const d = this.dialogService.open(ClipperReferencesComponent, {
|
|
290
|
+
ariaLabel: 'documento',
|
|
291
|
+
autoFocus: false,
|
|
292
|
+
restoreFocus: false,
|
|
293
|
+
disableClose: false,
|
|
294
|
+
data: {
|
|
295
|
+
id: documentId,
|
|
296
|
+
mode: mode,
|
|
297
|
+
model: model,
|
|
298
|
+
anchor: anchor,
|
|
299
|
+
anchorTitle: anchorTitle,
|
|
300
|
+
update: update,
|
|
301
|
+
},
|
|
302
|
+
minWidth: '375px',
|
|
303
|
+
maxWidth: '1000px',
|
|
304
|
+
width: '99%',
|
|
305
|
+
height: '99%'
|
|
306
|
+
});
|
|
276
307
|
d.afterClosed()
|
|
277
308
|
.subscribe((r) => {
|
|
278
309
|
if (r && r.documentId) {
|
|
@@ -385,13 +416,18 @@ export class ClipperDocumentManager {
|
|
|
385
416
|
this.broadcastService.sendMessage(ClipperMessages.INTEROP_RS_USAGE_REPORT, document);
|
|
386
417
|
}
|
|
387
418
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ClipperDocumentManager, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
388
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: ClipperDocumentManager, isStandalone: true, selector: "ng-component", ngImport: i0, template: '<div></div>', isInline: true }); }
|
|
419
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: ClipperDocumentManager, isStandalone: true, selector: "ng-component", ngImport: i0, template: '<div></div>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
389
420
|
}
|
|
390
421
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ClipperDocumentManager, decorators: [{
|
|
391
422
|
type: Component,
|
|
392
423
|
args: [{
|
|
393
424
|
template: '<div></div>',
|
|
394
425
|
standalone: true,
|
|
426
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
427
|
+
imports: [
|
|
428
|
+
ClipperReferencesComponent,
|
|
429
|
+
ClipperDocumentComponent
|
|
430
|
+
]
|
|
395
431
|
}]
|
|
396
432
|
}] });
|
|
397
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fycy11dGlscy9jbGlwcGVyLnVpL3VpL2RvY3VtZW50LW1hbmFnZXIvZG9jdW1lbnQtbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUF1QixlQUFlLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSwwQkFBMEIsRUFBdUIsY0FBYyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDM0wsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hHLE9BQU8sTUFBTSxNQUFNLFlBQVksQ0FBQztBQUNoQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFReEQsTUFBTSxPQUFPLHNCQUFzQjtJQUpuQztRQU1jLGNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUIsbUJBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDeEMscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDNUMsa0JBQWEsR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztLQW9aOUQ7SUFsWkc7OztHQUdEO0lBQ0MsU0FBUyxDQUFDLElBQXlCO1FBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRTtZQUFFLE9BQU87UUFDNUMsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPO1FBQ2xCLElBQUksQ0FBQyxhQUFh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Q0FBQyxTQUFnQztRQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUU7WUFBRSxPQUFPO1FBQzlDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFRDs7O09BR0c7SUFDSCxjQUFjLENBQUMsUUFBNkI7UUFDeEMsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRTtZQUFFLE9BQU87UUFDOUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsdUJBQXVCLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUVEOzs7TUFHRTtJQUNGLGNBQWMsQ0FBQyxRQUE2QjtRQUN4QyxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFO1lBQUUsT0FBTztRQUM5QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN6RixDQUFDOzhHQXRaUSxzQkFBc0I7a0dBQXRCLHNCQUFzQix3RUFIckIsYUFBYTs7MkZBR2Qsc0JBQXNCO2tCQUpsQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxhQUFhO29CQUN2QixVQUFVLEVBQUUsSUFBSTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDbGlwYm9hcmQgfSBmcm9tICdAYW5ndWxhci9jZGsvY2xpcGJvYXJkJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2xpcHBlckRvY3VtZW50SW5mbywgQ2xpcHBlck1lc3NhZ2VzLCBDbGlwcGVyTW9kZWwsIENsaXBwZXJNb2R1bGUsIENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLCBDbGlwcGVyU2VhcmNoUGFyYW1zLCBDbGlwcGVyU2VydmljZSB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY2xpcHBlci5jb21tb24nO1xyXG5pbXBvcnQgeyBCcm9hZGNhc3RTZXJ2aWNlLCBTeXN0ZW1VdGlscyB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY29yZSc7XHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uRGlhbG9nU2VydmljZSwgU2VuZFRvRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy91aS5hcHBsaWNhdGlvbic7XHJcbmltcG9ydCBzYXZlQXMgZnJvbSAnZmlsZS1zYXZlcic7XHJcbmltcG9ydCB7IENsaXBwZXJEb2N1bWVudHNVdGlscyB9IGZyb20gJy4uLy4uL2RvY3VtZW50cyc7XHJcbmltcG9ydCB7IENsaXBwZXJSZWZlcmVuY2VEaWFsb2dDbG9zZUluZm8gfSBmcm9tICcuLi9yZWZlcmVuY2VzL3JlZmVyZW5jZXMuY29tcG9uZW50JztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHRlbXBsYXRlOiAnPGRpdj48L2Rpdj4nLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENsaXBwZXJEb2N1bWVudE1hbmFnZXIge1xyXG5cclxuICAgIHByb3RlY3RlZCBjbGlwYm9hcmQgPSBpbmplY3QoQ2xpcGJvYXJkKTtcclxuICAgIHByb3RlY3RlZCBjbGlwcGVyU2VydmljZSA9IGluamVjdChDbGlwcGVyU2VydmljZSk7XHJcbiAgICBwcm90ZWN0ZWQgYnJvYWRjYXN0U2VydmljZSA9IGluamVjdChCcm9hZGNhc3RTZXJ2aWNlKTtcclxuICAgIHByb3RlY3RlZCBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KEFwcGxpY2F0aW9uRGlhbG9nU2VydmljZSk7XHJcblxyXG4gICAgLyoqXHJcbiAqIEV4cG9ydCBhIGRvY3VtZW50IGluIHBkZiBmb3JtYXRcclxuICogQHBhcmFtIGl0ZW0gOiB0aGUgZG9jdW1lbnQgdG8gZXhwb3J0XHJcbiAqL1xyXG4gICAgZXhwb3J0UGRmKGl0ZW06IENsaXBwZXJEb2N1bWVudEluZm8pIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2xpcHBlclNlcnZpY2UubG9nZ2VkSW4oKSkgcmV0dXJuO1xyXG4gICAgICAgIGlmICghaXRlbSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZVxyXG4gICAgICAgICAgICAuY29uZmlybShcIkNvbmZlcm1pIGwnZXNwb3J0YXppb25lP1wiLCAnQXR0ZW56aW9uZSEnKVxyXG4gICAgICAgICAgICAuY29tcG9uZW50SW5zdGFuY2UuY2hvb3Nlbi5zdWJzY3JpYmUoKHI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHIucmVzdWx0ID09PSAnb2snKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWQgPSBpdGVtLmlkIHx8IGl0ZW0uZG9jdW1lbnRJZDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYnVzeSgnRXNwb3J0YXppb25lIGluIGNvcnNvLi4uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGlwcGVyU2VydmljZS5leHBvcnRQZGYoaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogKHIyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlQXMocjIsIChpdGVtLnRpdGxlMSA/IGl0ZW0udGl0bGUxIDogaWQpICsgJy5wZGYnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jbGVhckJ1c3koKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2F2ZSBjdXJyZW50IGRvY3VtZW50IGxpc3Qgb3IganVzdCB0aGUgc2VsZWN0ZWQgZG9jdW1lbnRzIGFzIGEgY3N2XHJcbiAgICAgKiBAcGFyYW0gaXRlbXM6IHRoZSBpdGVtIGxpc3RcclxuICAgICAqIEBwYXJhbSBzZWFyY2hQYXJhbXM6IHRoZSBzZWFyY2ggcGFyYW1zXHJcbiAgICAgKi9cclxuICAgIGV4cG9ydEl0ZW1zKGl0ZW1zOiBDbGlwcGVyRG9jdW1lbnRJbmZvW10sIHNlYXJjaFBhcmFtczogQ2xpcHBlclNlYXJjaFBhcmFtcyB8IG51bGwgPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKCkpIHJldHVybjtcclxuICAgICAgICBjb25zdCBpZHMgPSBpdGVtcz8ubWFwKG4gPT4gbi5kb2N1bWVudElkID8/IG4uaWQpID8/IFtdO1xyXG4gICAgICAgIGxldCBtb2RlbDogYW55ID0geyBpZHM6IGlkcywgcXVlcnk6IG51bGwsIGZvcm1hdDogMSB9O1xyXG4gICAgICAgIGlmIChtb2RlbC5pZHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIG1vZGVsLnF1ZXJ5ID0gc2VhcmNoUGFyYW1zO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYnVzeSgnU2FsdmF0YWdnaW8gaW4gY29yc28uLi4nKTtcclxuICAgICAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLmV4cG9ydChtb2RlbClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiAocikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNhdmVBcyhyLCAnZWxlbmNvLmNzdicpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNsZWFyQnVzeSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFyY2hpdmUgYSBsaXN0IG9mIGl0ZW1zXHJcbiAgICAgKiBAcGFyYW0gaXRlbXM6IHRoZSBpdGVtIGxpc3RcclxuICAgICAqL1xyXG4gICAgYWRkVG9BcmNoaXZlKGl0ZW1zOiBDbGlwcGVyRG9jdW1lbnRJbmZvW10pIHtcclxuICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLkNPTU1BTkRfQVJDSElWRV9BREQsIGl0ZW1zKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhIG5ldyBkZWFkbGluZVxyXG4gICAgICogQHBhcmFtIGl0ZW0gOiB0aGUgaXRlbSB0byBhZGRcclxuICAgICAqL1xyXG4gICAgYWRkVG9DYWxlbmRhcihpdGVtOiBDbGlwcGVyRG9jdW1lbnRJbmZvKSB7XHJcbiAgICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5DT01NQU5EX0NBTEVOREFSX0FERCwgaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAqIEFkZCBhIGxpc3Qgb2YgaXRlbXMgdG8gd29ya2luZyBkb2N1bWVudHNcclxuICogQHBhcmFtIGl0ZW1zIDogdGhlIGl0ZW0gbGlzdFxyXG4gKi9cclxuICAgIGFkZEl0ZW1zVG9Xb3JraW5nRG9jdW1lbnRzKGl0ZW1zOiBDbGlwcGVyRG9jdW1lbnRJbmZvW10pIHtcclxuICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLkNPTU1BTkRfV09SS0lOR19BREQsIGl0ZW1zKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuKiBBZGQgYSBsaXN0IG9mIGl0ZW1zIHRvIHdvcmtpbmcgZG9jdW1lbnRzXHJcbiogQHBhcmFtIGl0ZW1zIDogdGhlIGl0ZW0gbGlzdFxyXG4qL1xyXG4gICAgYWRkSXRlbXNUb0JhZyhpdGVtczogQ2xpcHBlckRvY3VtZW50SW5mb1tdKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKCkpIHJldHVybjtcclxuICAgICAgICBjb25zdCBpZHMgPSBpdGVtcz8ubWFwKG4gPT4gbi5kb2N1bWVudElkID8/IG4uaWQpID8/IFtdO1xyXG4gICAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2UuYWRkVG9CYWcoaWRzKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAocjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudG9hc3QoJ09wZXJhemlvbmUgY29tcGxldGF0YSBjb24gc3VjY2Vzc28uJylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgbWV0YWRhdGEgdG8gY2xpcGJvYXJkXHJcbiAgICAgKiBAcGFyYW0gaXRlbSA6IHRoZSBpdGVtIHRvIGNvcHlcclxuICAgICAqL1xyXG4gICAgY29weU1ldGFkYXRhVG9DbGlwYm9hcmQoaXRlbTogQ2xpcHBlckRvY3VtZW50SW5mbykge1xyXG4gICAgICAgIGlmICghaXRlbSB8fCBpdGVtLm1vZGVsID09PSBDbGlwcGVyTW9kZWwuQ29vcmRpbmFtZW50bykgcmV0dXJuO1xyXG4gICAgICAgIGxldCBtZXRhID1cclxuICAgICAgICAgICAgKGl0ZW0uaWQgPz8gaXRlbS5kb2N1bWVudElkKSArICdcXHQnICtcclxuICAgICAgICAgICAgaXRlbS50aXRsZTE/LnJlcGxhY2VBbGwoXCJcXHJcXG5cIiwgXCIgXCIpICsgJ1xcdCc7XHJcbiAgICAgICAgaWYgKGl0ZW0udGl0bGUyKVxyXG4gICAgICAgICAgICBtZXRhICs9IGl0ZW0udGl0bGUyLnJlcGxhY2VBbGwoXCJcXHJcXG5cIiwgXCIgXCIpO1xyXG4gICAgICAgIG1ldGEgKz0gJ1xcdCc7XHJcbiAgICAgICAgaWYgKGl0ZW0ubnVtYmVyKVxyXG4gICAgICAgICAgICBtZXRhICs9IGl0ZW0ubnVtYmVyO1xyXG4gICAgICAgIG1ldGEgKz0gJ1xcdCc7XHJcbiAgICAgICAgaWYgKGl0ZW0ucHVibGlzaGluZ0RhdGUpIHtcclxuICAgICAgICAgICAgaXRlbS5wdWJsaXNoaW5nRGF0ZSA9IG5ldyBEYXRlKGl0ZW0ucHVibGlzaGluZ0RhdGUpO1xyXG4gICAgICAgICAgICBtZXRhICs9IFN5c3RlbVV0aWxzLmZvcm1hdERhdGUoaXRlbS5wdWJsaXNoaW5nRGF0ZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLmRhdGUpIHtcclxuICAgICAgICAgICAgaXRlbS5kYXRlID0gbmV3IERhdGUoaXRlbS5kYXRlKTtcclxuICAgICAgICAgICAgbWV0YSArPSBTeXN0ZW1VdGlscy5mb3JtYXREYXRlKGl0ZW0uZGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1ldGEgKz0gJ1xcdCc7XHJcbiAgICAgICAgaWYgKGl0ZW0ub3JpZ2luRGVzY3JpcHRpb24pXHJcbiAgICAgICAgICAgIG1ldGEgKz0gaXRlbS5vcmlnaW5EZXNjcmlwdGlvblxyXG4gICAgICAgIHRoaXMuY2xpcGJvYXJkLmNvcHkobWV0YSk7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRvYXN0KFwiTWV0YWRhdGkgY29waWF0aSBuZWdsaSBhcHB1bnRpLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNob3cgYSBkb2N1bWVudCBwZXJtYWxpbmtcclxuICAgICAqIEBwYXJhbSBpdGVtIDogdGhlIGl0ZW0gdG8gc2hvdyB0aGUgbGluayBmb3JcclxuICAgICAqL1xyXG4gICAgc2hvd0xpbmsoaXRlbTogYW55KSB7XHJcbiAgICAgICAgaWYgKCFpdGVtKSByZXR1cm47XHJcbiAgICAgICAgbGV0IGlkID0gaXRlbS5pZCA/IGl0ZW0uaWQgOiBpdGVtLmRvY3VtZW50SWQ7XHJcbiAgICAgICAgbGV0IGNoYW5uZWxzID0gaXRlbS5jaGFubmVsTmFtZVxyXG4gICAgICAgICAgICA/ICdDYW5hbGk6ICcgKyBpdGVtLmNoYW5uZWxOYW1lICsgJzxicj4nXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgbGV0IG9yaWdpbiA9IGl0ZW0ub3JpZ2luXHJcbiAgICAgICAgICAgID8gJ09yaWdpbmU6ICcgK1xyXG4gICAgICAgICAgICBpdGVtLm9yaWdpbiArXHJcbiAgICAgICAgICAgICcgLSAnICtcclxuICAgICAgICAgICAgKGl0ZW0ub3JpZ2luRGVzY3JpcHRpb24gPyBpdGVtLm9yaWdpbkRlc2NyaXB0aW9uIDogJycpICtcclxuICAgICAgICAgICAgJzxicj4nXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgbGV0IHRvcGljcyA9IGl0ZW0udG9waWNzID8gJ0FyZ29tZW50bzogJyArIGl0ZW0udG9waWNzICsgJzxicj4nIDogJyc7XHJcbiAgICAgICAgaWYgKCFpZCkgcmV0dXJuO1xyXG4gICAgICAgIGxldCBtZXNzYWdlID1cclxuICAgICAgICAgICAgXCI8cCA+SWwgbGluayBjaGUgdHJvdmkgcXVpIHNvdHRvIMOoIHVuIHJpZmVyaW1lbnRvIGRpcmV0dG8gYWwgZG9jdW1lbnRvIHNlbGV6aW9uYXRvLjwvcD5cIiArXHJcbiAgICAgICAgICAgIFwiPHAgPkxvIHB1b2kgdXRpbGl6emFyZSBuZWxsYSB0dWEgZG9jdW1lbnRhemlvbmUgbyBpbnZpYXJsbyBwZXIgZW1haWwgYWQgdW4gdHVvIGNvbGxlZ2EuIExhIHBlcnNvbmEgY2hlIGRlc2lkZXJlcsOgIHZpc3VhbGl6emFyZSBpbCBkb2N1bWVudG8gZG92csOgIG5lY2Vzc2FyaWFtZW50ZSBlc3NlcmUgdW4gdXRlbnRlIGFiYm9uYXRvLjwvcD5cIiArXHJcbiAgICAgICAgICAgIFwiPHAgPlNlbGV6aW9uYSBlIGNvcGlhIChmYWkgQ1RSTCtDKSBpbCBsaW5rIHF1aSBzb3R0by48L3A+XCIgK1xyXG4gICAgICAgICAgICBcIjxkaXYgY2xhc3M9J3NtYWxsIGFjY2VudCc+XCIgK1xyXG4gICAgICAgICAgICAnaHR0cHM6Ly9jbGlwcGVyLmFyc2VkaXppb25pLml0Lz9pZD0nICtcclxuICAgICAgICAgICAgaWQgK1xyXG4gICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgICAgICc8YnI+JyArXHJcbiAgICAgICAgICAgICc8aHI+JyArXHJcbiAgICAgICAgICAgICc8cCBjbGFzcz1cInNtYWxsXCI+JyArXHJcbiAgICAgICAgICAgIGNoYW5uZWxzICtcclxuICAgICAgICAgICAgb3JpZ2luICtcclxuICAgICAgICAgICAgdG9waWNzXHJcbiAgICAgICAgJzwvcD4nO1xyXG5cclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuaW5mbyhtZXNzYWdlLCAnQ29waWEgbGluaycsICdDaGl1ZGknKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlbmQgZG9jdW1lbnRzIGxpbmtzIGJ5IGVtYWlsXHJcbiAgICAgKiBAcGFyYW0gaXRlbXMgOiB0aGUgZG9jdW1lbnQgbGlzdFxyXG4gICAgICovXHJcbiAgICBzZW5kSXRlbXNUbyhpdGVtczogQ2xpcHBlckRvY3VtZW50SW5mb1tdKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKCkpIHJldHVybjtcclxuICAgICAgICBpZiAoIWl0ZW1zIHx8IGl0ZW1zLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGQgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihTZW5kVG9EaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgYXJpYUxhYmVsOiAnaW52aWEgZG9jdW1lbnRpIHBlciBlbWFpbCcsXHJcbiAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3RvcmVGb2N1czogZmFsc2UsXHJcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGNsb3NlT25OYXZpZ2F0aW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgaW5mbzpcclxuICAgICAgICAgICAgICAgICAgICAnUHVvaSBpbnZpYXJlIGkgZG9jdW1lbnRpIGEgY2hpIHZ1b2kgbWEsIHBlciBwb3RlcmxpIHZpc3VhbGl6emFyZSwgw6ggbmVjZXNzYXJpbyBlc3NlcmUgdW4gdXRlbnRlIGFiYm9uYXRvLicsXHJcbiAgICAgICAgICAgICAgICBjb3VudDogaXRlbXMubGVuZ3RoLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBtaW5XaWR0aDogJzM3NXB4JyxcclxuICAgICAgICAgICAgbWF4V2lkdGg6ICc2MDBweCcsXHJcbiAgICAgICAgICAgIHdpZHRoOiAnOTklJyxcclxuICAgICAgICB9KTtcclxuICAgICAgICBkLmNvbXBvbmVudEluc3RhbmNlLmRvbmVcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByLmlkcyA9IGl0ZW1zPy5tYXAobiA9PiBuLmRvY3VtZW50SWQgPz8gbi5pZCkgPz8gW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYnVzeSgnSW52aW8gaW4gY29yc28uLi4nKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2Uuc2VuZFRvKHIpXHJcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6IChyMjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXIyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuZXJyb3IocjIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50b2FzdCgnSW52aW8gY29tcGxldGF0byBjb24gc3VjY2Vzc28uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNsZWFyQnVzeSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3BsYXkgYSBkb2N1bWVudCByZXBvcnRcclxuICAgICAqIEBwYXJhbSBkb2N1bWVudElkIDogdGhlIGRvY3VtZW50IGlkXHJcbiAgICAgKiBAcGFyYW0gdGl0bGU6IHRoZSBkb2N1bWVudCBzaG9ydCB0aXRsZVxyXG4gICAgICovXHJcbiAgICBvcGVuUmVwb3J0KGRvY3VtZW50SWQ6IHN0cmluZywgdGl0bGU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsKSB7XHJcbiAgICAgICAgQ2xpcHBlckRvY3VtZW50c1V0aWxzLm9wZW5SZXBvcnQoXHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZSxcclxuICAgICAgICAgICAgdGhpcy5jbGlwcGVyU2VydmljZSxcclxuICAgICAgICAgICAgZG9jdW1lbnRJZCxcclxuICAgICAgICAgICAgdGl0bGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcGxheSBhIGRvY3VtZW50IHJlcG9ydFxyXG4gICAgICogQHBhcmFtIGl0ZW0gOiB0aGUgZG9jdW1lbnRcclxuICAgICAqL1xyXG4gICAgcmVwb3J0KGl0ZW06IENsaXBwZXJEb2N1bWVudEluZm8pIHtcclxuICAgICAgICBpZiAoIWl0ZW0pIHJldHVybjtcclxuICAgICAgICBpZiAoaXRlbS5tb2RlbCAhPSBDbGlwcGVyTW9kZWwuTm9ybWF0aXZhVmlnZW50ZSAmJiBpdGVtLm1vZGVsICE9IENsaXBwZXJNb2RlbC5TY2FkZW56ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuaW5mbyhcIlF1ZXN0YSBmdW56aW9uYWxpdMOgIG5vbiDDqCBkaXNwb25pYmlsZSBwZXIgcXVlc3RvIHRpcG8gZGkgZG9jdW1lbnRvLlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMub3BlblJlcG9ydChpdGVtLmRvY3VtZW50SWQsIGl0ZW0udGl0bGUxKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIE9wZW4gYW4gaXRlbVxyXG4gICAgKiBUaGlzIHNob3VsZCBiZSBhbHdheXMgb3ZlcnJpZGRlblxyXG4gICAgKiBAcGFyYW0gZG9jdW1lbnRJZCA6IHRoZSBkb2N1bWVudCBpZFxyXG4gICAgKiBAcGFyYW0gcXVlcnk6IHRoZSBxdWVyeSBzdHJpbmdcclxuICAgICogQHBhcmFtIG5ld1dpbmRvdzogdHJ1ZSBpZiB0aGUgZG9jdW1lbnQgbXVzdCBiZSBvcGVuIGludG8gYSBuZXcgd2luZG93XHJcbiAgICAqL1xyXG4gICAgb3Blbihkb2N1bWVudElkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLCBxdWVyeTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwsIG5ld1dpbmRvdzogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgaWYgKCFuZXdXaW5kb3cpIHtcclxuICAgICAgICAgICAgdGhpcy5vcGVuRG9jdW1lbnQoZG9jdW1lbnRJZCwgcXVlcnkpO1xyXG4gICAgICAgIH0gZWxzZSB3aW5kb3cub3BlbignL2RvY3VtZW50by8nICsgZG9jdW1lbnRJZCwgJ19ibGFuaycpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3BlbiBhIGRvY3VtZW50XHJcbiAgICAgKiBAcGFyYW0gZG9jdW1lbnRJZCA6IHRoZSBkb2N1bWVudCBpZFxyXG4gICAgICogQHBhcmFtIHF1ZXJ5OiB0aGUgcXVlcnkgc3RyaW5nXHJcbiAgICAgKi9cclxuICAgIG9wZW5Eb2N1bWVudChkb2N1bWVudElkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLCBxdWVyeTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwpIHtcclxuICAgICAgICBpZiAoZG9jdW1lbnRJZCkge1xyXG4gICAgICAgICAgICBDbGlwcGVyRG9jdW1lbnRzVXRpbHMub3BlbkRvY3VtZW50KHRoaXMuZGlhbG9nU2VydmljZSwgdGhpcy5jbGlwcGVyU2VydmljZSwgZG9jdW1lbnRJZCwgcXVlcnkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9wZW4gYSByZWZlcmVuY2VzIGRpYWxvZ1xyXG4gICAgICogQHBhcmFtIGRvY3VtZW50SWQgOiB0aGUgZG9jdW1lbnQgaWQgICBcclxuICAgICAqIEBwYXJhbSBtb2RlOiB0aGUgb3B0aW9uYWwgbW9kZS4gRGVmYXVsdCBpcyByZWZlcmVuY2VzIGluXHJcbiAgICAgKiBAcGFyYW0gbW9kZWw6IHRoZSBvcHRpb25hbCBkb2N1bWVudCBtb2RlbFxyXG4gICAgICogQHBhcmFtIGFuY2hvcjogdGhlIG9wdGlvbmFsIGRvY3VtZW50IGFuY2hvclxyXG4gICAgICogQHBhcmFtIGFuY2hvclRpdGxlOiA6IHRoZSBvcHRpb25hbCBhbmNob3IgdGl0bGVcclxuICAgICAqIEBwYXJhbSB1cGRhdGU6IHRydWUgaWYgaXMgYW4gdXBkYXRlXHJcbiAgICAgKiBAcmV0dXJuIHRoZSByZWZlcmVuY2VzIGRpYWxvZyBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBvcGVuUmVmZXJlbmNlcyhcclxuICAgICAgICBkb2N1bWVudElkOiBzdHJpbmcgfCBudWxsLFxyXG4gICAgICAgIG1vZGU6IENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlIHwgbnVsbCA9IENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLlJlZmVyZW5jZXNJbixcclxuICAgICAgICBtb2RlbDogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwsXHJcbiAgICAgICAgYW5jaG9yOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCxcclxuICAgICAgICBhbmNob3JUaXRsZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwsXHJcbiAgICAgICAgdXBkYXRlOiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZCA9IHRydWVcclxuICAgICkge1xyXG4gICAgICAgIGNvbnN0IGQgPSBDbGlwcGVyRG9jdW1lbnRzVXRpbHMub3BlblJlZmVyZW5jZXMoXHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZSxcclxuICAgICAgICAgICAgdGhpcy5jbGlwcGVyU2VydmljZSxcclxuICAgICAgICAgICAgZG9jdW1lbnRJZCxcclxuICAgICAgICAgICAgbW9kZSxcclxuICAgICAgICAgICAgbW9kZWwsXHJcbiAgICAgICAgICAgIGFuY2hvcixcclxuICAgICAgICAgICAgYW5jaG9yVGl0bGUsXHJcbiAgICAgICAgICAgIHVwZGF0ZSk7XHJcbiAgICAgICAgZC5hZnRlckNsb3NlZCgpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHI6IENsaXBwZXJSZWZlcmVuY2VEaWFsb2dDbG9zZUluZm8pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyICYmIHIuZG9jdW1lbnRJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbihyLmRvY3VtZW50SWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hbmFnZSBjbGlwcGVyIGJhZ1xyXG4gICAgICovXHJcbiAgICBvcGVuQmFnKCkge1xyXG4gICAgICAgIENsaXBwZXJEb2N1bWVudHNVdGlscy5vcGVuQmFnKFxyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2UpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICogQ2hlY2tzIGlmIGEgbW9kdWxlIGlzIHN1cHBvcnRlZCBieSBSU1xyXG4gICAgKiBAcGFyYW0gbW9kdWxlIDogdGhlIG1vZHVsZSB0byBjaGVja1xyXG4gICAgKiBAcmV0dXJuczogdHJ1ZSBpZiB0aGUgbW9kdWxlIGlzIHN1cHBvcnRlZFxyXG4gICAgKi9cclxuICAgIGlzTW9kdWxlU3VwcG9ydGVkQnlSUyhtb2R1bGU6IENsaXBwZXJNb2R1bGUpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gbW9kdWxlID09PSBDbGlwcGVyTW9kdWxlLkdhenpldHRlQm9sbGV0dGluaUVGb250aURpdmVyc2UgfHxcclxuICAgICAgICAgICAgbW9kdWxlID09PSBDbGlwcGVyTW9kdWxlLk5vcm1hdGl2YVZpZ2VudGUgfHxcclxuICAgICAgICAgICAgbW9kdWxlID09PSBDbGlwcGVyTW9kdWxlLlNjYWRlbnplRVNlZ25hbGF6aW9uaTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiBhIG1vZGVsIGlzIHN1cHBvcnRlZCBieSBSU1xyXG4gICAgICogQHBhcmFtIG1vZGVsIDogdGhlIG1vZGVsIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJuczogdHJ1ZSBpZiB0aGUgbW9kZWwgaXMgc3VwcG9ydGVkXHJcbiAgICAgKi9cclxuICAgIGlzTW9kZWxTdXBwb3J0ZWRCeVJTKG1vZGVsOiBDbGlwcGVyTW9kZWwpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gbW9kZWwgPT09IENsaXBwZXJNb2RlbC5BZ2dpb3JuYW1lbnRvTm9ybWF0aXZvIHx8XHJcbiAgICAgICAgICAgIG1vZGVsID09PSBDbGlwcGVyTW9kZWwuTm9ybWF0aXZhVmlnZW50ZSB8fFxyXG4gICAgICAgICAgICBtb2RlbCA9PT0gQ2xpcHBlck1vZGVsLlNjYWRlbnplO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcmludCBjdXJyZW50IGRvY3VtZW50XHJcbiAgICAgKi9cclxuICAgIHByaW50KCkge1xyXG4gICAgICAgIGxldCBmID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NsaXBwZXItZG9jdW1lbnQtaWZyYW1lJykgYXMgYW55O1xyXG4gICAgICAgIGlmIChmKSB7XHJcbiAgICAgICAgICAgIGYuY29udGVudFdpbmRvdy5wb3N0TWVzc2FnZSgne1widHlwZVwiOiBcInByaW50XCJ9JywgJyonKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaW5kIGluIGN1cnJlbnQgZG9jdW1lbnRcclxuICAgICAqL1xyXG4gICAgZmluZCgpIHtcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuaW5mbygnUGVyIGNlcmNhcmUgbmVsIGRvY3VtZW50byBwcmVtaSBDVFJMICsgRi4nKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogQ2hlY2tzIGlmIGFsbCBkb2N1bWVudHMgYXJlIHN1cHBvcnRlZCBieSBSU1xyXG4gICAgKiBAcGFyYW0gaXRlbXMgOiB0aGUgbGlzdCBvZiBkb2N1bWVuc1xyXG4gICAgKiBAcmV0dXJuczogdHJ1ZSBpZiBhbGwgZG9jdW1lbnRzIHN1cHBvcnRzIFJTXHJcbiAgICAqL1xyXG4gICAgY2FuU3VwcG9ydFJTKGl0ZW1zOiBbXSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCBhbGxvdyA9IGZhbHNlO1xyXG4gICAgICAgIGl0ZW1zLmZvckVhY2goKG46IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBhbGxvdyA9IHRoaXMuaXNNb2RlbFN1cHBvcnRlZEJ5UlMobi5tb2RlbCk7XHJcbiAgICAgICAgICAgIGlmICghYWxsb3cpIHJldHVybjtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gYWxsb3c7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgUlMgaXMgZW5hYmxlZCBmb3IgYWxsIGdpdmVuIGRvY3VtZW50c1xyXG4gICAgICogQHBhcmFtIGRvY3VtZW50cyA6IHRoZSBkb2N1bWVudHMgdG8gY2hlY2tcclxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgYWxsYSBkb2N1bWVudHMgYXIgUlMgZW5hYmxlZFxyXG4gICAgICovXHJcbiAgICBSU19lbmFibGVkKGRvY3VtZW50czogQ2xpcHBlckRvY3VtZW50SW5mb1tdKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFkb2N1bWVudHMgfHwgZG9jdW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGxldCBhbGxvdyA9IGZhbHNlO1xyXG4gICAgICAgIGRvY3VtZW50cy5mb3JFYWNoKG4gPT4ge1xyXG4gICAgICAgICAgICBhbGxvdyA9IG4gJiYgKG4ubW9kZWwgPT09IENsaXBwZXJNb2RlbC5Ob3JtYXRpdmFWaWdlbnRlIHx8XHJcbiAgICAgICAgICAgICAgICBuLm1vZGVsID09PSBDbGlwcGVyTW9kZWwuQWdnaW9ybmFtZW50b05vcm1hdGl2byB8fFxyXG4gICAgICAgICAgICAgICAgbi5tb2RlbCA9PT0gQ2xpcHBlck1vZGVsLlNjYWRlbnplKTtcclxuICAgICAgICAgICAgaWYgKCFhbGxvdykgcmV0dXJuO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBhbGxvdztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogTmV3IGxhd1xyXG4gICAgKiBAcGFyYW0gZG9jdW1lbnRzOiB0aGUgYXJyYXkgb2YgZG9jdW1lbnRzIHRvIGxpbmsgdG8gdGhlIGxhd1xyXG4gICAgKi9cclxuICAgIFJTX25ld0xhdyhkb2N1bWVudHM6IENsaXBwZXJEb2N1bWVudEluZm9bXSkge1xyXG4gICAgICAgIGlmICghdGhpcy5jbGlwcGVyU2VydmljZS5zdXBwb3J0c1JTKCkpIHJldHVybjtcclxuICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLklOVEVST1BfUlNfTkVXX0xBVywgZG9jdW1lbnRzKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE5ldyBhY3Rpdml0eVxyXG4gICAgICogQHBhcmFtIGRvY3VtZW50OiB0aGUgZG9jdW1lbnQgdG8gbGluayB0byB0aGUgYWN0aXZpdHlcclxuICAgICAqL1xyXG4gICAgUlNfbmV3QWN0aXZpdHkoZG9jdW1lbnQ6IENsaXBwZXJEb2N1bWVudEluZm8pIHtcclxuICAgICAgICBpZiAoIWRvY3VtZW50KSByZXR1cm47XHJcbiAgICAgICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLnN1cHBvcnRzUlMoKSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuSU5URVJPUF9SU19ORVdfQUNUSVZJVFksIGRvY3VtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogRG9jdW1lbnQgdXNhZ2UgcmVwb3J0XHJcbiAgICAqIEBwYXJhbSBkb2N1bWVudDogdGhlIGxhd1xyXG4gICAgKi9cclxuICAgIFJTX3VzYWdlUmVwb3J0KGRvY3VtZW50OiBDbGlwcGVyRG9jdW1lbnRJbmZvKSB7XHJcbiAgICAgICAgaWYgKCFkb2N1bWVudCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICghdGhpcy5jbGlwcGVyU2VydmljZS5zdXBwb3J0c1JTKCkpIHJldHVybjtcclxuICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLklOVEVST1BfUlNfVVNBR0VfUkVQT1JULCBkb2N1bWVudCk7XHJcbiAgICB9XHJcblxyXG5cclxufVxyXG4iXX0=
|
|
433
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fycy11dGlscy9jbGlwcGVyLnVpL3VpL2RvY3VtZW50LW1hbmFnZXIvZG9jdW1lbnQtbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUF1QixlQUFlLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSwwQkFBMEIsRUFBdUIsY0FBYyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDM0wsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hHLE9BQU8sTUFBTSxNQUFNLFlBQVksQ0FBQztBQUNoQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsMEJBQTBCLEVBQW1DLE1BQU0sb0NBQW9DLENBQUM7QUFDakgsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7O0FBWTFFLE1BQU0sT0FBTyxzQkFBc0I7SUFUbkM7UUFXYyxjQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlCLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3hDLHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVDLGtCQUFhLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7S0F3YTlEO0lBdGFHOzs7R0FHRDtJQUNDLFNBQVMsQ0FBQyxJQUF5QjtRQUMv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QztJQUN6RixDQUFDO0lBRUQ7OztNQUdFO0lBQ0YsY0FBYyxDQUFDLFFBQTZCO1FBQ3hDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUU7WUFBRSxPQUFPO1FBQzlDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLHVCQUF1QixFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7OEdBMWFRLHNCQUFzQjtrR0FBdEIsc0JBQXNCLHdFQVJyQixhQUFhOzsyRkFRZCxzQkFBc0I7a0JBVGxDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFO3dCQUNMLDBCQUEwQjt3QkFDMUIsd0JBQXdCO3FCQUMzQjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENsaXBib2FyZCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jbGlwYm9hcmQnO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2xpcHBlckRvY3VtZW50SW5mbywgQ2xpcHBlck1lc3NhZ2VzLCBDbGlwcGVyTW9kZWwsIENsaXBwZXJNb2R1bGUsIENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLCBDbGlwcGVyU2VhcmNoUGFyYW1zLCBDbGlwcGVyU2VydmljZSB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY2xpcHBlci5jb21tb24nO1xyXG5pbXBvcnQgeyBCcm9hZGNhc3RTZXJ2aWNlLCBTeXN0ZW1VdGlscyB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY29yZSc7XHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uRGlhbG9nU2VydmljZSwgU2VuZFRvRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy91aS5hcHBsaWNhdGlvbic7XHJcbmltcG9ydCBzYXZlQXMgZnJvbSAnZmlsZS1zYXZlcic7XHJcbmltcG9ydCB7IENsaXBwZXJEb2N1bWVudHNVdGlscyB9IGZyb20gJy4uLy4uL2RvY3VtZW50cyc7XHJcbmltcG9ydCB7IENsaXBwZXJSZWZlcmVuY2VzQ29tcG9uZW50LCBDbGlwcGVyUmVmZXJlbmNlRGlhbG9nQ2xvc2VJbmZvIH0gZnJvbSAnLi4vcmVmZXJlbmNlcy9yZWZlcmVuY2VzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENsaXBwZXJEb2N1bWVudENvbXBvbmVudCB9IGZyb20gJy4uL2RvY3VtZW50L2RvY3VtZW50LmNvbXBvbmVudCc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICB0ZW1wbGF0ZTogJzxkaXY+PC9kaXY+JyxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgICBDbGlwcGVyUmVmZXJlbmNlc0NvbXBvbmVudCxcclxuICAgICAgICBDbGlwcGVyRG9jdW1lbnRDb21wb25lbnRcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIENsaXBwZXJEb2N1bWVudE1hbmFnZXIge1xyXG5cclxuICAgIHByb3RlY3RlZCBjbGlwYm9hcmQgPSBpbmplY3QoQ2xpcGJvYXJkKTtcclxuICAgIHByb3RlY3RlZCBjbGlwcGVyU2VydmljZSA9IGluamVjdChDbGlwcGVyU2VydmljZSk7XHJcbiAgICBwcm90ZWN0ZWQgYnJvYWRjYXN0U2VydmljZSA9IGluamVjdChCcm9hZGNhc3RTZXJ2aWNlKTtcclxuICAgIHByb3RlY3RlZCBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KEFwcGxpY2F0aW9uRGlhbG9nU2VydmljZSk7XHJcblxyXG4gICAgLyoqXHJcbiAqIEV4cG9ydCBhIGRvY3VtZW50IGluIHBkZiBmb3JtYXRcclxuICogQHBhcmFtIGl0ZW0gOiB0aGUgZG9jdW1lbnQgdG8gZXhwb3J0XHJcbiAqL1xyXG4gICAgZXhwb3J0UGRmKGl0ZW06IENsaXBwZXJEb2N1bWVudEluZm8pIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2xpcHBlclNlcnZpY2UubG9nZ2VkSW4oKSkgcmV0dXJuO1xyXG4gICAgICAgIGlmICghaXRlbSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZVxyXG4gICAgICAgICAgICAuY29uZmlybShcIkNvbmZlcm1pIGwnZXNwb3J0YXppb25lP1wiLCAnQXR0ZW56aW9uZSEnKVxyXG4gICAgICAgICAgICAuY29tcG9uZW50SW5zdGFuY2UuY2hvb3Nlbi5zdWJzY3JpYmUoKHI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHIucmVzdWx0ID09PSAnb2snKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWQgPSBpdGVtLmlkIHx8IGl0ZW0uZG9jdW1lbnRJZDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYnVzeSgnRXNwb3J0YXppb25lIGluIGNvcnNvLi4uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGlwcGVyU2VydmljZS5leHBvcnRQZGYoaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogKHIyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlQXMocjIsIChpdGVtLnRpdGxlMSA/IGl0ZW0udGl0bGUxIDogaWQpICsgJy5wZGYnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jbGVhckJ1c3koKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2F2ZSBjdXJyZW50IGRvY3VtZW50IGxpc3Qgb3IganVzdCB0aGUgc2VsZWN0ZWQgZG9jdW1lbnRzIGFzIGEgY3N2XHJcbiAgICAgKiBAcGFyYW0gaXRlbXM6IHRoZSBpdGVtIGxpc3RcclxuICAgICAqIEBwYXJhbSBzZWFyY2hQYXJhbXM6IHRoZSBzZWFyY2ggcGFyYW1zXHJcbiAgICAgKi9cclxuICAgIGV4cG9ydEl0ZW1zKGl0ZW1zOiBDbGlwcGVyRG9jdW1lbnRJbmZvW10sIHNlYXJjaFBhcmFtczogQ2xpcHBlclNlYXJjaFBhcmFtcyB8IG51bGwgPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKCkpIHJldHVybjtcclxuICAgICAgICBjb25zdCBpZHMgPSBpdGVtcz8ubWFwKG4gPT4gbi5kb2N1bWVudElkID8/IG4uaWQpID8/IFtdO1xyXG4gICAgICAgIGxldCBtb2RlbDogYW55ID0geyBpZHM6IGlkcywgcXVlcnk6IG51bGwsIGZvcm1hdDogMSB9O1xyXG4gICAgICAgIGlmIChtb2RlbC5pZHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIG1vZGVsLnF1ZXJ5ID0gc2VhcmNoUGFyYW1zO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYnVzeSgnU2FsdmF0YWdnaW8gaW4gY29yc28uLi4nKTtcclxuICAgICAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLmV4cG9ydChtb2RlbClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiAocikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNhdmVBcyhyLCAnZWxlbmNvLmNzdicpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNsZWFyQnVzeSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFyY2hpdmUgYSBsaXN0IG9mIGl0ZW1zXHJcbiAgICAgKiBAcGFyYW0gaXRlbXM6IHRoZSBpdGVtIGxpc3RcclxuICAgICAqL1xyXG4gICAgYWRkVG9BcmNoaXZlKGl0ZW1zOiBDbGlwcGVyRG9jdW1lbnRJbmZvW10pIHtcclxuICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLkNPTU1BTkRfQVJDSElWRV9BREQsIGl0ZW1zKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhIG5ldyBkZWFkbGluZVxyXG4gICAgICogQHBhcmFtIGl0ZW0gOiB0aGUgaXRlbSB0byBhZGRcclxuICAgICAqL1xyXG4gICAgYWRkVG9DYWxlbmRhcihpdGVtOiBDbGlwcGVyRG9jdW1lbnRJbmZvKSB7XHJcbiAgICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5DT01NQU5EX0NBTEVOREFSX0FERCwgaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAqIEFkZCBhIGxpc3Qgb2YgaXRlbXMgdG8gd29ya2luZyBkb2N1bWVudHNcclxuICogQHBhcmFtIGl0ZW1zIDogdGhlIGl0ZW0gbGlzdFxyXG4gKi9cclxuICAgIGFkZEl0ZW1zVG9Xb3JraW5nRG9jdW1lbnRzKGl0ZW1zOiBDbGlwcGVyRG9jdW1lbnRJbmZvW10pIHtcclxuICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLkNPTU1BTkRfV09SS0lOR19BREQsIGl0ZW1zKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuKiBBZGQgYSBsaXN0IG9mIGl0ZW1zIHRvIHdvcmtpbmcgZG9jdW1lbnRzXHJcbiogQHBhcmFtIGl0ZW1zIDogdGhlIGl0ZW0gbGlzdFxyXG4qL1xyXG4gICAgYWRkSXRlbXNUb0JhZyhpdGVtczogQ2xpcHBlckRvY3VtZW50SW5mb1tdKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKCkpIHJldHVybjtcclxuICAgICAgICBjb25zdCBpZHMgPSBpdGVtcz8ubWFwKG4gPT4gbi5kb2N1bWVudElkID8/IG4uaWQpID8/IFtdO1xyXG4gICAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2UuYWRkVG9CYWcoaWRzKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAocjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudG9hc3QoJ09wZXJhemlvbmUgY29tcGxldGF0YSBjb24gc3VjY2Vzc28uJylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgbWV0YWRhdGEgdG8gY2xpcGJvYXJkXHJcbiAgICAgKiBAcGFyYW0gaXRlbSA6IHRoZSBpdGVtIHRvIGNvcHlcclxuICAgICAqL1xyXG4gICAgY29weU1ldGFkYXRhVG9DbGlwYm9hcmQoaXRlbTogQ2xpcHBlckRvY3VtZW50SW5mbykge1xyXG4gICAgICAgIGlmICghaXRlbSB8fCBpdGVtLm1vZGVsID09PSBDbGlwcGVyTW9kZWwuQ29vcmRpbmFtZW50bykgcmV0dXJuO1xyXG4gICAgICAgIGxldCBtZXRhID1cclxuICAgICAgICAgICAgKGl0ZW0uaWQgPz8gaXRlbS5kb2N1bWVudElkKSArICdcXHQnICtcclxuICAgICAgICAgICAgaXRlbS50aXRsZTE/LnJlcGxhY2VBbGwoXCJcXHJcXG5cIiwgXCIgXCIpICsgJ1xcdCc7XHJcbiAgICAgICAgaWYgKGl0ZW0udGl0bGUyKVxyXG4gICAgICAgICAgICBtZXRhICs9IGl0ZW0udGl0bGUyLnJlcGxhY2VBbGwoXCJcXHJcXG5cIiwgXCIgXCIpO1xyXG4gICAgICAgIG1ldGEgKz0gJ1xcdCc7XHJcbiAgICAgICAgaWYgKGl0ZW0ubnVtYmVyKVxyXG4gICAgICAgICAgICBtZXRhICs9IGl0ZW0ubnVtYmVyO1xyXG4gICAgICAgIG1ldGEgKz0gJ1xcdCc7XHJcbiAgICAgICAgaWYgKGl0ZW0ucHVibGlzaGluZ0RhdGUpIHtcclxuICAgICAgICAgICAgaXRlbS5wdWJsaXNoaW5nRGF0ZSA9IG5ldyBEYXRlKGl0ZW0ucHVibGlzaGluZ0RhdGUpO1xyXG4gICAgICAgICAgICBtZXRhICs9IFN5c3RlbVV0aWxzLmZvcm1hdERhdGUoaXRlbS5wdWJsaXNoaW5nRGF0ZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLmRhdGUpIHtcclxuICAgICAgICAgICAgaXRlbS5kYXRlID0gbmV3IERhdGUoaXRlbS5kYXRlKTtcclxuICAgICAgICAgICAgbWV0YSArPSBTeXN0ZW1VdGlscy5mb3JtYXREYXRlKGl0ZW0uZGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1ldGEgKz0gJ1xcdCc7XHJcbiAgICAgICAgaWYgKGl0ZW0ub3JpZ2luRGVzY3JpcHRpb24pXHJcbiAgICAgICAgICAgIG1ldGEgKz0gaXRlbS5vcmlnaW5EZXNjcmlwdGlvblxyXG4gICAgICAgIHRoaXMuY2xpcGJvYXJkLmNvcHkobWV0YSk7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRvYXN0KFwiTWV0YWRhdGkgY29waWF0aSBuZWdsaSBhcHB1bnRpLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNob3cgYSBkb2N1bWVudCBwZXJtYWxpbmtcclxuICAgICAqIEBwYXJhbSBpdGVtIDogdGhlIGl0ZW0gdG8gc2hvdyB0aGUgbGluayBmb3JcclxuICAgICAqL1xyXG4gICAgc2hvd0xpbmsoaXRlbTogYW55KSB7XHJcbiAgICAgICAgaWYgKCFpdGVtKSByZXR1cm47XHJcbiAgICAgICAgbGV0IGlkID0gaXRlbS5pZCA/IGl0ZW0uaWQgOiBpdGVtLmRvY3VtZW50SWQ7XHJcbiAgICAgICAgbGV0IGNoYW5uZWxzID0gaXRlbS5jaGFubmVsTmFtZVxyXG4gICAgICAgICAgICA/ICdDYW5hbGk6ICcgKyBpdGVtLmNoYW5uZWxOYW1lICsgJzxicj4nXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgbGV0IG9yaWdpbiA9IGl0ZW0ub3JpZ2luXHJcbiAgICAgICAgICAgID8gJ09yaWdpbmU6ICcgK1xyXG4gICAgICAgICAgICBpdGVtLm9yaWdpbiArXHJcbiAgICAgICAgICAgICcgLSAnICtcclxuICAgICAgICAgICAgKGl0ZW0ub3JpZ2luRGVzY3JpcHRpb24gPyBpdGVtLm9yaWdpbkRlc2NyaXB0aW9uIDogJycpICtcclxuICAgICAgICAgICAgJzxicj4nXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgbGV0IHRvcGljcyA9IGl0ZW0udG9waWNzID8gJ0FyZ29tZW50bzogJyArIGl0ZW0udG9waWNzICsgJzxicj4nIDogJyc7XHJcbiAgICAgICAgaWYgKCFpZCkgcmV0dXJuO1xyXG4gICAgICAgIGxldCBtZXNzYWdlID1cclxuICAgICAgICAgICAgXCI8cCA+SWwgbGluayBjaGUgdHJvdmkgcXVpIHNvdHRvIMOoIHVuIHJpZmVyaW1lbnRvIGRpcmV0dG8gYWwgZG9jdW1lbnRvIHNlbGV6aW9uYXRvLjwvcD5cIiArXHJcbiAgICAgICAgICAgIFwiPHAgPkxvIHB1b2kgdXRpbGl6emFyZSBuZWxsYSB0dWEgZG9jdW1lbnRhemlvbmUgbyBpbnZpYXJsbyBwZXIgZW1haWwgYWQgdW4gdHVvIGNvbGxlZ2EuIExhIHBlcnNvbmEgY2hlIGRlc2lkZXJlcsOgIHZpc3VhbGl6emFyZSBpbCBkb2N1bWVudG8gZG92csOgIG5lY2Vzc2FyaWFtZW50ZSBlc3NlcmUgdW4gdXRlbnRlIGFiYm9uYXRvLjwvcD5cIiArXHJcbiAgICAgICAgICAgIFwiPHAgPlNlbGV6aW9uYSBlIGNvcGlhIChmYWkgQ1RSTCtDKSBpbCBsaW5rIHF1aSBzb3R0by48L3A+XCIgK1xyXG4gICAgICAgICAgICBcIjxkaXYgY2xhc3M9J3NtYWxsIGFjY2VudCc+XCIgK1xyXG4gICAgICAgICAgICAnaHR0cHM6Ly9jbGlwcGVyLmFyc2VkaXppb25pLml0Lz9pZD0nICtcclxuICAgICAgICAgICAgaWQgK1xyXG4gICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgICAgICc8YnI+JyArXHJcbiAgICAgICAgICAgICc8aHI+JyArXHJcbiAgICAgICAgICAgICc8cCBjbGFzcz1cInNtYWxsXCI+JyArXHJcbiAgICAgICAgICAgIGNoYW5uZWxzICtcclxuICAgICAgICAgICAgb3JpZ2luICtcclxuICAgICAgICAgICAgdG9waWNzXHJcbiAgICAgICAgJzwvcD4nO1xyXG5cclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuaW5mbyhtZXNzYWdlLCAnQ29waWEgbGluaycsICdDaGl1ZGknKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlbmQgZG9jdW1lbnRzIGxpbmtzIGJ5IGVtYWlsXHJcbiAgICAgKiBAcGFyYW0gaXRlbXMgOiB0aGUgZG9jdW1lbnQgbGlzdFxyXG4gICAgICovXHJcbiAgICBzZW5kSXRlbXNUbyhpdGVtczogQ2xpcHBlckRvY3VtZW50SW5mb1tdKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKCkpIHJldHVybjtcclxuICAgICAgICBpZiAoIWl0ZW1zIHx8IGl0ZW1zLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGQgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihTZW5kVG9EaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgYXJpYUxhYmVsOiAnaW52aWEgZG9jdW1lbnRpIHBlciBlbWFpbCcsXHJcbiAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3RvcmVGb2N1czogZmFsc2UsXHJcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGNsb3NlT25OYXZpZ2F0aW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgaW5mbzpcclxuICAgICAgICAgICAgICAgICAgICAnUHVvaSBpbnZpYXJlIGkgZG9jdW1lbnRpIGEgY2hpIHZ1b2kgbWEsIHBlciBwb3RlcmxpIHZpc3VhbGl6emFyZSwgw6ggbmVjZXNzYXJpbyBlc3NlcmUgdW4gdXRlbnRlIGFiYm9uYXRvLicsXHJcbiAgICAgICAgICAgICAgICBjb3VudDogaXRlbXMubGVuZ3RoLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBtaW5XaWR0aDogJzM3NXB4JyxcclxuICAgICAgICAgICAgbWF4V2lkdGg6ICc2MDBweCcsXHJcbiAgICAgICAgICAgIHdpZHRoOiAnOTklJyxcclxuICAgICAgICB9KTtcclxuICAgICAgICBkLmNvbXBvbmVudEluc3RhbmNlLmRvbmVcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByLmlkcyA9IGl0ZW1zPy5tYXAobiA9PiBuLmRvY3VtZW50SWQgPz8gbi5pZCkgPz8gW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYnVzeSgnSW52aW8gaW4gY29yc28uLi4nKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2Uuc2VuZFRvKHIpXHJcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6IChyMjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXIyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuZXJyb3IocjIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50b2FzdCgnSW52aW8gY29tcGxldGF0byBjb24gc3VjY2Vzc28uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNsZWFyQnVzeSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3BsYXkgYSBkb2N1bWVudCByZXBvcnRcclxuICAgICAqIEBwYXJhbSBkb2N1bWVudElkIDogdGhlIGRvY3VtZW50IGlkXHJcbiAgICAgKiBAcGFyYW0gdGl0bGU6IHRoZSBkb2N1bWVudCBzaG9ydCB0aXRsZVxyXG4gICAgICovXHJcbiAgICBvcGVuUmVwb3J0KGRvY3VtZW50SWQ6IHN0cmluZywgdGl0bGU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsKSB7XHJcbiAgICAgICAgQ2xpcHBlckRvY3VtZW50c1V0aWxzLm9wZW5SZXBvcnQoXHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZSxcclxuICAgICAgICAgICAgdGhpcy5jbGlwcGVyU2VydmljZSxcclxuICAgICAgICAgICAgZG9jdW1lbnRJZCxcclxuICAgICAgICAgICAgdGl0bGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcGxheSBhIGRvY3VtZW50IHJlcG9ydFxyXG4gICAgICogQHBhcmFtIGl0ZW0gOiB0aGUgZG9jdW1lbnRcclxuICAgICAqL1xyXG4gICAgcmVwb3J0KGl0ZW06IENsaXBwZXJEb2N1bWVudEluZm8pIHtcclxuICAgICAgICBpZiAoIWl0ZW0pIHJldHVybjtcclxuICAgICAgICBpZiAoaXRlbS5tb2RlbCAhPSBDbGlwcGVyTW9kZWwuTm9ybWF0aXZhVmlnZW50ZSAmJiBpdGVtLm1vZGVsICE9IENsaXBwZXJNb2RlbC5TY2FkZW56ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuaW5mbyhcIlF1ZXN0YSBmdW56aW9uYWxpdMOgIG5vbiDDqCBkaXNwb25pYmlsZSBwZXIgcXVlc3RvIHRpcG8gZGkgZG9jdW1lbnRvLlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMub3BlblJlcG9ydChpdGVtLmRvY3VtZW50SWQsIGl0ZW0udGl0bGUxKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIE9wZW4gYW4gaXRlbVxyXG4gICAgKiBUaGlzIHNob3VsZCBiZSBhbHdheXMgb3ZlcnJpZGRlblxyXG4gICAgKiBAcGFyYW0gZG9jdW1lbnRJZCA6IHRoZSBkb2N1bWVudCBpZFxyXG4gICAgKiBAcGFyYW0gcXVlcnk6IHRoZSBxdWVyeSBzdHJpbmdcclxuICAgICogQHBhcmFtIG5ld1dpbmRvdzogdHJ1ZSBpZiB0aGUgZG9jdW1lbnQgbXVzdCBiZSBvcGVuIGludG8gYSBuZXcgd2luZG93XHJcbiAgICAqL1xyXG4gICAgb3Blbihkb2N1bWVudElkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLCBxdWVyeTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwsIG5ld1dpbmRvdzogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgaWYgKCFuZXdXaW5kb3cpIHtcclxuICAgICAgICAgICAgdGhpcy5vcGVuRG9jdW1lbnQoZG9jdW1lbnRJZCwgcXVlcnkpO1xyXG4gICAgICAgIH0gZWxzZSB3aW5kb3cub3BlbignL2RvY3VtZW50by8nICsgZG9jdW1lbnRJZCwgJ19ibGFuaycpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3BlbiBhIGRvY3VtZW50XHJcbiAgICAgKiBAcGFyYW0gZG9jdW1lbnRJZCA6IHRoZSBkb2N1bWVudCBpZFxyXG4gICAgICogQHBhcmFtIHF1ZXJ5OiB0aGUgcXVlcnkgc3RyaW5nXHJcbiAgICAgKi9cclxuICAgIG9wZW5Eb2N1bWVudChkb2N1bWVudElkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLCBxdWVyeTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwpIHtcclxuICAgICAgICBpZiAoZG9jdW1lbnRJZCkge1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihDbGlwcGVyRG9jdW1lbnRDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgIGFyaWFMYWJlbDogJ2RvY3VtZW50bycsXHJcbiAgICAgICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVzdG9yZUZvY3VzOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGRvY3VtZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcXVlcnk6IHF1ZXJ5XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgbWluV2lkdGg6ICczNzVweCcsXHJcbiAgICAgICAgICAgICAgICBtYXhXaWR0aDogJzE0MDBweCcsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogJzk5JScsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6ICc5OSUnXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9wZW4gYSByZWZlcmVuY2VzIGRpYWxvZ1xyXG4gICAgICogQHBhcmFtIGRvY3VtZW50SWQgOiB0aGUgZG9jdW1lbnQgaWQgICBcclxuICAgICAqIEBwYXJhbSBtb2RlOiB0aGUgb3B0aW9uYWwgbW9kZS4gRGVmYXVsdCBpcyByZWZlcmVuY2VzIGluXHJcbiAgICAgKiBAcGFyYW0gbW9kZWw6IHRoZSBvcHRpb25hbCBkb2N1bWVudCBtb2RlbFxyXG4gICAgICogQHBhcmFtIGFuY2hvcjogdGhlIG9wdGlvbmFsIGRvY3VtZW50IGFuY2hvclxyXG4gICAgICogQHBhcmFtIGFuY2hvclRpdGxlOiA6IHRoZSBvcHRpb25hbCBhbmNob3IgdGl0bGVcclxuICAgICAqIEBwYXJhbSB1cGRhdGU6IHRydWUgaWYgaXMgYW4gdXBkYXRlXHJcbiAgICAgKi9cclxuICAgIG9wZW5SZWZlcmVuY2VzKFxyXG4gICAgICAgIGRvY3VtZW50SWQ6IHN0cmluZyB8IG51bGwsXHJcbiAgICAgICAgbW9kZTogQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUgfCBudWxsID0gQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuUmVmZXJlbmNlc0luLFxyXG4gICAgICAgIG1vZGVsOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCxcclxuICAgICAgICBhbmNob3I6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsLFxyXG4gICAgICAgIGFuY2hvclRpdGxlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCxcclxuICAgICAgICB1cGRhdGU6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkID0gdHJ1ZSkge1xyXG4gICAgICAgIGNvbnN0IGQgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihDbGlwcGVyUmVmZXJlbmNlc0NvbXBvbmVudCwge1xyXG4gICAgICAgICAgICBhcmlhTGFiZWw6ICdkb2N1bWVudG8nLFxyXG4gICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN0b3JlRm9jdXM6IGZhbHNlLFxyXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxyXG4gICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICBpZDogZG9jdW1lbnRJZCxcclxuICAgICAgICAgICAgICAgIG1vZGU6IG1vZGUsXHJcbiAgICAgICAgICAgICAgICBtb2RlbDogbW9kZWwsXHJcbiAgICAgICAgICAgICAgICBhbmNob3I6IGFuY2hvcixcclxuICAgICAgICAgICAgICAgIGFuY2hvclRpdGxlOiBhbmNob3JUaXRsZSxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZTogdXBkYXRlLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBtaW5XaWR0aDogJzM3NXB4JyxcclxuICAgICAgICAgICAgbWF4V2lkdGg6ICcxMDAwcHgnLFxyXG4gICAgICAgICAgICB3aWR0aDogJzk5JScsXHJcbiAgICAgICAgICAgIGhlaWdodDogJzk5JSdcclxuICAgICAgICB9KTtcclxuICAgICAgICBkLmFmdGVyQ2xvc2VkKClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocjogQ2xpcHBlclJlZmVyZW5jZURpYWxvZ0Nsb3NlSW5mbykgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHIgJiYgci5kb2N1bWVudElkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuKHIuZG9jdW1lbnRJZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFuYWdlIGNsaXBwZXIgYmFnXHJcbiAgICAgKi9cclxuICAgIG9wZW5CYWcoKSB7XHJcbiAgICAgICAgQ2xpcHBlckRvY3VtZW50c1V0aWxzLm9wZW5CYWcoXHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZSxcclxuICAgICAgICAgICAgdGhpcy5jbGlwcGVyU2VydmljZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBDaGVja3MgaWYgYSBtb2R1bGUgaXMgc3VwcG9ydGVkIGJ5IFJTXHJcbiAgICAqIEBwYXJhbSBtb2R1bGUgOiB0aGUgbW9kdWxlIHRvIGNoZWNrXHJcbiAgICAqIEByZXR1cm5zOiB0cnVlIGlmIHRoZSBtb2R1bGUgaXMgc3VwcG9ydGVkXHJcbiAgICAqL1xyXG4gICAgaXNNb2R1bGVTdXBwb3J0ZWRCeVJTKG1vZHVsZTogQ2xpcHBlck1vZHVsZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBtb2R1bGUgPT09IENsaXBwZXJNb2R1bGUuR2F6emV0dGVCb2xsZXR0aW5pRUZvbnRpRGl2ZXJzZSB8fFxyXG4gICAgICAgICAgICBtb2R1bGUgPT09IENsaXBwZXJNb2R1bGUuTm9ybWF0aXZhVmlnZW50ZSB8fFxyXG4gICAgICAgICAgICBtb2R1bGUgPT09IENsaXBwZXJNb2R1bGUuU2NhZGVuemVFU2VnbmFsYXppb25pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIGEgbW9kZWwgaXMgc3VwcG9ydGVkIGJ5IFJTXHJcbiAgICAgKiBAcGFyYW0gbW9kZWwgOiB0aGUgbW9kZWwgdG8gY2hlY2tcclxuICAgICAqIEByZXR1cm5zOiB0cnVlIGlmIHRoZSBtb2RlbCBpcyBzdXBwb3J0ZWRcclxuICAgICAqL1xyXG4gICAgaXNNb2RlbFN1cHBvcnRlZEJ5UlMobW9kZWw6IENsaXBwZXJNb2RlbCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBtb2RlbCA9PT0gQ2xpcHBlck1vZGVsLkFnZ2lvcm5hbWVudG9Ob3JtYXRpdm8gfHxcclxuICAgICAgICAgICAgbW9kZWwgPT09IENsaXBwZXJNb2RlbC5Ob3JtYXRpdmFWaWdlbnRlIHx8XHJcbiAgICAgICAgICAgIG1vZGVsID09PSBDbGlwcGVyTW9kZWwuU2NhZGVuemU7XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFByaW50IGN1cnJlbnQgZG9jdW1lbnRcclxuICAgICAqL1xyXG4gICAgcHJpbnQoKSB7XHJcbiAgICAgICAgbGV0IGYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2xpcHBlci1kb2N1bWVudC1pZnJhbWUnKSBhcyBhbnk7XHJcbiAgICAgICAgaWYgKGYpIHtcclxuICAgICAgICAgICAgZi5jb250ZW50V2luZG93LnBvc3RNZXNzYWdlKCd7XCJ0eXBlXCI6IFwicHJpbnRcIn0nLCAnKicpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmQgaW4gY3VycmVudCBkb2N1bWVudFxyXG4gICAgICovXHJcbiAgICBmaW5kKCkge1xyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5pbmZvKCdQZXIgY2VyY2FyZSBuZWwgZG9jdW1lbnRvIHByZW1pIENUUkwgKyBGLicpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBDaGVja3MgaWYgYWxsIGRvY3VtZW50cyBhcmUgc3VwcG9ydGVkIGJ5IFJTXHJcbiAgICAqIEBwYXJhbSBpdGVtcyA6IHRoZSBsaXN0IG9mIGRvY3VtZW5zXHJcbiAgICAqIEByZXR1cm5zOiB0cnVlIGlmIGFsbCBkb2N1bWVudHMgc3VwcG9ydHMgUlNcclxuICAgICovXHJcbiAgICBjYW5TdXBwb3J0UlMoaXRlbXM6IFtdKTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IGFsbG93ID0gZmFsc2U7XHJcbiAgICAgICAgaXRlbXMuZm9yRWFjaCgobjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGFsbG93ID0gdGhpcy5pc01vZGVsU3VwcG9ydGVkQnlSUyhuLm1vZGVsKTtcclxuICAgICAgICAgICAgaWYgKCFhbGxvdykgcmV0dXJuO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBhbGxvdztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiBSUyBpcyBlbmFibGVkIGZvciBhbGwgZ2l2ZW4gZG9jdW1lbnRzXHJcbiAgICAgKiBAcGFyYW0gZG9jdW1lbnRzIDogdGhlIGRvY3VtZW50cyB0byBjaGVja1xyXG4gICAgICogQHJldHVybnMgdHJ1ZSBpZiBhbGxhIGRvY3VtZW50cyBhciBSUyBlbmFibGVkXHJcbiAgICAgKi9cclxuICAgIFJTX2VuYWJsZWQoZG9jdW1lbnRzOiBDbGlwcGVyRG9jdW1lbnRJbmZvW10pOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIWRvY3VtZW50cyB8fCBkb2N1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgbGV0IGFsbG93ID0gZmFsc2U7XHJcbiAgICAgICAgZG9jdW1lbnRzLmZvckVhY2gobiA9PiB7XHJcbiAgICAgICAgICAgIGFsbG93ID0gbiAmJiAobi5tb2RlbCA9PT0gQ2xpcHBlck1vZGVsLk5vcm1hdGl2YVZpZ2VudGUgfHxcclxuICAgICAgICAgICAgICAgIG4ubW9kZWwgPT09IENsaXBwZXJNb2RlbC5BZ2dpb3JuYW1lbnRvTm9ybWF0aXZvIHx8XHJcbiAgICAgICAgICAgICAgICBuLm1vZGVsID09PSBDbGlwcGVyTW9kZWwuU2NhZGVuemUpO1xyXG4gICAgICAgICAgICBpZiAoIWFsbG93KSByZXR1cm47XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGFsbG93O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBOZXcgbGF3XHJcbiAgICAqIEBwYXJhbSBkb2N1bWVudHM6IHRoZSBhcnJheSBvZiBkb2N1bWVudHMgdG8gbGluayB0byB0aGUgbGF3XHJcbiAgICAqL1xyXG4gICAgUlNfbmV3TGF3KGRvY3VtZW50czogQ2xpcHBlckRvY3VtZW50SW5mb1tdKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLnN1cHBvcnRzUlMoKSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuSU5URVJPUF9SU19ORVdfTEFXLCBkb2N1bWVudHMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTmV3IGFjdGl2aXR5XHJcbiAgICAgKiBAcGFyYW0gZG9jdW1lbnQ6IHRoZSBkb2N1bWVudCB0byBsaW5rIHRvIHRoZSBhY3Rpdml0eVxyXG4gICAgICovXHJcbiAgICBSU19uZXdBY3Rpdml0eShkb2N1bWVudDogQ2xpcHBlckRvY3VtZW50SW5mbykge1xyXG4gICAgICAgIGlmICghZG9jdW1lbnQpIHJldHVybjtcclxuICAgICAgICBpZiAoIXRoaXMuY2xpcHBlclNlcnZpY2Uuc3VwcG9ydHNSUygpKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5JTlRFUk9QX1JTX05FV19BQ1RJVklUWSwgZG9jdW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBEb2N1bWVudCB1c2FnZSByZXBvcnRcclxuICAgICogQHBhcmFtIGRvY3VtZW50OiB0aGUgbGF3XHJcbiAgICAqL1xyXG4gICAgUlNfdXNhZ2VSZXBvcnQoZG9jdW1lbnQ6IENsaXBwZXJEb2N1bWVudEluZm8pIHtcclxuICAgICAgICBpZiAoIWRvY3VtZW50KSByZXR1cm47XHJcbiAgICAgICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLnN1cHBvcnRzUlMoKSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuSU5URVJPUF9SU19VU0FHRV9SRVBPUlQsIGRvY3VtZW50KTtcclxuICAgIH1cclxuXHJcblxyXG59XHJcbiJdfQ==
|
|
@@ -5,10 +5,11 @@ import { BroadcastService, DateFormat, ScreenService, SystemUtils } from '@arsed
|
|
|
5
5
|
import { ApplicationDialogService } from '@arsedizioni/ars-utils/ui.application';
|
|
6
6
|
import { startOfDay, startOfToday, subDays } from 'date-fns';
|
|
7
7
|
import { Subject } from 'rxjs';
|
|
8
|
-
import { ClipperDocumentManager } from '../document-manager/document-manager';
|
|
9
8
|
import { ClipperSearchCalendarComponent } from '../search-calendar/search-calendar.component';
|
|
10
9
|
import { ClipperSearchFacetsComponent } from '../search-facets/search-facets.component';
|
|
11
10
|
import { ClipperDocumentsUtils } from '../../documents';
|
|
11
|
+
import { ClipperDocumentComponent } from '../document/document.component';
|
|
12
|
+
import { ClipperReferencesComponent } from '../references/references.component';
|
|
12
13
|
import * as i0 from "@angular/core";
|
|
13
14
|
export class ClipperSearchResultManager {
|
|
14
15
|
constructor() {
|
|
@@ -508,7 +509,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
|
|
|
508
509
|
template: '<div></div>',
|
|
509
510
|
standalone: true,
|
|
510
511
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
511
|
-
imports: [
|
|
512
|
+
imports: [
|
|
513
|
+
ClipperReferencesComponent,
|
|
514
|
+
ClipperDocumentComponent,
|
|
515
|
+
ClipperSearchFacetsComponent,
|
|
516
|
+
ClipperSearchCalendarComponent
|
|
517
|
+
],
|
|
512
518
|
}]
|
|
513
519
|
}], propDecorators: { paginator: [{
|
|
514
520
|
type: ViewChild,
|
|
@@ -520,4 +526,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
|
|
|
520
526
|
type: ViewChild,
|
|
521
527
|
args: ['calendar']
|
|
522
528
|
}] } });
|
|
523
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLXJlc3VsdC1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvc2VhcmNoLXJlc3VsdC1tYW5hZ2VyL3NlYXJjaC1yZXN1bHQtbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQWEsU0FBUyxFQUFFLE1BQU0sRUFDdkMsTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBdUIsZUFBZSxFQUFFLFlBQVksRUFBa0UsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2xQLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsVUFBVSxFQUNLLGFBQWEsRUFBbUIsV0FBVyxFQUM3RCxNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzlGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQVV4RCxNQUFNLE9BQU8sMEJBQTBCO0lBTnZDO1FBWWMsZ0JBQVcsR0FBa0IsSUFBSSxPQUFP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LENBQUM7aUJBQ2xHOzhCQUcyQixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBQ0QsTUFBTTtzQkFBMUIsU0FBUzt1QkFBQyxRQUFRO2dCQUNJLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJyZWFrcG9pbnRPYnNlcnZlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xyXG5pbXBvcnQge1xyXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIENvbXBvbmVudCwgT25EZXN0cm95LCBWaWV3Q2hpbGQsIGluamVjdCxcclxuICAgIHNpZ25hbFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBDbGlwcGVyRG9jdW1lbnRJbmZvLCBDbGlwcGVyTWVzc2FnZXMsIENsaXBwZXJNb2RlbCwgQ2xpcHBlclNlYXJjaENhbGVuZGFyU25hcHNob3RSZXN1bHQsIENsaXBwZXJTZWFyY2hGYWNldHNSZXN1bHQsIENsaXBwZXJTZWFyY2hQYXJhbXMsIENsaXBwZXJTZWFyY2hSZXN1bHQsIENsaXBwZXJTZXJ2aWNlLCBDbGlwcGVyU29ydCB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY2xpcHBlci5jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gICAgQnJvYWRjYXN0U2VydmljZSxcclxuICAgIERhdGVGb3JtYXQsXHJcbiAgICBOYW1lVmFsdWVJdGVtLCBTY3JlZW5TZXJ2aWNlLCBTZWxlY3RhYmxlTW9kZWwsIFN5c3RlbVV0aWxzXHJcbn0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jb3JlJztcclxuaW1wb3J0IHsgQXBwbGljYXRpb25EaWFsb2dTZXJ2aWNlIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy91aS5hcHBsaWNhdGlvbic7XHJcbmltcG9ydCB7IHN0YXJ0T2ZEYXksIHN0YXJ0T2ZUb2RheSwgc3ViRGF5cyB9IGZyb20gJ2RhdGUtZm5zJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDbGlwcGVyRG9jdW1lbnRNYW5hZ2VyIH0gZnJvbSAnLi4vZG9jdW1lbnQtbWFuYWdlci9kb2N1bWVudC1tYW5hZ2VyJztcclxuaW1wb3J0IHsgQ2xpcHBlclNlYXJjaENhbGVuZGFyQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VhcmNoLWNhbGVuZGFyL3NlYXJjaC1jYWxlbmRhci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoRmFjZXRzQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VhcmNoLWZhY2V0cy9zZWFyY2gtZmFjZXRzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENsaXBwZXJEb2N1bWVudHNVdGlscyB9IGZyb20gJy4uLy4uL2RvY3VtZW50cyc7XHJcblxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgdGVtcGxhdGU6ICc8ZGl2PjwvZGl2PicsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBpbXBvcnRzOiBbQ2xpcHBlckRvY3VtZW50TWFuYWdlciwgQ2xpcHBlclNlYXJjaEZhY2V0c0NvbXBvbmVudCwgQ2xpcHBlclNlYXJjaENhbGVuZGFyQ29tcG9uZW50XSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENsaXBwZXJTZWFyY2hSZXN1bHRNYW5hZ2VyXHJcbiAgICBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgICBAVmlld0NoaWxkKCdwYWdpbmF0b3InKSBwYWdpbmF0b3IhOiBNYXRQYWdpbmF0b3I7XHJcbiAgICBAVmlld0NoaWxkKCdmYWNldHMnKSBmYWNldHMhOiBDbGlwcGVyU2VhcmNoRmFjZXRzQ29tcG9uZW50O1xyXG4gICAgQFZpZXdDaGlsZCgnY2FsZW5kYXInKSBjYWxlbmRhciE6IENsaXBwZXJTZWFyY2hDYWxlbmRhckNvbXBvbmVudDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgdW5zdWJzY3JpYmU6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgcHJvdGVjdGVkIGNoYW5nZURldGVjdG9yID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcclxuICAgIHByb3RlY3RlZCBjbGlwcGVyU2VydmljZSA9IGluamVjdChDbGlwcGVyU2VydmljZSk7XHJcbiAgICBwcm90ZWN0ZWQgYnJlYWtwb2ludE9ic2VydmVyID0gaW5qZWN0KEJyZWFrcG9pbnRPYnNlcnZlcik7XHJcbiAgICBwcm90ZWN0ZWQgYnJvYWRjYXN0U2VydmljZSA9IGluamVjdChCcm9hZGNhc3RTZXJ2aWNlKTtcclxuICAgIHByb3RlY3RlZCBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KEFwcGxpY2F0aW9uRGlhbG9nU2VydmljZSk7XHJcbiAgICBwdWJsaWMgc2NyZWVuU2VydmljZSA9IGluamVjdChTY3JlZW5TZXJ2aWNlKTtcclxuICAgIHB1YmxpYyBzZWxlY3Rpb246IFNlbGVjdGFibGVNb2RlbDxhbnksIHN0cmluZz4gfCBudWxsID0gbnVsbDtcclxuICAgIHByb3RlY3RlZCBzbmFwc2hvdDogQ2xpcHBlclNlYXJjaFJlc3VsdCB8IG51bGwgPSBuZXcgQ2xpcHBlclNlYXJjaFJlc3VsdCgpO1xyXG4gICAgcHJvdGVjdGVkIGZpbHRlckJ1c3kgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcHJvdGVjdGVkIGZpbHRlclBhcmFtczogQ2xpcHBlclNlYXJjaFBhcmFtcyA9IG5ldyBDbGlwcGVyU2VhcmNoUGFyYW1zKCk7XHJcbiAgICBwcm90ZWN0ZWQgZmlsdGVyUGFuZUhhc0JhY2tkcm9wOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcm90ZWN0ZWQgZmlsdGVyUGFuZUNsb3NlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJvdGVjdGVkIGZpbHRlclBhbmUySGFzQmFja2Ryb3A6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByb3RlY3RlZCBmaWx0ZXJQYW5lMkNsb3NlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJvdGVjdGVkIHNvcnRPcHRpb25zOiBOYW1lVmFsdWVJdGVtPG51bWJlcj5bXSA9IFtdO1xyXG4gICAgcHJvdGVjdGVkIHNvcnRNb2RlOiBOYW1lVmFsdWVJdGVtPG51bWJlcj4gfCBudWxsID0gbnVsbDtcclxuICAgIHByb3RlY3RlZCBzY3JvbGxlcklkOiBzdHJpbmcgPSAnc2Nyb2xsZXJfJyArIFN5c3RlbVV0aWxzLmdlbmVyYXRlVVVJRCgpO1xyXG4gICAgcHJvdGVjdGVkIHJlc3RvcmFibGVJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICBwcm90ZWN0ZWQgaGFzRmFjZXRzID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHByb3RlY3RlZCBoYXNDYWxlbmRhciA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgICBwcm90ZWN0ZWQgaGFzUmVnaW9ucyA9ICgpOiBib29sZWFuID0+IHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuZmlsdGVyUGFyYW1zLnNlY3RvcnM/LmZpbHRlcihuID0+IG4udmFsdWUgPT09ICdMUicpLmxlbmd0aCA/PyAwKSA+IDA7XHJcbiAgICB9O1xyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZS5uZXh0KCk7XHJcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZS5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSBtZW51IGJ1dHRvbnMgdmlzaWJpbGl0eSB3aGVuIHRoZSBtZW51IGlzIGNsb3NlZFxyXG4gICAgICovXHJcbiAgICB1cGRhdGVNZW51QnV0dG9uc1Zpc2liaWxpdHkoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc25hcHNob3QpIHtcclxuICAgICAgICAgICAgdGhpcy5zbmFwc2hvdC5pdGVtcz8uZm9yRWFjaCgobjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBuLmlzTWVudU9wZW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2Nyb2xsIG9uIHRvcCBvIGxpc3QgYXJlYVxyXG4gICAgICogQHBhcmFtIHRvcDogdGhlIHRvcCBwb3NpdGlvblxyXG4gICAgICovXHJcbiAgICBzY3JvbGwodG9wOiBudW1iZXIgPSAwKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuc2Nyb2xsZXJJZCk7XHJcbiAgICAgICAgaWYgKGVsZW0pIHtcclxuICAgICAgICAgICAgZWxlbS5zY3JvbGxUbyh7IHRvcDogdG9wLCBsZWZ0OiAwLCBiZWhhdmlvcjogJ2F1dG8nIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrIGlmIGV2ZXJ5IGVsZW1lbnQgYXJlIHNlbGVjdGVkXHJcbiAgICAgKi9cclxuICAgIGFsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbj8uY3VycmVudD8uc2VsZWN0ZWQ/Lmxlbmd0aCA9PT0gdGhpcy5zbmFwc2hvdD8uaXRlbXM/Lmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hc3RlciBzZWxlY3Rpb24gdG9nZ2xlXHJcbiAgICAgKiBAcGFyYW0gc2VsZWN0OiB0cnVlIHRvIHNlbGVjdCBhbGwgZWxlbWVudHMgZmFsc2UgdG8gZGVzZWxlY3QgYWxsIGVsZW1lbnRzXHJcbiAgICAgKi9cclxuICAgIHNlbGVjdEFsbChzZWxlY3Q6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKHNlbGVjdCkge1xyXG4gICAgICAgICAgICB0aGlzLnNuYXBzaG90Py5pdGVtcz8uZm9yRWFjaCgobjogYW55KSA9PiB0aGlzLnNlbGVjdGlvbj8uc2VsZWN0KG4sIG4uZG9jdW1lbnRJZCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc25hcHNob3Q/Lml0ZW1zPy5mb3JFYWNoKChuOiBhbnkpID0+IHRoaXMuc2VsZWN0aW9uPy5kZXNlbGVjdChuLCBuLmRvY3VtZW50SWQpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIENoZWNrIGlmIHNlbGVjdGlvbnMgZXhpc3RzXHJcbiAgICAqIEByZXR1cm5zIHRydWUgaWYgYXQgbGVhc3Qgb25lIGVsZW1lbnQgaXMgc2VsZWN0ZWRcclxuICAgICovXHJcbiAgICBoYXNBbnlTZWxlY3Rpb24oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLnNlbGVjdGlvbj8uYWxsPy5sZW5ndGggPz8gMCkgPiAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBDaGVjayBpZiBvbmx5IG9uZSBlbGVtZW50IGlzIHNlbGVjdGVkXHJcbiAgICAqIEByZXR1cm5zIHRydWUgaWYgb25seSBvbmUgZWxlbWVudCBpcyBzZWxlY3RlZFxyXG4gICAgKi9cclxuICAgIGhhc1NpbmdsZVNlbGVjdGlvbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuc2VsZWN0aW9uPy5hbGw/Lmxlbmd0aCA/PyAwKSA9PT0gMTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogR2V0IHRoZSBmaXJzdCBzZWxlY3RlZCBpdGVtIFxyXG4gICAgKiBAcmV0dXJucyB0aGUgc2VsZWN0ZWQgaXRlbSBvciBudWxsICAgIFxyXG4gICAgKi9cclxuICAgIGdldFNpbmdsZVNlbGVjdGlvbigpOiBhbnkgfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5oYXNBbnlTZWxlY3Rpb24oKSA/IHRoaXMuc2VsZWN0aW9uPy5hbGxbMF0gOiBudWxsO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAqIENsZWFyIHNlbGVjdGlvblxyXG4gICAgKi9cclxuICAgIGNsZWFyU2VsZWN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbj8uY2xlYXIoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBzZWxlY3RlZCBpdGVtcyBvciBudWxsXHJcbiAgICogQHJldHVybnMgUmV0dXJuIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgaXRlbXNcclxuICAgKi9cclxuICAgIGNvdW50U2VsZWN0aW9ucygpOiBudW1iZXIgfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuc2VsZWN0aW9uICYmIHRoaXMuc2VsZWN0aW9uPy5hbGw/Lmxlbmd0aCA+IDApID8gdGhpcy5zZWxlY3Rpb24/LmFsbD8ubGVuZ3RoIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAqIEdldCB0aGUgc2VsZWN0ZWQgaWRcclxuICAqL1xyXG4gICAgZ2V0U2VsZXRlY3RJZCgpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICBpZiAodGhpcy5oYXNBbnlTZWxlY3Rpb24oKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb24/LmFsbFswXS5kb2N1bWVudElkO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICogR2V0IGFsbCBzZWxlY3RlZCBpZHNcclxuICovXHJcbiAgICBnZXRTZWxldGVjdElkcygpOiBzdHJpbmdbXSB8IG51bGwge1xyXG4gICAgICAgIGlmICgodGhpcy5zZWxlY3Rpb24/LmFsbD8ubGVuZ3RoID8/IDApID4gMTAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcignTGEgc2VsZXppb25lIG5vbiBwdcOyIGNvbnRlbmVyZSBwacO5IGRpIDEwMCBlbGVtZW50aS4nKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBpZHM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzQW55U2VsZWN0aW9uKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24/LmFsbD8uZm9yRWFjaCgobjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZHMucHVzaChuLmRvY3VtZW50SWQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGlkcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhbGwgc2VsZWN0ZWQgaWRzXHJcbiAgICAgKi9cclxuICAgIGdldFNlbGV0ZWN0SWRzQW5kRGF0YSgpOiBhbnlbXSB8IG51bGwge1xyXG4gICAgICAgIGlmICgodGhpcy5zZWxlY3Rpb24/LmFsbD8ubGVuZ3RoID8/IDApID4gMTAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcignTGEgc2VsZXppb25lIG5vbiBwdcOyIGNvbnRlbmVyZSBwacO5IGRpIDEwMCBlbGVtZW50aS4nKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBkYXRhOiBhbnkgPSBbXTtcclxuICAgICAgICBpZiAodGhpcy5oYXNBbnlTZWxlY3Rpb24oKSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbj8uYWxsPy5mb3JFYWNoKChuOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGRhdGEucHVzaCh7IGlkOiBuLmRvY3VtZW50SWQsIGRhdGE6IG4gfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcmVwYXJlIHJlc3VsdCBpdGVtc1xyXG4gICAgICogQHBhcmFtIGl0ZW1zIDogdGhlIGl0ZW1zIHRvIHByb2Nlc3NcclxuICAgICAqIEBwYXJhbSBwYXJhbXMgOiB0aGUgY3VycmVudCBzZWFyY2ggcGFyYW1zXHJcbiAgICAgKi9cclxuICAgIHByZXBhcmVSZXN1bHRJdGVtcyhpdGVtczogQ2xpcHBlckRvY3VtZW50SW5mb1tdLCBwYXJhbXM6IENsaXBwZXJTZWFyY2hQYXJhbXMpIHtcclxuICAgICAgICBjb25zdCB0b2RheSA9IHN0YXJ0T2ZUb2RheSgpO1xyXG4gICAgICAgIGNvbnN0IGdyb3VwQnlZZWFyID1cclxuICAgICAgICAgICAgIXBhcmFtcy5zb3J0TW9kZSB8fFxyXG4gICAgICAgICAgICBwYXJhbXMuc29ydE1vZGUgPT09IENsaXBwZXJTb3J0LkRhdGVBc2MgfHxcclxuICAgICAgICAgICAgcGFyYW1zLnNvcnRNb2RlID09PSBDbGlwcGVyU29ydC5EYXRlRGVzYyB8fFxyXG4gICAgICAgICAgICBwYXJhbXMuc29ydE1vZGUgPT09IENsaXBwZXJTb3J0LlNvdXJjZURhdGVBc2MgfHxcclxuICAgICAgICAgICAgcGFyYW1zLnNvcnRNb2RlID09PSBDbGlwcGVyU29ydC5Tb3VyY2VEYXRlRGVzYztcclxuICAgICAgICBjb25zdCBncm91cEJ5UmVsZXZhbmNlID0gcGFyYW1zLnNvcnRNb2RlID09PSBDbGlwcGVyU29ydC5SZWxldmFuY2U7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBCeVBvcHVsYXJpdHkgPSBwYXJhbXMuc29ydE1vZGUgPT09IENsaXBwZXJTb3J0LlBvcHVsYXJpdHk7XHJcbiAgICAgICAgbGV0IGdyb3VwID0gJyc7XHJcbiAgICAgICAgaXRlbXM/LmZvckVhY2gobiA9PiB7XHJcbiAgICAgICAgICAgIG4uZG9jdW1lbnRJZCA9IG4uZG9jdW1lbnRJZCA/PyBuLmlkO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbj8udXBkYXRlQ3VycmVudChuLCBuLmRvY3VtZW50SWQpO1xyXG4gICAgICAgICAgICBpZiAobi5tb2RlbCA9PT0gQ2xpcHBlck1vZGVsLlF1ZXNpdGkpIHtcclxuICAgICAgICAgICAgICAgIG4uaW5mbyA9IFwiUXVlc2l0byBuwrAgXCIgKyBuLm51bWJlciArIFwiIGRlbCBcIiArIFN5c3RlbVV0aWxzLmZvcm1hdERhdGUobi5kYXRlLCBcImQgTU1NIHl5eXlcIik7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobi5tb2RlbCA9PT0gQ2xpcHBlck1vZGVsLlNjYWRlbnplIHx8XHJcbiAgICAgICAgICAgICAgICBuLm1vZGVsID09PSBDbGlwcGVyTW9kZWwuU2VnbmFsYXppb25pKSB7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKG4ubW9kZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIENsaXBwZXJNb2RlbC5TY2FkZW56ZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbi5vcmlnaW5EZXNjcmlwdGlvbiA9ICdTY2FkZW56YSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQ2xpcHBlck1vZGVsLlNlZ25hbGF6aW9uaTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbi5vcmlnaW5EZXNjcmlwdGlvbiA9ICdTZWduYWxhemlvbmUnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChuLmV4cGlyaW5nSW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJ0cyA9IG4uZXhwaXJpbmdJbmZvLnNwbGl0KCd8Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMykgbi5leHBpcmluZ0Rlc2NyaXB0aW9uID0gcGFydHNbMl07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobi5leHBpcmluZ0RhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBuLmRhdGUgPSBzdGFydE9mRGF5KG5ldyBEYXRlKG4uZXhwaXJpbmdEYXRlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZCA9IHN0YXJ0T2ZEYXkoc3ViRGF5cyhuLmRhdGUsIDE1KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbi5pc0V4cGlyaW5nID0gdG9kYXkgPD0gbi5kYXRlICYmIHRvZGF5ID49IGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbi5pc0V4cGlyZWQgPSBuLmRhdGUgPCB0b2RheTtcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKG4ubW9kZWwgPT09IENsaXBwZXJNb2RlbC5BcnRpY29saSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIG4ubW9kZWwgPT09IENsaXBwZXJNb2RlbC5OZXdzKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIG4udGFncykge1xyXG4gICAgICAgICAgICAgICAgICAgIG4uaW5mbyA9IG4udGFncy50b1VwcGVyQ2FzZSgpLnN1YnN0cmluZygxKS5yZXBsYWNlQWxsKFwiI1wiLCBcIiwgXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG4ubW9kZWwgIT09IENsaXBwZXJNb2RlbC5BZ2dpb3JuYW1lbnRvTm9ybWF0aXZvICYmXHJcbiAgICAgICAgICAgICAgICAgICAgbi5tb2RlbCAhPT0gQ2xpcHBlck1vZGVsLk5vcm1hdGl2YVZpZ2VudGUgJiZcclxuICAgICAgICAgICAgICAgICAgICBuLm1vZGVsICE9PSBDbGlwcGVyTW9kZWwuSnVyaXMgJiZcclxuICAgICAgICAgICAgICAgICAgICBuLmRhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBuLmRhdGUgPSBzdGFydE9mRGF5KG5ldyBEYXRlKG4uZGF0ZSA/PyBuLnB1Ymxpc2hpbmdEYXRlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZCA9IHN0YXJ0T2ZEYXkoc3ViRGF5cyhzdGFydE9mVG9kYXkoKSwgNykpXHJcbiAgICAgICAgICAgICAgICAgICAgbi5pc05ldyA9IG4uZGF0ZSA+IGQ7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG4uZGF0ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobi5hbmNob3JzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFuY2hvclR5cGU6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhbmNob3JzOiBhbnkgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBuLmFuY2hvcnMuZm9yRWFjaCgoYTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhLnR5cGUgPT09IDIwKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhLnR5cGUgIT09IGFuY2hvclR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhLnR5cGUgPj0gMylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JzLnB1c2goeyB0ZXh0OiBhLnR5cGVEZXNjcmlwdGlvbiB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvclR5cGUgPSBhLnR5cGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNjb3JlID0gYS5zY29yZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3JlID4gNykgc2NvcmUgLT0gNztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NvcmUgPiA1KSBzY29yZSAtPSA1O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzY29yZSA+IDMpIHNjb3JlIC09IDM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvcnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBhLnRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYS50aXRsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50SWQ6IGEuZG9jdW1lbnRJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaTogYS51cmksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ5UmVsZXZhbnQ6IHNjb3JlID4gMC42LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBuLmFuY2hvcnMgPSBhbmNob3JzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG4udmFsaWRpdHlTdGF0ZSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBuLnZhbGlkaXR5RGVzY3JpcHRpb24gPSAnSWwgZG9jdW1lbnRvIG5vbiDDqCBwacO5IHZpZ2VudGUnO1xyXG4gICAgICAgICAgICAgICAgICAgIG4uaXNFeHBpcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobi52YWxpZFVudGlsRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBpcmluZ0RhdGUgPSBzdGFydE9mRGF5KG5ldyBEYXRlKG4udmFsaWRVbnRpbERhdGUpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGlyaW5nRGF0ZSA8IHRvZGF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLnZhbGlkaXR5RGVzY3JpcHRpb24gPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJbCBkb2N1bWVudG8gbm9uIMOoIHBpw7kgdmlnZW50ZSBkYWwgJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtVXRpbHMuZm9ybWF0RGF0ZShleHBpcmluZ0RhdGUpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLnZhbGlkaXR5RGVzY3JpcHRpb24gPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJbCBkb2N1bWVudG8gbm9uIHNhcsOgIHBpw7kgdmlnZW50ZSBkYWwgJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtVXRpbHMuZm9ybWF0RGF0ZShleHBpcmluZ0RhdGUpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLmlzRXhwaXJlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG4uZXhwaXJpbmdEYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbi5kYXRlID0gc3RhcnRPZkRheShuZXcgRGF0ZShuLmV4cGlyaW5nRGF0ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGQgPSBzdGFydE9mRGF5KHN1YkRheXMobi5kYXRlLCAxNSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIG4uaXNFeHBpcmluZyA9IHRvZGF5IDw9IG4uZGF0ZSAmJiB0b2RheSA+PSBkO1xyXG4gICAgICAgICAgICAgICAgICAgIG4uaXNFeHBpcmVkID0gbi5kYXRlIDwgdG9kYXk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGdyb3VwQnlZZWFyKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB5ZWFyID0gU3lzdGVtVXRpbHMuZm9ybWF0RGF0ZShuLmRhdGUgPz8gbi5wdWJsaXNoaW5nRGF0ZSwgRGF0ZUZvcm1hdC5Mb25nTW9udGhBbmRZZWFyKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwICE9PSB5ZWFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbi5ncm91cCA9IHllYXI7XHJcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPSB5ZWFyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGdyb3VwQnlSZWxldmFuY2UpIHtcclxuICAgICAgICAgICAgICAgIGlmIChncm91cCAhPT0gJ25vbmUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbi5ncm91cCA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdFbGVtZW50aSBwacO5IHJpbGV2YW50aSBwZXIgbGEgcmljZXJjYTogJyArIHBhcmFtcy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGdyb3VwQnlQb3B1bGFyaXR5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXAgIT09ICdub25lJykge1xyXG4gICAgICAgICAgICAgICAgICAgIG4uZ3JvdXAgPSAnRWxlbWVudGkgcGnDuSBwb3BvbGFyaSBpbiBvcmRpbmUgZGVjcmVzY2VudGUnO1xyXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJlcGFyZSByZXN1bHRzXHJcbiAgICAgKiBAcGFyYW0gZGF0YSA6IHRoZSBvcHRpb25hbCByZXN1bHQgbGlzdCB0byBwcmVwYXJlXHJcbiAgICAgKiBAcGFyYW0gZmFjZXRzIDogdGhlIG9wdGlvbmFsIGZhY2V0cyBsaXN0IHRvIHByZXBhcmVcclxuICAgICAqIEBwYXJhbSBtb250aHMgOiB0aGUgb3B0aW9uYWwgc25hcHNob3QgbW9udGhzIFxyXG4gICAgICogQHBhcmFtIG1vbnRoIDogdGhlIG9wdGlvbmFsIHNuYXBzaG90IG1vbnRoXHJcbiAgICAgKiBAcGFyYW0gZGF0ZSA6IHRoZSBvcHRpbmFsIHNuYXBzaG90IGN1cnJlbnQgZGF0ZVxyXG4gICAgICovXHJcbiAgICBwcmVwYXJlUmVzdWx0cyhcclxuICAgICAgICBkYXRhPzogQ2xpcHBlclNlYXJjaFJlc3VsdCB8IG51bGwsXHJcbiAgICAgICAgZmFjZXRzPzogQ2xpcHBlclNlYXJjaEZhY2V0c1Jlc3VsdCB8IG51bGwsXHJcbiAgICAgICAgbW9udGhzPzogQ2xpcHBlclNlYXJjaENhbGVuZGFyU25hcHNob3RSZXN1bHQgfCBudWxsLFxyXG4gICAgICAgIG1vbnRoPzogQ2xpcHBlclNlYXJjaENhbGVuZGFyU25hcHNob3RSZXN1bHQgfCBudWxsLFxyXG4gICAgICAgIGRhdGU/OiBEYXRlIHwgbnVsbCkge1xyXG4gICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uPy5jdXJyZW50LmNsZWFyKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc25hcHNob3QgPSBkYXRhO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zbmFwc2hvdC5pdGVtcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlUmVzdWx0SXRlbXModGhpcy5zbmFwc2hvdC5pdGVtcywgdGhpcy5maWx0ZXJQYXJhbXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmYWNldHMgfHwgbW9udGhzIHx8IG1vbnRoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFzRmFjZXRzLnNldChmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuaGFzQ2FsZW5kYXIuc2V0KGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKGZhY2V0cykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYXNGYWNldHMuc2V0KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mYWNldHM/LnVwZGF0ZShmYWNldHMuZmFjZXRzLCBmYWNldHMuaW50ZXJ2YWwpO1xyXG4gICAgICAgICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zbmFwc2hvdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzID0gdGhpcy5mYWNldHMuc2F2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzLmhhc1Rvb01hbnlSZXN1bHRzID0gdGhpcy5zbmFwc2hvdC50b3RhbCA+PSAxMDAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1vbnRocyB8fCBtb250aCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYXNDYWxlbmRhci5zZXQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobW9udGhzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsZW5kYXI/LnVwZGF0ZShtb250aHMsICdtb250aHMnLCBkYXRlID8/IG5ldyBEYXRlKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAobW9udGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhcj8udXBkYXRlKG1vbnRoLCAnbW9udGgnLCBkYXRlID8/IG5ldyBEYXRlKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBSZXR1cm4gaXRlbSBzdGF0ZSBjc3MgY2xhc3NcclxuICAgICogQHBhcmFtIGl0ZW0gOiB0aGUgaXRlbSB0byBldmFsdWF0ZVxyXG4gICAgKi9cclxuICAgIGdldEl0ZW1TdGF0ZUNzc0NsYXNzKGl0ZW06IGFueSk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgIGlmIChpdGVtLmlzUmVhZCAhPT0gdHJ1ZSkgcmV0dXJuICd1bnJlYWQtYmcnO1xyXG4gICAgICAgIGlmIChpdGVtLmlzRXhwaXJlZCkgcmV0dXJuICdleHBpcmVkLWJnJztcclxuICAgICAgICBpZiAoaXRlbS5wb3B1bGFyaXR5ID09PSAzKSByZXR1cm4gJ3BvcHVsYXItYmcnO1xyXG4gICAgICAgIGVsc2UgaWYgKGl0ZW0ucG9wdWxhcml0eSA+IDMpIHJldHVybiAndmVyeS1wb3B1bGFyLWJnJztcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybiB0aGUgaXRlbSBzdGF0ZSB0b29sdGlwIHRleHRcclxuICAgICAqIEBwYXJhbSBpdGVtIDogdGhlIGl0ZW0gdG8gZXZhbHVhdGVcclxuICAgICAqL1xyXG4gICAgZ2V0SXRlbVN0YXRlVG9vbHRpcChpdGVtOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChpdGVtLmlzUmVhZCAhPT0gdHJ1ZSkgcmV0dXJuICdOb24gbGV0dG8nO1xyXG4gICAgICAgIGlmIChpdGVtLmlzRXhwaXJlZCkgcmV0dXJuICdOb24gcGnDuSB2aWdlbnRlJztcclxuICAgICAgICBpZiAoaXRlbS5wb3B1bGFyaXR5ID09PSAzKSByZXR1cm4gJ0RvY3VtZW50byBjb24gbnVtZXJvIGRpIGNpdGF6aW9uaSBhbHRvJztcclxuICAgICAgICBlbHNlIGlmIChpdGVtLnBvcHVsYXJpdHkgPiAzKVxyXG4gICAgICAgICAgICByZXR1cm4gJ0RvY3VtZW50byBjb24gbnVtZXJvIGRpIGNpdGF6aW9uaSBtb2x0byBhbHRvJztcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFJldHVybiB0aGUgaXRlbSBpY29uXHJcbiAgICAqIEBwYXJhbSBpdGVtIDogdGhlIGl0ZW0gdG8gZXZhbHVhdGVcclxuICAgICovXHJcbiAgICBnZXRJdGVtSWNvbihpdGVtOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgICAgIHN3aXRjaCAoaXRlbS5tb2RlbCkge1xyXG4gICAgICAgICAgICBjYXNlIENsaXBwZXJNb2RlbC5Ob3JtYXRpdmFWaWdlbnRlOiByZXR1cm4gJ2dhdmVsJztcclxuICAgICAgICAgICAgY2FzZSBDbGlwcGVyTW9kZWwuQXJ0aWNvbGk6XHJcbiAgICAgICAgICAgIGNhc2UgQ2xpcHBlck1vZGVsLlF1ZXNpdGk6XHJcbiAgICAgICAgICAgIGNhc2UgQ2xpcHBlck1vZGVsLk1ldG9kaURpQW5hbGlzaTogcmV0dXJuICdleHRlbnNpb24nO1xyXG4gICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gJ3VwZGF0ZWQnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRvZ2dsZSB0aGUgcmVhZCBmbGFnXHJcbiAgICAgKiBAcGFyYW0gaXRlbSA6IHRoZSBpdGVtIHRvIHVwZGF0ZVxyXG4gICAgICogQHBhcmFuIGU6IHRoZSBvcHRpb25hbCBjbGljayBldmVudFxyXG4gICAgICovXHJcbiAgICB0b2dnbGVSZWFkKGl0ZW06IENsaXBwZXJEb2N1bWVudEluZm8sIGU6IEV2ZW50IHwgbnVsbCA9IG51bGwpIHtcclxuICAgICAgICBlPy5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGU/LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIHRoaXMuc2V0UmVhZCghaXRlbT8uaXNSZWFkLCBpdGVtKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFRvZ2dsZSB0aGUgc2VsZWN0aW9uIGZsYWdcclxuICAgICogQHBhcmFtIGl0ZW0gOiB0aGUgaXRlbSB0byB1cGRhdGVcclxuICAgICogQHBhcmFuIGU6IHRoZSBvcHRpb25hbCBjbGljayBldmVudFxyXG4gICAgKi9cclxuICAgIHRvZ2dsZVNlbGVjdGlvbihpdGVtOiBhbnksIGU6IEV2ZW50IHwgbnVsbCA9IG51bGwpIHtcclxuICAgICAgICBlPy5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGU/LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uPy50b2dnbGUoaXRlbSwgaXRlbS5kb2N1bWVudElkKVxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEdldCB0aGUgc2VsZWN0ZWQgaWRcclxuICAgICovXHJcbiAgICBzZXRSZWFkKHZhbHVlOiBib29sZWFuLCBpdGVtOiBDbGlwcGVyRG9jdW1lbnRJbmZvID0gbnVsbCkge1xyXG4gICAgICAgIGxldCBkb2N1bWVudElkczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgICBkb2N1bWVudElkcyA9IFtpdGVtLmRvY3VtZW50SWRdO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5oYXNBbnlTZWxlY3Rpb24oKSkge1xyXG4gICAgICAgICAgICBkb2N1bWVudElkcyA9IHRoaXMuc2VsZWN0aW9uPy5hbGw/Lm1hcChuID0+IG4uZG9jdW1lbnRJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2UudXBkYXRlU3RhdGUoeyBkb2N1bWVudElkczogZG9jdW1lbnRJZHMsIGlzUmVhZDogdmFsdWUgfVxyXG4gICAgICAgICkuc3Vic2NyaWJlKHIgPT4ge1xyXG4gICAgICAgICAgICBpZiAoci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uaXNSZWFkID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaGFzQW55U2VsZWN0aW9uKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbj8uYWxsPy5mb3JFYWNoKG4gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuLmlzUmVhZCA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogT3BlbiBhbiBpdGVtXHJcbiAgICAqIFRoaXMgc2hvdWxkIGJlIGFsd2F5cyBvdmVycmlkZGVuXHJcbiAgICAqIEBwYXJhbSBkb2N1bWVudElkIDogdGhlIGRvY3VtZW50IGlkXHJcbiAgICAqIEBwYXJhbSBxdWVyeTogdGhlIHF1ZXJ5IHN0cmluZ1xyXG4gICAgKiBAcGFyYW0gbmV3V2luZG93OiB0cnVlIGlmIHRoZSBkb2N1bWVudCBtdXN0IGJlIG9wZW4gaW50byBhIG5ldyB3aW5kb3dcclxuICAgICovXHJcbiAgICBvcGVuKGRvY3VtZW50SWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsIHF1ZXJ5OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCwgbmV3V2luZG93OiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICBpZiAoIW5ld1dpbmRvdykge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5Eb2N1bWVudChkb2N1bWVudElkLCBxdWVyeSk7XHJcbiAgICAgICAgfSBlbHNlIHdpbmRvdy5vcGVuKCcvZG9jdW1lbnRvLycgKyBkb2N1bWVudElkLCAnX2JsYW5rJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPcGVuIGEgZG9jdW1lbnRcclxuICAgICAqIEBwYXJhbSBkb2N1bWVudElkIDogdGhlIGRvY3VtZW50IGlkXHJcbiAgICAgKiBAcGFyYW0gcXVlcnk6IHRoZSBxdWVyeSBzdHJpbmdcclxuICAgICAqL1xyXG4gICAgb3BlbkRvY3VtZW50KGRvY3VtZW50SWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsIHF1ZXJ5OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCkge1xyXG4gICAgICAgIGlmIChkb2N1bWVudElkKSB7XHJcbiAgICAgICAgICAgIENsaXBwZXJEb2N1bWVudHNVdGlscy5vcGVuRG9jdW1lbnQodGhpcy5kaWFsb2dTZXJ2aWNlLCB0aGlzLmNsaXBwZXJTZXJ2aWNlLCBkb2N1bWVudElkLCBxdWVyeSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8vXHJcbiAgICAvLyBSZXN0b3JhYmxlXHJcbiAgICAvLy9cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNhdmUgcmVzdG9yYWJsZSBkYXRhXHJcbiAgICAgKiBAcGFyYW0gaWQgOiB0aGUgcmVzdG9yYWJsZSBpZFxyXG4gICAgICogQHBhcmFtIHNjcm9sbCA6IHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvblxyXG4gICAgICovXHJcbiAgICBzYXZlKGlkOiBzdHJpbmcsIHNjcm9sbDogbnVtYmVyID0gMCkge1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXHJcbiAgICAgICAgICAgIGlkLFxyXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgICAgICBwYWdpbmF0b3I6IHtcclxuICAgICAgICAgICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2luYXRvcj8ucGFnZUluZGV4ID8/IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgdG90YWw6IHRoaXMuc25hcHNob3Q/LnRvdGFsID8/IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogdGhpcy5wYWdpbmF0b3I/LnBhZ2VTaXplID8/IDE1XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZmFjZXRzOiB0aGlzLmZhY2V0cz8uc2F2ZSgpLFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyUGFyYW1zOiB0aGlzLmZpbHRlclBhcmFtcyxcclxuICAgICAgICAgICAgICAgIHNjcm9sbDogc2Nyb2xsLFxyXG4gICAgICAgICAgICAgICAgc29ydDogeyBtb2RlOiB0aGlzLnNvcnRNb2RlLCBvcHRpb25zOiB0aGlzLnNvcnRPcHRpb25zIH0sXHJcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLnNuYXBzaG90XHJcbiAgICAgICAgICAgICAgICAgICAgPyB7IGl0ZW1zOiB0aGlzLnNuYXBzaG90Lml0ZW1zLCB0b3RhbDogdGhpcy5zbmFwc2hvdC50b3RhbCB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsXHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc3RvcmUgZGF0YVxyXG4gICAgICogQHBhcmFtIGlkIDogdGhlIHJlc3RvcmFibGUgaWRcclxuICAgICAqL1xyXG4gICAgcmVzdG9yZShpZDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGlkKTtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UodmFsdWUpO1xyXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMgPSBkYXRhLmZpbHRlclBhcmFtcztcclxuICAgICAgICAgICAgICAgIHRoaXMuc25hcHNob3QgPSBkYXRhLmRhdGE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNvcnRNb2RlID0gZGF0YS5zb3J0Lm1vZGU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNvcnRPcHRpb25zID0gZGF0YS5zb3J0Lm9wdGlvbnM7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mYWNldHMgJiYgZGF0YS5mYWNldHMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZhY2V0cy5yZXN0b3JlKGRhdGEuZmFjZXRzKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc0ZhY2V0cy5zZXQoZGF0YS5mYWNldHMuaGFzRmFjZXRzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhZ2luYXRvciAmJiBkYXRhLnBhZ2luYXRvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IGRhdGEucGFnaW5hdG9yLnBhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZVNpemUgPSBkYXRhLnBhZ2luYXRvci5zaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdG9yLmxlbmd0aCA9IGRhdGEucGFnaW5hdG9yLnRvdGFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5DT01NQU5EX1NFQVJDSF9SRVNUT1JFRCwgZGF0YS5maWx0ZXJQYXJhbXMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBTY3JvbGwgdG9wXHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbChkYXRhLnNjcm9sbCA/PyAwKTtcclxuICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
529
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLXJlc3VsdC1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvc2VhcmNoLXJlc3VsdC1tYW5hZ2VyL3NlYXJjaC1yZXN1bHQtbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQWEsU0FBUyxFQUFFLE1BQU0sRUFDdkMsTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBdUIsZUFBZSxFQUFFLFlBQVksRUFBa0UsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2xQLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsVUFBVSxFQUNLLGFBQWEsRUFBbUIsV0FBVyxFQUM3RCxNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzlGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOztBQWNoRixNQUFN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LE9BQU8sRUFBRTt3QkFDTCwwQkFBMEI7d0JBQzFCLHdCQUF3Qjt3QkFDeEIsNEJBQTRCO3dCQUM1Qiw4QkFBOEI7cUJBQUM7aUJBQ3RDOzhCQUcyQixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBQ0QsTUFBTTtzQkFBMUIsU0FBUzt1QkFBQyxRQUFRO2dCQUNJLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJyZWFrcG9pbnRPYnNlcnZlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xyXG5pbXBvcnQge1xyXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIENvbXBvbmVudCwgT25EZXN0cm95LCBWaWV3Q2hpbGQsIGluamVjdCxcclxuICAgIHNpZ25hbFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBDbGlwcGVyRG9jdW1lbnRJbmZvLCBDbGlwcGVyTWVzc2FnZXMsIENsaXBwZXJNb2RlbCwgQ2xpcHBlclNlYXJjaENhbGVuZGFyU25hcHNob3RSZXN1bHQsIENsaXBwZXJTZWFyY2hGYWNldHNSZXN1bHQsIENsaXBwZXJTZWFyY2hQYXJhbXMsIENsaXBwZXJTZWFyY2hSZXN1bHQsIENsaXBwZXJTZXJ2aWNlLCBDbGlwcGVyU29ydCB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY2xpcHBlci5jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gICAgQnJvYWRjYXN0U2VydmljZSxcclxuICAgIERhdGVGb3JtYXQsXHJcbiAgICBOYW1lVmFsdWVJdGVtLCBTY3JlZW5TZXJ2aWNlLCBTZWxlY3RhYmxlTW9kZWwsIFN5c3RlbVV0aWxzXHJcbn0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jb3JlJztcclxuaW1wb3J0IHsgQXBwbGljYXRpb25EaWFsb2dTZXJ2aWNlIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy91aS5hcHBsaWNhdGlvbic7XHJcbmltcG9ydCB7IHN0YXJ0T2ZEYXksIHN0YXJ0T2ZUb2RheSwgc3ViRGF5cyB9IGZyb20gJ2RhdGUtZm5zJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoQ2FsZW5kYXJDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2gtY2FsZW5kYXIvc2VhcmNoLWNhbGVuZGFyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENsaXBwZXJTZWFyY2hGYWNldHNDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2gtZmFjZXRzL3NlYXJjaC1mYWNldHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2xpcHBlckRvY3VtZW50c1V0aWxzIH0gZnJvbSAnLi4vLi4vZG9jdW1lbnRzJztcclxuaW1wb3J0IHsgQ2xpcHBlckRvY3VtZW50Q29tcG9uZW50IH0gZnJvbSAnLi4vZG9jdW1lbnQvZG9jdW1lbnQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2xpcHBlclJlZmVyZW5jZXNDb21wb25lbnQgfSBmcm9tICcuLi9yZWZlcmVuY2VzL3JlZmVyZW5jZXMuY29tcG9uZW50JztcclxuXHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICB0ZW1wbGF0ZTogJzxkaXY+PC9kaXY+JyxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgICBDbGlwcGVyUmVmZXJlbmNlc0NvbXBvbmVudCxcclxuICAgICAgICBDbGlwcGVyRG9jdW1lbnRDb21wb25lbnQsXHJcbiAgICAgICAgQ2xpcHBlclNlYXJjaEZhY2V0c0NvbXBvbmVudCxcclxuICAgICAgICBDbGlwcGVyU2VhcmNoQ2FsZW5kYXJDb21wb25lbnRdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2xpcHBlclNlYXJjaFJlc3VsdE1hbmFnZXJcclxuICAgIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICAgIEBWaWV3Q2hpbGQoJ3BhZ2luYXRvcicpIHBhZ2luYXRvciE6IE1hdFBhZ2luYXRvcjtcclxuICAgIEBWaWV3Q2hpbGQoJ2ZhY2V0cycpIGZhY2V0cyE6IENsaXBwZXJTZWFyY2hGYWNldHNDb21wb25lbnQ7XHJcbiAgICBAVmlld0NoaWxkKCdjYWxlbmRhcicpIGNhbGVuZGFyITogQ2xpcHBlclNlYXJjaENhbGVuZGFyQ29tcG9uZW50O1xyXG5cclxuICAgIHByb3RlY3RlZCB1bnN1YnNjcmliZTogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICBwcm90ZWN0ZWQgY2hhbmdlRGV0ZWN0b3IgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgcHJvdGVjdGVkIGNsaXBwZXJTZXJ2aWNlID0gaW5qZWN0KENsaXBwZXJTZXJ2aWNlKTtcclxuICAgIHByb3RlY3RlZCBicmVha3BvaW50T2JzZXJ2ZXIgPSBpbmplY3QoQnJlYWtwb2ludE9ic2VydmVyKTtcclxuICAgIHByb3RlY3RlZCBicm9hZGNhc3RTZXJ2aWNlID0gaW5qZWN0KEJyb2FkY2FzdFNlcnZpY2UpO1xyXG4gICAgcHJvdGVjdGVkIGRpYWxvZ1NlcnZpY2UgPSBpbmplY3QoQXBwbGljYXRpb25EaWFsb2dTZXJ2aWNlKTtcclxuICAgIHB1YmxpYyBzY3JlZW5TZXJ2aWNlID0gaW5qZWN0KFNjcmVlblNlcnZpY2UpO1xyXG4gICAgcHVibGljIHNlbGVjdGlvbjogU2VsZWN0YWJsZU1vZGVsPGFueSwgc3RyaW5nPiB8IG51bGwgPSBudWxsO1xyXG4gICAgcHJvdGVjdGVkIHNuYXBzaG90OiBDbGlwcGVyU2VhcmNoUmVzdWx0IHwgbnVsbCA9IG5ldyBDbGlwcGVyU2VhcmNoUmVzdWx0KCk7XHJcbiAgICBwcm90ZWN0ZWQgZmlsdGVyQnVzeSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgICBwcm90ZWN0ZWQgZmlsdGVyUGFyYW1zOiBDbGlwcGVyU2VhcmNoUGFyYW1zID0gbmV3IENsaXBwZXJTZWFyY2hQYXJhbXMoKTtcclxuICAgIHByb3RlY3RlZCBmaWx0ZXJQYW5lSGFzQmFja2Ryb3A6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByb3RlY3RlZCBmaWx0ZXJQYW5lQ2xvc2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcm90ZWN0ZWQgZmlsdGVyUGFuZTJIYXNCYWNrZHJvcDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJvdGVjdGVkIGZpbHRlclBhbmUyQ2xvc2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcm90ZWN0ZWQgc29ydE9wdGlvbnM6IE5hbWVWYWx1ZUl0ZW08bnVtYmVyPltdID0gW107XHJcbiAgICBwcm90ZWN0ZWQgc29ydE1vZGU6IE5hbWVWYWx1ZUl0ZW08bnVtYmVyPiB8IG51bGwgPSBudWxsO1xyXG4gICAgcHJvdGVjdGVkIHNjcm9sbGVySWQ6IHN0cmluZyA9ICdzY3JvbGxlcl8nICsgU3lzdGVtVXRpbHMuZ2VuZXJhdGVVVUlEKCk7XHJcbiAgICBwcm90ZWN0ZWQgcmVzdG9yYWJsZUlkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAgIHByb3RlY3RlZCBoYXNGYWNldHMgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcHJvdGVjdGVkIGhhc0NhbGVuZGFyID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHByb3RlY3RlZCBoYXNSZWdpb25zID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5maWx0ZXJQYXJhbXMuc2VjdG9ycz8uZmlsdGVyKG4gPT4gbi52YWx1ZSA9PT0gJ0xSJykubGVuZ3RoID8/IDApID4gMDtcclxuICAgIH07XHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlLm5leHQoKTtcclxuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIG1lbnUgYnV0dG9ucyB2aXNpYmlsaXR5IHdoZW4gdGhlIG1lbnUgaXMgY2xvc2VkXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZU1lbnVCdXR0b25zVmlzaWJpbGl0eSgpIHtcclxuICAgICAgICBpZiAodGhpcy5zbmFwc2hvdCkge1xyXG4gICAgICAgICAgICB0aGlzLnNuYXBzaG90Lml0ZW1zPy5mb3JFYWNoKChuOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIG4uaXNNZW51T3BlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY3JvbGwgb24gdG9wIG8gbGlzdCBhcmVhXHJcbiAgICAgKiBAcGFyYW0gdG9wOiB0aGUgdG9wIHBvc2l0aW9uXHJcbiAgICAgKi9cclxuICAgIHNjcm9sbCh0b3A6IG51bWJlciA9IDApIHtcclxuICAgICAgICBjb25zdCBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zY3JvbGxlcklkKTtcclxuICAgICAgICBpZiAoZWxlbSkge1xyXG4gICAgICAgICAgICBlbGVtLnNjcm9sbFRvKHsgdG9wOiB0b3AsIGxlZnQ6IDAsIGJlaGF2aW9yOiAnYXV0bycgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2sgaWYgZXZlcnkgZWxlbWVudCBhcmUgc2VsZWN0ZWRcclxuICAgICAqL1xyXG4gICAgYWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uPy5jdXJyZW50Py5zZWxlY3RlZD8ubGVuZ3RoID09PSB0aGlzLnNuYXBzaG90Py5pdGVtcz8ubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFzdGVyIHNlbGVjdGlvbiB0b2dnbGVcclxuICAgICAqIEBwYXJhbSBzZWxlY3Q6IHRydWUgdG8gc2VsZWN0IGFsbCBlbGVtZW50cyBmYWxzZSB0byBkZXNlbGVjdCBhbGwgZWxlbWVudHNcclxuICAgICAqL1xyXG4gICAgc2VsZWN0QWxsKHNlbGVjdDogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgICAgICBpZiAoc2VsZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc25hcHNob3Q/Lml0ZW1zPy5mb3JFYWNoKChuOiBhbnkpID0+IHRoaXMuc2VsZWN0aW9uPy5zZWxlY3Qobiwgbi5kb2N1bWVudElkKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zbmFwc2hvdD8uaXRlbXM/LmZvckVhY2goKG46IGFueSkgPT4gdGhpcy5zZWxlY3Rpb24/LmRlc2VsZWN0KG4sIG4uZG9jdW1lbnRJZCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogQ2hlY2sgaWYgc2VsZWN0aW9ucyBleGlzdHNcclxuICAgICogQHJldHVybnMgdHJ1ZSBpZiBhdCBsZWFzdCBvbmUgZWxlbWVudCBpcyBzZWxlY3RlZFxyXG4gICAgKi9cclxuICAgIGhhc0FueVNlbGVjdGlvbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuc2VsZWN0aW9uPy5hbGw/Lmxlbmd0aCA/PyAwKSA+IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIENoZWNrIGlmIG9ubHkgb25lIGVsZW1lbnQgaXMgc2VsZWN0ZWRcclxuICAgICogQHJldHVybnMgdHJ1ZSBpZiBvbmx5IG9uZSBlbGVtZW50IGlzIHNlbGVjdGVkXHJcbiAgICAqL1xyXG4gICAgaGFzU2luZ2xlU2VsZWN0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5zZWxlY3Rpb24/LmFsbD8ubGVuZ3RoID8/IDApID09PSAxO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBHZXQgdGhlIGZpcnN0IHNlbGVjdGVkIGl0ZW0gXHJcbiAgICAqIEByZXR1cm5zIHRoZSBzZWxlY3RlZCBpdGVtIG9yIG51bGwgICAgXHJcbiAgICAqL1xyXG4gICAgZ2V0U2luZ2xlU2VsZWN0aW9uKCk6IGFueSB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmhhc0FueVNlbGVjdGlvbigpID8gdGhpcy5zZWxlY3Rpb24/LmFsbFswXSA6IG51bGw7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICogQ2xlYXIgc2VsZWN0aW9uXHJcbiAgICAqL1xyXG4gICAgY2xlYXJTZWxlY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uPy5jbGVhcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIGl0ZW1zIG9yIG51bGxcclxuICAgKiBAcmV0dXJucyBSZXR1cm4gdGhlIG51bWJlciBvZiBzZWxlY3RlZCBpdGVtc1xyXG4gICAqL1xyXG4gICAgY291bnRTZWxlY3Rpb25zKCk6IG51bWJlciB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5zZWxlY3Rpb24gJiYgdGhpcy5zZWxlY3Rpb24/LmFsbD8ubGVuZ3RoID4gMCkgPyB0aGlzLnNlbGVjdGlvbj8uYWxsPy5sZW5ndGggOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICogR2V0IHRoZSBzZWxlY3RlZCBpZFxyXG4gICovXHJcbiAgICBnZXRTZWxldGVjdElkKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgIGlmICh0aGlzLmhhc0FueVNlbGVjdGlvbigpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbj8uYWxsWzBdLmRvY3VtZW50SWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gKiBHZXQgYWxsIHNlbGVjdGVkIGlkc1xyXG4gKi9cclxuICAgIGdldFNlbGV0ZWN0SWRzKCk6IHN0cmluZ1tdIHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKCh0aGlzLnNlbGVjdGlvbj8uYWxsPy5sZW5ndGggPz8gMCkgPiAxMDApIHtcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKCdMYSBzZWxlemlvbmUgbm9uIHB1w7IgY29udGVuZXJlIHBpw7kgZGkgMTAwIGVsZW1lbnRpLicpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGlkczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBpZiAodGhpcy5oYXNBbnlTZWxlY3Rpb24oKSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbj8uYWxsPy5mb3JFYWNoKChuOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlkcy5wdXNoKG4uZG9jdW1lbnRJZCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaWRzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGFsbCBzZWxlY3RlZCBpZHNcclxuICAgICAqL1xyXG4gICAgZ2V0U2VsZXRlY3RJZHNBbmREYXRhKCk6IGFueVtdIHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKCh0aGlzLnNlbGVjdGlvbj8uYWxsPy5sZW5ndGggPz8gMCkgPiAxMDApIHtcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKCdMYSBzZWxlemlvbmUgbm9uIHB1w7IgY29udGVuZXJlIHBpw7kgZGkgMTAwIGVsZW1lbnRpLicpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGRhdGE6IGFueSA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLmhhc0FueVNlbGVjdGlvbigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uPy5hbGw/LmZvckVhY2goKG46IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZGF0YS5wdXNoKHsgaWQ6IG4uZG9jdW1lbnRJZCwgZGF0YTogbiB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFByZXBhcmUgcmVzdWx0IGl0ZW1zXHJcbiAgICAgKiBAcGFyYW0gaXRlbXMgOiB0aGUgaXRlbXMgdG8gcHJvY2Vzc1xyXG4gICAgICogQHBhcmFtIHBhcmFtcyA6IHRoZSBjdXJyZW50IHNlYXJjaCBwYXJhbXNcclxuICAgICAqL1xyXG4gICAgcHJlcGFyZVJlc3VsdEl0ZW1zKGl0ZW1zOiBDbGlwcGVyRG9jdW1lbnRJbmZvW10sIHBhcmFtczogQ2xpcHBlclNlYXJjaFBhcmFtcykge1xyXG4gICAgICAgIGNvbnN0IHRvZGF5ID0gc3RhcnRPZlRvZGF5KCk7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBCeVllYXIgPVxyXG4gICAgICAgICAgICAhcGFyYW1zLnNvcnRNb2RlIHx8XHJcbiAgICAgICAgICAgIHBhcmFtcy5zb3J0TW9kZSA9PT0gQ2xpcHBlclNvcnQuRGF0ZUFzYyB8fFxyXG4gICAgICAgICAgICBwYXJhbXMuc29ydE1vZGUgPT09IENsaXBwZXJTb3J0LkRhdGVEZXNjIHx8XHJcbiAgICAgICAgICAgIHBhcmFtcy5zb3J0TW9kZSA9PT0gQ2xpcHBlclNvcnQuU291cmNlRGF0ZUFzYyB8fFxyXG4gICAgICAgICAgICBwYXJhbXMuc29ydE1vZGUgPT09IENsaXBwZXJTb3J0LlNvdXJjZURhdGVEZXNjO1xyXG4gICAgICAgIGNvbnN0IGdyb3VwQnlSZWxldmFuY2UgPSBwYXJhbXMuc29ydE1vZGUgPT09IENsaXBwZXJTb3J0LlJlbGV2YW5jZTtcclxuICAgICAgICBjb25zdCBncm91cEJ5UG9wdWxhcml0eSA9IHBhcmFtcy5zb3J0TW9kZSA9PT0gQ2xpcHBlclNvcnQuUG9wdWxhcml0eTtcclxuICAgICAgICBsZXQgZ3JvdXAgPSAnJztcclxuICAgICAgICBpdGVtcz8uZm9yRWFjaChuID0+IHtcclxuICAgICAgICAgICAgbi5kb2N1bWVudElkID0gbi5kb2N1bWVudElkID8/IG4uaWQ7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uPy51cGRhdGVDdXJyZW50KG4sIG4uZG9jdW1lbnRJZCk7XHJcbiAgICAgICAgICAgIGlmIChuLm1vZGVsID09PSBDbGlwcGVyTW9kZWwuUXVlc2l0aSkge1xyXG4gICAgICAgICAgICAgICAgbi5pbmZvID0gXCJRdWVzaXRvIG7CsCBcIiArIG4ubnVtYmVyICsgXCIgZGVsIFwiICsgU3lzdGVtVXRpbHMuZm9ybWF0RGF0ZShuLmRhdGUsIFwiZCBNTU0geXl5eVwiKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChuLm1vZGVsID09PSBDbGlwcGVyTW9kZWwuU2NhZGVuemUgfHxcclxuICAgICAgICAgICAgICAgIG4ubW9kZWwgPT09IENsaXBwZXJNb2RlbC5TZWduYWxhemlvbmkpIHtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAobi5tb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQ2xpcHBlck1vZGVsLlNjYWRlbnplOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuLm9yaWdpbkRlc2NyaXB0aW9uID0gJ1NjYWRlbnphJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBDbGlwcGVyTW9kZWwuU2VnbmFsYXppb25pOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuLm9yaWdpbkRlc2NyaXB0aW9uID0gJ1NlZ25hbGF6aW9uZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG4uZXhwaXJpbmdJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhcnRzID0gbi5leHBpcmluZ0luZm8uc3BsaXQoJ3wnKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGFydHMubGVuZ3RoID09PSAzKSBuLmV4cGlyaW5nRGVzY3JpcHRpb24gPSBwYXJ0c1syXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChuLmV4cGlyaW5nRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG4uZGF0ZSA9IHN0YXJ0T2ZEYXkobmV3IERhdGUobi5leHBpcmluZ0RhdGUpKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkID0gc3RhcnRPZkRheShzdWJEYXlzKG4uZGF0ZSwgMTUpKTtcclxuICAgICAgICAgICAgICAgICAgICBuLmlzRXhwaXJpbmcgPSB0b2RheSA8PSBuLmRhdGUgJiYgdG9kYXkgPj0gZDtcclxuICAgICAgICAgICAgICAgICAgICBuLmlzRXhwaXJlZCA9IG4uZGF0ZSA8IHRvZGF5O1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICgobi5tb2RlbCA9PT0gQ2xpcHBlck1vZGVsLkFydGljb2xpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgbi5tb2RlbCA9PT0gQ2xpcHBlck1vZGVsLk5ld3MpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgbi50YWdzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbi5pbmZvID0gbi50YWdzLnRvVXBwZXJDYXNlKCkuc3Vic3RyaW5nKDEpLnJlcGxhY2VBbGwoXCIjXCIsIFwiLCBcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobi5tb2RlbCAhPT0gQ2xpcHBlck1vZGVsLkFnZ2lvcm5hbWVudG9Ob3JtYXRpdm8gJiZcclxuICAgICAgICAgICAgICAgICAgICBuLm1vZGVsICE9PSBDbGlwcGVyTW9kZWwuTm9ybWF0aXZhVmlnZW50ZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIG4ubW9kZWwgIT09IENsaXBwZXJNb2RlbC5KdXJpcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIG4uZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG4uZGF0ZSA9IHN0YXJ0T2ZEYXkobmV3IERhdGUobi5kYXRlID8/IG4ucHVibGlzaGluZ0RhdGUpKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkID0gc3RhcnRPZkRheShzdWJEYXlzKHN0YXJ0T2ZUb2RheSgpLCA3KSlcclxuICAgICAgICAgICAgICAgICAgICBuLmlzTmV3ID0gbi5kYXRlID4gZDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbi5kYXRlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChuLmFuY2hvcnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYW5jaG9yVHlwZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFuY2hvcnM6IGFueSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIG4uYW5jaG9ycy5mb3JFYWNoKChhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEudHlwZSA9PT0gMjApIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEudHlwZSAhPT0gYW5jaG9yVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEudHlwZSA+PSAzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvcnMucHVzaCh7IHRleHQ6IGEudHlwZURlc2NyaXB0aW9uIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yVHlwZSA9IGEudHlwZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2NvcmUgPSBhLnNjb3JlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcmUgPiA3KSBzY29yZSAtPSA3O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzY29yZSA+IDUpIHNjb3JlIC09IDU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjb3JlID4gMykgc2NvcmUgLT0gMztcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGEudGV4dCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBhLnRpdGxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRJZDogYS5kb2N1bWVudElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpOiBhLnVyaSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnlSZWxldmFudDogc2NvcmUgPiAwLjYsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIG4uYW5jaG9ycyA9IGFuY2hvcnM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobi52YWxpZGl0eVN0YXRlID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG4udmFsaWRpdHlEZXNjcmlwdGlvbiA9ICdJbCBkb2N1bWVudG8gbm9uIMOoIHBpw7kgdmlnZW50ZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgbi5pc0V4cGlyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChuLnZhbGlkVW50aWxEYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cGlyaW5nRGF0ZSA9IHN0YXJ0T2ZEYXkobmV3IERhdGUobi52YWxpZFVudGlsRGF0ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhwaXJpbmdEYXRlIDwgdG9kYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4udmFsaWRpdHlEZXNjcmlwdGlvbiA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0lsIGRvY3VtZW50byBub24gw6ggcGnDuSB2aWdlbnRlIGRhbCAnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW1VdGlscy5mb3JtYXREYXRlKGV4cGlyaW5nRGF0ZSkgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4udmFsaWRpdHlEZXNjcmlwdGlvbiA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0lsIGRvY3VtZW50byBub24gc2Fyw6AgcGnDuSB2aWdlbnRlIGRhbCAnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW1VdGlscy5mb3JtYXREYXRlKGV4cGlyaW5nRGF0ZSkgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4uaXNFeHBpcmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobi5leHBpcmluZ0RhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBuLmRhdGUgPSBzdGFydE9mRGF5KG5ldyBEYXRlKG4uZXhwaXJpbmdEYXRlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZCA9IHN0YXJ0T2ZEYXkoc3ViRGF5cyhuLmRhdGUsIDE1KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbi5pc0V4cGlyaW5nID0gdG9kYXkgPD0gbi5kYXRlICYmIHRvZGF5ID49IGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbi5pc0V4cGlyZWQgPSBuLmRhdGUgPCB0b2RheTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZ3JvdXBCeVllYXIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHllYXIgPSBTeXN0ZW1VdGlscy5mb3JtYXREYXRlKG4uZGF0ZSA/PyBuLnB1Ymxpc2hpbmdEYXRlLCBEYXRlRm9ybWF0LkxvbmdNb250aEFuZFllYXIpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXAgIT09IHllYXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBuLmdyb3VwID0geWVhcjtcclxuICAgICAgICAgICAgICAgICAgICBncm91cCA9IHllYXI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZ3JvdXBCeVJlbGV2YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwICE9PSAnbm9uZScpIHtcclxuICAgICAgICAgICAgICAgICAgICBuLmdyb3VwID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgJ0VsZW1lbnRpIHBpw7kgcmlsZXZhbnRpIHBlciBsYSByaWNlcmNhOiAnICsgcGFyYW1zLnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZ3JvdXBCeVBvcHVsYXJpdHkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChncm91cCAhPT0gJ25vbmUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbi5ncm91cCA9ICdFbGVtZW50aSBwacO5IHBvcG9sYXJpIGluIG9yZGluZSBkZWNyZXNjZW50ZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcmVwYXJlIHJlc3VsdHNcclxuICAgICAqIEBwYXJhbSBkYXRhIDogdGhlIG9wdGlvbmFsIHJlc3VsdCBsaXN0IHRvIHByZXBhcmVcclxuICAgICAqIEBwYXJhbSBmYWNldHMgOiB0aGUgb3B0aW9uYWwgZmFjZXRzIGxpc3QgdG8gcHJlcGFyZVxyXG4gICAgICogQHBhcmFtIG1vbnRocyA6IHRoZSBvcHRpb25hbCBzbmFwc2hvdCBtb250aHMgXHJcbiAgICAgKiBAcGFyYW0gbW9udGggOiB0aGUgb3B0aW9uYWwgc25hcHNob3QgbW9udGhcclxuICAgICAqIEBwYXJhbSBkYXRlIDogdGhlIG9wdGluYWwgc25hcHNob3QgY3VycmVudCBkYXRlXHJcbiAgICAgKi9cclxuICAgIHByZXBhcmVSZXN1bHRzKFxyXG4gICAgICAgIGRhdGE/OiBDbGlwcGVyU2VhcmNoUmVzdWx0IHwgbnVsbCxcclxuICAgICAgICBmYWNldHM/OiBDbGlwcGVyU2VhcmNoRmFjZXRzUmVzdWx0IHwgbnVsbCxcclxuICAgICAgICBtb250aHM/OiBDbGlwcGVyU2VhcmNoQ2FsZW5kYXJTbmFwc2hvdFJlc3VsdCB8IG51bGwsXHJcbiAgICAgICAgbW9udGg/OiBDbGlwcGVyU2VhcmNoQ2FsZW5kYXJTbmFwc2hvdFJlc3VsdCB8IG51bGwsXHJcbiAgICAgICAgZGF0ZT86IERhdGUgfCBudWxsKSB7XHJcbiAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24/LmN1cnJlbnQuY2xlYXIoKTtcclxuICAgICAgICAgICAgdGhpcy5zbmFwc2hvdCA9IGRhdGE7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNuYXBzaG90Lml0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmVSZXN1bHRJdGVtcyh0aGlzLnNuYXBzaG90Lml0ZW1zLCB0aGlzLmZpbHRlclBhcmFtcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZhY2V0cyB8fCBtb250aHMgfHwgbW9udGgpIHtcclxuICAgICAgICAgICAgdGhpcy5oYXNGYWNldHMuc2V0KGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5oYXNDYWxlbmRhci5zZXQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAoZmFjZXRzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0ZhY2V0cy5zZXQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZhY2V0cz8udXBkYXRlKGZhY2V0cy5mYWNldHMsIGZhY2V0cy5pbnRlcnZhbCk7XHJcbiAgICAgICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNuYXBzaG90KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zbmFwc2hvdC5mYWNldHMgPSB0aGlzLmZhY2V0cy5zYXZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zbmFwc2hvdC5mYWNldHMuaGFzVG9vTWFueVJlc3VsdHMgPSB0aGlzLnNuYXBzaG90LnRvdGFsID49IDEwMDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobW9udGhzIHx8IG1vbnRoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0NhbGVuZGFyLnNldCh0cnVlKTtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtb250aHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhcj8udXBkYXRlKG1vbnRocywgJ21vbnRocycsIGRhdGUgPz8gbmV3IERhdGUoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtb250aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyPy51cGRhdGUobW9udGgsICdtb250aCcsIGRhdGUgPz8gbmV3IERhdGUoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFJldHVybiBpdGVtIHN0YXRlIGNzcyBjbGFzc1xyXG4gICAgKiBAcGFyYW0gaXRlbSA6IHRoZSBpdGVtIHRvIGV2YWx1YXRlXHJcbiAgICAqL1xyXG4gICAgZ2V0SXRlbVN0YXRlQ3NzQ2xhc3MoaXRlbTogYW55KTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKGl0ZW0uaXNSZWFkICE9PSB0cnVlKSByZXR1cm4gJ3VucmVhZC1iZyc7XHJcbiAgICAgICAgaWYgKGl0ZW0uaXNFeHBpcmVkKSByZXR1cm4gJ2V4cGlyZWQtYmcnO1xyXG4gICAgICAgIGlmIChpdGVtLnBvcHVsYXJpdHkgPT09IDMpIHJldHVybiAncG9wdWxhci1iZyc7XHJcbiAgICAgICAgZWxzZSBpZiAoaXRlbS5wb3B1bGFyaXR5ID4gMykgcmV0dXJuICd2ZXJ5LXBvcHVsYXItYmcnO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJuIHRoZSBpdGVtIHN0YXRlIHRvb2x0aXAgdGV4dFxyXG4gICAgICogQHBhcmFtIGl0ZW0gOiB0aGUgaXRlbSB0byBldmFsdWF0ZVxyXG4gICAgICovXHJcbiAgICBnZXRJdGVtU3RhdGVUb29sdGlwKGl0ZW06IGFueSk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKGl0ZW0uaXNSZWFkICE9PSB0cnVlKSByZXR1cm4gJ05vbiBsZXR0byc7XHJcbiAgICAgICAgaWYgKGl0ZW0uaXNFeHBpcmVkKSByZXR1cm4gJ05vbiBwacO5IHZpZ2VudGUnO1xyXG4gICAgICAgIGlmIChpdGVtLnBvcHVsYXJpdHkgPT09IDMpIHJldHVybiAnRG9jdW1lbnRvIGNvbiBudW1lcm8gZGkgY2l0YXppb25pIGFsdG8nO1xyXG4gICAgICAgIGVsc2UgaWYgKGl0ZW0ucG9wdWxhcml0eSA+IDMpXHJcbiAgICAgICAgICAgIHJldHVybiAnRG9jdW1lbnRvIGNvbiBudW1lcm8gZGkgY2l0YXppb25pIG1vbHRvIGFsdG8nO1xyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogUmV0dXJuIHRoZSBpdGVtIGljb25cclxuICAgICogQHBhcmFtIGl0ZW0gOiB0aGUgaXRlbSB0byBldmFsdWF0ZVxyXG4gICAgKi9cclxuICAgIGdldEl0ZW1JY29uKGl0ZW06IGFueSk6IHN0cmluZyB7XHJcbiAgICAgICAgc3dpdGNoIChpdGVtLm1vZGVsKSB7XHJcbiAgICAgICAgICAgIGNhc2UgQ2xpcHBlck1vZGVsLk5vcm1hdGl2YVZpZ2VudGU6IHJldHVybiAnZ2F2ZWwnO1xyXG4gICAgICAgICAgICBjYXNlIENsaXBwZXJNb2RlbC5BcnRpY29saTpcclxuICAgICAgICAgICAgY2FzZSBDbGlwcGVyTW9kZWwuUXVlc2l0aTpcclxuICAgICAgICAgICAgY2FzZSBDbGlwcGVyTW9kZWwuTWV0b2RpRGlBbmFsaXNpOiByZXR1cm4gJ2V4dGVuc2lvbic7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiAndXBkYXRlZCc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVG9nZ2xlIHRoZSByZWFkIGZsYWdcclxuICAgICAqIEBwYXJhbSBpdGVtIDogdGhlIGl0ZW0gdG8gdXBkYXRlXHJcbiAgICAgKiBAcGFyYW4gZTogdGhlIG9wdGlvbmFsIGNsaWNrIGV2ZW50XHJcbiAgICAgKi9cclxuICAgIHRvZ2dsZVJlYWQoaXRlbTogQ2xpcHBlckRvY3VtZW50SW5mbywgZTogRXZlbnQgfCBudWxsID0gbnVsbCkge1xyXG4gICAgICAgIGU/LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZT8uc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgdGhpcy5zZXRSZWFkKCFpdGVtPy5pc1JlYWQsIGl0ZW0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogVG9nZ2xlIHRoZSBzZWxlY3Rpb24gZmxhZ1xyXG4gICAgKiBAcGFyYW0gaXRlbSA6IHRoZSBpdGVtIHRvIHVwZGF0ZVxyXG4gICAgKiBAcGFyYW4gZTogdGhlIG9wdGlvbmFsIGNsaWNrIGV2ZW50XHJcbiAgICAqL1xyXG4gICAgdG9nZ2xlU2VsZWN0aW9uKGl0ZW06IGFueSwgZTogRXZlbnQgfCBudWxsID0gbnVsbCkge1xyXG4gICAgICAgIGU/LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZT8uc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24/LnRvZ2dsZShpdGVtLCBpdGVtLmRvY3VtZW50SWQpXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogR2V0IHRoZSBzZWxlY3RlZCBpZFxyXG4gICAgKi9cclxuICAgIHNldFJlYWQodmFsdWU6IGJvb2xlYW4sIGl0ZW06IENsaXBwZXJEb2N1bWVudEluZm8gPSBudWxsKSB7XHJcbiAgICAgICAgbGV0IGRvY3VtZW50SWRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50SWRzID0gW2l0ZW0uZG9jdW1lbnRJZF07XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmhhc0FueVNlbGVjdGlvbigpKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50SWRzID0gdGhpcy5zZWxlY3Rpb24/LmFsbD8ubWFwKG4gPT4gbi5kb2N1bWVudElkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jbGlwcGVyU2VydmljZS51cGRhdGVTdGF0ZSh7IGRvY3VtZW50SWRzOiBkb2N1bWVudElkcywgaXNSZWFkOiB2YWx1ZSB9XHJcbiAgICAgICAgKS5zdWJzY3JpYmUociA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5pc1JlYWQgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5oYXNBbnlTZWxlY3Rpb24oKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uPy5hbGw/LmZvckVhY2gobiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG4uaXNSZWFkID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBPcGVuIGFuIGl0ZW1cclxuICAgICogVGhpcyBzaG91bGQgYmUgYWx3YXlzIG92ZXJyaWRkZW5cclxuICAgICogQHBhcmFtIGRvY3VtZW50SWQgOiB0aGUgZG9jdW1lbnQgaWRcclxuICAgICogQHBhcmFtIHF1ZXJ5OiB0aGUgcXVlcnkgc3RyaW5nXHJcbiAgICAqIEBwYXJhbSBuZXdXaW5kb3c6IHRydWUgaWYgdGhlIGRvY3VtZW50IG11c3QgYmUgb3BlbiBpbnRvIGEgbmV3IHdpbmRvd1xyXG4gICAgKi9cclxuICAgIG9wZW4oZG9jdW1lbnRJZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCwgcXVlcnk6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsLCBuZXdXaW5kb3c6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIGlmICghbmV3V2luZG93KSB7XHJcbiAgICAgICAgICAgIHRoaXMub3BlbkRvY3VtZW50KGRvY3VtZW50SWQsIHF1ZXJ5KTtcclxuICAgICAgICB9IGVsc2Ugd2luZG93Lm9wZW4oJy9kb2N1bWVudG8vJyArIGRvY3VtZW50SWQsICdfYmxhbmsnKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9wZW4gYSBkb2N1bWVudFxyXG4gICAgICogQHBhcmFtIGRvY3VtZW50SWQgOiB0aGUgZG9jdW1lbnQgaWRcclxuICAgICAqIEBwYXJhbSBxdWVyeTogdGhlIHF1ZXJ5IHN0cmluZ1xyXG4gICAgICovXHJcbiAgICBvcGVuRG9jdW1lbnQoZG9jdW1lbnRJZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCwgcXVlcnk6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKGRvY3VtZW50SWQpIHtcclxuICAgICAgICAgICAgQ2xpcHBlckRvY3VtZW50c1V0aWxzLm9wZW5Eb2N1bWVudCh0aGlzLmRpYWxvZ1NlcnZpY2UsIHRoaXMuY2xpcHBlclNlcnZpY2UsIGRvY3VtZW50SWQsIHF1ZXJ5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLy9cclxuICAgIC8vIFJlc3RvcmFibGVcclxuICAgIC8vL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2F2ZSByZXN0b3JhYmxlIGRhdGFcclxuICAgICAqIEBwYXJhbSBpZCA6IHRoZSByZXN0b3JhYmxlIGlkXHJcbiAgICAgKiBAcGFyYW0gc2Nyb2xsIDogdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uXHJcbiAgICAgKi9cclxuICAgIHNhdmUoaWQ6IHN0cmluZywgc2Nyb2xsOiBudW1iZXIgPSAwKSB7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcclxuICAgICAgICAgICAgaWQsXHJcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgICAgIHBhZ2luYXRvcjoge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhZ2U6IHRoaXMucGFnaW5hdG9yPy5wYWdlSW5kZXggPz8gMCxcclxuICAgICAgICAgICAgICAgICAgICB0b3RhbDogdGhpcy5zbmFwc2hvdD8udG90YWwgPz8gMCxcclxuICAgICAgICAgICAgICAgICAgICBzaXplOiB0aGlzLnBhZ2luYXRvcj8ucGFnZVNpemUgPz8gMTVcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBmYWNldHM6IHRoaXMuZmFjZXRzPy5zYXZlKCksXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbXM6IHRoaXMuZmlsdGVyUGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgc2Nyb2xsOiBzY3JvbGwsXHJcbiAgICAgICAgICAgICAgICBzb3J0OiB7IG1vZGU6IHRoaXMuc29ydE1vZGUsIG9wdGlvbnM6IHRoaXMuc29ydE9wdGlvbnMgfSxcclxuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuc25hcHNob3RcclxuICAgICAgICAgICAgICAgICAgICA/IHsgaXRlbXM6IHRoaXMuc25hcHNob3QuaXRlbXMsIHRvdGFsOiB0aGlzLnNuYXBzaG90LnRvdGFsIH1cclxuICAgICAgICAgICAgICAgICAgICA6IG51bGxcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzdG9yZSBkYXRhXHJcbiAgICAgKiBAcGFyYW0gaWQgOiB0aGUgcmVzdG9yYWJsZSBpZFxyXG4gICAgICovXHJcbiAgICByZXN0b3JlKGlkOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oaWQpO1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcyA9IGRhdGEuZmlsdGVyUGFyYW1zO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zbmFwc2hvdCA9IGRhdGEuZGF0YTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc29ydE1vZGUgPSBkYXRhLnNvcnQubW9kZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc29ydE9wdGlvbnMgPSBkYXRhLnNvcnQub3B0aW9ucztcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZhY2V0cyAmJiBkYXRhLmZhY2V0cykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmFjZXRzLnJlc3RvcmUoZGF0YS5mYWNldHMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzRmFjZXRzLnNldChkYXRhLmZhY2V0cy5oYXNGYWNldHMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGFnaW5hdG9yICYmIGRhdGEucGFnaW5hdG9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gZGF0YS5wYWdpbmF0b3IucGFnZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSA9IGRhdGEucGFnaW5hdG9yLnNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdpbmF0b3IubGVuZ3RoID0gZGF0YS5wYWdpbmF0b3IudG90YWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLkNPTU1BTkRfU0VBUkNIX1JFU1RPUkVELCBkYXRhLmZpbHRlclBhcmFtcylcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFNjcm9sbCB0b3BcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsKGRhdGEuc2Nyb2xsID8/IDApO1xyXG4gICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=
|