@frontegg/angular 6.13.0-alpha.7349472316 → 6.13.0-alpha.7370106428

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.
@@ -8,7 +8,6 @@ import { FronteggAuthService } from './frontegg-auth.service';
8
8
  import { AuthorizedContentDirective } from './directives/authorized-content.directive';
9
9
  import { FronteggSubscriptionService } from './frontegg-subscription.services';
10
10
  import { FronteggEntitlementsService } from './frontegg-entitlements.service';
11
- import { FronteggUserSubscriptionService } from './frontegg-user-subscription.service';
12
11
  import * as i0 from "@angular/core";
13
12
  export class FronteggAppModule {
14
13
  static forRoot(config) {
@@ -21,7 +20,6 @@ export class FronteggAppModule {
21
20
  FronteggAuthService,
22
21
  FronteggEntitlementsService,
23
22
  FronteggSubscriptionService,
24
- FronteggUserSubscriptionService,
25
23
  {
26
24
  provide: FronteggAppOptionsClass,
27
25
  useValue: config,
@@ -41,4 +39,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
41
39
  exports: [FronteggComponent, AuthorizedContentDirective],
42
40
  }]
43
41
  }] });
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbnRlZ2ctYXBwLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Zyb250ZWdnLWFwcC9zcmMvbGliL2Zyb250ZWdnLWFwcC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN2RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7QUFPdkYsTUFBTSxPQUFPLGlCQUFpQjtJQUM1QixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQTBCO1FBQ3ZDLE9BQU87WUFDTCxRQUFRLEVBQUUsaUJBQWlCO1lBQzNCLFNBQVMsRUFBRTtnQkFDVCxrQkFBa0I7Z0JBQ2xCLGlCQUFpQjtnQkFDakIsaUJBQWlCO2dCQUNqQixtQkFBbUI7Z0JBQ25CLDJCQUEyQjtnQkFDM0IsMkJBQTJCO2dCQUMzQiwrQkFBK0I7Z0JBQy9CO29CQUNFLE9BQU8sRUFBRSx1QkFBdUI7b0JBQ2hDLFFBQVEsRUFBRSxNQUFNO2lCQUNqQjthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7OytHQWxCVSxpQkFBaUI7Z0hBQWpCLGlCQUFpQixpQkFIYixpQkFBaUIsRUFBRSwwQkFBMEIsYUFEbEQsWUFBWSxFQUFFLFlBQVksYUFFMUIsaUJBQWlCLEVBQUUsMEJBQTBCO2dIQUU1QyxpQkFBaUIsWUFKbkIsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDOzRGQUkxQixpQkFBaUI7a0JBTDdCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQztvQkFDckMsWUFBWSxFQUFFLENBQUMsaUJBQWlCLEVBQUUsMEJBQTBCLENBQUM7b0JBQzdELE9BQU8sRUFBRSxDQUFDLGlCQUFpQixFQUFFLDBCQUEwQixDQUFDO2lCQUN6RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEZyb250ZWdnQXBwT3B0aW9ucyB9IGZyb20gJ0Bmcm9udGVnZy90eXBlcyc7XG5pbXBvcnQgeyBGcm9udGVnZ0FwcE9wdGlvbnNDbGFzcywgRnJvbnRlZ2dBcHBTZXJ2aWNlLCBGcm9udGVnZ0xvYWRHdWFyZCB9IGZyb20gJy4vZnJvbnRlZ2ctYXBwLnNlcnZpY2UnO1xuaW1wb3J0IHsgRnJvbnRlZ2dDb21wb25lbnQgfSBmcm9tICcuL2Zyb250ZWdnLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGcm9udGVnZ0F1dGhHdWFyZCB9IGZyb20gJy4vZ3VhcmRzL2Zyb250ZWdnLWF1dGguZ3VhcmQnO1xuaW1wb3J0IHsgRnJvbnRlZ2dBdXRoU2VydmljZSB9IGZyb20gJy4vZnJvbnRlZ2ctYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IEF1dGhvcml6ZWRDb250ZW50RGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2F1dGhvcml6ZWQtY29udGVudC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRnJvbnRlZ2dTdWJzY3JpcHRpb25TZXJ2aWNlIH0gZnJvbSAnLi9mcm9udGVnZy1zdWJzY3JpcHRpb24uc2VydmljZXMnO1xuaW1wb3J0IHsgRnJvbnRlZ2dFbnRpdGxlbWVudHNTZXJ2aWNlIH0gZnJvbSAnLi9mcm9udGVnZy1lbnRpdGxlbWVudHMuc2VydmljZSc7XG5pbXBvcnQgeyBGcm9udGVnZ1VzZXJTdWJzY3JpcHRpb25TZXJ2aWNlIH0gZnJvbSAnLi9mcm9udGVnZy11c2VyLXN1YnNjcmlwdGlvbi5zZXJ2aWNlJztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUm91dGVyTW9kdWxlXSxcbiAgZGVjbGFyYXRpb25zOiBbRnJvbnRlZ2dDb21wb25lbnQsIEF1dGhvcml6ZWRDb250ZW50RGlyZWN0aXZlXSxcbiAgZXhwb3J0czogW0Zyb250ZWdnQ29tcG9uZW50LCBBdXRob3JpemVkQ29udGVudERpcmVjdGl2ZV0sXG59KVxuZXhwb3J0IGNsYXNzIEZyb250ZWdnQXBwTW9kdWxlIHtcbiAgc3RhdGljIGZvclJvb3QoY29uZmlnOiBGcm9udGVnZ0FwcE9wdGlvbnMpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEZyb250ZWdnQXBwTW9kdWxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBGcm9udGVnZ0FwcE1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICBGcm9udGVnZ0FwcFNlcnZpY2UsXG4gICAgICAgIEZyb250ZWdnQXV0aEd1YXJkLFxuICAgICAgICBGcm9udGVnZ0xvYWRHdWFyZCxcbiAgICAgICAgRnJvbnRlZ2dBdXRoU2VydmljZSxcbiAgICAgICAgRnJvbnRlZ2dFbnRpdGxlbWVudHNTZXJ2aWNlLFxuICAgICAgICBGcm9udGVnZ1N1YnNjcmlwdGlvblNlcnZpY2UsXG4gICAgICAgIEZyb250ZWdnVXNlclN1YnNjcmlwdGlvblNlcnZpY2UsXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBGcm9udGVnZ0FwcE9wdGlvbnNDbGFzcyxcbiAgICAgICAgICB1c2VWYWx1ZTogY29uZmlnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG59XG4iXX0=
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbnRlZ2ctYXBwLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Zyb250ZWdnLWFwcC9zcmMvbGliL2Zyb250ZWdnLWFwcC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN2RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7QUFPOUUsTUFBTSxPQUFPLGlCQUFpQjtJQUM1QixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQTBCO1FBQ3ZDLE9BQU87WUFDTCxRQUFRLEVBQUUsaUJBQWlCO1lBQzNCLFNBQVMsRUFBRTtnQkFDVCxrQkFBa0I7Z0JBQ2xCLGlCQUFpQjtnQkFDakIsaUJBQWlCO2dCQUNqQixtQkFBbUI7Z0JBQ25CLDJCQUEyQjtnQkFDM0IsMkJBQTJCO2dCQUMzQjtvQkFDRSxPQUFPLEVBQUUsdUJBQXVCO29CQUNoQyxRQUFRLEVBQUUsTUFBTTtpQkFDakI7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDOzsrR0FqQlUsaUJBQWlCO2dIQUFqQixpQkFBaUIsaUJBSGIsaUJBQWlCLEVBQUUsMEJBQTBCLGFBRGxELFlBQVksRUFBRSxZQUFZLGFBRTFCLGlCQUFpQixFQUFFLDBCQUEwQjtnSEFFNUMsaUJBQWlCLFlBSm5CLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQzs0RkFJMUIsaUJBQWlCO2tCQUw3QixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUM7b0JBQ3JDLFlBQVksRUFBRSxDQUFDLGlCQUFpQixFQUFFLDBCQUEwQixDQUFDO29CQUM3RCxPQUFPLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSwwQkFBMEIsQ0FBQztpQkFDekQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBGcm9udGVnZ0FwcE9wdGlvbnMgfSBmcm9tICdAZnJvbnRlZ2cvdHlwZXMnO1xuaW1wb3J0IHsgRnJvbnRlZ2dBcHBPcHRpb25zQ2xhc3MsIEZyb250ZWdnQXBwU2VydmljZSwgRnJvbnRlZ2dMb2FkR3VhcmQgfSBmcm9tICcuL2Zyb250ZWdnLWFwcC5zZXJ2aWNlJztcbmltcG9ydCB7IEZyb250ZWdnQ29tcG9uZW50IH0gZnJvbSAnLi9mcm9udGVnZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRnJvbnRlZ2dBdXRoR3VhcmQgfSBmcm9tICcuL2d1YXJkcy9mcm9udGVnZy1hdXRoLmd1YXJkJztcbmltcG9ydCB7IEZyb250ZWdnQXV0aFNlcnZpY2UgfSBmcm9tICcuL2Zyb250ZWdnLWF1dGguc2VydmljZSc7XG5pbXBvcnQgeyBBdXRob3JpemVkQ29udGVudERpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9hdXRob3JpemVkLWNvbnRlbnQuZGlyZWN0aXZlJztcbmltcG9ydCB7IEZyb250ZWdnU3Vic2NyaXB0aW9uU2VydmljZSB9IGZyb20gJy4vZnJvbnRlZ2ctc3Vic2NyaXB0aW9uLnNlcnZpY2VzJztcbmltcG9ydCB7IEZyb250ZWdnRW50aXRsZW1lbnRzU2VydmljZSB9IGZyb20gJy4vZnJvbnRlZ2ctZW50aXRsZW1lbnRzLnNlcnZpY2UnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSb3V0ZXJNb2R1bGVdLFxuICBkZWNsYXJhdGlvbnM6IFtGcm9udGVnZ0NvbXBvbmVudCwgQXV0aG9yaXplZENvbnRlbnREaXJlY3RpdmVdLFxuICBleHBvcnRzOiBbRnJvbnRlZ2dDb21wb25lbnQsIEF1dGhvcml6ZWRDb250ZW50RGlyZWN0aXZlXSxcbn0pXG5leHBvcnQgY2xhc3MgRnJvbnRlZ2dBcHBNb2R1bGUge1xuICBzdGF0aWMgZm9yUm9vdChjb25maWc6IEZyb250ZWdnQXBwT3B0aW9ucyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8RnJvbnRlZ2dBcHBNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IEZyb250ZWdnQXBwTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIEZyb250ZWdnQXBwU2VydmljZSxcbiAgICAgICAgRnJvbnRlZ2dBdXRoR3VhcmQsXG4gICAgICAgIEZyb250ZWdnTG9hZEd1YXJkLFxuICAgICAgICBGcm9udGVnZ0F1dGhTZXJ2aWNlLFxuICAgICAgICBGcm9udGVnZ0VudGl0bGVtZW50c1NlcnZpY2UsXG4gICAgICAgIEZyb250ZWdnU3Vic2NyaXB0aW9uU2VydmljZSxcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IEZyb250ZWdnQXBwT3B0aW9uc0NsYXNzLFxuICAgICAgICAgIHVzZVZhbHVlOiBjb25maWcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -5,12 +5,10 @@ import { authStoreName, } from '@frontegg/redux-store';
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "./frontegg-app.service";
7
7
  import * as i2 from "@angular/router";
8
- import * as i3 from "./frontegg-user-subscription.service";
9
8
  export class FronteggAuthService {
10
- constructor(fronteggAppService, router, fronteggUserSubscriptionService) {
9
+ constructor(fronteggAppService, router) {
11
10
  this.fronteggAppService = fronteggAppService;
12
11
  this.router = router;
13
- this.fronteggUserSubscriptionService = fronteggUserSubscriptionService;
14
12
  this.authStateSubject = new BehaviorSubject({ isAuthenticated: false, isLoading: true });
15
13
  this.acceptInvitationStateSubject = new BehaviorSubject({});
16
14
  this.accountSettingsStateSubject = new BehaviorSubject({});
@@ -33,11 +31,6 @@ export class FronteggAuthService {
33
31
  this.isLoadingSubject = new BehaviorSubject(true);
34
32
  this.isSSOAuthSubject = new BehaviorSubject(false);
35
33
  this.ssoACSSubject = new BehaviorSubject('');
36
- /**
37
- * Triggers step up flow
38
- * @param options.maxAge optional max age
39
- */
40
- this.stepUp = (options) => this.fronteggAppService.fronteggApp.stepUp(options);
41
34
  // Root Actions
42
35
  this.setState = (state) => this.dispatchAction('setState', state);
43
36
  this.resetState = () => this.dispatchAction('resetState');
@@ -316,20 +309,13 @@ export class FronteggAuthService {
316
309
  const hostedLoginRedirectUrl = this.fronteggAppService.authRoutes.hostedLoginRedirectUrl;
317
310
  return path.startsWith(hostedLoginRedirectUrl !== null && hostedLoginRedirectUrl !== void 0 ? hostedLoginRedirectUrl : '/oauth/callback');
318
311
  }
319
- /**
320
- * @param options.maxAge optional max age
321
- * @returns A subscription for step up state - true when user is stepped up, false otherwise
322
- */
323
- isSteppedUp$(observer, options) {
324
- return this.fronteggUserSubscriptionService.getUserManipulatorSubscription(() => { return this.fronteggAppService.fronteggApp.isSteppedUp(options); }, observer);
325
- }
326
312
  }
327
- FronteggAuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FronteggAuthService, deps: [{ token: i1.FronteggAppService }, { token: i2.Router }, { token: i3.FronteggUserSubscriptionService }], target: i0.ɵɵFactoryTarget.Injectable });
313
+ FronteggAuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FronteggAuthService, deps: [{ token: i1.FronteggAppService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Injectable });
328
314
  FronteggAuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FronteggAuthService, providedIn: 'root' });
