@tuki-io/tuki-widgets 0.0.219-dev.62 → 0.0.219-dev.63
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/di2mt/widgets/site-upgrade/site-upgrade.module.d.ts +9 -8
- package/di2mt/widgets/user-upgrade/user-upgrade.module.d.ts +11 -10
- package/esm2020/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.mjs +12 -11
- package/esm2020/di2mt/widgets/site-upgrade/site-upgrade.module.mjs +7 -3
- package/esm2020/di2mt/widgets/user-upgrade/user-upgrade-data-table/user-upgrade-data-table.component.mjs +12 -11
- package/esm2020/di2mt/widgets/user-upgrade/user-upgrade.module.mjs +7 -3
- package/esm2020/locations/src/locations.component.mjs +11 -11
- package/esm2020/locations/src/locations.module.mjs +7 -6
- package/esm2020/meetings/src/components/meeting-spaces/meeting-space/meeting-space.component.mjs +9 -9
- package/esm2020/meetings/src/components/meeting-spaces/meeting-spaces.component.mjs +17 -9
- package/esm2020/meetings/src/meetings.module.mjs +7 -6
- package/esm2020/shared/public-api.mjs +2 -1
- package/esm2020/shared/src/ui/tk-loader/tk-loader.component.mjs +34 -0
- package/esm2020/user-creation/src/user-creation.module.mjs +7 -6
- package/esm2020/user-creation/src/widgets/user-creation-wizard/components/user-details-step/user-details-step.component.mjs +16 -16
- package/esm2020/user-creation/src/widgets/user-creation-wizard/components/user-template-step/user-template-step.component.mjs +27 -10
- package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.component.mjs +11 -11
- package/esm2020/user-device-manage/src/associate-lines/associate-lines.component.mjs +10 -10
- package/esm2020/user-device-manage/src/device-manage-widget.component.mjs +11 -11
- package/esm2020/user-device-manage/src/device-settings/device-settings.component.mjs +9 -9
- package/esm2020/user-device-manage/src/line-key-config/line-key-config.component.mjs +9 -9
- package/esm2020/user-device-manage/src/user-device-manage.module.mjs +8 -7
- package/esm2020/user-manage/src/user-manage-widget.component.mjs +12 -12
- package/esm2020/user-manage/src/user-manage.module.mjs +8 -7
- package/esm2020/users-list/src/classes/site-option.mjs +2 -0
- package/esm2020/users-list/src/components/table-toolbar/table-toolbar.component.mjs +18 -4
- package/esm2020/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.mjs +15 -15
- package/esm2020/users-list/src/move-user-wizard/move-user-wizard.component.mjs +5 -5
- package/esm2020/users-list/src/users-list.component.mjs +104 -46
- package/esm2020/users-list/src/users-list.module.mjs +7 -6
- package/esm2020/workspaces/src/components/workspace-detail/workspace-detail.component.mjs +7 -7
- package/esm2020/workspaces/src/components/workspace-device-detail/workspace-device-detail.component.mjs +9 -9
- package/esm2020/workspaces/src/components/workspaces-filters/workspaces-filters.component.mjs +13 -3
- package/esm2020/workspaces/src/types/workspace.mjs +6 -2
- package/esm2020/workspaces/src/workspaces.component.mjs +26 -8
- package/esm2020/workspaces/src/workspaces.module.mjs +7 -6
- package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs +26 -18
- package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-locations.mjs +16 -24
- package/fesm2015/tuki-io-tuki-widgets-locations.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-meetings.mjs +31 -33
- package/fesm2015/tuki-io-tuki-widgets-meetings.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-shared.mjs +31 -1
- package/fesm2015/tuki-io-tuki-widgets-shared.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs +52 -43
- package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs +43 -51
- package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs +20 -29
- package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-users-list.mjs +136 -73
- package/fesm2015/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-workspaces.mjs +64 -37
- package/fesm2015/tuki-io-tuki-widgets-workspaces.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs +26 -18
- package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-locations.mjs +16 -24
- package/fesm2020/tuki-io-tuki-widgets-locations.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-meetings.mjs +31 -33
- package/fesm2020/tuki-io-tuki-widgets-meetings.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-shared.mjs +31 -1
- package/fesm2020/tuki-io-tuki-widgets-shared.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs +51 -43
- package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs +43 -51
- package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs +20 -29
- package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-users-list.mjs +134 -71
- package/fesm2020/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-workspaces.mjs +64 -37
- package/fesm2020/tuki-io-tuki-widgets-workspaces.mjs.map +1 -1
- package/locations/src/locations.module.d.ts +2 -2
- package/meetings/src/meetings.module.d.ts +2 -2
- package/package.json +1 -1
- package/shared/public-api.d.ts +1 -0
- package/shared/src/ui/tk-loader/tk-loader.component.d.ts +15 -0
- package/user-creation/src/user-creation.module.d.ts +3 -3
- package/user-creation/src/widgets/user-creation-wizard/components/user-template-step/user-template-step.component.d.ts +2 -0
- package/user-device-manage/src/user-device-manage.module.d.ts +16 -16
- package/user-manage/src/user-manage.module.d.ts +12 -13
- package/users-list/src/classes/site-option.d.ts +4 -0
- package/users-list/src/components/table-toolbar/table-toolbar.component.d.ts +6 -1
- package/users-list/src/users-list.component.d.ts +11 -1
- package/users-list/src/users-list.module.d.ts +9 -9
- package/workspaces/src/components/workspaces-filters/workspaces-filters.component.d.ts +9 -1
- package/workspaces/src/types/workspace.d.ts +5 -0
- package/workspaces/src/workspaces.component.d.ts +4 -1
- package/workspaces/src/workspaces.module.d.ts +2 -2
- package/esm2020/locations/src/utils/app-loader/app-loader.mjs +0 -14
- package/esm2020/meetings/src/utils/app-loader/app-loader.mjs +0 -14
- package/esm2020/user-creation/src/utils/app-loader/app-loader.mjs +0 -14
- package/esm2020/user-device-manage/src/utils/app-loader/app-loader.mjs +0 -14
- package/esm2020/user-manage/src/utils/app-loader/app-loader.mjs +0 -14
- package/esm2020/users-list/src/utils/app-loader/app-loader.mjs +0 -14
- package/esm2020/workspaces/src/utils/app-loader/app-loader.mjs +0 -14
- package/locations/src/utils/app-loader/app-loader.d.ts +0 -6
- package/meetings/src/utils/app-loader/app-loader.d.ts +0 -6
- package/user-creation/src/utils/app-loader/app-loader.d.ts +0 -6
- package/user-device-manage/src/utils/app-loader/app-loader.d.ts +0 -6
- package/user-manage/src/utils/app-loader/app-loader.d.ts +0 -6
- package/users-list/src/utils/app-loader/app-loader.d.ts +0 -6
- package/workspaces/src/utils/app-loader/app-loader.d.ts +0 -6
|
@@ -7,15 +7,15 @@ import * as i0 from "@angular/core";
|
|
|
7
7
|
import * as i1 from "./services/user.service";
|
|
8
8
|
import * as i2 from "./services/api.service";
|
|
9
9
|
import * as i3 from "./services/dcp-api.service";
|
|
10
|
-
import * as i4 from "@
|
|
11
|
-
import * as i5 from "@angular/
|
|
12
|
-
import * as i6 from "@angular/
|
|
13
|
-
import * as i7 from "@angular/material/
|
|
14
|
-
import * as i8 from "@angular/material/
|
|
15
|
-
import * as i9 from "@angular/material/
|
|
16
|
-
import * as i10 from "@angular/material/
|
|
17
|
-
import * as i11 from "@angular/material/
|
|
18
|
-
import * as i12 from "
|
|
10
|
+
import * as i4 from "@tuki-io/tuki-widgets/shared";
|
|
11
|
+
import * as i5 from "@angular/common";
|
|
12
|
+
import * as i6 from "@angular/forms";
|
|
13
|
+
import * as i7 from "@angular/material/divider";
|
|
14
|
+
import * as i8 from "@angular/material/form-field";
|
|
15
|
+
import * as i9 from "@angular/material/core";
|
|
16
|
+
import * as i10 from "@angular/material/tabs";
|
|
17
|
+
import * as i11 from "@angular/material/select";
|
|
18
|
+
import * as i12 from "@angular/material/slide-toggle";
|
|
19
19
|
import * as i13 from "./user-info/user-info.component";
|
|
20
20
|
import * as i14 from "./lazy-loading-select/lazy-loading-select.component";
|
|
21
21
|
import * as i15 from "./user-calling/user-calling.component";
|
|
@@ -253,10 +253,10 @@ export class UserManageWidgetComponent {
|
|
|
253
253
|
}
|
|
254
254
|
}
|
|
255
255
|
UserManageWidgetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserManageWidgetComponent, deps: [{ token: i1.UserService }, { token: i2.APIService }, { token: i3.DcpApiService }], target: i0.ɵɵFactoryTarget.Component });
|
|
256
|
-
UserManageWidgetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: UserManageWidgetComponent, selector: "app-user-manage-widget", inputs: { token: "token", host: "host", dcpHost: "dcpHost", siteId: "siteId", userId: "userId", deviceName: "deviceName", isLdap: "isLdap" }, outputs: { onSave: "onSave", onChange: "onChange", selectDevice: "selectDevice", goBack: "goBack" }, ngImport: i0, template: "<app-loader *ngIf=\"dataPending || savePending || userService.dataPending\"></app-loader>\r\n\r\n<div *ngIf=\"!dataPending\">\r\n <div class=\"go-back-box\" (click)=\"onGoBack()\">\r\n <div class=\"go-back-box-container\">\r\n <span class=\"app-icon icon-webex-left-arrow\"></span>\r\n <span class=\"go-back-title\">Users</span>\r\n </div>\r\n </div>\r\n\r\n <app-user-info\r\n *ngIf=\"user\"\r\n [name]=\"userName\"\r\n [email]=\"user.email\"\r\n [active]=\"true\"\r\n [position]=\"user.siteName ? 'Member of ' + user.siteName : ''\"\r\n [cucmid]=\"user.cucmId\">\r\n </app-user-info>\r\n\r\n <!-- Summary isn't available for Webex users, so they start on the Profile tab -->\r\n <mat-tab-group disableRipple class=\"tabs-container\" [selectedIndex]=\"webexUUID ? 1 : 0\">\r\n <mat-tab label=\"Summary\" [disabled]=\"!!webexUUID\">\r\n <app-user-summary *ngIf=\"user\" [user]=\"user\"></app-user-summary>\r\n </mat-tab>\r\n <mat-tab label=\"Profile\">\r\n <ng-container *ngTemplateOutlet=\"webexUUID ? webexUserProfile : userProfile\">\r\n </ng-container>\r\n </mat-tab>\r\n <!-- <mat-tab label=\"General\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <!-- <mat-tab label=\"Meetings\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <mat-tab label=\"Calling\" [disabled]=\"!primaryLineReference\">\r\n <app-user-calling\r\n *ngIf=\"primaryLineReference\"\r\n [siteId]=\"siteId\"\r\n (onExtensionChange)=\"onExtensionChange()\"\r\n [primaryLineDirectoryNumber]=\"primaryLineReference\">\r\n </app-user-calling>\r\n </mat-tab>\r\n <!-- <mat-tab label=\"Messaging\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <!-- <mat-tab label=\"Hybrid Services\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <mat-tab label=\"Devices\" [disabled]=\"!user?.devices || !user?.devices.length\">\r\n <app-device-list\r\n [devices]=\"user?.devices\"\r\n (onDeviceSelect)=\"onDeviceSelect($event)\">\r\n </app-device-list>\r\n </mat-tab>\r\n <!-- <mat-tab label=\"Vidcast\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <mat-tab label=\"Lines\" [disabled]=\"true\"></mat-tab>\r\n <mat-tab label=\"Features\" [disabled]=\"true\"></mat-tab>\r\n </mat-tab-group>\r\n\r\n <!-- keeps the bottom of the content reachable above the fixed panel -->\r\n <!-- <div class=\"actions-panel-spacer\" [class.actions-panel-spacer--visible]=\"hasUnsavedChanges()\"></div>\r\n <div class=\"actions-panel\"\r\n [class.actions-panel--visible]=\"hasUnsavedChanges()\"\r\n [attr.aria-hidden]=\"!hasUnsavedChanges()\">\r\n <div class=\"actions-panel__actions\">\r\n <button type=\"button\" class=\"btn-outline\" [disabled]=\"savePending\" (click)=\"cancelChanges()\">Cancel</button>\r\n <button type=\"button\" class=\"btn-filled\" [disabled]=\"isSavingDisabled()\" (click)=\"saveChanges()\">Save</button>\r\n </div>\r\n </div> --> \r\n\r\n <ng-template #userProfile>\r\n <form *ngIf=\"user && form\" [formGroup]=\"form\">\r\n <div class=\"info-boxes-container\">\r\n\r\n <!-- USER INFO BOX-->\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">User Details</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">User Id</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"User Id\" formControlName=\"userid\" (input)=\"onChangeField('userid')\">\r\n <span class=\"field-error\" *ngIf=\"form.get('userid')?.hasError('required')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n This field is required\r\n </span>\r\n <span class=\"field-error\" *ngIf=\"form.get('userid')?.hasError('exist')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n User ID already exists\r\n </span>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Primary email</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Primary email\" formControlName=\"email\" (input)=\"onChangeField('email')\">\r\n <span class=\"field-error\" *ngIf=\"form.get('email')?.touched && form.get('email')?.hasError('required')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n This field is required\r\n </span>\r\n <span class=\"field-error\" *ngIf=\"form.get('email')?.touched && form.get('email')?.hasError('pattern')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n Please enter valid email\r\n </span>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Fisrt Name</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Fisrt Name\" formControlName=\"firstName\" (input)=\"onChangeField('firstName')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Last Name</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Last Name\" formControlName=\"lastName\" (input)=\"onChangeField('lastName')\">\r\n <span class=\"field-error\" *ngIf=\"form.get('lastName')?.touched && form.get('lastName')?.hasError('required')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n This field is required\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <!-- USER INFO BOX-->\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">General User Info</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">Department</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Department\" formControlName=\"department\" type=\"text\" (input)=\"onChangeField('department')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Manager user ID</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Manager user ID\" formControlName=\"manager\" type=\"text\" (input)=\"onChangeField('manager')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Associated PC</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Associated PC\" formControlName=\"associatedPc\" type=\"text\" (input)=\"onChangeField('associatedPc')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Digest credentials</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Digest credentials\" formControlName=\"digestCredentials\" type=\"text\"\r\n (input)=\"onChangeField('digestCredentials')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">User profile</div>\r\n <app-lazy-loading-select\r\n [siteId]=\"siteId\"\r\n [controlName]=\"'userProfile'\"\r\n [form]=\"user.form\"\r\n (changeField)=\"changeField('userProfile')\"\r\n [optionsToken]=\"'userProfiles'\"\r\n ></app-lazy-loading-select>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Mobile voice access</div>\r\n <mat-slide-toggle class=\"custom-toggle\"\r\n formControlName=\"enableMobileVoiceAccess\"\r\n (change)=\"onChangeField('enableMobileVoiceAccess')\"\r\n [checked]=\"user.enableMobileVoiceAccess\">\r\n </mat-slide-toggle>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Userlocale</div>\r\n <app-lazy-loading-select\r\n [siteId]=\"siteId\"\r\n [controlName]=\"'userLocale'\"\r\n [form]=\"user.form\"\r\n (changeField)=\"changeField($event)\"\r\n [optionsToken]=\"'userLocales'\"\r\n [default]=\"{key: '', value: 'None', disabled: false}\">\r\n </app-lazy-loading-select>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Confirm digest credentials</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Confirm digest credentials\" formControlName=\"confirmDigestCredentials\" type=\"text\"\r\n (input)=\"onChangeField('confirmDigestCredentials')\">\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <!-- USER INFO BOX-->\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">Contact Information</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">Middle Name</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"text\" placeholder=\"Middle Name\" formControlName=\"middleName\" (input)=\"onChangeField('middleName')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Telephone Number</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"number\" placeholder=\"Telephone Number\" formControlName=\"telephoneNumber\"\r\n (input)=\"onChangeField('telephoneNumber')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Mobile Number</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"number\" placeholder=\"Mobile Number\" formControlName=\"mobileNumber\" (input)=\"onChangeField('mobileNumber')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Directory URI</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"text\" placeholder=\"Directory URI\" formControlName=\"directoryUri\" (input)=\"onChangeField('directoryUri')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Title</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"text\" placeholder=\"Title\" formControlName=\"title\" (input)=\"onChangeField('title')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Home Number</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"number\" placeholder=\"Home Number\" formControlName=\"homeNumber\" (input)=\"onChangeField('homeNumber')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Pager Number</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"number\" placeholder=\"Pager Number\" formControlName=\"pagerNumber\" (input)=\"onChangeField('pagerNumber')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Display Name</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"text\" placeholder=\"Display Name\" formControlName=\"displayName\" (input)=\"onChangeField('displayName')\">\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">EM Configurations</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">BLF Presence Group</div>\r\n <app-lazy-loading-select\r\n [siteId]=\"siteId\"\r\n [controlName]=\"'presenceGroup'\"\r\n [form]=\"user.form\"\r\n (changeField)=\"changeField('presenceGroup')\"\r\n [optionsToken]=\"'userProfiles'\"\r\n ></app-lazy-loading-select>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Subscribe CSS</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Subscribe CSS\" formControlName=\"subscribeCss\" type=\"text\" (input)=\"onChangeField('subscribeCss')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Allow Control of Device from CTI</div>\r\n <mat-slide-toggle class=\"custom-toggle\"\r\n formControlName=\"allowDeviceControlFromCti\"\r\n (change)=\"onChangeField('allowDeviceControlFromCti')\">\r\n </mat-slide-toggle>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Enable Extension Mobility Cross Cluster</div>\r\n <mat-slide-toggle class=\"custom-toggle\"\r\n formControlName=\"enableCrossClusterEm\"\r\n (change)=\"onChangeField('enableCrossClusterEm')\">\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">Multilevel Precedence and Preemption Authorization</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">MLPP User Identification Number</div>\r\n <app-lazy-loading-select\r\n [siteId]=\"siteId\"\r\n [controlName]=\"'userProfile'\"\r\n [form]=\"user.form\"\r\n (changeField)=\"changeField('userProfile')\"\r\n [optionsToken]=\"'userProfiles'\">\r\n </app-lazy-loading-select>\r\n </div>\r\n <mat-divider />\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">MLPP Precedence Authorization Level</div>\r\n <mat-form-field appearance=\"outline\" class=\"simple-select\">\r\n <mat-select formControlName=\"mlppPrecedencePattern\"\r\n (selectionChange)=\"changeField('mlppPrecedencePattern')\">\r\n <mat-option *ngFor=\"let option of authLevelOptions\" [value]=\"option\">\r\n {{option}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <mat-divider />\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Enable MLPP</div>\r\n <mat-slide-toggle class=\"custom-toggle\"\r\n formControlName=\"enableMobileVoiceAccess\"\r\n (change)=\"onChangeField('enableMobileVoiceAccess')\"\r\n [checked]=\"user.enableMobileVoiceAccess\">\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">Service Settings</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Home Cluster</div>\r\n <mat-slide-toggle class=\"custom-toggle\"\r\n formControlName=\"homeCluster\"\r\n (change)=\"onChangeField('homeCluster')\">\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n </div>\r\n </form>\r\n </ng-template>\r\n\r\n <ng-template #webexUserProfile>\n <form *ngIf=\"user && form\" [formGroup]=\"form\">\n <div class=\"info-boxes-container\">\n\n <!-- USER INFO BOX-->\n <section class=\"card vertical-card\">\n <div class=\"header\">\n <span class=\"title\">User Details</span>\n </div>\n <div class=\"main-content\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">User Id</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"User Id\" formControlName=\"userid\" (input)=\"onChangeField('userid')\">\n <span class=\"field-error\" *ngIf=\"form.get('userid')?.hasError('required')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n This field is required\n </span>\n <span class=\"field-error\" *ngIf=\"form.get('userid')?.hasError('exist')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n User ID already exists\n </span>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Primary email</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Primary email\" formControlName=\"email\" (input)=\"onChangeField('email')\">\n <span class=\"field-error\" *ngIf=\"form.get('email')?.touched && form.get('email')?.hasError('required')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n This field is required\n </span>\n <span class=\"field-error\" *ngIf=\"form.get('email')?.touched && form.get('email')?.hasError('pattern')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n Please enter valid email\n </span>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Fisrt Name</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Fisrt Name\" formControlName=\"firstName\" (input)=\"onChangeField('firstName')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top\">\n <div class=\"input-holder__name\">Last Name</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Last Name\" formControlName=\"lastName\" (input)=\"onChangeField('lastName')\">\n <span class=\"field-error\" *ngIf=\"form.get('lastName')?.touched && form.get('lastName')?.hasError('required')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n This field is required\n </span>\n </div>\n </div>\n </div>\n </section>\n\n <!-- USER INFO BOX-->\n <section class=\"card vertical-card\">\n <div class=\"header\">\n <span class=\"title\">General User Info</span>\n </div>\n <div class=\"main-content\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">Department</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Department\" formControlName=\"department\" type=\"text\" (input)=\"onChangeField('department')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Manager user ID</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Manager user ID\" formControlName=\"manager\" type=\"text\" (input)=\"onChangeField('manager')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Associated PC</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Associated PC\" formControlName=\"associatedPc\" type=\"text\" (input)=\"onChangeField('associatedPc')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Digest credentials</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Digest credentials\" formControlName=\"digestCredentials\" type=\"text\"\n (input)=\"onChangeField('digestCredentials')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">User profile</div>\n <app-lazy-loading-select\n [siteId]=\"siteId\"\n [controlName]=\"'userProfile'\"\n [form]=\"user.form\"\n (changeField)=\"changeField('userProfile')\"\n [optionsToken]=\"'userProfiles'\"\n ></app-lazy-loading-select>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Mobile voice access</div>\n <mat-slide-toggle class=\"custom-toggle\"\n formControlName=\"enableMobileVoiceAccess\"\n (change)=\"onChangeField('enableMobileVoiceAccess')\"\n [checked]=\"user.enableMobileVoiceAccess\">\n </mat-slide-toggle>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Userlocale</div>\n <app-lazy-loading-select\n [siteId]=\"siteId\"\n [controlName]=\"'userLocale'\"\n [form]=\"user.form\"\n (changeField)=\"changeField($event)\"\n [optionsToken]=\"'userLocales'\"\n [default]=\"{key: '', value: 'None', disabled: false}\">\n </app-lazy-loading-select>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top\">\n <div class=\"input-holder__name\">Confirm digest credentials</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Confirm digest credentials\" formControlName=\"confirmDigestCredentials\" type=\"text\"\n (input)=\"onChangeField('confirmDigestCredentials')\">\n </div>\n </div>\n </div>\n </section>\n\n <!-- USER INFO BOX-->\n <section class=\"card vertical-card\">\n <div class=\"header\">\n <span class=\"title\">Contact Information</span>\n </div>\n <div class=\"main-content\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">Middle Name</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"text\" placeholder=\"Middle Name\" formControlName=\"middleName\" (input)=\"onChangeField('middleName')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Telephone Number</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"number\" placeholder=\"Telephone Number\" formControlName=\"telephoneNumber\"\n (input)=\"onChangeField('telephoneNumber')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Mobile Number</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"number\" placeholder=\"Mobile Number\" formControlName=\"mobileNumber\" (input)=\"onChangeField('mobileNumber')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Digest credentials</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"text\" placeholder=\"Digest credentials\" formControlName=\"digestCredentials\"\n (input)=\"onChangeField('digestCredentials')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Directory URI</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"text\" placeholder=\"Directory URI\" formControlName=\"directoryUri\" (input)=\"onChangeField('directoryUri')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Title</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"text\" placeholder=\"Title\" formControlName=\"title\" (input)=\"onChangeField('title')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Home Number</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"number\" placeholder=\"Home Number\" formControlName=\"homeNumber\" (input)=\"onChangeField('homeNumber')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Pager Number</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"number\" placeholder=\"Pager Number\" formControlName=\"pagerNumber\" (input)=\"onChangeField('pagerNumber')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top\">\n <div class=\"input-holder__name\">Display Name</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"text\" placeholder=\"Display Name\" formControlName=\"displayName\" (input)=\"onChangeField('displayName')\">\n </div>\n </div>\n </div>\n </section>\n\n </div>\n </form>\n </ng-template>\n</div>\r\n\r\n<!-- <button mat-raised-button color=\"primary\" (click)=\"save()\" >Save</button> -->", styles: ["@charset \"UTF-8\";@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";.fa:hover{color:#0d56aa!important}.mat-icon-button{background:transparent}.icon-webex-box{width:2rem;height:2rem;font-size:.7rem;line-height:1rem;display:inline-block;background:#d0d0d0;border-radius:2rem;line-height:40px;text-align:center}.icon-webex{filter:invert(12%) sepia(14%) saturate(4%) hue-rotate(354deg) brightness(103%) contrast(90%);background-repeat:no-repeat;background-position:center;display:inline-block;height:1rem;width:1rem}.icon-webex-user{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22%3F%3E%3Csvg id%3D%22a%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 viewBox%3D%220 0 16.67 15.56%22%3E%3Cdefs%3E%3Cstyle%3E.b%7Bfill%3Anone%3Bstroke%3A%232c355d%3Bstroke-width%3A1.4px%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Cpath class%3D%22b%22 d%3D%22M4.87%2C3.89c0-1.72%2C1.51-3.19%2C3.47-3.19s3.47%2C1.47%2C3.47%2C3.19-1.51%2C3.19-3.47%2C3.19-3.47-1.47-3.47-3.19ZM.7%2C12.64c0-.37%2C.19-.76%2C.67-1.17%2C.48-.41%2C1.17-.78%2C2-1.09%2C1.66-.62%2C3.66-.93%2C4.97-.93s3.31%2C.31%2C4.97%2C.93c.83%2C.31%2C1.52%2C.68%2C2%2C1.09%2C.47%2C.41%2C.67%2C.8%2C.67%2C1.17v2.22H.7v-2.22Z%22%2F%3E%3C%2Fsvg%3E\")}.icon-user-status{display:inline-block}*{margin:0}body{background:#f7f7f7}body,th,td{font-family:Poppins,Poppins,sans-serif;font-size:14px}th{color:#0000008a;text-align:left}td{box-sizing:border-box;padding:10px 5px 10px 0}.content-box{margin:auto;position:relative;width:95%}.content-box table{width:100%}.edit-icon-td{width:50px;position:relative}.edit-icon-td button{position:absolute;top:4px}.mat-progress-spinner circle,.mat-spinner circle{stroke:gray!important}.data-loader{position:absolute;top:calc(50% - 25px);left:calc(50% - 25px)}.flex-box{display:flex;justify-content:flex-start}.spinner-container{width:100%;display:flex;justify-content:center;align-items:center}.spinner-container ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:#000}.mat-divider{margin:5px 0!important}.actions-panel{position:fixed;left:0;right:0;bottom:0;z-index:100;background:#dedede;border-top:1px solid rgba(0,0,0,.2);padding:.75rem 1.5rem;transform:translateY(100%);visibility:hidden;transition:transform .25s ease-in-out,visibility 0s linear .25s}.actions-panel--visible{transform:translateY(0);visibility:visible;transition:transform .25s ease-in-out,visibility 0s linear 0s}.actions-panel__actions{display:flex;justify-content:flex-end;gap:.75rem}.actions-panel-spacer{height:0;transition:height .25s ease-in-out}.actions-panel-spacer--visible{height:4rem}@media (prefers-reduced-motion: reduce){.actions-panel,.actions-panel--visible,.actions-panel-spacer{transition:none}}.btn-outline,.btn-filled{padding:.313rem .75rem;border-radius:50px;font-weight:500;font-size:.875rem;font-family:Poppins,Poppins,sans-serif;cursor:pointer;transition:background-color .1s ease-in-out;white-space:nowrap}.btn-outline{background:transparent;border:1px solid rgba(0,0,0,.2);color:#000000f2}.btn-outline:hover:not(:disabled){background:rgba(0,0,0,.0705882353)}.btn-outline:disabled{color:#babcc5;border-color:#dfe3e7;cursor:not-allowed}.btn-filled{background:rgba(0,0,0,.9490196078);color:#fff;border:1px solid transparent}.btn-filled:hover:not(:disabled){background:#2a2a2a}.btn-filled:disabled{background:#DFE3E7;color:#babcc5;cursor:not-allowed}.info-boxes-container{padding:24px 0;display:flex;flex-direction:column;gap:3rem}.info-boxes-container .card{display:flex;flex-direction:column;padding:1.5rem;border:1px solid rgba(0,0,0,.2);border-radius:.5rem;background:#ffffff;min-width:0;font-family:Poppins,Poppins,sans-serif;gap:1.5rem}.info-boxes-container .card.vertical-card{flex-direction:row}.info-boxes-container .card.vertical-card .main-content{gap:0}.info-boxes-container .card.vertical-card .main-content .mat-divider{margin:0!important;border-top-color:#0003!important}.info-boxes-container .card.vertical-card .main-content .input-holder{min-height:2rem;box-sizing:content-box;display:flex;align-items:center;gap:3.25rem}.info-boxes-container .card.vertical-card .main-content .input-holder.input-holder-top{padding:.75rem 0 0}.info-boxes-container .card.vertical-card .main-content .input-holder.input-holder-bottom{padding:0 0 .75rem}.info-boxes-container .card.vertical-card .main-content .input-holder.input-holder-top-bottom{padding:.75rem 0}.info-boxes-container .card.vertical-card .main-content .input-holder .input-holder__name{max-width:15rem;width:15rem;flex-shrink:0;color:#000000f2;font-size:.875rem;font-weight:400;white-space:normal;overflow-wrap:break-word}.info-boxes-container .card.vertical-card .main-content .input-holder .input-holder__field{display:flex;flex-direction:column;gap:.375rem}.info-boxes-container .card.vertical-card .main-content .input-holder .plain-input{width:calc(14.25rem - 26px);max-width:calc(100% - 26px);height:21px;padding:4px 12px;box-sizing:content-box;background:#fff;border:solid .0625rem rgba(0,0,0,.5019607843)!important;border-radius:8px;font-family:inherit;font-size:.875rem;font-weight:400;color:#000000f2}.info-boxes-container .card.vertical-card .main-content .input-holder .plain-input:hover{background-color:#00000012!important}.info-boxes-container .card.vertical-card .main-content .input-holder .plain-input:focus{color:#000000b3;background:#fff;border:solid .0625rem rgba(0,0,0,.5019607843)!important;box-shadow:0 0 0 .12rem #fff,0 0 0 .25rem #1170cf,0 0 0 .3rem #1170cf59;outline:none}.info-boxes-container .card.vertical-card .main-content .input-holder app-lazy-loading-select,.info-boxes-container .card.vertical-card .main-content .input-holder .mat-form-field.simple-select{width:14.25rem!important;max-width:14.25rem!important}.info-boxes-container .card.vertical-card .main-content .input-holder .field-error{display:flex;align-items:center;gap:.375rem;color:#c73636;font-size:.75rem}.info-boxes-container .card .header{display:flex;align-items:start;width:15rem;flex-shrink:0}.info-boxes-container .card .header .title{font-weight:500;font-size:1rem;font-family:Poppins,Poppins,sans-serif;color:#000000f2}.info-boxes-container .card .main-content{display:flex;flex-direction:column;min-width:0;gap:1.5rem;flex:1}.header-box{height:60px;width:100%;line-height:60px;background:white;border-bottom:1px solid #dedddd}.header-box .header-back-block{float:left}.header-box .header-button-block{float:right}.webex-table{width:100%;margin:auto}.webex-table tr{border-bottom:1px solid #dedede}.webex-table th{background:#f7f7f7;color:#636363;font-size:12px}.webex-table td{background:#fff;color:#636363;font-size:14px}.webex-table tr:hover td{background:#ededed;cursor:pointer}.webex-table th.mat-header-cell,.webex-table td.mat-cell,.webex-table td.mat-footer-cell{border-bottom:1px solid #dedede}.webex-table tr.mat-header-row{height:37px}.mat-form-field{padding:0 0 5px;width:93%}.mat-form-field.simple-select{padding:0}.mat-form-field.simple-select ::ng-deep .mat-form-field-outline-start,.mat-form-field.simple-select ::ng-deep .mat-form-field-outline-gap,.mat-form-field.simple-select ::ng-deep .mat-form-field-outline-end{border-color:#00000080!important}.mat-form-field.simple-select.mat-focused ::ng-deep .mat-form-field-outline{box-shadow:0 0 0 .12rem #fff,0 0 0 .25rem #1170cf,0 0 0 .3rem #1170cf59;border-radius:6px}.mat-form-field.mat-form-field-disabled{border-bottom:none}.mat-error{color:#c73636;margin:13px 0 0}.select-box{border-radius:30px;background:#f3f6f6;border:1px solid #e2e9ef;height:35px;position:relative}.select-box select{border:none!important;background:transparent;height:100%;width:92%;margin:auto;display:block}option:focus,option:focus-visible{border:none!important;outline:none!important}option{height:30px;cursor:pointer;color:#636363}option:hover{background:#ededed!important}.mat-select{height:100%!important}table{border-collapse:collapse;border-spacing:0}.mat-form-field-appearance-outline .mat-form-field-infix{padding:0!important}.mat-divider{margin:12px 0}::ng-deep .mat-form-field-wrapper{height:30px}::ng-deep .mat-form-field-flex{height:30px}::ng-deep .mat-form-field-flex .mat-form-field-outline-start{display:none}::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{height:35px}:ng-deep .mat-form-field-outline .mat-form-field-outline-thick{height:35px}::ng-deep .mat-select{line-height:20px}::ng-deep .mat-form-field-infix{border-top:0px!important}::ng-deep .mat-tab-group{font-family:Inter,sans-serif}::ng-deep .mat-tab-label{font-weight:500!important;font-size:.875rem!important;height:auto!important;min-width:auto!important;padding:0!important;opacity:1!important;color:#000!important;margin:0!important;box-shadow:0 -3px #000000e6;margin-bottom:.225rem!important;color:#0009!important}::ng-deep .mat-tab-label.mat-tab-label-active .mat-tab-label-content{color:#000!important;font-weight:500!important;font-size:.875rem!important}::ng-deep .mat-ink-bar{background-color:#000!important;height:3px!important}::ng-deep .mat-tab-labels{gap:30px;border-bottom:.0625rem solid rgba(0,0,0,.4)}::ng-deep .mat-tab-labels .mat-tab-label{font-size:.875rem!important;color:#181818!important}::ng-deep .mat-tab-labels .mat-tab-label.mat-tab-label-active .mat-tab-label-content{color:#000!important;font-weight:500!important;font-size:.875rem!important}::ng-deep .mat-progress-spinner{position:absolute!important;top:40%;left:45%}.app-icon{height:20px;width:20px;display:inline-block;cursor:pointer;background-repeat:no-repeat;background-position:center}.app-icon{transition:all .15s ease-out}.icon-webex-right-arrow{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2220%22 height%3D%2220%22 viewBox%3D%220 0 20 20%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Cg id%3D%22arrow-right%22%3E%0D%3Cpath id%3D%22Vector%22 d%3D%22M14.0812 9.66902L6.58119 2.16902C6.53813 2.12351 6.48638 2.0871 6.429 2.06193C6.37162 2.03677 6.30978 2.02336 6.24713 2.0225C6.18448 2.02165 6.1223 2.03336 6.06425 2.05695C6.00621 2.08053 5.95348 2.11552 5.90919 2.15983C5.8649 2.20415 5.82994 2.25689 5.80638 2.31495C5.78282 2.373 5.77113 2.43519 5.77202 2.49784C5.77291 2.56049 5.78634 2.62232 5.81153 2.67969C5.83673 2.73705 5.87316 2.78879 5.91869 2.83183L13.0874 10.0003L5.91869 17.169C5.87316 17.2121 5.83673 17.2638 5.81153 17.3212C5.78634 17.3785 5.77291 17.4404 5.77202 17.503C5.77113 17.5657 5.78282 17.6279 5.80638 17.6859C5.82994 17.744 5.8649 17.7967 5.90919 17.841C5.95348 17.8853 6.00621 17.9203 6.06425 17.9439C6.1223 17.9675 6.18448 17.9792 6.24713 17.9783C6.30978 17.9775 6.37162 17.9641 6.429 17.9389C6.48638 17.9138 6.53813 17.8773 6.58119 17.8318L14.0812 10.3318C14.1691 10.2439 14.2184 10.1247 14.2184 10.0004C14.2184 9.87613 14.1691 9.75692 14.0812 9.66902Z%22 fill%3D%22%230F0F0F%22%2F%3E%0D%3C%2Fg%3E%0D%3C%2Fsvg%3E%0D\")}.icon-webex-left-arrow{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Cg id%3D%22arrow-left%22%3E%0D%3Cpath id%3D%22Vector%22 d%3D%22M5.70746 7.99987L11.3539 2.35352C11.4453 2.25928 11.496 2.13287 11.495 2.00159C11.494 1.8703 11.4414 1.74467 11.3486 1.65183C11.2558 1.55899 11.1301 1.50639 10.9988 1.50539C10.8676 1.50438 10.7411 1.55506 10.6469 1.64647L4.64691 7.64647C4.55316 7.74023 4.50049 7.8674 4.50049 7.99999C4.50049 8.13259 4.55316 8.25975 4.64691 8.35352L10.6469 14.3535C10.6931 14.4011 10.7482 14.439 10.8092 14.4651C10.8702 14.4912 10.9357 14.5049 11.002 14.5054C11.0683 14.5059 11.134 14.4932 11.1954 14.468C11.2567 14.4429 11.3125 14.4058 11.3593 14.3589C11.4062 14.312 11.4433 14.2563 11.4685 14.1949C11.4936 14.1336 11.5063 14.0679 11.5058 14.0016C11.5053 13.9353 11.4916 13.8697 11.4655 13.8088C11.4394 13.7478 11.4015 13.6926 11.3539 13.6465L5.70746 7.99987Z%22 fill%3D%22black%22 fill-opacity%3D%220.95%22%2F%3E%0D%3C%2Fg%3E%0D%3C%2Fsvg%3E%0D\")}.go-back-box{background:white;border-bottom:rgba(0,0,0,.2) 1px solid;height:60px;width:100%;line-height:60px;cursor:pointer}.go-back-box-container{padding:0 1rem;display:flex;justify-content:flex-start}.go-back-box-container .icon-webex-left-arrow,.go-back-box-container .go-back-title{display:block;height:60px}.go-back-box-container .go-back-title{line-height:61px}.go-back-title{display:inline-block;margin:0 10px}.tabs-container{padding:1.5rem 4.375rem 0}::ng-deep .custom-toggle .mat-slide-toggle-bar{position:relative;width:48px;height:25px;flex-shrink:0;border-radius:13px;background-color:#ccc}::ng-deep .custom-toggle .mat-slide-toggle-thumb{height:20px;width:20px;position:absolute;border-radius:50%;display:flex;align-items:center;justify-content:center;left:3px;top:5px;background-color:#fff!important}::ng-deep .custom-toggle .mat-slide-toggle-thumb:after{content:\"\\d7\";font-size:14px;color:#8e9fb7;line-height:1;display:block;pointer-events:none;transform:translateY(0)}::ng-deep .custom-toggle.mat-checked .mat-slide-toggle-thumb{left:calc(100% - 11px)!important}::ng-deep .custom-toggle.mat-checked .mat-slide-toggle-thumb:after{content:\"\\2713\";color:#0d56aa;font-weight:700;font-size:10px}::ng-deep .custom-toggle.mat-checked .mat-slide-toggle-bar{background:#1170cf!important}::ng-deep .custom-toggle.mat-checked .mat-slide-toggle-bar:hover{background:#0353a8!important}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i9.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { kind: "component", type: i9.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i10.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i11.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i12.AppLoaderComponent, selector: "app-loader" }, { kind: "component", type: i13.UserInfoComponent, selector: "app-user-info", inputs: ["name", "active", "email", "position", "cucmid"] }, { kind: "component", type: i14.LazyLoadingSelectComponent, selector: "app-lazy-loading-select", inputs: ["siteId", "form", "standalone", "placeholder", "controlName", "optionsToken", "appearance", "errorCode", "errorText", "default", "id"], outputs: ["changeField"] }, { kind: "component", type: i15.UserCallingComponent, selector: "app-user-calling", inputs: ["siteId", "userId", "primaryLineDirectoryNumber"], outputs: ["onExtensionChange"] }, { kind: "component", type: i16.DeviceListComponent, selector: "app-device-list", inputs: ["devices"], outputs: ["onDeviceSelect"] }, { kind: "component", type: i17.UserSummaryComponent, selector: "app-user-summary", inputs: ["user"] }] });
|
|
256
|
+
UserManageWidgetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: UserManageWidgetComponent, selector: "app-user-manage-widget", inputs: { token: "token", host: "host", dcpHost: "dcpHost", siteId: "siteId", userId: "userId", deviceName: "deviceName", isLdap: "isLdap" }, outputs: { onSave: "onSave", onChange: "onChange", selectDevice: "selectDevice", goBack: "goBack" }, ngImport: i0, template: "<tk-loader *ngIf=\"dataPending || savePending || userService.dataPending\"></tk-loader>\r\n\r\n<div *ngIf=\"!dataPending\">\r\n <div class=\"go-back-box\" (click)=\"onGoBack()\">\r\n <div class=\"go-back-box-container\">\r\n <span class=\"app-icon icon-webex-left-arrow\"></span>\r\n <span class=\"go-back-title\">Users</span>\r\n </div>\r\n </div>\r\n\r\n <app-user-info\r\n *ngIf=\"user\"\r\n [name]=\"userName\"\r\n [email]=\"user.email\"\r\n [active]=\"true\"\r\n [position]=\"user.siteName ? 'Member of ' + user.siteName : ''\"\r\n [cucmid]=\"user.cucmId\">\r\n </app-user-info>\r\n\r\n <!-- Summary isn't available for Webex users, so they start on the Profile tab -->\r\n <mat-tab-group disableRipple class=\"tabs-container\" [selectedIndex]=\"webexUUID ? 1 : 0\">\r\n <mat-tab label=\"Summary\" [disabled]=\"!!webexUUID\">\r\n <app-user-summary *ngIf=\"user\" [user]=\"user\"></app-user-summary>\r\n </mat-tab>\r\n <mat-tab label=\"Profile\">\r\n <ng-container *ngTemplateOutlet=\"webexUUID ? webexUserProfile : userProfile\">\r\n </ng-container>\r\n </mat-tab>\r\n <!-- <mat-tab label=\"General\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <!-- <mat-tab label=\"Meetings\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <mat-tab label=\"Calling\" [disabled]=\"!primaryLineReference\">\r\n <app-user-calling\r\n *ngIf=\"primaryLineReference\"\r\n [siteId]=\"siteId\"\r\n (onExtensionChange)=\"onExtensionChange()\"\r\n [primaryLineDirectoryNumber]=\"primaryLineReference\">\r\n </app-user-calling>\r\n </mat-tab>\r\n <!-- <mat-tab label=\"Messaging\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <!-- <mat-tab label=\"Hybrid Services\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <mat-tab label=\"Devices\" [disabled]=\"!user?.devices || !user?.devices.length\">\r\n <app-device-list\r\n [devices]=\"user?.devices\"\r\n (onDeviceSelect)=\"onDeviceSelect($event)\">\r\n </app-device-list>\r\n </mat-tab>\r\n <!-- <mat-tab label=\"Vidcast\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <mat-tab label=\"Lines\" [disabled]=\"true\"></mat-tab>\r\n <mat-tab label=\"Features\" [disabled]=\"true\"></mat-tab>\r\n </mat-tab-group>\r\n\r\n <!-- keeps the bottom of the content reachable above the fixed panel -->\r\n <!-- <div class=\"actions-panel-spacer\" [class.actions-panel-spacer--visible]=\"hasUnsavedChanges()\"></div>\r\n <div class=\"actions-panel\"\r\n [class.actions-panel--visible]=\"hasUnsavedChanges()\"\r\n [attr.aria-hidden]=\"!hasUnsavedChanges()\">\r\n <div class=\"actions-panel__actions\">\r\n <button type=\"button\" class=\"btn-outline\" [disabled]=\"savePending\" (click)=\"cancelChanges()\">Cancel</button>\r\n <button type=\"button\" class=\"btn-filled\" [disabled]=\"isSavingDisabled()\" (click)=\"saveChanges()\">Save</button>\r\n </div>\r\n </div> --> \r\n\r\n <ng-template #userProfile>\r\n <form *ngIf=\"user && form\" [formGroup]=\"form\">\r\n <div class=\"info-boxes-container\">\r\n\r\n <!-- USER INFO BOX-->\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">User Details</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">User Id</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"User Id\" formControlName=\"userid\" (input)=\"onChangeField('userid')\">\r\n <span class=\"field-error\" *ngIf=\"form.get('userid')?.hasError('required')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n This field is required\r\n </span>\r\n <span class=\"field-error\" *ngIf=\"form.get('userid')?.hasError('exist')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n User ID already exists\r\n </span>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Primary email</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Primary email\" formControlName=\"email\" (input)=\"onChangeField('email')\">\r\n <span class=\"field-error\" *ngIf=\"form.get('email')?.touched && form.get('email')?.hasError('required')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n This field is required\r\n </span>\r\n <span class=\"field-error\" *ngIf=\"form.get('email')?.touched && form.get('email')?.hasError('pattern')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n Please enter valid email\r\n </span>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Fisrt Name</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Fisrt Name\" formControlName=\"firstName\" (input)=\"onChangeField('firstName')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Last Name</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Last Name\" formControlName=\"lastName\" (input)=\"onChangeField('lastName')\">\r\n <span class=\"field-error\" *ngIf=\"form.get('lastName')?.touched && form.get('lastName')?.hasError('required')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n This field is required\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <!-- USER INFO BOX-->\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">General User Info</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">Department</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Department\" formControlName=\"department\" type=\"text\" (input)=\"onChangeField('department')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Manager user ID</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Manager user ID\" formControlName=\"manager\" type=\"text\" (input)=\"onChangeField('manager')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Associated PC</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Associated PC\" formControlName=\"associatedPc\" type=\"text\" (input)=\"onChangeField('associatedPc')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Digest credentials</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Digest credentials\" formControlName=\"digestCredentials\" type=\"text\"\r\n (input)=\"onChangeField('digestCredentials')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">User profile</div>\r\n <app-lazy-loading-select\r\n [siteId]=\"siteId\"\r\n [controlName]=\"'userProfile'\"\r\n [form]=\"user.form\"\r\n (changeField)=\"changeField('userProfile')\"\r\n [optionsToken]=\"'userProfiles'\"\r\n ></app-lazy-loading-select>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Mobile voice access</div>\r\n <mat-slide-toggle class=\"custom-toggle\"\r\n formControlName=\"enableMobileVoiceAccess\"\r\n (change)=\"onChangeField('enableMobileVoiceAccess')\"\r\n [checked]=\"user.enableMobileVoiceAccess\">\r\n </mat-slide-toggle>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Userlocale</div>\r\n <app-lazy-loading-select\r\n [siteId]=\"siteId\"\r\n [controlName]=\"'userLocale'\"\r\n [form]=\"user.form\"\r\n (changeField)=\"changeField($event)\"\r\n [optionsToken]=\"'userLocales'\"\r\n [default]=\"{key: '', value: 'None', disabled: false}\">\r\n </app-lazy-loading-select>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Confirm digest credentials</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Confirm digest credentials\" formControlName=\"confirmDigestCredentials\" type=\"text\"\r\n (input)=\"onChangeField('confirmDigestCredentials')\">\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <!-- USER INFO BOX-->\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">Contact Information</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">Middle Name</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"text\" placeholder=\"Middle Name\" formControlName=\"middleName\" (input)=\"onChangeField('middleName')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Telephone Number</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"number\" placeholder=\"Telephone Number\" formControlName=\"telephoneNumber\"\r\n (input)=\"onChangeField('telephoneNumber')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Mobile Number</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"number\" placeholder=\"Mobile Number\" formControlName=\"mobileNumber\" (input)=\"onChangeField('mobileNumber')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Directory URI</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"text\" placeholder=\"Directory URI\" formControlName=\"directoryUri\" (input)=\"onChangeField('directoryUri')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Title</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"text\" placeholder=\"Title\" formControlName=\"title\" (input)=\"onChangeField('title')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Home Number</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"number\" placeholder=\"Home Number\" formControlName=\"homeNumber\" (input)=\"onChangeField('homeNumber')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Pager Number</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"number\" placeholder=\"Pager Number\" formControlName=\"pagerNumber\" (input)=\"onChangeField('pagerNumber')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Display Name</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"text\" placeholder=\"Display Name\" formControlName=\"displayName\" (input)=\"onChangeField('displayName')\">\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">EM Configurations</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">BLF Presence Group</div>\r\n <app-lazy-loading-select\r\n [siteId]=\"siteId\"\r\n [controlName]=\"'presenceGroup'\"\r\n [form]=\"user.form\"\r\n (changeField)=\"changeField('presenceGroup')\"\r\n [optionsToken]=\"'userProfiles'\"\r\n ></app-lazy-loading-select>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Subscribe CSS</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Subscribe CSS\" formControlName=\"subscribeCss\" type=\"text\" (input)=\"onChangeField('subscribeCss')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Allow Control of Device from CTI</div>\r\n <mat-slide-toggle class=\"custom-toggle\"\r\n formControlName=\"allowDeviceControlFromCti\"\r\n (change)=\"onChangeField('allowDeviceControlFromCti')\">\r\n </mat-slide-toggle>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Enable Extension Mobility Cross Cluster</div>\r\n <mat-slide-toggle class=\"custom-toggle\"\r\n formControlName=\"enableCrossClusterEm\"\r\n (change)=\"onChangeField('enableCrossClusterEm')\">\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">Multilevel Precedence and Preemption Authorization</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">MLPP User Identification Number</div>\r\n <app-lazy-loading-select\r\n [siteId]=\"siteId\"\r\n [controlName]=\"'userProfile'\"\r\n [form]=\"user.form\"\r\n (changeField)=\"changeField('userProfile')\"\r\n [optionsToken]=\"'userProfiles'\">\r\n </app-lazy-loading-select>\r\n </div>\r\n <mat-divider />\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">MLPP Precedence Authorization Level</div>\r\n <mat-form-field appearance=\"outline\" class=\"simple-select\">\r\n <mat-select formControlName=\"mlppPrecedencePattern\"\r\n (selectionChange)=\"changeField('mlppPrecedencePattern')\">\r\n <mat-option *ngFor=\"let option of authLevelOptions\" [value]=\"option\">\r\n {{option}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <mat-divider />\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Enable MLPP</div>\r\n <mat-slide-toggle class=\"custom-toggle\"\r\n formControlName=\"enableMobileVoiceAccess\"\r\n (change)=\"onChangeField('enableMobileVoiceAccess')\"\r\n [checked]=\"user.enableMobileVoiceAccess\">\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">Service Settings</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Home Cluster</div>\r\n <mat-slide-toggle class=\"custom-toggle\"\r\n formControlName=\"homeCluster\"\r\n (change)=\"onChangeField('homeCluster')\">\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n </div>\r\n </form>\r\n </ng-template>\r\n\r\n <ng-template #webexUserProfile>\n <form *ngIf=\"user && form\" [formGroup]=\"form\">\n <div class=\"info-boxes-container\">\n\n <!-- USER INFO BOX-->\n <section class=\"card vertical-card\">\n <div class=\"header\">\n <span class=\"title\">User Details</span>\n </div>\n <div class=\"main-content\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">User Id</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"User Id\" formControlName=\"userid\" (input)=\"onChangeField('userid')\">\n <span class=\"field-error\" *ngIf=\"form.get('userid')?.hasError('required')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n This field is required\n </span>\n <span class=\"field-error\" *ngIf=\"form.get('userid')?.hasError('exist')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n User ID already exists\n </span>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Primary email</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Primary email\" formControlName=\"email\" (input)=\"onChangeField('email')\">\n <span class=\"field-error\" *ngIf=\"form.get('email')?.touched && form.get('email')?.hasError('required')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n This field is required\n </span>\n <span class=\"field-error\" *ngIf=\"form.get('email')?.touched && form.get('email')?.hasError('pattern')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n Please enter valid email\n </span>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Fisrt Name</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Fisrt Name\" formControlName=\"firstName\" (input)=\"onChangeField('firstName')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top\">\n <div class=\"input-holder__name\">Last Name</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Last Name\" formControlName=\"lastName\" (input)=\"onChangeField('lastName')\">\n <span class=\"field-error\" *ngIf=\"form.get('lastName')?.touched && form.get('lastName')?.hasError('required')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n This field is required\n </span>\n </div>\n </div>\n </div>\n </section>\n\n <!-- USER INFO BOX-->\n <section class=\"card vertical-card\">\n <div class=\"header\">\n <span class=\"title\">General User Info</span>\n </div>\n <div class=\"main-content\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">Department</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Department\" formControlName=\"department\" type=\"text\" (input)=\"onChangeField('department')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Manager user ID</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Manager user ID\" formControlName=\"manager\" type=\"text\" (input)=\"onChangeField('manager')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Associated PC</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Associated PC\" formControlName=\"associatedPc\" type=\"text\" (input)=\"onChangeField('associatedPc')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Digest credentials</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Digest credentials\" formControlName=\"digestCredentials\" type=\"text\"\n (input)=\"onChangeField('digestCredentials')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">User profile</div>\n <app-lazy-loading-select\n [siteId]=\"siteId\"\n [controlName]=\"'userProfile'\"\n [form]=\"user.form\"\n (changeField)=\"changeField('userProfile')\"\n [optionsToken]=\"'userProfiles'\"\n ></app-lazy-loading-select>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Mobile voice access</div>\n <mat-slide-toggle class=\"custom-toggle\"\n formControlName=\"enableMobileVoiceAccess\"\n (change)=\"onChangeField('enableMobileVoiceAccess')\"\n [checked]=\"user.enableMobileVoiceAccess\">\n </mat-slide-toggle>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Userlocale</div>\n <app-lazy-loading-select\n [siteId]=\"siteId\"\n [controlName]=\"'userLocale'\"\n [form]=\"user.form\"\n (changeField)=\"changeField($event)\"\n [optionsToken]=\"'userLocales'\"\n [default]=\"{key: '', value: 'None', disabled: false}\">\n </app-lazy-loading-select>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top\">\n <div class=\"input-holder__name\">Confirm digest credentials</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Confirm digest credentials\" formControlName=\"confirmDigestCredentials\" type=\"text\"\n (input)=\"onChangeField('confirmDigestCredentials')\">\n </div>\n </div>\n </div>\n </section>\n\n <!-- USER INFO BOX-->\n <section class=\"card vertical-card\">\n <div class=\"header\">\n <span class=\"title\">Contact Information</span>\n </div>\n <div class=\"main-content\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">Middle Name</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"text\" placeholder=\"Middle Name\" formControlName=\"middleName\" (input)=\"onChangeField('middleName')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Telephone Number</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"number\" placeholder=\"Telephone Number\" formControlName=\"telephoneNumber\"\n (input)=\"onChangeField('telephoneNumber')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Mobile Number</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"number\" placeholder=\"Mobile Number\" formControlName=\"mobileNumber\" (input)=\"onChangeField('mobileNumber')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Digest credentials</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"text\" placeholder=\"Digest credentials\" formControlName=\"digestCredentials\"\n (input)=\"onChangeField('digestCredentials')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Directory URI</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"text\" placeholder=\"Directory URI\" formControlName=\"directoryUri\" (input)=\"onChangeField('directoryUri')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Title</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"text\" placeholder=\"Title\" formControlName=\"title\" (input)=\"onChangeField('title')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Home Number</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"number\" placeholder=\"Home Number\" formControlName=\"homeNumber\" (input)=\"onChangeField('homeNumber')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Pager Number</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"number\" placeholder=\"Pager Number\" formControlName=\"pagerNumber\" (input)=\"onChangeField('pagerNumber')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top\">\n <div class=\"input-holder__name\">Display Name</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"text\" placeholder=\"Display Name\" formControlName=\"displayName\" (input)=\"onChangeField('displayName')\">\n </div>\n </div>\n </div>\n </section>\n\n </div>\n </form>\n </ng-template>\n</div>\r\n\r\n<!-- <button mat-raised-button color=\"primary\" (click)=\"save()\" >Save</button> -->", styles: ["@charset \"UTF-8\";@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";.fa:hover{color:#0d56aa!important}.mat-icon-button{background:transparent}.icon-webex-box{width:2rem;height:2rem;font-size:.7rem;line-height:1rem;display:inline-block;background:#d0d0d0;border-radius:2rem;line-height:40px;text-align:center}.icon-webex{filter:invert(12%) sepia(14%) saturate(4%) hue-rotate(354deg) brightness(103%) contrast(90%);background-repeat:no-repeat;background-position:center;display:inline-block;height:1rem;width:1rem}.icon-webex-user{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22%3F%3E%3Csvg id%3D%22a%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 viewBox%3D%220 0 16.67 15.56%22%3E%3Cdefs%3E%3Cstyle%3E.b%7Bfill%3Anone%3Bstroke%3A%232c355d%3Bstroke-width%3A1.4px%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Cpath class%3D%22b%22 d%3D%22M4.87%2C3.89c0-1.72%2C1.51-3.19%2C3.47-3.19s3.47%2C1.47%2C3.47%2C3.19-1.51%2C3.19-3.47%2C3.19-3.47-1.47-3.47-3.19ZM.7%2C12.64c0-.37%2C.19-.76%2C.67-1.17%2C.48-.41%2C1.17-.78%2C2-1.09%2C1.66-.62%2C3.66-.93%2C4.97-.93s3.31%2C.31%2C4.97%2C.93c.83%2C.31%2C1.52%2C.68%2C2%2C1.09%2C.47%2C.41%2C.67%2C.8%2C.67%2C1.17v2.22H.7v-2.22Z%22%2F%3E%3C%2Fsvg%3E\")}.icon-user-status{display:inline-block}*{margin:0}body{background:#f7f7f7}body,th,td{font-family:Poppins,Poppins,sans-serif;font-size:14px}th{color:#0000008a;text-align:left}td{box-sizing:border-box;padding:10px 5px 10px 0}.content-box{margin:auto;position:relative;width:95%}.content-box table{width:100%}.edit-icon-td{width:50px;position:relative}.edit-icon-td button{position:absolute;top:4px}.mat-progress-spinner circle,.mat-spinner circle{stroke:gray!important}.data-loader{position:absolute;top:calc(50% - 25px);left:calc(50% - 25px)}.flex-box{display:flex;justify-content:flex-start}.spinner-container{width:100%;display:flex;justify-content:center;align-items:center}.spinner-container ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:#000}.mat-divider{margin:5px 0!important}.actions-panel{position:fixed;left:0;right:0;bottom:0;z-index:100;background:#dedede;border-top:1px solid rgba(0,0,0,.2);padding:.75rem 1.5rem;transform:translateY(100%);visibility:hidden;transition:transform .25s ease-in-out,visibility 0s linear .25s}.actions-panel--visible{transform:translateY(0);visibility:visible;transition:transform .25s ease-in-out,visibility 0s linear 0s}.actions-panel__actions{display:flex;justify-content:flex-end;gap:.75rem}.actions-panel-spacer{height:0;transition:height .25s ease-in-out}.actions-panel-spacer--visible{height:4rem}@media (prefers-reduced-motion: reduce){.actions-panel,.actions-panel--visible,.actions-panel-spacer{transition:none}}.btn-outline,.btn-filled{padding:.313rem .75rem;border-radius:50px;font-weight:500;font-size:.875rem;font-family:Poppins,Poppins,sans-serif;cursor:pointer;transition:background-color .1s ease-in-out;white-space:nowrap}.btn-outline{background:transparent;border:1px solid rgba(0,0,0,.2);color:#000000f2}.btn-outline:hover:not(:disabled){background:rgba(0,0,0,.0705882353)}.btn-outline:disabled{color:#babcc5;border-color:#dfe3e7;cursor:not-allowed}.btn-filled{background:rgba(0,0,0,.9490196078);color:#fff;border:1px solid transparent}.btn-filled:hover:not(:disabled){background:#2a2a2a}.btn-filled:disabled{background:#DFE3E7;color:#babcc5;cursor:not-allowed}.info-boxes-container{padding:24px 0;display:flex;flex-direction:column;gap:3rem}.info-boxes-container .card{display:flex;flex-direction:column;padding:1.5rem;border:1px solid rgba(0,0,0,.2);border-radius:.5rem;background:#ffffff;min-width:0;font-family:Poppins,Poppins,sans-serif;gap:1.5rem}.info-boxes-container .card.vertical-card{flex-direction:row}.info-boxes-container .card.vertical-card .main-content{gap:0}.info-boxes-container .card.vertical-card .main-content .mat-divider{margin:0!important;border-top-color:#0003!important}.info-boxes-container .card.vertical-card .main-content .input-holder{min-height:2rem;box-sizing:content-box;display:flex;align-items:center;gap:3.25rem}.info-boxes-container .card.vertical-card .main-content .input-holder.input-holder-top{padding:.75rem 0 0}.info-boxes-container .card.vertical-card .main-content .input-holder.input-holder-bottom{padding:0 0 .75rem}.info-boxes-container .card.vertical-card .main-content .input-holder.input-holder-top-bottom{padding:.75rem 0}.info-boxes-container .card.vertical-card .main-content .input-holder .input-holder__name{max-width:15rem;width:15rem;flex-shrink:0;color:#000000f2;font-size:.875rem;font-weight:400;white-space:normal;overflow-wrap:break-word}.info-boxes-container .card.vertical-card .main-content .input-holder .input-holder__field{display:flex;flex-direction:column;gap:.375rem}.info-boxes-container .card.vertical-card .main-content .input-holder .plain-input{width:calc(14.25rem - 26px);max-width:calc(100% - 26px);height:21px;padding:4px 12px;box-sizing:content-box;background:#fff;border:solid .0625rem rgba(0,0,0,.5019607843)!important;border-radius:8px;font-family:inherit;font-size:.875rem;font-weight:400;color:#000000f2}.info-boxes-container .card.vertical-card .main-content .input-holder .plain-input:hover{background-color:#00000012!important}.info-boxes-container .card.vertical-card .main-content .input-holder .plain-input:focus{color:#000000b3;background:#fff;border:solid .0625rem rgba(0,0,0,.5019607843)!important;box-shadow:0 0 0 .12rem #fff,0 0 0 .25rem #1170cf,0 0 0 .3rem #1170cf59;outline:none}.info-boxes-container .card.vertical-card .main-content .input-holder app-lazy-loading-select,.info-boxes-container .card.vertical-card .main-content .input-holder .mat-form-field.simple-select{width:14.25rem!important;max-width:14.25rem!important}.info-boxes-container .card.vertical-card .main-content .input-holder .field-error{display:flex;align-items:center;gap:.375rem;color:#c73636;font-size:.75rem}.info-boxes-container .card .header{display:flex;align-items:start;width:15rem;flex-shrink:0}.info-boxes-container .card .header .title{font-weight:500;font-size:1rem;font-family:Poppins,Poppins,sans-serif;color:#000000f2}.info-boxes-container .card .main-content{display:flex;flex-direction:column;min-width:0;gap:1.5rem;flex:1}.header-box{height:60px;width:100%;line-height:60px;background:white;border-bottom:1px solid #dedddd}.header-box .header-back-block{float:left}.header-box .header-button-block{float:right}.webex-table{width:100%;margin:auto}.webex-table tr{border-bottom:1px solid #dedede}.webex-table th{background:#f7f7f7;color:#636363;font-size:12px}.webex-table td{background:#fff;color:#636363;font-size:14px}.webex-table tr:hover td{background:#ededed;cursor:pointer}.webex-table th.mat-header-cell,.webex-table td.mat-cell,.webex-table td.mat-footer-cell{border-bottom:1px solid #dedede}.webex-table tr.mat-header-row{height:37px}.mat-form-field{padding:0 0 5px;width:93%}.mat-form-field.simple-select{padding:0}.mat-form-field.simple-select ::ng-deep .mat-form-field-outline-start,.mat-form-field.simple-select ::ng-deep .mat-form-field-outline-gap,.mat-form-field.simple-select ::ng-deep .mat-form-field-outline-end{border-color:#00000080!important}.mat-form-field.simple-select.mat-focused ::ng-deep .mat-form-field-outline{box-shadow:0 0 0 .12rem #fff,0 0 0 .25rem #1170cf,0 0 0 .3rem #1170cf59;border-radius:6px}.mat-form-field.mat-form-field-disabled{border-bottom:none}.mat-error{color:#c73636;margin:13px 0 0}.select-box{border-radius:30px;background:#f3f6f6;border:1px solid #e2e9ef;height:35px;position:relative}.select-box select{border:none!important;background:transparent;height:100%;width:92%;margin:auto;display:block}option:focus,option:focus-visible{border:none!important;outline:none!important}option{height:30px;cursor:pointer;color:#636363}option:hover{background:#ededed!important}.mat-select{height:100%!important}table{border-collapse:collapse;border-spacing:0}.mat-form-field-appearance-outline .mat-form-field-infix{padding:0!important}.mat-divider{margin:12px 0}::ng-deep .mat-form-field-wrapper{height:30px}::ng-deep .mat-form-field-flex{height:30px}::ng-deep .mat-form-field-flex .mat-form-field-outline-start{display:none}::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{height:35px}:ng-deep .mat-form-field-outline .mat-form-field-outline-thick{height:35px}::ng-deep .mat-select{line-height:20px}::ng-deep .mat-form-field-infix{border-top:0px!important}::ng-deep .mat-tab-group{font-family:Inter,sans-serif}::ng-deep .mat-tab-label{font-weight:500!important;font-size:.875rem!important;height:auto!important;min-width:auto!important;padding:0!important;opacity:1!important;color:#000!important;margin:0!important;box-shadow:0 -3px #000000e6;margin-bottom:.225rem!important;color:#0009!important}::ng-deep .mat-tab-label.mat-tab-label-active .mat-tab-label-content{color:#000!important;font-weight:500!important;font-size:.875rem!important}::ng-deep .mat-ink-bar{background-color:#000!important;height:3px!important}::ng-deep .mat-tab-labels{gap:30px;border-bottom:.0625rem solid rgba(0,0,0,.4)}::ng-deep .mat-tab-labels .mat-tab-label{font-size:.875rem!important;color:#181818!important}::ng-deep .mat-tab-labels .mat-tab-label.mat-tab-label-active .mat-tab-label-content{color:#000!important;font-weight:500!important;font-size:.875rem!important}::ng-deep .mat-progress-spinner{position:absolute!important;top:40%;left:45%}.app-icon{height:20px;width:20px;display:inline-block;cursor:pointer;background-repeat:no-repeat;background-position:center}.app-icon{transition:all .15s ease-out}.icon-webex-right-arrow{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2220%22 height%3D%2220%22 viewBox%3D%220 0 20 20%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Cg id%3D%22arrow-right%22%3E%0D%3Cpath id%3D%22Vector%22 d%3D%22M14.0812 9.66902L6.58119 2.16902C6.53813 2.12351 6.48638 2.0871 6.429 2.06193C6.37162 2.03677 6.30978 2.02336 6.24713 2.0225C6.18448 2.02165 6.1223 2.03336 6.06425 2.05695C6.00621 2.08053 5.95348 2.11552 5.90919 2.15983C5.8649 2.20415 5.82994 2.25689 5.80638 2.31495C5.78282 2.373 5.77113 2.43519 5.77202 2.49784C5.77291 2.56049 5.78634 2.62232 5.81153 2.67969C5.83673 2.73705 5.87316 2.78879 5.91869 2.83183L13.0874 10.0003L5.91869 17.169C5.87316 17.2121 5.83673 17.2638 5.81153 17.3212C5.78634 17.3785 5.77291 17.4404 5.77202 17.503C5.77113 17.5657 5.78282 17.6279 5.80638 17.6859C5.82994 17.744 5.8649 17.7967 5.90919 17.841C5.95348 17.8853 6.00621 17.9203 6.06425 17.9439C6.1223 17.9675 6.18448 17.9792 6.24713 17.9783C6.30978 17.9775 6.37162 17.9641 6.429 17.9389C6.48638 17.9138 6.53813 17.8773 6.58119 17.8318L14.0812 10.3318C14.1691 10.2439 14.2184 10.1247 14.2184 10.0004C14.2184 9.87613 14.1691 9.75692 14.0812 9.66902Z%22 fill%3D%22%230F0F0F%22%2F%3E%0D%3C%2Fg%3E%0D%3C%2Fsvg%3E%0D\")}.icon-webex-left-arrow{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Cg id%3D%22arrow-left%22%3E%0D%3Cpath id%3D%22Vector%22 d%3D%22M5.70746 7.99987L11.3539 2.35352C11.4453 2.25928 11.496 2.13287 11.495 2.00159C11.494 1.8703 11.4414 1.74467 11.3486 1.65183C11.2558 1.55899 11.1301 1.50639 10.9988 1.50539C10.8676 1.50438 10.7411 1.55506 10.6469 1.64647L4.64691 7.64647C4.55316 7.74023 4.50049 7.8674 4.50049 7.99999C4.50049 8.13259 4.55316 8.25975 4.64691 8.35352L10.6469 14.3535C10.6931 14.4011 10.7482 14.439 10.8092 14.4651C10.8702 14.4912 10.9357 14.5049 11.002 14.5054C11.0683 14.5059 11.134 14.4932 11.1954 14.468C11.2567 14.4429 11.3125 14.4058 11.3593 14.3589C11.4062 14.312 11.4433 14.2563 11.4685 14.1949C11.4936 14.1336 11.5063 14.0679 11.5058 14.0016C11.5053 13.9353 11.4916 13.8697 11.4655 13.8088C11.4394 13.7478 11.4015 13.6926 11.3539 13.6465L5.70746 7.99987Z%22 fill%3D%22black%22 fill-opacity%3D%220.95%22%2F%3E%0D%3C%2Fg%3E%0D%3C%2Fsvg%3E%0D\")}.go-back-box{background:white;border-bottom:rgba(0,0,0,.2) 1px solid;height:60px;width:100%;line-height:60px;cursor:pointer}.go-back-box-container{padding:0 1rem;display:flex;justify-content:flex-start}.go-back-box-container .icon-webex-left-arrow,.go-back-box-container .go-back-title{display:block;height:60px}.go-back-box-container .go-back-title{line-height:61px}.go-back-title{display:inline-block;margin:0 10px}.tabs-container{padding:1.5rem 4.375rem 0}::ng-deep .custom-toggle .mat-slide-toggle-bar{position:relative;width:48px;height:25px;flex-shrink:0;border-radius:13px;background-color:#ccc}::ng-deep .custom-toggle .mat-slide-toggle-thumb{height:20px;width:20px;position:absolute;border-radius:50%;display:flex;align-items:center;justify-content:center;left:3px;top:5px;background-color:#fff!important}::ng-deep .custom-toggle .mat-slide-toggle-thumb:after{content:\"\\d7\";font-size:14px;color:#8e9fb7;line-height:1;display:block;pointer-events:none;transform:translateY(0)}::ng-deep .custom-toggle.mat-checked .mat-slide-toggle-thumb{left:calc(100% - 11px)!important}::ng-deep .custom-toggle.mat-checked .mat-slide-toggle-thumb:after{content:\"\\2713\";color:#0d56aa;font-weight:700;font-size:10px}::ng-deep .custom-toggle.mat-checked .mat-slide-toggle-bar{background:#1170cf!important}::ng-deep .custom-toggle.mat-checked .mat-slide-toggle-bar:hover{background:#0353a8!important}\n"], dependencies: [{ kind: "component", type: i4.TkLoaderComponent, selector: "tk-loader", inputs: ["diameter", "strokeWidth", "backdrop", "color"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i6.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i7.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i9.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i10.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { kind: "component", type: i10.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i11.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i12.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i13.UserInfoComponent, selector: "app-user-info", inputs: ["name", "active", "email", "position", "cucmid"] }, { kind: "component", type: i14.LazyLoadingSelectComponent, selector: "app-lazy-loading-select", inputs: ["siteId", "form", "standalone", "placeholder", "controlName", "optionsToken", "appearance", "errorCode", "errorText", "default", "id"], outputs: ["changeField"] }, { kind: "component", type: i15.UserCallingComponent, selector: "app-user-calling", inputs: ["siteId", "userId", "primaryLineDirectoryNumber"], outputs: ["onExtensionChange"] }, { kind: "component", type: i16.DeviceListComponent, selector: "app-device-list", inputs: ["devices"], outputs: ["onDeviceSelect"] }, { kind: "component", type: i17.UserSummaryComponent, selector: "app-user-summary", inputs: ["user"] }] });
|
|
257
257
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserManageWidgetComponent, decorators: [{
|
|
258
258
|
type: Component,
|
|
259
|
-
args: [{ selector: 'app-user-manage-widget', template: "<app-loader *ngIf=\"dataPending || savePending || userService.dataPending\"></app-loader>\r\n\r\n<div *ngIf=\"!dataPending\">\r\n <div class=\"go-back-box\" (click)=\"onGoBack()\">\r\n <div class=\"go-back-box-container\">\r\n <span class=\"app-icon icon-webex-left-arrow\"></span>\r\n <span class=\"go-back-title\">Users</span>\r\n </div>\r\n </div>\r\n\r\n <app-user-info\r\n *ngIf=\"user\"\r\n [name]=\"userName\"\r\n [email]=\"user.email\"\r\n [active]=\"true\"\r\n [position]=\"user.siteName ? 'Member of ' + user.siteName : ''\"\r\n [cucmid]=\"user.cucmId\">\r\n </app-user-info>\r\n\r\n <!-- Summary isn't available for Webex users, so they start on the Profile tab -->\r\n <mat-tab-group disableRipple class=\"tabs-container\" [selectedIndex]=\"webexUUID ? 1 : 0\">\r\n <mat-tab label=\"Summary\" [disabled]=\"!!webexUUID\">\r\n <app-user-summary *ngIf=\"user\" [user]=\"user\"></app-user-summary>\r\n </mat-tab>\r\n <mat-tab label=\"Profile\">\r\n <ng-container *ngTemplateOutlet=\"webexUUID ? webexUserProfile : userProfile\">\r\n </ng-container>\r\n </mat-tab>\r\n <!-- <mat-tab label=\"General\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <!-- <mat-tab label=\"Meetings\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <mat-tab label=\"Calling\" [disabled]=\"!primaryLineReference\">\r\n <app-user-calling\r\n *ngIf=\"primaryLineReference\"\r\n [siteId]=\"siteId\"\r\n (onExtensionChange)=\"onExtensionChange()\"\r\n [primaryLineDirectoryNumber]=\"primaryLineReference\">\r\n </app-user-calling>\r\n </mat-tab>\r\n <!-- <mat-tab label=\"Messaging\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <!-- <mat-tab label=\"Hybrid Services\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <mat-tab label=\"Devices\" [disabled]=\"!user?.devices || !user?.devices.length\">\r\n <app-device-list\r\n [devices]=\"user?.devices\"\r\n (onDeviceSelect)=\"onDeviceSelect($event)\">\r\n </app-device-list>\r\n </mat-tab>\r\n <!-- <mat-tab label=\"Vidcast\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <mat-tab label=\"Lines\" [disabled]=\"true\"></mat-tab>\r\n <mat-tab label=\"Features\" [disabled]=\"true\"></mat-tab>\r\n </mat-tab-group>\r\n\r\n <!-- keeps the bottom of the content reachable above the fixed panel -->\r\n <!-- <div class=\"actions-panel-spacer\" [class.actions-panel-spacer--visible]=\"hasUnsavedChanges()\"></div>\r\n <div class=\"actions-panel\"\r\n [class.actions-panel--visible]=\"hasUnsavedChanges()\"\r\n [attr.aria-hidden]=\"!hasUnsavedChanges()\">\r\n <div class=\"actions-panel__actions\">\r\n <button type=\"button\" class=\"btn-outline\" [disabled]=\"savePending\" (click)=\"cancelChanges()\">Cancel</button>\r\n <button type=\"button\" class=\"btn-filled\" [disabled]=\"isSavingDisabled()\" (click)=\"saveChanges()\">Save</button>\r\n </div>\r\n </div> --> \r\n\r\n <ng-template #userProfile>\r\n <form *ngIf=\"user && form\" [formGroup]=\"form\">\r\n <div class=\"info-boxes-container\">\r\n\r\n <!-- USER INFO BOX-->\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">User Details</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">User Id</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"User Id\" formControlName=\"userid\" (input)=\"onChangeField('userid')\">\r\n <span class=\"field-error\" *ngIf=\"form.get('userid')?.hasError('required')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n This field is required\r\n </span>\r\n <span class=\"field-error\" *ngIf=\"form.get('userid')?.hasError('exist')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n User ID already exists\r\n </span>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Primary email</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Primary email\" formControlName=\"email\" (input)=\"onChangeField('email')\">\r\n <span class=\"field-error\" *ngIf=\"form.get('email')?.touched && form.get('email')?.hasError('required')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n This field is required\r\n </span>\r\n <span class=\"field-error\" *ngIf=\"form.get('email')?.touched && form.get('email')?.hasError('pattern')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n Please enter valid email\r\n </span>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Fisrt Name</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Fisrt Name\" formControlName=\"firstName\" (input)=\"onChangeField('firstName')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Last Name</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Last Name\" formControlName=\"lastName\" (input)=\"onChangeField('lastName')\">\r\n <span class=\"field-error\" *ngIf=\"form.get('lastName')?.touched && form.get('lastName')?.hasError('required')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n This field is required\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <!-- USER INFO BOX-->\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">General User Info</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">Department</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Department\" formControlName=\"department\" type=\"text\" (input)=\"onChangeField('department')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Manager user ID</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Manager user ID\" formControlName=\"manager\" type=\"text\" (input)=\"onChangeField('manager')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Associated PC</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Associated PC\" formControlName=\"associatedPc\" type=\"text\" (input)=\"onChangeField('associatedPc')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Digest credentials</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Digest credentials\" formControlName=\"digestCredentials\" type=\"text\"\r\n (input)=\"onChangeField('digestCredentials')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">User profile</div>\r\n <app-lazy-loading-select\r\n [siteId]=\"siteId\"\r\n [controlName]=\"'userProfile'\"\r\n [form]=\"user.form\"\r\n (changeField)=\"changeField('userProfile')\"\r\n [optionsToken]=\"'userProfiles'\"\r\n ></app-lazy-loading-select>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Mobile voice access</div>\r\n <mat-slide-toggle class=\"custom-toggle\"\r\n formControlName=\"enableMobileVoiceAccess\"\r\n (change)=\"onChangeField('enableMobileVoiceAccess')\"\r\n [checked]=\"user.enableMobileVoiceAccess\">\r\n </mat-slide-toggle>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Userlocale</div>\r\n <app-lazy-loading-select\r\n [siteId]=\"siteId\"\r\n [controlName]=\"'userLocale'\"\r\n [form]=\"user.form\"\r\n (changeField)=\"changeField($event)\"\r\n [optionsToken]=\"'userLocales'\"\r\n [default]=\"{key: '', value: 'None', disabled: false}\">\r\n </app-lazy-loading-select>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Confirm digest credentials</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Confirm digest credentials\" formControlName=\"confirmDigestCredentials\" type=\"text\"\r\n (input)=\"onChangeField('confirmDigestCredentials')\">\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <!-- USER INFO BOX-->\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">Contact Information</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">Middle Name</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"text\" placeholder=\"Middle Name\" formControlName=\"middleName\" (input)=\"onChangeField('middleName')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Telephone Number</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"number\" placeholder=\"Telephone Number\" formControlName=\"telephoneNumber\"\r\n (input)=\"onChangeField('telephoneNumber')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Mobile Number</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"number\" placeholder=\"Mobile Number\" formControlName=\"mobileNumber\" (input)=\"onChangeField('mobileNumber')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Directory URI</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"text\" placeholder=\"Directory URI\" formControlName=\"directoryUri\" (input)=\"onChangeField('directoryUri')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Title</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"text\" placeholder=\"Title\" formControlName=\"title\" (input)=\"onChangeField('title')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Home Number</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"number\" placeholder=\"Home Number\" formControlName=\"homeNumber\" (input)=\"onChangeField('homeNumber')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Pager Number</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"number\" placeholder=\"Pager Number\" formControlName=\"pagerNumber\" (input)=\"onChangeField('pagerNumber')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Display Name</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"text\" placeholder=\"Display Name\" formControlName=\"displayName\" (input)=\"onChangeField('displayName')\">\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">EM Configurations</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">BLF Presence Group</div>\r\n <app-lazy-loading-select\r\n [siteId]=\"siteId\"\r\n [controlName]=\"'presenceGroup'\"\r\n [form]=\"user.form\"\r\n (changeField)=\"changeField('presenceGroup')\"\r\n [optionsToken]=\"'userProfiles'\"\r\n ></app-lazy-loading-select>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Subscribe CSS</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Subscribe CSS\" formControlName=\"subscribeCss\" type=\"text\" (input)=\"onChangeField('subscribeCss')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Allow Control of Device from CTI</div>\r\n <mat-slide-toggle class=\"custom-toggle\"\r\n formControlName=\"allowDeviceControlFromCti\"\r\n (change)=\"onChangeField('allowDeviceControlFromCti')\">\r\n </mat-slide-toggle>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Enable Extension Mobility Cross Cluster</div>\r\n <mat-slide-toggle class=\"custom-toggle\"\r\n formControlName=\"enableCrossClusterEm\"\r\n (change)=\"onChangeField('enableCrossClusterEm')\">\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">Multilevel Precedence and Preemption Authorization</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">MLPP User Identification Number</div>\r\n <app-lazy-loading-select\r\n [siteId]=\"siteId\"\r\n [controlName]=\"'userProfile'\"\r\n [form]=\"user.form\"\r\n (changeField)=\"changeField('userProfile')\"\r\n [optionsToken]=\"'userProfiles'\">\r\n </app-lazy-loading-select>\r\n </div>\r\n <mat-divider />\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">MLPP Precedence Authorization Level</div>\r\n <mat-form-field appearance=\"outline\" class=\"simple-select\">\r\n <mat-select formControlName=\"mlppPrecedencePattern\"\r\n (selectionChange)=\"changeField('mlppPrecedencePattern')\">\r\n <mat-option *ngFor=\"let option of authLevelOptions\" [value]=\"option\">\r\n {{option}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <mat-divider />\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Enable MLPP</div>\r\n <mat-slide-toggle class=\"custom-toggle\"\r\n formControlName=\"enableMobileVoiceAccess\"\r\n (change)=\"onChangeField('enableMobileVoiceAccess')\"\r\n [checked]=\"user.enableMobileVoiceAccess\">\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">Service Settings</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Home Cluster</div>\r\n <mat-slide-toggle class=\"custom-toggle\"\r\n formControlName=\"homeCluster\"\r\n (change)=\"onChangeField('homeCluster')\">\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n </div>\r\n </form>\r\n </ng-template>\r\n\r\n <ng-template #webexUserProfile>\n <form *ngIf=\"user && form\" [formGroup]=\"form\">\n <div class=\"info-boxes-container\">\n\n <!-- USER INFO BOX-->\n <section class=\"card vertical-card\">\n <div class=\"header\">\n <span class=\"title\">User Details</span>\n </div>\n <div class=\"main-content\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">User Id</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"User Id\" formControlName=\"userid\" (input)=\"onChangeField('userid')\">\n <span class=\"field-error\" *ngIf=\"form.get('userid')?.hasError('required')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n This field is required\n </span>\n <span class=\"field-error\" *ngIf=\"form.get('userid')?.hasError('exist')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n User ID already exists\n </span>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Primary email</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Primary email\" formControlName=\"email\" (input)=\"onChangeField('email')\">\n <span class=\"field-error\" *ngIf=\"form.get('email')?.touched && form.get('email')?.hasError('required')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n This field is required\n </span>\n <span class=\"field-error\" *ngIf=\"form.get('email')?.touched && form.get('email')?.hasError('pattern')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n Please enter valid email\n </span>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Fisrt Name</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Fisrt Name\" formControlName=\"firstName\" (input)=\"onChangeField('firstName')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top\">\n <div class=\"input-holder__name\">Last Name</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Last Name\" formControlName=\"lastName\" (input)=\"onChangeField('lastName')\">\n <span class=\"field-error\" *ngIf=\"form.get('lastName')?.touched && form.get('lastName')?.hasError('required')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n This field is required\n </span>\n </div>\n </div>\n </div>\n </section>\n\n <!-- USER INFO BOX-->\n <section class=\"card vertical-card\">\n <div class=\"header\">\n <span class=\"title\">General User Info</span>\n </div>\n <div class=\"main-content\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">Department</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Department\" formControlName=\"department\" type=\"text\" (input)=\"onChangeField('department')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Manager user ID</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Manager user ID\" formControlName=\"manager\" type=\"text\" (input)=\"onChangeField('manager')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Associated PC</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Associated PC\" formControlName=\"associatedPc\" type=\"text\" (input)=\"onChangeField('associatedPc')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Digest credentials</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Digest credentials\" formControlName=\"digestCredentials\" type=\"text\"\n (input)=\"onChangeField('digestCredentials')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">User profile</div>\n <app-lazy-loading-select\n [siteId]=\"siteId\"\n [controlName]=\"'userProfile'\"\n [form]=\"user.form\"\n (changeField)=\"changeField('userProfile')\"\n [optionsToken]=\"'userProfiles'\"\n ></app-lazy-loading-select>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Mobile voice access</div>\n <mat-slide-toggle class=\"custom-toggle\"\n formControlName=\"enableMobileVoiceAccess\"\n (change)=\"onChangeField('enableMobileVoiceAccess')\"\n [checked]=\"user.enableMobileVoiceAccess\">\n </mat-slide-toggle>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Userlocale</div>\n <app-lazy-loading-select\n [siteId]=\"siteId\"\n [controlName]=\"'userLocale'\"\n [form]=\"user.form\"\n (changeField)=\"changeField($event)\"\n [optionsToken]=\"'userLocales'\"\n [default]=\"{key: '', value: 'None', disabled: false}\">\n </app-lazy-loading-select>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top\">\n <div class=\"input-holder__name\">Confirm digest credentials</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Confirm digest credentials\" formControlName=\"confirmDigestCredentials\" type=\"text\"\n (input)=\"onChangeField('confirmDigestCredentials')\">\n </div>\n </div>\n </div>\n </section>\n\n <!-- USER INFO BOX-->\n <section class=\"card vertical-card\">\n <div class=\"header\">\n <span class=\"title\">Contact Information</span>\n </div>\n <div class=\"main-content\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">Middle Name</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"text\" placeholder=\"Middle Name\" formControlName=\"middleName\" (input)=\"onChangeField('middleName')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Telephone Number</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"number\" placeholder=\"Telephone Number\" formControlName=\"telephoneNumber\"\n (input)=\"onChangeField('telephoneNumber')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Mobile Number</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"number\" placeholder=\"Mobile Number\" formControlName=\"mobileNumber\" (input)=\"onChangeField('mobileNumber')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Digest credentials</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"text\" placeholder=\"Digest credentials\" formControlName=\"digestCredentials\"\n (input)=\"onChangeField('digestCredentials')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Directory URI</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"text\" placeholder=\"Directory URI\" formControlName=\"directoryUri\" (input)=\"onChangeField('directoryUri')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Title</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"text\" placeholder=\"Title\" formControlName=\"title\" (input)=\"onChangeField('title')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Home Number</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"number\" placeholder=\"Home Number\" formControlName=\"homeNumber\" (input)=\"onChangeField('homeNumber')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Pager Number</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"number\" placeholder=\"Pager Number\" formControlName=\"pagerNumber\" (input)=\"onChangeField('pagerNumber')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top\">\n <div class=\"input-holder__name\">Display Name</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"text\" placeholder=\"Display Name\" formControlName=\"displayName\" (input)=\"onChangeField('displayName')\">\n </div>\n </div>\n </div>\n </section>\n\n </div>\n </form>\n </ng-template>\n</div>\r\n\r\n<!-- <button mat-raised-button color=\"primary\" (click)=\"save()\" >Save</button> -->", styles: ["@charset \"UTF-8\";@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";.fa:hover{color:#0d56aa!important}.mat-icon-button{background:transparent}.icon-webex-box{width:2rem;height:2rem;font-size:.7rem;line-height:1rem;display:inline-block;background:#d0d0d0;border-radius:2rem;line-height:40px;text-align:center}.icon-webex{filter:invert(12%) sepia(14%) saturate(4%) hue-rotate(354deg) brightness(103%) contrast(90%);background-repeat:no-repeat;background-position:center;display:inline-block;height:1rem;width:1rem}.icon-webex-user{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22%3F%3E%3Csvg id%3D%22a%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 viewBox%3D%220 0 16.67 15.56%22%3E%3Cdefs%3E%3Cstyle%3E.b%7Bfill%3Anone%3Bstroke%3A%232c355d%3Bstroke-width%3A1.4px%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Cpath class%3D%22b%22 d%3D%22M4.87%2C3.89c0-1.72%2C1.51-3.19%2C3.47-3.19s3.47%2C1.47%2C3.47%2C3.19-1.51%2C3.19-3.47%2C3.19-3.47-1.47-3.47-3.19ZM.7%2C12.64c0-.37%2C.19-.76%2C.67-1.17%2C.48-.41%2C1.17-.78%2C2-1.09%2C1.66-.62%2C3.66-.93%2C4.97-.93s3.31%2C.31%2C4.97%2C.93c.83%2C.31%2C1.52%2C.68%2C2%2C1.09%2C.47%2C.41%2C.67%2C.8%2C.67%2C1.17v2.22H.7v-2.22Z%22%2F%3E%3C%2Fsvg%3E\")}.icon-user-status{display:inline-block}*{margin:0}body{background:#f7f7f7}body,th,td{font-family:Poppins,Poppins,sans-serif;font-size:14px}th{color:#0000008a;text-align:left}td{box-sizing:border-box;padding:10px 5px 10px 0}.content-box{margin:auto;position:relative;width:95%}.content-box table{width:100%}.edit-icon-td{width:50px;position:relative}.edit-icon-td button{position:absolute;top:4px}.mat-progress-spinner circle,.mat-spinner circle{stroke:gray!important}.data-loader{position:absolute;top:calc(50% - 25px);left:calc(50% - 25px)}.flex-box{display:flex;justify-content:flex-start}.spinner-container{width:100%;display:flex;justify-content:center;align-items:center}.spinner-container ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:#000}.mat-divider{margin:5px 0!important}.actions-panel{position:fixed;left:0;right:0;bottom:0;z-index:100;background:#dedede;border-top:1px solid rgba(0,0,0,.2);padding:.75rem 1.5rem;transform:translateY(100%);visibility:hidden;transition:transform .25s ease-in-out,visibility 0s linear .25s}.actions-panel--visible{transform:translateY(0);visibility:visible;transition:transform .25s ease-in-out,visibility 0s linear 0s}.actions-panel__actions{display:flex;justify-content:flex-end;gap:.75rem}.actions-panel-spacer{height:0;transition:height .25s ease-in-out}.actions-panel-spacer--visible{height:4rem}@media (prefers-reduced-motion: reduce){.actions-panel,.actions-panel--visible,.actions-panel-spacer{transition:none}}.btn-outline,.btn-filled{padding:.313rem .75rem;border-radius:50px;font-weight:500;font-size:.875rem;font-family:Poppins,Poppins,sans-serif;cursor:pointer;transition:background-color .1s ease-in-out;white-space:nowrap}.btn-outline{background:transparent;border:1px solid rgba(0,0,0,.2);color:#000000f2}.btn-outline:hover:not(:disabled){background:rgba(0,0,0,.0705882353)}.btn-outline:disabled{color:#babcc5;border-color:#dfe3e7;cursor:not-allowed}.btn-filled{background:rgba(0,0,0,.9490196078);color:#fff;border:1px solid transparent}.btn-filled:hover:not(:disabled){background:#2a2a2a}.btn-filled:disabled{background:#DFE3E7;color:#babcc5;cursor:not-allowed}.info-boxes-container{padding:24px 0;display:flex;flex-direction:column;gap:3rem}.info-boxes-container .card{display:flex;flex-direction:column;padding:1.5rem;border:1px solid rgba(0,0,0,.2);border-radius:.5rem;background:#ffffff;min-width:0;font-family:Poppins,Poppins,sans-serif;gap:1.5rem}.info-boxes-container .card.vertical-card{flex-direction:row}.info-boxes-container .card.vertical-card .main-content{gap:0}.info-boxes-container .card.vertical-card .main-content .mat-divider{margin:0!important;border-top-color:#0003!important}.info-boxes-container .card.vertical-card .main-content .input-holder{min-height:2rem;box-sizing:content-box;display:flex;align-items:center;gap:3.25rem}.info-boxes-container .card.vertical-card .main-content .input-holder.input-holder-top{padding:.75rem 0 0}.info-boxes-container .card.vertical-card .main-content .input-holder.input-holder-bottom{padding:0 0 .75rem}.info-boxes-container .card.vertical-card .main-content .input-holder.input-holder-top-bottom{padding:.75rem 0}.info-boxes-container .card.vertical-card .main-content .input-holder .input-holder__name{max-width:15rem;width:15rem;flex-shrink:0;color:#000000f2;font-size:.875rem;font-weight:400;white-space:normal;overflow-wrap:break-word}.info-boxes-container .card.vertical-card .main-content .input-holder .input-holder__field{display:flex;flex-direction:column;gap:.375rem}.info-boxes-container .card.vertical-card .main-content .input-holder .plain-input{width:calc(14.25rem - 26px);max-width:calc(100% - 26px);height:21px;padding:4px 12px;box-sizing:content-box;background:#fff;border:solid .0625rem rgba(0,0,0,.5019607843)!important;border-radius:8px;font-family:inherit;font-size:.875rem;font-weight:400;color:#000000f2}.info-boxes-container .card.vertical-card .main-content .input-holder .plain-input:hover{background-color:#00000012!important}.info-boxes-container .card.vertical-card .main-content .input-holder .plain-input:focus{color:#000000b3;background:#fff;border:solid .0625rem rgba(0,0,0,.5019607843)!important;box-shadow:0 0 0 .12rem #fff,0 0 0 .25rem #1170cf,0 0 0 .3rem #1170cf59;outline:none}.info-boxes-container .card.vertical-card .main-content .input-holder app-lazy-loading-select,.info-boxes-container .card.vertical-card .main-content .input-holder .mat-form-field.simple-select{width:14.25rem!important;max-width:14.25rem!important}.info-boxes-container .card.vertical-card .main-content .input-holder .field-error{display:flex;align-items:center;gap:.375rem;color:#c73636;font-size:.75rem}.info-boxes-container .card .header{display:flex;align-items:start;width:15rem;flex-shrink:0}.info-boxes-container .card .header .title{font-weight:500;font-size:1rem;font-family:Poppins,Poppins,sans-serif;color:#000000f2}.info-boxes-container .card .main-content{display:flex;flex-direction:column;min-width:0;gap:1.5rem;flex:1}.header-box{height:60px;width:100%;line-height:60px;background:white;border-bottom:1px solid #dedddd}.header-box .header-back-block{float:left}.header-box .header-button-block{float:right}.webex-table{width:100%;margin:auto}.webex-table tr{border-bottom:1px solid #dedede}.webex-table th{background:#f7f7f7;color:#636363;font-size:12px}.webex-table td{background:#fff;color:#636363;font-size:14px}.webex-table tr:hover td{background:#ededed;cursor:pointer}.webex-table th.mat-header-cell,.webex-table td.mat-cell,.webex-table td.mat-footer-cell{border-bottom:1px solid #dedede}.webex-table tr.mat-header-row{height:37px}.mat-form-field{padding:0 0 5px;width:93%}.mat-form-field.simple-select{padding:0}.mat-form-field.simple-select ::ng-deep .mat-form-field-outline-start,.mat-form-field.simple-select ::ng-deep .mat-form-field-outline-gap,.mat-form-field.simple-select ::ng-deep .mat-form-field-outline-end{border-color:#00000080!important}.mat-form-field.simple-select.mat-focused ::ng-deep .mat-form-field-outline{box-shadow:0 0 0 .12rem #fff,0 0 0 .25rem #1170cf,0 0 0 .3rem #1170cf59;border-radius:6px}.mat-form-field.mat-form-field-disabled{border-bottom:none}.mat-error{color:#c73636;margin:13px 0 0}.select-box{border-radius:30px;background:#f3f6f6;border:1px solid #e2e9ef;height:35px;position:relative}.select-box select{border:none!important;background:transparent;height:100%;width:92%;margin:auto;display:block}option:focus,option:focus-visible{border:none!important;outline:none!important}option{height:30px;cursor:pointer;color:#636363}option:hover{background:#ededed!important}.mat-select{height:100%!important}table{border-collapse:collapse;border-spacing:0}.mat-form-field-appearance-outline .mat-form-field-infix{padding:0!important}.mat-divider{margin:12px 0}::ng-deep .mat-form-field-wrapper{height:30px}::ng-deep .mat-form-field-flex{height:30px}::ng-deep .mat-form-field-flex .mat-form-field-outline-start{display:none}::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{height:35px}:ng-deep .mat-form-field-outline .mat-form-field-outline-thick{height:35px}::ng-deep .mat-select{line-height:20px}::ng-deep .mat-form-field-infix{border-top:0px!important}::ng-deep .mat-tab-group{font-family:Inter,sans-serif}::ng-deep .mat-tab-label{font-weight:500!important;font-size:.875rem!important;height:auto!important;min-width:auto!important;padding:0!important;opacity:1!important;color:#000!important;margin:0!important;box-shadow:0 -3px #000000e6;margin-bottom:.225rem!important;color:#0009!important}::ng-deep .mat-tab-label.mat-tab-label-active .mat-tab-label-content{color:#000!important;font-weight:500!important;font-size:.875rem!important}::ng-deep .mat-ink-bar{background-color:#000!important;height:3px!important}::ng-deep .mat-tab-labels{gap:30px;border-bottom:.0625rem solid rgba(0,0,0,.4)}::ng-deep .mat-tab-labels .mat-tab-label{font-size:.875rem!important;color:#181818!important}::ng-deep .mat-tab-labels .mat-tab-label.mat-tab-label-active .mat-tab-label-content{color:#000!important;font-weight:500!important;font-size:.875rem!important}::ng-deep .mat-progress-spinner{position:absolute!important;top:40%;left:45%}.app-icon{height:20px;width:20px;display:inline-block;cursor:pointer;background-repeat:no-repeat;background-position:center}.app-icon{transition:all .15s ease-out}.icon-webex-right-arrow{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2220%22 height%3D%2220%22 viewBox%3D%220 0 20 20%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Cg id%3D%22arrow-right%22%3E%0D%3Cpath id%3D%22Vector%22 d%3D%22M14.0812 9.66902L6.58119 2.16902C6.53813 2.12351 6.48638 2.0871 6.429 2.06193C6.37162 2.03677 6.30978 2.02336 6.24713 2.0225C6.18448 2.02165 6.1223 2.03336 6.06425 2.05695C6.00621 2.08053 5.95348 2.11552 5.90919 2.15983C5.8649 2.20415 5.82994 2.25689 5.80638 2.31495C5.78282 2.373 5.77113 2.43519 5.77202 2.49784C5.77291 2.56049 5.78634 2.62232 5.81153 2.67969C5.83673 2.73705 5.87316 2.78879 5.91869 2.83183L13.0874 10.0003L5.91869 17.169C5.87316 17.2121 5.83673 17.2638 5.81153 17.3212C5.78634 17.3785 5.77291 17.4404 5.77202 17.503C5.77113 17.5657 5.78282 17.6279 5.80638 17.6859C5.82994 17.744 5.8649 17.7967 5.90919 17.841C5.95348 17.8853 6.00621 17.9203 6.06425 17.9439C6.1223 17.9675 6.18448 17.9792 6.24713 17.9783C6.30978 17.9775 6.37162 17.9641 6.429 17.9389C6.48638 17.9138 6.53813 17.8773 6.58119 17.8318L14.0812 10.3318C14.1691 10.2439 14.2184 10.1247 14.2184 10.0004C14.2184 9.87613 14.1691 9.75692 14.0812 9.66902Z%22 fill%3D%22%230F0F0F%22%2F%3E%0D%3C%2Fg%3E%0D%3C%2Fsvg%3E%0D\")}.icon-webex-left-arrow{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Cg id%3D%22arrow-left%22%3E%0D%3Cpath id%3D%22Vector%22 d%3D%22M5.70746 7.99987L11.3539 2.35352C11.4453 2.25928 11.496 2.13287 11.495 2.00159C11.494 1.8703 11.4414 1.74467 11.3486 1.65183C11.2558 1.55899 11.1301 1.50639 10.9988 1.50539C10.8676 1.50438 10.7411 1.55506 10.6469 1.64647L4.64691 7.64647C4.55316 7.74023 4.50049 7.8674 4.50049 7.99999C4.50049 8.13259 4.55316 8.25975 4.64691 8.35352L10.6469 14.3535C10.6931 14.4011 10.7482 14.439 10.8092 14.4651C10.8702 14.4912 10.9357 14.5049 11.002 14.5054C11.0683 14.5059 11.134 14.4932 11.1954 14.468C11.2567 14.4429 11.3125 14.4058 11.3593 14.3589C11.4062 14.312 11.4433 14.2563 11.4685 14.1949C11.4936 14.1336 11.5063 14.0679 11.5058 14.0016C11.5053 13.9353 11.4916 13.8697 11.4655 13.8088C11.4394 13.7478 11.4015 13.6926 11.3539 13.6465L5.70746 7.99987Z%22 fill%3D%22black%22 fill-opacity%3D%220.95%22%2F%3E%0D%3C%2Fg%3E%0D%3C%2Fsvg%3E%0D\")}.go-back-box{background:white;border-bottom:rgba(0,0,0,.2) 1px solid;height:60px;width:100%;line-height:60px;cursor:pointer}.go-back-box-container{padding:0 1rem;display:flex;justify-content:flex-start}.go-back-box-container .icon-webex-left-arrow,.go-back-box-container .go-back-title{display:block;height:60px}.go-back-box-container .go-back-title{line-height:61px}.go-back-title{display:inline-block;margin:0 10px}.tabs-container{padding:1.5rem 4.375rem 0}::ng-deep .custom-toggle .mat-slide-toggle-bar{position:relative;width:48px;height:25px;flex-shrink:0;border-radius:13px;background-color:#ccc}::ng-deep .custom-toggle .mat-slide-toggle-thumb{height:20px;width:20px;position:absolute;border-radius:50%;display:flex;align-items:center;justify-content:center;left:3px;top:5px;background-color:#fff!important}::ng-deep .custom-toggle .mat-slide-toggle-thumb:after{content:\"\\d7\";font-size:14px;color:#8e9fb7;line-height:1;display:block;pointer-events:none;transform:translateY(0)}::ng-deep .custom-toggle.mat-checked .mat-slide-toggle-thumb{left:calc(100% - 11px)!important}::ng-deep .custom-toggle.mat-checked .mat-slide-toggle-thumb:after{content:\"\\2713\";color:#0d56aa;font-weight:700;font-size:10px}::ng-deep .custom-toggle.mat-checked .mat-slide-toggle-bar{background:#1170cf!important}::ng-deep .custom-toggle.mat-checked .mat-slide-toggle-bar:hover{background:#0353a8!important}\n"] }]
|
|
259
|
+
args: [{ selector: 'app-user-manage-widget', template: "<tk-loader *ngIf=\"dataPending || savePending || userService.dataPending\"></tk-loader>\r\n\r\n<div *ngIf=\"!dataPending\">\r\n <div class=\"go-back-box\" (click)=\"onGoBack()\">\r\n <div class=\"go-back-box-container\">\r\n <span class=\"app-icon icon-webex-left-arrow\"></span>\r\n <span class=\"go-back-title\">Users</span>\r\n </div>\r\n </div>\r\n\r\n <app-user-info\r\n *ngIf=\"user\"\r\n [name]=\"userName\"\r\n [email]=\"user.email\"\r\n [active]=\"true\"\r\n [position]=\"user.siteName ? 'Member of ' + user.siteName : ''\"\r\n [cucmid]=\"user.cucmId\">\r\n </app-user-info>\r\n\r\n <!-- Summary isn't available for Webex users, so they start on the Profile tab -->\r\n <mat-tab-group disableRipple class=\"tabs-container\" [selectedIndex]=\"webexUUID ? 1 : 0\">\r\n <mat-tab label=\"Summary\" [disabled]=\"!!webexUUID\">\r\n <app-user-summary *ngIf=\"user\" [user]=\"user\"></app-user-summary>\r\n </mat-tab>\r\n <mat-tab label=\"Profile\">\r\n <ng-container *ngTemplateOutlet=\"webexUUID ? webexUserProfile : userProfile\">\r\n </ng-container>\r\n </mat-tab>\r\n <!-- <mat-tab label=\"General\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <!-- <mat-tab label=\"Meetings\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <mat-tab label=\"Calling\" [disabled]=\"!primaryLineReference\">\r\n <app-user-calling\r\n *ngIf=\"primaryLineReference\"\r\n [siteId]=\"siteId\"\r\n (onExtensionChange)=\"onExtensionChange()\"\r\n [primaryLineDirectoryNumber]=\"primaryLineReference\">\r\n </app-user-calling>\r\n </mat-tab>\r\n <!-- <mat-tab label=\"Messaging\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <!-- <mat-tab label=\"Hybrid Services\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <mat-tab label=\"Devices\" [disabled]=\"!user?.devices || !user?.devices.length\">\r\n <app-device-list\r\n [devices]=\"user?.devices\"\r\n (onDeviceSelect)=\"onDeviceSelect($event)\">\r\n </app-device-list>\r\n </mat-tab>\r\n <!-- <mat-tab label=\"Vidcast\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <mat-tab label=\"Lines\" [disabled]=\"true\"></mat-tab>\r\n <mat-tab label=\"Features\" [disabled]=\"true\"></mat-tab>\r\n </mat-tab-group>\r\n\r\n <!-- keeps the bottom of the content reachable above the fixed panel -->\r\n <!-- <div class=\"actions-panel-spacer\" [class.actions-panel-spacer--visible]=\"hasUnsavedChanges()\"></div>\r\n <div class=\"actions-panel\"\r\n [class.actions-panel--visible]=\"hasUnsavedChanges()\"\r\n [attr.aria-hidden]=\"!hasUnsavedChanges()\">\r\n <div class=\"actions-panel__actions\">\r\n <button type=\"button\" class=\"btn-outline\" [disabled]=\"savePending\" (click)=\"cancelChanges()\">Cancel</button>\r\n <button type=\"button\" class=\"btn-filled\" [disabled]=\"isSavingDisabled()\" (click)=\"saveChanges()\">Save</button>\r\n </div>\r\n </div> --> \r\n\r\n <ng-template #userProfile>\r\n <form *ngIf=\"user && form\" [formGroup]=\"form\">\r\n <div class=\"info-boxes-container\">\r\n\r\n <!-- USER INFO BOX-->\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">User Details</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">User Id</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"User Id\" formControlName=\"userid\" (input)=\"onChangeField('userid')\">\r\n <span class=\"field-error\" *ngIf=\"form.get('userid')?.hasError('required')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n This field is required\r\n </span>\r\n <span class=\"field-error\" *ngIf=\"form.get('userid')?.hasError('exist')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n User ID already exists\r\n </span>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Primary email</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Primary email\" formControlName=\"email\" (input)=\"onChangeField('email')\">\r\n <span class=\"field-error\" *ngIf=\"form.get('email')?.touched && form.get('email')?.hasError('required')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n This field is required\r\n </span>\r\n <span class=\"field-error\" *ngIf=\"form.get('email')?.touched && form.get('email')?.hasError('pattern')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n Please enter valid email\r\n </span>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Fisrt Name</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Fisrt Name\" formControlName=\"firstName\" (input)=\"onChangeField('firstName')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Last Name</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Last Name\" formControlName=\"lastName\" (input)=\"onChangeField('lastName')\">\r\n <span class=\"field-error\" *ngIf=\"form.get('lastName')?.touched && form.get('lastName')?.hasError('required')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n This field is required\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <!-- USER INFO BOX-->\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">General User Info</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">Department</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Department\" formControlName=\"department\" type=\"text\" (input)=\"onChangeField('department')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Manager user ID</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Manager user ID\" formControlName=\"manager\" type=\"text\" (input)=\"onChangeField('manager')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Associated PC</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Associated PC\" formControlName=\"associatedPc\" type=\"text\" (input)=\"onChangeField('associatedPc')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Digest credentials</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Digest credentials\" formControlName=\"digestCredentials\" type=\"text\"\r\n (input)=\"onChangeField('digestCredentials')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">User profile</div>\r\n <app-lazy-loading-select\r\n [siteId]=\"siteId\"\r\n [controlName]=\"'userProfile'\"\r\n [form]=\"user.form\"\r\n (changeField)=\"changeField('userProfile')\"\r\n [optionsToken]=\"'userProfiles'\"\r\n ></app-lazy-loading-select>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Mobile voice access</div>\r\n <mat-slide-toggle class=\"custom-toggle\"\r\n formControlName=\"enableMobileVoiceAccess\"\r\n (change)=\"onChangeField('enableMobileVoiceAccess')\"\r\n [checked]=\"user.enableMobileVoiceAccess\">\r\n </mat-slide-toggle>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Userlocale</div>\r\n <app-lazy-loading-select\r\n [siteId]=\"siteId\"\r\n [controlName]=\"'userLocale'\"\r\n [form]=\"user.form\"\r\n (changeField)=\"changeField($event)\"\r\n [optionsToken]=\"'userLocales'\"\r\n [default]=\"{key: '', value: 'None', disabled: false}\">\r\n </app-lazy-loading-select>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Confirm digest credentials</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Confirm digest credentials\" formControlName=\"confirmDigestCredentials\" type=\"text\"\r\n (input)=\"onChangeField('confirmDigestCredentials')\">\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <!-- USER INFO BOX-->\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">Contact Information</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">Middle Name</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"text\" placeholder=\"Middle Name\" formControlName=\"middleName\" (input)=\"onChangeField('middleName')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Telephone Number</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"number\" placeholder=\"Telephone Number\" formControlName=\"telephoneNumber\"\r\n (input)=\"onChangeField('telephoneNumber')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Mobile Number</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"number\" placeholder=\"Mobile Number\" formControlName=\"mobileNumber\" (input)=\"onChangeField('mobileNumber')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Directory URI</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"text\" placeholder=\"Directory URI\" formControlName=\"directoryUri\" (input)=\"onChangeField('directoryUri')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Title</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"text\" placeholder=\"Title\" formControlName=\"title\" (input)=\"onChangeField('title')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Home Number</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"number\" placeholder=\"Home Number\" formControlName=\"homeNumber\" (input)=\"onChangeField('homeNumber')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Pager Number</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"number\" placeholder=\"Pager Number\" formControlName=\"pagerNumber\" (input)=\"onChangeField('pagerNumber')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Display Name</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"text\" placeholder=\"Display Name\" formControlName=\"displayName\" (input)=\"onChangeField('displayName')\">\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">EM Configurations</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">BLF Presence Group</div>\r\n <app-lazy-loading-select\r\n [siteId]=\"siteId\"\r\n [controlName]=\"'presenceGroup'\"\r\n [form]=\"user.form\"\r\n (changeField)=\"changeField('presenceGroup')\"\r\n [optionsToken]=\"'userProfiles'\"\r\n ></app-lazy-loading-select>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Subscribe CSS</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Subscribe CSS\" formControlName=\"subscribeCss\" type=\"text\" (input)=\"onChangeField('subscribeCss')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Allow Control of Device from CTI</div>\r\n <mat-slide-toggle class=\"custom-toggle\"\r\n formControlName=\"allowDeviceControlFromCti\"\r\n (change)=\"onChangeField('allowDeviceControlFromCti')\">\r\n </mat-slide-toggle>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Enable Extension Mobility Cross Cluster</div>\r\n <mat-slide-toggle class=\"custom-toggle\"\r\n formControlName=\"enableCrossClusterEm\"\r\n (change)=\"onChangeField('enableCrossClusterEm')\">\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">Multilevel Precedence and Preemption Authorization</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">MLPP User Identification Number</div>\r\n <app-lazy-loading-select\r\n [siteId]=\"siteId\"\r\n [controlName]=\"'userProfile'\"\r\n [form]=\"user.form\"\r\n (changeField)=\"changeField('userProfile')\"\r\n [optionsToken]=\"'userProfiles'\">\r\n </app-lazy-loading-select>\r\n </div>\r\n <mat-divider />\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">MLPP Precedence Authorization Level</div>\r\n <mat-form-field appearance=\"outline\" class=\"simple-select\">\r\n <mat-select formControlName=\"mlppPrecedencePattern\"\r\n (selectionChange)=\"changeField('mlppPrecedencePattern')\">\r\n <mat-option *ngFor=\"let option of authLevelOptions\" [value]=\"option\">\r\n {{option}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <mat-divider />\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Enable MLPP</div>\r\n <mat-slide-toggle class=\"custom-toggle\"\r\n formControlName=\"enableMobileVoiceAccess\"\r\n (change)=\"onChangeField('enableMobileVoiceAccess')\"\r\n [checked]=\"user.enableMobileVoiceAccess\">\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">Service Settings</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Home Cluster</div>\r\n <mat-slide-toggle class=\"custom-toggle\"\r\n formControlName=\"homeCluster\"\r\n (change)=\"onChangeField('homeCluster')\">\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n </div>\r\n </form>\r\n </ng-template>\r\n\r\n <ng-template #webexUserProfile>\n <form *ngIf=\"user && form\" [formGroup]=\"form\">\n <div class=\"info-boxes-container\">\n\n <!-- USER INFO BOX-->\n <section class=\"card vertical-card\">\n <div class=\"header\">\n <span class=\"title\">User Details</span>\n </div>\n <div class=\"main-content\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">User Id</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"User Id\" formControlName=\"userid\" (input)=\"onChangeField('userid')\">\n <span class=\"field-error\" *ngIf=\"form.get('userid')?.hasError('required')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n This field is required\n </span>\n <span class=\"field-error\" *ngIf=\"form.get('userid')?.hasError('exist')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n User ID already exists\n </span>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Primary email</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Primary email\" formControlName=\"email\" (input)=\"onChangeField('email')\">\n <span class=\"field-error\" *ngIf=\"form.get('email')?.touched && form.get('email')?.hasError('required')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n This field is required\n </span>\n <span class=\"field-error\" *ngIf=\"form.get('email')?.touched && form.get('email')?.hasError('pattern')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n Please enter valid email\n </span>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Fisrt Name</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Fisrt Name\" formControlName=\"firstName\" (input)=\"onChangeField('firstName')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top\">\n <div class=\"input-holder__name\">Last Name</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Last Name\" formControlName=\"lastName\" (input)=\"onChangeField('lastName')\">\n <span class=\"field-error\" *ngIf=\"form.get('lastName')?.touched && form.get('lastName')?.hasError('required')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n This field is required\n </span>\n </div>\n </div>\n </div>\n </section>\n\n <!-- USER INFO BOX-->\n <section class=\"card vertical-card\">\n <div class=\"header\">\n <span class=\"title\">General User Info</span>\n </div>\n <div class=\"main-content\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">Department</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Department\" formControlName=\"department\" type=\"text\" (input)=\"onChangeField('department')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Manager user ID</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Manager user ID\" formControlName=\"manager\" type=\"text\" (input)=\"onChangeField('manager')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Associated PC</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Associated PC\" formControlName=\"associatedPc\" type=\"text\" (input)=\"onChangeField('associatedPc')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Digest credentials</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Digest credentials\" formControlName=\"digestCredentials\" type=\"text\"\n (input)=\"onChangeField('digestCredentials')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">User profile</div>\n <app-lazy-loading-select\n [siteId]=\"siteId\"\n [controlName]=\"'userProfile'\"\n [form]=\"user.form\"\n (changeField)=\"changeField('userProfile')\"\n [optionsToken]=\"'userProfiles'\"\n ></app-lazy-loading-select>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Mobile voice access</div>\n <mat-slide-toggle class=\"custom-toggle\"\n formControlName=\"enableMobileVoiceAccess\"\n (change)=\"onChangeField('enableMobileVoiceAccess')\"\n [checked]=\"user.enableMobileVoiceAccess\">\n </mat-slide-toggle>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Userlocale</div>\n <app-lazy-loading-select\n [siteId]=\"siteId\"\n [controlName]=\"'userLocale'\"\n [form]=\"user.form\"\n (changeField)=\"changeField($event)\"\n [optionsToken]=\"'userLocales'\"\n [default]=\"{key: '', value: 'None', disabled: false}\">\n </app-lazy-loading-select>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top\">\n <div class=\"input-holder__name\">Confirm digest credentials</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Confirm digest credentials\" formControlName=\"confirmDigestCredentials\" type=\"text\"\n (input)=\"onChangeField('confirmDigestCredentials')\">\n </div>\n </div>\n </div>\n </section>\n\n <!-- USER INFO BOX-->\n <section class=\"card vertical-card\">\n <div class=\"header\">\n <span class=\"title\">Contact Information</span>\n </div>\n <div class=\"main-content\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">Middle Name</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"text\" placeholder=\"Middle Name\" formControlName=\"middleName\" (input)=\"onChangeField('middleName')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Telephone Number</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"number\" placeholder=\"Telephone Number\" formControlName=\"telephoneNumber\"\n (input)=\"onChangeField('telephoneNumber')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Mobile Number</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"number\" placeholder=\"Mobile Number\" formControlName=\"mobileNumber\" (input)=\"onChangeField('mobileNumber')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Digest credentials</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"text\" placeholder=\"Digest credentials\" formControlName=\"digestCredentials\"\n (input)=\"onChangeField('digestCredentials')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Directory URI</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"text\" placeholder=\"Directory URI\" formControlName=\"directoryUri\" (input)=\"onChangeField('directoryUri')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Title</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"text\" placeholder=\"Title\" formControlName=\"title\" (input)=\"onChangeField('title')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Home Number</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"number\" placeholder=\"Home Number\" formControlName=\"homeNumber\" (input)=\"onChangeField('homeNumber')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Pager Number</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"number\" placeholder=\"Pager Number\" formControlName=\"pagerNumber\" (input)=\"onChangeField('pagerNumber')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top\">\n <div class=\"input-holder__name\">Display Name</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"text\" placeholder=\"Display Name\" formControlName=\"displayName\" (input)=\"onChangeField('displayName')\">\n </div>\n </div>\n </div>\n </section>\n\n </div>\n </form>\n </ng-template>\n</div>\r\n\r\n<!-- <button mat-raised-button color=\"primary\" (click)=\"save()\" >Save</button> -->", styles: ["@charset \"UTF-8\";@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";.fa:hover{color:#0d56aa!important}.mat-icon-button{background:transparent}.icon-webex-box{width:2rem;height:2rem;font-size:.7rem;line-height:1rem;display:inline-block;background:#d0d0d0;border-radius:2rem;line-height:40px;text-align:center}.icon-webex{filter:invert(12%) sepia(14%) saturate(4%) hue-rotate(354deg) brightness(103%) contrast(90%);background-repeat:no-repeat;background-position:center;display:inline-block;height:1rem;width:1rem}.icon-webex-user{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22%3F%3E%3Csvg id%3D%22a%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 viewBox%3D%220 0 16.67 15.56%22%3E%3Cdefs%3E%3Cstyle%3E.b%7Bfill%3Anone%3Bstroke%3A%232c355d%3Bstroke-width%3A1.4px%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Cpath class%3D%22b%22 d%3D%22M4.87%2C3.89c0-1.72%2C1.51-3.19%2C3.47-3.19s3.47%2C1.47%2C3.47%2C3.19-1.51%2C3.19-3.47%2C3.19-3.47-1.47-3.47-3.19ZM.7%2C12.64c0-.37%2C.19-.76%2C.67-1.17%2C.48-.41%2C1.17-.78%2C2-1.09%2C1.66-.62%2C3.66-.93%2C4.97-.93s3.31%2C.31%2C4.97%2C.93c.83%2C.31%2C1.52%2C.68%2C2%2C1.09%2C.47%2C.41%2C.67%2C.8%2C.67%2C1.17v2.22H.7v-2.22Z%22%2F%3E%3C%2Fsvg%3E\")}.icon-user-status{display:inline-block}*{margin:0}body{background:#f7f7f7}body,th,td{font-family:Poppins,Poppins,sans-serif;font-size:14px}th{color:#0000008a;text-align:left}td{box-sizing:border-box;padding:10px 5px 10px 0}.content-box{margin:auto;position:relative;width:95%}.content-box table{width:100%}.edit-icon-td{width:50px;position:relative}.edit-icon-td button{position:absolute;top:4px}.mat-progress-spinner circle,.mat-spinner circle{stroke:gray!important}.data-loader{position:absolute;top:calc(50% - 25px);left:calc(50% - 25px)}.flex-box{display:flex;justify-content:flex-start}.spinner-container{width:100%;display:flex;justify-content:center;align-items:center}.spinner-container ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:#000}.mat-divider{margin:5px 0!important}.actions-panel{position:fixed;left:0;right:0;bottom:0;z-index:100;background:#dedede;border-top:1px solid rgba(0,0,0,.2);padding:.75rem 1.5rem;transform:translateY(100%);visibility:hidden;transition:transform .25s ease-in-out,visibility 0s linear .25s}.actions-panel--visible{transform:translateY(0);visibility:visible;transition:transform .25s ease-in-out,visibility 0s linear 0s}.actions-panel__actions{display:flex;justify-content:flex-end;gap:.75rem}.actions-panel-spacer{height:0;transition:height .25s ease-in-out}.actions-panel-spacer--visible{height:4rem}@media (prefers-reduced-motion: reduce){.actions-panel,.actions-panel--visible,.actions-panel-spacer{transition:none}}.btn-outline,.btn-filled{padding:.313rem .75rem;border-radius:50px;font-weight:500;font-size:.875rem;font-family:Poppins,Poppins,sans-serif;cursor:pointer;transition:background-color .1s ease-in-out;white-space:nowrap}.btn-outline{background:transparent;border:1px solid rgba(0,0,0,.2);color:#000000f2}.btn-outline:hover:not(:disabled){background:rgba(0,0,0,.0705882353)}.btn-outline:disabled{color:#babcc5;border-color:#dfe3e7;cursor:not-allowed}.btn-filled{background:rgba(0,0,0,.9490196078);color:#fff;border:1px solid transparent}.btn-filled:hover:not(:disabled){background:#2a2a2a}.btn-filled:disabled{background:#DFE3E7;color:#babcc5;cursor:not-allowed}.info-boxes-container{padding:24px 0;display:flex;flex-direction:column;gap:3rem}.info-boxes-container .card{display:flex;flex-direction:column;padding:1.5rem;border:1px solid rgba(0,0,0,.2);border-radius:.5rem;background:#ffffff;min-width:0;font-family:Poppins,Poppins,sans-serif;gap:1.5rem}.info-boxes-container .card.vertical-card{flex-direction:row}.info-boxes-container .card.vertical-card .main-content{gap:0}.info-boxes-container .card.vertical-card .main-content .mat-divider{margin:0!important;border-top-color:#0003!important}.info-boxes-container .card.vertical-card .main-content .input-holder{min-height:2rem;box-sizing:content-box;display:flex;align-items:center;gap:3.25rem}.info-boxes-container .card.vertical-card .main-content .input-holder.input-holder-top{padding:.75rem 0 0}.info-boxes-container .card.vertical-card .main-content .input-holder.input-holder-bottom{padding:0 0 .75rem}.info-boxes-container .card.vertical-card .main-content .input-holder.input-holder-top-bottom{padding:.75rem 0}.info-boxes-container .card.vertical-card .main-content .input-holder .input-holder__name{max-width:15rem;width:15rem;flex-shrink:0;color:#000000f2;font-size:.875rem;font-weight:400;white-space:normal;overflow-wrap:break-word}.info-boxes-container .card.vertical-card .main-content .input-holder .input-holder__field{display:flex;flex-direction:column;gap:.375rem}.info-boxes-container .card.vertical-card .main-content .input-holder .plain-input{width:calc(14.25rem - 26px);max-width:calc(100% - 26px);height:21px;padding:4px 12px;box-sizing:content-box;background:#fff;border:solid .0625rem rgba(0,0,0,.5019607843)!important;border-radius:8px;font-family:inherit;font-size:.875rem;font-weight:400;color:#000000f2}.info-boxes-container .card.vertical-card .main-content .input-holder .plain-input:hover{background-color:#00000012!important}.info-boxes-container .card.vertical-card .main-content .input-holder .plain-input:focus{color:#000000b3;background:#fff;border:solid .0625rem rgba(0,0,0,.5019607843)!important;box-shadow:0 0 0 .12rem #fff,0 0 0 .25rem #1170cf,0 0 0 .3rem #1170cf59;outline:none}.info-boxes-container .card.vertical-card .main-content .input-holder app-lazy-loading-select,.info-boxes-container .card.vertical-card .main-content .input-holder .mat-form-field.simple-select{width:14.25rem!important;max-width:14.25rem!important}.info-boxes-container .card.vertical-card .main-content .input-holder .field-error{display:flex;align-items:center;gap:.375rem;color:#c73636;font-size:.75rem}.info-boxes-container .card .header{display:flex;align-items:start;width:15rem;flex-shrink:0}.info-boxes-container .card .header .title{font-weight:500;font-size:1rem;font-family:Poppins,Poppins,sans-serif;color:#000000f2}.info-boxes-container .card .main-content{display:flex;flex-direction:column;min-width:0;gap:1.5rem;flex:1}.header-box{height:60px;width:100%;line-height:60px;background:white;border-bottom:1px solid #dedddd}.header-box .header-back-block{float:left}.header-box .header-button-block{float:right}.webex-table{width:100%;margin:auto}.webex-table tr{border-bottom:1px solid #dedede}.webex-table th{background:#f7f7f7;color:#636363;font-size:12px}.webex-table td{background:#fff;color:#636363;font-size:14px}.webex-table tr:hover td{background:#ededed;cursor:pointer}.webex-table th.mat-header-cell,.webex-table td.mat-cell,.webex-table td.mat-footer-cell{border-bottom:1px solid #dedede}.webex-table tr.mat-header-row{height:37px}.mat-form-field{padding:0 0 5px;width:93%}.mat-form-field.simple-select{padding:0}.mat-form-field.simple-select ::ng-deep .mat-form-field-outline-start,.mat-form-field.simple-select ::ng-deep .mat-form-field-outline-gap,.mat-form-field.simple-select ::ng-deep .mat-form-field-outline-end{border-color:#00000080!important}.mat-form-field.simple-select.mat-focused ::ng-deep .mat-form-field-outline{box-shadow:0 0 0 .12rem #fff,0 0 0 .25rem #1170cf,0 0 0 .3rem #1170cf59;border-radius:6px}.mat-form-field.mat-form-field-disabled{border-bottom:none}.mat-error{color:#c73636;margin:13px 0 0}.select-box{border-radius:30px;background:#f3f6f6;border:1px solid #e2e9ef;height:35px;position:relative}.select-box select{border:none!important;background:transparent;height:100%;width:92%;margin:auto;display:block}option:focus,option:focus-visible{border:none!important;outline:none!important}option{height:30px;cursor:pointer;color:#636363}option:hover{background:#ededed!important}.mat-select{height:100%!important}table{border-collapse:collapse;border-spacing:0}.mat-form-field-appearance-outline .mat-form-field-infix{padding:0!important}.mat-divider{margin:12px 0}::ng-deep .mat-form-field-wrapper{height:30px}::ng-deep .mat-form-field-flex{height:30px}::ng-deep .mat-form-field-flex .mat-form-field-outline-start{display:none}::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{height:35px}:ng-deep .mat-form-field-outline .mat-form-field-outline-thick{height:35px}::ng-deep .mat-select{line-height:20px}::ng-deep .mat-form-field-infix{border-top:0px!important}::ng-deep .mat-tab-group{font-family:Inter,sans-serif}::ng-deep .mat-tab-label{font-weight:500!important;font-size:.875rem!important;height:auto!important;min-width:auto!important;padding:0!important;opacity:1!important;color:#000!important;margin:0!important;box-shadow:0 -3px #000000e6;margin-bottom:.225rem!important;color:#0009!important}::ng-deep .mat-tab-label.mat-tab-label-active .mat-tab-label-content{color:#000!important;font-weight:500!important;font-size:.875rem!important}::ng-deep .mat-ink-bar{background-color:#000!important;height:3px!important}::ng-deep .mat-tab-labels{gap:30px;border-bottom:.0625rem solid rgba(0,0,0,.4)}::ng-deep .mat-tab-labels .mat-tab-label{font-size:.875rem!important;color:#181818!important}::ng-deep .mat-tab-labels .mat-tab-label.mat-tab-label-active .mat-tab-label-content{color:#000!important;font-weight:500!important;font-size:.875rem!important}::ng-deep .mat-progress-spinner{position:absolute!important;top:40%;left:45%}.app-icon{height:20px;width:20px;display:inline-block;cursor:pointer;background-repeat:no-repeat;background-position:center}.app-icon{transition:all .15s ease-out}.icon-webex-right-arrow{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2220%22 height%3D%2220%22 viewBox%3D%220 0 20 20%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Cg id%3D%22arrow-right%22%3E%0D%3Cpath id%3D%22Vector%22 d%3D%22M14.0812 9.66902L6.58119 2.16902C6.53813 2.12351 6.48638 2.0871 6.429 2.06193C6.37162 2.03677 6.30978 2.02336 6.24713 2.0225C6.18448 2.02165 6.1223 2.03336 6.06425 2.05695C6.00621 2.08053 5.95348 2.11552 5.90919 2.15983C5.8649 2.20415 5.82994 2.25689 5.80638 2.31495C5.78282 2.373 5.77113 2.43519 5.77202 2.49784C5.77291 2.56049 5.78634 2.62232 5.81153 2.67969C5.83673 2.73705 5.87316 2.78879 5.91869 2.83183L13.0874 10.0003L5.91869 17.169C5.87316 17.2121 5.83673 17.2638 5.81153 17.3212C5.78634 17.3785 5.77291 17.4404 5.77202 17.503C5.77113 17.5657 5.78282 17.6279 5.80638 17.6859C5.82994 17.744 5.8649 17.7967 5.90919 17.841C5.95348 17.8853 6.00621 17.9203 6.06425 17.9439C6.1223 17.9675 6.18448 17.9792 6.24713 17.9783C6.30978 17.9775 6.37162 17.9641 6.429 17.9389C6.48638 17.9138 6.53813 17.8773 6.58119 17.8318L14.0812 10.3318C14.1691 10.2439 14.2184 10.1247 14.2184 10.0004C14.2184 9.87613 14.1691 9.75692 14.0812 9.66902Z%22 fill%3D%22%230F0F0F%22%2F%3E%0D%3C%2Fg%3E%0D%3C%2Fsvg%3E%0D\")}.icon-webex-left-arrow{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Cg id%3D%22arrow-left%22%3E%0D%3Cpath id%3D%22Vector%22 d%3D%22M5.70746 7.99987L11.3539 2.35352C11.4453 2.25928 11.496 2.13287 11.495 2.00159C11.494 1.8703 11.4414 1.74467 11.3486 1.65183C11.2558 1.55899 11.1301 1.50639 10.9988 1.50539C10.8676 1.50438 10.7411 1.55506 10.6469 1.64647L4.64691 7.64647C4.55316 7.74023 4.50049 7.8674 4.50049 7.99999C4.50049 8.13259 4.55316 8.25975 4.64691 8.35352L10.6469 14.3535C10.6931 14.4011 10.7482 14.439 10.8092 14.4651C10.8702 14.4912 10.9357 14.5049 11.002 14.5054C11.0683 14.5059 11.134 14.4932 11.1954 14.468C11.2567 14.4429 11.3125 14.4058 11.3593 14.3589C11.4062 14.312 11.4433 14.2563 11.4685 14.1949C11.4936 14.1336 11.5063 14.0679 11.5058 14.0016C11.5053 13.9353 11.4916 13.8697 11.4655 13.8088C11.4394 13.7478 11.4015 13.6926 11.3539 13.6465L5.70746 7.99987Z%22 fill%3D%22black%22 fill-opacity%3D%220.95%22%2F%3E%0D%3C%2Fg%3E%0D%3C%2Fsvg%3E%0D\")}.go-back-box{background:white;border-bottom:rgba(0,0,0,.2) 1px solid;height:60px;width:100%;line-height:60px;cursor:pointer}.go-back-box-container{padding:0 1rem;display:flex;justify-content:flex-start}.go-back-box-container .icon-webex-left-arrow,.go-back-box-container .go-back-title{display:block;height:60px}.go-back-box-container .go-back-title{line-height:61px}.go-back-title{display:inline-block;margin:0 10px}.tabs-container{padding:1.5rem 4.375rem 0}::ng-deep .custom-toggle .mat-slide-toggle-bar{position:relative;width:48px;height:25px;flex-shrink:0;border-radius:13px;background-color:#ccc}::ng-deep .custom-toggle .mat-slide-toggle-thumb{height:20px;width:20px;position:absolute;border-radius:50%;display:flex;align-items:center;justify-content:center;left:3px;top:5px;background-color:#fff!important}::ng-deep .custom-toggle .mat-slide-toggle-thumb:after{content:\"\\d7\";font-size:14px;color:#8e9fb7;line-height:1;display:block;pointer-events:none;transform:translateY(0)}::ng-deep .custom-toggle.mat-checked .mat-slide-toggle-thumb{left:calc(100% - 11px)!important}::ng-deep .custom-toggle.mat-checked .mat-slide-toggle-thumb:after{content:\"\\2713\";color:#0d56aa;font-weight:700;font-size:10px}::ng-deep .custom-toggle.mat-checked .mat-slide-toggle-bar{background:#1170cf!important}::ng-deep .custom-toggle.mat-checked .mat-slide-toggle-bar:hover{background:#0353a8!important}\n"] }]
|
|
260
260
|
}], ctorParameters: function () { return [{ type: i1.UserService }, { type: i2.APIService }, { type: i3.DcpApiService }]; }, propDecorators: { onSave: [{
|
|
261
261
|
type: Output
|
|
262
262
|
}], onChange: [{
|
|
@@ -280,4 +280,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
280
280
|
}], isLdap: [{
|
|
281
281
|
type: Input
|
|
282
282
|
}] } });
|
|
283
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1tYW5hZ2Utd2lkZ2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLW1hbmFnZS9zcmMvdXNlci1tYW5hZ2Utd2lkZ2V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLW1hbmFnZS9zcmMvdXNlci1tYW5hZ2Utd2lkZ2V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZGLE9BQU8sRUFBYSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU12RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVEzQyxNQUFNLE9BQU8seUJBQXlCO0lBNEJwQyxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsSUFBSSxFQUFFLEVBQUUsQ0FBQztJQUN0RSxDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJ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S0FBSyxDQUFBO2lCQUNsRTtZQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDVDthQUFNO1lBQ0wsNENBQTRDO1NBQzdDO0lBQ0gsQ0FBQztJQUVELElBQUk7UUFDRixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDcEIsQ0FBQzs7dUhBM1JVLHlCQUF5QjsyR0FBekIseUJBQXlCLGlUQ2pCdEMsbTA4QkFpbEJrRjs0RkRoa0JyRSx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0Usd0JBQXdCO3VKQVN4QixNQUFNO3NCQUFmLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFFRSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3VzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEFQSVNlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlcy9hcGkuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBMaW5lQXNzb2NpYXRpb24gfSBmcm9tICcuL2NsYXNzZXMvbGluZS1hc3NvY2lhdGlvbic7XHJcbmltcG9ydCB7IExpbmVBc3NvY2lhdGlvbkludGVyZmFjZSB9IGZyb20gJy4vY2xhc3Nlcy9saW5lLWFzc29jaWF0aW9uLWludGVyZmFjZSc7XHJcbmltcG9ydCB7IERldmljZSB9IGZyb20gJy4vY2xhc3Nlcy9kZXZpY2UnO1xyXG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRGNwQXBpU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZGNwLWFwaS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXVzZXItbWFuYWdlLXdpZGdldCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXItbWFuYWdlLXdpZGdldC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdXNlci1tYW5hZ2Utd2lkZ2V0LmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVc2VyTWFuYWdlV2lkZ2V0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgcHVibGljIGRhdGFQZW5kaW5nITogYm9vbGVhbjtcclxuICBwdWJsaWMgc2F2ZVBlbmRpbmcgPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIG9uU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3REZXZpY2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgZ29CYWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBJbnB1dCgpIHRva2VuITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGhvc3QhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZGNwSG9zdCE6IHN0cmluZztcclxuICBASW5wdXQoKSBzaXRlSWQhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgdXNlcklkITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGRldmljZU5hbWUhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaXNMZGFwITogYm9vbGVhbjtcclxuXHJcbiAgYXV0aExldmVsT3B0aW9uczogc3RyaW5nW10gPSBbXHJcbiAgICAnSW1tZWRpYXRlJyxcclxuICAgICdEZWZhdWx0JyxcclxuICAgICdSb3V0aW5lJyxcclxuICAgICdQcmlvcml0eScsXHJcbiAgICAnRmxhc2gnLFxyXG4gICAgJ0V4ZWN1dGl2ZSBPdmVycmlkZScsXHJcbiAgICAnRmxhc2ggT3ZlcnJpZGUnLFxyXG4gIF07XHJcblxyXG4gIGdldCBmb3JtKCk6IEZvcm1Hcm91cCB7XHJcbiAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZT8udXNlcj8uZm9ybTtcclxuICB9XHJcblxyXG4gIGdldCB1c2VyKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZS51c2VyO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHVzZXJOYW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7dGhpcy51c2VyPy5maXJzdE5hbWUgfHwgJyd9ICR7dGhpcy51c2VyPy5sYXN0TmFtZSB8fCAnJ31gO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGxpbmVBc3NvY2lhdGlvbigpOiBMaW5lQXNzb2NpYXRpb24gfCBMaW5lQXNzb2NpYXRpb25JbnRlcmZhY2V8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZT8udXNlcj8uZGV2aWNlcyAmJiB0aGlzLnVzZXJTZXJ2aWNlPy51c2VyPy5kZXZpY2VzWzBdICYmIHRoaXMudXNlclNlcnZpY2U/LnVzZXI/LmRldmljZXNbMF0ubGluZUFzc29jaWF0aW9ucyAmJiB0aGlzLnVzZXJTZXJ2aWNlPy51c2VyPy5kZXZpY2VzWzBdLmxpbmVBc3NvY2lhdGlvbnNbMF07XHJcbiAgfVxyXG5cclxuICBnZXQgcHJpbWFyeUxpbmVSZWZlcmVuY2UoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLnVzZXJTZXJ2aWNlPy51c2VyPy5wcmltYXJ5TGluZVJlZmVyZW5jZSAmJiB0aGlzLnVzZXJTZXJ2aWNlPy51c2VyPy5wcmltYXJ5TGluZVJlZmVyZW5jZT8uZGlyZWN0b3J5TnVtYmVyO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHdlYmV4VVVJRCgpIHtcclxuICAgIGNvbnN0IHV1aWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnd2ViZXhVVUlEJyk7XHJcbiAgICByZXR1cm4gdXVpZCA9PT0gJ251bGwnID8gbnVsbCA6IHV1aWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9jYXRpb24gPSBpbmplY3QoTG9jYXRpb24pO1xyXG4gIHB1YmxpYyByZWFkb25seSBPTl9QUkVNX0lEID0gMjU0MjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhcGlTZXJ2aWNlOiBBUElTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkY3BBcGlTZXJ2aWNlOiBEY3BBcGlTZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgdGhpcy51c2VyU2VydmljZS5vblVzZXJMaW5lU2F2ZWQkXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UucGVyc2lzdENhY2hlQ2hhbmdlcygpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy51c2VyU2VydmljZS5kYXRhUGVuZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVVybElmVXNlcklkQ2hhbmdlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLm9uU2F2ZS5uZXh0KFwic2F2ZWRcIik7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSwgKCkgPT4gdGhpcy51c2VyU2VydmljZS5kYXRhUGVuZGluZyA9IGZhbHNlKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5hcGlTZXJ2aWNlLnRva2VuID0gdGhpcy50b2tlbjtcclxuICAgIHRoaXMuYXBpU2VydmljZS5hcGlVcmwgPSB0aGlzLmhvc3Q7XHJcbiAgICB0aGlzLmRjcEFwaVNlcnZpY2UudG9rZW4gPSB0aGlzLnRva2VuO1xyXG4gICAgdGhpcy5kY3BBcGlTZXJ2aWNlLmFwaVVybCA9IHRoaXMuZGNwSG9zdDtcclxuICAgIHRoaXMuZ2V0RGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgb25EZXZpY2VTZWxlY3QoZGV2aWNlOiBEZXZpY2UpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0RGV2aWNlLmVtaXQoZGV2aWNlLm5hbWUpO1xyXG4gIH1cclxuXHJcbiAgb25Hb0JhY2soKTogdm9pZCB7XHJcbiAgICB0aGlzLmdvQmFjay5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBvbkV4dGVuc2lvbkNoYW5nZSgpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UubmV4dChcInN0YXJ0IGV4dGVuc2lvbiBjaGFuZ2UuLlwiKTtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlRmllbGQodG9rZW46IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZS5uZXh0KFwic3RhcnQgY2hhbmdlLi5cIik7XHJcblxyXG4gICAgaWYgKCF0b2tlbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAodGhpcy51c2VyU2VydmljZS51c2VyIGFzIGFueSlbdG9rZW5dID0gdGhpcy5mb3JtPy5nZXQodG9rZW4pPy52YWx1ZTtcclxuXHJcbiAgICBpZiAodG9rZW4gPT09ICdtaWRkbGVOYW1lJykge1xyXG4gICAgICB0aGlzLmZvcm0/LmdldCh0b2tlbik/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucGF0dGVybignWyBhLXpBLVotXSsnKV0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRva2VuID09PSAndGVsZXBob25lTnVtYmVyJyB8fCB0b2tlbiA9PT0gJ21vYmlsZU51bWJlcicgfHwgdG9rZW4gPT09ICdwYWdlck51bWJlcicgfHwgdG9rZW4gPT09ICdob21lTnVtYmVyJykge1xyXG4gICAgICB0aGlzLmZvcm0/LmdldCh0b2tlbik/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucGF0dGVybignWyAwLTktK10rJyldKTtcclxuICAgIH1cclxuICAgIHRoaXMuZm9ybT8uZ2V0KHRva2VuKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy52YWxpZGF0ZVVzZXJJZCgpO1xyXG4gIH1cclxuXHJcbiAgc2F2ZUNoYW5nZXMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pc1NhdmluZ0Rpc2FibGVkKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2F2ZVBlbmRpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgY3VycmVudExpbmVBc3NvY2lhdGlvbiA9IHRoaXMudXNlcj8uZGV2aWNlcz8uWzBdPy5saW5lQXNzb2NpYXRpb25zPy5bMF07XHJcbiAgICBjb25zdCBvcmlnaW5MaW5lQXNzb2NpYXRpb24gPSB0aGlzLnVzZXJTZXJ2aWNlLm9yaWdpblVzZXI/LmRldmljZXM/LlswXT8ubGluZUFzc29jaWF0aW9ucz8uWzBdO1xyXG4gICAgY29uc3QgY3VycmVudE1hcHBlZERpZCA9IHRoaXMudXNlcj8ubGluZXM/LlswXT8ubWFwcGVkRGlkcz8uWzBdIHx8ICcnO1xyXG4gICAgY29uc3Qgb3JpZ2luTWFwcGVkRGlkID0gdGhpcy51c2VyU2VydmljZS5vcmlnaW5Vc2VyPy5saW5lcz8uWzBdPy5tYXBwZWREaWRzPy5bMF0gfHwgJyc7XHJcbiAgICBjb25zdCBkaWRQYXR0ZXJuRGVzY3JpcHRpb24gPSB0aGlzLnVzZXJTZXJ2aWNlLm9yaWdpblVzZXI/LmxpbmVzPy5bMF0/LmRpZFBhdHRlcm5zPy5bMF0/LmRlc2NyaXB0aW9uIHx8ICcnO1xyXG4gICAgY29uc3QgbGluZUFzc29jaWF0aW9uQ2hhbmdlZCA9IGN1cnJlbnRMaW5lQXNzb2NpYXRpb24gJiYgb3JpZ2luTGluZUFzc29jaWF0aW9uICYmICFjdXJyZW50TGluZUFzc29jaWF0aW9uLmVxdWFscyhvcmlnaW5MaW5lQXNzb2NpYXRpb24pO1xyXG4gICAgY29uc3QgbWFwcGVkRGlkQ2hhbmdlZCA9IGN1cnJlbnRNYXBwZWREaWQgIT09IG9yaWdpbk1hcHBlZERpZDtcclxuXHJcbiAgICBjb25zdCB0cmFuc2xhdGlvblBhdHRlcm5DaGFuZ2VkID0gKGxpbmVBc3NvY2lhdGlvbkNoYW5nZWQgfHwgbWFwcGVkRGlkQ2hhbmdlZCkgJiYgY3VycmVudExpbmVBc3NvY2lhdGlvbiAmJiBvcmlnaW5MaW5lQXNzb2NpYXRpb247XHJcbiAgICBjb25zdCByZXF1ZXN0ID0gdHJhbnNsYXRpb25QYXR0ZXJuQ2hhbmdlZFxyXG4gICAgICA/IHRoaXMudXNlclNlcnZpY2UuZWRpdFRyYW5zbGF0aW9uUGF0dGVybihcclxuICAgICAgICAgIHRoaXMudXNlci5jdWNtSWQsXHJcbiAgICAgICAgICBvcmlnaW5NYXBwZWREaWQsXHJcbiAgICAgICAgICBjdXJyZW50TWFwcGVkRGlkLFxyXG4gICAgICAgICAgY3VycmVudExpbmVBc3NvY2lhdGlvbi5kaXJlY3RvcnlOdW1iZXIuZGlyZWN0b3J5TnVtYmVyLFxyXG4gICAgICAgICAgb3JpZ2luTGluZUFzc29jaWF0aW9uLmRpcmVjdG9yeU51bWJlci5yb3V0ZVBhcnRpdGlvbk5hbWUsXHJcbiAgICAgICAgICBkaWRQYXR0ZXJuRGVzY3JpcHRpb24sXHJcbiAgICAgICAgKS5waXBlKHN3aXRjaE1hcCgoKSA9PiB0aGlzLnVzZXJTZXJ2aWNlLnBlcnNpc3RDYWNoZUNoYW5nZXMoKSkpXHJcbiAgICAgIDogdGhpcy51c2VyU2VydmljZS5wZXJzaXN0Q2FjaGVDaGFuZ2VzKCk7XHJcblxyXG4gICAgcmVxdWVzdC5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zYXZlUGVuZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UuY29tbWl0U2F2ZWRDaGFuZ2VzKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVVcmxJZlVzZXJJZENoYW5nZWQoKTtcclxuICAgICAgICB0aGlzLm9uU2F2ZS5uZXh0KFwidXNlciBoYXMgYmVlbiBzYXZlZCBzdWNjZXNzZnVsbHkuLlwiKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6ICgpID0+IHRoaXMuc2F2ZVBlbmRpbmcgPSBmYWxzZSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2FuY2VsQ2hhbmdlcygpOiB2b2lkIHtcclxuICAgIHRoaXMudXNlclNlcnZpY2UuZGlzY2FyZENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIGhhc1Vuc2F2ZWRDaGFuZ2VzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudXNlclNlcnZpY2UuaGFzVW5zYXZlZENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZUVkaXRNb2RlKCkge1xyXG4gICAgdGhpcy51c2VyU2VydmljZS51c2VyLnRvZ2dsZUVkaXRNb2RlKCk7XHJcbiAgfVxyXG5cclxuICBpc1NhdmluZ0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2F2ZVBlbmRpbmdcclxuICAgICAgfHwgIXRoaXMudXNlclNlcnZpY2UuaGFzVW5zYXZlZENoYW5nZXMoKVxyXG4gICAgICB8fCB0aGlzLnVzZXJTZXJ2aWNlLmhhc0V4aXN0ZWRVc2VySWRcclxuICAgICAgfHwgISF0aGlzLmZvcm0/LmludmFsaWQ7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VGaWVsZCh0b2tlbjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlLm5leHQoXCJzdGFydCBjaGFuZ2UuLlwiKTtcclxuICAgIGNvbnN0IGZvcm1GaWVsZCA9IHRoaXMudXNlcj8uZm9ybT8uZ2V0KHRva2VuKTtcclxuICAgIGlmICh0b2tlbiAhPT0gJ2NvbmZpcm1EaWdlc3RDcmVkZW50aWFscycpIHtcclxuICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICB0aGlzLnVzZXJbdG9rZW5dID0gZm9ybUZpZWxkPy52YWx1ZTtcclxuICAgIH1cclxuICAgIGlmICh0b2tlbiA9PT0gJ2RpZ2VzdENyZWRlbnRpYWxzJyB8fCB0b2tlbiA9PT0gJ2NvbmZpcm1EaWdlc3RDcmVkZW50aWFscycpIHtcclxuICAgICAgdGhpcy5kaWdlc3RDcmVkZW50aWFsc0hhbmRsZXIodG9rZW4sIGZvcm1GaWVsZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRpZ2VzdENyZWRlbnRpYWxzSGFuZGxlcih0b2tlbjogc3RyaW5nLCBmaWVsZDogYW55KSB7XHJcbiAgICBjb25zdCBmaWVsZE5hbWVUb0NvbXBhcmUgPSB0b2tlbiA9PT0gJ2RpZ2VzdENyZWRlbnRpYWxzJyA/ICdjb25maXJtRGlnZXN0Q3JlZGVudGlhbHMnIDogJ2RpZ2VzdENyZWRlbnRpYWxzJztcclxuICAgIGNvbnN0IGZpZWxkVG9Db21wYXJlID0gdGhpcy51c2VyU2VydmljZS51c2VyLmZvcm0uZ2V0KGZpZWxkTmFtZVRvQ29tcGFyZSk7XHJcbiAgICBpZiAodGhpcy51c2VyU2VydmljZS51c2VyPy5mb3JtPy5nZXQodG9rZW4pKSB7XHJcbiAgICAgIHRoaXMudXNlclNlcnZpY2UudXNlcj8uZm9ybT8uZ2V0KHRva2VuKT8uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVzZXI/LmZvcm0/LmdldChmaWVsZE5hbWVUb0NvbXBhcmUpPy5zZXRFcnJvcnMobnVsbCk7XHJcblxyXG4gICAgICAvKiBpZiAoIWZpZWxkLnZhbHVlICYmICFmaWVsZFRvQ29tcGFyZS52YWx1ZSkge1xyXG4gICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVzZXI/LmRpZ2VzdENyZWRlbnRpYWxzID0gbnVsbDtcclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgfVxyXG5cclxuICAgICAgIGlmICghZmllbGQudmFsdWUgJiYgZmllbGRUb0NvbXBhcmUudmFsdWUgfHwgIWZpZWxkVG9Db21wYXJlLnZhbHVlICYmIGZpZWxkLnZhbHVlKSB7XHJcbiAgICAgICAgIGNvbnN0IHJlcXVpcmVkRmllbGROYW1lID0gZmllbGQudmFsdWUgPyBmaWVsZE5hbWVUb0NvbXBhcmUgOiB0b2tlbjtcclxuICAgICAgICAgdGhpcy51c2VyU2VydmljZS51c2VyLmZvcm0uZ2V0KHJlcXVpcmVkRmllbGROYW1lKS5zZXRFcnJvcnMoe3JlcXVpcmVkOiB0cnVlfSk7XHJcbiAgICAgICAgIHJldHVybjtcclxuICAgICAgIH1cclxuICAgICAgIGlmIChmaWVsZC52YWx1ZSAmJiBmaWVsZFRvQ29tcGFyZS52YWx1ZSAmJiBmaWVsZC52YWx1ZSAhPT0gZmllbGRUb0NvbXBhcmUudmFsdWUpIHtcclxuICAgICAgICAgdGhpcy51c2VyU2VydmljZS51c2VyLmZvcm0uZ2V0KHRva2VuKS5zZXRFcnJvcnMoe21pc21hdGNoOiB0cnVlfSk7XHJcbiAgICAgICAgIHRoaXMudXNlclNlcnZpY2UudXNlci5mb3JtLmdldChmaWVsZE5hbWVUb0NvbXBhcmUpLnNldEVycm9ycyh7bWlzbWF0Y2g6IHRydWV9KTtcclxuICAgICAgIH0qL1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RGF0YSgpIHtcclxuICAgIHRoaXMuZGF0YVBlbmRpbmcgPSB0cnVlO1xyXG4gICAgbGV0IHJlcXVlc3Q7XHJcbiAgICBpZihsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaXNXZWJleCcpID09PSAndHJ1ZScpIHtcclxuICAgICAgcmVxdWVzdCA9IHRoaXMudXNlclNlcnZpY2UuZmV0Y2hXZWJleFVzZXJUb2tlbihsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY3VzdG9tZXJJZCcpISwgdGhpcy51c2VySWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVxdWVzdCA9IHRoaXMudXNlclNlcnZpY2UuZmV0Y2hVc2VyVG9rZW4odGhpcy5zaXRlSWQsIHRoaXMudXNlcklkLCB0aGlzLmlzTGRhcCk7XHJcbiAgICB9XHJcbiAgICByZXF1ZXN0LnN1YnNjcmliZSh7XHJcbiAgICAgICAgY29tcGxldGU6ICh2OiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuZGF0YVBlbmRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmRhdGFQZW5kaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYC90dWtpL21pZ3JhdGUvdXNlcnNgXSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENvb2tpZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIGRheXM6IG51bWJlcikge1xyXG4gICAgdmFyIGV4cGlyZXMgPSBcIlwiO1xyXG4gICAgaWYgKGRheXMpIHtcclxuICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICBkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgKyAoZGF5cyAqIDI0ICogNjAgKiA2MCAqIDEwMDApKTtcclxuICAgICAgZXhwaXJlcyA9IFwiOyBleHBpcmVzPVwiICsgZGF0ZS50b1VUQ1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgZG9jdW1lbnQuY29va2llID0gbmFtZSArIFwiPVwiICsgKHZhbHVlIHx8IFwiXCIpICsgZXhwaXJlcyArIFwiOyBwYXRoPS9cIjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlVXJsSWZVc2VySWRDaGFuZ2VkKCk6IHZvaWQge1xyXG4gICAgY29uc3QgbmV3VXNlcklkID0gdGhpcy51c2VyPy5uZXdVc2VyaWQgfHwgdGhpcy5mb3JtPy5nZXQoJ3VzZXJpZCcpPy52YWx1ZTtcclxuICAgIGlmICghbmV3VXNlcklkIHx8IG5ld1VzZXJJZCA9PT0gdGhpcy51c2VySWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IFtwYXRoLCBxdWVyeSA9ICcnXSA9IHRoaXMucm91dGVyLnVybC5zcGxpdCgnPycpO1xyXG4gICAgY29uc3QgdXJsU2VnbWVudHMgPSBwYXRoLnNwbGl0KCcvJykuZmlsdGVyKEJvb2xlYW4pO1xyXG4gICAgY29uc3QgY3VycmVudEluZGV4ID0gdXJsU2VnbWVudHMuZmluZEluZGV4KFxyXG4gICAgICBzZWdtZW50ID0+IGRlY29kZVVSSUNvbXBvbmVudChzZWdtZW50KSA9PT0gdGhpcy51c2VySWRcclxuICAgICk7XHJcbiAgICBpZiAoY3VycmVudEluZGV4ID09PSAtMSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdXJsU2VnbWVudHNbY3VycmVudEluZGV4XSA9IG5ld1VzZXJJZDtcclxuICAgIHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKGAvJHt1cmxTZWdtZW50cy5qb2luKCcvJyl9JHtxdWVyeSA/IGA/JHtxdWVyeX1gIDogJyd9YCk7XHJcbiAgICB0aGlzLnVzZXJJZCA9IG5ld1VzZXJJZDtcclxuICAgIHRoaXMudXNlclNlcnZpY2UudXNlcklkID0gbmV3VXNlcklkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZVVzZXJJZCgpIHtcclxuICAgIGNvbnN0IGlkQ29udHJvbCA9IHRoaXMuZm9ybS5nZXQoJ3VzZXJpZCcpO1xyXG4gICAgaWYgKGlkQ29udHJvbD8udmFsdWUgIT09ICcnICYmIGlkQ29udHJvbD8udmFsdWUgIT09IHRoaXMudXNlclNlcnZpY2Uub3JpZ2luVXNlci51c2VyaWQpIHtcclxuICAgICAgdGhpcy51c2VyU2VydmljZS5mZXRjaFVzZXJCeUlkKGlkQ29udHJvbD8udmFsdWUpXHJcbiAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVzZXJJZEV4aXN0UGVuZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZENvbnRyb2w/LnNldEVycm9ycyh7ZXhpc3Q6IHRydWV9KTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybT8uZ2V0KCd1c2VyaWQnKT8uaGFzRXJyb3IoJ2V4aXN0JykpIHtcclxuICAgICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmhhc0V4aXN0ZWRVc2VySWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UuaGFzRXhpc3RlZFVzZXJJZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVzZXJJZEV4aXN0UGVuZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzICE9PSA0MDQpIHtcclxuICAgICAgICAgICAgICAvLyB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uud2FybmluZyh0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdBUFBfVVNFUl9NU0cuQ0hFQ0tfVVNFUl9JRF9GQUlMRUQnKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy51c2VyU2VydmljZS51c2VyLm5ld1VzZXJpZCA9IHRoaXMuZm9ybT8uZ2V0KCd1c2VyaWQnKT8udmFsdWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gZGVsZXRlIHRoaXMudXNlclNlcnZpY2U/LnVzZXI/Lm5ld1VzZXJpZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNhdmUoKSB7XHJcbiAgICB0aGlzLnNhdmVDaGFuZ2VzKClcclxuICB9XHJcblxyXG59XHJcbiIsIjxhcHAtbG9hZGVyICpuZ0lmPVwiZGF0YVBlbmRpbmcgfHwgc2F2ZVBlbmRpbmcgfHwgdXNlclNlcnZpY2UuZGF0YVBlbmRpbmdcIj48L2FwcC1sb2FkZXI+XHJcblxyXG48ZGl2ICpuZ0lmPVwiIWRhdGFQZW5kaW5nXCI+XHJcbiAgPGRpdiBjbGFzcz1cImdvLWJhY2stYm94XCIgKGNsaWNrKT1cIm9uR29CYWNrKClcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJnby1iYWNrLWJveC1jb250YWluZXJcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJhcHAtaWNvbiBpY29uLXdlYmV4LWxlZnQtYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZ28tYmFjay10aXRsZVwiPlVzZXJzPC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxhcHAtdXNlci1pbmZvXHJcbiAgICAqbmdJZj1cInVzZXJcIlxyXG4gICAgW25hbWVdPVwidXNlck5hbWVcIlxyXG4gICAgW2VtYWlsXT1cInVzZXIuZW1haWxcIlxyXG4gICAgW2FjdGl2ZV09XCJ0cnVlXCJcclxuICAgIFtwb3NpdGlvbl09XCJ1c2VyLnNpdGVOYW1lID8gJ01lbWJlciBvZiAnICsgdXNlci5zaXRlTmFtZSA6ICcnXCJcclxuICAgIFtjdWNtaWRdPVwidXNlci5jdWNtSWRcIj5cclxuICA8L2FwcC11c2VyLWluZm8+XHJcblxyXG4gIDwhLS0gU3VtbWFyeSBpc24ndCBhdmFpbGFibGUgZm9yIFdlYmV4IHVzZXJzLCBzbyB0aGV5IHN0YXJ0IG9uIHRoZSBQcm9maWxlIHRhYiAtLT5cclxuICA8bWF0LXRhYi1ncm91cCBkaXNhYmxlUmlwcGxlIGNsYXNzPVwidGFicy1jb250YWluZXJcIiBbc2VsZWN0ZWRJbmRleF09XCJ3ZWJleFVVSUQgPyAxIDogMFwiPlxyXG4gICAgPG1hdC10YWIgbGFiZWw9XCJTdW1tYXJ5XCIgW2Rpc2FibGVkXT1cIiEhd2ViZXhVVUlEXCI+XHJcbiAgICAgIDxhcHAtdXNlci1zdW1tYXJ5ICpuZ0lmPVwidXNlclwiIFt1c2VyXT1cInVzZXJcIj48L2FwcC11c2VyLXN1bW1hcnk+XHJcbiAgICA8L21hdC10YWI+XHJcbiAgICA8bWF0LXRhYiBsYWJlbD1cIlByb2ZpbGVcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIndlYmV4VVVJRCA/IHdlYmV4VXNlclByb2ZpbGUgOiB1c2VyUHJvZmlsZVwiPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbWF0LXRhYj5cclxuICAgIDwhLS0gPG1hdC10YWIgbGFiZWw9XCJHZW5lcmFsXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ1c2VyUHJvZmlsZVwiPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbWF0LXRhYj4gLS0+XHJcbiAgICA8IS0tIDxtYXQtdGFiIGxhYmVsPVwiTWVldGluZ3NcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInVzZXJQcm9maWxlXCI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9tYXQtdGFiPiAtLT5cclxuICAgIDxtYXQtdGFiIGxhYmVsPVwiQ2FsbGluZ1wiIFtkaXNhYmxlZF09XCIhcHJpbWFyeUxpbmVSZWZlcmVuY2VcIj5cclxuICAgICAgPGFwcC11c2VyLWNhbGxpbmdcclxuICAgICAgICAqbmdJZj1cInByaW1hcnlMaW5lUmVmZXJlbmNlXCJcclxuICAgICAgICBbc2l0ZUlkXT1cInNpdGVJZFwiXHJcbiAgICAgICAgKG9uRXh0ZW5zaW9uQ2hhbmdlKT1cIm9uRXh0ZW5zaW9uQ2hhbmdlKClcIlxyXG4gICAgICAgIFtwcmltYXJ5TGluZURpcmVjdG9yeU51bWJlcl09XCJwcmltYXJ5TGluZVJlZmVyZW5jZVwiPlxyXG4gICAgICA8L2FwcC11c2VyLWNhbGxpbmc+XHJcbiAgICA8L21hdC10YWI+XHJcbiAgICA8IS0tIDxtYXQtdGFiIGxhYmVsPVwiTWVzc2FnaW5nXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ1c2VyUHJvZmlsZVwiPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbWF0LXRhYj4gLS0+XHJcbiAgICA8IS0tIDxtYXQtdGFiIGxhYmVsPVwiSHlicmlkIFNlcnZpY2VzXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ1c2VyUHJvZmlsZVwiPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbWF0LXRhYj4gLS0+XHJcbiAgICA8bWF0LXRhYiBsYWJlbD1cIkRldmljZXNcIiBbZGlzYWJsZWRdPVwiIXVzZXI/LmRldmljZXMgfHwgIXVzZXI/LmRldmljZXMubGVuZ3RoXCI+XHJcbiAgICAgIDxhcHAtZGV2aWNlLWxpc3RcclxuICAgICAgICBbZGV2aWNlc109XCJ1c2VyPy5kZXZpY2VzXCJcclxuICAgICAgICAob25EZXZpY2VTZWxlY3QpPVwib25EZXZpY2VTZWxlY3QoJGV2ZW50KVwiPlxyXG4gICAgICA8L2FwcC1kZXZpY2UtbGlzdD5cclxuICAgIDwvbWF0LXRhYj5cclxuICAgIDwhLS0gPG1hdC10YWIgbGFiZWw9XCJWaWRjYXN0XCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ1c2VyUHJvZmlsZVwiPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbWF0LXRhYj4gLS0+XHJcbiAgICA8bWF0LXRhYiBsYWJlbD1cIkxpbmVzXCIgW2Rpc2FibGVkXT1cInRydWVcIj48L21hdC10YWI+XHJcbiAgICA8bWF0LXRhYiBsYWJlbD1cIkZlYXR1cmVzXCIgW2Rpc2FibGVkXT1cInRydWVcIj48L21hdC10YWI+XHJcbiAgPC9tYXQtdGFiLWdyb3VwPlxyXG5cclxuICA8IS0tIGtlZXBzIHRoZSBib3R0b20gb2YgdGhlIGNvbnRlbnQgcmVhY2hhYmxlIGFib3ZlIHRoZSBmaXhlZCBwYW5lbCAtLT5cclxuICA8IS0tIDxkaXYgY2xhc3M9XCJhY3Rpb25zLXBhbmVsLXNwYWNlclwiIFtjbGFzcy5hY3Rpb25zLXBhbmVsLXNwYWNlci0tdmlzaWJsZV09XCJoYXNVbnNhdmVkQ2hhbmdlcygpXCI+PC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImFjdGlvbnMtcGFuZWxcIlxyXG4gICAgICAgW2NsYXNzLmFjdGlvbnMtcGFuZWwtLXZpc2libGVdPVwiaGFzVW5zYXZlZENoYW5nZXMoKVwiXHJcbiAgICAgICBbYXR0ci5hcmlhLWhpZGRlbl09XCIhaGFzVW5zYXZlZENoYW5nZXMoKVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImFjdGlvbnMtcGFuZWxfX2FjdGlvbnNcIj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tb3V0bGluZVwiIFtkaXNhYmxlZF09XCJzYXZlUGVuZGluZ1wiIChjbGljayk9XCJjYW5jZWxDaGFuZ2VzKClcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tZmlsbGVkXCIgW2Rpc2FibGVkXT1cImlzU2F2aW5nRGlzYWJsZWQoKVwiIChjbGljayk9XCJzYXZlQ2hhbmdlcygpXCI+U2F2ZTwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+IC0tPiAgXHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjdXNlclByb2ZpbGU+XHJcbiAgICA8Zm9ybSAqbmdJZj1cInVzZXIgJiYgZm9ybVwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5mby1ib3hlcy1jb250YWluZXJcIj5cclxuXHJcbiAgICAgICAgPCEtLSAgICBVU0VSIElORk8gQk9YLS0+XHJcbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjYXJkIHZlcnRpY2FsLWNhcmRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZVwiPlVzZXIgRGV0YWlsczwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1haW4tY29udGVudFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci1ib3R0b21cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+VXNlciBJZDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbGFpbi1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiVXNlciBJZFwiIGZvcm1Db250cm9sTmFtZT1cInVzZXJpZFwiIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCd1c2VyaWQnKVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWVsZC1lcnJvclwiICpuZ0lmPVwiZm9ybS5nZXQoJ3VzZXJpZCcpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICBUaGlzIGZpZWxkIGlzIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpZWxkLWVycm9yXCIgKm5nSWY9XCJmb3JtLmdldCgndXNlcmlkJyk/Lmhhc0Vycm9yKCdleGlzdCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgIFVzZXIgSUQgYWxyZWFkeSBleGlzdHNcclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPlByaW1hcnkgZW1haWw8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiBwbGFjZWhvbGRlcj1cIlByaW1hcnkgZW1haWxcIiBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdlbWFpbCcpXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpZWxkLWVycm9yXCIgKm5nSWY9XCJmb3JtLmdldCgnZW1haWwnKT8udG91Y2hlZCAmJiBmb3JtLmdldCgnZW1haWwnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1leGNsYW1hdGlvbi10cmlhbmdsZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBpcyByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWVsZC1lcnJvclwiICpuZ0lmPVwiZm9ybS5nZXQoJ2VtYWlsJyk/LnRvdWNoZWQgJiYgZm9ybS5nZXQoJ2VtYWlsJyk/Lmhhc0Vycm9yKCdwYXR0ZXJuJylcIj5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1leGNsYW1hdGlvbi10cmlhbmdsZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgUGxlYXNlIGVudGVyIHZhbGlkIGVtYWlsXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5GaXNydCBOYW1lPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fZmllbGRcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgcGxhY2Vob2xkZXI9XCJGaXNydCBOYW1lXCIgZm9ybUNvbnRyb2xOYW1lPVwiZmlyc3ROYW1lXCIgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ2ZpcnN0TmFtZScpXCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkxhc3QgTmFtZTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbGFpbi1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiTGFzdCBOYW1lXCIgZm9ybUNvbnRyb2xOYW1lPVwibGFzdE5hbWVcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnbGFzdE5hbWUnKVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWVsZC1lcnJvclwiICpuZ0lmPVwiZm9ybS5nZXQoJ2xhc3ROYW1lJyk/LnRvdWNoZWQgJiYgZm9ybS5nZXQoJ2xhc3ROYW1lJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgIFRoaXMgZmllbGQgaXMgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3NlY3Rpb24+XHJcblxyXG4gICAgICAgIDwhLS0gICAgVVNFUiBJTkZPIEJPWC0tPlxyXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2FyZCB2ZXJ0aWNhbC1jYXJkXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGl0bGVcIj5HZW5lcmFsIFVzZXIgSW5mbzwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1haW4tY29udGVudFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci1ib3R0b21cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+RGVwYXJ0bWVudDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbGFpbi1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiRGVwYXJ0bWVudFwiIGZvcm1Db250cm9sTmFtZT1cImRlcGFydG1lbnRcIiB0eXBlPVwidGV4dFwiIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdkZXBhcnRtZW50JylcIj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPk1hbmFnZXIgdXNlciBJRDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbGFpbi1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiTWFuYWdlciB1c2VyIElEXCIgZm9ybUNvbnRyb2xOYW1lPVwibWFuYWdlclwiIHR5cGU9XCJ0ZXh0XCIgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ21hbmFnZXInKVwiPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+QXNzb2NpYXRlZCBQQzwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbGFpbi1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiQXNzb2NpYXRlZCBQQ1wiIGZvcm1Db250cm9sTmFtZT1cImFzc29jaWF0ZWRQY1wiIHR5cGU9XCJ0ZXh0XCIgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ2Fzc29jaWF0ZWRQYycpXCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5EaWdlc3QgY3JlZGVudGlhbHM8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiBwbGFjZWhvbGRlcj1cIkRpZ2VzdCBjcmVkZW50aWFsc1wiIGZvcm1Db250cm9sTmFtZT1cImRpZ2VzdENyZWRlbnRpYWxzXCIgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdkaWdlc3RDcmVkZW50aWFscycpXCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Vc2VyIHByb2ZpbGU8L2Rpdj5cclxuICAgICAgICAgICAgICA8YXBwLWxhenktbG9hZGluZy1zZWxlY3RcclxuICAgICAgICAgICAgICAgIFtzaXRlSWRdPVwic2l0ZUlkXCJcclxuICAgICAgICAgICAgICAgIFtjb250cm9sTmFtZV09XCIndXNlclByb2ZpbGUnXCJcclxuICAgICAgICAgICAgICAgIFtmb3JtXT1cInVzZXIuZm9ybVwiXHJcbiAgICAgICAgICAgICAgICAoY2hhbmdlRmllbGQpPVwiY2hhbmdlRmllbGQoJ3VzZXJQcm9maWxlJylcIlxyXG4gICAgICAgICAgICAgICAgW29wdGlvbnNUb2tlbl09XCIndXNlclByb2ZpbGVzJ1wiXHJcbiAgICAgICAgICAgICAgPjwvYXBwLWxhenktbG9hZGluZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Nb2JpbGUgdm9pY2UgYWNjZXNzPC9kaXY+XHJcbiAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9XCJjdXN0b20tdG9nZ2xlXCJcclxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVuYWJsZU1vYmlsZVZvaWNlQWNjZXNzXCJcclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2VGaWVsZCgnZW5hYmxlTW9iaWxlVm9pY2VBY2Nlc3MnKVwiXHJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJ1c2VyLmVuYWJsZU1vYmlsZVZvaWNlQWNjZXNzXCI+XHJcbiAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+VXNlcmxvY2FsZTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxhcHAtbGF6eS1sb2FkaW5nLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgW3NpdGVJZF09XCJzaXRlSWRcIlxyXG4gICAgICAgICAgICAgICAgW2NvbnRyb2xOYW1lXT1cIid1c2VyTG9jYWxlJ1wiXHJcbiAgICAgICAgICAgICAgICBbZm9ybV09XCJ1c2VyLmZvcm1cIlxyXG4gICAgICAgICAgICAgICAgKGNoYW5nZUZpZWxkKT1cImNoYW5nZUZpZWxkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgW29wdGlvbnNUb2tlbl09XCIndXNlckxvY2FsZXMnXCJcclxuICAgICAgICAgICAgICAgIFtkZWZhdWx0XT1cIntrZXk6ICcnLCB2YWx1ZTogJ05vbmUnLCBkaXNhYmxlZDogZmFsc2V9XCI+XHJcbiAgICAgICAgICAgICAgPC9hcHAtbGF6eS1sb2FkaW5nLXNlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3BcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+Q29uZmlybSBkaWdlc3QgY3JlZGVudGlhbHM8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiBwbGFjZWhvbGRlcj1cIkNvbmZpcm0gZGlnZXN0IGNyZWRlbnRpYWxzXCIgZm9ybUNvbnRyb2xOYW1lPVwiY29uZmlybURpZ2VzdENyZWRlbnRpYWxzXCIgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdjb25maXJtRGlnZXN0Q3JlZGVudGlhbHMnKVwiPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvc2VjdGlvbj5cclxuXHJcbiAgICAgICAgPCEtLSAgICBVU0VSIElORk8gQk9YLS0+XHJcbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjYXJkIHZlcnRpY2FsLWNhcmRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZVwiPkNvbnRhY3QgSW5mb3JtYXRpb248L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPk1pZGRsZSBOYW1lPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fZmllbGRcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIk1pZGRsZSBOYW1lXCIgZm9ybUNvbnRyb2xOYW1lPVwibWlkZGxlTmFtZVwiIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdtaWRkbGVOYW1lJylcIj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPlRlbGVwaG9uZSBOdW1iZXI8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgcGxhY2Vob2xkZXI9XCJUZWxlcGhvbmUgTnVtYmVyXCIgZm9ybUNvbnRyb2xOYW1lPVwidGVsZXBob25lTnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgndGVsZXBob25lTnVtYmVyJylcIj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPk1vYmlsZSBOdW1iZXI8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgcGxhY2Vob2xkZXI9XCJNb2JpbGUgTnVtYmVyXCIgZm9ybUNvbnRyb2xOYW1lPVwibW9iaWxlTnVtYmVyXCIgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ21vYmlsZU51bWJlcicpXCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5EaXJlY3RvcnkgVVJJPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fZmllbGRcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIkRpcmVjdG9yeSBVUklcIiBmb3JtQ29udHJvbE5hbWU9XCJkaXJlY3RvcnlVcmlcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnZGlyZWN0b3J5VXJpJylcIj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPlRpdGxlPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fZmllbGRcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIlRpdGxlXCIgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgndGl0bGUnKVwiPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+SG9tZSBOdW1iZXI8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgcGxhY2Vob2xkZXI9XCJIb21lIE51bWJlclwiIGZvcm1Db250cm9sTmFtZT1cImhvbWVOdW1iZXJcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnaG9tZU51bWJlcicpXCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5QYWdlciBOdW1iZXI8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgcGxhY2Vob2xkZXI9XCJQYWdlciBOdW1iZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJwYWdlck51bWJlclwiIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdwYWdlck51bWJlcicpXCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkRpc3BsYXkgTmFtZTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbGFpbi1pbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJEaXNwbGF5IE5hbWVcIiBmb3JtQ29udHJvbE5hbWU9XCJkaXNwbGF5TmFtZVwiIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdkaXNwbGF5TmFtZScpXCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9zZWN0aW9uPlxyXG5cclxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNhcmQgdmVydGljYWwtY2FyZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlclwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCI+RU0gQ29uZmlndXJhdGlvbnM8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkJMRiBQcmVzZW5jZSBHcm91cDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxhcHAtbGF6eS1sb2FkaW5nLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgW3NpdGVJZF09XCJzaXRlSWRcIlxyXG4gICAgICAgICAgICAgICAgW2NvbnRyb2xOYW1lXT1cIidwcmVzZW5jZUdyb3VwJ1wiXHJcbiAgICAgICAgICAgICAgICBbZm9ybV09XCJ1c2VyLmZvcm1cIlxyXG4gICAgICAgICAgICAgICAgKGNoYW5nZUZpZWxkKT1cImNoYW5nZUZpZWxkKCdwcmVzZW5jZUdyb3VwJylcIlxyXG4gICAgICAgICAgICAgICAgW29wdGlvbnNUb2tlbl09XCIndXNlclByb2ZpbGVzJ1wiXHJcbiAgICAgICAgICAgICAgPjwvYXBwLWxhenktbG9hZGluZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5TdWJzY3JpYmUgQ1NTPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fZmllbGRcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgcGxhY2Vob2xkZXI9XCJTdWJzY3JpYmUgQ1NTXCIgZm9ybUNvbnRyb2xOYW1lPVwic3Vic2NyaWJlQ3NzXCIgdHlwZT1cInRleHRcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnc3Vic2NyaWJlQ3NzJylcIj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkFsbG93IENvbnRyb2wgb2YgRGV2aWNlIGZyb20gQ1RJPC9kaXY+XHJcbiAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9XCJjdXN0b20tdG9nZ2xlXCJcclxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYWxsb3dEZXZpY2VDb250cm9sRnJvbUN0aVwiXHJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2VGaWVsZCgnYWxsb3dEZXZpY2VDb250cm9sRnJvbUN0aScpXCI+XHJcbiAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5FbmFibGUgRXh0ZW5zaW9uIE1vYmlsaXR5IENyb3NzIENsdXN0ZXI8L2Rpdj5cclxuICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz1cImN1c3RvbS10b2dnbGVcIlxyXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbmFibGVDcm9zc0NsdXN0ZXJFbVwiXHJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2VGaWVsZCgnZW5hYmxlQ3Jvc3NDbHVzdGVyRW0nKVwiPlxyXG4gICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3NlY3Rpb24+XHJcblxyXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2FyZCB2ZXJ0aWNhbC1jYXJkXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGl0bGVcIj5NdWx0aWxldmVsIFByZWNlZGVuY2UgYW5kIFByZWVtcHRpb24gQXV0aG9yaXphdGlvbjwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1haW4tY29udGVudFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci1ib3R0b21cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+TUxQUCBVc2VyIElkZW50aWZpY2F0aW9uIE51bWJlcjwvZGl2PlxyXG4gICAgICAgICAgICAgIDxhcHAtbGF6eS1sb2FkaW5nLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgW3NpdGVJZF09XCJzaXRlSWRcIlxyXG4gICAgICAgICAgICAgICAgW2NvbnRyb2xOYW1lXT1cIid1c2VyUHJvZmlsZSdcIlxyXG4gICAgICAgICAgICAgICAgW2Zvcm1dPVwidXNlci5mb3JtXCJcclxuICAgICAgICAgICAgICAgIChjaGFuZ2VGaWVsZCk9XCJjaGFuZ2VGaWVsZCgndXNlclByb2ZpbGUnKVwiXHJcbiAgICAgICAgICAgICAgICBbb3B0aW9uc1Rva2VuXT1cIid1c2VyUHJvZmlsZXMnXCI+XHJcbiAgICAgICAgICAgICAgPC9hcHAtbGF6eS1sb2FkaW5nLXNlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxtYXQtZGl2aWRlciAvPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPk1MUFAgUHJlY2VkZW5jZSBBdXRob3JpemF0aW9uIExldmVsPC9kaXY+XHJcbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJzaW1wbGUtc2VsZWN0XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJtbHBwUHJlY2VkZW5jZVBhdHRlcm5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJjaGFuZ2VGaWVsZCgnbWxwcFByZWNlZGVuY2VQYXR0ZXJuJylcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBhdXRoTGV2ZWxPcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7b3B0aW9ufX1cclxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXIgLz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkVuYWJsZSBNTFBQPC9kaXY+XHJcbiAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9XCJjdXN0b20tdG9nZ2xlXCJcclxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW5hYmxlTW9iaWxlVm9pY2VBY2Nlc3NcIlxyXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hhbmdlRmllbGQoJ2VuYWJsZU1vYmlsZVZvaWNlQWNjZXNzJylcIlxyXG4gICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJ1c2VyLmVuYWJsZU1vYmlsZVZvaWNlQWNjZXNzXCI+XHJcbiAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvc2VjdGlvbj5cclxuXHJcbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjYXJkIHZlcnRpY2FsLWNhcmRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZVwiPlNlcnZpY2UgU2V0dGluZ3M8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Ib21lIENsdXN0ZXI8L2Rpdj5cclxuICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz1cImN1c3RvbS10b2dnbGVcIlxyXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJob21lQ2x1c3RlclwiXHJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2VGaWVsZCgnaG9tZUNsdXN0ZXInKVwiPlxyXG4gICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3NlY3Rpb24+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZm9ybT5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI3dlYmV4VXNlclByb2ZpbGU+XG4gICAgPGZvcm0gKm5nSWY9XCJ1c2VyICYmIGZvcm1cIiBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJveGVzLWNvbnRhaW5lclwiPlxuXG4gICAgICAgIDwhLS0gICAgVVNFUiBJTkZPIEJPWC0tPlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNhcmQgdmVydGljYWwtY2FyZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGl0bGVcIj5Vc2VyIERldGFpbHM8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1haW4tY29udGVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItYm90dG9tXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Vc2VyIElkPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiBwbGFjZWhvbGRlcj1cIlVzZXIgSWRcIiBmb3JtQ29udHJvbE5hbWU9XCJ1c2VyaWRcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgndXNlcmlkJylcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpZWxkLWVycm9yXCIgKm5nSWY9XCJmb3JtLmdldCgndXNlcmlkJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBpcyByZXF1aXJlZFxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpZWxkLWVycm9yXCIgKm5nSWY9XCJmb3JtLmdldCgndXNlcmlkJyk/Lmhhc0Vycm9yKCdleGlzdCcpXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgVXNlciBJRCBhbHJlYWR5IGV4aXN0c1xuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+UHJpbWFyeSBlbWFpbDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgcGxhY2Vob2xkZXI9XCJQcmltYXJ5IGVtYWlsXCIgZm9ybUNvbnRyb2xOYW1lPVwiZW1haWxcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnZW1haWwnKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmllbGQtZXJyb3JcIiAqbmdJZj1cImZvcm0uZ2V0KCdlbWFpbCcpPy50b3VjaGVkICYmIGZvcm0uZ2V0KCdlbWFpbCcpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1leGNsYW1hdGlvbi10cmlhbmdsZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgIFRoaXMgZmllbGQgaXMgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWVsZC1lcnJvclwiICpuZ0lmPVwiZm9ybS5nZXQoJ2VtYWlsJyk/LnRvdWNoZWQgJiYgZm9ybS5nZXQoJ2VtYWlsJyk/Lmhhc0Vycm9yKCdwYXR0ZXJuJylcIj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGVcIj48L2k+XG4gICAgICAgICAgICAgICAgICBQbGVhc2UgZW50ZXIgdmFsaWQgZW1haWxcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkZpc3J0IE5hbWU8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbGFpbi1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiRmlzcnQgTmFtZVwiIGZvcm1Db250cm9sTmFtZT1cImZpcnN0TmFtZVwiIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdmaXJzdE5hbWUnKVwiPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3BcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkxhc3QgTmFtZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgcGxhY2Vob2xkZXI9XCJMYXN0IE5hbWVcIiBmb3JtQ29udHJvbE5hbWU9XCJsYXN0TmFtZVwiIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdsYXN0TmFtZScpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWVsZC1lcnJvclwiICpuZ0lmPVwiZm9ybS5nZXQoJ2xhc3ROYW1lJyk/LnRvdWNoZWQgJiYgZm9ybS5nZXQoJ2xhc3ROYW1lJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBpcyByZXF1aXJlZFxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDwhLS0gICAgVVNFUiBJTkZPIEJPWC0tPlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNhcmQgdmVydGljYWwtY2FyZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGl0bGVcIj5HZW5lcmFsIFVzZXIgSW5mbzwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWFpbi1jb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci1ib3R0b21cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkRlcGFydG1lbnQ8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbGFpbi1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiRGVwYXJ0bWVudFwiIGZvcm1Db250cm9sTmFtZT1cImRlcGFydG1lbnRcIiB0eXBlPVwidGV4dFwiIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdkZXBhcnRtZW50JylcIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+TWFuYWdlciB1c2VyIElEPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiBwbGFjZWhvbGRlcj1cIk1hbmFnZXIgdXNlciBJRFwiIGZvcm1Db250cm9sTmFtZT1cIm1hbmFnZXJcIiB0eXBlPVwidGV4dFwiIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdtYW5hZ2VyJylcIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+QXNzb2NpYXRlZCBQQzwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgcGxhY2Vob2xkZXI9XCJBc3NvY2lhdGVkIFBDXCIgZm9ybUNvbnRyb2xOYW1lPVwiYXNzb2NpYXRlZFBjXCIgdHlwZT1cInRleHRcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnYXNzb2NpYXRlZFBjJylcIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+RGlnZXN0IGNyZWRlbnRpYWxzPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiBwbGFjZWhvbGRlcj1cIkRpZ2VzdCBjcmVkZW50aWFsc1wiIGZvcm1Db250cm9sTmFtZT1cImRpZ2VzdENyZWRlbnRpYWxzXCIgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnZGlnZXN0Q3JlZGVudGlhbHMnKVwiPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Vc2VyIHByb2ZpbGU8L2Rpdj5cbiAgICAgICAgICAgICAgPGFwcC1sYXp5LWxvYWRpbmctc2VsZWN0XG4gICAgICAgICAgICAgICAgW3NpdGVJZF09XCJzaXRlSWRcIlxuICAgICAgICAgICAgICAgIFtjb250cm9sTmFtZV09XCIndXNlclByb2ZpbGUnXCJcbiAgICAgICAgICAgICAgICBbZm9ybV09XCJ1c2VyLmZvcm1cIlxuICAgICAgICAgICAgICAgIChjaGFuZ2VGaWVsZCk9XCJjaGFuZ2VGaWVsZCgndXNlclByb2ZpbGUnKVwiXG4gICAgICAgICAgICAgICAgW29wdGlvbnNUb2tlbl09XCIndXNlclByb2ZpbGVzJ1wiXG4gICAgICAgICAgICAgID48L2FwcC1sYXp5LWxvYWRpbmctc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPk1vYmlsZSB2b2ljZSBhY2Nlc3M8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9XCJjdXN0b20tdG9nZ2xlXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbmFibGVNb2JpbGVWb2ljZUFjY2Vzc1wiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkNoYW5nZUZpZWxkKCdlbmFibGVNb2JpbGVWb2ljZUFjY2VzcycpXCJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJ1c2VyLmVuYWJsZU1vYmlsZVZvaWNlQWNjZXNzXCI+XG4gICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Vc2VybG9jYWxlPC9kaXY+XG4gICAgICAgICAgICAgIDxhcHAtbGF6eS1sb2FkaW5nLXNlbGVjdFxuICAgICAgICAgICAgICAgIFtzaXRlSWRdPVwic2l0ZUlkXCJcbiAgICAgICAgICAgICAgICBbY29udHJvbE5hbWVdPVwiJ3VzZXJMb2NhbGUnXCJcbiAgICAgICAgICAgICAgICBbZm9ybV09XCJ1c2VyLmZvcm1cIlxuICAgICAgICAgICAgICAgIChjaGFuZ2VGaWVsZCk9XCJjaGFuZ2VGaWVsZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbb3B0aW9uc1Rva2VuXT1cIid1c2VyTG9jYWxlcydcIlxuICAgICAgICAgICAgICAgIFtkZWZhdWx0XT1cIntrZXk6ICcnLCB2YWx1ZTogJ05vbmUnLCBkaXNhYmxlZDogZmFsc2V9XCI+XG4gICAgICAgICAgICAgIDwvYXBwLWxhenktbG9hZGluZy1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Db25maXJtIGRpZ2VzdCBjcmVkZW50aWFsczwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgcGxhY2Vob2xkZXI9XCJDb25maXJtIGRpZ2VzdCBjcmVkZW50aWFsc1wiIGZvcm1Db250cm9sTmFtZT1cImNvbmZpcm1EaWdlc3RDcmVkZW50aWFsc1wiIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ2NvbmZpcm1EaWdlc3RDcmVkZW50aWFscycpXCI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8IS0tICAgIFVTRVIgSU5GTyBCT1gtLT5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjYXJkIHZlcnRpY2FsLWNhcmRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCI+Q29udGFjdCBJbmZvcm1hdGlvbjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWFpbi1jb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci1ib3R0b21cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPk1pZGRsZSBOYW1lPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiTWlkZGxlIE5hbWVcIiBmb3JtQ29udHJvbE5hbWU9XCJtaWRkbGVOYW1lXCIgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ21pZGRsZU5hbWUnKVwiPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5UZWxlcGhvbmUgTnVtYmVyPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgcGxhY2Vob2xkZXI9XCJUZWxlcGhvbmUgTnVtYmVyXCIgZm9ybUNvbnRyb2xOYW1lPVwidGVsZXBob25lTnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ3RlbGVwaG9uZU51bWJlcicpXCI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPk1vYmlsZSBOdW1iZXI8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbGFpbi1pbnB1dFwiIHR5cGU9XCJudW1iZXJcIiBwbGFjZWhvbGRlcj1cIk1vYmlsZSBOdW1iZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJtb2JpbGVOdW1iZXJcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnbW9iaWxlTnVtYmVyJylcIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+RGlnZXN0IGNyZWRlbnRpYWxzPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiRGlnZXN0IGNyZWRlbnRpYWxzXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGlnZXN0Q3JlZGVudGlhbHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnZGlnZXN0Q3JlZGVudGlhbHMnKVwiPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5EaXJlY3RvcnkgVVJJPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiRGlyZWN0b3J5IFVSSVwiIGZvcm1Db250cm9sTmFtZT1cImRpcmVjdG9yeVVyaVwiIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdkaXJlY3RvcnlVcmknKVwiPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5UaXRsZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIlRpdGxlXCIgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgndGl0bGUnKVwiPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Ib21lIE51bWJlcjwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgdHlwZT1cIm51bWJlclwiIHBsYWNlaG9sZGVyPVwiSG9tZSBOdW1iZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJob21lTnVtYmVyXCIgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ2hvbWVOdW1iZXInKVwiPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5QYWdlciBOdW1iZXI8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbGFpbi1pbnB1dFwiIHR5cGU9XCJudW1iZXJcIiBwbGFjZWhvbGRlcj1cIlBhZ2VyIE51bWJlclwiIGZvcm1Db250cm9sTmFtZT1cInBhZ2VyTnVtYmVyXCIgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ3BhZ2VyTnVtYmVyJylcIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5EaXNwbGF5IE5hbWU8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbGFpbi1pbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJEaXNwbGF5IE5hbWVcIiBmb3JtQ29udHJvbE5hbWU9XCJkaXNwbGF5TmFtZVwiIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdkaXNwbGF5TmFtZScpXCI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgPC9kaXY+XG4gICAgPC9mb3JtPlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XHJcblxyXG48IS0tIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInNhdmUoKVwiID5TYXZlPC9idXR0b24+IC0tPiJdfQ==
|
|
283
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1tYW5hZ2Utd2lkZ2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLW1hbmFnZS9zcmMvdXNlci1tYW5hZ2Utd2lkZ2V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLW1hbmFnZS9zcmMvdXNlci1tYW5hZ2Utd2lkZ2V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZGLE9BQU8sRUFBYSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU12RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVEzQyxNQUFNLE9BQU8seUJBQXlCO0lBNEJwQyxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsSUFBSSxFQUFFLEVBQUUsQ0FBQztJQUN0RSxDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJ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S0FBSyxDQUFBO2lCQUNsRTtZQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDVDthQUFNO1lBQ0wsNENBQTRDO1NBQzdDO0lBQ0gsQ0FBQztJQUVELElBQUk7UUFDRixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDcEIsQ0FBQzs7dUhBM1JVLHlCQUF5QjsyR0FBekIseUJBQXlCLGlUQ2pCdEMsaTA4QkFpbEJrRjs0RkRoa0JyRSx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0Usd0JBQXdCO3VKQVN4QixNQUFNO3NCQUFmLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFFRSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3VzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEFQSVNlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlcy9hcGkuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBMaW5lQXNzb2NpYXRpb24gfSBmcm9tICcuL2NsYXNzZXMvbGluZS1hc3NvY2lhdGlvbic7XHJcbmltcG9ydCB7IExpbmVBc3NvY2lhdGlvbkludGVyZmFjZSB9IGZyb20gJy4vY2xhc3Nlcy9saW5lLWFzc29jaWF0aW9uLWludGVyZmFjZSc7XHJcbmltcG9ydCB7IERldmljZSB9IGZyb20gJy4vY2xhc3Nlcy9kZXZpY2UnO1xyXG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRGNwQXBpU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZGNwLWFwaS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXVzZXItbWFuYWdlLXdpZGdldCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXItbWFuYWdlLXdpZGdldC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdXNlci1tYW5hZ2Utd2lkZ2V0LmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVc2VyTWFuYWdlV2lkZ2V0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgcHVibGljIGRhdGFQZW5kaW5nITogYm9vbGVhbjtcclxuICBwdWJsaWMgc2F2ZVBlbmRpbmcgPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIG9uU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3REZXZpY2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgZ29CYWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBJbnB1dCgpIHRva2VuITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGhvc3QhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZGNwSG9zdCE6IHN0cmluZztcclxuICBASW5wdXQoKSBzaXRlSWQhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgdXNlcklkITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGRldmljZU5hbWUhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaXNMZGFwITogYm9vbGVhbjtcclxuXHJcbiAgYXV0aExldmVsT3B0aW9uczogc3RyaW5nW10gPSBbXHJcbiAgICAnSW1tZWRpYXRlJyxcclxuICAgICdEZWZhdWx0JyxcclxuICAgICdSb3V0aW5lJyxcclxuICAgICdQcmlvcml0eScsXHJcbiAgICAnRmxhc2gnLFxyXG4gICAgJ0V4ZWN1dGl2ZSBPdmVycmlkZScsXHJcbiAgICAnRmxhc2ggT3ZlcnJpZGUnLFxyXG4gIF07XHJcblxyXG4gIGdldCBmb3JtKCk6IEZvcm1Hcm91cCB7XHJcbiAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZT8udXNlcj8uZm9ybTtcclxuICB9XHJcblxyXG4gIGdldCB1c2VyKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZS51c2VyO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHVzZXJOYW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7dGhpcy51c2VyPy5maXJzdE5hbWUgfHwgJyd9ICR7dGhpcy51c2VyPy5sYXN0TmFtZSB8fCAnJ31gO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGxpbmVBc3NvY2lhdGlvbigpOiBMaW5lQXNzb2NpYXRpb24gfCBMaW5lQXNzb2NpYXRpb25JbnRlcmZhY2V8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZT8udXNlcj8uZGV2aWNlcyAmJiB0aGlzLnVzZXJTZXJ2aWNlPy51c2VyPy5kZXZpY2VzWzBdICYmIHRoaXMudXNlclNlcnZpY2U/LnVzZXI/LmRldmljZXNbMF0ubGluZUFzc29jaWF0aW9ucyAmJiB0aGlzLnVzZXJTZXJ2aWNlPy51c2VyPy5kZXZpY2VzWzBdLmxpbmVBc3NvY2lhdGlvbnNbMF07XHJcbiAgfVxyXG5cclxuICBnZXQgcHJpbWFyeUxpbmVSZWZlcmVuY2UoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLnVzZXJTZXJ2aWNlPy51c2VyPy5wcmltYXJ5TGluZVJlZmVyZW5jZSAmJiB0aGlzLnVzZXJTZXJ2aWNlPy51c2VyPy5wcmltYXJ5TGluZVJlZmVyZW5jZT8uZGlyZWN0b3J5TnVtYmVyO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHdlYmV4VVVJRCgpIHtcclxuICAgIGNvbnN0IHV1aWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnd2ViZXhVVUlEJyk7XHJcbiAgICByZXR1cm4gdXVpZCA9PT0gJ251bGwnID8gbnVsbCA6IHV1aWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9jYXRpb24gPSBpbmplY3QoTG9jYXRpb24pO1xyXG4gIHB1YmxpYyByZWFkb25seSBPTl9QUkVNX0lEID0gMjU0MjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhcGlTZXJ2aWNlOiBBUElTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkY3BBcGlTZXJ2aWNlOiBEY3BBcGlTZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgdGhpcy51c2VyU2VydmljZS5vblVzZXJMaW5lU2F2ZWQkXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UucGVyc2lzdENhY2hlQ2hhbmdlcygpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy51c2VyU2VydmljZS5kYXRhUGVuZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVVybElmVXNlcklkQ2hhbmdlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLm9uU2F2ZS5uZXh0KFwic2F2ZWRcIik7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSwgKCkgPT4gdGhpcy51c2VyU2VydmljZS5kYXRhUGVuZGluZyA9IGZhbHNlKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5hcGlTZXJ2aWNlLnRva2VuID0gdGhpcy50b2tlbjtcclxuICAgIHRoaXMuYXBpU2VydmljZS5hcGlVcmwgPSB0aGlzLmhvc3Q7XHJcbiAgICB0aGlzLmRjcEFwaVNlcnZpY2UudG9rZW4gPSB0aGlzLnRva2VuO1xyXG4gICAgdGhpcy5kY3BBcGlTZXJ2aWNlLmFwaVVybCA9IHRoaXMuZGNwSG9zdDtcclxuICAgIHRoaXMuZ2V0RGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgb25EZXZpY2VTZWxlY3QoZGV2aWNlOiBEZXZpY2UpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0RGV2aWNlLmVtaXQoZGV2aWNlLm5hbWUpO1xyXG4gIH1cclxuXHJcbiAgb25Hb0JhY2soKTogdm9pZCB7XHJcbiAgICB0aGlzLmdvQmFjay5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBvbkV4dGVuc2lvbkNoYW5nZSgpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UubmV4dChcInN0YXJ0IGV4dGVuc2lvbiBjaGFuZ2UuLlwiKTtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlRmllbGQodG9rZW46IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZS5uZXh0KFwic3RhcnQgY2hhbmdlLi5cIik7XHJcblxyXG4gICAgaWYgKCF0b2tlbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAodGhpcy51c2VyU2VydmljZS51c2VyIGFzIGFueSlbdG9rZW5dID0gdGhpcy5mb3JtPy5nZXQodG9rZW4pPy52YWx1ZTtcclxuXHJcbiAgICBpZiAodG9rZW4gPT09ICdtaWRkbGVOYW1lJykge1xyXG4gICAgICB0aGlzLmZvcm0/LmdldCh0b2tlbik/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucGF0dGVybignWyBhLXpBLVotXSsnKV0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRva2VuID09PSAndGVsZXBob25lTnVtYmVyJyB8fCB0b2tlbiA9PT0gJ21vYmlsZU51bWJlcicgfHwgdG9rZW4gPT09ICdwYWdlck51bWJlcicgfHwgdG9rZW4gPT09ICdob21lTnVtYmVyJykge1xyXG4gICAgICB0aGlzLmZvcm0/LmdldCh0b2tlbik/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucGF0dGVybignWyAwLTktK10rJyldKTtcclxuICAgIH1cclxuICAgIHRoaXMuZm9ybT8uZ2V0KHRva2VuKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy52YWxpZGF0ZVVzZXJJZCgpO1xyXG4gIH1cclxuXHJcbiAgc2F2ZUNoYW5nZXMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pc1NhdmluZ0Rpc2FibGVkKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2F2ZVBlbmRpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgY3VycmVudExpbmVBc3NvY2lhdGlvbiA9IHRoaXMudXNlcj8uZGV2aWNlcz8uWzBdPy5saW5lQXNzb2NpYXRpb25zPy5bMF07XHJcbiAgICBjb25zdCBvcmlnaW5MaW5lQXNzb2NpYXRpb24gPSB0aGlzLnVzZXJTZXJ2aWNlLm9yaWdpblVzZXI/LmRldmljZXM/LlswXT8ubGluZUFzc29jaWF0aW9ucz8uWzBdO1xyXG4gICAgY29uc3QgY3VycmVudE1hcHBlZERpZCA9IHRoaXMudXNlcj8ubGluZXM/LlswXT8ubWFwcGVkRGlkcz8uWzBdIHx8ICcnO1xyXG4gICAgY29uc3Qgb3JpZ2luTWFwcGVkRGlkID0gdGhpcy51c2VyU2VydmljZS5vcmlnaW5Vc2VyPy5saW5lcz8uWzBdPy5tYXBwZWREaWRzPy5bMF0gfHwgJyc7XHJcbiAgICBjb25zdCBkaWRQYXR0ZXJuRGVzY3JpcHRpb24gPSB0aGlzLnVzZXJTZXJ2aWNlLm9yaWdpblVzZXI/LmxpbmVzPy5bMF0/LmRpZFBhdHRlcm5zPy5bMF0/LmRlc2NyaXB0aW9uIHx8ICcnO1xyXG4gICAgY29uc3QgbGluZUFzc29jaWF0aW9uQ2hhbmdlZCA9IGN1cnJlbnRMaW5lQXNzb2NpYXRpb24gJiYgb3JpZ2luTGluZUFzc29jaWF0aW9uICYmICFjdXJyZW50TGluZUFzc29jaWF0aW9uLmVxdWFscyhvcmlnaW5MaW5lQXNzb2NpYXRpb24pO1xyXG4gICAgY29uc3QgbWFwcGVkRGlkQ2hhbmdlZCA9IGN1cnJlbnRNYXBwZWREaWQgIT09IG9yaWdpbk1hcHBlZERpZDtcclxuXHJcbiAgICBjb25zdCB0cmFuc2xhdGlvblBhdHRlcm5DaGFuZ2VkID0gKGxpbmVBc3NvY2lhdGlvbkNoYW5nZWQgfHwgbWFwcGVkRGlkQ2hhbmdlZCkgJiYgY3VycmVudExpbmVBc3NvY2lhdGlvbiAmJiBvcmlnaW5MaW5lQXNzb2NpYXRpb247XHJcbiAgICBjb25zdCByZXF1ZXN0ID0gdHJhbnNsYXRpb25QYXR0ZXJuQ2hhbmdlZFxyXG4gICAgICA/IHRoaXMudXNlclNlcnZpY2UuZWRpdFRyYW5zbGF0aW9uUGF0dGVybihcclxuICAgICAgICAgIHRoaXMudXNlci5jdWNtSWQsXHJcbiAgICAgICAgICBvcmlnaW5NYXBwZWREaWQsXHJcbiAgICAgICAgICBjdXJyZW50TWFwcGVkRGlkLFxyXG4gICAgICAgICAgY3VycmVudExpbmVBc3NvY2lhdGlvbi5kaXJlY3RvcnlOdW1iZXIuZGlyZWN0b3J5TnVtYmVyLFxyXG4gICAgICAgICAgb3JpZ2luTGluZUFzc29jaWF0aW9uLmRpcmVjdG9yeU51bWJlci5yb3V0ZVBhcnRpdGlvbk5hbWUsXHJcbiAgICAgICAgICBkaWRQYXR0ZXJuRGVzY3JpcHRpb24sXHJcbiAgICAgICAgKS5waXBlKHN3aXRjaE1hcCgoKSA9PiB0aGlzLnVzZXJTZXJ2aWNlLnBlcnNpc3RDYWNoZUNoYW5nZXMoKSkpXHJcbiAgICAgIDogdGhpcy51c2VyU2VydmljZS5wZXJzaXN0Q2FjaGVDaGFuZ2VzKCk7XHJcblxyXG4gICAgcmVxdWVzdC5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zYXZlUGVuZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UuY29tbWl0U2F2ZWRDaGFuZ2VzKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVVcmxJZlVzZXJJZENoYW5nZWQoKTtcclxuICAgICAgICB0aGlzLm9uU2F2ZS5uZXh0KFwidXNlciBoYXMgYmVlbiBzYXZlZCBzdWNjZXNzZnVsbHkuLlwiKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6ICgpID0+IHRoaXMuc2F2ZVBlbmRpbmcgPSBmYWxzZSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2FuY2VsQ2hhbmdlcygpOiB2b2lkIHtcclxuICAgIHRoaXMudXNlclNlcnZpY2UuZGlzY2FyZENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIGhhc1Vuc2F2ZWRDaGFuZ2VzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudXNlclNlcnZpY2UuaGFzVW5zYXZlZENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZUVkaXRNb2RlKCkge1xyXG4gICAgdGhpcy51c2VyU2VydmljZS51c2VyLnRvZ2dsZUVkaXRNb2RlKCk7XHJcbiAgfVxyXG5cclxuICBpc1NhdmluZ0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2F2ZVBlbmRpbmdcclxuICAgICAgfHwgIXRoaXMudXNlclNlcnZpY2UuaGFzVW5zYXZlZENoYW5nZXMoKVxyXG4gICAgICB8fCB0aGlzLnVzZXJTZXJ2aWNlLmhhc0V4aXN0ZWRVc2VySWRcclxuICAgICAgfHwgISF0aGlzLmZvcm0/LmludmFsaWQ7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VGaWVsZCh0b2tlbjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlLm5leHQoXCJzdGFydCBjaGFuZ2UuLlwiKTtcclxuICAgIGNvbnN0IGZvcm1GaWVsZCA9IHRoaXMudXNlcj8uZm9ybT8uZ2V0KHRva2VuKTtcclxuICAgIGlmICh0b2tlbiAhPT0gJ2NvbmZpcm1EaWdlc3RDcmVkZW50aWFscycpIHtcclxuICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICB0aGlzLnVzZXJbdG9rZW5dID0gZm9ybUZpZWxkPy52YWx1ZTtcclxuICAgIH1cclxuICAgIGlmICh0b2tlbiA9PT0gJ2RpZ2VzdENyZWRlbnRpYWxzJyB8fCB0b2tlbiA9PT0gJ2NvbmZpcm1EaWdlc3RDcmVkZW50aWFscycpIHtcclxuICAgICAgdGhpcy5kaWdlc3RDcmVkZW50aWFsc0hhbmRsZXIodG9rZW4sIGZvcm1GaWVsZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRpZ2VzdENyZWRlbnRpYWxzSGFuZGxlcih0b2tlbjogc3RyaW5nLCBmaWVsZDogYW55KSB7XHJcbiAgICBjb25zdCBmaWVsZE5hbWVUb0NvbXBhcmUgPSB0b2tlbiA9PT0gJ2RpZ2VzdENyZWRlbnRpYWxzJyA/ICdjb25maXJtRGlnZXN0Q3JlZGVudGlhbHMnIDogJ2RpZ2VzdENyZWRlbnRpYWxzJztcclxuICAgIGNvbnN0IGZpZWxkVG9Db21wYXJlID0gdGhpcy51c2VyU2VydmljZS51c2VyLmZvcm0uZ2V0KGZpZWxkTmFtZVRvQ29tcGFyZSk7XHJcbiAgICBpZiAodGhpcy51c2VyU2VydmljZS51c2VyPy5mb3JtPy5nZXQodG9rZW4pKSB7XHJcbiAgICAgIHRoaXMudXNlclNlcnZpY2UudXNlcj8uZm9ybT8uZ2V0KHRva2VuKT8uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVzZXI/LmZvcm0/LmdldChmaWVsZE5hbWVUb0NvbXBhcmUpPy5zZXRFcnJvcnMobnVsbCk7XHJcblxyXG4gICAgICAvKiBpZiAoIWZpZWxkLnZhbHVlICYmICFmaWVsZFRvQ29tcGFyZS52YWx1ZSkge1xyXG4gICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVzZXI/LmRpZ2VzdENyZWRlbnRpYWxzID0gbnVsbDtcclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgfVxyXG5cclxuICAgICAgIGlmICghZmllbGQudmFsdWUgJiYgZmllbGRUb0NvbXBhcmUudmFsdWUgfHwgIWZpZWxkVG9Db21wYXJlLnZhbHVlICYmIGZpZWxkLnZhbHVlKSB7XHJcbiAgICAgICAgIGNvbnN0IHJlcXVpcmVkRmllbGROYW1lID0gZmllbGQudmFsdWUgPyBmaWVsZE5hbWVUb0NvbXBhcmUgOiB0b2tlbjtcclxuICAgICAgICAgdGhpcy51c2VyU2VydmljZS51c2VyLmZvcm0uZ2V0KHJlcXVpcmVkRmllbGROYW1lKS5zZXRFcnJvcnMoe3JlcXVpcmVkOiB0cnVlfSk7XHJcbiAgICAgICAgIHJldHVybjtcclxuICAgICAgIH1cclxuICAgICAgIGlmIChmaWVsZC52YWx1ZSAmJiBmaWVsZFRvQ29tcGFyZS52YWx1ZSAmJiBmaWVsZC52YWx1ZSAhPT0gZmllbGRUb0NvbXBhcmUudmFsdWUpIHtcclxuICAgICAgICAgdGhpcy51c2VyU2VydmljZS51c2VyLmZvcm0uZ2V0KHRva2VuKS5zZXRFcnJvcnMoe21pc21hdGNoOiB0cnVlfSk7XHJcbiAgICAgICAgIHRoaXMudXNlclNlcnZpY2UudXNlci5mb3JtLmdldChmaWVsZE5hbWVUb0NvbXBhcmUpLnNldEVycm9ycyh7bWlzbWF0Y2g6IHRydWV9KTtcclxuICAgICAgIH0qL1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RGF0YSgpIHtcclxuICAgIHRoaXMuZGF0YVBlbmRpbmcgPSB0cnVlO1xyXG4gICAgbGV0IHJlcXVlc3Q7XHJcbiAgICBpZihsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaXNXZWJleCcpID09PSAndHJ1ZScpIHtcclxuICAgICAgcmVxdWVzdCA9IHRoaXMudXNlclNlcnZpY2UuZmV0Y2hXZWJleFVzZXJUb2tlbihsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY3VzdG9tZXJJZCcpISwgdGhpcy51c2VySWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVxdWVzdCA9IHRoaXMudXNlclNlcnZpY2UuZmV0Y2hVc2VyVG9rZW4odGhpcy5zaXRlSWQsIHRoaXMudXNlcklkLCB0aGlzLmlzTGRhcCk7XHJcbiAgICB9XHJcbiAgICByZXF1ZXN0LnN1YnNjcmliZSh7XHJcbiAgICAgICAgY29tcGxldGU6ICh2OiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuZGF0YVBlbmRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmRhdGFQZW5kaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYC90dWtpL21pZ3JhdGUvdXNlcnNgXSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENvb2tpZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIGRheXM6IG51bWJlcikge1xyXG4gICAgdmFyIGV4cGlyZXMgPSBcIlwiO1xyXG4gICAgaWYgKGRheXMpIHtcclxuICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICBkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgKyAoZGF5cyAqIDI0ICogNjAgKiA2MCAqIDEwMDApKTtcclxuICAgICAgZXhwaXJlcyA9IFwiOyBleHBpcmVzPVwiICsgZGF0ZS50b1VUQ1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgZG9jdW1lbnQuY29va2llID0gbmFtZSArIFwiPVwiICsgKHZhbHVlIHx8IFwiXCIpICsgZXhwaXJlcyArIFwiOyBwYXRoPS9cIjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlVXJsSWZVc2VySWRDaGFuZ2VkKCk6IHZvaWQge1xyXG4gICAgY29uc3QgbmV3VXNlcklkID0gdGhpcy51c2VyPy5uZXdVc2VyaWQgfHwgdGhpcy5mb3JtPy5nZXQoJ3VzZXJpZCcpPy52YWx1ZTtcclxuICAgIGlmICghbmV3VXNlcklkIHx8IG5ld1VzZXJJZCA9PT0gdGhpcy51c2VySWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IFtwYXRoLCBxdWVyeSA9ICcnXSA9IHRoaXMucm91dGVyLnVybC5zcGxpdCgnPycpO1xyXG4gICAgY29uc3QgdXJsU2VnbWVudHMgPSBwYXRoLnNwbGl0KCcvJykuZmlsdGVyKEJvb2xlYW4pO1xyXG4gICAgY29uc3QgY3VycmVudEluZGV4ID0gdXJsU2VnbWVudHMuZmluZEluZGV4KFxyXG4gICAgICBzZWdtZW50ID0+IGRlY29kZVVSSUNvbXBvbmVudChzZWdtZW50KSA9PT0gdGhpcy51c2VySWRcclxuICAgICk7XHJcbiAgICBpZiAoY3VycmVudEluZGV4ID09PSAtMSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdXJsU2VnbWVudHNbY3VycmVudEluZGV4XSA9IG5ld1VzZXJJZDtcclxuICAgIHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKGAvJHt1cmxTZWdtZW50cy5qb2luKCcvJyl9JHtxdWVyeSA/IGA/JHtxdWVyeX1gIDogJyd9YCk7XHJcbiAgICB0aGlzLnVzZXJJZCA9IG5ld1VzZXJJZDtcclxuICAgIHRoaXMudXNlclNlcnZpY2UudXNlcklkID0gbmV3VXNlcklkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZVVzZXJJZCgpIHtcclxuICAgIGNvbnN0IGlkQ29udHJvbCA9IHRoaXMuZm9ybS5nZXQoJ3VzZXJpZCcpO1xyXG4gICAgaWYgKGlkQ29udHJvbD8udmFsdWUgIT09ICcnICYmIGlkQ29udHJvbD8udmFsdWUgIT09IHRoaXMudXNlclNlcnZpY2Uub3JpZ2luVXNlci51c2VyaWQpIHtcclxuICAgICAgdGhpcy51c2VyU2VydmljZS5mZXRjaFVzZXJCeUlkKGlkQ29udHJvbD8udmFsdWUpXHJcbiAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVzZXJJZEV4aXN0UGVuZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZENvbnRyb2w/LnNldEVycm9ycyh7ZXhpc3Q6IHRydWV9KTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybT8uZ2V0KCd1c2VyaWQnKT8uaGFzRXJyb3IoJ2V4aXN0JykpIHtcclxuICAgICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmhhc0V4aXN0ZWRVc2VySWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UuaGFzRXhpc3RlZFVzZXJJZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVzZXJJZEV4aXN0UGVuZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzICE9PSA0MDQpIHtcclxuICAgICAgICAgICAgICAvLyB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uud2FybmluZyh0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdBUFBfVVNFUl9NU0cuQ0hFQ0tfVVNFUl9JRF9GQUlMRUQnKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy51c2VyU2VydmljZS51c2VyLm5ld1VzZXJpZCA9IHRoaXMuZm9ybT8uZ2V0KCd1c2VyaWQnKT8udmFsdWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gZGVsZXRlIHRoaXMudXNlclNlcnZpY2U/LnVzZXI/Lm5ld1VzZXJpZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNhdmUoKSB7XHJcbiAgICB0aGlzLnNhdmVDaGFuZ2VzKClcclxuICB9XHJcblxyXG59XHJcbiIsIjx0ay1sb2FkZXIgKm5nSWY9XCJkYXRhUGVuZGluZyB8fCBzYXZlUGVuZGluZyB8fCB1c2VyU2VydmljZS5kYXRhUGVuZGluZ1wiPjwvdGstbG9hZGVyPlxyXG5cclxuPGRpdiAqbmdJZj1cIiFkYXRhUGVuZGluZ1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJnby1iYWNrLWJveFwiIChjbGljayk9XCJvbkdvQmFjaygpXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZ28tYmFjay1ib3gtY29udGFpbmVyXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiYXBwLWljb24gaWNvbi13ZWJleC1sZWZ0LWFycm93XCI+PC9zcGFuPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImdvLWJhY2stdGl0bGVcIj5Vc2Vyczwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8YXBwLXVzZXItaW5mb1xyXG4gICAgKm5nSWY9XCJ1c2VyXCJcclxuICAgIFtuYW1lXT1cInVzZXJOYW1lXCJcclxuICAgIFtlbWFpbF09XCJ1c2VyLmVtYWlsXCJcclxuICAgIFthY3RpdmVdPVwidHJ1ZVwiXHJcbiAgICBbcG9zaXRpb25dPVwidXNlci5zaXRlTmFtZSA/ICdNZW1iZXIgb2YgJyArIHVzZXIuc2l0ZU5hbWUgOiAnJ1wiXHJcbiAgICBbY3VjbWlkXT1cInVzZXIuY3VjbUlkXCI+XHJcbiAgPC9hcHAtdXNlci1pbmZvPlxyXG5cclxuICA8IS0tIFN1bW1hcnkgaXNuJ3QgYXZhaWxhYmxlIGZvciBXZWJleCB1c2Vycywgc28gdGhleSBzdGFydCBvbiB0aGUgUHJvZmlsZSB0YWIgLS0+XHJcbiAgPG1hdC10YWItZ3JvdXAgZGlzYWJsZVJpcHBsZSBjbGFzcz1cInRhYnMtY29udGFpbmVyXCIgW3NlbGVjdGVkSW5kZXhdPVwid2ViZXhVVUlEID8gMSA6IDBcIj5cclxuICAgIDxtYXQtdGFiIGxhYmVsPVwiU3VtbWFyeVwiIFtkaXNhYmxlZF09XCIhIXdlYmV4VVVJRFwiPlxyXG4gICAgICA8YXBwLXVzZXItc3VtbWFyeSAqbmdJZj1cInVzZXJcIiBbdXNlcl09XCJ1c2VyXCI+PC9hcHAtdXNlci1zdW1tYXJ5PlxyXG4gICAgPC9tYXQtdGFiPlxyXG4gICAgPG1hdC10YWIgbGFiZWw9XCJQcm9maWxlXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ3ZWJleFVVSUQgPyB3ZWJleFVzZXJQcm9maWxlIDogdXNlclByb2ZpbGVcIj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L21hdC10YWI+XHJcbiAgICA8IS0tIDxtYXQtdGFiIGxhYmVsPVwiR2VuZXJhbFwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidXNlclByb2ZpbGVcIj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L21hdC10YWI+IC0tPlxyXG4gICAgPCEtLSA8bWF0LXRhYiBsYWJlbD1cIk1lZXRpbmdzXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ1c2VyUHJvZmlsZVwiPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbWF0LXRhYj4gLS0+XHJcbiAgICA8bWF0LXRhYiBsYWJlbD1cIkNhbGxpbmdcIiBbZGlzYWJsZWRdPVwiIXByaW1hcnlMaW5lUmVmZXJlbmNlXCI+XHJcbiAgICAgIDxhcHAtdXNlci1jYWxsaW5nXHJcbiAgICAgICAgKm5nSWY9XCJwcmltYXJ5TGluZVJlZmVyZW5jZVwiXHJcbiAgICAgICAgW3NpdGVJZF09XCJzaXRlSWRcIlxyXG4gICAgICAgIChvbkV4dGVuc2lvbkNoYW5nZSk9XCJvbkV4dGVuc2lvbkNoYW5nZSgpXCJcclxuICAgICAgICBbcHJpbWFyeUxpbmVEaXJlY3RvcnlOdW1iZXJdPVwicHJpbWFyeUxpbmVSZWZlcmVuY2VcIj5cclxuICAgICAgPC9hcHAtdXNlci1jYWxsaW5nPlxyXG4gICAgPC9tYXQtdGFiPlxyXG4gICAgPCEtLSA8bWF0LXRhYiBsYWJlbD1cIk1lc3NhZ2luZ1wiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidXNlclByb2ZpbGVcIj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L21hdC10YWI+IC0tPlxyXG4gICAgPCEtLSA8bWF0LXRhYiBsYWJlbD1cIkh5YnJpZCBTZXJ2aWNlc1wiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidXNlclByb2ZpbGVcIj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L21hdC10YWI+IC0tPlxyXG4gICAgPG1hdC10YWIgbGFiZWw9XCJEZXZpY2VzXCIgW2Rpc2FibGVkXT1cIiF1c2VyPy5kZXZpY2VzIHx8ICF1c2VyPy5kZXZpY2VzLmxlbmd0aFwiPlxyXG4gICAgICA8YXBwLWRldmljZS1saXN0XHJcbiAgICAgICAgW2RldmljZXNdPVwidXNlcj8uZGV2aWNlc1wiXHJcbiAgICAgICAgKG9uRGV2aWNlU2VsZWN0KT1cIm9uRGV2aWNlU2VsZWN0KCRldmVudClcIj5cclxuICAgICAgPC9hcHAtZGV2aWNlLWxpc3Q+XHJcbiAgICA8L21hdC10YWI+XHJcbiAgICA8IS0tIDxtYXQtdGFiIGxhYmVsPVwiVmlkY2FzdFwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidXNlclByb2ZpbGVcIj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L21hdC10YWI+IC0tPlxyXG4gICAgPG1hdC10YWIgbGFiZWw9XCJMaW5lc1wiIFtkaXNhYmxlZF09XCJ0cnVlXCI+PC9tYXQtdGFiPlxyXG4gICAgPG1hdC10YWIgbGFiZWw9XCJGZWF0dXJlc1wiIFtkaXNhYmxlZF09XCJ0cnVlXCI+PC9tYXQtdGFiPlxyXG4gIDwvbWF0LXRhYi1ncm91cD5cclxuXHJcbiAgPCEtLSBrZWVwcyB0aGUgYm90dG9tIG9mIHRoZSBjb250ZW50IHJlYWNoYWJsZSBhYm92ZSB0aGUgZml4ZWQgcGFuZWwgLS0+XHJcbiAgPCEtLSA8ZGl2IGNsYXNzPVwiYWN0aW9ucy1wYW5lbC1zcGFjZXJcIiBbY2xhc3MuYWN0aW9ucy1wYW5lbC1zcGFjZXItLXZpc2libGVdPVwiaGFzVW5zYXZlZENoYW5nZXMoKVwiPjwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJhY3Rpb25zLXBhbmVsXCJcclxuICAgICAgIFtjbGFzcy5hY3Rpb25zLXBhbmVsLS12aXNpYmxlXT1cImhhc1Vuc2F2ZWRDaGFuZ2VzKClcIlxyXG4gICAgICAgW2F0dHIuYXJpYS1oaWRkZW5dPVwiIWhhc1Vuc2F2ZWRDaGFuZ2VzKClcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zLXBhbmVsX19hY3Rpb25zXCI+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLW91dGxpbmVcIiBbZGlzYWJsZWRdPVwic2F2ZVBlbmRpbmdcIiAoY2xpY2spPVwiY2FuY2VsQ2hhbmdlcygpXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWZpbGxlZFwiIFtkaXNhYmxlZF09XCJpc1NhdmluZ0Rpc2FibGVkKClcIiAoY2xpY2spPVwic2F2ZUNoYW5nZXMoKVwiPlNhdmU8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PiAtLT4gIFxyXG5cclxuICA8bmctdGVtcGxhdGUgI3VzZXJQcm9maWxlPlxyXG4gICAgPGZvcm0gKm5nSWY9XCJ1c2VyICYmIGZvcm1cIiBbZm9ybUdyb3VwXT1cImZvcm1cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImluZm8tYm94ZXMtY29udGFpbmVyXCI+XHJcblxyXG4gICAgICAgIDwhLS0gICAgVVNFUiBJTkZPIEJPWC0tPlxyXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2FyZCB2ZXJ0aWNhbC1jYXJkXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGl0bGVcIj5Vc2VyIERldGFpbHM8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPlVzZXIgSWQ8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiBwbGFjZWhvbGRlcj1cIlVzZXIgSWRcIiBmb3JtQ29udHJvbE5hbWU9XCJ1c2VyaWRcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgndXNlcmlkJylcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmllbGQtZXJyb3JcIiAqbmdJZj1cImZvcm0uZ2V0KCd1c2VyaWQnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1leGNsYW1hdGlvbi10cmlhbmdsZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBpcyByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWVsZC1lcnJvclwiICpuZ0lmPVwiZm9ybS5nZXQoJ3VzZXJpZCcpPy5oYXNFcnJvcignZXhpc3QnKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICBVc2VyIElEIGFscmVhZHkgZXhpc3RzXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5QcmltYXJ5IGVtYWlsPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fZmllbGRcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgcGxhY2Vob2xkZXI9XCJQcmltYXJ5IGVtYWlsXCIgZm9ybUNvbnRyb2xOYW1lPVwiZW1haWxcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnZW1haWwnKVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWVsZC1lcnJvclwiICpuZ0lmPVwiZm9ybS5nZXQoJ2VtYWlsJyk/LnRvdWNoZWQgJiYgZm9ybS5nZXQoJ2VtYWlsJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgIFRoaXMgZmllbGQgaXMgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmllbGQtZXJyb3JcIiAqbmdJZj1cImZvcm0uZ2V0KCdlbWFpbCcpPy50b3VjaGVkICYmIGZvcm0uZ2V0KCdlbWFpbCcpPy5oYXNFcnJvcigncGF0dGVybicpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgIFBsZWFzZSBlbnRlciB2YWxpZCBlbWFpbFxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+RmlzcnQgTmFtZTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbGFpbi1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiRmlzcnQgTmFtZVwiIGZvcm1Db250cm9sTmFtZT1cImZpcnN0TmFtZVwiIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdmaXJzdE5hbWUnKVwiPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5MYXN0IE5hbWU8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiBwbGFjZWhvbGRlcj1cIkxhc3QgTmFtZVwiIGZvcm1Db250cm9sTmFtZT1cImxhc3ROYW1lXCIgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ2xhc3ROYW1lJylcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmllbGQtZXJyb3JcIiAqbmdJZj1cImZvcm0uZ2V0KCdsYXN0TmFtZScpPy50b3VjaGVkICYmIGZvcm0uZ2V0KCdsYXN0TmFtZScpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICBUaGlzIGZpZWxkIGlzIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9zZWN0aW9uPlxyXG5cclxuICAgICAgICA8IS0tICAgIFVTRVIgSU5GTyBCT1gtLT5cclxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNhcmQgdmVydGljYWwtY2FyZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlclwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCI+R2VuZXJhbCBVc2VyIEluZm88L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkRlcGFydG1lbnQ8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiBwbGFjZWhvbGRlcj1cIkRlcGFydG1lbnRcIiBmb3JtQ29udHJvbE5hbWU9XCJkZXBhcnRtZW50XCIgdHlwZT1cInRleHRcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnZGVwYXJ0bWVudCcpXCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5NYW5hZ2VyIHVzZXIgSUQ8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiBwbGFjZWhvbGRlcj1cIk1hbmFnZXIgdXNlciBJRFwiIGZvcm1Db250cm9sTmFtZT1cIm1hbmFnZXJcIiB0eXBlPVwidGV4dFwiIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdtYW5hZ2VyJylcIj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkFzc29jaWF0ZWQgUEM8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiBwbGFjZWhvbGRlcj1cIkFzc29jaWF0ZWQgUENcIiBmb3JtQ29udHJvbE5hbWU9XCJhc3NvY2lhdGVkUGNcIiB0eXBlPVwidGV4dFwiIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdhc3NvY2lhdGVkUGMnKVwiPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+RGlnZXN0IGNyZWRlbnRpYWxzPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fZmllbGRcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgcGxhY2Vob2xkZXI9XCJEaWdlc3QgY3JlZGVudGlhbHNcIiBmb3JtQ29udHJvbE5hbWU9XCJkaWdlc3RDcmVkZW50aWFsc1wiIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnZGlnZXN0Q3JlZGVudGlhbHMnKVwiPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+VXNlciBwcm9maWxlPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGFwcC1sYXp5LWxvYWRpbmctc2VsZWN0XHJcbiAgICAgICAgICAgICAgICBbc2l0ZUlkXT1cInNpdGVJZFwiXHJcbiAgICAgICAgICAgICAgICBbY29udHJvbE5hbWVdPVwiJ3VzZXJQcm9maWxlJ1wiXHJcbiAgICAgICAgICAgICAgICBbZm9ybV09XCJ1c2VyLmZvcm1cIlxyXG4gICAgICAgICAgICAgICAgKGNoYW5nZUZpZWxkKT1cImNoYW5nZUZpZWxkKCd1c2VyUHJvZmlsZScpXCJcclxuICAgICAgICAgICAgICAgIFtvcHRpb25zVG9rZW5dPVwiJ3VzZXJQcm9maWxlcydcIlxyXG4gICAgICAgICAgICAgID48L2FwcC1sYXp5LWxvYWRpbmctc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+TW9iaWxlIHZvaWNlIGFjY2VzczwvZGl2PlxyXG4gICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPVwiY3VzdG9tLXRvZ2dsZVwiXHJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbmFibGVNb2JpbGVWb2ljZUFjY2Vzc1wiXHJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hhbmdlRmllbGQoJ2VuYWJsZU1vYmlsZVZvaWNlQWNjZXNzJylcIlxyXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwidXNlci5lbmFibGVNb2JpbGVWb2ljZUFjY2Vzc1wiPlxyXG4gICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPlVzZXJsb2NhbGU8L2Rpdj5cclxuICAgICAgICAgICAgICA8YXBwLWxhenktbG9hZGluZy1zZWxlY3RcclxuICAgICAgICAgICAgICAgIFtzaXRlSWRdPVwic2l0ZUlkXCJcclxuICAgICAgICAgICAgICAgIFtjb250cm9sTmFtZV09XCIndXNlckxvY2FsZSdcIlxyXG4gICAgICAgICAgICAgICAgW2Zvcm1dPVwidXNlci5mb3JtXCJcclxuICAgICAgICAgICAgICAgIChjaGFuZ2VGaWVsZCk9XCJjaGFuZ2VGaWVsZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIFtvcHRpb25zVG9rZW5dPVwiJ3VzZXJMb2NhbGVzJ1wiXHJcbiAgICAgICAgICAgICAgICBbZGVmYXVsdF09XCJ7a2V5OiAnJywgdmFsdWU6ICdOb25lJywgZGlzYWJsZWQ6IGZhbHNlfVwiPlxyXG4gICAgICAgICAgICAgIDwvYXBwLWxhenktbG9hZGluZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkNvbmZpcm0gZGlnZXN0IGNyZWRlbnRpYWxzPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fZmllbGRcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgcGxhY2Vob2xkZXI9XCJDb25maXJtIGRpZ2VzdCBjcmVkZW50aWFsc1wiIGZvcm1Db250cm9sTmFtZT1cImNvbmZpcm1EaWdlc3RDcmVkZW50aWFsc1wiIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnY29uZmlybURpZ2VzdENyZWRlbnRpYWxzJylcIj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3NlY3Rpb24+XHJcblxyXG4gICAgICAgIDwhLS0gICAgVVNFUiBJTkZPIEJPWC0tPlxyXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2FyZCB2ZXJ0aWNhbC1jYXJkXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGl0bGVcIj5Db250YWN0IEluZm9ybWF0aW9uPC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWFpbi1jb250ZW50XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5NaWRkbGUgTmFtZTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbGFpbi1pbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJNaWRkbGUgTmFtZVwiIGZvcm1Db250cm9sTmFtZT1cIm1pZGRsZU5hbWVcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnbWlkZGxlTmFtZScpXCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5UZWxlcGhvbmUgTnVtYmVyPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fZmllbGRcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgdHlwZT1cIm51bWJlclwiIHBsYWNlaG9sZGVyPVwiVGVsZXBob25lIE51bWJlclwiIGZvcm1Db250cm9sTmFtZT1cInRlbGVwaG9uZU51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ3RlbGVwaG9uZU51bWJlcicpXCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Nb2JpbGUgTnVtYmVyPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fZmllbGRcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgdHlwZT1cIm51bWJlclwiIHBsYWNlaG9sZGVyPVwiTW9iaWxlIE51bWJlclwiIGZvcm1Db250cm9sTmFtZT1cIm1vYmlsZU51bWJlclwiIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdtb2JpbGVOdW1iZXInKVwiPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+RGlyZWN0b3J5IFVSSTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbGFpbi1pbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJEaXJlY3RvcnkgVVJJXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGlyZWN0b3J5VXJpXCIgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ2RpcmVjdG9yeVVyaScpXCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5UaXRsZTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbGFpbi1pbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJUaXRsZVwiIGZvcm1Db250cm9sTmFtZT1cInRpdGxlXCIgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ3RpdGxlJylcIj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkhvbWUgTnVtYmVyPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fZmllbGRcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgdHlwZT1cIm51bWJlclwiIHBsYWNlaG9sZGVyPVwiSG9tZSBOdW1iZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJob21lTnVtYmVyXCIgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ2hvbWVOdW1iZXInKVwiPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+UGFnZXIgTnVtYmVyPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fZmllbGRcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgdHlwZT1cIm51bWJlclwiIHBsYWNlaG9sZGVyPVwiUGFnZXIgTnVtYmVyXCIgZm9ybUNvbnRyb2xOYW1lPVwicGFnZXJOdW1iZXJcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgncGFnZXJOdW1iZXInKVwiPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5EaXNwbGF5IE5hbWU8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiRGlzcGxheSBOYW1lXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGlzcGxheU5hbWVcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnZGlzcGxheU5hbWUnKVwiPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvc2VjdGlvbj5cclxuXHJcbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjYXJkIHZlcnRpY2FsLWNhcmRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZVwiPkVNIENvbmZpZ3VyYXRpb25zPC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWFpbi1jb250ZW50XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5CTEYgUHJlc2VuY2UgR3JvdXA8L2Rpdj5cclxuICAgICAgICAgICAgICA8YXBwLWxhenktbG9hZGluZy1zZWxlY3RcclxuICAgICAgICAgICAgICAgIFtzaXRlSWRdPVwic2l0ZUlkXCJcclxuICAgICAgICAgICAgICAgIFtjb250cm9sTmFtZV09XCIncHJlc2VuY2VHcm91cCdcIlxyXG4gICAgICAgICAgICAgICAgW2Zvcm1dPVwidXNlci5mb3JtXCJcclxuICAgICAgICAgICAgICAgIChjaGFuZ2VGaWVsZCk9XCJjaGFuZ2VGaWVsZCgncHJlc2VuY2VHcm91cCcpXCJcclxuICAgICAgICAgICAgICAgIFtvcHRpb25zVG9rZW5dPVwiJ3VzZXJQcm9maWxlcydcIlxyXG4gICAgICAgICAgICAgID48L2FwcC1sYXp5LWxvYWRpbmctc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+U3Vic2NyaWJlIENTUzwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbGFpbi1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiU3Vic2NyaWJlIENTU1wiIGZvcm1Db250cm9sTmFtZT1cInN1YnNjcmliZUNzc1wiIHR5cGU9XCJ0ZXh0XCIgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ3N1YnNjcmliZUNzcycpXCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5BbGxvdyBDb250cm9sIG9mIERldmljZSBmcm9tIENUSTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPVwiY3VzdG9tLXRvZ2dsZVwiXHJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFsbG93RGV2aWNlQ29udHJvbEZyb21DdGlcIlxyXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hhbmdlRmllbGQoJ2FsbG93RGV2aWNlQ29udHJvbEZyb21DdGknKVwiPlxyXG4gICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3BcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+RW5hYmxlIEV4dGVuc2lvbiBNb2JpbGl0eSBDcm9zcyBDbHVzdGVyPC9kaXY+XHJcbiAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9XCJjdXN0b20tdG9nZ2xlXCJcclxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW5hYmxlQ3Jvc3NDbHVzdGVyRW1cIlxyXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hhbmdlRmllbGQoJ2VuYWJsZUNyb3NzQ2x1c3RlckVtJylcIj5cclxuICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9zZWN0aW9uPlxyXG5cclxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNhcmQgdmVydGljYWwtY2FyZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlclwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCI+TXVsdGlsZXZlbCBQcmVjZWRlbmNlIGFuZCBQcmVlbXB0aW9uIEF1dGhvcml6YXRpb248L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPk1MUFAgVXNlciBJZGVudGlmaWNhdGlvbiBOdW1iZXI8L2Rpdj5cclxuICAgICAgICAgICAgICA8YXBwLWxhenktbG9hZGluZy1zZWxlY3RcclxuICAgICAgICAgICAgICAgIFtzaXRlSWRdPVwic2l0ZUlkXCJcclxuICAgICAgICAgICAgICAgIFtjb250cm9sTmFtZV09XCIndXNlclByb2ZpbGUnXCJcclxuICAgICAgICAgICAgICAgIFtmb3JtXT1cInVzZXIuZm9ybVwiXHJcbiAgICAgICAgICAgICAgICAoY2hhbmdlRmllbGQpPVwiY2hhbmdlRmllbGQoJ3VzZXJQcm9maWxlJylcIlxyXG4gICAgICAgICAgICAgICAgW29wdGlvbnNUb2tlbl09XCIndXNlclByb2ZpbGVzJ1wiPlxyXG4gICAgICAgICAgICAgIDwvYXBwLWxhenktbG9hZGluZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXIgLz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5NTFBQIFByZWNlZGVuY2UgQXV0aG9yaXphdGlvbiBMZXZlbDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwic2ltcGxlLXNlbGVjdFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwibWxwcFByZWNlZGVuY2VQYXR0ZXJuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiY2hhbmdlRmllbGQoJ21scHBQcmVjZWRlbmNlUGF0dGVybicpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgYXV0aExldmVsT3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICB7e29wdGlvbn19XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyIC8+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5FbmFibGUgTUxQUDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPVwiY3VzdG9tLXRvZ2dsZVwiXHJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVuYWJsZU1vYmlsZVZvaWNlQWNjZXNzXCJcclxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkNoYW5nZUZpZWxkKCdlbmFibGVNb2JpbGVWb2ljZUFjY2VzcycpXCJcclxuICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwidXNlci5lbmFibGVNb2JpbGVWb2ljZUFjY2Vzc1wiPlxyXG4gICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3NlY3Rpb24+XHJcblxyXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2FyZCB2ZXJ0aWNhbC1jYXJkXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGl0bGVcIj5TZXJ2aWNlIFNldHRpbmdzPC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWFpbi1jb250ZW50XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+SG9tZSBDbHVzdGVyPC9kaXY+XHJcbiAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9XCJjdXN0b20tdG9nZ2xlXCJcclxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiaG9tZUNsdXN0ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hhbmdlRmllbGQoJ2hvbWVDbHVzdGVyJylcIj5cclxuICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9zZWN0aW9uPlxyXG5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Zvcm0+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICN3ZWJleFVzZXJQcm9maWxlPlxuICAgIDxmb3JtICpuZ0lmPVwidXNlciAmJiBmb3JtXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiaW5mby1ib3hlcy1jb250YWluZXJcIj5cblxuICAgICAgICA8IS0tICAgIFVTRVIgSU5GTyBCT1gtLT5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjYXJkIHZlcnRpY2FsLWNhcmRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCI+VXNlciBEZXRhaWxzPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLWJvdHRvbVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+VXNlciBJZDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgcGxhY2Vob2xkZXI9XCJVc2VyIElkXCIgZm9ybUNvbnRyb2xOYW1lPVwidXNlcmlkXCIgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ3VzZXJpZCcpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWVsZC1lcnJvclwiICpuZ0lmPVwiZm9ybS5nZXQoJ3VzZXJpZCcpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1leGNsYW1hdGlvbi10cmlhbmdsZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgIFRoaXMgZmllbGQgaXMgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWVsZC1lcnJvclwiICpuZ0lmPVwiZm9ybS5nZXQoJ3VzZXJpZCcpPy5oYXNFcnJvcignZXhpc3QnKVwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1leGNsYW1hdGlvbi10cmlhbmdsZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgIFVzZXIgSUQgYWxyZWFkeSBleGlzdHNcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPlByaW1hcnkgZW1haWw8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbGFpbi1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiUHJpbWFyeSBlbWFpbFwiIGZvcm1Db250cm9sTmFtZT1cImVtYWlsXCIgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ2VtYWlsJylcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpZWxkLWVycm9yXCIgKm5nSWY9XCJmb3JtLmdldCgnZW1haWwnKT8udG91Y2hlZCAmJiBmb3JtLmdldCgnZW1haWwnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGVcIj48L2k+XG4gICAgICAgICAgICAgICAgICBUaGlzIGZpZWxkIGlzIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmllbGQtZXJyb3JcIiAqbmdJZj1cImZvcm0uZ2V0KCdlbWFpbCcpPy50b3VjaGVkICYmIGZvcm0uZ2V0KCdlbWFpbCcpPy5oYXNFcnJvcigncGF0dGVybicpXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgUGxlYXNlIGVudGVyIHZhbGlkIGVtYWlsXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5GaXNydCBOYW1lPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiBwbGFjZWhvbGRlcj1cIkZpc3J0IE5hbWVcIiBmb3JtQ29udHJvbE5hbWU9XCJmaXJzdE5hbWVcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnZmlyc3ROYW1lJylcIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5MYXN0IE5hbWU8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbGFpbi1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiTGFzdCBOYW1lXCIgZm9ybUNvbnRyb2xOYW1lPVwibGFzdE5hbWVcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnbGFzdE5hbWUnKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmllbGQtZXJyb3JcIiAqbmdJZj1cImZvcm0uZ2V0KCdsYXN0TmFtZScpPy50b3VjaGVkICYmIGZvcm0uZ2V0KCdsYXN0TmFtZScpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1leGNsYW1hdGlvbi10cmlhbmdsZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgIFRoaXMgZmllbGQgaXMgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8IS0tICAgIFVTRVIgSU5GTyBCT1gtLT5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjYXJkIHZlcnRpY2FsLWNhcmRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCI+R2VuZXJhbCBVc2VyIEluZm88L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1haW4tY29udGVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItYm90dG9tXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5EZXBhcnRtZW50PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiBwbGFjZWhvbGRlcj1cIkRlcGFydG1lbnRcIiBmb3JtQ29udHJvbE5hbWU9XCJkZXBhcnRtZW50XCIgdHlwZT1cInRleHRcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnZGVwYXJ0bWVudCcpXCI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPk1hbmFnZXIgdXNlciBJRDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgcGxhY2Vob2xkZXI9XCJNYW5hZ2VyIHVzZXIgSURcIiBmb3JtQ29udHJvbE5hbWU9XCJtYW5hZ2VyXCIgdHlwZT1cInRleHRcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnbWFuYWdlcicpXCI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkFzc29jaWF0ZWQgUEM8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbGFpbi1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiQXNzb2NpYXRlZCBQQ1wiIGZvcm1Db250cm9sTmFtZT1cImFzc29jaWF0ZWRQY1wiIHR5cGU9XCJ0ZXh0XCIgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ2Fzc29jaWF0ZWRQYycpXCI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkRpZ2VzdCBjcmVkZW50aWFsczwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgcGxhY2Vob2xkZXI9XCJEaWdlc3QgY3JlZGVudGlhbHNcIiBmb3JtQ29udHJvbE5hbWU9XCJkaWdlc3RDcmVkZW50aWFsc1wiIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ2RpZ2VzdENyZWRlbnRpYWxzJylcIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+VXNlciBwcm9maWxlPC9kaXY+XG4gICAgICAgICAgICAgIDxhcHAtbGF6eS1sb2FkaW5nLXNlbGVjdFxuICAgICAgICAgICAgICAgIFtzaXRlSWRdPVwic2l0ZUlkXCJcbiAgICAgICAgICAgICAgICBbY29udHJvbE5hbWVdPVwiJ3VzZXJQcm9maWxlJ1wiXG4gICAgICAgICAgICAgICAgW2Zvcm1dPVwidXNlci5mb3JtXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlRmllbGQpPVwiY2hhbmdlRmllbGQoJ3VzZXJQcm9maWxlJylcIlxuICAgICAgICAgICAgICAgIFtvcHRpb25zVG9rZW5dPVwiJ3VzZXJQcm9maWxlcydcIlxuICAgICAgICAgICAgICA+PC9hcHAtbGF6eS1sb2FkaW5nLXNlbGVjdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Nb2JpbGUgdm9pY2UgYWNjZXNzPC9kaXY+XG4gICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPVwiY3VzdG9tLXRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW5hYmxlTW9iaWxlVm9pY2VBY2Nlc3NcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2VGaWVsZCgnZW5hYmxlTW9iaWxlVm9pY2VBY2Nlc3MnKVwiXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwidXNlci5lbmFibGVNb2JpbGVWb2ljZUFjY2Vzc1wiPlxuICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+VXNlcmxvY2FsZTwvZGl2PlxuICAgICAgICAgICAgICA8YXBwLWxhenktbG9hZGluZy1zZWxlY3RcbiAgICAgICAgICAgICAgICBbc2l0ZUlkXT1cInNpdGVJZFwiXG4gICAgICAgICAgICAgICAgW2NvbnRyb2xOYW1lXT1cIid1c2VyTG9jYWxlJ1wiXG4gICAgICAgICAgICAgICAgW2Zvcm1dPVwidXNlci5mb3JtXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlRmllbGQpPVwiY2hhbmdlRmllbGQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW29wdGlvbnNUb2tlbl09XCIndXNlckxvY2FsZXMnXCJcbiAgICAgICAgICAgICAgICBbZGVmYXVsdF09XCJ7a2V5OiAnJywgdmFsdWU6ICdOb25lJywgZGlzYWJsZWQ6IGZhbHNlfVwiPlxuICAgICAgICAgICAgICA8L2FwcC1sYXp5LWxvYWRpbmctc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+Q29uZmlybSBkaWdlc3QgY3JlZGVudGlhbHM8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbGFpbi1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiQ29uZmlybSBkaWdlc3QgY3JlZGVudGlhbHNcIiBmb3JtQ29udHJvbE5hbWU9XCJjb25maXJtRGlnZXN0Q3JlZGVudGlhbHNcIiB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdjb25maXJtRGlnZXN0Q3JlZGVudGlhbHMnKVwiPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgPCEtLSAgICBVU0VSIElORk8gQk9YLS0+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2FyZCB2ZXJ0aWNhbC1jYXJkXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZVwiPkNvbnRhY3QgSW5mb3JtYXRpb248L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1haW4tY29udGVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItYm90dG9tXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5NaWRkbGUgTmFtZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIk1pZGRsZSBOYW1lXCIgZm9ybUNvbnRyb2xOYW1lPVwibWlkZGxlTmFtZVwiIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdtaWRkbGVOYW1lJylcIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+VGVsZXBob25lIE51bWJlcjwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgdHlwZT1cIm51bWJlclwiIHBsYWNlaG9sZGVyPVwiVGVsZXBob25lIE51bWJlclwiIGZvcm1Db250cm9sTmFtZT1cInRlbGVwaG9uZU51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCd0ZWxlcGhvbmVOdW1iZXInKVwiPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Nb2JpbGUgTnVtYmVyPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgcGxhY2Vob2xkZXI9XCJNb2JpbGUgTnVtYmVyXCIgZm9ybUNvbnRyb2xOYW1lPVwibW9iaWxlTnVtYmVyXCIgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ21vYmlsZU51bWJlcicpXCI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkRpZ2VzdCBjcmVkZW50aWFsczwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIkRpZ2VzdCBjcmVkZW50aWFsc1wiIGZvcm1Db250cm9sTmFtZT1cImRpZ2VzdENyZWRlbnRpYWxzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ2RpZ2VzdENyZWRlbnRpYWxzJylcIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+RGlyZWN0b3J5IFVSSTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIkRpcmVjdG9yeSBVUklcIiBmb3JtQ29udHJvbE5hbWU9XCJkaXJlY3RvcnlVcmlcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnZGlyZWN0b3J5VXJpJylcIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+VGl0bGU8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbGFpbi1pbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJUaXRsZVwiIGZvcm1Db250cm9sTmFtZT1cInRpdGxlXCIgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ3RpdGxlJylcIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+SG9tZSBOdW1iZXI8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbGFpbi1pbnB1dFwiIHR5cGU9XCJudW1iZXJcIiBwbGFjZWhvbGRlcj1cIkhvbWUgTnVtYmVyXCIgZm9ybUNvbnRyb2xOYW1lPVwiaG9tZU51bWJlclwiIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdob21lTnVtYmVyJylcIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+UGFnZXIgTnVtYmVyPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgcGxhY2Vob2xkZXI9XCJQYWdlciBOdW1iZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJwYWdlck51bWJlclwiIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdwYWdlck51bWJlcicpXCI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+RGlzcGxheSBOYW1lPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiRGlzcGxheSBOYW1lXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGlzcGxheU5hbWVcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnZGlzcGxheU5hbWUnKVwiPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgIDwvZGl2PlxuICAgIDwvZm9ybT5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxyXG5cclxuPCEtLSA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJzYXZlKClcIiA+U2F2ZTwvYnV0dG9uPiAtLT4iXX0=
|