@c8y/ngx-components 1017.0.376 → 1017.0.378
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/core/login/login.service.d.ts +0 -1
- package/esm2020/core/login/login.service.mjs +1 -18
- package/fesm2015/c8y-ngx-components.mjs +0 -17
- package/fesm2015/c8y-ngx-components.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components.mjs +154 -169
- package/fesm2020/c8y-ngx-components.mjs.map +1 -1
- package/locales/locales.pot +0 -9
- package/package.json +2 -2
|
@@ -232,7 +232,6 @@ export declare class LoginService {
|
|
|
232
232
|
private decodeToken;
|
|
233
233
|
private getUrlForOauth;
|
|
234
234
|
private getManagementLoginMode;
|
|
235
|
-
private shouldRedirectDomain;
|
|
236
235
|
static ɵfac: i0.ɵɵFactoryDeclaration<LoginService, [null, null, null, null, null, null, null, null, null, null, null, null, null, { optional: true; }]>;
|
|
237
236
|
static ɵprov: i0.ɵɵInjectableDeclaration<LoginService>;
|
|
238
237
|
}
|
|
@@ -9,9 +9,7 @@ import { switchMap } from 'rxjs/operators';
|
|
|
9
9
|
import { EMPTY } from 'rxjs';
|
|
10
10
|
import { LocationStrategy } from '@angular/common';
|
|
11
11
|
import { get, isString, isEmpty } from 'lodash-es';
|
|
12
|
-
import { Status } from '../common/status.model';
|
|
13
12
|
import { TranslateService } from '@ngx-translate/core';
|
|
14
|
-
import { ModalService } from '../modal/modal.service';
|
|
15
13
|
import * as i0 from "@angular/core";
|
|
16
14
|
import * as i1 from "@c8y/client";
|
|
17
15
|
import * as i2 from "../common/ui-state.service";
|
|
@@ -252,7 +250,6 @@ export class LoginService {
|
|
|
252
250
|
if (credentials) {
|
|
253
251
|
credentials.tenant = tenant.name;
|
|
254
252
|
}
|
|
255
|
-
await this.shouldRedirectDomain(credentials);
|
|
256
253
|
if (await this.switchLoginMode(credentials)) {
|
|
257
254
|
auth = this.cookieAuth;
|
|
258
255
|
}
|
|
@@ -557,20 +554,6 @@ export class LoginService {
|
|
|
557
554
|
const managementLoginOptions = (await this.tenantLoginOptionsService.listForManagement()).data;
|
|
558
555
|
return this.tenantUiService.getPreferredLoginOption(managementLoginOptions);
|
|
559
556
|
}
|
|
560
|
-
async shouldRedirectDomain(credentials) {
|
|
561
|
-
const isPasswordGrantLogin = await this.isPasswordGrantLogin(credentials);
|
|
562
|
-
if (this.isSupportUser(credentials) &&
|
|
563
|
-
isPasswordGrantLogin &&
|
|
564
|
-
this.managementLoginMode.loginRedirectDomain !== window.location.hostname &&
|
|
565
|
-
!this.isLocal()) {
|
|
566
|
-
const title = gettext('Redirect required');
|
|
567
|
-
const body = gettext('Redirect to correct domain is required to log in as support user.');
|
|
568
|
-
// avoids circular dependency NG0200 error when BsModalService is injected into APP_INITIALIZER (via LoginService -> ModalService -> BsModalService)
|
|
569
|
-
const modalService = this.injector.get(ModalService);
|
|
570
|
-
await modalService.acknowledge(title, body, Status.INFO, gettext('Redirect'));
|
|
571
|
-
this.redirectToDomain(this.managementLoginMode.loginRedirectDomain);
|
|
572
|
-
}
|
|
573
|
-
}
|
|
574
557
|
}
|
|
575
558
|
LoginService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: LoginService, deps: [{ token: i0.Injector }, { token: i1.FetchClient }, { token: i1.BasicAuth }, { token: i1.CookieAuth }, { token: i2.AppStateService }, { token: i1.UserService }, { token: i1.TenantService }, { token: i1.Realtime }, { token: i3.AlertService }, { token: i4.ApiService }, { token: i5.TenantUiService }, { token: i1.TenantLoginOptionsService }, { token: i6.TranslateService }, { token: i7.LocationStrategy, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
576
559
|
LoginService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: LoginService });
|
|
@@ -579,4 +562,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
|
|
|
579
562
|
}], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.FetchClient }, { type: i1.BasicAuth }, { type: i1.CookieAuth }, { type: i2.AppStateService }, { type: i1.UserService }, { type: i1.TenantService }, { type: i1.Realtime }, { type: i3.AlertService }, { type: i4.ApiService }, { type: i5.TenantUiService }, { type: i1.TenantLoginOptionsService }, { type: i6.TranslateService }, { type: i7.LocationStrategy, decorators: [{
|
|
580
563
|
type: Optional
|
|
581
564
|
}] }]; } });
|
|
582
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvbG9naW4vbG9naW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsV0FBVyxFQUlYLFFBQVEsRUFDUix5QkFBeUIsRUFDekIsYUFBYSxFQUNiLFdBQVcsRUFDWixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7Ozs7QUFFdEQ7O0dBRUc7QUFFSCxNQUFNLE9BQU8sWUFBWTtJQThEdkIsWUFDVSxRQUFrQixFQUNsQixNQUFt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QUFPLENBQUMsbUVBQW1FLENBQUMsQ0FBQztZQUMxRixvSkFBb0o7WUFDcEosTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDckQsTUFBTSxZQUFZLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUM5RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDLENBQUM7U0FDckU7SUFDSCxDQUFDOzt5R0F2bkJVLFlBQVk7NkdBQVosWUFBWTsyRkFBWixZQUFZO2tCQUR4QixVQUFVOzswQkE2RU4sUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yLCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQmFzaWNBdXRoLFxuICBDb29raWVBdXRoLFxuICBGZXRjaENsaWVudCxcbiAgSUF1dGhlbnRpY2F0aW9uLFxuICBJQ3JlZGVudGlhbHMsXG4gIElUZW5hbnRMb2dpbk9wdGlvbixcbiAgUmVhbHRpbWUsXG4gIFRlbmFudExvZ2luT3B0aW9uc1NlcnZpY2UsXG4gIFRlbmFudFNlcnZpY2UsXG4gIFVzZXJTZXJ2aWNlXG59IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFwcFN0YXRlU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi91aS1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4uL2FsZXJ0L2FsZXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0dGV4dCB9IGZyb20gJy4uL2kxOG4vZ2V0dGV4dCc7XG5pbXBvcnQgeyBBcGlTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9hcGknO1xuaW1wb3J0IHsgVGVuYW50VWlTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL3RlbmFudC11aS5zZXJ2aWNlJztcbmltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEVNUFRZIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBMb2NhdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGdldCwgaXNTdHJpbmcsIGlzRW1wdHkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgU3RhdHVzIH0gZnJvbSAnLi4vY29tbW9uL3N0YXR1cy5tb2RlbCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBNb2RhbFNlcnZpY2UgfSBmcm9tICcuLi9tb2RhbC9tb2RhbC5zZXJ2aWNlJztcblxuLyoqXG4gKiBTZXJ2aWNlIHRvIG1hbmFnZSB0aGUgbG9naW4uXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBMb2dpblNlcnZpY2Uge1xuICByZW1lbWJlck1lOiBib29sZWFuID0gZmFsc2U7XG4gIFRPS0VOX0tFWTogc3RyaW5nID0gJ190Y3k4JztcbiAgVEZBVE9LRU5fS0VZOiBzdHJpbmcgPSAnVEZBVG9rZW4nO1xuICBsb2dpbk1vZGU6IElUZW5hbnRMb2dpbk9wdGlvbjtcbiAgbWFuYWdlbWVudExvZ2luTW9kZTogSVRlbmFudExvZ2luT3B0aW9uO1xuICBvYXV0aE9wdGlvbnM6IElUZW5hbnRMb2dpbk9wdGlvbjtcbiAgaXNGaXJzdExvZ2luID0gdHJ1ZTtcbiAgR1JFRU5fTUlOX0xFTkdUSF9ERUZBVUxUID0gODtcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZTptYXgtbGluZS1sZW5ndGhcbiAgRVJST1JfTUVTU0FHRVMgPSB7XG4gICAgbWlubGVuZ3RoOiBnZXR0ZXh0KCdQYXNzd29yZCBtdXN0IGhhdmUgYXQgbGVhc3QgOCBjaGFyYWN0ZXJzIGFuZCBubyBtb3JlIHRoYW4gMzIuJyksXG4gICAgcGFzc3dvcmRfbWlzc21hdGNoOiBnZXR0ZXh0KCdQYXNzd29yZCBjb25maXJtYXRpb24gZG9lcyBub3QgbWF0Y2guJyksXG4gICAgbWF4bGVuZ3RoOiBnZXR0ZXh0KCdQYXNzd29yZCBtdXN0IGhhdmUgYXQgbGVhc3QgOCBjaGFyYWN0ZXJzIGFuZCBubyBtb3JlIHRoYW4gMzIuJyksXG4gICAgcGFzc3dvcmRfc3RyZW5ndGg6IGdldHRleHQoXG4gICAgICAnWW91ciBwYXNzd29yZCBpcyBub3Qgc3Ryb25nIGVub3VnaC4gUGxlYXNlIGluY2x1ZGUgbnVtYmVycywgbG93ZXIgYW5kIHVwcGVyIGNhc2UgY2hhcmFjdGVycydcbiAgICApLFxuICAgIHJlbW90ZV9lcnJvcjogZ2V0dGV4dCgnU2VydmVyIGVycm9yIG9jY3VycmVkLicpLFxuICAgIGVtYWlsOiBnZXR0ZXh0KCdJbnZhbGlkIGVtYWlsIGFkZHJlc3MuJyksXG4gICAgcGFzc3dvcmRfY2hhbmdlOiBnZXR0ZXh0KCdZb3VyIHBhc3N3b3JkIGlzIGV4cGlyZWQuIFBsZWFzZSBzZXQgYSBuZXcgcGFzc3dvcmQuJyksXG4gICAgcGFzc3dvcmRfcmVzZXRfdG9rZW5fZXhwaXJlZDogZ2V0dGV4dChcbiAgICAgICdQYXNzd29yZCByZXNldCBsaW5rIGV4cGlyZWQuIFBsZWFzZSBlbnRlciB5b3VyIGVtYWlsIGFkZHJlc3MgdG8gcmVjZWl2ZSBhIG5ldyBvbmUuJ1xuICAgICksXG4gICAgdGZhX3Bpbl9pbnZhbGlkOiBnZXR0ZXh0KCdUaGUgY29kZSB5b3UgZW50ZXJlZCBpcyBpbnZhbGlkLiBQbGVhc2UgdHJ5IGFnYWluLicpLFxuICAgIHBhdHRlcm5fbmV3UGFzc3dvcmQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgZ2V0dGV4dChcbiAgICAgICAgJ1Bhc3N3b3JkIG11c3QgaGF2ZSBhdCBsZWFzdCA4IGNoYXJhY3RlcnMgYW5kIG5vIG1vcmUgdGhhbiAzMiBhbmQgY2FuIG9ubHkgY29udGFpbiBsZXR0ZXJzLCBudW1iZXJzIGFuZCBmb2xsb3dpbmcgc3ltYm9sczoge3sgc3ltYm9scyB9fSdcbiAgICAgICksXG4gICAgICB7IHN5bWJvbHM6ICdgfiFAIyQlXiYqKClffCstPT87OlxcJ1wiLC48Pnt9W11cXFxcLycgfVxuICAgICksXG4gICAgaW50ZXJuYXRpb25hbFBob25lTnVtYmVyOiBnZXR0ZXh0KFxuICAgICAgJ011c3QgYmUgYSB2YWxpZCBwaG9uZSBudW1iZXIgKG9ubHkgZGlnaXRzLCBzcGFjZXMsIHNsYXNoZXMgKFwiL1wiKSwgZGFzaGVzIChcIi1cIiksIGFuZCBwbHVzIChcIitcIikgYWxsb3dlZCwgZm9yIGV4YW1wbGU6ICs0OSA5IDg3NiA1NDMgMjEwKS4nXG4gICAgKSxcbiAgICBwaG9uZV9udW1iZXJfZXJyb3I6IGdldHRleHQoJ0NvdWxkIG5vdCB1cGRhdGUgcGhvbmUgbnVtYmVyLicpLFxuICAgIHBpbkFscmVhZHlTZW50OiBnZXR0ZXh0KFxuICAgICAgJ1RoZSB2ZXJpZmljYXRpb24gY29kZSB3YXMgYWxyZWFkeSBzZW50LiBGb3IgYSBuZXcgdmVyaWZpY2F0aW9uIGNvZGUsIHBsZWFzZSBjbGljayBvbiB0aGUgbGluayBhYm92ZS4nXG4gICAgKSxcbiAgICBwYXNzd29yZENvbmZpcm06IGdldHRleHQoJ1Bhc3N3b3JkIGNvbmZpcm1hdGlvbiBkb2VzIG5vdCBtYXRjaC4nKSxcbiAgICB0ZmFFeHBpcmVkOiBnZXR0ZXh0KCdUd28tZmFjdG9yIGF1dGhlbnRpY2F0aW9uIHRva2VuIGV4cGlyZWQuJylcbiAgfTtcbiAgLy8gdHNsaW50OmVuYWJsZTptYXgtbGluZS1sZW5ndGhcblxuICBwcml2YXRlIFNVQ0NFU1NfTUVTU0FHRVMgPSB7XG4gICAgcGFzc3dvcmRfY2hhbmdlZDogZ2V0dGV4dCgnUGFzc3dvcmQgY2hhbmdlZC4gWW91IGNhbiBub3cgbG9nIGluIHVzaW5nIG5ldyBwYXNzd29yZC4nKSxcbiAgICBwYXNzd29yZF9yZXNldF9yZXF1ZXN0ZWQ6IGdldHRleHQoXG4gICAgICAnUGFzc3dvcmQgcmVzZXQgcmVxdWVzdCBoYXMgYmVlbiBzZW50LiBQbGVhc2UgY2hlY2sgeW91ciBlbWFpbC4nXG4gICAgKSxcbiAgICByZXNlbmRfc21zOiBnZXR0ZXh0KCdWZXJpZmljYXRpb24gY29kZSBTTVMgcmVzZW50LicpLFxuICAgIHNlbmRfc21zOiBnZXR0ZXh0KCdWZXJpZmljYXRpb24gY29kZSBTTVMgc2VudC4nKVxuICB9O1xuXG4gIHByaXZhdGUgcGFzc3dvcmRTdHJlbmd0aFNldHRpbmcgPSB7XG4gICAgZW5mb3JjZVBhc3N3b3JkU3RyZW5ndGg6IGZhbHNlLFxuICAgIGdyZWVuTWluTGVuZ3RoOiB0aGlzLkdSRUVOX01JTl9MRU5HVEhfREVGQVVMVCxcbiAgICBwYXNzd29yZFN0cmVuZ3RoVmFsaWRpdHk6IGZhbHNlXG4gIH07XG5cbiAgcHJpdmF0ZSBsb2NhbGhvc3RSZWdFeHAgPSBuZXcgUmVnRXhwKCdsb2NhbGhvc3QnKTtcbiAgcHJpdmF0ZSBsb2NhbGhvc3RJcFJlZ0V4cCA9IG5ldyBSZWdFeHAoJzEyNy4wLjAuMScpO1xuICBwcml2YXRlIHNob3dUZW5hbnRSZWdFeHAgPSBuZXcgUmVnRXhwKCdzaG93VGVuYW50Jyk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSBjbGllbnQ6IEZldGNoQ2xpZW50LFxuICAgIHByaXZhdGUgYmFzaWNBdXRoOiBCYXNpY0F1dGgsXG4gICAgcHJpdmF0ZSBjb29raWVBdXRoOiBDb29raWVBdXRoLFxuICAgIHByaXZhdGUgdWk6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHVzZXI6IFVzZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGVuYW50OiBUZW5hbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhbHRpbWU6IFJlYWx0aW1lLFxuICAgIHByaXZhdGUgYWxlcnQ6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGFwaTogQXBpU2VydmljZSxcbiAgICBwcml2YXRlIHRlbmFudFVpU2VydmljZTogVGVuYW50VWlTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGVuYW50TG9naW5PcHRpb25zU2VydmljZTogVGVuYW50TG9naW5PcHRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb25TdHJhdGVneVxuICApIHtcbiAgICB0aGlzLmF1dG9Mb2dvdXQoKTtcbiAgICB0aGlzLmluaXRMb2dpbk9wdGlvbnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHRlbmFudC5cbiAgICogQHJldHVybiBUaGUgdGVuYW50IG5hbWUuXG4gICAqL1xuICBnZXRUZW5hbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LnRlbmFudDtcbiAgfVxuXG4gIGluaXRMb2dpbk9wdGlvbnMoKSB7XG4gICAgY29uc3QgbG9naW5PcHRpb25zID0gdGhpcy51aS5zdGF0ZS5sb2dpbk9wdGlvbnMgfHwgW107XG4gICAgdGhpcy5sb2dpbk1vZGUgPSB0aGlzLnRlbmFudFVpU2VydmljZS5nZXRQcmVmZXJyZWRMb2dpbk9wdGlvbihsb2dpbk9wdGlvbnMpO1xuICAgIHRoaXMub2F1dGhPcHRpb25zID1cbiAgICAgIHRoaXMudGVuYW50VWlTZXJ2aWNlLmdldE9hdXRoMk9wdGlvbihsb2dpbk9wdGlvbnMpIHx8ICh7fSBhcyBJVGVuYW50TG9naW5PcHRpb24pO1xuICB9XG5cbiAgcmVkaXJlY3RUb09hdXRoKCkge1xuICAgIGNvbnN0IHsgaW5pdFJlcXVlc3QgfSA9IHRoaXMub2F1dGhPcHRpb25zO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gKHRoaXMubG9jYXRpb24gPyAodGhpcy5sb2NhdGlvbiBhcyBhbnkpLl9wbGF0Zm9ybUxvY2F0aW9uIDogd2luZG93KS5sb2NhdGlvblxuICAgICAgLmhyZWY7XG4gICAgY29uc3QgcmVkaXJlY3RVcmwgPSBlbmNvZGVVUklDb21wb25lbnQoZnVsbFBhdGgpO1xuICAgIGNvbnN0IG9yaWdpblVyaVBhcmFtID0gYCR7aW5pdFJlcXVlc3QuaW5jbHVkZXMoJz8nKSA/ICcmJyA6ICc/J31vcmlnaW5Vcmk9JHtyZWRpcmVjdFVybH1gO1xuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYCR7aW5pdFJlcXVlc3R9JHtvcmlnaW5VcmlQYXJhbX1gO1xuICB9XG5cbiAgYXV0b0xvZ291dCgpIHtcbiAgICBjb25zdCBlcnJvclBhdHRlcm4gPSAvaW52YWxpZFxcc2NyZWRlbnRpYWxzLipwaW4uKmdlbmVyYXRlL2k7XG4gICAgY29uc3QgaXNUZmFFeHBpcmVkID0gZGF0YSA9PlxuICAgICAgZGF0YSAmJiB0eXBlb2YgZGF0YS5tZXNzYWdlID09PSAnc3RyaW5nJyAmJiBlcnJvclBhdHRlcm4udGVzdChkYXRhLm1lc3NhZ2UpO1xuICAgIHRoaXMudWkuY3VycmVudFVzZXJcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAodSA9PlxuICAgICAgICAgIHUgPyB0aGlzLmFwaS5ob29rUmVzcG9uc2UoKHsgcmVzcG9uc2UgfSkgPT4gcmVzcG9uc2Uuc3RhdHVzID09PSA0MDEpIDogRU1QVFlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShhc3luYyAoYXBpQ2FsbDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmVzcG9uc2UgfSA9IGFwaUNhbGw7XG4gICAgICAgIGxldCB3aWxsTG9nb3V0ID0gZmFsc2U7XG4gICAgICAgIGlmIChpc1RmYUV4cGlyZWQocmVzcG9uc2UuZGF0YSkpIHtcbiAgICAgICAgICB3aWxsTG9nb3V0ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHJlc3BvbnNlLmpzb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5jbG9uZSgpLmpzb24oKTtcbiAgICAgICAgICAgIGlmIChpc1RmYUV4cGlyZWQoZGF0YSkpIHtcbiAgICAgICAgICAgICAgd2lsbExvZ291dCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh3aWxsTG9nb3V0KSB7XG4gICAgICAgICAgdGhpcy5sb2dvdXQoZmFsc2UpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hbGVydC5kYW5nZXIodGhpcy5FUlJPUl9NRVNTQUdFUy50ZmFFeHBpcmVkKSwgNTAwKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbWluaW1hbCBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IGEgcGFzc3dvcmQgc2hvdWxkIGhhdmUgdG8gYmUgY29uc2lkZXJlZCBhIOKAnGdyZWVu4oCdIHN0cm9uZyBvbmUuXG4gICAqIEByZXR1cm4gVGhlIG1pbiBsZW5ndGggZm9yIHBhc3N3b3JkIG9yIGRlZmF1bHQgdmFsdWUuXG4gICAqL1xuICBhc3luYyBnZXRHcmVlbk1pbkxlbmd0aCgpIHtcbiAgICBjb25zdCB7IGdyZWVuTWluTGVuZ3RoIH0gPSAoYXdhaXQgdGhpcy5nZXRCYXNpY0F1dGhMb2dpbk9wdGlvbigpKSB8fCB7IGdyZWVuTWluTGVuZ3RoOiBudWxsIH07XG4gICAgdGhpcy5wYXNzd29yZFN0cmVuZ3RoU2V0dGluZy5ncmVlbk1pbkxlbmd0aCA9IGdyZWVuTWluTGVuZ3RoIHx8IHRoaXMuR1JFRU5fTUlOX0xFTkdUSF9ERUZBVUxUO1xuICAgIHJldHVybiB0aGlzLnBhc3N3b3JkU3RyZW5ndGhTZXR0aW5nLmdyZWVuTWluTGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBwYXNzd29yZCBzdHJlbmd0aCBpcyBlbmZvcmNlZCBmb3Igc3lzdGVtXG4gICAqIGJ5IHJldHJpZXZpbmcgdmFsdWUgb2YgYGVuZm9yY2VTdHJlbmd0aGAgcHJvcGVydHkgZnJvbSBsb2dpbk9wdGlvbnMgcmVzcG9uc2VcbiAgICogQHBhcmFtIHJlZnJlc2ggYm9vbGVhbiB1c2VkIHRvIHJlZnJlc2ggdGhlIGFwcCBzdGF0ZSB3aGVyZSByZXN1bHQgb2YgbG9naW5PcHRpb25zIHJlc3BvbnNlIGlzIHN0b3JlZC5cbiAgICogSWYgZmFsc2UsIGl0IHRha2VzIHZhbHVlIGZyb20gbWVtb3J5LFxuICAgKiBpZiB0cnVlLCBpdCByZWZyZXNoIHRoZSBhcHAgc3RhdGUgdmFsdWUgYW5kIHRoZW4gcmV0cml2ZXMgZGF0YS5cbiAgICogQHJldHVybiBib29sZWFuIHZhbHVlLCB0cnVlIGlmIGVuZm9yY2VkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBhc3luYyBnZXRFbmZvcmNlUGFzc3dvcmRTdHJlbmd0aChyZWZyZXNoPykge1xuICAgIHJldHVybiB0aGlzLmdldEJhc2ljQXV0aExvZ2luT3B0aW9uKHJlZnJlc2gpLnRoZW4obG9naW5PcHRpb24gPT4ge1xuICAgICAgY29uc3QgZW5mb3JjZVBhc3N3b3JkU3RyZW5ndGggPSBnZXQobG9naW5PcHRpb24sICdlbmZvcmNlU3RyZW5ndGgnKTtcbiAgICAgIGlmIChpc1N0cmluZyhlbmZvcmNlUGFzc3dvcmRTdHJlbmd0aCkpIHtcbiAgICAgICAgdGhpcy5wYXNzd29yZFN0cmVuZ3RoU2V0dGluZy5lbmZvcmNlUGFzc3dvcmRTdHJlbmd0aCA9XG4gICAgICAgICAgZW5mb3JjZVBhc3N3b3JkU3RyZW5ndGggPT09ICd0cnVlJyA/IHRydWUgOiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGFzc3dvcmRTdHJlbmd0aFNldHRpbmcuZW5mb3JjZVBhc3N3b3JkU3RyZW5ndGggPSAhIWVuZm9yY2VQYXNzd29yZFN0cmVuZ3RoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucGFzc3dvcmRTdHJlbmd0aFNldHRpbmcuZW5mb3JjZVBhc3N3b3JkU3RyZW5ndGg7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHBhc3N3b3JkIHN0cmVuZ3RoIGlzIGVuZm9yY2VkIGZvciBwYXJ0aWN1bGFyIHRlbmFudFxuICAgKiBieSByZXRyaWV2aW5nIHZhbHVlIG9mIGBzdHJlbmd0aFZhbGlkaXR5YCBwcm9wZXJ0eSBmcm9tIGxvZ2luT3B0aW9ucyByZXNwb25zZVxuICAgKiBAcGFyYW0gcmVmcmVzaCBib29sZWFuIHVzZWQgdG8gcmVmcmVzaCB0aGUgYXBwIHN0YXRlIHdoZXJlIHJlc3VsdCBvZiBsb2dpbk9wdGlvbnMgcmVzcG9uc2UgaXMgc3RvcmVkLlxuICAgKiBJZiBmYWxzZSwgaXQgdGFrZXMgdmFsdWUgZnJvbSBtZW1vcnksXG4gICAqIGlmIHRydWUsIGl0IHJlZnJlc2ggdGhlIGFwcCBzdGF0ZSB2YWx1ZSBhbmQgdGhlbiByZXRyaXZlcyBkYXRhLlxuICAgKiBAcmV0dXJuIGJvb2xlYW4gdmFsdWUsIHRydWUgaWYgZW5mb3JjZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIGFzeW5jIGdldFBhc3N3b3JkU3RyZW5ndGhWYWxpZGl0eShyZWZyZXNoPykge1xuICAgIHJldHVybiB0aGlzLmdldEJhc2ljQXV0aExvZ2luT3B0aW9uKHJlZnJlc2gpLnRoZW4obG9naW5PcHRpb24gPT4ge1xuICAgICAgY29uc3Qgc3RyZW5ndGhWYWxpZGl0eSA9IGdldChsb2dpbk9wdGlvbiwgJ3N0cmVuZ3RoVmFsaWRpdHknKTtcbiAgICAgIGlmIChpc1N0cmluZyhzdHJlbmd0aFZhbGlkaXR5KSkge1xuICAgICAgICB0aGlzLnBhc3N3b3JkU3RyZW5ndGhTZXR0aW5nLnBhc3N3b3JkU3RyZW5ndGhWYWxpZGl0eSA9XG4gICAgICAgICAgc3RyZW5ndGhWYWxpZGl0eSA9PT0gJ3RydWUnID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wYXNzd29yZFN0cmVuZ3RoU2V0dGluZy5wYXNzd29yZFN0cmVuZ3RoVmFsaWRpdHkgPSAhIXN0cmVuZ3RoVmFsaWRpdHk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5wYXNzd29yZFN0cmVuZ3RoU2V0dGluZy5wYXNzd29yZFN0cmVuZ3RoVmFsaWRpdHk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRnVuY3Rpb24gZGV0ZXJtaW5lcyBpZiBlbmZvcmNlZCBzdHJlbmd0aCBjaGVja3Mgc2hvdWxkIGJlIGVuYWJsZWQgZm9yIGN1cnJlbnQgdGVuYW50XG4gICAqIGJhc2VkIG9uIHByb3BlcnRpZXMgcmV0cmlldmVkIGZyb20gbG9naW5PcHRpb25zXG4gICAqIEBwYXJhbSBvcHRpb25zIG9iamVjdCBjb250YWluaW5nIHNwZWNpZmljIG9wdGlvbnM6XG4gICAqICAgIC0ge3JlZnJlc2g6IHRydWV9IC0gcmVmcmVzaGVzIHZhbHVlcyBvZiBhcHAgc3RhdGUgYW5kIHJldHVybnMgZnJlc2ggdmFsdWVzIGFzIHJlc3VsdCBvZiBjYWxsXG4gICAqIEByZXR1cm4gYm9vbGVhbiB2YWx1ZSwgdHJ1ZSBpZiBzdHJlbmd0aCBpcyBlbmZvcmNlZCBmb3IgdGVuYW50LCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBhc3luYyBnZXRQYXNzd29yZFN0cmVuZ3RoRW5mb3JjZWQob3B0aW9ucz8pIHtcbiAgICBjb25zdCByZWZyZXNoID0gb3B0aW9ucyAmJiBvcHRpb25zLnJlZnJlc2g7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMuZ2V0RW5mb3JjZVBhc3N3b3JkU3RyZW5ndGgocmVmcmVzaCksXG4gICAgICB0aGlzLmdldFBhc3N3b3JkU3RyZW5ndGhWYWxpZGl0eShyZWZyZXNoKVxuICAgIF0pLnRoZW4odmFsdWVzID0+IHtcbiAgICAgIGNvbnN0IFtlbmZvcmNlUGFzc3dvcmRTdHJlbmd0aCwgcGFzc3dvcmRTdHJlbmd0aFZhbGlkaXR5XSA9IHZhbHVlcztcbiAgICAgIHJldHVybiBlbmZvcmNlUGFzc3dvcmRTdHJlbmd0aCB8fCBwYXNzd29yZFN0cmVuZ3RoVmFsaWRpdHk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIGFsbCBiYWNrZW5kIGVycm9ycy5cbiAgICovXG4gIGNsZWFuTWVzc2FnZXMoKSB7XG4gICAgdGhpcy5hbGVydC5jbGVhckFsbCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgc3VjY2VzcyBtZXNzYWdlXG4gICAqIEBwYXJhbSBzdWNjZXNzS2V5IFRoZSBrZXkgb2YgdGhlIHN1Y2Nlc3MgbWVzc2FnZSBhcyB1c2VkIGluIFNVQ0NFU1NfTUVTU0FHRVNcbiAgICovXG4gIGFkZFN1Y2Nlc3NNZXNzYWdlKHN1Y2Nlc3NLZXk6IHN0cmluZykge1xuICAgIGNvbnN0IHN1Y2Nlc3NNZXNzYWdlID0gdGhpcy5TVUNDRVNTX01FU1NBR0VTW3N1Y2Nlc3NLZXldO1xuICAgIGlmIChzdWNjZXNzTWVzc2FnZSkge1xuICAgICAgdGhpcy5hbGVydC5hZGQoe1xuICAgICAgICB0ZXh0OiBzdWNjZXNzTWVzc2FnZSxcbiAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICB0aW1lb3V0OiAwXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBzdHJhdGVneS4gRGVmYXVsdHMgdG8gY29va2llLCBpZiBhIHRva2VuXG4gICAqIGlzIGZvdW5kIGluIGxvY2FsIG9yIHNlc3Npb24gc3RvcmFnZSB3ZSBzd2l0Y2ggdG8gYmFzaWMgYXV0aC5cbiAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgYXV0aCBzdHJhdGVneS5cbiAgICovXG4gIGdldEF1dGhTdHJhdGVneSgpOiBJQXV0aGVudGljYXRpb24ge1xuICAgIGxldCBhdXRoU3RyYXRlZ3kgPSB0aGlzLmNvb2tpZUF1dGggYXMgSUF1dGhlbnRpY2F0aW9uO1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRTdG9yZWRUb2tlbigpO1xuICAgIGNvbnN0IHRmYSA9IHRoaXMuZ2V0U3RvcmVkVGZhVG9rZW4oKTtcbiAgICBpZiAodG9rZW4pIHtcbiAgICAgIGF1dGhTdHJhdGVneSA9IHRoaXMuYmFzaWNBdXRoO1xuICAgICAgdGhpcy5zZXRDcmVkZW50aWFscyh7IHRva2VuLCB0ZmEgfSwgdGhpcy5iYXNpY0F1dGgpO1xuICAgIH1cbiAgICByZXR1cm4gYXV0aFN0cmF0ZWd5O1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcmNlcyB0aGUgdXNlIG9mIGJhc2ljIGF1dGggYXMgc3RyYXRlZ3kgd2l0aCB0aGlzIGNyZWRlbnRpYWxzLlxuICAgKiBAcGFyYW0gY3JlZGVudGlhbHMgVGhlIGNyZWRlbnRpYWxzIHRvIHVzZS5cbiAgICovXG4gIHVzZUJhc2ljQXV0aChjcmVkZW50aWFsczogSUNyZWRlbnRpYWxzKSB7XG4gICAgdGhpcy5zZXRDcmVkZW50aWFscyhjcmVkZW50aWFscywgdGhpcy5iYXNpY0F1dGgpO1xuICAgIHJldHVybiB0aGlzLmJhc2ljQXV0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmllcyB0byBsb2dpbiBhIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gY3JlZGVudGlhbHMuXG4gICAqIElmIHN1Y2Nlc3NmdWwsIHRoZSBjdXJyZW50IHRlbmFudCBhbmQgdXNlciBpcyBzZXQuIElmIG5vdCBhbiBlcnJvclxuICAgKiBpcyB0aHJvd24uIEl0IGFsc28gdmVyaWZpZXMgaWYgdGhlIHVzZXIgaXMgYWxsb3dlZCB0byBvcGVuIHRoZVxuICAgKiBjdXJyZW50IGFwcC5cbiAgICogQHBhcmFtIGF1dGggVGhlIGF1dGhlbnRpY2F0aW9uIHN0cmF0ZWd5IHVzZWQuXG4gICAqIEBwYXJhbSBjcmVkZW50aWFscyBUaGUgY3JlZGVudGlhbHMgdG8gdHJ5IHRvIGxvZ2luLlxuICAgKi9cbiAgYXN5bmMgbG9naW4oYXV0aDogSUF1dGhlbnRpY2F0aW9uID0gdGhpcy5nZXRBdXRoU3RyYXRlZ3koKSwgY3JlZGVudGlhbHM/OiBJQ3JlZGVudGlhbHMpIHtcbiAgICB0aGlzLmNsaWVudC5zZXRBdXRoKGF1dGgpO1xuXG4gICAgY29uc3QgdGVuYW50UmVzID0gYXdhaXQgdGhpcy50ZW5hbnQuY3VycmVudCgpO1xuICAgIGNvbnN0IHRlbmFudCA9IHRlbmFudFJlcy5kYXRhO1xuXG4gICAgaWYgKGNyZWRlbnRpYWxzKSB7XG4gICAgICBjcmVkZW50aWFscy50ZW5hbnQgPSB0ZW5hbnQubmFtZTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnNob3VsZFJlZGlyZWN0RG9tYWluKGNyZWRlbnRpYWxzKTtcblxuICAgIGlmIChhd2FpdCB0aGlzLnN3aXRjaExvZ2luTW9kZShjcmVkZW50aWFscykpIHtcbiAgICAgIGF1dGggPSB0aGlzLmNvb2tpZUF1dGg7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlclJlcyA9IGF3YWl0IHRoaXMudXNlci5jdXJyZW50KCk7XG4gICAgY29uc3QgdXNlciA9IHVzZXJSZXMuZGF0YTtcbiAgICBhd2FpdCB0aGlzLnZlcmlmeUFwcEFjY2VzcygpO1xuXG4gICAgY29uc3Qgc3VwcG9ydFVzZXJOYW1lID0gdGhpcy5nZXRTdXBwb3J0VXNlck5hbWUoY3JlZGVudGlhbHMpO1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5zZXRDcmVkZW50aWFscyhcbiAgICAgIHtcbiAgICAgICAgdGVuYW50OiB0ZW5hbnQubmFtZSxcbiAgICAgICAgdXNlcjogKHN1cHBvcnRVc2VyTmFtZSA/IGAke3N1cHBvcnRVc2VyTmFtZX0kYCA6ICcnKSArIHVzZXIudXNlck5hbWVcbiAgICAgIH0sXG4gICAgICBhdXRoXG4gICAgKTtcblxuICAgIGlmICh0b2tlbikge1xuICAgICAgdGhpcy5zdG9yZUJhc2ljQXV0aFRva2VuKHRva2VuKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmF1dGhGdWxmaWxsZWQodGVuYW50LCB1c2VyLCBzdXBwb3J0VXNlck5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIHRlbmFudCwgdXNlciBhbmQgc3VwcG9ydCB1c2VyIGluZm8gdG8gdGhlIGFwcCBzdGF0ZS5cbiAgICogQHBhcmFtIHRlbmFudCBUaGUgY3VycmVudCB0ZW5hbnQgb2JqZWN0LlxuICAgKiBAcGFyYW0gdXNlciBUaGUgY3VycmVudCB1c2VyIG9iamVjdC5cbiAgICogQHBhcmFtIHN1cHBvcnRVc2VyTmFtZSBUaGUgY3VycmVudCBzdXBwb3J0IHVzZXIgbmFtZS5cbiAgICovXG4gIGFzeW5jIGF1dGhGdWxmaWxsZWQodGVuYW50PywgdXNlcj8sIHN1cHBvcnRVc2VyTmFtZT8pIHtcbiAgICBpZiAoIXRlbmFudCkge1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLnRlbmFudC5jdXJyZW50KCk7XG4gICAgICB0ZW5hbnQgPSBkYXRhO1xuICAgICAgdGhpcy5jbGllbnQudGVuYW50ID0gdGVuYW50Lm5hbWU7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMudXNlci5jdXJyZW50KCk7XG4gICAgICB1c2VyID0gZGF0YTtcbiAgICB9XG5cbiAgICBpZiAoIXN1cHBvcnRVc2VyTmFtZSkge1xuICAgICAgc3VwcG9ydFVzZXJOYW1lID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnVpLnNldFVzZXIoeyB1c2VyLCBzdXBwb3J0VXNlck5hbWUgfSk7XG4gICAgdGhpcy51aS5jdXJyZW50VGVuYW50Lm5leHQodGVuYW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTd2l0Y2ggdGhlIGxvZ2luIG1vZGUgdG8gQ29va2llQXV0aCBpZiB0aGVcbiAgICogdXNlciBoYXMgY29uZmlndXJlZCB0byB1c2UgaXQgaW4gbG9naW5PcHRpb25zLlxuICAgKiBAcGFyYW0gY3JlZGVudGlhbHMgVGhlIGNyZWRlbnRpYWxzIGZvciB0aGF0IGxvZ2luXG4gICAqL1xuICBhc3luYyBzd2l0Y2hMb2dpbk1vZGUoY3JlZGVudGlhbHM/OiBJQ3JlZGVudGlhbHMpIHtcbiAgICBjb25zdCBpc1Bhc3N3b3JkR3JhbnRMb2dpbiA9IGF3YWl0IHRoaXMuaXNQYXNzd29yZEdyYW50TG9naW4oY3JlZGVudGlhbHMpO1xuICAgIGlmIChpc1Bhc3N3b3JkR3JhbnRMb2dpbiAmJiBjcmVkZW50aWFscykge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5nZW5lcmF0ZU9hdXRoVG9rZW4oY3JlZGVudGlhbHMpO1xuICAgICAgaWYgKCEocmVzIGFzIFJlc3BvbnNlKS5vaykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgICAgIHRocm93IHsgcmVzLCBkYXRhIH07XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuY2xpZW50LnNldEF1dGgodGhpcy5jb29raWVBdXRoKTtcbiAgICAgIHRoaXMuY2xlYW5Mb2NhbFN0b3JhZ2UoKTtcbiAgICAgIHRoaXMuYmFzaWNBdXRoLmxvZ291dCgpO1xuICAgIH1cbiAgICByZXR1cm4gaXNQYXNzd29yZEdyYW50TG9naW47XG4gIH1cblxuICBhc3luYyBnZW5lcmF0ZU9hdXRoVG9rZW4oY3JlZGVudGlhbHM/OiBJQ3JlZGVudGlhbHMpIHtcbiAgICBpZiAoKGF3YWl0IHRoaXMuaXNQYXNzd29yZEdyYW50TG9naW4oY3JlZGVudGlhbHMpKSAmJiBjcmVkZW50aWFscykge1xuICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgIGdyYW50X3R5cGU6ICdQQVNTV09SRCcsXG4gICAgICAgIHVzZXJuYW1lOiBjcmVkZW50aWFscy51c2VyLFxuICAgICAgICBwYXNzd29yZDogY3JlZGVudGlhbHMucGFzc3dvcmQsXG4gICAgICAgIHRmYV9jb2RlOiBjcmVkZW50aWFscy50ZmFcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGF3YWl0IG5ldyBGZXRjaENsaWVudCgpLmZldGNoKHRoaXMuZ2V0VXJsRm9yT2F1dGgoY3JlZGVudGlhbHMpLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5OiBwYXJhbXMudG9TdHJpbmcoKSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGlzUGFzc3dvcmRHcmFudExvZ2luKGNyZWRlbnRpYWxzPzogSUNyZWRlbnRpYWxzKSB7XG4gICAgbGV0IGxvZ2luTW9kZSA9IHRoaXMubG9naW5Nb2RlO1xuXG4gICAgaWYgKHRoaXMuaXNTdXBwb3J0VXNlcihjcmVkZW50aWFscykpIHtcbiAgICAgIGlmICghdGhpcy5tYW5hZ2VtZW50TG9naW5Nb2RlKSB7XG4gICAgICAgIHRoaXMubWFuYWdlbWVudExvZ2luTW9kZSA9IGF3YWl0IHRoaXMuZ2V0TWFuYWdlbWVudExvZ2luTW9kZSgpO1xuICAgICAgfVxuICAgICAgbG9naW5Nb2RlID0gdGhpcy5tYW5hZ2VtZW50TG9naW5Nb2RlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRlbmFudFVpU2VydmljZS5pc09hdXRoSW50ZXJuYWwobG9naW5Nb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyBpZiB0aGUgcHJvdmlkZWQgY3JlZGVudGlhbHMgdXNlIGEgc3VwcG9ydCB1c2VyIHRvIGxvZyBpbiBvciBub3QuXG4gICAqIEBwYXJhbSBjcmVkZW50aWFscyBDcmVkZW50aWFscyB0byBjaGVjay5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB1c2VyIGlzIGEgc3VwcG9ydCB1c2VyLlxuICAgKi9cbiAgaXNTdXBwb3J0VXNlcihjcmVkZW50aWFscz86IElDcmVkZW50aWFscyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjcmVkZW50aWFscyAmJiBjcmVkZW50aWFscy51c2VyLmluY2x1ZGVzKCckJyk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgaWYgdGhlIHRlbmFudCBpbnB1dCBmaWVsZCBzaG91bGQgYmUgc2hvd25cbiAgICogb3Igbm90LlxuICAgKiBAcmV0dXJucyBJZiB0cnVlLCBzaG93IHRoZSB0ZW5hbnQgaW5wdXQuXG4gICAqL1xuICBzaG93VGVuYW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy51aS5zdGF0ZS5sb2dpbk9wdGlvbnMgfHwgdGhpcy5pc0xvY2FsKCkgfHwgdGhpcy5pc1Nob3dUZW5hbnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyBpZiB0aGUgdGVuYW50IHNldHVwIHNob3VsZCBiZSBzaG93blxuICAgKiBvciBub3QuXG4gICAqIEByZXR1cm5zIElmIHRydWUsIHNob3cgdGhlIHRlbmFudCBpbnB1dC5cbiAgICovXG4gIHNob3dUZW5hbnRTZXR1cCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMudWkuc3RhdGUubG9naW5PcHRpb25zICYmICF0aGlzLmlzTG9jYWwoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2dzIHRoZSB1c2VyIG91dFxuICAgKiBAcGFyYW0gcmVsb2FkIElmIHNldCB0byBmYWxzZSwgdGhlIHBhZ2Ugd2lsbCBub3QgcmVsb2FkXG4gICAqL1xuICBhc3luYyBsb2dvdXQocmVsb2FkID0gdHJ1ZSkge1xuICAgIGxldCByZXNEYXRhID0gbnVsbDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgWywgY29va2llUmVzXSA9IGF3YWl0IHRoaXMucmVzZXQoKTtcbiAgICAgIHJlc0RhdGEgPSBhd2FpdCBjb29raWVSZXMuanNvbigpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0LnJlbW92ZUxhc3REYW5nZXIoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHJlc0RhdGEgJiYgcmVzRGF0YS51cmwpIHtcbiAgICAgICAgdGhpcy5yZWRpcmVjdChyZXNEYXRhLnVybCk7XG4gICAgICB9IGVsc2UgaWYgKHJlbG9hZCkge1xuICAgICAgICB0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh7fSwgJycsICcnLCAnJyk7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBzdG9yZWQgYXV0aC1kYXRhXG4gICAqL1xuICBhc3luYyByZXNldCgpIHtcbiAgICB0aGlzLmNsZWFuTG9jYWxTdG9yYWdlKCk7XG4gICAgdGhpcy5jbGVhblNlc3Npb25TdG9yYWdlKCk7XG4gICAgdGhpcy5yZWFsdGltZS5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy51aS5jdXJyZW50VXNlci5uZXh0KG51bGwpO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChbdGhpcy5iYXNpY0F1dGgubG9nb3V0KCksIHRoaXMuY29va2llQXV0aC5sb2dvdXQoKV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIHRoZSBURkEgdG9rZW4gdG8gbG9jYWwgb3Igc2Vzc2lvbiBzdG9yYWdlLlxuICAgKiBAcGFyYW0gdGZhVG9rZW4gVGhlIHRmYSB0b2tlbiB0byBzYXZlLlxuICAgKiBAcGFyYW0gc3RvcmFnZSBUaGUgc3RvcmFnZSB0byB1c2UgKGxvY2FsIG9yIHNlc3Npb24pLlxuICAgKi9cbiAgc2F2ZVRGQVRva2VuKHRmYVRva2VuOiBzdHJpbmcsIHN0b3JhZ2U6IFN0b3JhZ2UpIHtcbiAgICBzdG9yYWdlLnNldEl0ZW0odGhpcy5URkFUT0tFTl9LRVksIHRmYVRva2VuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0IHRoZSBtYW5pZmVzdCAtPiBvbiA0MDEgdXNlciBoYXMgbm8gYWNjZXNzIHRvIHRoYXQgYXBwbGljYXRpb25cbiAgICogYW5kIHdlIHRocm93IHRoZSBlcnJvciB1cCB0byB0aGUgbG9naW4gZm9ybS5cbiAgICovXG4gIGFzeW5jIHZlcmlmeUFwcEFjY2VzcygpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy51aS5sb2FkTWFuaWZlc3QoKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKCEoZXgucmVzICYmIGV4LnJlcy5zdGF0dXMgPT09IDQwNCAmJiB0aGlzLmlzTG9jYWwoKSkpIHtcbiAgICAgICAgdGhyb3cgZXg7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVkaXJlY3RUb0RvbWFpbihkb21haW4pIHtcbiAgICBjb25zdCBvcmlnaW5VcmwgPSBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICBjb25zdCByZWRpcmVjdFVybCA9IG9yaWdpblVybC5ocmVmLnJlcGxhY2Uob3JpZ2luVXJsLmhvc3RuYW1lLCBkb21haW4pO1xuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gcmVkaXJlY3RVcmw7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdGVuYW50IHRvIHRoZSBjbGllbnQgYW5kIHVwZGF0ZXMgdGhlIGNyZWRlbnRpYWxzIG9uIHRoZVxuICAgKiBhdXRoIHN0cmF0ZWd5LlxuICAgKiBAcGFyYW0gY3JlZGVudGlhbHMgVGhlIG5hbWUgb2YgdGhlIHRlbmFudC5cbiAgICogQHBhcmFtIGF1dGhTdHJhdGVneSBUaGUgYXV0aGVudGljYXRpb24gc3RyYXRlZ3kgdXNlZC5cbiAgICogQHJldHVybiBSZXR1cm5zIHRoZSB0b2tlbiBpZiBiYXNpYyBhdXRoLCBvdGhlcndpc2UgdW5kZWZpbmVkLlxuICAgKi9cbiAgcHJpdmF0ZSBzZXRDcmVkZW50aWFscyhjcmVkZW50aWFsczogSUNyZWRlbnRpYWxzLCBhdXRoU3RyYXRlZ3k6IElBdXRoZW50aWNhdGlvbikge1xuICAgIGlmIChjcmVkZW50aWFscy50ZW5hbnQpIHtcbiAgICAgIHRoaXMuY2xpZW50LnRlbmFudCA9IGNyZWRlbnRpYWxzLnRlbmFudDtcbiAgICB9XG4gICAgLy8gQ2hlY2sgaWYgYSB0b2tlbiBpcyBhbHJlYWR5IHNldCAoY2FzZSBmb3Igc3VwcG9ydCB1c2VyIGxvZ2luKVxuICAgIC8vIGlmIHllcyAtPiB3ZSBqdXN0IG5lZWQgdG8gdXBkYXRlIHRoZSB1c2VyLCBhbmQgcmV1c2UgdGhlIHRva2VuXG4gICAgLy8gb2YgdGhlIHN1cHBvcnQgdXNlci5cbiAgICAvLyBUaGVyZWZvcmUgd2UgbmVlZCB0byBwYXNzIHVzZXIgYW5kIHRlbmFudCwgdG8gZ2V0XG4gICAgLy8ganVzdCB0aGUgc3RvcmVkIHRva2VuIGFuZCBub3RoaW5nIGVsc2UgKHNlZSBCYXNpY0F1dGgudHM6MzEpLlxuICAgIGNvbnN0IHRva2VuID0gdGhpcy5iYXNpY0F1dGgudXBkYXRlQ3JlZGVudGlhbHMoe1xuICAgICAgdGVuYW50OiBjcmVkZW50aWFscy50ZW5hbnQsXG4gICAgICB1c2VyOiBjcmVkZW50aWFscy51c2VyXG4gICAgfSk7XG4gICAgY29uc3QgbmV3Q3JlZGVudGlhbHMgPSB7IHRva2VuLCAuLi5jcmVkZW50aWFscyB9O1xuXG4gICAgcmV0dXJuIGF1dGhTdHJhdGVneS51cGRhdGVDcmVkZW50aWFscyhuZXdDcmVkZW50aWFscyk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgaWYgdGhlIGN1cnJlbnQgdXNlciBpcyBhIGRldmVsb3BlciBvciBub3QuXG4gICAqIFJ1bm5pbmcgb24gbG9jYWxob3N0IG1lYW5zIGRldmVsb3BtZW50IG1vZGUuXG4gICAqL1xuICBwcml2YXRlIGlzTG9jYWwoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaG9zdG5hbWUgPSB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7XG4gICAgcmV0dXJuIHRoaXMubG9jYWxob3N0SXBSZWdFeHAudGVzdChob3N0bmFtZSkgfHwgdGhpcy5sb2NhbGhvc3RSZWdFeHAudGVzdChob3N0bmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSB0aGUgdG9rZW4gdG8gbG9jYWwgb3Igc2Vzc2lvbiBzdG9yYWdlLlxuICAgKiBAcGFyYW0gdG9rZW4gVGhlIHRva2VuIHRvIHNhdmUuXG4gICAqIEBwYXJhbSBzdG9yYWdlIFRoZSBzdG9yYWdlIHRvIHVzZSAobG9jYWwgb3Igc2Vzc2lvbikuXG4gICAqL1xuICBwcml2YXRlIHNhdmVUb2tlbih0b2tlbjogc3RyaW5nLCBzdG9yYWdlOiBTdG9yYWdlKSB7XG4gICAgc3RvcmFnZS5zZXRJdGVtKHRoaXMuVE9LRU5fS0VZLCB0b2tlbik7XG4gIH1cblxuICBwcml2YXRlIHN0b3JlQmFzaWNBdXRoVG9rZW4odG9rZW46IHN0cmluZykge1xuICAgIHRoaXMuc2F2ZVRva2VuKHRva2VuLCBzZXNzaW9uU3RvcmFnZSk7XG4gICAgaWYgKHRoaXMucmVtZW1iZXJNZSkge1xuICAgICAgdGhpcy5zYXZlVG9rZW4odG9rZW4sIGxvY2FsU3RvcmFnZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhbkxvY2FsU3RvcmFnZSgpIHtcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlRPS0VOX0tFWSk7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5URkFUT0tFTl9LRVkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhblNlc3Npb25TdG9yYWdlKCkge1xuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5UT0tFTl9LRVkpO1xuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5URkFUT0tFTl9LRVkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1Nob3dUZW5hbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd1RlbmFudFJlZ0V4cC50ZXN0KHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVkaXJlY3QodXJsOiBzdHJpbmcpIHtcbiAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0QmFzaWNBdXRoTG9naW5PcHRpb24ocmVmcmVzaD8pOiBQcm9taXNlPElUZW5hbnRMb2dpbk9wdGlvbj4ge1xuICAgIGlmIChyZWZyZXNoKSB7XG4gICAgICBhd2FpdCB0aGlzLnVpLnJlZnJlc2hMb2dpbk9wdGlvbnMoKTtcbiAgICB9XG4gICAgY29uc3QgbG9naW5PcHRpb25zID0gdGhpcy51aS5zdGF0ZS5sb2dpbk9wdGlvbnMgfHwgW107XG4gICAgY29uc3QgYmFzaWNBdXRoTG9naW5PcHRpb24gPSBsb2dpbk9wdGlvbnMuZmluZCgoeyB0eXBlIH0pID0+IHR5cGUgPT09ICdCQVNJQycpO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoYmFzaWNBdXRoTG9naW5PcHRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgc3VwcG9ydCB1c2VyIG5hbWUgZnJvbSBjcmVkZW50aWFscy5cbiAgICogQHBhcmFtIGNyZWRlbnRpYWxzIENyZWRlbnRpYWxzIG9iamVjdCAoZGVmYXVsdHMgdG8gdGhlIHN0b3JlZCBvbmUpLlxuICAgKiBAcmV0dXJucyBTdXBwb3J0IHVzZXIgbmFtZS5cbiAgICovXG4gIHByaXZhdGUgZ2V0U3VwcG9ydFVzZXJOYW1lKGNyZWRlbnRpYWxzOiBJQ3JlZGVudGlhbHMgPSB0aGlzLmdldFN0b3JlZENyZWRlbnRpYWxzKCkpOiBzdHJpbmcge1xuICAgIGlmICghY3JlZGVudGlhbHMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBzdXBwb3J0VXNlck5hbWUgPSBjcmVkZW50aWFscy51c2VyLm1hdGNoKC9eKC4rXFwvKT8oKC4rKVxcJCk/KC4rKT8kLylbM107XG4gICAgcmV0dXJuIHN1cHBvcnRVc2VyTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNyZWRlbnRpYWxzIG9iamVjdCBmcm9tIHRoZSBzdG9yZWQgdG9rZW4uXG4gICAqIEByZXR1cm5zIENyZWRlbnRpYWxzIG9iamVjdC5cbiAgICovXG4gIHByaXZhdGUgZ2V0U3RvcmVkQ3JlZGVudGlhbHMoKTogSUNyZWRlbnRpYWxzIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuZ2V0U3RvcmVkVG9rZW4oKTtcbiAgICBpZiAoIXRva2VuKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGVjb2RlVG9rZW4odG9rZW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgc3RvcmVkIHRva2VuIGZyb20gbG9jYWwgc3RvcmFnZSBvciBzZXNzaW9uIHN0b3JhZ2UuXG4gICAqIEByZXR1cm5zIFN0b3JlZCB0b2tlbi5cbiAgICovXG4gIHByaXZhdGUgZ2V0U3RvcmVkVG9rZW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5UT0tFTl9LRVkpIHx8IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5UT0tFTl9LRVkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgc3RvcmVkIFRGQSB0b2tlbiBmcm9tIGxvY2FsIHN0b3JhZ2Ugb3Igc2Vzc2lvbiBzdG9yYWdlLlxuICAgKiBAcmV0dXJucyBTdG9yZWQgVEZBIHRva2VuLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTdG9yZWRUZmFUb2tlbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlRGQVRPS0VOX0tFWSkgfHwgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlRGQVRPS0VOX0tFWSk7XG4gIH1cblxuICAvKipcbiAgICogRGVjb2RlcyB0b2tlbiB0byBjcmVkZW50aWFscyBvYmplY3QuXG4gICAqIEBwYXJhbSB0b2tlbiBUb2tlbiB0byBkZWNvZGUuXG4gICAqIEByZXR1cm5zIENyZWRlbnRpYWxzIG9iamVjdC5cbiAgICovXG4gIHByaXZhdGUgZGVjb2RlVG9rZW4odG9rZW46IHN0cmluZyk6IElDcmVkZW50aWFscyB7XG4gICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUod2luZG93LmF0b2IodG9rZW4pKSk7XG4gICAgY29uc3Qgc3BsaXQgPSBkZWNvZGVkLm1hdGNoKC8oKFteL10qKVxcLyk/KFteLzpdKyk6KC4rKS8pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRlbmFudDogc3BsaXRbMl0sXG4gICAgICB1c2VyOiBzcGxpdFszXSxcbiAgICAgIHBhc3N3b3JkOiBzcGxpdFs0XVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldFVybEZvck9hdXRoKGNyZWRlbnRpYWxzOiBJQ3JlZGVudGlhbHMpIHtcbiAgICBpZiAoaXNFbXB0eShjcmVkZW50aWFscy50ZW5hbnQpICYmIHRoaXMubG9naW5Nb2RlLmluaXRSZXF1ZXN0KSB7XG4gICAgICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHRoaXMubG9naW5Nb2RlLmluaXRSZXF1ZXN0LnNwbGl0KCc/JykucG9wKCkpO1xuICAgICAgY3JlZGVudGlhbHMudGVuYW50ID0gdXJsUGFyYW1zLmdldCgndGVuYW50X2lkJyk7XG4gICAgfVxuICAgIHJldHVybiAhaXNFbXB0eShjcmVkZW50aWFscy50ZW5hbnQpXG4gICAgICA/IGB0ZW5hbnQvb2F1dGg/dGVuYW50X2lkPSR7Y3JlZGVudGlhbHMudGVuYW50fWBcbiAgICAgIDogYHRlbmFudC9vYXV0aGA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldE1hbmFnZW1lbnRMb2dpbk1vZGUoKSB7XG4gICAgY29uc3QgbWFuYWdlbWVudExvZ2luT3B0aW9ucyA9IChhd2FpdCB0aGlzLnRlbmFudExvZ2luT3B0aW9uc1NlcnZpY2UubGlzdEZvck1hbmFnZW1lbnQoKSkuZGF0YTtcbiAgICByZXR1cm4gdGhpcy50ZW5hbnRVaVNlcnZpY2UuZ2V0UHJlZmVycmVkTG9naW5PcHRpb24obWFuYWdlbWVudExvZ2luT3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNob3VsZFJlZGlyZWN0RG9tYWluKGNyZWRlbnRpYWxzPzogSUNyZWRlbnRpYWxzKSB7XG4gICAgY29uc3QgaXNQYXNzd29yZEdyYW50TG9naW4gPSBhd2FpdCB0aGlzLmlzUGFzc3dvcmRHcmFudExvZ2luKGNyZWRlbnRpYWxzKTtcblxuICAgIGlmIChcbiAgICAgIHRoaXMuaXNTdXBwb3J0VXNlcihjcmVkZW50aWFscykgJiZcbiAgICAgIGlzUGFzc3dvcmRHcmFudExvZ2luICYmXG4gICAgICB0aGlzLm1hbmFnZW1lbnRMb2dpbk1vZGUubG9naW5SZWRpcmVjdERvbWFpbiAhPT0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lICYmXG4gICAgICAhdGhpcy5pc0xvY2FsKClcbiAgICApIHtcbiAgICAgIGNvbnN0IHRpdGxlID0gZ2V0dGV4dCgnUmVkaXJlY3QgcmVxdWlyZWQnKTtcbiAgICAgIGNvbnN0IGJvZHkgPSBnZXR0ZXh0KCdSZWRpcmVjdCB0byBjb3JyZWN0IGRvbWFpbiBpcyByZXF1aXJlZCB0byBsb2cgaW4gYXMgc3VwcG9ydCB1c2VyLicpO1xuICAgICAgLy8gYXZvaWRzIGNpcmN1bGFyIGRlcGVuZGVuY3kgTkcwMjAwIGVycm9yIHdoZW4gQnNNb2RhbFNlcnZpY2UgaXMgaW5qZWN0ZWQgaW50byBBUFBfSU5JVElBTElaRVIgKHZpYSBMb2dpblNlcnZpY2UgLT4gTW9kYWxTZXJ2aWNlIC0+IEJzTW9kYWxTZXJ2aWNlKVxuICAgICAgY29uc3QgbW9kYWxTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoTW9kYWxTZXJ2aWNlKTtcbiAgICAgIGF3YWl0IG1vZGFsU2VydmljZS5hY2tub3dsZWRnZSh0aXRsZSwgYm9keSwgU3RhdHVzLklORk8sIGdldHRleHQoJ1JlZGlyZWN0JykpO1xuICAgICAgdGhpcy5yZWRpcmVjdFRvRG9tYWluKHRoaXMubWFuYWdlbWVudExvZ2luTW9kZS5sb2dpblJlZGlyZWN0RG9tYWluKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
565
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvbG9naW4vbG9naW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsV0FBVyxFQUlYLFFBQVEsRUFDUix5QkFBeUIsRUFDekIsYUFBYSxFQUNiLFdBQVcsRUFDWixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7O0FBRXZEOztHQUVHO0FBRUgsTUFBTSxPQUFPLFlBQVk7SUE4RHZCLFlBQ1UsUUFBa0IsRUFDbEIsTUFBbUIsRUFDbkIsU0FBb0IsRUFDcEIsVUFBc0IsRUFDdEIsRUFBbUIsRUFDbkIsSUFBaUIsRUFDakIsTUFBcUIsRUFDckIsUUFBa0IsRUFDbEIsS0FBbUIs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SSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDbkYsV0FBVyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ2pEO1FBQ0QsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO1lBQ2pDLENBQUMsQ0FBQywwQkFBMEIsV0FBVyxDQUFDLE1BQU0sRUFBRTtZQUNoRCxDQUFDLENBQUMsY0FBYyxDQUFDO0lBQ3JCLENBQUM7SUFFTyxLQUFLLENBQUMsc0JBQXNCO1FBQ2xDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQy9GLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzlFLENBQUM7O3lHQW5tQlUsWUFBWTs2R0FBWixZQUFZOzJGQUFaLFlBQVk7a0JBRHhCLFVBQVU7OzBCQTZFTixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0b3IsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBCYXNpY0F1dGgsXG4gIENvb2tpZUF1dGgsXG4gIEZldGNoQ2xpZW50LFxuICBJQXV0aGVudGljYXRpb24sXG4gIElDcmVkZW50aWFscyxcbiAgSVRlbmFudExvZ2luT3B0aW9uLFxuICBSZWFsdGltZSxcbiAgVGVuYW50TG9naW5PcHRpb25zU2VydmljZSxcbiAgVGVuYW50U2VydmljZSxcbiAgVXNlclNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQXBwU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL3VpLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vYWxlcnQvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyBnZXR0ZXh0IH0gZnJvbSAnLi4vaTE4bi9nZXR0ZXh0JztcbmltcG9ydCB7IEFwaVNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2FwaSc7XG5pbXBvcnQgeyBUZW5hbnRVaVNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vdGVuYW50LXVpLnNlcnZpY2UnO1xuaW1wb3J0IHsgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRU1QVFkgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IExvY2F0aW9uU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgZ2V0LCBpc1N0cmluZywgaXNFbXB0eSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbi8qKlxuICogU2VydmljZSB0byBtYW5hZ2UgdGhlIGxvZ2luLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTG9naW5TZXJ2aWNlIHtcbiAgcmVtZW1iZXJNZTogYm9vbGVhbiA9IGZhbHNlO1xuICBUT0tFTl9LRVk6IHN0cmluZyA9ICdfdGN5OCc7XG4gIFRGQVRPS0VOX0tFWTogc3RyaW5nID0gJ1RGQVRva2VuJztcbiAgbG9naW5Nb2RlOiBJVGVuYW50TG9naW5PcHRpb247XG4gIG1hbmFnZW1lbnRMb2dpbk1vZGU6IElUZW5hbnRMb2dpbk9wdGlvbjtcbiAgb2F1dGhPcHRpb25zOiBJVGVuYW50TG9naW5PcHRpb247XG4gIGlzRmlyc3RMb2dpbiA9IHRydWU7XG4gIEdSRUVOX01JTl9MRU5HVEhfREVGQVVMVCA9IDg7XG5cbiAgLy8gdHNsaW50OmRpc2FibGU6bWF4LWxpbmUtbGVuZ3RoXG4gIEVSUk9SX01FU1NBR0VTID0ge1xuICAgIG1pbmxlbmd0aDogZ2V0dGV4dCgnUGFzc3dvcmQgbXVzdCBoYXZlIGF0IGxlYXN0IDggY2hhcmFjdGVycyBhbmQgbm8gbW9yZSB0aGFuIDMyLicpLFxuICAgIHBhc3N3b3JkX21pc3NtYXRjaDogZ2V0dGV4dCgnUGFzc3dvcmQgY29uZmlybWF0aW9uIGRvZXMgbm90IG1hdGNoLicpLFxuICAgIG1heGxlbmd0aDogZ2V0dGV4dCgnUGFzc3dvcmQgbXVzdCBoYXZlIGF0IGxlYXN0IDggY2hhcmFjdGVycyBhbmQgbm8gbW9yZSB0aGFuIDMyLicpLFxuICAgIHBhc3N3b3JkX3N0cmVuZ3RoOiBnZXR0ZXh0KFxuICAgICAgJ1lvdXIgcGFzc3dvcmQgaXMgbm90IHN0cm9uZyBlbm91Z2guIFBsZWFzZSBpbmNsdWRlIG51bWJlcnMsIGxvd2VyIGFuZCB1cHBlciBjYXNlIGNoYXJhY3RlcnMnXG4gICAgKSxcbiAgICByZW1vdGVfZXJyb3I6IGdldHRleHQoJ1NlcnZlciBlcnJvciBvY2N1cnJlZC4nKSxcbiAgICBlbWFpbDogZ2V0dGV4dCgnSW52YWxpZCBlbWFpbCBhZGRyZXNzLicpLFxuICAgIHBhc3N3b3JkX2NoYW5nZTogZ2V0dGV4dCgnWW91ciBwYXNzd29yZCBpcyBleHBpcmVkLiBQbGVhc2Ugc2V0IGEgbmV3IHBhc3N3b3JkLicpLFxuICAgIHBhc3N3b3JkX3Jlc2V0X3Rva2VuX2V4cGlyZWQ6IGdldHRleHQoXG4gICAgICAnUGFzc3dvcmQgcmVzZXQgbGluayBleHBpcmVkLiBQbGVhc2UgZW50ZXIgeW91ciBlbWFpbCBhZGRyZXNzIHRvIHJlY2VpdmUgYSBuZXcgb25lLidcbiAgICApLFxuICAgIHRmYV9waW5faW52YWxpZDogZ2V0dGV4dCgnVGhlIGNvZGUgeW91IGVudGVyZWQgaXMgaW52YWxpZC4gUGxlYXNlIHRyeSBhZ2Fpbi4nKSxcbiAgICBwYXR0ZXJuX25ld1Bhc3N3b3JkOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgIGdldHRleHQoXG4gICAgICAgICdQYXNzd29yZCBtdXN0IGhhdmUgYXQgbGVhc3QgOCBjaGFyYWN0ZXJzIGFuZCBubyBtb3JlIHRoYW4gMzIgYW5kIGNhbiBvbmx5IGNvbnRhaW4gbGV0dGVycywgbnVtYmVycyBhbmQgZm9sbG93aW5nIHN5bWJvbHM6IHt7IHN5bWJvbHMgfX0nXG4gICAgICApLFxuICAgICAgeyBzeW1ib2xzOiAnYH4hQCMkJV4mKigpX3wrLT0/OzpcXCdcIiwuPD57fVtdXFxcXC8nIH1cbiAgICApLFxuICAgIGludGVybmF0aW9uYWxQaG9uZU51bWJlcjogZ2V0dGV4dChcbiAgICAgICdNdXN0IGJlIGEgdmFsaWQgcGhvbmUgbnVtYmVyIChvbmx5IGRpZ2l0cywgc3BhY2VzLCBzbGFzaGVzIChcIi9cIiksIGRhc2hlcyAoXCItXCIpLCBhbmQgcGx1cyAoXCIrXCIpIGFsbG93ZWQsIGZvciBleGFtcGxlOiArNDkgOSA4NzYgNTQzIDIxMCkuJ1xuICAgICksXG4gICAgcGhvbmVfbnVtYmVyX2Vycm9yOiBnZXR0ZXh0KCdDb3VsZCBub3QgdXBkYXRlIHBob25lIG51bWJlci4nKSxcbiAgICBwaW5BbHJlYWR5U2VudDogZ2V0dGV4dChcbiAgICAgICdUaGUgdmVyaWZpY2F0aW9uIGNvZGUgd2FzIGFscmVhZHkgc2VudC4gRm9yIGEgbmV3IHZlcmlmaWNhdGlvbiBjb2RlLCBwbGVhc2UgY2xpY2sgb24gdGhlIGxpbmsgYWJvdmUuJ1xuICAgICksXG4gICAgcGFzc3dvcmRDb25maXJtOiBnZXR0ZXh0KCdQYXNzd29yZCBjb25maXJtYXRpb24gZG9lcyBub3QgbWF0Y2guJyksXG4gICAgdGZhRXhwaXJlZDogZ2V0dGV4dCgnVHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbiB0b2tlbiBleHBpcmVkLicpXG4gIH07XG4gIC8vIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoXG5cbiAgcHJpdmF0ZSBTVUNDRVNTX01FU1NBR0VTID0ge1xuICAgIHBhc3N3b3JkX2NoYW5nZWQ6IGdldHRleHQoJ1Bhc3N3b3JkIGNoYW5nZWQuIFlvdSBjYW4gbm93IGxvZyBpbiB1c2luZyBuZXcgcGFzc3dvcmQuJyksXG4gICAgcGFzc3dvcmRfcmVzZXRfcmVxdWVzdGVkOiBnZXR0ZXh0KFxuICAgICAgJ1Bhc3N3b3JkIHJlc2V0IHJlcXVlc3QgaGFzIGJlZW4gc2VudC4gUGxlYXNlIGNoZWNrIHlvdXIgZW1haWwuJ1xuICAgICksXG4gICAgcmVzZW5kX3NtczogZ2V0dGV4dCgnVmVyaWZpY2F0aW9uIGNvZGUgU01TIHJlc2VudC4nKSxcbiAgICBzZW5kX3NtczogZ2V0dGV4dCgnVmVyaWZpY2F0aW9uIGNvZGUgU01TIHNlbnQuJylcbiAgfTtcblxuICBwcml2YXRlIHBhc3N3b3JkU3RyZW5ndGhTZXR0aW5nID0ge1xuICAgIGVuZm9yY2VQYXNzd29yZFN0cmVuZ3RoOiBmYWxzZSxcbiAgICBncmVlbk1pbkxlbmd0aDogdGhpcy5HUkVFTl9NSU5fTEVOR1RIX0RFRkFVTFQsXG4gICAgcGFzc3dvcmRTdHJlbmd0aFZhbGlkaXR5OiBmYWxzZVxuICB9O1xuXG4gIHByaXZhdGUgbG9jYWxob3N0UmVnRXhwID0gbmV3IFJlZ0V4cCgnbG9jYWxob3N0Jyk7XG4gIHByaXZhdGUgbG9jYWxob3N0SXBSZWdFeHAgPSBuZXcgUmVnRXhwKCcxMjcuMC4wLjEnKTtcbiAgcHJpdmF0ZSBzaG93VGVuYW50UmVnRXhwID0gbmV3IFJlZ0V4cCgnc2hvd1RlbmFudCcpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgY2xpZW50OiBGZXRjaENsaWVudCxcbiAgICBwcml2YXRlIGJhc2ljQXV0aDogQmFzaWNBdXRoLFxuICAgIHByaXZhdGUgY29va2llQXV0aDogQ29va2llQXV0aCxcbiAgICBwcml2YXRlIHVpOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyOiBVc2VyU2VydmljZSxcbiAgICBwcml2YXRlIHRlbmFudDogVGVuYW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWx0aW1lOiBSZWFsdGltZSxcbiAgICBwcml2YXRlIGFsZXJ0OiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcGk6IEFwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0ZW5hbnRVaVNlcnZpY2U6IFRlbmFudFVpU2VydmljZSxcbiAgICBwcml2YXRlIHRlbmFudExvZ2luT3B0aW9uc1NlcnZpY2U6IFRlbmFudExvZ2luT3B0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uU3RyYXRlZ3lcbiAgKSB7XG4gICAgdGhpcy5hdXRvTG9nb3V0KCk7XG4gICAgdGhpcy5pbml0TG9naW5PcHRpb25zKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCB0ZW5hbnQuXG4gICAqIEByZXR1cm4gVGhlIHRlbmFudCBuYW1lLlxuICAgKi9cbiAgZ2V0VGVuYW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsaWVudC50ZW5hbnQ7XG4gIH1cblxuICBpbml0TG9naW5PcHRpb25zKCkge1xuICAgIGNvbnN0IGxvZ2luT3B0aW9ucyA9IHRoaXMudWkuc3RhdGUubG9naW5PcHRpb25zIHx8IFtdO1xuICAgIHRoaXMubG9naW5Nb2RlID0gdGhpcy50ZW5hbnRVaVNlcnZpY2UuZ2V0UHJlZmVycmVkTG9naW5PcHRpb24obG9naW5PcHRpb25zKTtcbiAgICB0aGlzLm9hdXRoT3B0aW9ucyA9XG4gICAgICB0aGlzLnRlbmFudFVpU2VydmljZS5nZXRPYXV0aDJPcHRpb24obG9naW5PcHRpb25zKSB8fCAoe30gYXMgSVRlbmFudExvZ2luT3B0aW9uKTtcbiAgfVxuXG4gIHJlZGlyZWN0VG9PYXV0aCgpIHtcbiAgICBjb25zdCB7IGluaXRSZXF1ZXN0IH0gPSB0aGlzLm9hdXRoT3B0aW9ucztcbiAgICBjb25zdCBmdWxsUGF0aCA9ICh0aGlzLmxvY2F0aW9uID8gKHRoaXMubG9jYXRpb24gYXMgYW55KS5fcGxhdGZvcm1Mb2NhdGlvbiA6IHdpbmRvdykubG9jYXRpb25cbiAgICAgIC5ocmVmO1xuICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gZW5jb2RlVVJJQ29tcG9uZW50KGZ1bGxQYXRoKTtcbiAgICBjb25zdCBvcmlnaW5VcmlQYXJhbSA9IGAke2luaXRSZXF1ZXN0LmluY2x1ZGVzKCc/JykgPyAnJicgOiAnPyd9b3JpZ2luVXJpPSR7cmVkaXJlY3RVcmx9YDtcbiAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGAke2luaXRSZXF1ZXN0fSR7b3JpZ2luVXJpUGFyYW19YDtcbiAgfVxuXG4gIGF1dG9Mb2dvdXQoKSB7XG4gICAgY29uc3QgZXJyb3JQYXR0ZXJuID0gL2ludmFsaWRcXHNjcmVkZW50aWFscy4qcGluLipnZW5lcmF0ZS9pO1xuICAgIGNvbnN0IGlzVGZhRXhwaXJlZCA9IGRhdGEgPT5cbiAgICAgIGRhdGEgJiYgdHlwZW9mIGRhdGEubWVzc2FnZSA9PT0gJ3N0cmluZycgJiYgZXJyb3JQYXR0ZXJuLnRlc3QoZGF0YS5tZXNzYWdlKTtcbiAgICB0aGlzLnVpLmN1cnJlbnRVc2VyXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKHUgPT5cbiAgICAgICAgICB1ID8gdGhpcy5hcGkuaG9va1Jlc3BvbnNlKCh7IHJlc3BvbnNlIH0pID0+IHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxKSA6IEVNUFRZXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKGFwaUNhbGw6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB7IHJlc3BvbnNlIH0gPSBhcGlDYWxsO1xuICAgICAgICBsZXQgd2lsbExvZ291dCA9IGZhbHNlO1xuICAgICAgICBpZiAoaXNUZmFFeHBpcmVkKHJlc3BvbnNlLmRhdGEpKSB7XG4gICAgICAgICAgd2lsbExvZ291dCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiByZXNwb25zZS5qc29uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuY2xvbmUoKS5qc29uKCk7XG4gICAgICAgICAgICBpZiAoaXNUZmFFeHBpcmVkKGRhdGEpKSB7XG4gICAgICAgICAgICAgIHdpbGxMb2dvdXQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAod2lsbExvZ291dCkge1xuICAgICAgICAgIHRoaXMubG9nb3V0KGZhbHNlKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYWxlcnQuZGFuZ2VyKHRoaXMuRVJST1JfTUVTU0FHRVMudGZhRXhwaXJlZCksIDUwMCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIG1pbmltYWwgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCBhIHBhc3N3b3JkIHNob3VsZCBoYXZlIHRvIGJlIGNvbnNpZGVyZWQgYSDigJxncmVlbuKAnSBzdHJvbmcgb25lLlxuICAgKiBAcmV0dXJuIFRoZSBtaW4gbGVuZ3RoIGZvciBwYXNzd29yZCBvciBkZWZhdWx0IHZhbHVlLlxuICAgKi9cbiAgYXN5bmMgZ2V0R3JlZW5NaW5MZW5ndGgoKSB7XG4gICAgY29uc3QgeyBncmVlbk1pbkxlbmd0aCB9ID0gKGF3YWl0IHRoaXMuZ2V0QmFzaWNBdXRoTG9naW5PcHRpb24oKSkgfHwgeyBncmVlbk1pbkxlbmd0aDogbnVsbCB9O1xuICAgIHRoaXMucGFzc3dvcmRTdHJlbmd0aFNldHRpbmcuZ3JlZW5NaW5MZW5ndGggPSBncmVlbk1pbkxlbmd0aCB8fCB0aGlzLkdSRUVOX01JTl9MRU5HVEhfREVGQVVMVDtcbiAgICByZXR1cm4gdGhpcy5wYXNzd29yZFN0cmVuZ3RoU2V0dGluZy5ncmVlbk1pbkxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgcGFzc3dvcmQgc3RyZW5ndGggaXMgZW5mb3JjZWQgZm9yIHN5c3RlbVxuICAgKiBieSByZXRyaWV2aW5nIHZhbHVlIG9mIGBlbmZvcmNlU3RyZW5ndGhgIHByb3BlcnR5IGZyb20gbG9naW5PcHRpb25zIHJlc3BvbnNlXG4gICAqIEBwYXJhbSByZWZyZXNoIGJvb2xlYW4gdXNlZCB0byByZWZyZXNoIHRoZSBhcHAgc3RhdGUgd2hlcmUgcmVzdWx0IG9mIGxvZ2luT3B0aW9ucyByZXNwb25zZSBpcyBzdG9yZWQuXG4gICAqIElmIGZhbHNlLCBpdCB0YWtlcyB2YWx1ZSBmcm9tIG1lbW9yeSxcbiAgICogaWYgdHJ1ZSwgaXQgcmVmcmVzaCB0aGUgYXBwIHN0YXRlIHZhbHVlIGFuZCB0aGVuIHJldHJpdmVzIGRhdGEuXG4gICAqIEByZXR1cm4gYm9vbGVhbiB2YWx1ZSwgdHJ1ZSBpZiBlbmZvcmNlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgYXN5bmMgZ2V0RW5mb3JjZVBhc3N3b3JkU3RyZW5ndGgocmVmcmVzaD8pIHtcbiAgICByZXR1cm4gdGhpcy5nZXRCYXNpY0F1dGhMb2dpbk9wdGlvbihyZWZyZXNoKS50aGVuKGxvZ2luT3B0aW9uID0+IHtcbiAgICAgIGNvbnN0IGVuZm9yY2VQYXNzd29yZFN0cmVuZ3RoID0gZ2V0KGxvZ2luT3B0aW9uLCAnZW5mb3JjZVN0cmVuZ3RoJyk7XG4gICAgICBpZiAoaXNTdHJpbmcoZW5mb3JjZVBhc3N3b3JkU3RyZW5ndGgpKSB7XG4gICAgICAgIHRoaXMucGFzc3dvcmRTdHJlbmd0aFNldHRpbmcuZW5mb3JjZVBhc3N3b3JkU3RyZW5ndGggPVxuICAgICAgICAgIGVuZm9yY2VQYXNzd29yZFN0cmVuZ3RoID09PSAndHJ1ZScgPyB0cnVlIDogZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBhc3N3b3JkU3RyZW5ndGhTZXR0aW5nLmVuZm9yY2VQYXNzd29yZFN0cmVuZ3RoID0gISFlbmZvcmNlUGFzc3dvcmRTdHJlbmd0aDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnBhc3N3b3JkU3RyZW5ndGhTZXR0aW5nLmVuZm9yY2VQYXNzd29yZFN0cmVuZ3RoO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBwYXNzd29yZCBzdHJlbmd0aCBpcyBlbmZvcmNlZCBmb3IgcGFydGljdWxhciB0ZW5hbnRcbiAgICogYnkgcmV0cmlldmluZyB2YWx1ZSBvZiBgc3RyZW5ndGhWYWxpZGl0eWAgcHJvcGVydHkgZnJvbSBsb2dpbk9wdGlvbnMgcmVzcG9uc2VcbiAgICogQHBhcmFtIHJlZnJlc2ggYm9vbGVhbiB1c2VkIHRvIHJlZnJlc2ggdGhlIGFwcCBzdGF0ZSB3aGVyZSByZXN1bHQgb2YgbG9naW5PcHRpb25zIHJlc3BvbnNlIGlzIHN0b3JlZC5cbiAgICogSWYgZmFsc2UsIGl0IHRha2VzIHZhbHVlIGZyb20gbWVtb3J5LFxuICAgKiBpZiB0cnVlLCBpdCByZWZyZXNoIHRoZSBhcHAgc3RhdGUgdmFsdWUgYW5kIHRoZW4gcmV0cml2ZXMgZGF0YS5cbiAgICogQHJldHVybiBib29sZWFuIHZhbHVlLCB0cnVlIGlmIGVuZm9yY2VkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBhc3luYyBnZXRQYXNzd29yZFN0cmVuZ3RoVmFsaWRpdHkocmVmcmVzaD8pIHtcbiAgICByZXR1cm4gdGhpcy5nZXRCYXNpY0F1dGhMb2dpbk9wdGlvbihyZWZyZXNoKS50aGVuKGxvZ2luT3B0aW9uID0+IHtcbiAgICAgIGNvbnN0IHN0cmVuZ3RoVmFsaWRpdHkgPSBnZXQobG9naW5PcHRpb24sICdzdHJlbmd0aFZhbGlkaXR5Jyk7XG4gICAgICBpZiAoaXNTdHJpbmcoc3RyZW5ndGhWYWxpZGl0eSkpIHtcbiAgICAgICAgdGhpcy5wYXNzd29yZFN0cmVuZ3RoU2V0dGluZy5wYXNzd29yZFN0cmVuZ3RoVmFsaWRpdHkgPVxuICAgICAgICAgIHN0cmVuZ3RoVmFsaWRpdHkgPT09ICd0cnVlJyA/IHRydWUgOiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGFzc3dvcmRTdHJlbmd0aFNldHRpbmcucGFzc3dvcmRTdHJlbmd0aFZhbGlkaXR5ID0gISFzdHJlbmd0aFZhbGlkaXR5O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucGFzc3dvcmRTdHJlbmd0aFNldHRpbmcucGFzc3dvcmRTdHJlbmd0aFZhbGlkaXR5O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIGRldGVybWluZXMgaWYgZW5mb3JjZWQgc3RyZW5ndGggY2hlY2tzIHNob3VsZCBiZSBlbmFibGVkIGZvciBjdXJyZW50IHRlbmFudFxuICAgKiBiYXNlZCBvbiBwcm9wZXJ0aWVzIHJldHJpZXZlZCBmcm9tIGxvZ2luT3B0aW9uc1xuICAgKiBAcGFyYW0gb3B0aW9ucyBvYmplY3QgY29udGFpbmluZyBzcGVjaWZpYyBvcHRpb25zOlxuICAgKiAgICAtIHtyZWZyZXNoOiB0cnVlfSAtIHJlZnJlc2hlcyB2YWx1ZXMgb2YgYXBwIHN0YXRlIGFuZCByZXR1cm5zIGZyZXNoIHZhbHVlcyBhcyByZXN1bHQgb2YgY2FsbFxuICAgKiBAcmV0dXJuIGJvb2xlYW4gdmFsdWUsIHRydWUgaWYgc3RyZW5ndGggaXMgZW5mb3JjZWQgZm9yIHRlbmFudCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgYXN5bmMgZ2V0UGFzc3dvcmRTdHJlbmd0aEVuZm9yY2VkKG9wdGlvbnM/KSB7XG4gICAgY29uc3QgcmVmcmVzaCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5yZWZyZXNoO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICB0aGlzLmdldEVuZm9yY2VQYXNzd29yZFN0cmVuZ3RoKHJlZnJlc2gpLFxuICAgICAgdGhpcy5nZXRQYXNzd29yZFN0cmVuZ3RoVmFsaWRpdHkocmVmcmVzaClcbiAgICBdKS50aGVuKHZhbHVlcyA9PiB7XG4gICAgICBjb25zdCBbZW5mb3JjZVBhc3N3b3JkU3RyZW5ndGgsIHBhc3N3b3JkU3RyZW5ndGhWYWxpZGl0eV0gPSB2YWx1ZXM7XG4gICAgICByZXR1cm4gZW5mb3JjZVBhc3N3b3JkU3RyZW5ndGggfHwgcGFzc3dvcmRTdHJlbmd0aFZhbGlkaXR5O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyBhbGwgYmFja2VuZCBlcnJvcnMuXG4gICAqL1xuICBjbGVhbk1lc3NhZ2VzKCkge1xuICAgIHRoaXMuYWxlcnQuY2xlYXJBbGwoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IHN1Y2Nlc3MgbWVzc2FnZVxuICAgKiBAcGFyYW0gc3VjY2Vzc0tleSBUaGUga2V5IG9mIHRoZSBzdWNjZXNzIG1lc3NhZ2UgYXMgdXNlZCBpbiBTVUNDRVNTX01FU1NBR0VTXG4gICAqL1xuICBhZGRTdWNjZXNzTWVzc2FnZShzdWNjZXNzS2V5OiBzdHJpbmcpIHtcbiAgICBjb25zdCBzdWNjZXNzTWVzc2FnZSA9IHRoaXMuU1VDQ0VTU19NRVNTQUdFU1tzdWNjZXNzS2V5XTtcbiAgICBpZiAoc3VjY2Vzc01lc3NhZ2UpIHtcbiAgICAgIHRoaXMuYWxlcnQuYWRkKHtcbiAgICAgICAgdGV4dDogc3VjY2Vzc01lc3NhZ2UsXG4gICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgdGltZW91dDogMFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgc3RyYXRlZ3kuIERlZmF1bHRzIHRvIGNvb2tpZSwgaWYgYSB0b2tlblxuICAgKiBpcyBmb3VuZCBpbiBsb2NhbCBvciBzZXNzaW9uIHN0b3JhZ2Ugd2Ugc3dpdGNoIHRvIGJhc2ljIGF1dGguXG4gICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGF1dGggc3RyYXRlZ3kuXG4gICAqL1xuICBnZXRBdXRoU3RyYXRlZ3koKTogSUF1dGhlbnRpY2F0aW9uIHtcbiAgICBsZXQgYXV0aFN0cmF0ZWd5ID0gdGhpcy5jb29raWVBdXRoIGFzIElBdXRoZW50aWNhdGlvbjtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuZ2V0U3RvcmVkVG9rZW4oKTtcbiAgICBjb25zdCB0ZmEgPSB0aGlzLmdldFN0b3JlZFRmYVRva2VuKCk7XG4gICAgaWYgKHRva2VuKSB7XG4gICAgICBhdXRoU3RyYXRlZ3kgPSB0aGlzLmJhc2ljQXV0aDtcbiAgICAgIHRoaXMuc2V0Q3JlZGVudGlhbHMoeyB0b2tlbiwgdGZhIH0sIHRoaXMuYmFzaWNBdXRoKTtcbiAgICB9XG4gICAgcmV0dXJuIGF1dGhTdHJhdGVneTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JjZXMgdGhlIHVzZSBvZiBiYXNpYyBhdXRoIGFzIHN0cmF0ZWd5IHdpdGggdGhpcyBjcmVkZW50aWFscy5cbiAgICogQHBhcmFtIGNyZWRlbnRpYWxzIFRoZSBjcmVkZW50aWFscyB0byB1c2UuXG4gICAqL1xuICB1c2VCYXNpY0F1dGgoY3JlZGVudGlhbHM6IElDcmVkZW50aWFscykge1xuICAgIHRoaXMuc2V0Q3JlZGVudGlhbHMoY3JlZGVudGlhbHMsIHRoaXMuYmFzaWNBdXRoKTtcbiAgICByZXR1cm4gdGhpcy5iYXNpY0F1dGg7XG4gIH1cblxuICAvKipcbiAgICogVHJpZXMgdG8gbG9naW4gYSB1c2VyIHdpdGggdGhlIGdpdmVuIGNyZWRlbnRpYWxzLlxuICAgKiBJZiBzdWNjZXNzZnVsLCB0aGUgY3VycmVudCB0ZW5hbnQgYW5kIHVzZXIgaXMgc2V0LiBJZiBub3QgYW4gZXJyb3JcbiAgICogaXMgdGhyb3duLiBJdCBhbHNvIHZlcmlmaWVzIGlmIHRoZSB1c2VyIGlzIGFsbG93ZWQgdG8gb3BlbiB0aGVcbiAgICogY3VycmVudCBhcHAuXG4gICAqIEBwYXJhbSBhdXRoIFRoZSBhdXRoZW50aWNhdGlvbiBzdHJhdGVneSB1c2VkLlxuICAgKiBAcGFyYW0gY3JlZGVudGlhbHMgVGhlIGNyZWRlbnRpYWxzIHRvIHRyeSB0byBsb2dpbi5cbiAgICovXG4gIGFzeW5jIGxvZ2luKGF1dGg6IElBdXRoZW50aWNhdGlvbiA9IHRoaXMuZ2V0QXV0aFN0cmF0ZWd5KCksIGNyZWRlbnRpYWxzPzogSUNyZWRlbnRpYWxzKSB7XG4gICAgdGhpcy5jbGllbnQuc2V0QXV0aChhdXRoKTtcblxuICAgIGNvbnN0IHRlbmFudFJlcyA9IGF3YWl0IHRoaXMudGVuYW50LmN1cnJlbnQoKTtcbiAgICBjb25zdCB0ZW5hbnQgPSB0ZW5hbnRSZXMuZGF0YTtcblxuICAgIGlmIChjcmVkZW50aWFscykge1xuICAgICAgY3JlZGVudGlhbHMudGVuYW50ID0gdGVuYW50Lm5hbWU7XG4gICAgfVxuXG4gICAgaWYgKGF3YWl0IHRoaXMuc3dpdGNoTG9naW5Nb2RlKGNyZWRlbnRpYWxzKSkge1xuICAgICAgYXV0aCA9IHRoaXMuY29va2llQXV0aDtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyUmVzID0gYXdhaXQgdGhpcy51c2VyLmN1cnJlbnQoKTtcbiAgICBjb25zdCB1c2VyID0gdXNlclJlcy5kYXRhO1xuICAgIGF3YWl0IHRoaXMudmVyaWZ5QXBwQWNjZXNzKCk7XG5cbiAgICBjb25zdCBzdXBwb3J0VXNlck5hbWUgPSB0aGlzLmdldFN1cHBvcnRVc2VyTmFtZShjcmVkZW50aWFscyk7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLnNldENyZWRlbnRpYWxzKFxuICAgICAge1xuICAgICAgICB0ZW5hbnQ6IHRlbmFudC5uYW1lLFxuICAgICAgICB1c2VyOiAoc3VwcG9ydFVzZXJOYW1lID8gYCR7c3VwcG9ydFVzZXJOYW1lfSRgIDogJycpICsgdXNlci51c2VyTmFtZVxuICAgICAgfSxcbiAgICAgIGF1dGhcbiAgICApO1xuXG4gICAgaWYgKHRva2VuKSB7XG4gICAgICB0aGlzLnN0b3JlQmFzaWNBdXRoVG9rZW4odG9rZW4pO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuYXV0aEZ1bGZpbGxlZCh0ZW5hbnQsIHVzZXIsIHN1cHBvcnRVc2VyTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgdGVuYW50LCB1c2VyIGFuZCBzdXBwb3J0IHVzZXIgaW5mbyB0byB0aGUgYXBwIHN0YXRlLlxuICAgKiBAcGFyYW0gdGVuYW50IFRoZSBjdXJyZW50IHRlbmFudCBvYmplY3QuXG4gICAqIEBwYXJhbSB1c2VyIFRoZSBjdXJyZW50IHVzZXIgb2JqZWN0LlxuICAgKiBAcGFyYW0gc3VwcG9ydFVzZXJOYW1lIFRoZSBjdXJyZW50IHN1cHBvcnQgdXNlciBuYW1lLlxuICAgKi9cbiAgYXN5bmMgYXV0aEZ1bGZpbGxlZCh0ZW5hbnQ/LCB1c2VyPywgc3VwcG9ydFVzZXJOYW1lPykge1xuICAgIGlmICghdGVuYW50KSB7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMudGVuYW50LmN1cnJlbnQoKTtcbiAgICAgIHRlbmFudCA9IGRhdGE7XG4gICAgICB0aGlzLmNsaWVudC50ZW5hbnQgPSB0ZW5hbnQubmFtZTtcbiAgICB9XG5cbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy51c2VyLmN1cnJlbnQoKTtcbiAgICAgIHVzZXIgPSBkYXRhO1xuICAgIH1cblxuICAgIGlmICghc3VwcG9ydFVzZXJOYW1lKSB7XG4gICAgICBzdXBwb3J0VXNlck5hbWUgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMudWkuc2V0VXNlcih7IHVzZXIsIHN1cHBvcnRVc2VyTmFtZSB9KTtcbiAgICB0aGlzLnVpLmN1cnJlbnRUZW5hbnQubmV4dCh0ZW5hbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN3aXRjaCB0aGUgbG9naW4gbW9kZSB0byBDb29raWVBdXRoIGlmIHRoZVxuICAgKiB1c2VyIGhhcyBjb25maWd1cmVkIHRvIHVzZSBpdCBpbiBsb2dpbk9wdGlvbnMuXG4gICAqIEBwYXJhbSBjcmVkZW50aWFscyBUaGUgY3JlZGVudGlhbHMgZm9yIHRoYXQgbG9naW5cbiAgICovXG4gIGFzeW5jIHN3aXRjaExvZ2luTW9kZShjcmVkZW50aWFscz86IElDcmVkZW50aWFscykge1xuICAgIGNvbnN0IGlzUGFzc3dvcmRHcmFudExvZ2luID0gYXdhaXQgdGhpcy5pc1Bhc3N3b3JkR3JhbnRMb2dpbihjcmVkZW50aWFscyk7XG4gICAgaWYgKGlzUGFzc3dvcmRHcmFudExvZ2luICYmIGNyZWRlbnRpYWxzKSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmdlbmVyYXRlT2F1dGhUb2tlbihjcmVkZW50aWFscyk7XG4gICAgICBpZiAoIShyZXMgYXMgUmVzcG9uc2UpLm9rKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICAgICAgdGhyb3cgeyByZXMsIGRhdGEgfTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICB0aHJvdyBleDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5jbGllbnQuc2V0QXV0aCh0aGlzLmNvb2tpZUF1dGgpO1xuICAgICAgdGhpcy5jbGVhbkxvY2FsU3RvcmFnZSgpO1xuICAgICAgdGhpcy5iYXNpY0F1dGgubG9nb3V0KCk7XG4gICAgfVxuICAgIHJldHVybiBpc1Bhc3N3b3JkR3JhbnRMb2dpbjtcbiAgfVxuXG4gIGFzeW5jIGdlbmVyYXRlT2F1dGhUb2tlbihjcmVkZW50aWFscz86IElDcmVkZW50aWFscykge1xuICAgIGlmICgoYXdhaXQgdGhpcy5pc1Bhc3N3b3JkR3JhbnRMb2dpbihjcmVkZW50aWFscykpICYmIGNyZWRlbnRpYWxzKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgZ3JhbnRfdHlwZTogJ1BBU1NXT1JEJyxcbiAgICAgICAgdXNlcm5hbWU6IGNyZWRlbnRpYWxzLnVzZXIsXG4gICAgICAgIHBhc3N3b3JkOiBjcmVkZW50aWFscy5wYXNzd29yZCxcbiAgICAgICAgdGZhX2NvZGU6IGNyZWRlbnRpYWxzLnRmYVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gYXdhaXQgbmV3IEZldGNoQ2xpZW50KCkuZmV0Y2godGhpcy5nZXRVcmxGb3JPYXV0aChjcmVkZW50aWFscyksIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGJvZHk6IHBhcmFtcy50b1N0cmluZygpLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCdcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaXNQYXNzd29yZEdyYW50TG9naW4oY3JlZGVudGlhbHM/OiBJQ3JlZGVudGlhbHMpIHtcbiAgICBsZXQgbG9naW5Nb2RlID0gdGhpcy5sb2dpbk1vZGU7XG5cbiAgICBpZiAodGhpcy5pc1N1cHBvcnRVc2VyKGNyZWRlbnRpYWxzKSkge1xuICAgICAgaWYgKCF0aGlzLm1hbmFnZW1lbnRMb2dpbk1vZGUpIHtcbiAgICAgICAgdGhpcy5tYW5hZ2VtZW50TG9naW5Nb2RlID0gYXdhaXQgdGhpcy5nZXRNYW5hZ2VtZW50TG9naW5Nb2RlKCk7XG4gICAgICB9XG4gICAgICBsb2dpbk1vZGUgPSB0aGlzLm1hbmFnZW1lbnRMb2dpbk1vZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudGVuYW50VWlTZXJ2aWNlLmlzT2F1dGhJbnRlcm5hbChsb2dpbk1vZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIGlmIHRoZSBwcm92aWRlZCBjcmVkZW50aWFscyB1c2UgYSBzdXBwb3J0IHVzZXIgdG8gbG9nIGluIG9yIG5vdC5cbiAgICogQHBhcmFtIGNyZWRlbnRpYWxzIENyZWRlbnRpYWxzIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHVzZXIgaXMgYSBzdXBwb3J0IHVzZXIuXG4gICAqL1xuICBpc1N1cHBvcnRVc2VyKGNyZWRlbnRpYWxzPzogSUNyZWRlbnRpYWxzKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNyZWRlbnRpYWxzICYmIGNyZWRlbnRpYWxzLnVzZXIuaW5jbHVkZXMoJyQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyBpZiB0aGUgdGVuYW50IGlucHV0IGZpZWxkIHNob3VsZCBiZSBzaG93blxuICAgKiBvciBub3QuXG4gICAqIEByZXR1cm5zIElmIHRydWUsIHNob3cgdGhlIHRlbmFudCBpbnB1dC5cbiAgICovXG4gIHNob3dUZW5hbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLnVpLnN0YXRlLmxvZ2luT3B0aW9ucyB8fCB0aGlzLmlzTG9jYWwoKSB8fCB0aGlzLmlzU2hvd1RlbmFudCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIGlmIHRoZSB0ZW5hbnQgc2V0dXAgc2hvdWxkIGJlIHNob3duXG4gICAqIG9yIG5vdC5cbiAgICogQHJldHVybnMgSWYgdHJ1ZSwgc2hvdyB0aGUgdGVuYW50IGlucHV0LlxuICAgKi9cbiAgc2hvd1RlbmFudFNldHVwKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy51aS5zdGF0ZS5sb2dpbk9wdGlvbnMgJiYgIXRoaXMuaXNMb2NhbCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvZ3MgdGhlIHVzZXIgb3V0XG4gICAqIEBwYXJhbSByZWxvYWQgSWYgc2V0IHRvIGZhbHNlLCB0aGUgcGFnZSB3aWxsIG5vdCByZWxvYWRcbiAgICovXG4gIGFzeW5jIGxvZ291dChyZWxvYWQgPSB0cnVlKSB7XG4gICAgbGV0IHJlc0RhdGEgPSBudWxsO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBbLCBjb29raWVSZXNdID0gYXdhaXQgdGhpcy5yZXNldCgpO1xuICAgICAgcmVzRGF0YSA9IGF3YWl0IGNvb2tpZVJlcy5qc29uKCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHRoaXMuYWxlcnQucmVtb3ZlTGFzdERhbmdlcigpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocmVzRGF0YSAmJiByZXNEYXRhLnVybCkge1xuICAgICAgICB0aGlzLnJlZGlyZWN0KHJlc0RhdGEudXJsKTtcbiAgICAgIH0gZWxzZSBpZiAocmVsb2FkKSB7XG4gICAgICAgIHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHt9LCAnJywgJycsICcnKTtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIHN0b3JlZCBhdXRoLWRhdGFcbiAgICovXG4gIGFzeW5jIHJlc2V0KCkge1xuICAgIHRoaXMuY2xlYW5Mb2NhbFN0b3JhZ2UoKTtcbiAgICB0aGlzLmNsZWFuU2Vzc2lvblN0b3JhZ2UoKTtcbiAgICB0aGlzLnJlYWx0aW1lLmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLnVpLmN1cnJlbnRVc2VyLm5leHQobnVsbCk7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFt0aGlzLmJhc2ljQXV0aC5sb2dvdXQoKSwgdGhpcy5jb29raWVBdXRoLmxvZ291dCgpXSk7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgdGhlIFRGQSB0b2tlbiB0byBsb2NhbCBvciBzZXNzaW9uIHN0b3JhZ2UuXG4gICAqIEBwYXJhbSB0ZmFUb2tlbiBUaGUgdGZhIHRva2VuIHRvIHNhdmUuXG4gICAqIEBwYXJhbSBzdG9yYWdlIFRoZSBzdG9yYWdlIHRvIHVzZSAobG9jYWwgb3Igc2Vzc2lvbikuXG4gICAqL1xuICBzYXZlVEZBVG9rZW4odGZhVG9rZW46IHN0cmluZywgc3RvcmFnZTogU3RvcmFnZSkge1xuICAgIHN0b3JhZ2Uuc2V0SXRlbSh0aGlzLlRGQVRPS0VOX0tFWSwgdGZhVG9rZW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcXVlc3QgdGhlIG1hbmlmZXN0IC0+IG9uIDQwMSB1c2VyIGhhcyBubyBhY2Nlc3MgdG8gdGhhdCBhcHBsaWNhdGlvblxuICAgKiBhbmQgd2UgdGhyb3cgdGhlIGVycm9yIHVwIHRvIHRoZSBsb2dpbiBmb3JtLlxuICAgKi9cbiAgYXN5bmMgdmVyaWZ5QXBwQWNjZXNzKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnVpLmxvYWRNYW5pZmVzdCgpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoIShleC5yZXMgJiYgZXgucmVzLnN0YXR1cyA9PT0gNDA0ICYmIHRoaXMuaXNMb2NhbCgpKSkge1xuICAgICAgICB0aHJvdyBleDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZWRpcmVjdFRvRG9tYWluKGRvbWFpbikge1xuICAgIGNvbnN0IG9yaWdpblVybCA9IG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gb3JpZ2luVXJsLmhyZWYucmVwbGFjZShvcmlnaW5VcmwuaG9zdG5hbWUsIGRvbWFpbik7XG4gICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSByZWRpcmVjdFVybDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB0ZW5hbnQgdG8gdGhlIGNsaWVudCBhbmQgdXBkYXRlcyB0aGUgY3JlZGVudGlhbHMgb24gdGhlXG4gICAqIGF1dGggc3RyYXRlZ3kuXG4gICAqIEBwYXJhbSBjcmVkZW50aWFscyBUaGUgbmFtZSBvZiB0aGUgdGVuYW50LlxuICAgKiBAcGFyYW0gYXV0aFN0cmF0ZWd5IFRoZSBhdXRoZW50aWNhdGlvbiBzdHJhdGVneSB1c2VkLlxuICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHRva2VuIGlmIGJhc2ljIGF1dGgsIG90aGVyd2lzZSB1bmRlZmluZWQuXG4gICAqL1xuICBwcml2YXRlIHNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzOiBJQ3JlZGVudGlhbHMsIGF1dGhTdHJhdGVneTogSUF1dGhlbnRpY2F0aW9uKSB7XG4gICAgaWYgKGNyZWRlbnRpYWxzLnRlbmFudCkge1xuICAgICAgdGhpcy5jbGllbnQudGVuYW50ID0gY3JlZGVudGlhbHMudGVuYW50O1xuICAgIH1cbiAgICAvLyBDaGVjayBpZiBhIHRva2VuIGlzIGFscmVhZHkgc2V0IChjYXNlIGZvciBzdXBwb3J0IHVzZXIgbG9naW4pXG4gICAgLy8gaWYgeWVzIC0+IHdlIGp1c3QgbmVlZCB0byB1cGRhdGUgdGhlIHVzZXIsIGFuZCByZXVzZSB0aGUgdG9rZW5cbiAgICAvLyBvZiB0aGUgc3VwcG9ydCB1c2VyLlxuICAgIC8vIFRoZXJlZm9yZSB3ZSBuZWVkIHRvIHBhc3MgdXNlciBhbmQgdGVuYW50LCB0byBnZXRcbiAgICAvLyBqdXN0IHRoZSBzdG9yZWQgdG9rZW4gYW5kIG5vdGhpbmcgZWxzZSAoc2VlIEJhc2ljQXV0aC50czozMSkuXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmJhc2ljQXV0aC51cGRhdGVDcmVkZW50aWFscyh7XG4gICAgICB0ZW5hbnQ6IGNyZWRlbnRpYWxzLnRlbmFudCxcbiAgICAgIHVzZXI6IGNyZWRlbnRpYWxzLnVzZXJcbiAgICB9KTtcbiAgICBjb25zdCBuZXdDcmVkZW50aWFscyA9IHsgdG9rZW4sIC4uLmNyZWRlbnRpYWxzIH07XG5cbiAgICByZXR1cm4gYXV0aFN0cmF0ZWd5LnVwZGF0ZUNyZWRlbnRpYWxzKG5ld0NyZWRlbnRpYWxzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyBpZiB0aGUgY3VycmVudCB1c2VyIGlzIGEgZGV2ZWxvcGVyIG9yIG5vdC5cbiAgICogUnVubmluZyBvbiBsb2NhbGhvc3QgbWVhbnMgZGV2ZWxvcG1lbnQgbW9kZS5cbiAgICovXG4gIHByaXZhdGUgaXNMb2NhbCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBob3N0bmFtZSA9IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZTtcbiAgICByZXR1cm4gdGhpcy5sb2NhbGhvc3RJcFJlZ0V4cC50ZXN0KGhvc3RuYW1lKSB8fCB0aGlzLmxvY2FsaG9zdFJlZ0V4cC50ZXN0KGhvc3RuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIHRoZSB0b2tlbiB0byBsb2NhbCBvciBzZXNzaW9uIHN0b3JhZ2UuXG4gICAqIEBwYXJhbSB0b2tlbiBUaGUgdG9rZW4gdG8gc2F2ZS5cbiAgICogQHBhcmFtIHN0b3JhZ2UgVGhlIHN0b3JhZ2UgdG8gdXNlIChsb2NhbCBvciBzZXNzaW9uKS5cbiAgICovXG4gIHByaXZhdGUgc2F2ZVRva2VuKHRva2VuOiBzdHJpbmcsIHN0b3JhZ2U6IFN0b3JhZ2UpIHtcbiAgICBzdG9yYWdlLnNldEl0ZW0odGhpcy5UT0tFTl9LRVksIHRva2VuKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcmVCYXNpY0F1dGhUb2tlbih0b2tlbjogc3RyaW5nKSB7XG4gICAgdGhpcy5zYXZlVG9rZW4odG9rZW4sIHNlc3Npb25TdG9yYWdlKTtcbiAgICBpZiAodGhpcy5yZW1lbWJlck1lKSB7XG4gICAgICB0aGlzLnNhdmVUb2tlbih0b2tlbiwgbG9jYWxTdG9yYWdlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsZWFuTG9jYWxTdG9yYWdlKCkge1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuVE9LRU5fS0VZKTtcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlRGQVRPS0VOX0tFWSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuU2Vzc2lvblN0b3JhZ2UoKSB7XG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlRPS0VOX0tFWSk7XG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlRGQVRPS0VOX0tFWSk7XG4gIH1cblxuICBwcml2YXRlIGlzU2hvd1RlbmFudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG93VGVuYW50UmVnRXhwLnRlc3Qod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWRpcmVjdCh1cmw6IHN0cmluZykge1xuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRCYXNpY0F1dGhMb2dpbk9wdGlvbihyZWZyZXNoPyk6IFByb21pc2U8SVRlbmFudExvZ2luT3B0aW9uPiB7XG4gICAgaWYgKHJlZnJlc2gpIHtcbiAgICAgIGF3YWl0IHRoaXMudWkucmVmcmVzaExvZ2luT3B0aW9ucygpO1xuICAgIH1cbiAgICBjb25zdCBsb2dpbk9wdGlvbnMgPSB0aGlzLnVpLnN0YXRlLmxvZ2luT3B0aW9ucyB8fCBbXTtcbiAgICBjb25zdCBiYXNpY0F1dGhMb2dpbk9wdGlvbiA9IGxvZ2luT3B0aW9ucy5maW5kKCh7IHR5cGUgfSkgPT4gdHlwZSA9PT0gJ0JBU0lDJyk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShiYXNpY0F1dGhMb2dpbk9wdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBzdXBwb3J0IHVzZXIgbmFtZSBmcm9tIGNyZWRlbnRpYWxzLlxuICAgKiBAcGFyYW0gY3JlZGVudGlhbHMgQ3JlZGVudGlhbHMgb2JqZWN0IChkZWZhdWx0cyB0byB0aGUgc3RvcmVkIG9uZSkuXG4gICAqIEByZXR1cm5zIFN1cHBvcnQgdXNlciBuYW1lLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTdXBwb3J0VXNlck5hbWUoY3JlZGVudGlhbHM6IElDcmVkZW50aWFscyA9IHRoaXMuZ2V0U3RvcmVkQ3JlZGVudGlhbHMoKSk6IHN0cmluZyB7XG4gICAgaWYgKCFjcmVkZW50aWFscykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHN1cHBvcnRVc2VyTmFtZSA9IGNyZWRlbnRpYWxzLnVzZXIubWF0Y2goL14oLitcXC8pPygoLispXFwkKT8oLispPyQvKVszXTtcbiAgICByZXR1cm4gc3VwcG9ydFVzZXJOYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY3JlZGVudGlhbHMgb2JqZWN0IGZyb20gdGhlIHN0b3JlZCB0b2tlbi5cbiAgICogQHJldHVybnMgQ3JlZGVudGlhbHMgb2JqZWN0LlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTdG9yZWRDcmVkZW50aWFscygpOiBJQ3JlZGVudGlhbHMge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRTdG9yZWRUb2tlbigpO1xuICAgIGlmICghdG9rZW4pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWNvZGVUb2tlbih0b2tlbik7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBzdG9yZWQgdG9rZW4gZnJvbSBsb2NhbCBzdG9yYWdlIG9yIHNlc3Npb24gc3RvcmFnZS5cbiAgICogQHJldHVybnMgU3RvcmVkIHRva2VuLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTdG9yZWRUb2tlbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlRPS0VOX0tFWSkgfHwgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlRPS0VOX0tFWSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBzdG9yZWQgVEZBIHRva2VuIGZyb20gbG9jYWwgc3RvcmFnZSBvciBzZXNzaW9uIHN0b3JhZ2UuXG4gICAqIEByZXR1cm5zIFN0b3JlZCBURkEgdG9rZW4uXG4gICAqL1xuICBwcml2YXRlIGdldFN0b3JlZFRmYVRva2VuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuVEZBVE9LRU5fS0VZKSB8fCBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuVEZBVE9LRU5fS0VZKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvZGVzIHRva2VuIHRvIGNyZWRlbnRpYWxzIG9iamVjdC5cbiAgICogQHBhcmFtIHRva2VuIFRva2VuIHRvIGRlY29kZS5cbiAgICogQHJldHVybnMgQ3JlZGVudGlhbHMgb2JqZWN0LlxuICAgKi9cbiAgcHJpdmF0ZSBkZWNvZGVUb2tlbih0b2tlbjogc3RyaW5nKTogSUNyZWRlbnRpYWxzIHtcbiAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZSh3aW5kb3cuYXRvYih0b2tlbikpKTtcbiAgICBjb25zdCBzcGxpdCA9IGRlY29kZWQubWF0Y2goLygoW14vXSopXFwvKT8oW14vOl0rKTooLispLyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGVuYW50OiBzcGxpdFsyXSxcbiAgICAgIHVzZXI6IHNwbGl0WzNdLFxuICAgICAgcGFzc3dvcmQ6IHNwbGl0WzRdXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VXJsRm9yT2F1dGgoY3JlZGVudGlhbHM6IElDcmVkZW50aWFscykge1xuICAgIGlmIChpc0VtcHR5KGNyZWRlbnRpYWxzLnRlbmFudCkgJiYgdGhpcy5sb2dpbk1vZGUuaW5pdFJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXModGhpcy5sb2dpbk1vZGUuaW5pdFJlcXVlc3Quc3BsaXQoJz8nKS5wb3AoKSk7XG4gICAgICBjcmVkZW50aWFscy50ZW5hbnQgPSB1cmxQYXJhbXMuZ2V0KCd0ZW5hbnRfaWQnKTtcbiAgICB9XG4gICAgcmV0dXJuICFpc0VtcHR5KGNyZWRlbnRpYWxzLnRlbmFudClcbiAgICAgID8gYHRlbmFudC9vYXV0aD90ZW5hbnRfaWQ9JHtjcmVkZW50aWFscy50ZW5hbnR9YFxuICAgICAgOiBgdGVuYW50L29hdXRoYDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0TWFuYWdlbWVudExvZ2luTW9kZSgpIHtcbiAgICBjb25zdCBtYW5hZ2VtZW50TG9naW5PcHRpb25zID0gKGF3YWl0IHRoaXMudGVuYW50TG9naW5PcHRpb25zU2VydmljZS5saXN0Rm9yTWFuYWdlbWVudCgpKS5kYXRhO1xuICAgIHJldHVybiB0aGlzLnRlbmFudFVpU2VydmljZS5nZXRQcmVmZXJyZWRMb2dpbk9wdGlvbihtYW5hZ2VtZW50TG9naW5PcHRpb25zKTtcbiAgfVxufVxuIl19
|
|
@@ -11336,7 +11336,6 @@ class LoginService {
|
|
|
11336
11336
|
if (credentials) {
|
|
11337
11337
|
credentials.tenant = tenant.name;
|
|
11338
11338
|
}
|
|
11339
|
-
yield this.shouldRedirectDomain(credentials);
|
|
11340
11339
|
if (yield this.switchLoginMode(credentials)) {
|
|
11341
11340
|
auth = this.cookieAuth;
|
|
11342
11341
|
}
|
|
@@ -11660,22 +11659,6 @@ class LoginService {
|
|
|
11660
11659
|
return this.tenantUiService.getPreferredLoginOption(managementLoginOptions);
|
|
11661
11660
|
});
|
|
11662
11661
|
}
|
|
11663
|
-
shouldRedirectDomain(credentials) {
|
|
11664
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
11665
|
-
const isPasswordGrantLogin = yield this.isPasswordGrantLogin(credentials);
|
|
11666
|
-
if (this.isSupportUser(credentials) &&
|
|
11667
|
-
isPasswordGrantLogin &&
|
|
11668
|
-
this.managementLoginMode.loginRedirectDomain !== window.location.hostname &&
|
|
11669
|
-
!this.isLocal()) {
|
|
11670
|
-
const title = gettext('Redirect required');
|
|
11671
|
-
const body = gettext('Redirect to correct domain is required to log in as support user.');
|
|
11672
|
-
// avoids circular dependency NG0200 error when BsModalService is injected into APP_INITIALIZER (via LoginService -> ModalService -> BsModalService)
|
|
11673
|
-
const modalService = this.injector.get(ModalService);
|
|
11674
|
-
yield modalService.acknowledge(title, body, Status.INFO, gettext('Redirect'));
|
|
11675
|
-
this.redirectToDomain(this.managementLoginMode.loginRedirectDomain);
|
|
11676
|
-
}
|
|
11677
|
-
});
|
|
11678
|
-
}
|
|
11679
11662
|
}
|
|
11680
11663
|
LoginService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: LoginService, deps: [{ token: i0.Injector }, { token: i1$2.FetchClient }, { token: i1$2.BasicAuth }, { token: i1$2.CookieAuth }, { token: AppStateService }, { token: i1$2.UserService }, { token: i1$2.TenantService }, { token: i1$2.Realtime }, { token: AlertService }, { token: i1$1.ApiService }, { token: TenantUiService }, { token: i1$2.TenantLoginOptionsService }, { token: i1$3.TranslateService }, { token: i2.LocationStrategy, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
11681
11664
|
LoginService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: LoginService });
|