329
315
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FronteggAuthService, decorators: [{
330
316
  type: Injectable,
331
317
  args: [{
332
318
  providedIn: 'root',
333
319
  }]
334
- }], ctorParameters: function () { return [{ type: i1.FronteggAppService }, { type: i2.Router }, { type: i3.FronteggUserSubscriptionService }]; } });
335
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbnRlZ2ctYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZnJvbnRlZ2ctYXBwL3NyYy9saWIvZnJvbnRlZ2ctYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBaUMsTUFBTSxNQUFNLENBQUM7QUFFdEUsT0FBTyxhQUFhLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQXVDTCxhQUFhLEdBS2QsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7QUE2RC9CLE1BQU0sT0FBTyxtQkFBbUI7SUE4SDlCLFlBQ1Usa0JBQXNDLEVBQ3RDLE1BQWMsRUFDZCwrQkFBZ0U7UUFGaEUsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2Qsb0NBQStCLEdBQS9CLCtCQUErQixDQUFpQztRQWhJbEUscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQVksRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQWUsQ0FBQyxDQUFDO1FBQzVHLGlDQUE0QixHQUFHLElBQUksZUFBZSxDQUFxQyxFQUF3QyxDQUFDLENBQUM7UUFDakksZ0NBQTJCLEdBQUcsSUFBSSxlQUFlLENBQW9DLEVBQXVDLENBQUMsQ0FBQztRQUM5SCx5QkFBb0IsR0FBRyxJQUFJLGVBQWUsQ0FBNkIsRUFBZ0MsQ0FBQyxDQUFDO1FBQ3pHLDBCQUFxQixHQUFHLElBQUksZUFBZSxDQUE4QixFQUFpQyxDQUFDLENBQUM7UUFDNUcsK0JBQTBCLEdBQUcsSUFBSSxlQUFlLENBQW1DLEVBQXNDLENBQUMsQ0FBQztRQUMzSCxzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBMEIsRUFBNkIsQ0FBQyxDQUFDO1FBQ2hHLG9CQUFlLEdBQUcsSUFBSSxl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LENBQUMsc0JBQXNCLGFBQXRCLHNCQUFzQixjQUF0QixzQkFBc0IsR0FBSSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRDs7O09BR0c7SUFDSSxZQUFZLENBQUMsUUFBa0MsRUFBRSxPQUE0QjtRQUNsRixPQUFPLElBQUksQ0FBQywrQkFBK0IsQ0FBQyw4QkFBOEIsQ0FDeEUsR0FBRyxFQUFFLEdBQUcsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQSxDQUFBLENBQUMsRUFDeEUsUUFBUSxDQUNULENBQUM7SUFDSixDQUFDOztpSEExTVUsbUJBQW1CO3FIQUFuQixtQkFBbUIsY0FGbEIsTUFBTTs0RkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBQYXJ0aWFsT2JzZXJ2ZXIsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRnJvbnRlZ2dBcHBTZXJ2aWNlIH0gZnJvbSAnLi9mcm9udGVnZy1hcHAuc2VydmljZSc7XG5pbXBvcnQgRmFzdERlZXBFcXVhbCBmcm9tICdmYXN0LWRlZXAtZXF1YWwnO1xuaW1wb3J0IHtcbiAgUm9sZXNTdGF0ZSxcbiAgVGVuYW50c1N0YXRlLFxuICBBY2NvdW50U2V0dGluZ3NTdGF0ZSxcbiAgU2F2ZVNlY3VyaXR5UG9saWN5UGFzc3dvcmRIaXN0b3J5UGF5bG9hZCxcbiAgU2F2ZVNlY3VyaXR5UG9saWN5TG9ja291dFBheWxvYWQsXG4gIFNhdmVTZWN1cml0eVBvbGljeU1mYVBheWxvYWQsXG4gIFBhc3N3b3JkUG9saWN5U3RhdGUsXG4gIFBhc3N3b3JkSGlzdG9yeVBvbGljeVN0YXRlLFxuICBNZmFQb2xpY3lTdGF0ZSxcbiAgQ2FwdGNoYVBvbGljeVN0YXRlLFxuICBMb2Nrb3V0UG9saWN5U3RhdGUsXG4gIFB1YmxpY1BvbGljeVN0YXRlLFxuICBHbG9iYWxQb2xpY3lTdGF0ZSxcbiAgU2VjdXJpdHlQb2xpY3lTdGF0ZSxcbiAgQWRkVXNlckFwaVRva2VuUGF5bG9hZCxcbiAgQWRkVGVuYW50QXBpVG9rZW5QYXlsb2FkLFxuICBBcGlUb2tlblR5cGUsXG4gIEFwaVRva2Vuc1N0YXRlLFxuICBBcGlTdGF0ZUluZGljYXRvcixcbiAgSVNldERlbGV0ZVVzZXJEaWFsb2csXG4gIElTZXRBZGRVc2VyRGlhbG9nLFxuICBMb2FkUm9sZXNBbmRQZXJtaXNzaW9uc1BheWxvYWQsXG4gIFRlYW1TdGF0ZSxcbiAgVGVhbVN0YXRlSW5kaWNhdG9yLFxuICBNRkFTdGF0ZSxcbiAgU2F2ZVNTT0NvbmZpZ3VyYXRpb25QYXlsb2FkLFxuICBTU09TdGF0ZSxcbiAgUHJvZmlsZVN0YXRlLFxuICBTYXZlU1NPQ29uZmlndXJhdGlvbkZpbGVQYXlsb2FkLFxuICBVcGRhdGVTU09BdXRob3JpemF0aW9uUm9sZXNQYXlsb2FkLFxuICBEZWxldGVTYW1sR3JvdXBQYXlsb2FkLFxuICBDcmVhdGVTYW1sR3JvdXBQYXlsb2FkLFxuICBTYXZlUHJvZmlsZVBheWxvYWQsXG4gIFNpZ25VcFN0YXRlLFxuICBGb3Jnb3RQYXNzd29yZFN0YXRlLFxuICBBY2NlcHRJbnZpdGF0aW9uU3RhdGUsXG4gIEF1dGhTdGF0ZSxcbiAgVXNlcixcbiAgYXV0aFN0b3JlTmFtZSxcbiAgTG9naW5TdGF0ZSxcbiAgQWN0aXZhdGVBY2NvdW50U3RyYXRlZ3lTdGF0ZSxcbiAgSXNTdGVwcGVkVXBPcHRpb25zLFxuICBTdGVwVXBPcHRpb25zLFxufSBmcm9tICdAZnJvbnRlZ2cvcmVkdXgtc3RvcmUnO1xuaW1wb3J0IHtcbiAgSUxvZ2luLFxuICBJTG9naW5XaXRoTWZhLFxuICBJUG9zdExvZ2luLFxuICBJUHJlTG9naW4sXG4gIElSZWNvdmVyTUZBVG9rZW4sXG4gIElBY3RpdmF0ZUFjY291bnQsXG4gIElMb2dpblZpYVNvY2lhbExvZ2luLFxuICBJU2V0U29jaWFsTG9naW5FcnJvcixcbiAgSVJlc2VuZEFjdGl2YXRpb25FbWFpbCxcbiAgSUdldEFjdGl2YXRlQWNjb3VudFN0cmF0ZWd5LFxuICBJR2V0QWN0aXZhdGVBY2NvdW50U3RyYXRlZ3lSZXNwb25zZSxcbiAgSUFjY2VwdEludml0YXRpb24sXG4gIElGb3Jnb3RQYXNzd29yZCxcbiAgSVJlc2V0UGFzc3dvcmQsXG4gIElHZXRVc2VyUGFzc3dvcmRDb25maWcsXG4gIElTaWduVXBVc2VyLFxuICBJQ2hhbmdlUGFzc3dvcmQsXG4gIElPaWRjUG9zdExvZ2luLFxuICBJVmVyaWZ5TWZhLFxuICBJRGlzYWJsZU1mYSxcbiAgSUxvYWRVc2VycyxcbiAgSVRlYW1Vc2VyLFxuICBJQWRkVXNlcixcbiAgSVVwZGF0ZVVzZXIsXG4gIElEZWxldGVVc2VyLFxuICBJUmVzZW5kQWN0aXZhdGlvbkxpbmssXG4gIElTZXR0aW5nc1Jlc3BvbnNlLFxuICBJU3dpdGNoVGVuYW50LFxuICBJVGVuYW50c1Jlc3BvbnNlLFxuICBJQWRkUm9sZSxcbiAgSVJvbGUsXG4gIElVcGRhdGVSb2xlLFxuICBJRGVsZXRlUm9sZSxcbiAgSUF0dGFjaFBlcm1pc3Npb25zVG9Sb2xlLFxuICBJUmVzZW5kSW52aXRhdGlvbkxpbmssXG4gIElSb2xlUGVybWlzc2lvbixcbn0gZnJvbSAnQGZyb250ZWdnL3Jlc3QtYXBpJztcbmltcG9ydCB0eXBlIHsgRnJvbnRlZ2dTdGF0ZSwgQWN0aXZhdGVBY2NvdW50U3RhdGUsIFNvY2lhbExvZ2luU3RhdGUgfSBmcm9tICdAZnJvbnRlZ2cvcmVkdXgtc3RvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IExvZ2luRGlyZWN0QWN0aW9uIH0gZnJvbSAnQGZyb250ZWdnL3JlZHV4LXN0b3JlL2F1dGgvTG9naW5TdGF0ZS9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEZyb250ZWdnVXNlclN1YnNjcmlwdGlvblNlcnZpY2UgfSBmcm9tICcuL2Zyb250ZWdnLXVzZXItc3Vic2NyaXB0aW9uLnNlcnZpY2UnO1xuXG5pbnRlcmZhY2UgQXV0aFN1YlN0YXRlcyB7XG4gIGZpZWxkOiBQYXJ0aWFsPGtleW9mIEF1dGhTdGF0ZT47XG4gIHN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxhbnk+O1xufVxuXG5leHBvcnQgdHlwZSBXaXRoQ2FsbGJhY2s8VCA9IHt9LCBSID0gYm9vbGVhbj4gPSBUICYge1xuICBjYWxsYmFjaz86IChkYXRhOiBSIHwgbnVsbCwgZXJyb3I/OiBzdHJpbmcpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgdHlwZSBXaXRoU2lsZW50TG9hZDxUPiA9IFQgJiB7XG4gIHNpbGVudExvYWRpbmc/OiBib29sZWFuO1xufTtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEZyb250ZWdnQXV0aFNlcnZpY2Uge1xuICBwcml2YXRlIGF1dGhTdGF0ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF1dGhTdGF0ZT4oeyBpc0F1dGhlbnRpY2F0ZWQ6IGZhbHNlLCBpc0xvYWRpbmc6IHRydWUgfSBhcyBBdXRoU3RhdGUpO1xuICBwcml2YXRlIGFjY2VwdEludml0YXRpb25TdGF0ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF1dGhTdGF0ZVsnYWNjZXB0SW52aXRhdGlvblN0YXRlJ10+KHt9IGFzIEF1dGhTdGF0ZVsnYWNjZXB0SW52aXRhdGlvblN0YXRlJ10pO1xuICBwcml2YXRlIGFjY291bnRTZXR0aW5nc1N0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXV0aFN0YXRlWydhY2NvdW50U2V0dGluZ3NTdGF0ZSddPih7fSBhcyBBdXRoU3RhdGVbJ2FjY291bnRTZXR0aW5nc1N0YXRlJ10pO1xuICBwcml2YXRlIGFjdGl2YXRlU3RhdGVTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBdXRoU3RhdGVbJ2FjdGl2YXRlU3RhdGUnXT4oe30gYXMgQXV0aFN0YXRlWydhY3RpdmF0ZVN0YXRlJ10pO1xuICBwcml2YXRlIGFwaVRva2Vuc1N0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXV0aFN0YXRlWydhcGlUb2tlbnNTdGF0ZSddPih7fSBhcyBBdXRoU3RhdGVbJ2FwaVRva2Vuc1N0YXRlJ10pO1xuICBwcml2YXRlIGZvcmdvdFBhc3N3b3JkU3RhdGVTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBdXRoU3RhdGVbJ2ZvcmdvdFBhc3N3b3JkU3RhdGUnXT4oe30gYXMgQXV0aFN0YXRlWydmb3Jnb3RQYXNzd29yZFN0YXRlJ10pO1xuICBwcml2YXRlIGxvZ2luU3RhdGVTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBdXRoU3RhdGVbJ2xvZ2luU3RhdGUnXT4oe30gYXMgQXV0aFN0YXRlWydsb2dpblN0YXRlJ10pO1xuICBwcml2YXRlIG1mYVN0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXV0aFN0YXRlWydtZmFTdGF0ZSddPih7fSBhcyBBdXRoU3RhdGVbJ21mYVN0YXRlJ10pO1xuICBwcml2YXRlIHByb2ZpbGVTdGF0ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF1dGhTdGF0ZVsncHJvZmlsZVN0YXRlJ10+KHt9IGFzIEF1dGhTdGF0ZVsncHJvZmlsZVN0YXRlJ10pO1xuICBwcml2YXRlIHJvbGVzU3RhdGVTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBdXRoU3RhdGVbJ3JvbGVzU3RhdGUnXT4oe30gYXMgQXV0aFN0YXRlWydyb2xlc1N0YXRlJ10pO1xuICBwcml2YXRlIHJvdXRlc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF1dGhTdGF0ZVsncm91dGVzJ10+KHt9IGFzIEF1dGhTdGF0ZVsncm91dGVzJ10pO1xuICBwcml2YXRlIHNlY3VyaXR5UG9saWN5U3RhdGVTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBdXRoU3RhdGVbJ3NlY3VyaXR5UG9saWN5U3RhdGUnXT4oe30gYXMgQXV0aFN0YXRlWydzZWN1cml0eVBvbGljeVN0YXRlJ10pO1xuICBwcml2YXRlIHNpZ25VcFN0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXV0aFN0YXRlWydzaWduVXBTdGF0ZSddPih7fSBhcyBBdXRoU3RhdGVbJ3NpZ25VcFN0YXRlJ10pO1xuICBwcml2YXRlIHNvY2lhbExvZ2luU3RhdGVTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBdXRoU3RhdGVbJ3NvY2lhbExvZ2luU3RhdGUnXT4oe30gYXMgQXV0aFN0YXRlWydzb2NpYWxMb2dpblN0YXRlJ10pO1xuICBwcml2YXRlIHNzb1N0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXV0aFN0YXRlWydzc29TdGF0ZSddPih7fSBhcyBBdXRoU3RhdGVbJ3Nzb1N0YXRlJ10pO1xuICBwcml2YXRlIHRlYW1TdGF0ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF1dGhTdGF0ZVsndGVhbVN0YXRlJ10+KHt9IGFzIEF1dGhTdGF0ZVsndGVhbVN0YXRlJ10pO1xuICBwcml2YXRlIHRlbmFudHNTdGF0ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF1dGhTdGF0ZVsndGVuYW50c1N0YXRlJ10+KHt9IGFzIEF1dGhTdGF0ZVsndGVuYW50c1N0YXRlJ10pO1xuICBwcml2YXRlIHVzZXJTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBdXRoU3RhdGVbJ3VzZXInXT4oe30gYXMgQXV0aFN0YXRlWyd1c2VyJ10pO1xuICBwcml2YXRlIGlzQXV0aGVudGljYXRlZFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF1dGhTdGF0ZVsnaXNBdXRoZW50aWNhdGVkJ10+KGZhbHNlKTtcbiAgcHJpdmF0ZSBpc0xvYWRpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBdXRoU3RhdGVbJ2lzTG9hZGluZyddPih0cnVlKTtcbiAgcHJpdmF0ZSBpc1NTT0F1dGhTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBdXRoU3RhdGVbJ2lzU1NPQXV0aCddPihmYWxzZSk7XG4gIHByaXZhdGUgc3NvQUNTU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXV0aFN0YXRlWydzc29BQ1MnXT4oJycpO1xuXG5cbiAgZ2V0QXV0aFN0YXRlKCk6IEF1dGhTdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbnRlZ2dBcHBTZXJ2aWNlLmZyb250ZWdnQXBwLnN0b3JlLmdldFN0YXRlKCkuYXV0aDtcbiAgfVxuXG4gIGdldCBhdXRoU3RhdGUkKCk6IE9ic2VydmFibGU8QXV0aFN0YXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aFN0YXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCBhY2NlcHRJbnZpdGF0aW9uU3RhdGUkKCk6IE9ic2VydmFibGU8QXV0aFN0YXRlWydhY2NlcHRJbnZpdGF0aW9uU3RhdGUnXT4ge1xuICAgIHJldHVybiB0aGlzLmFjY2VwdEludml0YXRpb25TdGF0ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgYWNjb3VudFNldHRpbmdzU3RhdGUkKCk6IE9ic2VydmFibGU8QXV0aFN0YXRlWydhY2NvdW50U2V0dGluZ3NTdGF0ZSddPiB7XG4gICAgcmV0dXJuIHRoaXMuYWNjb3VudFNldHRpbmdzU3RhdGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IGFjdGl2YXRlU3RhdGUkKCk6IE9ic2VydmFibGU8QXV0aFN0YXRlWydhY3RpdmF0ZVN0YXRlJ10+IHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmF0ZVN0YXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCBhcGlUb2tlbnNTdGF0ZSQoKTogT2JzZXJ2YWJsZTxBdXRoU3RhdGVbJ2FwaVRva2Vuc1N0YXRlJ10+IHtcbiAgICByZXR1cm4gdGhpcy5hcGlUb2tlbnNTdGF0ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgZm9yZ290UGFzc3dvcmRTdGF0ZSQoKTogT2JzZXJ2YWJsZTxBdXRoU3RhdGVbJ2ZvcmdvdFBhc3N3b3JkU3RhdGUnXT4ge1xuICAgIHJldHVybiB0aGlzLmZvcmdvdFBhc3N3b3JkU3RhdGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IGxvZ2luU3RhdGUkKCk6IE9ic2VydmFibGU8QXV0aFN0YXRlWydsb2dpblN0YXRlJ10+IHtcbiAgICByZXR1cm4gdGhpcy5sb2dpblN0YXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCBtZmFTdGF0ZSQoKTogT2JzZXJ2YWJsZTxBdXRoU3RhdGVbJ21mYVN0YXRlJ10+IHtcbiAgICByZXR1cm4gdGhpcy5tZmFTdGF0ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgcHJvZmlsZVN0YXRlJCgpOiBPYnNlcnZhYmxlPEF1dGhTdGF0ZVsncHJvZmlsZVN0YXRlJ10+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9maWxlU3RhdGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IHJvbGVzU3RhdGUkKCk6IE9ic2VydmFibGU8QXV0aFN0YXRlWydyb2xlc1N0YXRlJ10+IHtcbiAgICByZXR1cm4gdGhpcy5yb2xlc1N0YXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCByb3V0ZXNTdGF0ZSQoKTogT2JzZXJ2YWJsZTxBdXRoU3RhdGVbJ3JvdXRlcyddPiB7XG4gICAgcmV0dXJuIHRoaXMucm91dGVzU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCBzZWN1cml0eVBvbGljeVN0YXRlJCgpOiBPYnNlcnZhYmxlPEF1dGhTdGF0ZVsnc2VjdXJpdHlQb2xpY3lTdGF0ZSddPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VjdXJpdHlQb2xpY3lTdGF0ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgc2lnblVwU3RhdGUkKCk6IE9ic2VydmFibGU8QXV0aFN0YXRlWydzaWduVXBTdGF0ZSddPiB7XG4gICAgcmV0dXJuIHRoaXMuc2lnblVwU3RhdGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IHNvY2lhbExvZ2luU3RhdGUkKCk6IE9ic2VydmFibGU8QXV0aFN0YXRlWydzb2NpYWxMb2dpblN0YXRlJ10+IHtcbiAgICByZXR1cm4gdGhpcy5zb2NpYWxMb2dpblN0YXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCBzc29TdGF0ZSQoKTogT2JzZXJ2YWJsZTxBdXRoU3RhdGVbJ3Nzb1N0YXRlJ10+IHtcbiAgICByZXR1cm4gdGhpcy5zc29TdGF0ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgdGVhbVN0YXRlJCgpOiBPYnNlcnZhYmxlPEF1dGhTdGF0ZVsndGVhbVN0YXRlJ10+IHtcbiAgICByZXR1cm4gdGhpcy50ZWFtU3RhdGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IHRlbmFudHNTdGF0ZSQoKTogT2JzZXJ2YWJsZTxBdXRoU3RhdGVbJ3RlbmFudHNTdGF0ZSddPiB7XG4gICAgcmV0dXJuIHRoaXMudGVuYW50c1N0YXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCB1c2VyJCgpOiBPYnNlcnZhYmxlPEF1dGhTdGF0ZVsndXNlciddPiB7XG4gICAgcmV0dXJuIHRoaXMudXNlclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgdXNlcigpOiBBdXRoU3RhdGVbJ3VzZXInXSB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbnRlZ2dBcHBTZXJ2aWNlLmZyb250ZWdnQXBwLnN0b3JlLmdldFN0YXRlKCkuYXV0aC51c2VyO1xuICB9XG5cblxuICBnZXQgaXNBdXRoZW50aWNhdGVkJCgpOiBPYnNlcnZhYmxlPEF1dGhTdGF0ZVsnaXNBdXRoZW50aWNhdGVkJ10+IHtcbiAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IGlzQXV0aGVudGljYXRlZCgpOiBBdXRoU3RhdGVbJ2lzQXV0aGVudGljYXRlZCddIHtcbiAgICByZXR1cm4gdGhpcy5mcm9udGVnZ0FwcFNlcnZpY2UuZnJvbnRlZ2dBcHAuc3RvcmUuZ2V0U3RhdGUoKS5hdXRoLmlzQXV0aGVudGljYXRlZDtcbiAgfVxuXG4gIGdldCBpc0xvYWRpbmckKCk6IE9ic2VydmFibGU8QXV0aFN0YXRlWydpc0xvYWRpbmcnXT4ge1xuICAgIHJldHVybiB0aGlzLmlzTG9hZGluZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgaXNTU09BdXRoJCgpOiBPYnNlcnZhYmxlPEF1dGhTdGF0ZVsnaXNTU09BdXRoJ10+IHtcbiAgICByZXR1cm4gdGhpcy5pc1NTT0F1dGhTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IHNzb0FDUyQoKTogT2JzZXJ2YWJsZTxBdXRoU3RhdGVbJ3Nzb0FDUyddPiB7XG4gICAgcmV0dXJuIHRoaXMuc3NvQUNTU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZnJvbnRlZ2dBcHBTZXJ2aWNlOiBGcm9udGVnZ0FwcFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGZyb250ZWdnVXNlclN1YnNjcmlwdGlvblNlcnZpY2U6IEZyb250ZWdnVXNlclN1YnNjcmlwdGlvblNlcnZpY2VcbiAgKSB7XG4gICAgY29uc3QgYXV0aFN1YlN0YXRlczogQXV0aFN1YlN0YXRlc1tdID0gW1xuICAgICAgeyBmaWVsZDogJ2FjY2VwdEludml0YXRpb25TdGF0ZScsIHN1YmplY3Q6IHRoaXMuYWNjZXB0SW52aXRhdGlvblN0YXRlU3ViamVjdCB9LFxuICAgICAgeyBmaWVsZDogJ2FjY291bnRTZXR0aW5nc1N0YXRlJywgc3ViamVjdDogdGhpcy5hY2NvdW50U2V0dGluZ3NTdGF0ZVN1YmplY3QgfSxcbiAgICAgIHsgZmllbGQ6ICdhY3RpdmF0ZVN0YXRlJywgc3ViamVjdDogdGhpcy5hY3RpdmF0ZVN0YXRlU3ViamVjdCB9LFxuICAgICAgeyBmaWVsZDogJ2FwaVRva2Vuc1N0YXRlJywgc3ViamVjdDogdGhpcy5hcGlUb2tlbnNTdGF0ZVN1YmplY3QgfSxcbiAgICAgIHsgZmllbGQ6ICdmb3Jnb3RQYXNzd29yZFN0YXRlJywgc3ViamVjdDogdGhpcy5mb3Jnb3RQYXNzd29yZFN0YXRlU3ViamVjdCB9LFxuICAgICAgeyBmaWVsZDogJ3RlbmFudHNTdGF0ZScsIHN1YmplY3Q6IHRoaXMudGVuYW50c1N0YXRlU3ViamVjdCB9LFxuICAgICAgeyBmaWVsZDogJ2xvZ2luU3RhdGUnLCBzdWJqZWN0OiB0aGlzLmxvZ2luU3RhdGVTdWJqZWN0IH0sXG4gICAgICB7IGZpZWxkOiAnbWZhU3RhdGUnLCBzdWJqZWN0OiB0aGlzLm1mYVN0YXRlU3ViamVjdCB9LFxuICAgICAgeyBmaWVsZDogJ3Byb2ZpbGVTdGF0ZScsIHN1YmplY3Q6IHRoaXMucHJvZmlsZVN0YXRlU3ViamVjdCB9LFxuICAgICAgeyBmaWVsZDogJ3JvbGVzU3RhdGUnLCBzdWJqZWN0OiB0aGlzLnJvbGVzU3RhdGVTdWJqZWN0IH0sXG4gICAgICB7IGZpZWxkOiAncm91dGVzJywgc3ViamVjdDogdGhpcy5yb3V0ZXNTdWJqZWN0IH0sXG4gICAgICB7IGZpZWxkOiAnc2VjdXJpdHlQb2xpY3lTdGF0ZScsIHN1YmplY3Q6IHRoaXMuc2VjdXJpdHlQb2xpY3lTdGF0ZVN1YmplY3QgfSxcbiAgICAgIHsgZmllbGQ6ICdzaWduVXBTdGF0ZScsIHN1YmplY3Q6IHRoaXMuc2lnblVwU3RhdGVTdWJqZWN0IH0sXG4gICAgICB7IGZpZWxkOiAnc29jaWFsTG9naW5TdGF0ZScsIHN1YmplY3Q6IHRoaXMuc29jaWFsTG9naW5TdGF0ZVN1YmplY3QgfSxcbiAgICAgIHsgZmllbGQ6ICdzc29TdGF0ZScsIHN1YmplY3Q6IHRoaXMuc3NvU3RhdGVTdWJqZWN0IH0sXG4gICAgICB7IGZpZWxkOiAndGVhbVN0YXRlJywgc3ViamVjdDogdGhpcy50ZWFtU3RhdGVTdWJqZWN0IH0sXG4gICAgICB7IGZpZWxkOiAndXNlcicsIHN1YmplY3Q6IHRoaXMudXNlclN1YmplY3QgfSxcbiAgICAgIHsgZmllbGQ6ICdpc1NTT0F1dGgnLCBzdWJqZWN0OiB0aGlzLmlzU1NPQXV0aFN1YmplY3QgfSxcbiAgICAgIHsgZmllbGQ6ICdzc29BQ1MnLCBzdWJqZWN0OiB0aGlzLnNzb0FDU1N1YmplY3QgfSxcbiAgICBdO1xuXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmZyb250ZWdnQXBwU2VydmljZS5mcm9udGVnZ0FwcC5zdG9yZS5nZXRTdGF0ZSgpIGFzIEZyb250ZWdnU3RhdGU7XG4gICAgdGhpcy51cGRhdGVTdGF0ZShzdGF0ZS5hdXRoLCBhdXRoU3ViU3RhdGVzKTtcbiAgICAvLyBNZW1vaXplZCBBdXRoIFN0YXRlXG4gICAgdGhpcy5mcm9udGVnZ0FwcFNlcnZpY2UuZnJvbnRlZ2dBcHAuc3RvcmUuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0gdGhpcy5mcm9udGVnZ0FwcFNlcnZpY2UuZnJvbnRlZ2dBcHAuc3RvcmUuZ2V0U3RhdGUoKSBhcyBGcm9udGVnZ1N0YXRlO1xuICAgICAgdGhpcy51cGRhdGVTdGF0ZShuZXdTdGF0ZS5hdXRoLCBhdXRoU3ViU3RhdGVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3RhdGUoYXV0aFN0YXRlOiBBdXRoU3RhdGUsIGF1dGhTdWJTdGF0ZXM6IEF1dGhTdWJTdGF0ZXNbXSk6IHZvaWQge1xuXG4gICAgaWYgKHRoaXMuYXV0aFN0YXRlU3ViamVjdC52YWx1ZSAhPT0gYXV0aFN0YXRlKSB7XG4gICAgICB0aGlzLmF1dGhTdGF0ZVN1YmplY3QubmV4dChhdXRoU3RhdGUpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGF1dGhTdWJTdGF0ZSBvZiBhdXRoU3ViU3RhdGVzKSB7XG4gICAgICBpZiAoIUZhc3REZWVwRXF1YWwoYXV0aFN1YlN0YXRlLnN1YmplY3QudmFsdWUsIGF1dGhTdGF0ZVthdXRoU3ViU3RhdGUuZmllbGRdKSkge1xuICAgICAgICBhdXRoU3ViU3RhdGUuc3ViamVjdC5uZXh0KGF1dGhTdGF0ZVthdXRoU3ViU3RhdGUuZmllbGRdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuaXNBdXRoZW50aWNhdGVkU3ViamVjdC52YWx1ZSAhPT0gYXV0aFN0YXRlLmlzQXV0aGVudGljYXRlZCkge1xuICAgICAgdGhpcy5pc0F1dGhlbnRpY2F0ZWRTdWJqZWN0Lm5leHQoYXV0aFN0YXRlLmlzQXV0aGVudGljYXRlZCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzTG9hZGluZ1N1YmplY3QudmFsdWUgIT09IGF1dGhTdGF0ZS5pc0xvYWRpbmcpIHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nU3ViamVjdC5uZXh0KGF1dGhTdGF0ZS5pc0xvYWRpbmcpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGlzcGF0Y2hBY3Rpb24odHlwZTogc3RyaW5nLCBwYXlsb2FkPzogYW55KTogdm9pZCB7XG4gICAgY29uc3Qgc3RvcmUgPSB0aGlzLmZyb250ZWdnQXBwU2VydmljZS5mcm9udGVnZ0FwcC5zdG9yZTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgc3RvcmUuZGlzcGF0Y2goeyB0eXBlOiBgJHthdXRoU3RvcmVOYW1lfS8ke3R5cGV9YCwgcGF5bG9hZCB9KTtcbiAgfVxuXG5cbiAgcHVibGljIGlzSG9zdGVkTG9naW5DYWxsYmFja1JvdXRlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmZyb250ZWdnQXBwU2VydmljZS5yb3V0ZXIudXJsO1xuICAgIGNvbnN0IGhvc3RlZExvZ2luUmVkaXJlY3RVcmwgPSB0aGlzLmZyb250ZWdnQXBwU2VydmljZS5hdXRoUm91dGVzLmhvc3RlZExvZ2luUmVkaXJlY3RVcmw7XG4gICAgcmV0dXJuIHBhdGguc3RhcnRzV2l0aChob3N0ZWRMb2dpblJlZGlyZWN0VXJsID8/ICcvb2F1dGgvY2FsbGJhY2snKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gb3B0aW9ucy5tYXhBZ2Ugb3B0aW9uYWwgbWF4IGFnZVxuICAgKiBAcmV0dXJucyBBIHN1YnNjcmlwdGlvbiBmb3Igc3RlcCB1cCBzdGF0ZSAtIHRydWUgd2hlbiB1c2VyIGlzIHN0ZXBwZWQgdXAsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgcHVibGljIGlzU3RlcHBlZFVwJChvYnNlcnZlcjogUGFydGlhbE9ic2VydmVyPGJvb2xlYW4+LCBvcHRpb25zPzogSXNTdGVwcGVkVXBPcHRpb25zKTogU3Vic2NyaXB0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5mcm9udGVnZ1VzZXJTdWJzY3JpcHRpb25TZXJ2aWNlLmdldFVzZXJNYW5pcHVsYXRvclN1YnNjcmlwdGlvbjxib29sZWFuPihcbiAgICAgICgpID0+IHsgcmV0dXJuIHRoaXMuZnJvbnRlZ2dBcHBTZXJ2aWNlLmZyb250ZWdnQXBwLmlzU3RlcHBlZFVwKG9wdGlvbnMpfSxcbiAgICAgIG9ic2VydmVyXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VycyBzdGVwIHVwIGZsb3dcbiAgICogQHBhcmFtIG9wdGlvbnMubWF4QWdlIG9wdGlvbmFsIG1heCBhZ2VcbiAgICovXG4gIHB1YmxpYyBzdGVwVXAgPSAob3B0aW9ucz86IFN0ZXBVcE9wdGlvbnMpID0+IHRoaXMuZnJvbnRlZ2dBcHBTZXJ2aWNlLmZyb250ZWdnQXBwLnN0ZXBVcChvcHRpb25zKTtcblxuXG4gIC8vIFJvb3QgQWN0aW9uc1xuICBzZXRTdGF0ZSA9IChzdGF0ZTogUGFydGlhbDxBdXRoU3RhdGU+KSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdzZXRTdGF0ZScsIHN0YXRlKTtcbiAgcmVzZXRTdGF0ZSA9ICgpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3Jlc2V0U3RhdGUnKTtcbiAgc2V0VXNlciA9ICh1c2VyOiBVc2VyKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdzZXRVc2VyJywgdXNlcik7XG5cbiAgLy8gTG9naW4gQWN0aW9uc1xuICBzZXRMb2dpblN0YXRlID0gKHN0YXRlOiBQYXJ0aWFsPExvZ2luU3RhdGU+KSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdzZXRMb2dpblN0YXRlJywgc3RhdGUpO1xuICByZXNldExvZ2luU3RhdGUgPSAoKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdyZXNldExvZ2luU3RhdGUnKTtcbiAgcmVxdWVzdEF1dGhvcml6ZSA9IChmaXJzdFRpbWU/OiBib29sZWFuKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdyZXF1ZXN0QXV0aG9yaXplJywgZmlyc3RUaW1lKTtcblxuICBsb2dpbldpdGhSZWRpcmVjdCA9IChwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRSZWRpcmVjdFRvTG9naW4/OiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFRpbWU/OiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICAgICBsb2dpbkRpcmVjdEFjdGlvbj86IExvZ2luRGlyZWN0QWN0aW9uKSA9PiB7XG4gICAgaWYgKHRoaXMuaXNIb3N0ZWRMb2dpbkNhbGxiYWNrUm91dGUoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmRpc3BhdGNoQWN0aW9uKCdyZXF1ZXN0SG9zdGVkTG9naW5BdXRob3JpemVWMicsIHtcbiAgICAgIGFkZGl0aW9uYWxQYXJhbXM6IHBhcmFtcyxcbiAgICAgIHNob3VsZFJlZGlyZWN0VG9Mb2dpbjogc2hvdWxkUmVkaXJlY3RUb0xvZ2luID8/IHRydWUsXG4gICAgICBmaXJzdFRpbWU6IGZpcnN0VGltZSA/PyBmYWxzZSxcbiAgICAgIGxvZ2luRGlyZWN0QWN0aW9uLFxuICAgIH0pO1xuICAgIHRoaXMuc2V0U3RhdGUoeyBpc0xvYWRpbmc6IHRydWUgfSk7XG4gIH07XG4gIHByZUxvZ2luID0gKHBheWxvYWQ6IElQcmVMb2dpbikgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbigncHJlTG9naW4nLCBwYXlsb2FkKTtcbiAgcG9zdExvZ2luID0gKHBheWxvYWQ6IElQb3N0TG9naW4pID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3Bvc3RMb2dpbicsIHBheWxvYWQpO1xuICBsb2dpbiA9IChwYXlsb2FkOiBJTG9naW4pID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ2xvZ2luJywgcGF5bG9hZCk7XG4gIGxvZ2luV2l0aE1mYSA9IChwYXlsb2FkOiBXaXRoQ2FsbGJhY2s8SUxvZ2luV2l0aE1mYT4pID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ2xvZ2luV2l0aE1mYScsIHBheWxvYWQpO1xuICByZWNvdmVyTWZhID0gKHBheWxvYWQ6IElSZWNvdmVyTUZBVG9rZW4pID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3JlY292ZXJNZmEnLCBwYXlsb2FkKTtcbiAgbG9nb3V0ID0gKGNhbGxiYWNrPzogKCkgPT4gdm9pZCkgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignbG9nb3V0JywgY2FsbGJhY2spO1xuICBzaWxlbnRMb2dvdXQgPSAoY2FsbGJhY2s/OiAoKSA9PiB2b2lkKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdzaWxlbnRMb2dvdXQnLCBjYWxsYmFjayk7XG4gIGNoZWNrSWZBbGxvd1RvUmVtZW1iZXJNZmFEZXZpY2UgPSAocGF5bG9hZDogeyBtZmFUb2tlbjogc3RyaW5nIH0pID0+XG4gICAgdGhpcy5kaXNwYXRjaEFjdGlvbignY2hlY2tJZkFsbG93VG9SZW1lbWJlck1mYURldmljZScsIHBheWxvYWQpO1xuXG4gIC8vIFNvY2lhbCBMb2dpbnMgQWN0aW9uc1xuICBzZXRTb2NpYWxMb2dpbnNTdGF0ZSA9IChzdGF0ZTogUGFydGlhbDxTb2NpYWxMb2dpblN0YXRlPikgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignc2V0U29jaWFsTG9naW5zU3RhdGUnLCBzdGF0ZSk7XG4gIHJlc2V0U29jaWFsTG9naW5zU3RhdGUgPSAoKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdyZXNldFNvY2lhbExvZ2luc1N0YXRlJyk7XG4gIGxvYWRTb2NpYWxMb2dpbnNDb25maWd1cmF0aW9uID0gKCkgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignbG9hZFNvY2lhbExvZ2luc0NvbmZpZ3VyYXRpb24nKTtcbiAgbG9naW5WaWFTb2NpYWxMb2dpbiA9IChwYXlsb2FkOiBJTG9naW5WaWFTb2NpYWxMb2dpbikgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignbG9naW5WaWFTb2NpYWxMb2dpbicsIHBheWxvYWQpO1xuICBzZXRTb2NpYWxMb2dpbkVycm9yID0gKHBheWxvYWQ6IElTZXRTb2NpYWxMb2dpbkVycm9yKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdzZXRTb2NpYWxMb2dpbkVycm9yJywgcGF5bG9hZCk7XG5cbiAgLy8gQWN0aXZhdGUgQWNjb3VudCBBY3Rpb25zXG4gIHNldEFjdGl2YXRlU3RhdGUgPSAoc3RhdGU6IFBhcnRpYWw8QWN0aXZhdGVBY2NvdW50U3RhdGU+KSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdzZXRBY3RpdmF0ZVN0YXRlJywgc3RhdGUpO1xuICByZXNldEFjdGl2YXRlU3RhdGUgPSAoKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdyZXNldEFjdGl2YXRlU3RhdGUnKTtcbiAgc2V0QWN0aXZhdGVTdHJhdGVneVN0YXRlID0gKHN0YXRlOiBQYXJ0aWFsPEFjdGl2YXRlQWNjb3VudFN0cmF0ZWd5U3RhdGU+KSA9PlxuICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3NldEFjdGl2YXRlU3RyYXRlZ3lTdGF0ZScsIHN0YXRlKTtcbiAgYWN0aXZhdGVBY2NvdW50ID0gKHBheWxvYWQ6IElBY3RpdmF0ZUFjY291bnQpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ2FjdGl2YXRlQWNjb3VudCcsIHBheWxvYWQpO1xuICByZXNlbmRBY3RpdmF0aW9uRW1haWwgPSAocGF5bG9hZDogSVJlc2VuZEFjdGl2YXRpb25FbWFpbCkgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbigncmVzZW5kQWN0aXZhdGlvbkVtYWlsJywgcGF5bG9hZCk7XG4gIGdldEFjdGl2YXRlQWNjb3VudFN0cmF0ZWd5ID0gKFxuICAgIHBheWxvYWQ6IFdpdGhDYWxsYmFjazxJR2V0QWN0aXZhdGVBY2NvdW50U3RyYXRlZ3ksIElHZXRBY3RpdmF0ZUFjY291bnRTdHJhdGVneVJlc3BvbnNlPixcbiAgKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdnZXRBY3RpdmF0ZUFjY291bnRTdHJhdGVneScsIHBheWxvYWQpO1xuXG4gIC8vIEFjY2VwdCBJbnZpdGF0aW9uIEFjdGlvbnNcbiAgc2V0QWNjZXB0SW52aXRhdGlvblN0YXRlID0gKHN0YXRlOiBQYXJ0aWFsPEFjY2VwdEludml0YXRpb25TdGF0ZT4pID0+XG4gICAgdGhpcy5kaXNwYXRjaEFjdGlvbignc2V0QWNjZXB0SW52aXRhdGlvblN0YXRlJywgc3RhdGUpO1xuICByZXNldEFjY2VwdEludml0YXRpb25TdGF0ZSA9ICgpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3Jlc2V0QWNjZXB0SW52aXRhdGlvblN0YXRlJyk7XG4gIGFjY2VwdEludml0YXRpb24gPSAocGF5bG9hZDogSUFjY2VwdEludml0YXRpb24pID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ2FjY2VwdEludml0YXRpb24nLCBwYXlsb2FkKTtcblxuICAvLyBGb3Jnb3QgUGFzc3dvcmQgQWN0aW9uc1xuICBzZXRGb3Jnb3RQYXNzd29yZFN0YXRlID0gKHN0YXRlOiBQYXJ0aWFsPEZvcmdvdFBhc3N3b3JkU3RhdGU+KSA9PlxuICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3NldEZvcmdvdFBhc3N3b3JkU3RhdGUnLCBzdGF0ZSk7XG4gIHJlc2V0Rm9yZ290UGFzc3dvcmRTdGF0ZSA9ICgpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3Jlc2V0Rm9yZ290UGFzc3dvcmRTdGF0ZScpO1xuICBmb3Jnb3RQYXNzd29yZCA9IChwYXlsb2FkOiBJRm9yZ290UGFzc3dvcmQpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ2ZvcmdvdFBhc3N3b3JkJywgcGF5bG9hZCk7XG4gIHJlc2V0UGFzc3dvcmQgPSAocGF5bG9hZDogSVJlc2V0UGFzc3dvcmQpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3Jlc2V0UGFzc3dvcmQnLCBwYXlsb2FkKTtcbiAgbG9hZFBhc3N3b3JkQ29uZmlnID0gKHBheWxvYWQ/OiBJR2V0VXNlclBhc3N3b3JkQ29uZmlnKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdsb2FkUGFzc3dvcmRDb25maWcnLCBwYXlsb2FkKTtcblxuICAvLyBTaWduIFVwIEFjdGlvbnNcbiAgc2V0U2lnblVwU3RhdGUgPSAoc3RhdGU6IFBhcnRpYWw8U2lnblVwU3RhdGU+KSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdzZXRTaWduVXBTdGF0ZScsIHN0YXRlKTtcbiAgcmVzZXRTaWduVXBTdGF0ZSA9ICgpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3Jlc2V0U2lnblVwU3RhdGUnKTtcbiAgc2lnblVwVXNlciA9IChwYXlsb2FkOiBJU2lnblVwVXNlcikgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignc2lnblVwVXNlcicsIHBheWxvYWQpO1xuICByZXNldFNpZ25VcFN0YXRlU29mdCA9ICgpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3Jlc2V0U2lnblVwU3RhdGVTb2Z0Jyk7XG5cbiAgLy8gUHJvZmlsZSBBY3Rpb25zXG4gIHNldFByb2ZpbGVTdGF0ZSA9IChzdGF0ZTogUGFydGlhbDxQcm9maWxlU3RhdGU+KSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdzZXRQcm9maWxlU3RhdGUnLCBzdGF0ZSk7XG4gIHJlc2V0UHJvZmlsZVN0YXRlID0gKCkgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbigncmVzZXRQcm9maWxlU3RhdGUnKTtcbiAgbG9hZFByb2ZpbGUgPSAoKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdsb2FkUHJvZmlsZScpO1xuICBzYXZlUHJvZmlsZSA9IChwYXlsb2FkOiBTYXZlUHJvZmlsZVBheWxvYWQpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3NhdmVQcm9maWxlJywgcGF5bG9hZCk7XG4gIGNoYW5nZVBhc3N3b3JkID0gKHBheWxvYWQ6IFdpdGhDYWxsYmFjazxJQ2hhbmdlUGFzc3dvcmQ+KSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdjaGFuZ2VQYXNzd29yZCcsIHBheWxvYWQpO1xuXG4gIC8vIFNTTyBhY3Rpb25zXG4gIHNldFNTT1N0YXRlID0gKHN0YXRlOiBQYXJ0aWFsPFNTT1N0YXRlPikgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignc2V0U1NPU3RhdGUnLCBzdGF0ZSk7XG4gIHJlc2V0U1NPU3RhdGUgPSAoKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdyZXNldFNTT1N0YXRlJyk7XG4gIGxvYWRTU09Db25maWd1cmF0aW9ucyA9ICgpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ2xvYWRTU09Db25maWd1cmF0aW9ucycpO1xuICBsb2FkU1NPQXV0aG9yaXphdGlvblJvbGVzID0gKCkgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignbG9hZFNTT0F1dGhvcml6YXRpb25Sb2xlcycpO1xuICBzYXZlU1NPQ29uZmlndXJhdGlvbnMgPSAocGF5bG9hZDogU2F2ZVNTT0NvbmZpZ3VyYXRpb25QYXlsb2FkKSA9PlxuICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3NhdmVTU09Db25maWd1cmF0aW9ucycsIHBheWxvYWQpO1xuICBzYXZlU1NPQ29uZmlndXJhdGlvbnNGaWxlID0gKHBheWxvYWQ6IEZpbGVbXSkgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignc2F2ZVNTT0NvbmZpZ3VyYXRpb25zRmlsZScsIHBheWxvYWQpO1xuICBzYXZlU1NPQ29uZmlndXJhdGlvbnNGaWxlV2l0aENhbGxiYWNrID0gKHBheWxvYWQ6IFNhdmVTU09Db25maWd1cmF0aW9uRmlsZVBheWxvYWQpID0+XG4gICAgdGhpcy5kaXNwYXRjaEFjdGlvbignc2F2ZVNTT0NvbmZpZ3VyYXRpb25zRmlsZVdpdGhDYWxsYmFjaycsIHBheWxvYWQpO1xuICB2YWxpZGF0ZVNTT0RvbWFpbiA9IChwYXlsb2FkPzogV2l0aENhbGxiYWNrKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCd2YWxpZGF0ZVNTT0RvbWFpbicsIHBheWxvYWQpO1xuICB1cGRhdGVTU09BdXRob3JpemF0aW9uUm9sZXMgPSAocGF5bG9hZDogVXBkYXRlU1NPQXV0aG9yaXphdGlvblJvbGVzUGF5bG9hZCkgPT5cbiAgICB0aGlzLmRpc3BhdGNoQWN0aW9uKCd1cGRhdGVTU09BdXRob3JpemF0aW9uUm9sZXMnLCBwYXlsb2FkKTtcbiAgZGVsZXRlU2FtbEdyb3VwID0gKHBheWxvYWQ6IERlbGV0ZVNhbWxHcm91cFBheWxvYWQpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ2RlbGV0ZVNhbWxHcm91cCcsIHBheWxvYWQpO1xuICBjcmVhdGVTYW1sR3JvdXAgPSAocGF5bG9hZDogQ3JlYXRlU2FtbEdyb3VwUGF5bG9hZCkgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignY3JlYXRlU2FtbEdyb3VwJywgcGF5bG9hZCk7XG4gIG9pZGNQb3N0bG9naW4gPSAocGF5bG9hZDogSU9pZGNQb3N0TG9naW4pID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ29pZGNQb3N0bG9naW4nLCBwYXlsb2FkKTtcblxuICAvLyBNZmEgYWN0aW9uc1xuICBzZXRNZmFTdGF0ZSA9IChzdGF0ZTogUGFydGlhbDxNRkFTdGF0ZT4pID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3NldE1mYVN0YXRlJywgc3RhdGUpO1xuICByZXNldE1mYVN0YXRlID0gKCkgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbigncmVzZXRNZmFTdGF0ZScpO1xuICBlbnJvbGxNZmEgPSAoKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdlbnJvbGxNZmEnKTtcbiAgdmVyaWZ5TWZhID0gKHBheWxvYWQ6IFdpdGhDYWxsYmFjazxJVmVyaWZ5TWZhLCBzdHJpbmcgfCB1bmRlZmluZWQ+KSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCd2ZXJpZnlNZmEnLCBwYXlsb2FkKTtcbiAgdmVyaWZ5TWZhQWZ0ZXJGb3JjZSA9IChwYXlsb2FkOiBXaXRoQ2FsbGJhY2s8SUxvZ2luV2l0aE1mYSwgc3RyaW5nIHwgdW5kZWZpbmVkPikgPT5cbiAgICB0aGlzLmRpc3BhdGNoQWN0aW9uKCd2ZXJpZnlNZmFBZnRlckZvcmNlJywgcGF5bG9hZCk7XG4gIGRpc2FibGVNZmEgPSAocGF5bG9hZDogV2l0aENhbGxiYWNrPElEaXNhYmxlTWZhPikgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignZGlzYWJsZU1mYScsIHBheWxvYWQpO1xuXG4gIC8vIFRlYW0gYWN0aW9uc1xuICBzZXRUZWFtTG9hZGVyID0gKHBheWxvYWQ6IFRlYW1TdGF0ZUluZGljYXRvcikgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignc2V0VGVhbUxvYWRlcicsIHBheWxvYWQpO1xuICBzZXRUZWFtRXJyb3IgPSAocGF5bG9hZDogVGVhbVN0YXRlSW5kaWNhdG9yKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdzZXRUZWFtRXJyb3InLCBwYXlsb2FkKTtcbiAgc2V0VGVhbVN0YXRlID0gKHBheWxvYWQ6IFBhcnRpYWw8VGVhbVN0YXRlPikgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignc2V0VGVhbVN0YXRlJywgcGF5bG9hZCk7XG4gIHJlc2V0VGVhbVN0YXRlID0gKCkgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbigncmVzZXRUZWFtU3RhdGUnKTtcbiAgbG9hZFVzZXJzID0gKHBheWxvYWQ6IFdpdGhDYWxsYmFjazxXaXRoU2lsZW50TG9hZDxJTG9hZFVzZXJzPiwgSVRlYW1Vc2VyW10+KSA9PlxuICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ2xvYWRVc2VycycsIHBheWxvYWQpO1xuICBsb2FkUm9sZXMgPSAocGF5bG9hZD86IExvYWRSb2xlc0FuZFBlcm1pc3Npb25zUGF5bG9hZCkgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignbG9hZFJvbGVzJywgcGF5bG9hZCk7XG4gIGFkZFVzZXIgPSAocGF5bG9hZDogV2l0aENhbGxiYWNrPElBZGRVc2VyLCBJVGVhbVVzZXI+KSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdhZGRVc2VyJywgcGF5bG9hZCk7XG4gIHVwZGF0ZVVzZXIgPSAocGF5bG9hZDogV2l0aENhbGxiYWNrPElVcGRhdGVVc2VyLCBJVGVhbVVzZXI+KSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCd1cGRhdGVVc2VyJywgcGF5bG9hZCk7XG4gIGRlbGV0ZVVzZXIgPSAocGF5bG9hZDogV2l0aENhbGxiYWNrPElEZWxldGVVc2VyPikgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignZGVsZXRlVXNlcicsIHBheWxvYWQpO1xuICByZXNlbmRBY3RpdmF0aW9uTGluayA9IChwYXlsb2FkOiBXaXRoQ2FsbGJhY2s8SVJlc2VuZEFjdGl2YXRpb25MaW5rPikgPT5cbiAgICB0aGlzLmRpc3BhdGNoQWN0aW9uKCdyZXNlbmRBY3RpdmF0aW9uTGluaycsIHBheWxvYWQpO1xuICByZXNlbmRJbnZpdGF0aW9uTGluayA9IChwYXlsb2FkOiBXaXRoQ2FsbGJhY2s8SVJlc2VuZEludml0YXRpb25MaW5rPikgPT5cbiAgICB0aGlzLmRpc3BhdGNoQWN0aW9uKCdyZXNlbmRJbnZpdGF0aW9uTGluaycsIHBheWxvYWQpO1xuICBvcGVuQWRkVXNlckRpYWxvZyA9IChwYXlsb2FkPzogSVNldEFkZFVzZXJEaWFsb2cpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ29wZW5BZGRVc2VyRGlhbG9nJywgcGF5bG9hZCk7XG4gIGNsb3NlQWRkVXNlckRpYWxvZyA9IChwYXlsb2FkPzogYW55KSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdjbG9zZUFkZFVzZXJEaWFsb2cnLCBwYXlsb2FkKTtcbiAgb3BlbkRlbGV0ZVVzZXJEaWFsb2cgPSAocGF5bG9hZD86IElTZXREZWxldGVVc2VyRGlhbG9nKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdvcGVuRGVsZXRlVXNlckRpYWxvZycsIHBheWxvYWQpO1xuICBjbG9zZURlbGV0ZVVzZXJEaWFsb2cgPSAocGF5bG9hZD86IGFueSkgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignY2xvc2VEZWxldGVVc2VyRGlhbG9nJywgcGF5bG9hZCk7XG5cbiAgLy8gQVBJIFRva2VuIEFjdGlvbnNcbiAgc2V0QXBpVG9rZW5zTG9hZGVyID0gKHBheWxvYWQ6IEFwaVN0YXRlSW5kaWNhdG9yKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdzZXRBcGlUb2tlbnNMb2FkZXInLCBwYXlsb2FkKTtcbiAgc2V0QXBpVG9rZW5zRXJyb3IgPSAocGF5bG9hZDogQXBpU3RhdGVJbmRpY2F0b3IpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3NldEFwaVRva2Vuc0Vycm9yJywgcGF5bG9hZCk7XG4gIHNldEFwaVRva2Vuc1N0YXRlID0gKHN0YXRlOiBQYXJ0aWFsPEFwaVRva2Vuc1N0YXRlPikgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignc2V0QXBpVG9rZW5zU3RhdGUnLCBzdGF0ZSk7XG4gIHJlc2V0QXBpVG9rZW5zU3RhdGUgPSAoKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdyZXNldEFwaVRva2Vuc1N0YXRlJyk7XG4gIGxvYWRBcGlUb2tlbnMgPSAocGF5bG9hZD86IFdpdGhTaWxlbnRMb2FkPFdpdGhDYWxsYmFjaz4pID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ2xvYWRBcGlUb2tlbnMnLCBwYXlsb2FkKTtcbiAgaW5pdEFwaVRva2Vuc0RhdGEgPSAocGF5bG9hZDogQXBpVG9rZW5UeXBlKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdpbml0QXBpVG9rZW5zRGF0YScsIHBheWxvYWQpO1xuICBhZGRUZW5hbnRBcGlUb2tlbiA9IChwYXlsb2FkOiBBZGRUZW5hbnRBcGlUb2tlblBheWxvYWQpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ2FkZFRlbmFudEFwaVRva2VuJywgcGF5bG9hZCk7XG4gIGFkZFVzZXJBcGlUb2tlbiA9IChwYXlsb2FkOiBBZGRVc2VyQXBpVG9rZW5QYXlsb2FkKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdhZGRVc2VyQXBpVG9rZW4nLCBwYXlsb2FkKTtcbiAgZGVsZXRlVXNlckFwaVRva2VuID0gKHBheWxvYWQ6IHN0cmluZykgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignZGVsZXRlVXNlckFwaVRva2VuJywgcGF5bG9hZCk7XG4gIGRlbGV0ZVRlbmFudEFwaVRva2VuID0gKHBheWxvYWQ6IHN0cmluZykgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignZGVsZXRlVGVuYW50QXBpVG9rZW4nLCBwYXlsb2FkKTtcblxuICAvLyBTZWN1cml0eSBQb2xpY3kgQWN0aW9uc1xuICBzZXRTZWN1cml0eVBvbGljeVN0YXRlID0gKHN0YXRlOiBQYXJ0aWFsPFNlY3VyaXR5UG9saWN5U3RhdGU+KSA9PlxuICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3NldFNlY3VyaXR5UG9saWN5U3RhdGUnLCBzdGF0ZSk7XG4gIHNldFNlY3VyaXR5UG9saWN5R2xvYmFsU3RhdGUgPSAoc3RhdGU6IFBhcnRpYWw8R2xvYmFsUG9saWN5U3RhdGU+KSA9PlxuICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3NldFNlY3VyaXR5UG9saWN5R2xvYmFsU3RhdGUnLCBzdGF0ZSk7XG4gIHNldFNlY3VyaXR5UG9saWN5UHVibGljU3RhdGUgPSAoc3RhdGU6IFBhcnRpYWw8UHVibGljUG9saWN5U3RhdGU+KSA9PlxuICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3NldFNlY3VyaXR5UG9saWN5UHVibGljU3RhdGUnLCBzdGF0ZSk7XG4gIHNldFNlY3VyaXR5UG9saWN5TWZhU3RhdGUgPSAoc3RhdGU6IFBhcnRpYWw8TWZhUG9saWN5U3RhdGU+KSA9PlxuICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3NldFNlY3VyaXR5UG9saWN5TWZhU3RhdGUnLCBzdGF0ZSk7XG4gIHNldFNlY3VyaXR5UG9saWN5TG9ja291dFN0YXRlID0gKHN0YXRlOiBQYXJ0aWFsPExvY2tvdXRQb2xpY3lTdGF0ZT4pID0+XG4gICAgdGhpcy5kaXNwYXRjaEFjdGlvbignc2V0U2VjdXJpdHlQb2xpY3lMb2Nrb3V0U3RhdGUnLCBzdGF0ZSk7XG4gIHNldFNlY3VyaXR5UG9saWN5Q2FwdGNoYVN0YXRlID0gKHN0YXRlOiBQYXJ0aWFsPENhcHRjaGFQb2xpY3lTdGF0ZT4pID0+XG4gICAgdGhpcy5kaXNwYXRjaEFjdGlvbignc2V0U2VjdXJpdHlQb2xpY3lDYXB0Y2hhU3RhdGUnLCBzdGF0ZSk7XG4gIHNldFNlY3VyaXR5UG9saWN5UGFzc3dvcmRIaXN0b3J5U3RhdGUgPSAoc3RhdGU6IFBhcnRpYWw8UGFzc3dvcmRIaXN0b3J5UG9saWN5U3RhdGU+KSA9PlxuICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3NldFNlY3VyaXR5UG9saWN5UGFzc3dvcmRIaXN0b3J5U3RhdGUnLCBzdGF0ZSk7XG4gIHJlc2V0U2VjdXJpdHlQb2xpY3lTdGF0ZSA9ICgpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3Jlc2V0U2VjdXJpdHlQb2xpY3lTdGF0ZScpO1xuICBzZXRTZWN1cml0eVBvbGljeVBhc3N3b3JkU3RhdGUgPSAoc3RhdGU6IFBhcnRpYWw8UGFzc3dvcmRQb2xpY3lTdGF0ZT4pID0+XG4gICAgdGhpcy5kaXNwYXRjaEFjdGlvbignc2V0U2VjdXJpdHlQb2xpY3lQYXNzd29yZFN0YXRlJywgc3RhdGUpO1xuICBsb2FkU2VjdXJpdHlQb2xpY3kgPSAoKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdsb2FkU2VjdXJpdHlQb2xpY3knKTtcbiAgbG9hZFB1YmxpY1NlY3VyaXR5UG9saWN5ID0gKCkgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignbG9hZFB1YmxpY1NlY3VyaXR5UG9saWN5Jyk7XG4gIGxvYWRWZW5kb3JQYXNzd29yZENvbmZpZyA9ICgpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ2xvYWRWZW5kb3JQYXNzd29yZENvbmZpZycpO1xuICBsb2FkU2VjdXJpdHlQb2xpY3lNZmEgPSAoKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdsb2FkU2VjdXJpdHlQb2xpY3lNZmEnKTtcbiAgc2F2ZVNlY3VyaXR5UG9saWN5TWZhID0gKHBheWxvYWQ6IFNhdmVTZWN1cml0eVBvbGljeU1mYVBheWxvYWQpID0+XG4gICAgdGhpcy5kaXNwYXRjaEFjdGlvbignc2F2ZVNlY3VyaXR5UG9saWN5TWZhJywgcGF5bG9hZCk7XG4gIGxvYWRTZWN1cml0eVBvbGljeUxvY2tvdXQgPSAoKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdsb2FkU2VjdXJpdHlQb2xpY3lMb2Nrb3V0Jyk7XG4gIHNhdmVTZWN1cml0eVBvbGljeUxvY2tvdXQgPSAocGF5bG9hZDogU2F2ZVNlY3VyaXR5UG9saWN5TG9ja291dFBheWxvYWQpID0+XG4gICAgdGhpcy5kaXNwYXRjaEFjdGlvbignc2F2ZVNlY3VyaXR5UG9saWN5TG9ja291dCcsIHBheWxvYWQpO1xuICBsb2FkU2VjdXJpdHlQb2xpY3lDYXB0Y2hhID0gKCkgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignbG9hZFNlY3VyaXR5UG9saWN5Q2FwdGNoYScpO1xuICBsb2FkU2VjdXJpdHlQb2xpY3lQYXNzd29yZEhpc3RvcnkgPSAoKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdsb2FkU2VjdXJpdHlQb2xpY3lQYXNzd29yZEhpc3RvcnknKTtcbiAgc2F2ZVNlY3VyaXR5UG9saWN5UGFzc3dvcmRIaXN0b3J5ID0gKHBheWxvYWQ6IFNhdmVTZWN1cml0eVBvbGljeVBhc3N3b3JkSGlzdG9yeVBheWxvYWQpID0+XG4gICAgdGhpcy5kaXNwYXRjaEFjdGlvbignc2F2ZVNlY3VyaXR5UG9saWN5UGFzc3dvcmRIaXN0b3J5JywgcGF5bG9hZCk7XG5cbiAgLy8gQWNjb3VudCBTZXR0aW5ncyBBY3Rpb25zXG4gIHNldEFjY291bnRTZXR0aW5nc1N0YXRlID0gKHN0YXRlOiBQYXJ0aWFsPEFjY291bnRTZXR0aW5nc1N0YXRlPikgPT5cbiAgICB0aGlzLmRpc3BhdGNoQWN0aW9uKCdzZXRBY2NvdW50U2V0dGluZ3NTdGF0ZScsIHN0YXRlKTtcbiAgcmVzZXRBY2NvdW50U2V0dGluZ3NTdGF0ZSA9ICgpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3Jlc2V0QWNjb3VudFNldHRpbmdzU3RhdGUnKTtcbiAgbG9hZEFjY291bnRTZXR0aW5ncyA9IChwYXlsb2FkPzogV2l0aENhbGxiYWNrPFdpdGhTaWxlbnRMb2FkPHt9Pj4pID0+XG4gICAgdGhpcy5kaXNwYXRjaEFjdGlvbignbG9hZEFjY291bnRTZXR0aW5ncycsIHBheWxvYWQpO1xuICBzYXZlQWNjb3VudFNldHRpbmdzID0gKHBheWxvYWQ6IFdpdGhDYWxsYmFjazxJU2V0dGluZ3NSZXNwb25zZSwgSVNldHRpbmdzUmVzcG9uc2U+KSA9PlxuICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3NhdmVBY2NvdW50U2V0dGluZ3MnLCBwYXlsb2FkKTtcblxuICAvLyBUZW5hbnRzIEFjdGlvbnNcbiAgc2V0VGVuYW50c1N0YXRlID0gKHN0YXRlOiBQYXJ0aWFsPFRlbmFudHNTdGF0ZT4pID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3NldFRlbmFudHNTdGF0ZScsIHN0YXRlKTtcbiAgcmVzZXRUZW5hbnRzU3RhdGUgPSAoKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdyZXNldFRlbmFudHNTdGF0ZScpO1xuICBzd2l0Y2hUZW5hbnQgPSAocGF5bG9hZDogV2l0aENhbGxiYWNrPElTd2l0Y2hUZW5hbnQ+KSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdzd2l0Y2hUZW5hbnQnLCBwYXlsb2FkKTtcbiAgbG9hZFRlbmFudHMgPSAocGF5bG9hZD86IFdpdGhDYWxsYmFjazx7fSwgSVRlbmFudHNSZXNwb25zZVtdPikgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignbG9hZFRlbmFudHMnLCBwYXlsb2FkKTtcblxuICAvLyBSb2xlcyBBY3Rpb25zXG4gIHNldFJvbGVzU3RhdGUgPSAoc3RhdGU6IFJvbGVzU3RhdGUpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3NldFJvbGVzU3RhdGUnLCBzdGF0ZSk7XG4gIHJlc2V0Um9sZXNTdGF0ZSA9ICgpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3Jlc2V0Um9sZXNTdGF0ZScpO1xuICBsb2FkUm9sZXNBbmRQZXJtaXNzaW9ucyA9IChwYXlsb2FkPzogV2l0aFNpbGVudExvYWQ8e30+KSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdsb2FkUm9sZXNBbmRQZXJtaXNzaW9ucycsIHBheWxvYWQpO1xuICBhZGRSb2xlID0gKHBheWxvYWQ6IFdpdGhDYWxsYmFjazxJQWRkUm9sZSwgSVJvbGU+KSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdhZGRSb2xlJywgcGF5bG9hZCk7XG4gIHVwZGF0ZVJvbGUgPSAocGF5bG9hZDogV2l0aENhbGxiYWNrPElVcGRhdGVSb2xlLCBJUm9sZT4pID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3VwZGF0ZVJvbGUnLCBwYXlsb2FkKTtcbiAgZGVsZXRlUm9sZSA9IChwYXlsb2FkOiBXaXRoQ2FsbGJhY2s8SURlbGV0ZVJvbGU+KSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdkZWxldGVSb2xlJywgcGF5bG9hZCk7XG4gIGF0dGFjaFBlcm1pc3Npb25zVG9Sb2xlID0gKHBheWxvYWQ6IFdpdGhDYWxsYmFjazxJQXR0YWNoUGVybWlzc2lvbnNUb1JvbGUsIElSb2xlPikgPT5cbiAgICB0aGlzLmRpc3BhdGNoQWN0aW9uKCdhdHRhY2hQZXJtaXNzaW9uc1RvUm9sZScsIHBheWxvYWQpO1xuXG4gIGF0dGFjaFBlcm1pc3Npb25Ub1JvbGVzID0gKFxuICAgIHBheWxvYWQ6IFdpdGhDYWxsYmFjazx7XG4gICAgICBwZXJtaXNzaW9uSWQ6IHN0cmluZztcbiAgICAgIHJvbGVJZHM6IHN0cmluZ1tdO1xuICAgIH0sXG4gICAgICBJUm9sZVBlcm1pc3Npb24+LFxuICApID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ2F0dGFjaFBlcm1pc3Npb25Ub1JvbGVzJywgcGF5bG9hZCk7XG59XG4iXX0=
320
+ }], ctorParameters: function () { return [{ type: i1.FronteggAppService }, { type: i2.Router }]; } });
321
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbnRlZ2ctYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZnJvbnRlZ2ctYXBwL3NyYy9saWIvZnJvbnRlZ2ctYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2QyxPQUFPLGFBQWEsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBdUNMLGFBQWEsR0FHZCxNQUFNLHVCQUF1QixDQUFDOzs7O0FBNEQvQixNQUFNLE9BQU8sbUJBQW1CO0lBOEg5QixZQUFvQixrQkFBc0MsRUFBVSxNQUFjO1FBQTlELHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBN0gxRSxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBWSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBZSxDQUFDLENBQUM7UUFDNUcsaUNBQTRCLEdBQUcsSUFBSSxlQUFlLENBQXFDLEVBQXdDLENBQUMsQ0FBQztRQUNqSSxnQ0FBMkIsR0FBRyxJQUFJLGVBQWUsQ0FBb0MsRUFBdUMsQ0FBQyxDQUFDO1FBQzlILHlCQUFvQixHQUFHLElBQUksZUFBZSxDQUE2QixFQUFnQyxDQUFDLENBQUM7UUFDekcsMEJBQXFCLEdBQUcsSUFBSSxlQUFlLENBQThCLEVBQWlDLENBQUMsQ0FBQztRQUM1RywrQkFBMEIsR0FBRyxJQUFJLGVBQWUsQ0FBbUMsRUFBc0MsQ0FBQyxDQUFDO1FBQzNILHNCQUFpQixHQUFHLElBQUksZUFBZSxDQUEwQixFQUE2QixDQUFDLENBQUM7UUFDaEcsb0JBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBd0IsRUFBMkIsQ0FBQyxDQUFDO1FBQzFGLHdCQUFtQixHQUFHLElB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RSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRnJvbnRlZ2dBcHBTZXJ2aWNlIH0gZnJvbSAnLi9mcm9udGVnZy1hcHAuc2VydmljZSc7XG5pbXBvcnQgRmFzdERlZXBFcXVhbCBmcm9tICdmYXN0LWRlZXAtZXF1YWwnO1xuaW1wb3J0IHtcbiAgUm9sZXNTdGF0ZSxcbiAgVGVuYW50c1N0YXRlLFxuICBBY2NvdW50U2V0dGluZ3NTdGF0ZSxcbiAgU2F2ZVNlY3VyaXR5UG9saWN5UGFzc3dvcmRIaXN0b3J5UGF5bG9hZCxcbiAgU2F2ZVNlY3VyaXR5UG9saWN5TG9ja291dFBheWxvYWQsXG4gIFNhdmVTZWN1cml0eVBvbGljeU1mYVBheWxvYWQsXG4gIFBhc3N3b3JkUG9saWN5U3RhdGUsXG4gIFBhc3N3b3JkSGlzdG9yeVBvbGljeVN0YXRlLFxuICBNZmFQb2xpY3lTdGF0ZSxcbiAgQ2FwdGNoYVBvbGljeVN0YXRlLFxuICBMb2Nrb3V0UG9saWN5U3RhdGUsXG4gIFB1YmxpY1BvbGljeVN0YXRlLFxuICBHbG9iYWxQb2xpY3lTdGF0ZSxcbiAgU2VjdXJpdHlQb2xpY3lTdGF0ZSxcbiAgQWRkVXNlckFwaVRva2VuUGF5bG9hZCxcbiAgQWRkVGVuYW50QXBpVG9rZW5QYXlsb2FkLFxuICBBcGlUb2tlblR5cGUsXG4gIEFwaVRva2Vuc1N0YXRlLFxuICBBcGlTdGF0ZUluZGljYXRvcixcbiAgSVNldERlbGV0ZVVzZXJEaWFsb2csXG4gIElTZXRBZGRVc2VyRGlhbG9nLFxuICBMb2FkUm9sZXNBbmRQZXJtaXNzaW9uc1BheWxvYWQsXG4gIFRlYW1TdGF0ZSxcbiAgVGVhbVN0YXRlSW5kaWNhdG9yLFxuICBNRkFTdGF0ZSxcbiAgU2F2ZVNTT0NvbmZpZ3VyYXRpb25QYXlsb2FkLFxuICBTU09TdGF0ZSxcbiAgUHJvZmlsZVN0YXRlLFxuICBTYXZlU1NPQ29uZmlndXJhdGlvbkZpbGVQYXlsb2FkLFxuICBVcGRhdGVTU09BdXRob3JpemF0aW9uUm9sZXNQYXlsb2FkLFxuICBEZWxldGVTYW1sR3JvdXBQYXlsb2FkLFxuICBDcmVhdGVTYW1sR3JvdXBQYXlsb2FkLFxuICBTYXZlUHJvZmlsZVBheWxvYWQsXG4gIFNpZ25VcFN0YXRlLFxuICBGb3Jnb3RQYXNzd29yZFN0YXRlLFxuICBBY2NlcHRJbnZpdGF0aW9uU3RhdGUsXG4gIEF1dGhTdGF0ZSxcbiAgVXNlcixcbiAgYXV0aFN0b3JlTmFtZSxcbiAgTG9naW5TdGF0ZSxcbiAgQWN0aXZhdGVBY2NvdW50U3RyYXRlZ3lTdGF0ZSxcbn0gZnJvbSAnQGZyb250ZWdnL3JlZHV4LXN0b3JlJztcbmltcG9ydCB7XG4gIElMb2dpbixcbiAgSUxvZ2luV2l0aE1mYSxcbiAgSVBvc3RMb2dpbixcbiAgSVByZUxvZ2luLFxuICBJUmVjb3Zlck1GQVRva2VuLFxuICBJQWN0aXZhdGVBY2NvdW50LFxuICBJTG9naW5WaWFTb2NpYWxMb2dpbixcbiAgSVNldFNvY2lhbExvZ2luRXJyb3IsXG4gIElSZXNlbmRBY3RpdmF0aW9uRW1haWwsXG4gIElHZXRBY3RpdmF0ZUFjY291bnRTdHJhdGVneSxcbiAgSUdldEFjdGl2YXRlQWNjb3VudFN0cmF0ZWd5UmVzcG9uc2UsXG4gIElBY2NlcHRJbnZpdGF0aW9uLFxuICBJRm9yZ290UGFzc3dvcmQsXG4gIElSZXNldFBhc3N3b3JkLFxuICBJR2V0VXNlclBhc3N3b3JkQ29uZmlnLFxuICBJU2lnblVwVXNlcixcbiAgSUNoYW5nZVBhc3N3b3JkLFxuICBJT2lkY1Bvc3RMb2dpbixcbiAgSVZlcmlmeU1mYSxcbiAgSURpc2FibGVNZmEsXG4gIElMb2FkVXNlcnMsXG4gIElUZWFtVXNlcixcbiAgSUFkZFVzZXIsXG4gIElVcGRhdGVVc2VyLFxuICBJRGVsZXRlVXNlcixcbiAgSVJlc2VuZEFjdGl2YXRpb25MaW5rLFxuICBJU2V0dGluZ3NSZXNwb25zZSxcbiAgSVN3aXRjaFRlbmFudCxcbiAgSVRlbmFudHNSZXNwb25zZSxcbiAgSUFkZFJvbGUsXG4gIElSb2xlLFxuICBJVXBkYXRlUm9sZSxcbiAgSURlbGV0ZVJvbGUsXG4gIElBdHRhY2hQZXJtaXNzaW9uc1RvUm9sZSxcbiAgSVJlc2VuZEludml0YXRpb25MaW5rLFxuICBJUm9sZVBlcm1pc3Npb24sXG59IGZyb20gJ0Bmcm9udGVnZy9yZXN0LWFwaSc7XG5pbXBvcnQgdHlwZSB7IEZyb250ZWdnU3RhdGUsIEFjdGl2YXRlQWNjb3VudFN0YXRlLCBTb2NpYWxMb2dpblN0YXRlIH0gZnJvbSAnQGZyb250ZWdnL3JlZHV4LXN0b3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBMb2dpbkRpcmVjdEFjdGlvbiB9IGZyb20gJ0Bmcm9udGVnZy9yZWR1eC1zdG9yZS9hdXRoL0xvZ2luU3RhdGUvaW50ZXJmYWNlcyc7XG5cbmludGVyZmFjZSBBdXRoU3ViU3RhdGVzIHtcbiAgZmllbGQ6IFBhcnRpYWw8a2V5b2YgQXV0aFN0YXRlPjtcbiAgc3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGFueT47XG59XG5cbmV4cG9ydCB0eXBlIFdpdGhDYWxsYmFjazxUID0ge30sIFIgPSBib29sZWFuPiA9IFQgJiB7XG4gIGNhbGxiYWNrPzogKGRhdGE6IFIgfCBudWxsLCBlcnJvcj86IHN0cmluZykgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCB0eXBlIFdpdGhTaWxlbnRMb2FkPFQ+ID0gVCAmIHtcbiAgc2lsZW50TG9hZGluZz86IGJvb2xlYW47XG59O1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgRnJvbnRlZ2dBdXRoU2VydmljZSB7XG4gIHByaXZhdGUgYXV0aFN0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXV0aFN0YXRlPih7IGlzQXV0aGVudGljYXRlZDogZmFsc2UsIGlzTG9hZGluZzogdHJ1ZSB9IGFzIEF1dGhTdGF0ZSk7XG4gIHByaXZhdGUgYWNjZXB0SW52aXRhdGlvblN0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXV0aFN0YXRlWydhY2NlcHRJbnZpdGF0aW9uU3RhdGUnXT4oe30gYXMgQXV0aFN0YXRlWydhY2NlcHRJbnZpdGF0aW9uU3RhdGUnXSk7XG4gIHByaXZhdGUgYWNjb3VudFNldHRpbmdzU3RhdGVTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBdXRoU3RhdGVbJ2FjY291bnRTZXR0aW5nc1N0YXRlJ10+KHt9IGFzIEF1dGhTdGF0ZVsnYWNjb3VudFNldHRpbmdzU3RhdGUnXSk7XG4gIHByaXZhdGUgYWN0aXZhdGVTdGF0ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF1dGhTdGF0ZVsnYWN0aXZhdGVTdGF0ZSddPih7fSBhcyBBdXRoU3RhdGVbJ2FjdGl2YXRlU3RhdGUnXSk7XG4gIHByaXZhdGUgYXBpVG9rZW5zU3RhdGVTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBdXRoU3RhdGVbJ2FwaVRva2Vuc1N0YXRlJ10+KHt9IGFzIEF1dGhTdGF0ZVsnYXBpVG9rZW5zU3RhdGUnXSk7XG4gIHByaXZhdGUgZm9yZ290UGFzc3dvcmRTdGF0ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF1dGhTdGF0ZVsnZm9yZ290UGFzc3dvcmRTdGF0ZSddPih7fSBhcyBBdXRoU3RhdGVbJ2ZvcmdvdFBhc3N3b3JkU3RhdGUnXSk7XG4gIHByaXZhdGUgbG9naW5TdGF0ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF1dGhTdGF0ZVsnbG9naW5TdGF0ZSddPih7fSBhcyBBdXRoU3RhdGVbJ2xvZ2luU3RhdGUnXSk7XG4gIHByaXZhdGUgbWZhU3RhdGVTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBdXRoU3RhdGVbJ21mYVN0YXRlJ10+KHt9IGFzIEF1dGhTdGF0ZVsnbWZhU3RhdGUnXSk7XG4gIHByaXZhdGUgcHJvZmlsZVN0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXV0aFN0YXRlWydwcm9maWxlU3RhdGUnXT4oe30gYXMgQXV0aFN0YXRlWydwcm9maWxlU3RhdGUnXSk7XG4gIHByaXZhdGUgcm9sZXNTdGF0ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF1dGhTdGF0ZVsncm9sZXNTdGF0ZSddPih7fSBhcyBBdXRoU3RhdGVbJ3JvbGVzU3RhdGUnXSk7XG4gIHByaXZhdGUgcm91dGVzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXV0aFN0YXRlWydyb3V0ZXMnXT4oe30gYXMgQXV0aFN0YXRlWydyb3V0ZXMnXSk7XG4gIHByaXZhdGUgc2VjdXJpdHlQb2xpY3lTdGF0ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF1dGhTdGF0ZVsnc2VjdXJpdHlQb2xpY3lTdGF0ZSddPih7fSBhcyBBdXRoU3RhdGVbJ3NlY3VyaXR5UG9saWN5U3RhdGUnXSk7XG4gIHByaXZhdGUgc2lnblVwU3RhdGVTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBdXRoU3RhdGVbJ3NpZ25VcFN0YXRlJ10+KHt9IGFzIEF1dGhTdGF0ZVsnc2lnblVwU3RhdGUnXSk7XG4gIHByaXZhdGUgc29jaWFsTG9naW5TdGF0ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF1dGhTdGF0ZVsnc29jaWFsTG9naW5TdGF0ZSddPih7fSBhcyBBdXRoU3RhdGVbJ3NvY2lhbExvZ2luU3RhdGUnXSk7XG4gIHByaXZhdGUgc3NvU3RhdGVTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBdXRoU3RhdGVbJ3Nzb1N0YXRlJ10+KHt9IGFzIEF1dGhTdGF0ZVsnc3NvU3RhdGUnXSk7XG4gIHByaXZhdGUgdGVhbVN0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXV0aFN0YXRlWyd0ZWFtU3RhdGUnXT4oe30gYXMgQXV0aFN0YXRlWyd0ZWFtU3RhdGUnXSk7XG4gIHByaXZhdGUgdGVuYW50c1N0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXV0aFN0YXRlWyd0ZW5hbnRzU3RhdGUnXT4oe30gYXMgQXV0aFN0YXRlWyd0ZW5hbnRzU3RhdGUnXSk7XG4gIHByaXZhdGUgdXNlclN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF1dGhTdGF0ZVsndXNlciddPih7fSBhcyBBdXRoU3RhdGVbJ3VzZXInXSk7XG4gIHByaXZhdGUgaXNBdXRoZW50aWNhdGVkU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXV0aFN0YXRlWydpc0F1dGhlbnRpY2F0ZWQnXT4oZmFsc2UpO1xuICBwcml2YXRlIGlzTG9hZGluZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF1dGhTdGF0ZVsnaXNMb2FkaW5nJ10+KHRydWUpO1xuICBwcml2YXRlIGlzU1NPQXV0aFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF1dGhTdGF0ZVsnaXNTU09BdXRoJ10+KGZhbHNlKTtcbiAgcHJpdmF0ZSBzc29BQ1NTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBdXRoU3RhdGVbJ3Nzb0FDUyddPignJyk7XG5cblxuICBnZXRBdXRoU3RhdGUoKTogQXV0aFN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5mcm9udGVnZ0FwcFNlcnZpY2UuZnJvbnRlZ2dBcHAuc3RvcmUuZ2V0U3RhdGUoKS5hdXRoO1xuICB9XG5cbiAgZ2V0IGF1dGhTdGF0ZSQoKTogT2JzZXJ2YWJsZTxBdXRoU3RhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5hdXRoU3RhdGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IGFjY2VwdEludml0YXRpb25TdGF0ZSQoKTogT2JzZXJ2YWJsZTxBdXRoU3RhdGVbJ2FjY2VwdEludml0YXRpb25TdGF0ZSddPiB7XG4gICAgcmV0dXJuIHRoaXMuYWNjZXB0SW52aXRhdGlvblN0YXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCBhY2NvdW50U2V0dGluZ3NTdGF0ZSQoKTogT2JzZXJ2YWJsZTxBdXRoU3RhdGVbJ2FjY291bnRTZXR0aW5nc1N0YXRlJ10+IHtcbiAgICByZXR1cm4gdGhpcy5hY2NvdW50U2V0dGluZ3NTdGF0ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgYWN0aXZhdGVTdGF0ZSQoKTogT2JzZXJ2YWJsZTxBdXRoU3RhdGVbJ2FjdGl2YXRlU3RhdGUnXT4ge1xuICAgIHJldHVybiB0aGlzLmFjdGl2YXRlU3RhdGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IGFwaVRva2Vuc1N0YXRlJCgpOiBPYnNlcnZhYmxlPEF1dGhTdGF0ZVsnYXBpVG9rZW5zU3RhdGUnXT4ge1xuICAgIHJldHVybiB0aGlzLmFwaVRva2Vuc1N0YXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCBmb3Jnb3RQYXNzd29yZFN0YXRlJCgpOiBPYnNlcnZhYmxlPEF1dGhTdGF0ZVsnZm9yZ290UGFzc3dvcmRTdGF0ZSddPiB7XG4gICAgcmV0dXJuIHRoaXMuZm9yZ290UGFzc3dvcmRTdGF0ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgbG9naW5TdGF0ZSQoKTogT2JzZXJ2YWJsZTxBdXRoU3RhdGVbJ2xvZ2luU3RhdGUnXT4ge1xuICAgIHJldHVybiB0aGlzLmxvZ2luU3RhdGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IG1mYVN0YXRlJCgpOiBPYnNlcnZhYmxlPEF1dGhTdGF0ZVsnbWZhU3RhdGUnXT4ge1xuICAgIHJldHVybiB0aGlzLm1mYVN0YXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCBwcm9maWxlU3RhdGUkKCk6IE9ic2VydmFibGU8QXV0aFN0YXRlWydwcm9maWxlU3RhdGUnXT4ge1xuICAgIHJldHVybiB0aGlzLnByb2ZpbGVTdGF0ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgcm9sZXNTdGF0ZSQoKTogT2JzZXJ2YWJsZTxBdXRoU3RhdGVbJ3JvbGVzU3RhdGUnXT4ge1xuICAgIHJldHVybiB0aGlzLnJvbGVzU3RhdGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IHJvdXRlc1N0YXRlJCgpOiBPYnNlcnZhYmxlPEF1dGhTdGF0ZVsncm91dGVzJ10+IHtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IHNlY3VyaXR5UG9saWN5U3RhdGUkKCk6IE9ic2VydmFibGU8QXV0aFN0YXRlWydzZWN1cml0eVBvbGljeVN0YXRlJ10+IHtcbiAgICByZXR1cm4gdGhpcy5zZWN1cml0eVBvbGljeVN0YXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCBzaWduVXBTdGF0ZSQoKTogT2JzZXJ2YWJsZTxBdXRoU3RhdGVbJ3NpZ25VcFN0YXRlJ10+IHtcbiAgICByZXR1cm4gdGhpcy5zaWduVXBTdGF0ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgc29jaWFsTG9naW5TdGF0ZSQoKTogT2JzZXJ2YWJsZTxBdXRoU3RhdGVbJ3NvY2lhbExvZ2luU3RhdGUnXT4ge1xuICAgIHJldHVybiB0aGlzLnNvY2lhbExvZ2luU3RhdGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IHNzb1N0YXRlJCgpOiBPYnNlcnZhYmxlPEF1dGhTdGF0ZVsnc3NvU3RhdGUnXT4ge1xuICAgIHJldHVybiB0aGlzLnNzb1N0YXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCB0ZWFtU3RhdGUkKCk6IE9ic2VydmFibGU8QXV0aFN0YXRlWyd0ZWFtU3RhdGUnXT4ge1xuICAgIHJldHVybiB0aGlzLnRlYW1TdGF0ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgdGVuYW50c1N0YXRlJCgpOiBPYnNlcnZhYmxlPEF1dGhTdGF0ZVsndGVuYW50c1N0YXRlJ10+IHtcbiAgICByZXR1cm4gdGhpcy50ZW5hbnRzU3RhdGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IHVzZXIkKCk6IE9ic2VydmFibGU8QXV0aFN0YXRlWyd1c2VyJ10+IHtcbiAgICByZXR1cm4gdGhpcy51c2VyU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCB1c2VyKCk6IEF1dGhTdGF0ZVsndXNlciddIHtcbiAgICByZXR1cm4gdGhpcy5mcm9udGVnZ0FwcFNlcnZpY2UuZnJvbnRlZ2dBcHAuc3RvcmUuZ2V0U3RhdGUoKS5hdXRoLnVzZXI7XG4gIH1cblxuXG4gIGdldCBpc0F1dGhlbnRpY2F0ZWQkKCk6IE9ic2VydmFibGU8QXV0aFN0YXRlWydpc0F1dGhlbnRpY2F0ZWQnXT4ge1xuICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgaXNBdXRoZW50aWNhdGVkKCk6IEF1dGhTdGF0ZVsnaXNBdXRoZW50aWNhdGVkJ10ge1xuICAgIHJldHVybiB0aGlzLmZyb250ZWdnQXBwU2VydmljZS5mcm9udGVnZ0FwcC5zdG9yZS5nZXRTdGF0ZSgpLmF1dGguaXNBdXRoZW50aWNhdGVkO1xuICB9XG5cbiAgZ2V0IGlzTG9hZGluZyQoKTogT2JzZXJ2YWJsZTxBdXRoU3RhdGVbJ2lzTG9hZGluZyddPiB7XG4gICAgcmV0dXJuIHRoaXMuaXNMb2FkaW5nU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCBpc1NTT0F1dGgkKCk6IE9ic2VydmFibGU8QXV0aFN0YXRlWydpc1NTT0F1dGgnXT4ge1xuICAgIHJldHVybiB0aGlzLmlzU1NPQXV0aFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgc3NvQUNTJCgpOiBPYnNlcnZhYmxlPEF1dGhTdGF0ZVsnc3NvQUNTJ10+IHtcbiAgICByZXR1cm4gdGhpcy5zc29BQ1NTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmcm9udGVnZ0FwcFNlcnZpY2U6IEZyb250ZWdnQXBwU2VydmljZSwgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikge1xuICAgIGNvbnN0IGF1dGhTdWJTdGF0ZXM6IEF1dGhTdWJTdGF0ZXNbXSA9IFtcbiAgICAgIHsgZmllbGQ6ICdhY2NlcHRJbnZpdGF0aW9uU3RhdGUnLCBzdWJqZWN0OiB0aGlzLmFjY2VwdEludml0YXRpb25TdGF0ZVN1YmplY3QgfSxcbiAgICAgIHsgZmllbGQ6ICdhY2NvdW50U2V0dGluZ3NTdGF0ZScsIHN1YmplY3Q6IHRoaXMuYWNjb3VudFNldHRpbmdzU3RhdGVTdWJqZWN0IH0sXG4gICAgICB7IGZpZWxkOiAnYWN0aXZhdGVTdGF0ZScsIHN1YmplY3Q6IHRoaXMuYWN0aXZhdGVTdGF0ZVN1YmplY3QgfSxcbiAgICAgIHsgZmllbGQ6ICdhcGlUb2tlbnNTdGF0ZScsIHN1YmplY3Q6IHRoaXMuYXBpVG9rZW5zU3RhdGVTdWJqZWN0IH0sXG4gICAgICB7IGZpZWxkOiAnZm9yZ290UGFzc3dvcmRTdGF0ZScsIHN1YmplY3Q6IHRoaXMuZm9yZ290UGFzc3dvcmRTdGF0ZVN1YmplY3QgfSxcbiAgICAgIHsgZmllbGQ6ICd0ZW5hbnRzU3RhdGUnLCBzdWJqZWN0OiB0aGlzLnRlbmFudHNTdGF0ZVN1YmplY3QgfSxcbiAgICAgIHsgZmllbGQ6ICdsb2dpblN0YXRlJywgc3ViamVjdDogdGhpcy5sb2dpblN0YXRlU3ViamVjdCB9LFxuICAgICAgeyBmaWVsZDogJ21mYVN0YXRlJywgc3ViamVjdDogdGhpcy5tZmFTdGF0ZVN1YmplY3QgfSxcbiAgICAgIHsgZmllbGQ6ICdwcm9maWxlU3RhdGUnLCBzdWJqZWN0OiB0aGlzLnByb2ZpbGVTdGF0ZVN1YmplY3QgfSxcbiAgICAgIHsgZmllbGQ6ICdyb2xlc1N0YXRlJywgc3ViamVjdDogdGhpcy5yb2xlc1N0YXRlU3ViamVjdCB9LFxuICAgICAgeyBmaWVsZDogJ3JvdXRlcycsIHN1YmplY3Q6IHRoaXMucm91dGVzU3ViamVjdCB9LFxuICAgICAgeyBmaWVsZDogJ3NlY3VyaXR5UG9saWN5U3RhdGUnLCBzdWJqZWN0OiB0aGlzLnNlY3VyaXR5UG9saWN5U3RhdGVTdWJqZWN0IH0sXG4gICAgICB7IGZpZWxkOiAnc2lnblVwU3RhdGUnLCBzdWJqZWN0OiB0aGlzLnNpZ25VcFN0YXRlU3ViamVjdCB9LFxuICAgICAgeyBmaWVsZDogJ3NvY2lhbExvZ2luU3RhdGUnLCBzdWJqZWN0OiB0aGlzLnNvY2lhbExvZ2luU3RhdGVTdWJqZWN0IH0sXG4gICAgICB7IGZpZWxkOiAnc3NvU3RhdGUnLCBzdWJqZWN0OiB0aGlzLnNzb1N0YXRlU3ViamVjdCB9LFxuICAgICAgeyBmaWVsZDogJ3RlYW1TdGF0ZScsIHN1YmplY3Q6IHRoaXMudGVhbVN0YXRlU3ViamVjdCB9LFxuICAgICAgeyBmaWVsZDogJ3VzZXInLCBzdWJqZWN0OiB0aGlzLnVzZXJTdWJqZWN0IH0sXG4gICAgICB7IGZpZWxkOiAnaXNTU09BdXRoJywgc3ViamVjdDogdGhpcy5pc1NTT0F1dGhTdWJqZWN0IH0sXG4gICAgICB7IGZpZWxkOiAnc3NvQUNTJywgc3ViamVjdDogdGhpcy5zc29BQ1NTdWJqZWN0IH0sXG4gICAgXTtcblxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5mcm9udGVnZ0FwcFNlcnZpY2UuZnJvbnRlZ2dBcHAuc3RvcmUuZ2V0U3RhdGUoKSBhcyBGcm9udGVnZ1N0YXRlO1xuICAgIHRoaXMudXBkYXRlU3RhdGUoc3RhdGUuYXV0aCwgYXV0aFN1YlN0YXRlcyk7XG4gICAgLy8gTWVtb2l6ZWQgQXV0aCBTdGF0ZVxuICAgIHRoaXMuZnJvbnRlZ2dBcHBTZXJ2aWNlLmZyb250ZWdnQXBwLnN0b3JlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHRoaXMuZnJvbnRlZ2dBcHBTZXJ2aWNlLmZyb250ZWdnQXBwLnN0b3JlLmdldFN0YXRlKCkgYXMgRnJvbnRlZ2dTdGF0ZTtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGUobmV3U3RhdGUuYXV0aCwgYXV0aFN1YlN0YXRlcyk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0YXRlKGF1dGhTdGF0ZTogQXV0aFN0YXRlLCBhdXRoU3ViU3RhdGVzOiBBdXRoU3ViU3RhdGVzW10pOiB2b2lkIHtcblxuICAgIGlmICh0aGlzLmF1dGhTdGF0ZVN1YmplY3QudmFsdWUgIT09IGF1dGhTdGF0ZSkge1xuICAgICAgdGhpcy5hdXRoU3RhdGVTdWJqZWN0Lm5leHQoYXV0aFN0YXRlKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBhdXRoU3ViU3RhdGUgb2YgYXV0aFN1YlN0YXRlcykge1xuICAgICAgaWYgKCFGYXN0RGVlcEVxdWFsKGF1dGhTdWJTdGF0ZS5zdWJqZWN0LnZhbHVlLCBhdXRoU3RhdGVbYXV0aFN1YlN0YXRlLmZpZWxkXSkpIHtcbiAgICAgICAgYXV0aFN1YlN0YXRlLnN1YmplY3QubmV4dChhdXRoU3RhdGVbYXV0aFN1YlN0YXRlLmZpZWxkXSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmlzQXV0aGVudGljYXRlZFN1YmplY3QudmFsdWUgIT09IGF1dGhTdGF0ZS5pc0F1dGhlbnRpY2F0ZWQpIHtcbiAgICAgIHRoaXMuaXNBdXRoZW50aWNhdGVkU3ViamVjdC5uZXh0KGF1dGhTdGF0ZS5pc0F1dGhlbnRpY2F0ZWQpO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc0xvYWRpbmdTdWJqZWN0LnZhbHVlICE9PSBhdXRoU3RhdGUuaXNMb2FkaW5nKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZ1N1YmplY3QubmV4dChhdXRoU3RhdGUuaXNMb2FkaW5nKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRpc3BhdGNoQWN0aW9uKHR5cGU6IHN0cmluZywgcGF5bG9hZD86IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IHN0b3JlID0gdGhpcy5mcm9udGVnZ0FwcFNlcnZpY2UuZnJvbnRlZ2dBcHAuc3RvcmU7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHN0b3JlLmRpc3BhdGNoKHsgdHlwZTogYCR7YXV0aFN0b3JlTmFtZX0vJHt0eXBlfWAsIHBheWxvYWQgfSk7XG4gIH1cblxuXG4gIHB1YmxpYyBpc0hvc3RlZExvZ2luQ2FsbGJhY2tSb3V0ZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5mcm9udGVnZ0FwcFNlcnZpY2Uucm91dGVyLnVybDtcbiAgICBjb25zdCBob3N0ZWRMb2dpblJlZGlyZWN0VXJsID0gdGhpcy5mcm9udGVnZ0FwcFNlcnZpY2UuYXV0aFJvdXRlcy5ob3N0ZWRMb2dpblJlZGlyZWN0VXJsO1xuICAgIHJldHVybiBwYXRoLnN0YXJ0c1dpdGgoaG9zdGVkTG9naW5SZWRpcmVjdFVybCA/PyAnL29hdXRoL2NhbGxiYWNrJyk7XG4gIH1cblxuXG4gIC8vIFJvb3QgQWN0aW9uc1xuICBzZXRTdGF0ZSA9IChzdGF0ZTogUGFydGlhbDxBdXRoU3RhdGU+KSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdzZXRTdGF0ZScsIHN0YXRlKTtcbiAgcmVzZXRTdGF0ZSA9ICgpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3Jlc2V0U3RhdGUnKTtcbiAgc2V0VXNlciA9ICh1c2VyOiBVc2VyKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdzZXRVc2VyJywgdXNlcik7XG5cbiAgLy8gTG9naW4gQWN0aW9uc1xuICBzZXRMb2dpblN0YXRlID0gKHN0YXRlOiBQYXJ0aWFsPExvZ2luU3RhdGU+KSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdzZXRMb2dpblN0YXRlJywgc3RhdGUpO1xuICByZXNldExvZ2luU3RhdGUgPSAoKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdyZXNldExvZ2luU3RhdGUnKTtcbiAgcmVxdWVzdEF1dGhvcml6ZSA9IChmaXJzdFRpbWU/OiBib29sZWFuKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdyZXF1ZXN0QXV0aG9yaXplJywgZmlyc3RUaW1lKTtcblxuICBsb2dpbldpdGhSZWRpcmVjdCA9IChwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRSZWRpcmVjdFRvTG9naW4/OiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFRpbWU/OiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICAgICBsb2dpbkRpcmVjdEFjdGlvbj86IExvZ2luRGlyZWN0QWN0aW9uKSA9PiB7XG4gICAgaWYgKHRoaXMuaXNIb3N0ZWRMb2dpbkNhbGxiYWNrUm91dGUoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmRpc3BhdGNoQWN0aW9uKCdyZXF1ZXN0SG9zdGVkTG9naW5BdXRob3JpemVWMicsIHtcbiAgICAgIGFkZGl0aW9uYWxQYXJhbXM6IHBhcmFtcyxcbiAgICAgIHNob3VsZFJlZGlyZWN0VG9Mb2dpbjogc2hvdWxkUmVkaXJlY3RUb0xvZ2luID8/IHRydWUsXG4gICAgICBmaXJzdFRpbWU6IGZpcnN0VGltZSA/PyBmYWxzZSxcbiAgICAgIGxvZ2luRGlyZWN0QWN0aW9uLFxuICAgIH0pO1xuICAgIHRoaXMuc2V0U3RhdGUoeyBpc0xvYWRpbmc6IHRydWUgfSk7XG4gIH07XG4gIHByZUxvZ2luID0gKHBheWxvYWQ6IElQcmVMb2dpbikgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbigncHJlTG9naW4nLCBwYXlsb2FkKTtcbiAgcG9zdExvZ2luID0gKHBheWxvYWQ6IElQb3N0TG9naW4pID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3Bvc3RMb2dpbicsIHBheWxvYWQpO1xuICBsb2dpbiA9IChwYXlsb2FkOiBJTG9naW4pID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ2xvZ2luJywgcGF5bG9hZCk7XG4gIGxvZ2luV2l0aE1mYSA9IChwYXlsb2FkOiBXaXRoQ2FsbGJhY2s8SUxvZ2luV2l0aE1mYT4pID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ2xvZ2luV2l0aE1mYScsIHBheWxvYWQpO1xuICByZWNvdmVyTWZhID0gKHBheWxvYWQ6IElSZWNvdmVyTUZBVG9rZW4pID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3JlY292ZXJNZmEnLCBwYXlsb2FkKTtcbiAgbG9nb3V0ID0gKGNhbGxiYWNrPzogKCkgPT4gdm9pZCkgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignbG9nb3V0JywgY2FsbGJhY2spO1xuICBzaWxlbnRMb2dvdXQgPSAoY2FsbGJhY2s/OiAoKSA9PiB2b2lkKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdzaWxlbnRMb2dvdXQnLCBjYWxsYmFjayk7XG4gIGNoZWNrSWZBbGxvd1RvUmVtZW1iZXJNZmFEZXZpY2UgPSAocGF5bG9hZDogeyBtZmFUb2tlbjogc3RyaW5nIH0pID0+XG4gICAgdGhpcy5kaXNwYXRjaEFjdGlvbignY2hlY2tJZkFsbG93VG9SZW1lbWJlck1mYURldmljZScsIHBheWxvYWQpO1xuXG4gIC8vIFNvY2lhbCBMb2dpbnMgQWN0aW9uc1xuICBzZXRTb2NpYWxMb2dpbnNTdGF0ZSA9IChzdGF0ZTogUGFydGlhbDxTb2NpYWxMb2dpblN0YXRlPikgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignc2V0U29jaWFsTG9naW5zU3RhdGUnLCBzdGF0ZSk7XG4gIHJlc2V0U29jaWFsTG9naW5zU3RhdGUgPSAoKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdyZXNldFNvY2lhbExvZ2luc1N0YXRlJyk7XG4gIGxvYWRTb2NpYWxMb2dpbnNDb25maWd1cmF0aW9uID0gKCkgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignbG9hZFNvY2lhbExvZ2luc0NvbmZpZ3VyYXRpb24nKTtcbiAgbG9naW5WaWFTb2NpYWxMb2dpbiA9IChwYXlsb2FkOiBJTG9naW5WaWFTb2NpYWxMb2dpbikgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignbG9naW5WaWFTb2NpYWxMb2dpbicsIHBheWxvYWQpO1xuICBzZXRTb2NpYWxMb2dpbkVycm9yID0gKHBheWxvYWQ6IElTZXRTb2NpYWxMb2dpbkVycm9yKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdzZXRTb2NpYWxMb2dpbkVycm9yJywgcGF5bG9hZCk7XG5cbiAgLy8gQWN0aXZhdGUgQWNjb3VudCBBY3Rpb25zXG4gIHNldEFjdGl2YXRlU3RhdGUgPSAoc3RhdGU6IFBhcnRpYWw8QWN0aXZhdGVBY2NvdW50U3RhdGU+KSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdzZXRBY3RpdmF0ZVN0YXRlJywgc3RhdGUpO1xuICByZXNldEFjdGl2YXRlU3RhdGUgPSAoKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdyZXNldEFjdGl2YXRlU3RhdGUnKTtcbiAgc2V0QWN0aXZhdGVTdHJhdGVneVN0YXRlID0gKHN0YXRlOiBQYXJ0aWFsPEFjdGl2YXRlQWNjb3VudFN0cmF0ZWd5U3RhdGU+KSA9PlxuICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3NldEFjdGl2YXRlU3RyYXRlZ3lTdGF0ZScsIHN0YXRlKTtcbiAgYWN0aXZhdGVBY2NvdW50ID0gKHBheWxvYWQ6IElBY3RpdmF0ZUFjY291bnQpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ2FjdGl2YXRlQWNjb3VudCcsIHBheWxvYWQpO1xuICByZXNlbmRBY3RpdmF0aW9uRW1haWwgPSAocGF5bG9hZDogSVJlc2VuZEFjdGl2YXRpb25FbWFpbCkgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbigncmVzZW5kQWN0aXZhdGlvbkVtYWlsJywgcGF5bG9hZCk7XG4gIGdldEFjdGl2YXRlQWNjb3VudFN0cmF0ZWd5ID0gKFxuICAgIHBheWxvYWQ6IFdpdGhDYWxsYmFjazxJR2V0QWN0aXZhdGVBY2NvdW50U3RyYXRlZ3ksIElHZXRBY3RpdmF0ZUFjY291bnRTdHJhdGVneVJlc3BvbnNlPixcbiAgKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdnZXRBY3RpdmF0ZUFjY291bnRTdHJhdGVneScsIHBheWxvYWQpO1xuXG4gIC8vIEFjY2VwdCBJbnZpdGF0aW9uIEFjdGlvbnNcbiAgc2V0QWNjZXB0SW52aXRhdGlvblN0YXRlID0gKHN0YXRlOiBQYXJ0aWFsPEFjY2VwdEludml0YXRpb25TdGF0ZT4pID0+XG4gICAgdGhpcy5kaXNwYXRjaEFjdGlvbignc2V0QWNjZXB0SW52aXRhdGlvblN0YXRlJywgc3RhdGUpO1xuICByZXNldEFjY2VwdEludml0YXRpb25TdGF0ZSA9ICgpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3Jlc2V0QWNjZXB0SW52aXRhdGlvblN0YXRlJyk7XG4gIGFjY2VwdEludml0YXRpb24gPSAocGF5bG9hZDogSUFjY2VwdEludml0YXRpb24pID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ2FjY2VwdEludml0YXRpb24nLCBwYXlsb2FkKTtcblxuICAvLyBGb3Jnb3QgUGFzc3dvcmQgQWN0aW9uc1xuICBzZXRGb3Jnb3RQYXNzd29yZFN0YXRlID0gKHN0YXRlOiBQYXJ0aWFsPEZvcmdvdFBhc3N3b3JkU3RhdGU+KSA9PlxuICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3NldEZvcmdvdFBhc3N3b3JkU3RhdGUnLCBzdGF0ZSk7XG4gIHJlc2V0Rm9yZ290UGFzc3dvcmRTdGF0ZSA9ICgpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3Jlc2V0Rm9yZ290UGFzc3dvcmRTdGF0ZScpO1xuICBmb3Jnb3RQYXNzd29yZCA9IChwYXlsb2FkOiBJRm9yZ290UGFzc3dvcmQpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ2ZvcmdvdFBhc3N3b3JkJywgcGF5bG9hZCk7XG4gIHJlc2V0UGFzc3dvcmQgPSAocGF5bG9hZDogSVJlc2V0UGFzc3dvcmQpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3Jlc2V0UGFzc3dvcmQnLCBwYXlsb2FkKTtcbiAgbG9hZFBhc3N3b3JkQ29uZmlnID0gKHBheWxvYWQ/OiBJR2V0VXNlclBhc3N3b3JkQ29uZmlnKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdsb2FkUGFzc3dvcmRDb25maWcnLCBwYXlsb2FkKTtcblxuICAvLyBTaWduIFVwIEFjdGlvbnNcbiAgc2V0U2lnblVwU3RhdGUgPSAoc3RhdGU6IFBhcnRpYWw8U2lnblVwU3RhdGU+KSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdzZXRTaWduVXBTdGF0ZScsIHN0YXRlKTtcbiAgcmVzZXRTaWduVXBTdGF0ZSA9ICgpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3Jlc2V0U2lnblVwU3RhdGUnKTtcbiAgc2lnblVwVXNlciA9IChwYXlsb2FkOiBJU2lnblVwVXNlcikgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignc2lnblVwVXNlcicsIHBheWxvYWQpO1xuICByZXNldFNpZ25VcFN0YXRlU29mdCA9ICgpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3Jlc2V0U2lnblVwU3RhdGVTb2Z0Jyk7XG5cbiAgLy8gUHJvZmlsZSBBY3Rpb25zXG4gIHNldFByb2ZpbGVTdGF0ZSA9IChzdGF0ZTogUGFydGlhbDxQcm9maWxlU3RhdGU+KSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdzZXRQcm9maWxlU3RhdGUnLCBzdGF0ZSk7XG4gIHJlc2V0UHJvZmlsZVN0YXRlID0gKCkgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbigncmVzZXRQcm9maWxlU3RhdGUnKTtcbiAgbG9hZFByb2ZpbGUgPSAoKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdsb2FkUHJvZmlsZScpO1xuICBzYXZlUHJvZmlsZSA9IChwYXlsb2FkOiBTYXZlUHJvZmlsZVBheWxvYWQpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3NhdmVQcm9maWxlJywgcGF5bG9hZCk7XG4gIGNoYW5nZVBhc3N3b3JkID0gKHBheWxvYWQ6IFdpdGhDYWxsYmFjazxJQ2hhbmdlUGFzc3dvcmQ+KSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdjaGFuZ2VQYXNzd29yZCcsIHBheWxvYWQpO1xuXG4gIC8vIFNTTyBhY3Rpb25zXG4gIHNldFNTT1N0YXRlID0gKHN0YXRlOiBQYXJ0aWFsPFNTT1N0YXRlPikgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignc2V0U1NPU3RhdGUnLCBzdGF0ZSk7XG4gIHJlc2V0U1NPU3RhdGUgPSAoKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdyZXNldFNTT1N0YXRlJyk7XG4gIGxvYWRTU09Db25maWd1cmF0aW9ucyA9ICgpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ2xvYWRTU09Db25maWd1cmF0aW9ucycpO1xuICBsb2FkU1NPQXV0aG9yaXphdGlvblJvbGVzID0gKCkgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignbG9hZFNTT0F1dGhvcml6YXRpb25Sb2xlcycpO1xuICBzYXZlU1NPQ29uZmlndXJhdGlvbnMgPSAocGF5bG9hZDogU2F2ZVNTT0NvbmZpZ3VyYXRpb25QYXlsb2FkKSA9PlxuICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3NhdmVTU09Db25maWd1cmF0aW9ucycsIHBheWxvYWQpO1xuICBzYXZlU1NPQ29uZmlndXJhdGlvbnNGaWxlID0gKHBheWxvYWQ6IEZpbGVbXSkgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignc2F2ZVNTT0NvbmZpZ3VyYXRpb25zRmlsZScsIHBheWxvYWQpO1xuICBzYXZlU1NPQ29uZmlndXJhdGlvbnNGaWxlV2l0aENhbGxiYWNrID0gKHBheWxvYWQ6IFNhdmVTU09Db25maWd1cmF0aW9uRmlsZVBheWxvYWQpID0+XG4gICAgdGhpcy5kaXNwYXRjaEFjdGlvbignc2F2ZVNTT0NvbmZpZ3VyYXRpb25zRmlsZVdpdGhDYWxsYmFjaycsIHBheWxvYWQpO1xuICB2YWxpZGF0ZVNTT0RvbWFpbiA9IChwYXlsb2FkPzogV2l0aENhbGxiYWNrKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCd2YWxpZGF0ZVNTT0RvbWFpbicsIHBheWxvYWQpO1xuICB1cGRhdGVTU09BdXRob3JpemF0aW9uUm9sZXMgPSAocGF5bG9hZDogVXBkYXRlU1NPQXV0aG9yaXphdGlvblJvbGVzUGF5bG9hZCkgPT5cbiAgICB0aGlzLmRpc3BhdGNoQWN0aW9uKCd1cGRhdGVTU09BdXRob3JpemF0aW9uUm9sZXMnLCBwYXlsb2FkKTtcbiAgZGVsZXRlU2FtbEdyb3VwID0gKHBheWxvYWQ6IERlbGV0ZVNhbWxHcm91cFBheWxvYWQpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ2RlbGV0ZVNhbWxHcm91cCcsIHBheWxvYWQpO1xuICBjcmVhdGVTYW1sR3JvdXAgPSAocGF5bG9hZDogQ3JlYXRlU2FtbEdyb3VwUGF5bG9hZCkgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignY3JlYXRlU2FtbEdyb3VwJywgcGF5bG9hZCk7XG4gIG9pZGNQb3N0bG9naW4gPSAocGF5bG9hZDogSU9pZGNQb3N0TG9naW4pID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ29pZGNQb3N0bG9naW4nLCBwYXlsb2FkKTtcblxuICAvLyBNZmEgYWN0aW9uc1xuICBzZXRNZmFTdGF0ZSA9IChzdGF0ZTogUGFydGlhbDxNRkFTdGF0ZT4pID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3NldE1mYVN0YXRlJywgc3RhdGUpO1xuICByZXNldE1mYVN0YXRlID0gKCkgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbigncmVzZXRNZmFTdGF0ZScpO1xuICBlbnJvbGxNZmEgPSAoKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdlbnJvbGxNZmEnKTtcbiAgdmVyaWZ5TWZhID0gKHBheWxvYWQ6IFdpdGhDYWxsYmFjazxJVmVyaWZ5TWZhLCBzdHJpbmcgfCB1bmRlZmluZWQ+KSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCd2ZXJpZnlNZmEnLCBwYXlsb2FkKTtcbiAgdmVyaWZ5TWZhQWZ0ZXJGb3JjZSA9IChwYXlsb2FkOiBXaXRoQ2FsbGJhY2s8SUxvZ2luV2l0aE1mYSwgc3RyaW5nIHwgdW5kZWZpbmVkPikgPT5cbiAgICB0aGlzLmRpc3BhdGNoQWN0aW9uKCd2ZXJpZnlNZmFBZnRlckZvcmNlJywgcGF5bG9hZCk7XG4gIGRpc2FibGVNZmEgPSAocGF5bG9hZDogV2l0aENhbGxiYWNrPElEaXNhYmxlTWZhPikgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignZGlzYWJsZU1mYScsIHBheWxvYWQpO1xuXG4gIC8vIFRlYW0gYWN0aW9uc1xuICBzZXRUZWFtTG9hZGVyID0gKHBheWxvYWQ6IFRlYW1TdGF0ZUluZGljYXRvcikgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignc2V0VGVhbUxvYWRlcicsIHBheWxvYWQpO1xuICBzZXRUZWFtRXJyb3IgPSAocGF5bG9hZDogVGVhbVN0YXRlSW5kaWNhdG9yKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdzZXRUZWFtRXJyb3InLCBwYXlsb2FkKTtcbiAgc2V0VGVhbVN0YXRlID0gKHBheWxvYWQ6IFBhcnRpYWw8VGVhbVN0YXRlPikgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignc2V0VGVhbVN0YXRlJywgcGF5bG9hZCk7XG4gIHJlc2V0VGVhbVN0YXRlID0gKCkgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbigncmVzZXRUZWFtU3RhdGUnKTtcbiAgbG9hZFVzZXJzID0gKHBheWxvYWQ6IFdpdGhDYWxsYmFjazxXaXRoU2lsZW50TG9hZDxJTG9hZFVzZXJzPiwgSVRlYW1Vc2VyW10+KSA9PlxuICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ2xvYWRVc2VycycsIHBheWxvYWQpO1xuICBsb2FkUm9sZXMgPSAocGF5bG9hZD86IExvYWRSb2xlc0FuZFBlcm1pc3Npb25zUGF5bG9hZCkgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignbG9hZFJvbGVzJywgcGF5bG9hZCk7XG4gIGFkZFVzZXIgPSAocGF5bG9hZDogV2l0aENhbGxiYWNrPElBZGRVc2VyLCBJVGVhbVVzZXI+KSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdhZGRVc2VyJywgcGF5bG9hZCk7XG4gIHVwZGF0ZVVzZXIgPSAocGF5bG9hZDogV2l0aENhbGxiYWNrPElVcGRhdGVVc2VyLCBJVGVhbVVzZXI+KSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCd1cGRhdGVVc2VyJywgcGF5bG9hZCk7XG4gIGRlbGV0ZVVzZXIgPSAocGF5bG9hZDogV2l0aENhbGxiYWNrPElEZWxldGVVc2VyPikgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignZGVsZXRlVXNlcicsIHBheWxvYWQpO1xuICByZXNlbmRBY3RpdmF0aW9uTGluayA9IChwYXlsb2FkOiBXaXRoQ2FsbGJhY2s8SVJlc2VuZEFjdGl2YXRpb25MaW5rPikgPT5cbiAgICB0aGlzLmRpc3BhdGNoQWN0aW9uKCdyZXNlbmRBY3RpdmF0aW9uTGluaycsIHBheWxvYWQpO1xuICByZXNlbmRJbnZpdGF0aW9uTGluayA9IChwYXlsb2FkOiBXaXRoQ2FsbGJhY2s8SVJlc2VuZEludml0YXRpb25MaW5rPikgPT5cbiAgICB0aGlzLmRpc3BhdGNoQWN0aW9uKCdyZXNlbmRJbnZpdGF0aW9uTGluaycsIHBheWxvYWQpO1xuICBvcGVuQWRkVXNlckRpYWxvZyA9IChwYXlsb2FkPzogSVNldEFkZFVzZXJEaWFsb2cpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ29wZW5BZGRVc2VyRGlhbG9nJywgcGF5bG9hZCk7XG4gIGNsb3NlQWRkVXNlckRpYWxvZyA9IChwYXlsb2FkPzogYW55KSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdjbG9zZUFkZFVzZXJEaWFsb2cnLCBwYXlsb2FkKTtcbiAgb3BlbkRlbGV0ZVVzZXJEaWFsb2cgPSAocGF5bG9hZD86IElTZXREZWxldGVVc2VyRGlhbG9nKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdvcGVuRGVsZXRlVXNlckRpYWxvZycsIHBheWxvYWQpO1xuICBjbG9zZURlbGV0ZVVzZXJEaWFsb2cgPSAocGF5bG9hZD86IGFueSkgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignY2xvc2VEZWxldGVVc2VyRGlhbG9nJywgcGF5bG9hZCk7XG5cbiAgLy8gQVBJIFRva2VuIEFjdGlvbnNcbiAgc2V0QXBpVG9rZW5zTG9hZGVyID0gKHBheWxvYWQ6IEFwaVN0YXRlSW5kaWNhdG9yKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdzZXRBcGlUb2tlbnNMb2FkZXInLCBwYXlsb2FkKTtcbiAgc2V0QXBpVG9rZW5zRXJyb3IgPSAocGF5bG9hZDogQXBpU3RhdGVJbmRpY2F0b3IpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3NldEFwaVRva2Vuc0Vycm9yJywgcGF5bG9hZCk7XG4gIHNldEFwaVRva2Vuc1N0YXRlID0gKHN0YXRlOiBQYXJ0aWFsPEFwaVRva2Vuc1N0YXRlPikgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignc2V0QXBpVG9rZW5zU3RhdGUnLCBzdGF0ZSk7XG4gIHJlc2V0QXBpVG9rZW5zU3RhdGUgPSAoKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdyZXNldEFwaVRva2Vuc1N0YXRlJyk7XG4gIGxvYWRBcGlUb2tlbnMgPSAocGF5bG9hZD86IFdpdGhTaWxlbnRMb2FkPFdpdGhDYWxsYmFjaz4pID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ2xvYWRBcGlUb2tlbnMnLCBwYXlsb2FkKTtcbiAgaW5pdEFwaVRva2Vuc0RhdGEgPSAocGF5bG9hZDogQXBpVG9rZW5UeXBlKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdpbml0QXBpVG9rZW5zRGF0YScsIHBheWxvYWQpO1xuICBhZGRUZW5hbnRBcGlUb2tlbiA9IChwYXlsb2FkOiBBZGRUZW5hbnRBcGlUb2tlblBheWxvYWQpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ2FkZFRlbmFudEFwaVRva2VuJywgcGF5bG9hZCk7XG4gIGFkZFVzZXJBcGlUb2tlbiA9IChwYXlsb2FkOiBBZGRVc2VyQXBpVG9rZW5QYXlsb2FkKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdhZGRVc2VyQXBpVG9rZW4nLCBwYXlsb2FkKTtcbiAgZGVsZXRlVXNlckFwaVRva2VuID0gKHBheWxvYWQ6IHN0cmluZykgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignZGVsZXRlVXNlckFwaVRva2VuJywgcGF5bG9hZCk7XG4gIGRlbGV0ZVRlbmFudEFwaVRva2VuID0gKHBheWxvYWQ6IHN0cmluZykgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignZGVsZXRlVGVuYW50QXBpVG9rZW4nLCBwYXlsb2FkKTtcblxuICAvLyBTZWN1cml0eSBQb2xpY3kgQWN0aW9uc1xuICBzZXRTZWN1cml0eVBvbGljeVN0YXRlID0gKHN0YXRlOiBQYXJ0aWFsPFNlY3VyaXR5UG9saWN5U3RhdGU+KSA9PlxuICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3NldFNlY3VyaXR5UG9saWN5U3RhdGUnLCBzdGF0ZSk7XG4gIHNldFNlY3VyaXR5UG9saWN5R2xvYmFsU3RhdGUgPSAoc3RhdGU6IFBhcnRpYWw8R2xvYmFsUG9saWN5U3RhdGU+KSA9PlxuICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3NldFNlY3VyaXR5UG9saWN5R2xvYmFsU3RhdGUnLCBzdGF0ZSk7XG4gIHNldFNlY3VyaXR5UG9saWN5UHVibGljU3RhdGUgPSAoc3RhdGU6IFBhcnRpYWw8UHVibGljUG9saWN5U3RhdGU+KSA9PlxuICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3NldFNlY3VyaXR5UG9saWN5UHVibGljU3RhdGUnLCBzdGF0ZSk7XG4gIHNldFNlY3VyaXR5UG9saWN5TWZhU3RhdGUgPSAoc3RhdGU6IFBhcnRpYWw8TWZhUG9saWN5U3RhdGU+KSA9PlxuICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3NldFNlY3VyaXR5UG9saWN5TWZhU3RhdGUnLCBzdGF0ZSk7XG4gIHNldFNlY3VyaXR5UG9saWN5TG9ja291dFN0YXRlID0gKHN0YXRlOiBQYXJ0aWFsPExvY2tvdXRQb2xpY3lTdGF0ZT4pID0+XG4gICAgdGhpcy5kaXNwYXRjaEFjdGlvbignc2V0U2VjdXJpdHlQb2xpY3lMb2Nrb3V0U3RhdGUnLCBzdGF0ZSk7XG4gIHNldFNlY3VyaXR5UG9saWN5Q2FwdGNoYVN0YXRlID0gKHN0YXRlOiBQYXJ0aWFsPENhcHRjaGFQb2xpY3lTdGF0ZT4pID0+XG4gICAgdGhpcy5kaXNwYXRjaEFjdGlvbignc2V0U2VjdXJpdHlQb2xpY3lDYXB0Y2hhU3RhdGUnLCBzdGF0ZSk7XG4gIHNldFNlY3VyaXR5UG9saWN5UGFzc3dvcmRIaXN0b3J5U3RhdGUgPSAoc3RhdGU6IFBhcnRpYWw8UGFzc3dvcmRIaXN0b3J5UG9saWN5U3RhdGU+KSA9PlxuICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3NldFNlY3VyaXR5UG9saWN5UGFzc3dvcmRIaXN0b3J5U3RhdGUnLCBzdGF0ZSk7XG4gIHJlc2V0U2VjdXJpdHlQb2xpY3lTdGF0ZSA9ICgpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3Jlc2V0U2VjdXJpdHlQb2xpY3lTdGF0ZScpO1xuICBzZXRTZWN1cml0eVBvbGljeVBhc3N3b3JkU3RhdGUgPSAoc3RhdGU6IFBhcnRpYWw8UGFzc3dvcmRQb2xpY3lTdGF0ZT4pID0+XG4gICAgdGhpcy5kaXNwYXRjaEFjdGlvbignc2V0U2VjdXJpdHlQb2xpY3lQYXNzd29yZFN0YXRlJywgc3RhdGUpO1xuICBsb2FkU2VjdXJpdHlQb2xpY3kgPSAoKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdsb2FkU2VjdXJpdHlQb2xpY3knKTtcbiAgbG9hZFB1YmxpY1NlY3VyaXR5UG9saWN5ID0gKCkgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignbG9hZFB1YmxpY1NlY3VyaXR5UG9saWN5Jyk7XG4gIGxvYWRWZW5kb3JQYXNzd29yZENvbmZpZyA9ICgpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ2xvYWRWZW5kb3JQYXNzd29yZENvbmZpZycpO1xuICBsb2FkU2VjdXJpdHlQb2xpY3lNZmEgPSAoKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdsb2FkU2VjdXJpdHlQb2xpY3lNZmEnKTtcbiAgc2F2ZVNlY3VyaXR5UG9saWN5TWZhID0gKHBheWxvYWQ6IFNhdmVTZWN1cml0eVBvbGljeU1mYVBheWxvYWQpID0+XG4gICAgdGhpcy5kaXNwYXRjaEFjdGlvbignc2F2ZVNlY3VyaXR5UG9saWN5TWZhJywgcGF5bG9hZCk7XG4gIGxvYWRTZWN1cml0eVBvbGljeUxvY2tvdXQgPSAoKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdsb2FkU2VjdXJpdHlQb2xpY3lMb2Nrb3V0Jyk7XG4gIHNhdmVTZWN1cml0eVBvbGljeUxvY2tvdXQgPSAocGF5bG9hZDogU2F2ZVNlY3VyaXR5UG9saWN5TG9ja291dFBheWxvYWQpID0+XG4gICAgdGhpcy5kaXNwYXRjaEFjdGlvbignc2F2ZVNlY3VyaXR5UG9saWN5TG9ja291dCcsIHBheWxvYWQpO1xuICBsb2FkU2VjdXJpdHlQb2xpY3lDYXB0Y2hhID0gKCkgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignbG9hZFNlY3VyaXR5UG9saWN5Q2FwdGNoYScpO1xuICBsb2FkU2VjdXJpdHlQb2xpY3lQYXNzd29yZEhpc3RvcnkgPSAoKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdsb2FkU2VjdXJpdHlQb2xpY3lQYXNzd29yZEhpc3RvcnknKTtcbiAgc2F2ZVNlY3VyaXR5UG9saWN5UGFzc3dvcmRIaXN0b3J5ID0gKHBheWxvYWQ6IFNhdmVTZWN1cml0eVBvbGljeVBhc3N3b3JkSGlzdG9yeVBheWxvYWQpID0+XG4gICAgdGhpcy5kaXNwYXRjaEFjdGlvbignc2F2ZVNlY3VyaXR5UG9saWN5UGFzc3dvcmRIaXN0b3J5JywgcGF5bG9hZCk7XG5cbiAgLy8gQWNjb3VudCBTZXR0aW5ncyBBY3Rpb25zXG4gIHNldEFjY291bnRTZXR0aW5nc1N0YXRlID0gKHN0YXRlOiBQYXJ0aWFsPEFjY291bnRTZXR0aW5nc1N0YXRlPikgPT5cbiAgICB0aGlzLmRpc3BhdGNoQWN0aW9uKCdzZXRBY2NvdW50U2V0dGluZ3NTdGF0ZScsIHN0YXRlKTtcbiAgcmVzZXRBY2NvdW50U2V0dGluZ3NTdGF0ZSA9ICgpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3Jlc2V0QWNjb3VudFNldHRpbmdzU3RhdGUnKTtcbiAgbG9hZEFjY291bnRTZXR0aW5ncyA9IChwYXlsb2FkPzogV2l0aENhbGxiYWNrPFdpdGhTaWxlbnRMb2FkPHt9Pj4pID0+XG4gICAgdGhpcy5kaXNwYXRjaEFjdGlvbignbG9hZEFjY291bnRTZXR0aW5ncycsIHBheWxvYWQpO1xuICBzYXZlQWNjb3VudFNldHRpbmdzID0gKHBheWxvYWQ6IFdpdGhDYWxsYmFjazxJU2V0dGluZ3NSZXNwb25zZSwgSVNldHRpbmdzUmVzcG9uc2U+KSA9PlxuICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3NhdmVBY2NvdW50U2V0dGluZ3MnLCBwYXlsb2FkKTtcblxuICAvLyBUZW5hbnRzIEFjdGlvbnNcbiAgc2V0VGVuYW50c1N0YXRlID0gKHN0YXRlOiBQYXJ0aWFsPFRlbmFudHNTdGF0ZT4pID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3NldFRlbmFudHNTdGF0ZScsIHN0YXRlKTtcbiAgcmVzZXRUZW5hbnRzU3RhdGUgPSAoKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdyZXNldFRlbmFudHNTdGF0ZScpO1xuICBzd2l0Y2hUZW5hbnQgPSAocGF5bG9hZDogV2l0aENhbGxiYWNrPElTd2l0Y2hUZW5hbnQ+KSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdzd2l0Y2hUZW5hbnQnLCBwYXlsb2FkKTtcbiAgbG9hZFRlbmFudHMgPSAocGF5bG9hZD86IFdpdGhDYWxsYmFjazx7fSwgSVRlbmFudHNSZXNwb25zZVtdPikgPT4gdGhpcy5kaXNwYXRjaEFjdGlvbignbG9hZFRlbmFudHMnLCBwYXlsb2FkKTtcblxuICAvLyBSb2xlcyBBY3Rpb25zXG4gIHNldFJvbGVzU3RhdGUgPSAoc3RhdGU6IFJvbGVzU3RhdGUpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3NldFJvbGVzU3RhdGUnLCBzdGF0ZSk7XG4gIHJlc2V0Um9sZXNTdGF0ZSA9ICgpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3Jlc2V0Um9sZXNTdGF0ZScpO1xuICBsb2FkUm9sZXNBbmRQZXJtaXNzaW9ucyA9IChwYXlsb2FkPzogV2l0aFNpbGVudExvYWQ8e30+KSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdsb2FkUm9sZXNBbmRQZXJtaXNzaW9ucycsIHBheWxvYWQpO1xuICBhZGRSb2xlID0gKHBheWxvYWQ6IFdpdGhDYWxsYmFjazxJQWRkUm9sZSwgSVJvbGU+KSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdhZGRSb2xlJywgcGF5bG9hZCk7XG4gIHVwZGF0ZVJvbGUgPSAocGF5bG9hZDogV2l0aENhbGxiYWNrPElVcGRhdGVSb2xlLCBJUm9sZT4pID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3VwZGF0ZVJvbGUnLCBwYXlsb2FkKTtcbiAgZGVsZXRlUm9sZSA9IChwYXlsb2FkOiBXaXRoQ2FsbGJhY2s8SURlbGV0ZVJvbGU+KSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdkZWxldGVSb2xlJywgcGF5bG9hZCk7XG4gIGF0dGFjaFBlcm1pc3Npb25zVG9Sb2xlID0gKHBheWxvYWQ6IFdpdGhDYWxsYmFjazxJQXR0YWNoUGVybWlzc2lvbnNUb1JvbGUsIElSb2xlPikgPT5cbiAgICB0aGlzLmRpc3BhdGNoQWN0aW9uKCdhdHRhY2hQZXJtaXNzaW9uc1RvUm9sZScsIHBheWxvYWQpO1xuXG4gIGF0dGFjaFBlcm1pc3Npb25Ub1JvbGVzID0gKFxuICAgIHBheWxvYWQ6IFdpdGhDYWxsYmFjazx7XG4gICAgICBwZXJtaXNzaW9uSWQ6IHN0cmluZztcbiAgICAgIHJvbGVJZHM6IHN0cmluZ1tdO1xuICAgIH0sXG4gICAgICBJUm9sZVBlcm1pc3Npb24+LFxuICApID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ2F0dGFjaFBlcm1pc3Npb25Ub1JvbGVzJywgcGF5bG9hZCk7XG59XG4iXX0=
@@ -1,8 +1,7 @@
1
+ import { BehaviorSubject } from 'rxjs';
1
2
  import { Injectable } from '@angular/core';
2
- import { NotEntitledJustification } from '@frontegg/rest-api';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "./frontegg-app.service";
5
- import * as i2 from "./frontegg-user-subscription.service";
6
5
  /**
7
6
  * An entitlements service for:
8
7
  * 1. Managing state subscription.
@@ -10,9 +9,51 @@ import * as i2 from "./frontegg-user-subscription.service";
10
9
  * 3. Load entitlements on demand.
11
10
  */
12
11
  export class FronteggEntitlementsService {
13
- constructor(fronteggAppService, fronteggUserSubscriptionService) {
12
+ constructor(fronteggAppService) {
14
13
  this.fronteggAppService = fronteggAppService;
15
- this.fronteggUserSubscriptionService = fronteggUserSubscriptionService;
14
+ this.userStateSubject = new BehaviorSubject(undefined);
15
+ const state = this.fronteggAppService.fronteggApp.store.getState();
16
+ this.updateUserStateIfNeeded(state.auth);
17
+ // Memoized entitlements State
18
+ this.fronteggAppService.fronteggApp.store.subscribe(() => {
19
+ const newState = this.fronteggAppService.fronteggApp.store.getState();
20
+ this.updateUserStateIfNeeded(newState.auth);
21
+ });
22
+ }
23
+ /**
24
+ * Trigger entitlements subject change event if the entitlements reference changes
25
+ * No need for deep equal because we already check it internally
26
+ * @param authState
27
+ */
28
+ updateUserStateIfNeeded(authState) {
29
+ const entitlementsState = authState.user;
30
+ if (this.userStateSubject.value === entitlementsState) {
31
+ return;
32
+ }
33
+ this.userStateSubject.next(entitlementsState);
34
+ }
35
+ /**
36
+ * The function gives the ability to return a manipulated data of the user state as a subscription.
37
+ *
38
+ * @param dataManipulator Manipulator function that receives user state and returns a manipulated data
39
+ * @param observer For receiving manipulated data result
40
+ * @returns a subscription to be able to unsubscribe
41
+ */
42
+ getUserManipulatorSubscription(dataManipulator, observer) {
43
+ // used for computing the entitlements result because we don't return the state itself, but a calculated one
44
+ const userSubject = new BehaviorSubject(undefined);
45
+ const stateSubscription = this.userStateSubject.subscribe(user => {
46
+ userSubject.next(dataManipulator(user));
47
+ });
48
+ // subscribing the consumer observer
49
+ const userResultSubscription = userSubject.asObservable().subscribe(observer);
50
+ // monkey patched to manage both un-subscriptions: state and user manipulated result
51
+ const originalUnsubscribe = userResultSubscription.unsubscribe.bind(userResultSubscription);
52
+ userResultSubscription.unsubscribe = () => {
53
+ originalUnsubscribe();
54
+ stateSubscription.unsubscribe();
55
+ };
56
+ return userResultSubscription;
16
57
  }
17
58
  /**
18
59
  * @param feature
@@ -23,13 +64,7 @@ export class FronteggEntitlementsService {
23
64
  * @throws when entitlement is not enabled via frontegg options
24
65
  */
25
66
  featureEntitlements$(feature, observer, customAttributes) {
26
- return this.fronteggUserSubscriptionService.getUserManipulatorSubscription((user) => {
27
- // the entitlemenets-common npm doesn't know to overcome the case of signed out user, then we get console errors
28
- if (user) {
29
- return this.fronteggAppService.fronteggApp.getFeatureEntitlements(feature, customAttributes);
30
- }
31
- return { isEntitled: false, justification: NotEntitledJustification.MISSING_FEATURE };
32
- }, observer);
67
+ return this.getUserManipulatorSubscription(() => { return this.fronteggAppService.fronteggApp.getFeatureEntitlements(feature, customAttributes); }, observer);
33
68
  }
34
69
  /**
35
70
  * @param permission
@@ -39,12 +74,7 @@ export class FronteggEntitlementsService {
39
74
  * @returns a subscription to be able to unsubscribe
40
75
  */
41
76
  permissionEntitlements$(permission, observer, customAttributes) {
42
- return this.fronteggUserSubscriptionService.getUserManipulatorSubscription((user) => {
43
- if (user) {
44
- return this.fronteggAppService.fronteggApp.getPermissionEntitlements(permission, customAttributes);
45
- }
46
- return { isEntitled: false, justification: NotEntitledJustification.MISSING_PERMISSION };
47
- }, observer);
77
+ return this.getUserManipulatorSubscription(() => this.fronteggAppService.fronteggApp.getPermissionEntitlements(permission, customAttributes), observer);
48
78
  }
49
79
  /**
50
80
  * @param options permissionKey or featureKey in an options object
@@ -54,13 +84,7 @@ export class FronteggEntitlementsService {
54
84
  * @returns a subscription to be able to unsubscribe
55
85
  */
56
86
  entitlements$(options, observer, customAttributes) {
57
- return this.fronteggUserSubscriptionService.getUserManipulatorSubscription((user) => {
58
- if (user) {
59
- return this.fronteggAppService.fronteggApp.getEntitlements(options, customAttributes);
60
- }
61
- const justification = 'featureKey' in options ? NotEntitledJustification.MISSING_FEATURE : NotEntitledJustification.MISSING_PERMISSION;
62
- return { isEntitled: false, justification };
63
- }, observer);
87
+ return this.getUserManipulatorSubscription(() => this.fronteggAppService.fronteggApp.getEntitlements(options, customAttributes), observer);
64
88
  }
65
89
  /**
66
90
  * Load entitlements data on demand
@@ -70,12 +94,12 @@ export class FronteggEntitlementsService {
70
94
  this.fronteggAppService.fronteggApp.loadEntitlements(callback);
71
95
  }
72
96
  }
73
- FronteggEntitlementsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FronteggEntitlementsService, deps: [{ token: i1.FronteggAppService }, { token: i2.FronteggUserSubscriptionService }], target: i0.ɵɵFactoryTarget.Injectable });
97
+ FronteggEntitlementsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FronteggEntitlementsService, deps: [{ token: i1.FronteggAppService }], target: i0.ɵɵFactoryTarget.Injectable });
74
98
  FronteggEntitlementsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FronteggEntitlementsService, providedIn: 'root' });
75
99
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FronteggEntitlementsService, decorators: [{
76
100
  type: Injectable,
77
101
  args: [{
78
102
  providedIn: 'root',
79
103
  }]
80
- }], ctorParameters: function () { return [{ type: i1.FronteggAppService }, { type: i2.FronteggUserSubscriptionService }]; } });
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbnRlZ2ctZW50aXRsZW1lbnRzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mcm9udGVnZy1hcHAvc3JjL2xpYi9mcm9udGVnZy1lbnRpdGxlbWVudHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7O0FBSTlEOzs7OztHQUtHO0FBSUgsTUFBTSxPQUFPLDJCQUEyQjtJQUN0QyxZQUFvQixrQkFBc0MsRUFBVSwrQkFBZ0U7UUFBaEgsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUFVLG9DQUErQixHQUEvQiwrQkFBK0IsQ0FBaUM7SUFBRyxDQUFDO0lBRXhJOzs7Ozs7O09BT0c7SUFDSSxvQkFBb0IsQ0FBQyxPQUFlLEVBQUUsUUFBc0MsRUFBRSxnQkFBbUM7UUFDdEgsT0FBTyxJQUFJLENBQUMsK0JBQStCLENBQUMsOEJBQThCLENBQ3hFLENBQUMsSUFBVSxFQUFFLEVBQUU7WUFDYixpSEFBaUg7WUFDakgsSUFBSSxJQUFJLEVBQUU7Z0JBQ1IsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO2FBQzlGO1lBQ0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLHdCQUF3QixDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hGLENBQUMsRUFDRCxRQUFRLENBQ1QsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSx1QkFBdUIsQ0FBQyxVQUFrQixFQUFFLFFBQXNDLEVBQUUsZ0JBQW1DO1FBQzVILE9BQU8sSUFBSSxDQUFDLCtCQUErQixDQUFDLDhCQUE4QixDQUN4RSxDQUFDLElBQVUsRUFBRSxFQUFFO1lBQ2IsSUFBSSxJQUFJLEVBQUU7Z0JBQ1IsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLHlCQUF5QixDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO2FBQ3BHO1lBQ0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLHdCQUF3QixDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDM0YsQ0FBQyxFQUNELFFBQVEsQ0FDVCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGFBQWEsQ0FBQyxPQUEwQixFQUFFLFFBQXNDLEVBQUUsZ0JBQW1DO1FBQzFILE9BQU8sSUFBSSxDQUFDLCtCQUErQixDQUFDLDhCQUE4QixDQUN4RSxDQUFDLElBQVUsRUFBRSxFQUFFO1lBQ2IsSUFBSSxJQUFJLEVBQUU7Z0JBQ1IsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQzthQUN2RjtZQUVELE1BQU0sYUFBYSxHQUFHLFlBQVksSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsd0JBQXdCLENBQUMsa0JBQWtCLENBQUM7WUFFdkksT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLENBQUM7UUFDOUMsQ0FBQyxFQUNELFFBQVEsQ0FDVCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNJLGdCQUFnQixDQUFDLFFBQW1DO1FBQ3pELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakUsQ0FBQzs7eUhBdkVVLDJCQUEyQjs2SEFBM0IsMkJBQTJCLGNBRjFCLE1BQU07NEZBRVAsMkJBQTJCO2tCQUh2QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YnNjcmlwdGlvbiwgUGFydGlhbE9ic2VydmVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFbnRpdGxlbWVudCwgQ3VzdG9tQXR0cmlidXRlcywgRW50aXRsZWRUb09wdGlvbnMsIExvYWRFbnRpdGxlbWVudHNDYWxsYmFjayB9IGZyb20gJ0Bmcm9udGVnZy90eXBlcyc7XG5pbXBvcnQgeyBOb3RFbnRpdGxlZEp1c3RpZmljYXRpb24gfSBmcm9tICdAZnJvbnRlZ2cvcmVzdC1hcGknO1xuaW1wb3J0IHsgRnJvbnRlZ2dBcHBTZXJ2aWNlIH0gZnJvbSAnLi9mcm9udGVnZy1hcHAuc2VydmljZSc7XG5pbXBvcnQgeyBGcm9udGVnZ1VzZXJTdWJzY3JpcHRpb25TZXJ2aWNlLCBVc2VyIH0gZnJvbSAnLi9mcm9udGVnZy11c2VyLXN1YnNjcmlwdGlvbi5zZXJ2aWNlJztcblxuLyoqXG4gKiBBbiBlbnRpdGxlbWVudHMgc2VydmljZSBmb3I6IFxuICogICAxLiBNYW5hZ2luZyBzdGF0ZSBzdWJzY3JpcHRpb24uXG4gKiAgIDIuIFF1ZXJ5aW5nIGFib3V0IGZlYXR1cmUgYW5kIHBlcm1pc3Npb24gZW50aXRsZW1lbnRzIHN0YXRlLlxuICogICAzLiBMb2FkIGVudGl0bGVtZW50cyBvbiBkZW1hbmQuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBGcm9udGVnZ0VudGl0bGVtZW50c1NlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZyb250ZWdnQXBwU2VydmljZTogRnJvbnRlZ2dBcHBTZXJ2aWNlLCBwcml2YXRlIGZyb250ZWdnVXNlclN1YnNjcmlwdGlvblNlcnZpY2U6IEZyb250ZWdnVXNlclN1YnNjcmlwdGlvblNlcnZpY2UpIHt9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBmZWF0dXJlXG4gICAqIEBwYXJhbSBvYnNlcnZlciBGb3IgcmVjZWl2aW5nIHRoZSBmZWF0dXJlIGVudGl0bGVtZW50cyByZXN1bHQgaW5jbHVkaW5nIGlmIHRoZSB1c2VyIGlzIGVudGl0bGVkIHRvIHRoZSBnaXZlbiBmZWF0dXJlLlxuICAgKiAgICAgICAgICAgICAgICAgQXR0YWNoaW5nIHRoZSBqdXN0aWZpY2F0aW9uIGlmIG5vdCBlbnRpdGxlZFxuICAgKiBAcGFyYW0gY3VzdG9tQXR0cmlidXRlcyBjb25zdW1lciBhdHRyaWJ1dGVzXG4gICAqIEByZXR1cm5zIGEgc3Vic2NyaXB0aW9uIHRvIGJlIGFibGUgdG8gdW5zdWJzY3JpYmVcbiAgICogQHRocm93cyB3aGVuIGVudGl0bGVtZW50IGlzIG5vdCBlbmFibGVkIHZpYSBmcm9udGVnZyBvcHRpb25zXG4gICAqL1xuICBwdWJsaWMgZmVhdHVyZUVudGl0bGVtZW50cyQoZmVhdHVyZTogc3RyaW5nLCBvYnNlcnZlcjogUGFydGlhbE9ic2VydmVyPEVudGl0bGVtZW50PiwgY3VzdG9tQXR0cmlidXRlcz86IEN1c3RvbUF0dHJpYnV0ZXMpOiBTdWJzY3JpcHRpb24ge1xuICAgIHJldHVybiB0aGlzLmZyb250ZWdnVXNlclN1YnNjcmlwdGlvblNlcnZpY2UuZ2V0VXNlck1hbmlwdWxhdG9yU3Vic2NyaXB0aW9uPEVudGl0bGVtZW50PihcbiAgICAgICh1c2VyOiBVc2VyKSA9PiB7IFxuICAgICAgICAvLyB0aGUgZW50aXRsZW1lbmV0cy1jb21tb24gbnBtIGRvZXNuJ3Qga25vdyB0byBvdmVyY29tZSB0aGUgY2FzZSBvZiBzaWduZWQgb3V0IHVzZXIsIHRoZW4gd2UgZ2V0IGNvbnNvbGUgZXJyb3JzIFxuICAgICAgICBpZiAodXNlcikge1xuICAgICAgICAgIHJldHVybiB0aGlzLmZyb250ZWdnQXBwU2VydmljZS5mcm9udGVnZ0FwcC5nZXRGZWF0dXJlRW50aXRsZW1lbnRzKGZlYXR1cmUsIGN1c3RvbUF0dHJpYnV0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGlzRW50aXRsZWQ6IGZhbHNlLCBqdXN0aWZpY2F0aW9uOiBOb3RFbnRpdGxlZEp1c3RpZmljYXRpb24uTUlTU0lOR19GRUFUVVJFIH07XG4gICAgICB9LFxuICAgICAgb2JzZXJ2ZXJcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBwZXJtaXNzaW9uXG4gICAqIEBwYXJhbSBvYnNlcnZlciBGb3IgcmVjZWl2aW5nIHRoZSBwZXJtaXNzaW9uIGVudGl0bGVtZW50cyByZXN1bHQgaW5jbHVkaW5nIGlmIHRoZSB1c2VyIGlzIGVudGl0bGVkIHRvIHRoZSBnaXZlbiBwZXJtaXNzaW9uLlxuICAgKiAgICAgICAgICAgICAgICAgQXR0YWNoaW5nIHRoZSBqdXN0aWZpY2F0aW9uIGlmIG5vdCBlbnRpdGxlZFxuICAgKiBAcGFyYW0gY3VzdG9tQXR0cmlidXRlcyBjb25zdW1lciBhdHRyaWJ1dGVzXG4gICAqIEByZXR1cm5zIGEgc3Vic2NyaXB0aW9uIHRvIGJlIGFibGUgdG8gdW5zdWJzY3JpYmVcbiAgICovXG4gIHB1YmxpYyBwZXJtaXNzaW9uRW50aXRsZW1lbnRzJChwZXJtaXNzaW9uOiBzdHJpbmcsIG9ic2VydmVyOiBQYXJ0aWFsT2JzZXJ2ZXI8RW50aXRsZW1lbnQ+LCBjdXN0b21BdHRyaWJ1dGVzPzogQ3VzdG9tQXR0cmlidXRlcyk6IFN1YnNjcmlwdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbnRlZ2dVc2VyU3Vic2NyaXB0aW9uU2VydmljZS5nZXRVc2VyTWFuaXB1bGF0b3JTdWJzY3JpcHRpb248RW50aXRsZW1lbnQ+KFxuICAgICAgKHVzZXI6IFVzZXIpID0+IHsgXG4gICAgICAgIGlmICh1c2VyKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZnJvbnRlZ2dBcHBTZXJ2aWNlLmZyb250ZWdnQXBwLmdldFBlcm1pc3Npb25FbnRpdGxlbWVudHMocGVybWlzc2lvbiwgY3VzdG9tQXR0cmlidXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgaXNFbnRpdGxlZDogZmFsc2UsIGp1c3RpZmljYXRpb246IE5vdEVudGl0bGVkSnVzdGlmaWNhdGlvbi5NSVNTSU5HX1BFUk1JU1NJT04gfTtcbiAgICAgIH0sICAgICAgXG4gICAgICBvYnNlcnZlclxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIG9wdGlvbnMgcGVybWlzc2lvbktleSBvciBmZWF0dXJlS2V5IGluIGFuIG9wdGlvbnMgb2JqZWN0XG4gICAqIEBwYXJhbSBvYnNlcnZlciBGb3IgcmVjZWl2aW5nIHRoZSBwZXJtaXNzaW9uIGVudGl0bGVtZW50cyByZXN1bHQgaW5jbHVkaW5nIGlmIHRoZSB1c2VyIGlzIGVudGl0bGVkIHRvIHRoZSBnaXZlbiBwZXJtaXNzaW9uLlxuICAgKiAgICAgICAgICAgICAgICAgQXR0YWNoaW5nIHRoZSBqdXN0aWZpY2F0aW9uIGlmIG5vdCBlbnRpdGxlZFxuICAgKiBAcGFyYW0gY3VzdG9tQXR0cmlidXRlcyBjb25zdW1lciBhdHRyaWJ1dGVzXG4gICAqIEByZXR1cm5zIGEgc3Vic2NyaXB0aW9uIHRvIGJlIGFibGUgdG8gdW5zdWJzY3JpYmVcbiAgICovXG4gIHB1YmxpYyBlbnRpdGxlbWVudHMkKG9wdGlvbnM6IEVudGl0bGVkVG9PcHRpb25zLCBvYnNlcnZlcjogUGFydGlhbE9ic2VydmVyPEVudGl0bGVtZW50PiwgY3VzdG9tQXR0cmlidXRlcz86IEN1c3RvbUF0dHJpYnV0ZXMpOiBTdWJzY3JpcHRpb24ge1xuICAgIHJldHVybiB0aGlzLmZyb250ZWdnVXNlclN1YnNjcmlwdGlvblNlcnZpY2UuZ2V0VXNlck1hbmlwdWxhdG9yU3Vic2NyaXB0aW9uPEVudGl0bGVtZW50PihcbiAgICAgICh1c2VyOiBVc2VyKSA9PiB7XG4gICAgICAgIGlmICh1c2VyKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZnJvbnRlZ2dBcHBTZXJ2aWNlLmZyb250ZWdnQXBwLmdldEVudGl0bGVtZW50cyhvcHRpb25zLCBjdXN0b21BdHRyaWJ1dGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGp1c3RpZmljYXRpb24gPSAnZmVhdHVyZUtleScgaW4gb3B0aW9ucyA/IE5vdEVudGl0bGVkSnVzdGlmaWNhdGlvbi5NSVNTSU5HX0ZFQVRVUkUgOiBOb3RFbnRpdGxlZEp1c3RpZmljYXRpb24uTUlTU0lOR19QRVJNSVNTSU9OO1xuXG4gICAgICAgIHJldHVybiB7IGlzRW50aXRsZWQ6IGZhbHNlLCBqdXN0aWZpY2F0aW9uIH07XG4gICAgICB9LFxuICAgICAgb2JzZXJ2ZXJcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgZW50aXRsZW1lbnRzIGRhdGEgb24gZGVtYW5kXG4gICAqIEBwYXJhbSBjYWxsYmFjayBjYWxsZWQgb24gcmVxdWVzdCBjb21wbGV0ZWQgd2l0aCB0cnVlIGlmIHN1Y2NlZWRlZCwgZmFsc2UgaWYgZmFpbGVkXG4gICAqL1xuICBwdWJsaWMgbG9hZEVudGl0bGVtZW50cyhjYWxsYmFjaz86IExvYWRFbnRpdGxlbWVudHNDYWxsYmFjayk6IHZvaWQge1xuICAgIHRoaXMuZnJvbnRlZ2dBcHBTZXJ2aWNlLmZyb250ZWdnQXBwLmxvYWRFbnRpdGxlbWVudHMoY2FsbGJhY2spO1xuICB9XG59XG4iXX0=
104
+ }], ctorParameters: function () { return [{ type: i1.FronteggAppService }]; } });
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbnRlZ2ctZW50aXRsZW1lbnRzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mcm9udGVnZy1hcHAvc3JjL2xpYi9mcm9udGVnZy1lbnRpdGxlbWVudHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlDLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV0RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFRM0M7Ozs7O0dBS0c7QUFJSCxNQUFNLE9BQU8sMkJBQTJCO0lBR3RDLFlBQW9CLGtCQUFzQztRQUF0Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBRmxELHFCQUFnQixHQUFHLElBQUksZUFBZSxDQUFNLFNBQVMsQ0FBQyxDQUFDO1FBRzdELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBbUIsQ0FBQztRQUNwRixJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXpDLDhCQUE4QjtRQUM5QixJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3ZELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBbUIsQ0FBQztZQUN2RixJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyx1QkFBdUIsQ0FBQyxTQUFvQjtRQUNsRCxNQUFNLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxJQUFZLENBQUM7UUFDakQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxLQUFLLGlCQUFpQixFQUFFO1lBQ3JELE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssOEJBQThCLENBQ3BDLGVBQXVDLEVBQ3ZDLFFBQWlDO1FBRWpDLDRHQUE0RztRQUM1RyxNQUFNLFdBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBUyxTQUE4QixDQUFDLENBQUM7UUFFaEYsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQy9ELFdBQVcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxvQ0FBb0M7UUFDcEMsTUFBTSxzQkFBc0IsR0FBRyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRTdFLG9GQUFvRjtRQUNwRixNQUFNLG1CQUFtQixHQUFHLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUU1RixzQkFBc0IsQ0FBQyxXQUFXLEdBQUcsR0FBRSxFQUFFO1lBQ3ZDLG1CQUFtQixFQUFFLENBQUM7WUFDdEIsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbEMsQ0FBQyxDQUFDO1FBRUYsT0FBTyxzQkFBc0IsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLG9CQUFvQixDQUFDLE9BQWUsRUFBRSxRQUFzQyxFQUFFLGdCQUFtQztRQUN0SCxPQUFPLElBQUksQ0FBQyw4QkFBOEIsQ0FDeEMsR0FBRyxFQUFFLEdBQUcsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFBLENBQUEsQ0FBQyxFQUNyRyxRQUFRLENBQ1QsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSx1QkFBdUIsQ0FBQyxVQUFrQixFQUFFLFFBQXNDLEVBQUUsZ0JBQW1DO1FBQzVILE9BQU8sSUFBSSxDQUFDLDhCQUE4QixDQUN4QyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLHlCQUF5QixDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxFQUNqRyxRQUFRLENBQ1QsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxhQUFhLENBQUMsT0FBMEIsRUFBRSxRQUFzQyxFQUFFLGdCQUFtQztRQUMxSCxPQUFPLElBQUksQ0FBQyw4QkFBOEIsQ0FDeEMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLGdCQUFnQixDQUFDLEVBQ3BGLFFBQVEsQ0FDVCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNJLGdCQUFnQixDQUFDLFFBQW1DO1FBQ3pELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakUsQ0FBQzs7eUhBN0dVLDJCQUEyQjs2SEFBM0IsMkJBQTJCLGNBRjFCLE1BQU07NEZBRVAsMkJBQTJCO2tCQUh2QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YnNjcmlwdGlvbiwgUGFydGlhbE9ic2VydmVyLCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEF1dGhTdGF0ZSB9IGZyb20gJ0Bmcm9udGVnZy9yZWR1eC1zdG9yZSc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFbnRpdGxlbWVudCwgTG9hZEVudGl0bGVtZW50c0NhbGxiYWNrLCBFbnRpdGxlZFRvT3B0aW9ucywgQ3VzdG9tQXR0cmlidXRlcyB9IGZyb20gJ0Bmcm9udGVnZy90eXBlcyc7XG5cbmltcG9ydCB7IEZyb250ZWdnU3RhdGUgfSBmcm9tICdAZnJvbnRlZ2cvcmVkdXgtc3RvcmUnO1xuaW1wb3J0IHsgRnJvbnRlZ2dBcHBTZXJ2aWNlIH0gZnJvbSAnLi9mcm9udGVnZy1hcHAuc2VydmljZSc7XG5cbnR5cGUgVXNlciA9IEZyb250ZWdnU3RhdGVbJ2F1dGgnXVsndXNlciddO1xuXG4vKipcbiAqIEFuIGVudGl0bGVtZW50cyBzZXJ2aWNlIGZvcjogXG4gKiAgIDEuIE1hbmFnaW5nIHN0YXRlIHN1YnNjcmlwdGlvbi5cbiAqICAgMi4gUXVlcnlpbmcgYWJvdXQgZmVhdHVyZSBhbmQgcGVybWlzc2lvbiBlbnRpdGxlbWVudHMgc3RhdGUuXG4gKiAgIDMuIExvYWQgZW50aXRsZW1lbnRzIG9uIGRlbWFuZC5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEZyb250ZWdnRW50aXRsZW1lbnRzU2VydmljZSB7XG4gIHByaXZhdGUgdXNlclN0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih1bmRlZmluZWQpO1xuICBcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmcm9udGVnZ0FwcFNlcnZpY2U6IEZyb250ZWdnQXBwU2VydmljZSkge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5mcm9udGVnZ0FwcFNlcnZpY2UuZnJvbnRlZ2dBcHAuc3RvcmUuZ2V0U3RhdGUoKSBhcyBGcm9udGVnZ1N0YXRlO1xuICAgIHRoaXMudXBkYXRlVXNlclN0YXRlSWZOZWVkZWQoc3RhdGUuYXV0aCk7XG5cbiAgICAvLyBNZW1vaXplZCBlbnRpdGxlbWVudHMgU3RhdGVcbiAgICB0aGlzLmZyb250ZWdnQXBwU2VydmljZS5mcm9udGVnZ0FwcC5zdG9yZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSB0aGlzLmZyb250ZWdnQXBwU2VydmljZS5mcm9udGVnZ0FwcC5zdG9yZS5nZXRTdGF0ZSgpIGFzIEZyb250ZWdnU3RhdGU7XG4gICAgICB0aGlzLnVwZGF0ZVVzZXJTdGF0ZUlmTmVlZGVkKG5ld1N0YXRlLmF1dGgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXIgZW50aXRsZW1lbnRzIHN1YmplY3QgY2hhbmdlIGV2ZW50IGlmIHRoZSBlbnRpdGxlbWVudHMgcmVmZXJlbmNlIGNoYW5nZXNcbiAgICogTm8gbmVlZCBmb3IgZGVlcCBlcXVhbCBiZWNhdXNlIHdlIGFscmVhZHkgY2hlY2sgaXQgaW50ZXJuYWxseVxuICAgKiBAcGFyYW0gYXV0aFN0YXRlXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZVVzZXJTdGF0ZUlmTmVlZGVkKGF1dGhTdGF0ZTogQXV0aFN0YXRlKTogdm9pZCB7XG4gICAgY29uc3QgZW50aXRsZW1lbnRzU3RhdGUgPSBhdXRoU3RhdGUudXNlciBhcyBVc2VyO1xuICAgIGlmICh0aGlzLnVzZXJTdGF0ZVN1YmplY3QudmFsdWUgPT09IGVudGl0bGVtZW50c1N0YXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy51c2VyU3RhdGVTdWJqZWN0Lm5leHQoZW50aXRsZW1lbnRzU3RhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiBnaXZlcyB0aGUgYWJpbGl0eSB0byByZXR1cm4gYSBtYW5pcHVsYXRlZCBkYXRhIG9mIHRoZSB1c2VyIHN0YXRlIGFzIGEgc3Vic2NyaXB0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YU1hbmlwdWxhdG9yIE1hbmlwdWxhdG9yIGZ1bmN0aW9uIHRoYXQgcmVjZWl2ZXMgdXNlciBzdGF0ZSBhbmQgcmV0dXJucyBhIG1hbmlwdWxhdGVkIGRhdGFcbiAgICogQHBhcmFtIG9ic2VydmVyIEZvciByZWNlaXZpbmcgbWFuaXB1bGF0ZWQgZGF0YSByZXN1bHRcbiAgICogQHJldHVybnMgYSBzdWJzY3JpcHRpb24gdG8gYmUgYWJsZSB0byB1bnN1YnNjcmliZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRVc2VyTWFuaXB1bGF0b3JTdWJzY3JpcHRpb248UmVzdWx0PihcbiAgICBkYXRhTWFuaXB1bGF0b3I6ICh1c2VyOiBVc2VyKSA9PiBSZXN1bHQsIFxuICAgIG9ic2VydmVyOiBQYXJ0aWFsT2JzZXJ2ZXI8UmVzdWx0PlxuICApOiBTdWJzY3JpcHRpb24ge1xuICAgIC8vIHVzZWQgZm9yIGNvbXB1dGluZyB0aGUgZW50aXRsZW1lbnRzIHJlc3VsdCBiZWNhdXNlIHdlIGRvbid0IHJldHVybiB0aGUgc3RhdGUgaXRzZWxmLCBidXQgYSBjYWxjdWxhdGVkIG9uZVxuICAgIGNvbnN0IHVzZXJTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSZXN1bHQ+KHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIFJlc3VsdCk7XG4gICAgXG4gICAgY29uc3Qgc3RhdGVTdWJzY3JpcHRpb24gPSB0aGlzLnVzZXJTdGF0ZVN1YmplY3Quc3Vic2NyaWJlKHVzZXIgPT4ge1xuICAgICAgdXNlclN1YmplY3QubmV4dChkYXRhTWFuaXB1bGF0b3IodXNlcikpO1xuICAgIH0pO1xuICAgIFxuICAgIC8vIHN1YnNjcmliaW5nIHRoZSBjb25zdW1lciBvYnNlcnZlclxuICAgIGNvbnN0IHVzZXJSZXN1bHRTdWJzY3JpcHRpb24gPSB1c2VyU3ViamVjdC5hc09ic2VydmFibGUoKS5zdWJzY3JpYmUob2JzZXJ2ZXIpXG5cbiAgICAvLyBtb25rZXkgcGF0Y2hlZCB0byBtYW5hZ2UgYm90aCB1bi1zdWJzY3JpcHRpb25zOiBzdGF0ZSBhbmQgdXNlciBtYW5pcHVsYXRlZCByZXN1bHRcbiAgICBjb25zdCBvcmlnaW5hbFVuc3Vic2NyaWJlID0gdXNlclJlc3VsdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZS5iaW5kKHVzZXJSZXN1bHRTdWJzY3JpcHRpb24pO1xuXG4gICAgdXNlclJlc3VsdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSA9ICgpPT57XG4gICAgICBvcmlnaW5hbFVuc3Vic2NyaWJlKCk7XG4gICAgICBzdGF0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH07XG5cbiAgICByZXR1cm4gdXNlclJlc3VsdFN1YnNjcmlwdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gZmVhdHVyZVxuICAgKiBAcGFyYW0gb2JzZXJ2ZXIgRm9yIHJlY2VpdmluZyB0aGUgZmVhdHVyZSBlbnRpdGxlbWVudHMgcmVzdWx0IGluY2x1ZGluZyBpZiB0aGUgdXNlciBpcyBlbnRpdGxlZCB0byB0aGUgZ2l2ZW4gZmVhdHVyZS5cbiAgICogICAgICAgICAgICAgICAgIEF0dGFjaGluZyB0aGUganVzdGlmaWNhdGlvbiBpZiBub3QgZW50aXRsZWRcbiAgICogQHBhcmFtIGN1c3RvbUF0dHJpYnV0ZXMgY29uc3VtZXIgYXR0cmlidXRlc1xuICAgKiBAcmV0dXJucyBhIHN1YnNjcmlwdGlvbiB0byBiZSBhYmxlIHRvIHVuc3Vic2NyaWJlXG4gICAqIEB0aHJvd3Mgd2hlbiBlbnRpdGxlbWVudCBpcyBub3QgZW5hYmxlZCB2aWEgZnJvbnRlZ2cgb3B0aW9uc1xuICAgKi9cbiAgcHVibGljIGZlYXR1cmVFbnRpdGxlbWVudHMkKGZlYXR1cmU6IHN0cmluZywgb2JzZXJ2ZXI6IFBhcnRpYWxPYnNlcnZlcjxFbnRpdGxlbWVudD4sIGN1c3RvbUF0dHJpYnV0ZXM/OiBDdXN0b21BdHRyaWJ1dGVzKTogU3Vic2NyaXB0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5nZXRVc2VyTWFuaXB1bGF0b3JTdWJzY3JpcHRpb248RW50aXRsZW1lbnQ+KFxuICAgICAgKCkgPT4geyByZXR1cm4gdGhpcy5mcm9udGVnZ0FwcFNlcnZpY2UuZnJvbnRlZ2dBcHAuZ2V0RmVhdHVyZUVudGl0bGVtZW50cyhmZWF0dXJlLCBjdXN0b21BdHRyaWJ1dGVzKX0sXG4gICAgICBvYnNlcnZlclxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHBlcm1pc3Npb25cbiAgICogQHBhcmFtIG9ic2VydmVyIEZvciByZWNlaXZpbmcgdGhlIHBlcm1pc3Npb24gZW50aXRsZW1lbnRzIHJlc3VsdCBpbmNsdWRpbmcgaWYgdGhlIHVzZXIgaXMgZW50aXRsZWQgdG8gdGhlIGdpdmVuIHBlcm1pc3Npb24uXG4gICAqICAgICAgICAgICAgICAgICBBdHRhY2hpbmcgdGhlIGp1c3RpZmljYXRpb24gaWYgbm90IGVudGl0bGVkXG4gICAqIEBwYXJhbSBjdXN0b21BdHRyaWJ1dGVzIGNvbnN1bWVyIGF0dHJpYnV0ZXNcbiAgICogQHJldHVybnMgYSBzdWJzY3JpcHRpb24gdG8gYmUgYWJsZSB0byB1bnN1YnNjcmliZVxuICAgKi9cbiAgcHVibGljIHBlcm1pc3Npb25FbnRpdGxlbWVudHMkKHBlcm1pc3Npb246IHN0cmluZywgb2JzZXJ2ZXI6IFBhcnRpYWxPYnNlcnZlcjxFbnRpdGxlbWVudD4sIGN1c3RvbUF0dHJpYnV0ZXM/OiBDdXN0b21BdHRyaWJ1dGVzKTogU3Vic2NyaXB0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5nZXRVc2VyTWFuaXB1bGF0b3JTdWJzY3JpcHRpb248RW50aXRsZW1lbnQ+KFxuICAgICAgKCkgPT4gdGhpcy5mcm9udGVnZ0FwcFNlcnZpY2UuZnJvbnRlZ2dBcHAuZ2V0UGVybWlzc2lvbkVudGl0bGVtZW50cyhwZXJtaXNzaW9uLCBjdXN0b21BdHRyaWJ1dGVzKSxcbiAgICAgIG9ic2VydmVyXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gb3B0aW9ucyBwZXJtaXNzaW9uS2V5IG9yIGZlYXR1cmVLZXkgaW4gYW4gb3B0aW9ucyBvYmplY3RcbiAgICogQHBhcmFtIG9ic2VydmVyIEZvciByZWNlaXZpbmcgdGhlIHBlcm1pc3Npb24gZW50aXRsZW1lbnRzIHJlc3VsdCBpbmNsdWRpbmcgaWYgdGhlIHVzZXIgaXMgZW50aXRsZWQgdG8gdGhlIGdpdmVuIHBlcm1pc3Npb24uXG4gICAqICAgICAgICAgICAgICAgICBBdHRhY2hpbmcgdGhlIGp1c3RpZmljYXRpb24gaWYgbm90IGVudGl0bGVkXG4gICAqIEBwYXJhbSBjdXN0b21BdHRyaWJ1dGVzIGNvbnN1bWVyIGF0dHJpYnV0ZXNcbiAgICogQHJldHVybnMgYSBzdWJzY3JpcHRpb24gdG8gYmUgYWJsZSB0byB1bnN1YnNjcmliZVxuICAgKi9cbiAgcHVibGljIGVudGl0bGVtZW50cyQob3B0aW9uczogRW50aXRsZWRUb09wdGlvbnMsIG9ic2VydmVyOiBQYXJ0aWFsT2JzZXJ2ZXI8RW50aXRsZW1lbnQ+LCBjdXN0b21BdHRyaWJ1dGVzPzogQ3VzdG9tQXR0cmlidXRlcyk6IFN1YnNjcmlwdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VXNlck1hbmlwdWxhdG9yU3Vic2NyaXB0aW9uPEVudGl0bGVtZW50PihcbiAgICAgICgpID0+IHRoaXMuZnJvbnRlZ2dBcHBTZXJ2aWNlLmZyb250ZWdnQXBwLmdldEVudGl0bGVtZW50cyhvcHRpb25zLCBjdXN0b21BdHRyaWJ1dGVzKSxcbiAgICAgIG9ic2VydmVyXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGVudGl0bGVtZW50cyBkYXRhIG9uIGRlbWFuZFxuICAgKiBAcGFyYW0gY2FsbGJhY2sgY2FsbGVkIG9uIHJlcXVlc3QgY29tcGxldGVkIHdpdGggdHJ1ZSBpZiBzdWNjZWVkZWQsIGZhbHNlIGlmIGZhaWxlZFxuICAgKi9cbiAgcHVibGljIGxvYWRFbnRpdGxlbWVudHMoY2FsbGJhY2s/OiBMb2FkRW50aXRsZW1lbnRzQ2FsbGJhY2spOiB2b2lkIHtcbiAgICB0aGlzLmZyb250ZWdnQXBwU2VydmljZS5mcm9udGVnZ0FwcC5sb2FkRW50aXRsZW1lbnRzKGNhbGxiYWNrKTtcbiAgfVxufVxuIl19