@tuki-io/tuki-widgets 0.0.219-dev.6 → 0.0.219-dev.60
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/contact-center/cc-import/cc-import.module.d.ts +13 -0
- package/contact-center/cc-import/cc-import.service.d.ts +85 -0
- package/contact-center/cc-import/components/import-contact-center-panel/import-contact-center-panel.component.d.ts +56 -0
- package/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.component.d.ts +77 -0
- package/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.types.d.ts +3 -0
- package/contact-center/cc-import/constants/cc-import.constants.d.ts +37 -0
- package/contact-center/cc-import/mock/cc-import.mock.d.ts +4 -0
- package/contact-center/cc-import/types/cc-import.d.ts +73 -0
- package/contact-center/cc-import/types/uccx.d.ts +109 -0
- package/contact-center/cc-readiness/cc-readiness.module.d.ts +3 -3
- package/contact-center/public-api.d.ts +8 -0
- package/contact-center/shared/api.endpoints.d.ts +25 -0
- package/contact-center/shared/api.service.d.ts +3 -1
- package/contact-center/shared/components/card/card.component.d.ts +13 -0
- package/contact-center/shared/dcp-api.service.d.ts +15 -0
- package/contact-center/shared/shared.module.d.ts +11 -5
- package/di2mt/api/api.endpoints.d.ts +3 -0
- package/esm2020/contact-center/cc-import/cc-import.module.mjs +45 -0
- package/esm2020/contact-center/cc-import/cc-import.service.mjs +228 -0
- package/esm2020/contact-center/cc-import/components/import-contact-center-panel/import-contact-center-panel.component.mjs +144 -0
- package/esm2020/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.component.mjs +243 -0
- package/esm2020/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.types.mjs +3 -0
- package/esm2020/contact-center/cc-import/constants/cc-import.constants.mjs +62 -0
- package/esm2020/contact-center/cc-import/mock/cc-import.mock.mjs +78 -0
- package/esm2020/contact-center/cc-import/types/cc-import.mjs +2 -0
- package/esm2020/contact-center/cc-import/types/uccx.mjs +24 -0
- package/esm2020/contact-center/cc-readiness/cc-readiness.module.mjs +7 -6
- package/esm2020/contact-center/cc-readiness/widgets/licences-requirement/licences-requirement.component.mjs +5 -5
- package/esm2020/contact-center/cc-readiness/widgets/summary-grid/summary-grid.component.mjs +2 -2
- package/esm2020/contact-center/public-api.mjs +9 -1
- package/esm2020/contact-center/shared/api.endpoints.mjs +26 -1
- package/esm2020/contact-center/shared/api.service.mjs +8 -3
- package/esm2020/contact-center/shared/components/card/card.component.mjs +24 -0
- package/esm2020/contact-center/shared/dcp-api.service.mjs +26 -0
- package/esm2020/contact-center/shared/shared.module.mjs +15 -5
- package/esm2020/di2mt/api/api.endpoints.mjs +4 -1
- package/esm2020/locations/public-api.mjs +8 -0
- package/esm2020/locations/src/app.constants.mjs +18 -0
- package/esm2020/locations/src/location-confirm-dialog/location-confirm-dialog.component.mjs +23 -0
- package/esm2020/locations/src/locations.component.mjs +398 -0
- package/esm2020/locations/src/locations.module.mjs +42 -0
- package/esm2020/locations/src/material.module.mjs +55 -0
- package/esm2020/locations/src/services/api.service.mjs +67 -0
- package/esm2020/locations/src/services/locations.service.mjs +69 -0
- package/esm2020/locations/src/types/location.mjs +2 -0
- package/esm2020/locations/src/utils/app-loader/app-loader.mjs +14 -0
- package/esm2020/locations/tuki-io-tuki-widgets-locations.mjs +5 -0
- package/esm2020/meetings/public-api.mjs +8 -0
- package/esm2020/meetings/src/app.constants.mjs +9 -0
- package/esm2020/meetings/src/components/live-meetings/live-meeting/live-meeting.component.mjs +107 -0
- package/esm2020/meetings/src/components/live-meetings/live-meetings.component.mjs +98 -0
- package/esm2020/meetings/src/components/meeting-spaces/meeting-space/meeting-space.component.mjs +110 -0
- package/esm2020/meetings/src/components/meeting-spaces/meeting-spaces.component.mjs +65 -0
- package/esm2020/meetings/src/material.module.mjs +76 -0
- package/esm2020/meetings/src/meetings.component.mjs +65 -0
- package/esm2020/meetings/src/meetings.module.mjs +51 -0
- package/esm2020/meetings/src/services/api.service.mjs +67 -0
- package/esm2020/meetings/src/services/live-meetings.service.mjs +178 -0
- package/esm2020/meetings/src/services/meeting-spaces.service.mjs +102 -0
- package/esm2020/meetings/src/types/live-meeting.mjs +2 -0
- package/esm2020/meetings/src/types/meeting-space.mjs +2 -0
- package/esm2020/meetings/src/utils/app-loader/app-loader.mjs +14 -0
- package/esm2020/meetings/tuki-io-tuki-widgets-meetings.mjs +5 -0
- package/esm2020/shared/public-api.mjs +4 -0
- package/esm2020/shared/src/ui/material.module.mjs +188 -0
- package/esm2020/shared/src/ui/shared.module.mjs +36 -0
- package/esm2020/shared/src/ui/tk-page-section/tk-page-section.component.mjs +13 -0
- package/esm2020/shared/src/ui/tk-page-section-row/tk-page-section-row.component.mjs +13 -0
- package/esm2020/shared/src/ui/ui.module.mjs +37 -0
- package/esm2020/shared/tuki-io-tuki-widgets-shared.mjs +5 -0
- package/esm2020/user-creation/src/utils/device-default-prefix.mjs +19 -2
- package/esm2020/user-creation/src/utils/device-name-dynamic-tokens.mjs +4 -0
- package/esm2020/user-creation/src/utils/parse-device-name-rule.mjs +6 -3
- package/esm2020/user-creation/src/widgets/user-creation-wizard/components/user-details-step/user-details-step.component.mjs +60 -13
- package/esm2020/user-creation/src/widgets/user-creation-wizard/components/user-template-step/user-template-step.component.mjs +2 -1
- package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.component.mjs +8 -6
- package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.service.mjs +13 -9
- package/esm2020/user-device-manage/public-api.mjs +4 -1
- package/esm2020/user-device-manage/src/app.constants.mjs +9 -3
- package/esm2020/user-device-manage/src/associate-lines/associate-lines.component.mjs +311 -0
- package/esm2020/user-device-manage/src/classes/device.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/deviceProfile.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/simplified-user.mjs +1 -1
- package/esm2020/user-device-manage/src/confirm-dialog/info-dialog.component.mjs +2 -2
- package/esm2020/user-device-manage/src/device-manage-widget.component.mjs +34 -17
- package/esm2020/user-device-manage/src/device-settings/device-settings.component.mjs +207 -0
- package/esm2020/user-device-manage/src/line-key-config/line-key-config.component.mjs +401 -0
- package/esm2020/user-device-manage/src/services/device.service.mjs +32 -2
- package/esm2020/user-device-manage/src/services/user.service.mjs +34 -6
- package/esm2020/user-device-manage/src/user-device-manage.module.mjs +19 -7
- package/esm2020/user-manage/src/app.constants.mjs +8 -1
- package/esm2020/user-manage/src/classes/simplified-user.mjs +19 -4
- package/esm2020/user-manage/src/device-list/device-list.component.mjs +7 -4
- package/esm2020/user-manage/src/device-list/device-row/device-row.component.mjs +6 -3
- package/esm2020/user-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +9 -5
- package/esm2020/user-manage/src/material.module.mjs +21 -7
- package/esm2020/user-manage/src/services/dcp-api.service.mjs +79 -0
- package/esm2020/user-manage/src/services/site-settings.service.mjs +11 -4
- package/esm2020/user-manage/src/services/user.service.mjs +94 -19
- package/esm2020/user-manage/src/user-calling/user-calling.component.mjs +12 -7
- package/esm2020/user-manage/src/user-manage-widget.component.mjs +90 -39
- package/esm2020/user-manage/src/user-manage.module.mjs +14 -4
- package/esm2020/user-manage/src/user-summary/user-summary.component.mjs +30 -0
- package/esm2020/users-list/src/app.constants.mjs +2 -1
- package/esm2020/users-list/src/classes/simlified-user.mjs +1 -1
- package/esm2020/users-list/src/classes/user-list.mjs +2 -1
- package/esm2020/users-list/src/components/table-toolbar/table-toolbar.component.mjs +3 -3
- package/esm2020/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.mjs +14 -3
- package/esm2020/users-list/src/move-user-wizard/move-user-wizard.component.mjs +5 -3
- package/esm2020/users-list/src/users-list.component.mjs +100 -17
- package/esm2020/workspaces/public-api.mjs +8 -0
- package/esm2020/workspaces/src/app.constants.mjs +27 -0
- package/esm2020/workspaces/src/components/workspace-confirm-dialog/workspace-confirm-dialog.component.mjs +32 -0
- package/esm2020/workspaces/src/components/workspace-detail/workspace-detail.component.mjs +96 -0
- package/esm2020/workspaces/src/components/workspace-device-detail/workspace-device-detail.component.mjs +66 -0
- package/esm2020/workspaces/src/components/workspaces-filters/workspaces-filters.component.mjs +56 -0
- package/esm2020/workspaces/src/components/workspaces-table/workspaces-table.component.mjs +130 -0
- package/esm2020/workspaces/src/material.module.mjs +83 -0
- package/esm2020/workspaces/src/services/api-webex.service.mjs +14 -0
- package/esm2020/workspaces/src/services/api.service.mjs +67 -0
- package/esm2020/workspaces/src/services/workspace-detail.service.mjs +169 -0
- package/esm2020/workspaces/src/services/workspaces-migration.service.mjs +59 -0
- package/esm2020/workspaces/src/services/workspaces.service.mjs +150 -0
- package/esm2020/workspaces/src/types/workspace.mjs +4 -0
- package/esm2020/workspaces/src/utils/app-loader/app-loader.mjs +14 -0
- package/esm2020/workspaces/src/utils/device-icon.mjs +13 -0
- package/esm2020/workspaces/src/utils/workspace-name.mjs +8 -0
- package/esm2020/workspaces/src/workspaces.component.mjs +306 -0
- package/esm2020/workspaces/src/workspaces.module.mjs +54 -0
- package/esm2020/workspaces/tuki-io-tuki-widgets-workspaces.mjs +5 -0
- package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs +998 -127
- package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs +3 -0
- package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-locations.mjs +679 -0
- package/fesm2015/tuki-io-tuki-widgets-locations.mjs.map +1 -0
- package/fesm2015/tuki-io-tuki-widgets-meetings.mjs +894 -0
- package/fesm2015/tuki-io-tuki-widgets-meetings.mjs.map +1 -0
- package/fesm2015/tuki-io-tuki-widgets-shared.mjs +280 -0
- package/fesm2015/tuki-io-tuki-widgets-shared.mjs.map +1 -0
- package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs +111 -32
- package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs +1013 -48
- package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs +380 -89
- package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-users-list.mjs +121 -22
- package/fesm2015/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-workspaces.mjs +1275 -0
- package/fesm2015/tuki-io-tuki-widgets-workspaces.mjs.map +1 -0
- package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs +989 -127
- package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs +3 -0
- package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-locations.mjs +672 -0
- package/fesm2020/tuki-io-tuki-widgets-locations.mjs.map +1 -0
- package/fesm2020/tuki-io-tuki-widgets-meetings.mjs +902 -0
- package/fesm2020/tuki-io-tuki-widgets-meetings.mjs.map +1 -0
- package/fesm2020/tuki-io-tuki-widgets-shared.mjs +280 -0
- package/fesm2020/tuki-io-tuki-widgets-shared.mjs.map +1 -0
- package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs +104 -28
- package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs +996 -47
- package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs +366 -82
- package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-users-list.mjs +120 -22
- package/fesm2020/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-workspaces.mjs +1276 -0
- package/fesm2020/tuki-io-tuki-widgets-workspaces.mjs.map +1 -0
- package/locations/index.d.ts +5 -0
- package/locations/public-api.d.ts +2 -0
- package/locations/src/app.constants.d.ts +10 -0
- package/locations/src/location-confirm-dialog/location-confirm-dialog.component.d.ts +15 -0
- package/locations/src/locations.component.d.ts +92 -0
- package/locations/src/locations.module.d.ts +13 -0
- package/locations/src/material.module.d.ts +12 -0
- package/locations/src/services/api.service.d.ts +18 -0
- package/locations/src/services/locations.service.d.ts +25 -0
- package/locations/src/types/location.d.ts +30 -0
- package/locations/src/utils/app-loader/app-loader.d.ts +6 -0
- package/meetings/index.d.ts +5 -0
- package/meetings/public-api.d.ts +2 -0
- package/meetings/src/app.constants.d.ts +8 -0
- package/meetings/src/components/live-meetings/live-meeting/live-meeting.component.d.ts +34 -0
- package/meetings/src/components/live-meetings/live-meetings.component.d.ts +43 -0
- package/meetings/src/components/meeting-spaces/meeting-space/meeting-space.component.d.ts +39 -0
- package/meetings/src/components/meeting-spaces/meeting-spaces.component.d.ts +27 -0
- package/meetings/src/material.module.d.ts +15 -0
- package/meetings/src/meetings.component.d.ts +29 -0
- package/meetings/src/meetings.module.d.ts +16 -0
- package/meetings/src/services/api.service.d.ts +18 -0
- package/meetings/src/services/live-meetings.service.d.ts +9 -0
- package/meetings/src/services/meeting-spaces.service.d.ts +16 -0
- package/meetings/src/types/live-meeting.d.ts +71 -0
- package/meetings/src/types/meeting-space.d.ts +52 -0
- package/meetings/src/utils/app-loader/app-loader.d.ts +6 -0
- package/package.json +33 -1
- package/shared/index.d.ts +5 -0
- package/shared/public-api.d.ts +3 -0
- package/shared/src/ui/material.module.d.ts +28 -0
- package/shared/src/ui/shared.module.d.ts +10 -0
- package/{user-device-manage/src/shared/tk-page-section/page-section.component.d.ts → shared/src/ui/tk-page-section/tk-page-section.component.d.ts} +1 -1
- package/shared/src/ui/tk-page-section-row/tk-page-section-row.component.d.ts +6 -0
- package/shared/src/ui/ui.module.d.ts +11 -0
- package/user-creation/src/utils/device-default-prefix.d.ts +7 -2
- package/user-creation/src/utils/device-name-dynamic-tokens.d.ts +1 -0
- package/user-creation/src/utils/parse-device-name-rule.d.ts +1 -0
- package/user-creation/src/widgets/user-creation-wizard/components/user-details-step/user-details-step.component.d.ts +2 -0
- package/user-device-manage/public-api.d.ts +3 -0
- package/user-device-manage/src/app.constants.d.ts +6 -0
- package/user-device-manage/src/associate-lines/associate-lines.component.d.ts +95 -0
- package/user-device-manage/src/classes/device.d.ts +15 -0
- package/user-device-manage/src/classes/deviceProfile.d.ts +5 -0
- package/user-device-manage/src/classes/simplified-user.d.ts +1 -1
- package/user-device-manage/src/device-associated-line/device-associated-line.component.d.ts +1 -0
- package/user-device-manage/src/device-manage-widget.component.d.ts +6 -1
- package/user-device-manage/src/device-settings/device-settings.component.d.ts +53 -0
- package/user-device-manage/src/line-key-config/line-key-config.component.d.ts +84 -0
- package/user-device-manage/src/services/device.service.d.ts +6 -1
- package/user-device-manage/src/services/user.service.d.ts +2 -1
- package/user-device-manage/src/user-device-manage.module.d.ts +12 -10
- package/user-manage/src/app.constants.d.ts +7 -0
- package/user-manage/src/classes/simplified-user.d.ts +17 -1
- package/user-manage/src/device-list/device-list.component.d.ts +2 -0
- package/user-manage/src/material.module.d.ts +3 -1
- package/user-manage/src/services/dcp-api.service.d.ts +21 -0
- package/user-manage/src/services/user.service.d.ts +19 -1
- package/user-manage/src/user-calling/user-calling.component.d.ts +3 -2
- package/user-manage/src/user-manage-widget.component.d.ts +14 -2
- package/user-manage/src/user-manage.module.d.ts +9 -7
- package/user-manage/src/user-summary/user-summary.component.d.ts +10 -0
- package/users-list/src/app.constants.d.ts +1 -0
- package/users-list/src/classes/simlified-user.d.ts +1 -1
- package/users-list/src/classes/user-list.d.ts +4 -0
- package/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.d.ts +3 -1
- package/users-list/src/move-user-wizard/move-user-wizard.component.d.ts +2 -1
- package/users-list/src/users-list.component.d.ts +6 -1
- package/workspaces/index.d.ts +5 -0
- package/workspaces/public-api.d.ts +2 -0
- package/workspaces/src/app.constants.d.ts +25 -0
- package/workspaces/src/components/workspace-confirm-dialog/workspace-confirm-dialog.component.d.ts +20 -0
- package/workspaces/src/components/workspace-detail/workspace-detail.component.d.ts +34 -0
- package/workspaces/src/components/workspace-device-detail/workspace-device-detail.component.d.ts +25 -0
- package/workspaces/src/components/workspaces-filters/workspaces-filters.component.d.ts +20 -0
- package/workspaces/src/components/workspaces-table/workspaces-table.component.d.ts +43 -0
- package/workspaces/src/material.module.d.ts +16 -0
- package/workspaces/src/services/api-webex.service.d.ts +6 -0
- package/workspaces/src/services/api.service.d.ts +18 -0
- package/workspaces/src/services/workspace-detail.service.d.ts +22 -0
- package/workspaces/src/services/workspaces-migration.service.d.ts +18 -0
- package/workspaces/src/services/workspaces.service.d.ts +11 -0
- package/workspaces/src/types/workspace.d.ts +439 -0
- package/workspaces/src/utils/app-loader/app-loader.d.ts +6 -0
- package/workspaces/src/utils/device-icon.d.ts +1 -0
- package/workspaces/src/utils/workspace-name.d.ts +1 -0
- package/workspaces/src/workspaces.component.d.ts +74 -0
- package/workspaces/src/workspaces.module.d.ts +17 -0
- package/contact-center/cc-readiness/components/card/card.component.d.ts +0 -6
- package/esm2020/contact-center/cc-readiness/components/card/card.component.mjs +0 -13
- package/esm2020/user-device-manage/src/shared/tk-page-section/page-section.component.mjs +0 -13
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { FormControl } from '@angular/forms';
|
|
3
|
+
import { finalize, forkJoin, Subject, switchMap, takeUntil } from 'rxjs';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../services/user.service";
|
|
6
|
+
import * as i2 from "../services/api.service";
|
|
7
|
+
import * as i3 from "../services/device.service";
|
|
8
|
+
import * as i4 from "../services/site-settings.service";
|
|
9
|
+
import * as i5 from "@angular/router";
|
|
10
|
+
import * as i6 from "@angular/common";
|
|
11
|
+
import * as i7 from "@angular/forms";
|
|
12
|
+
import * as i8 from "@angular/material/divider";
|
|
13
|
+
import * as i9 from "@angular/material/tooltip";
|
|
14
|
+
import * as i10 from "@angular/material/slide-toggle";
|
|
15
|
+
import * as i11 from "../utils/app-loader/app-loader";
|
|
16
|
+
export class DeviceSettingsComponent {
|
|
17
|
+
get lines() {
|
|
18
|
+
return this.device?.lines?.map((line) => line?.extension || line?.number).filter(Boolean).join(' | ') || 'N/A';
|
|
19
|
+
}
|
|
20
|
+
get devicePools() {
|
|
21
|
+
return this.siteSettingsService.devicePools;
|
|
22
|
+
}
|
|
23
|
+
get cssOptions() {
|
|
24
|
+
return this.siteSettingsService.callingSearchSpaceTypes;
|
|
25
|
+
}
|
|
26
|
+
constructor(userService, apiService, deviceService, siteSettingsService, router) {
|
|
27
|
+
this.userService = userService;
|
|
28
|
+
this.apiService = apiService;
|
|
29
|
+
this.deviceService = deviceService;
|
|
30
|
+
this.siteSettingsService = siteSettingsService;
|
|
31
|
+
this.router = router;
|
|
32
|
+
this.goBack = new EventEmitter();
|
|
33
|
+
this.destroy$ = new Subject();
|
|
34
|
+
this.dataPending = false;
|
|
35
|
+
this.device = null;
|
|
36
|
+
this.softKeys = [];
|
|
37
|
+
this.plarService = new FormControl(false);
|
|
38
|
+
this.description = new FormControl('');
|
|
39
|
+
this.softkeyTemplate = new FormControl('Standard user');
|
|
40
|
+
this.devicePool = new FormControl('Paris_regular_DP_test');
|
|
41
|
+
this.deviceCss = new FormControl('Paris_national_CSS');
|
|
42
|
+
this.enableExtensionMobility = new FormControl(true);
|
|
43
|
+
this.loggedIntoHuntGroup = new FormControl(false);
|
|
44
|
+
this.remoteDevice = new FormControl(false);
|
|
45
|
+
this.ignorePresentationIndicators = new FormControl(false);
|
|
46
|
+
this.hotlineDevice = new FormControl(false);
|
|
47
|
+
this.callerIdForCallsFromThisPhone = new FormControl(true);
|
|
48
|
+
this.remoteNumber = new FormControl(true);
|
|
49
|
+
this.formControls = [
|
|
50
|
+
this.plarService,
|
|
51
|
+
this.description,
|
|
52
|
+
this.softkeyTemplate,
|
|
53
|
+
this.devicePool,
|
|
54
|
+
this.deviceCss,
|
|
55
|
+
this.enableExtensionMobility,
|
|
56
|
+
this.loggedIntoHuntGroup,
|
|
57
|
+
this.remoteDevice,
|
|
58
|
+
this.ignorePresentationIndicators,
|
|
59
|
+
this.hotlineDevice,
|
|
60
|
+
this.callerIdForCallsFromThisPhone,
|
|
61
|
+
this.remoteNumber,
|
|
62
|
+
];
|
|
63
|
+
this.hasChanges = false;
|
|
64
|
+
}
|
|
65
|
+
ngOnInit() {
|
|
66
|
+
this.apiService.token = this.token;
|
|
67
|
+
this.apiService.apiUrl = this.host;
|
|
68
|
+
this.formControls.forEach(control => control.valueChanges
|
|
69
|
+
.pipe(takeUntil(this.destroy$))
|
|
70
|
+
.subscribe(() => this.hasChanges = true));
|
|
71
|
+
if (this.userService.userDevice) {
|
|
72
|
+
this.device = this.userService.userDevice;
|
|
73
|
+
this.plarService.setValue(!!this.device?.plarService, { emitEvent: false });
|
|
74
|
+
this.description.setValue(this.device?.description || '', { emitEvent: false });
|
|
75
|
+
this.softkeyTemplate.setValue(this.device?.softkeyTemplate || '', { emitEvent: false });
|
|
76
|
+
this.devicePool.setValue(this.device?.devicePoolName || '', { emitEvent: false });
|
|
77
|
+
this.deviceCss.setValue(this.device?.callingSearchSpaceName || '', { emitEvent: false });
|
|
78
|
+
this.enableExtensionMobility.setValue(!!this.device?.enabledExtensionMobility, { emitEvent: false });
|
|
79
|
+
this.loggedIntoHuntGroup.setValue(!!this.device?.loggedIntoHuntGroup, { emitEvent: false });
|
|
80
|
+
this.remoteDevice.setValue(!!this.device?.remoteDevice, { emitEvent: false });
|
|
81
|
+
this.hotlineDevice.setValue(!!this.device?.hotlineDevice, { emitEvent: false });
|
|
82
|
+
this.ignorePresentationIndicators.setValue(!!this.device?.ignorePresentationIndicators, { emitEvent: false });
|
|
83
|
+
this.callerIdForCallsFromThisPhone.setValue(!!this.device?.useDevicePoolCgpnIngressDN, { emitEvent: false });
|
|
84
|
+
this.remoteNumber.setValue(!!this.device?.remoteDevice, { emitEvent: false });
|
|
85
|
+
this.getSiteSettings();
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
this.getData();
|
|
89
|
+
}
|
|
90
|
+
getData() {
|
|
91
|
+
this.dataPending = true;
|
|
92
|
+
const deviceType = localStorage.getItem('deviceType');
|
|
93
|
+
let request;
|
|
94
|
+
if (localStorage.getItem('isWebex') === 'true') {
|
|
95
|
+
const customerId = localStorage.getItem('customerId');
|
|
96
|
+
const webexId = localStorage.getItem('webexUUID');
|
|
97
|
+
request = this.userService.fetchWebexUserDevice(customerId, webexId, deviceType);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
request = this.userService.fetchDIUserDevice(Number(this.siteId), this.userId, deviceType);
|
|
101
|
+
}
|
|
102
|
+
forkJoin({
|
|
103
|
+
device: request,
|
|
104
|
+
softKeys: this.siteSettingsService.getDeviceSoftkeyTemplates(Number(this.siteId)),
|
|
105
|
+
siteDefaults: this.siteSettingsService.getSiteDefaults(Number(this.siteId)),
|
|
106
|
+
})
|
|
107
|
+
.pipe(takeUntil(this.destroy$))
|
|
108
|
+
.pipe(finalize(() => this.dataPending = false))
|
|
109
|
+
.subscribe(({ device, softKeys }) => {
|
|
110
|
+
this.device = device;
|
|
111
|
+
this.softKeys = softKeys || [];
|
|
112
|
+
this.plarService.setValue(!!this.device?.plarService, { emitEvent: false });
|
|
113
|
+
this.description.setValue(this.device?.description || '', { emitEvent: false });
|
|
114
|
+
this.softkeyTemplate.setValue(this.device?.softkeyTemplate || '', { emitEvent: false });
|
|
115
|
+
this.devicePool.setValue(this.device?.devicePoolName || '', { emitEvent: false });
|
|
116
|
+
this.deviceCss.setValue(this.device?.callingSearchSpaceName || '', { emitEvent: false });
|
|
117
|
+
this.enableExtensionMobility.setValue(!!this.device?.enabledExtensionMobility, { emitEvent: false });
|
|
118
|
+
this.loggedIntoHuntGroup.setValue(!!this.device?.loggedIntoHuntGroup, { emitEvent: false });
|
|
119
|
+
this.remoteDevice.setValue(!!this.device?.remoteDevice, { emitEvent: false });
|
|
120
|
+
this.hotlineDevice.setValue(!!this.device?.hotlineDevice, { emitEvent: false });
|
|
121
|
+
this.ignorePresentationIndicators.setValue(!!this.device?.ignorePresentationIndicators, { emitEvent: false });
|
|
122
|
+
this.callerIdForCallsFromThisPhone.setValue(!!this.device?.useDevicePoolCgpnIngressDN, { emitEvent: false });
|
|
123
|
+
this.remoteNumber.setValue(!!this.device?.remoteDevice, { emitEvent: false });
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
getSiteSettings() {
|
|
127
|
+
this.dataPending = true;
|
|
128
|
+
forkJoin({
|
|
129
|
+
softKeys: this.siteSettingsService.getDeviceSoftkeyTemplates(Number(this.siteId)),
|
|
130
|
+
siteDefaults: this.siteSettingsService.getSiteDefaults(Number(this.siteId)),
|
|
131
|
+
})
|
|
132
|
+
.pipe(takeUntil(this.destroy$))
|
|
133
|
+
.pipe(finalize(() => this.dataPending = false))
|
|
134
|
+
.subscribe(({ softKeys }) => this.softKeys = softKeys || []);
|
|
135
|
+
}
|
|
136
|
+
onGoBack() {
|
|
137
|
+
const [path] = this.router.url.split('?');
|
|
138
|
+
const segments = path.split('/').filter(Boolean);
|
|
139
|
+
if (segments[segments.length - 1] === 'device-settings') {
|
|
140
|
+
segments.pop();
|
|
141
|
+
}
|
|
142
|
+
this.router.navigateByUrl('/' + segments.join('/'));
|
|
143
|
+
// this.goBack.emit();
|
|
144
|
+
}
|
|
145
|
+
onCancel() {
|
|
146
|
+
this.onGoBack();
|
|
147
|
+
}
|
|
148
|
+
onSave() {
|
|
149
|
+
if (!this.hasChanges) {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
const body = this.getChangedDeviceFields();
|
|
153
|
+
if (!body.length) {
|
|
154
|
+
this.hasChanges = false;
|
|
155
|
+
this.onGoBack();
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
this.dataPending = true;
|
|
159
|
+
this.deviceService.putDeviceFields(Number(this.siteId), this.device?.name || '', this.userService.userToken, body)
|
|
160
|
+
.pipe(switchMap(() => this.userService.persistUserCache()), takeUntil(this.destroy$), finalize(() => this.dataPending = false))
|
|
161
|
+
.subscribe(() => {
|
|
162
|
+
this.hasChanges = false;
|
|
163
|
+
this.onGoBack();
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
getChangedDeviceFields() {
|
|
167
|
+
const fieldsMap = [
|
|
168
|
+
[this.plarService, 'plarService', !!this.device?.plarService],
|
|
169
|
+
[this.description, 'description', this.device?.description || ''],
|
|
170
|
+
[this.softkeyTemplate, 'softkeyTemplate', this.device?.softkeyTemplate || ''],
|
|
171
|
+
[this.devicePool, 'devicePoolName', this.device?.devicePoolName || ''],
|
|
172
|
+
[this.deviceCss, 'callingSearchSpaceName', this.device?.callingSearchSpaceName || ''],
|
|
173
|
+
[this.enableExtensionMobility, 'enabledExtensionMobility', !!this.device?.enabledExtensionMobility],
|
|
174
|
+
[this.loggedIntoHuntGroup, 'loggedIntoHuntGroup', !!this.device?.loggedIntoHuntGroup],
|
|
175
|
+
[this.remoteDevice, 'remoteDevice', !!this.device?.remoteDevice],
|
|
176
|
+
[this.ignorePresentationIndicators, 'ignorePresentationIndicators', !!this.device?.ignorePresentationIndicators],
|
|
177
|
+
[this.hotlineDevice, 'hotlineDevice', !!this.device?.hotlineDevice],
|
|
178
|
+
[this.callerIdForCallsFromThisPhone, 'useDevicePoolCgpnIngressDN', !!this.device?.useDevicePoolCgpnIngressDN],
|
|
179
|
+
];
|
|
180
|
+
return fieldsMap
|
|
181
|
+
.filter(([control, , originalValue]) => control.value !== originalValue)
|
|
182
|
+
.map(([control, field]) => `device.${field}=${control.value}`);
|
|
183
|
+
}
|
|
184
|
+
ngOnDestroy() {
|
|
185
|
+
this.destroy$.next();
|
|
186
|
+
this.destroy$.complete();
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
DeviceSettingsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DeviceSettingsComponent, deps: [{ token: i1.UserService }, { token: i2.APIService }, { token: i3.DeviceService }, { token: i4.SiteSettingsService }, { token: i5.Router }], target: i0.ɵɵFactoryTarget.Component });
|
|
190
|
+
DeviceSettingsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DeviceSettingsComponent, selector: "app-device-settings", inputs: { token: "token", host: "host", siteId: "siteId", userId: "userId", deviceName: "deviceName" }, outputs: { goBack: "goBack" }, ngImport: i0, template: "<app-loader *ngIf=\"dataPending\"></app-loader>\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\">Device General Info</span>\r\n </div>\r\n</div>\r\n\r\n<div class=\"device-settings\">\r\n <div class=\"panel-header\">\r\n <span class=\"panel-header__title\">Device Settings</span>\r\n </div>\r\n\r\n <div class=\"panel-body\">\r\n <section class=\"card\">\r\n <div class=\"header\">\r\n <span class=\"title\">Details</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"detail-row\">\r\n <div class=\"side\">\r\n <span class=\"main-value\">{{ device?.name || 'N/A' }}</span>\r\n <span class=\"extra-info\">Name</span>\r\n </div>\r\n <div class=\"side\">\r\n <span class=\"main-value\">{{ device?.model || 'N/A' }}</span>\r\n <span class=\"extra-info\">Type</span>\r\n </div>\r\n <div class=\"side\">\r\n <span class=\"main-value\">{{ device?.description || 'N/A' }}</span>\r\n <span class=\"extra-info\">Device description</span>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"detail-row\">\r\n <div class=\"side\">\r\n <span class=\"main-value\">{{ lines }}</span>\r\n <span class=\"extra-info\">Line</span>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"detail-row flex-column\" style=\"gap: 0.5rem;\">\r\n <span class=\"text-description\">PLAR service</span>\r\n <mat-slide-toggle class=\"custom-toggle\" [formControl]=\"plarService\"></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\">Device 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\">Registration status</div>\r\n <div class=\"input-holder__plain-value text-description\">{{ device?.form?.get('registrationStatus')?.value || 'Unknown' }}</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\">IP Address</div>\r\n <div class=\"input-holder__plain-value text-description\">{{ device?.ipAddress || 'None' }}</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\">Description</div>\r\n <input class=\"plain-input\" [formControl]=\"description\">\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\">Protocol</div>\r\n <div class=\"input-holder__plain-value text-description\">SIP</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\">Softkey template</div>\r\n <div class=\"input-holder__select-wrap\">\r\n <select class=\"input-holder__select\" name=\"cluster\" [formControl]=\"softkeyTemplate\">\r\n <option *ngFor=\"let cluster of softKeys\" [value]=\"cluster\">{{ cluster }}</option>\r\n </select>\r\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\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\">Button template</div>\r\n <div class=\"input-holder__plain-value text-description\">Standard 8851 SIP</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\">Location</div>\r\n <div class=\"input-holder__plain-value text-description\">Paris_ios</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\">Device pool</div>\r\n <div class=\"input-holder__select-wrap\">\r\n <select class=\"input-holder__select\" name=\"devicePool\" [formControl]=\"devicePool\">\r\n <option *ngFor=\"let pool of devicePools\" [value]=\"pool\">{{ pool }}</option>\r\n </select>\r\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\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\">Device CSS</div>\r\n <div class=\"input-holder__select-wrap\">\r\n <select class=\"input-holder__select\" name=\"deviceCss\" [formControl]=\"deviceCss\">\r\n <option *ngFor=\"let css of cssOptions\" [value]=\"css\">{{ css }}</option>\r\n </select>\r\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Firmware version</div>\r\n <div class=\"input-holder__plain-value text-description\">{{ device?.softwareVersion || 'Unknown' }}</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\">Media Settings</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\">Media Resource Group List</div>\r\n <div class=\"input-holder__plain-value text-description\">None</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\">Network Hold MOH Audio Source</div>\r\n <div class=\"input-holder__plain-value text-description\">None</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 Hold MOH Audio Source</div>\r\n <div class=\"input-holder__plain-value text-description\">None</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\">AAR Settings</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\">AAR Calling Search Space</div>\r\n <div class=\"input-holder__plain-value text-description\">None</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\">AAR Group</div>\r\n <div class=\"input-holder__plain-value text-description\">None</div>\r\n </div>\r\n <mat-divider></mat-divider>\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\">Device Additional 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\">Common Phone Profile</div>\r\n <div class=\"input-holder__plain-value text-description\">Standard Common Phone Profile</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 Locale</div>\r\n <div class=\"input-holder__plain-value text-description\">None</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\">Enable Extension Mobility</div>\r\n <div class=\"input-holder__input\">\r\n <mat-slide-toggle class=\"custom-toggle\" [formControl]=\"enableExtensionMobility\"></mat-slide-toggle>\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\">Privacy</div>\r\n <div class=\"input-holder__plain-value text-description\">Default</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\">Mobility user ID</div>\r\n <div class=\"input-holder__plain-value text-description\">Adam.Allen</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\">Always Use Prime Line</div>\r\n <div class=\"input-holder__plain-value text-description\">Default</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\">Geolocation</div>\r\n <div class=\"input-holder__plain-value text-description\"> </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\">Logged Into Hunt Group</div>\r\n <div class=\"input-holder__input\">\r\n <mat-slide-toggle class=\"custom-toggle\" [formControl]=\"loggedIntoHuntGroup\"></mat-slide-toggle>\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\">Remote Device</div>\r\n <div class=\"input-holder__input\">\r\n <mat-slide-toggle class=\"custom-toggle\" [formControl]=\"remoteDevice\"></mat-slide-toggle>\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\">Phone Security Profile</div>\r\n <div class=\"input-holder__plain-value text-description\">Cisco Dual Mode for iPhone - Standard SIP Non-Secure Profile</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\">Network Locale</div>\r\n <div class=\"input-holder__plain-value text-description\">China</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\">Built In Bridge</div>\r\n <div class=\"input-holder__plain-value text-description\">Default</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\">Device Mobility Mode</div>\r\n <div class=\"input-holder__plain-value text-description\">Default</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\">Use Trusted Relay Point</div>\r\n <div class=\"input-holder__plain-value text-description\">Default</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\">Always Use Prime Line for Voice Message</div>\r\n <div class=\"input-holder__plain-value text-description\">Default</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\">Ignore Presentation Indicators( internal calls only )</div>\r\n <div class=\"input-holder__input\">\r\n <mat-slide-toggle class=\"custom-toggle\" [formControl]=\"ignorePresentationIndicators\"></mat-slide-toggle>\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\">Hot line Device</div>\r\n <div class=\"input-holder__input\">\r\n <mat-slide-toggle class=\"custom-toggle\" [formControl]=\"hotlineDevice\"></mat-slide-toggle>\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\">Number Presentation Transformation</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\">\r\n Caller ID For Calls From This Phone\r\n <i class=\"icon info-icon rem1\" [matTooltip]=\"'Controls how the caller ID is presented for calls placed from this phone.'\"></i>\r\n </div>\r\n <div class=\"input-holder__input\">\r\n <mat-slide-toggle class=\"custom-toggle\" [formControl]=\"callerIdForCallsFromThisPhone\"></mat-slide-toggle>\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\">\r\n Remote Number\r\n <i class=\"icon info-icon rem1\" [matTooltip]=\"'Controls how the remote number is presented for this phone.'\"></i>\r\n </div>\r\n <div class=\"input-holder__input\">\r\n <mat-slide-toggle class=\"custom-toggle\" [formControl]=\"remoteNumber\"></mat-slide-toggle>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n\r\n <div class=\"settings-footer\">\r\n <div class=\"settings-footer__actions\">\r\n <button type=\"button\" class=\"btn-outline\" (click)=\"onCancel()\">Cancel</button>\r\n <button type=\"button\" class=\"btn-filled\" [disabled]=\"!hasChanges\" (click)=\"onSave()\">Save</button>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";*{margin:0}.app-icon{height:20px;width:20px;display:inline-block;cursor:pointer;background-repeat:no-repeat;background-position:center;transition:all .15s ease-out}.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{width:95%;margin:auto;margin-left:.5rem;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}.panel-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.5rem;background:linear-gradient(90deg,#0d56aa,#0d56ab)}.panel-header__title{font-size:1rem;font-weight:500;font-family:Poppins,Poppins,sans-serif;color:#fff}.device-settings{display:flex;flex-direction:column;min-height:100%;background:#F3F6F6;font-family:Poppins,Poppins,sans-serif}.device-settings .panel-body{flex:1;padding:2rem 1.5rem;display:flex;flex-direction:column;gap:3rem}.device-settings .panel-body .card{width:50rem;margin:0 auto;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;flex:1}.device-settings .panel-body .card.vertical-card{flex-direction:row}.device-settings .panel-body .card.vertical-card .main-content{gap:0}.device-settings .panel-body .card.vertical-card .main-content .mat-divider{border-top-color:#0003!important}.device-settings .panel-body .card.vertical-card .main-content .input-holder{min-height:2rem;box-sizing:content-box;display:flex;gap:3.25rem}.device-settings .panel-body .card.vertical-card .main-content .input-holder.input-holder-top{padding:.75rem 0 0}.device-settings .panel-body .card.vertical-card .main-content .input-holder.input-holder-bottom{padding:0 0 .75rem}.device-settings .panel-body .card.vertical-card .main-content .input-holder.input-holder-top-bottom{padding:.75rem 0}.device-settings .panel-body .card.vertical-card .main-content .input-holder .input-holder__name{max-width:150px;width:150px;flex-shrink:0;color:#000000f2;font-size:.875rem;font-weight:400;white-space:normal;overflow-wrap:break-word}.device-settings .panel-body .card.vertical-card .main-content .input-holder input{width:200px;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}.device-settings .panel-body .card.vertical-card .main-content .input-holder input:hover{background-color:#0000001f!important}.device-settings .panel-body .card.vertical-card .main-content .input-holder input:focus{display:flex;align-items:center;color:#000000b3;background:#fff;border:solid .0625rem rgba(0,0,0,.5019607843)!important;cursor:pointer;flex-wrap:wrap;gap:.5rem;box-shadow:0 0 0 .12rem #fff,0 0 0 .25rem #1170cf,0 0 0 .3rem #1170cf59;outline:none}.device-settings .panel-body .card.vertical-card .main-content .input-holder .input-holder__select-wrap{position:relative;display:flex;align-items:center}.device-settings .panel-body .card.vertical-card .main-content .input-holder .input-holder__select-wrap .input-holder__select{width:200px;appearance:none;background:#fff;border:solid .0625rem rgba(0,0,0,.5019607843)!important;border-radius:6px;font-family:inherit;font-size:.8125rem;color:#000000f2;cursor:pointer;height:21px;padding:4px 12px;box-sizing:content-box}.device-settings .panel-body .card.vertical-card .main-content .input-holder .input-holder__select-wrap .input-holder__select:focus{outline:none;border-color:#0006}.device-settings .panel-body .card.vertical-card .main-content .input-holder .input-holder__select-wrap .input-holder__select:hover{background-color:#0000001f!important}.device-settings .panel-body .card.vertical-card .main-content .input-holder .input-holder__select-wrap .input-holder__select:focus{color:#000000b3;background:#fff;border:solid .0625rem rgba(0,0,0,.5019607843)!important;cursor:pointer;box-shadow:0 0 0 .12rem #fff,0 0 0 .25rem #1170cf,0 0 0 .3rem #1170cf59;outline:none}.device-settings .panel-body .card.vertical-card .main-content .input-holder .input-holder__select-wrap .input-holder__select-icon{position:absolute;right:.5rem;font-size:1.125rem;height:1.125rem;width:1.125rem;color:#0006;pointer-events:none}.device-settings .panel-body .card .header{display:flex;align-items:center;justify-content:space-between;align-items:start;width:180px}.device-settings .panel-body .card .header .title{font-weight:500;font-size:1rem;font-family:Poppins,Poppins,sans-serif;color:#000000f2}.device-settings .panel-body .card .main-content{display:flex;flex-direction:column;min-width:0;gap:1.5rem;flex:1}.device-settings .panel-body .card .main-content .detail-row{display:flex;flex:1;min-width:0;gap:2rem}.device-settings .panel-body .card .main-content .detail-row .side{width:200px;display:flex;flex-direction:column;flex:1;gap:.25rem}.device-settings .panel-body .card .main-content .detail-row .side .main-value{font-weight:400;font-size:.875rem;color:#000000f2}.device-settings .panel-body .card .main-content .detail-row .side .extra-info{font-weight:400;font-size:.75rem;color:#333}.device-settings .panel-body .card .main-content .input-holder{display:grid;grid-template-columns:45% 55%;align-items:center}.device-settings .panel-body .card .main-content .input-holder__name{font-weight:400;font-size:.875rem}.device-settings .panel-body .card .main-content .input-holder__input .mat-form-field{width:100%;max-width:16rem}.device-settings .panel-body .card .main-content .input-holder__input .plain-input{width:100%;max-width:16rem;font-size:.875rem;padding:.5rem 0;border:none;border-bottom:1px solid rgba(0,0,0,.95);background:transparent;outline:none}.flex-column{display:flex;flex-direction:column}.gap-0_75{gap:.75rem}.text-description{font-size:.875rem;font-weight:400}.icon{background-repeat:no-repeat;background-position:center;display:inline-block;background-size:contain}.info-icon{background-image:url(\"data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 width%3D%2232%22 height%3D%2232%22 viewBox%3D%220 0 32 32%22%3E%3Cpath d%3D%22M15.75 10.5a1 1 0 1 0 0-2 1 1 0 0 0 0 2M16.75 14.5a.75.75 0 0 0-.75-.75h-2a.75.75 0 0 0 0 1.5h1.25v7H13a.75.75 0 0 0 0 1.5h6a.75.75 0 0 0 0-1.5h-2.25zM2.25 16C2.25 8.406 8.406 2.25 16 2.25S29.75 8.406 29.75 16 23.594 29.75 16 29.75 2.25 23.594 2.25 16M16 3.75C9.235 3.75 3.75 9.235 3.75 16S9.235 28.25 16 28.25 28.25 22.765 28.25 16 22.765 3.75 16 3.75%22%2F%3E%3C%2Fsvg%3E\")}.rem1{height:1rem;width:1rem;vertical-align:middle;margin-left:.25rem}.settings-footer{position:sticky;bottom:0;background:#ffffff;border-top:1px solid rgba(0,0,0,.2);padding:1rem 1.5rem}.settings-footer__actions{display:flex;justify-content:flex-end;gap:.75rem;max-width:50rem;margin:0 auto}.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:#ffffff;border:1px solid rgba(0,0,0,.2);color:#0006}.btn-outline:hover:not(:disabled){background:#f5f5f5}.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}::ng-deep .device-settings .custom-toggle .mat-slide-toggle-bar{position:relative!important;width:48px!important;height:25px!important;flex-shrink:0!important;border-radius:13px!important;background-color:#ccc!important}::ng-deep .device-settings .custom-toggle .mat-slide-toggle-thumb{height:20px!important;width:20px!important;position:absolute!important;border-radius:50%!important;display:flex!important;align-items:center!important;justify-content:center!important;left:3px!important;top:5px!important;background-color:#fff!important}::ng-deep .device-settings .custom-toggle .mat-slide-toggle-thumb:after{content:\"\\d7\";font-size:14px!important;color:#8e9fb7!important;line-height:1!important;display:block!important;pointer-events:none!important}::ng-deep .device-settings .custom-toggle.mat-checked .mat-slide-toggle-thumb{left:calc(100% - 11px)!important}::ng-deep .device-settings .custom-toggle.mat-checked .mat-slide-toggle-thumb:after{content:\"\\2713\";color:#0d56aa!important;font-weight:700!important;font-size:10px!important}::ng-deep .device-settings .custom-toggle.mat-checked .mat-slide-toggle-bar{background:#1170cf!important}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i7.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i7.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: i7.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i8.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i10.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i11.AppLoaderComponent, selector: "app-loader" }] });
|
|
191
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DeviceSettingsComponent, decorators: [{
|
|
192
|
+
type: Component,
|
|
193
|
+
args: [{ selector: 'app-device-settings', template: "<app-loader *ngIf=\"dataPending\"></app-loader>\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\">Device General Info</span>\r\n </div>\r\n</div>\r\n\r\n<div class=\"device-settings\">\r\n <div class=\"panel-header\">\r\n <span class=\"panel-header__title\">Device Settings</span>\r\n </div>\r\n\r\n <div class=\"panel-body\">\r\n <section class=\"card\">\r\n <div class=\"header\">\r\n <span class=\"title\">Details</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"detail-row\">\r\n <div class=\"side\">\r\n <span class=\"main-value\">{{ device?.name || 'N/A' }}</span>\r\n <span class=\"extra-info\">Name</span>\r\n </div>\r\n <div class=\"side\">\r\n <span class=\"main-value\">{{ device?.model || 'N/A' }}</span>\r\n <span class=\"extra-info\">Type</span>\r\n </div>\r\n <div class=\"side\">\r\n <span class=\"main-value\">{{ device?.description || 'N/A' }}</span>\r\n <span class=\"extra-info\">Device description</span>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"detail-row\">\r\n <div class=\"side\">\r\n <span class=\"main-value\">{{ lines }}</span>\r\n <span class=\"extra-info\">Line</span>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"detail-row flex-column\" style=\"gap: 0.5rem;\">\r\n <span class=\"text-description\">PLAR service</span>\r\n <mat-slide-toggle class=\"custom-toggle\" [formControl]=\"plarService\"></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\">Device 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\">Registration status</div>\r\n <div class=\"input-holder__plain-value text-description\">{{ device?.form?.get('registrationStatus')?.value || 'Unknown' }}</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\">IP Address</div>\r\n <div class=\"input-holder__plain-value text-description\">{{ device?.ipAddress || 'None' }}</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\">Description</div>\r\n <input class=\"plain-input\" [formControl]=\"description\">\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\">Protocol</div>\r\n <div class=\"input-holder__plain-value text-description\">SIP</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\">Softkey template</div>\r\n <div class=\"input-holder__select-wrap\">\r\n <select class=\"input-holder__select\" name=\"cluster\" [formControl]=\"softkeyTemplate\">\r\n <option *ngFor=\"let cluster of softKeys\" [value]=\"cluster\">{{ cluster }}</option>\r\n </select>\r\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\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\">Button template</div>\r\n <div class=\"input-holder__plain-value text-description\">Standard 8851 SIP</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\">Location</div>\r\n <div class=\"input-holder__plain-value text-description\">Paris_ios</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\">Device pool</div>\r\n <div class=\"input-holder__select-wrap\">\r\n <select class=\"input-holder__select\" name=\"devicePool\" [formControl]=\"devicePool\">\r\n <option *ngFor=\"let pool of devicePools\" [value]=\"pool\">{{ pool }}</option>\r\n </select>\r\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\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\">Device CSS</div>\r\n <div class=\"input-holder__select-wrap\">\r\n <select class=\"input-holder__select\" name=\"deviceCss\" [formControl]=\"deviceCss\">\r\n <option *ngFor=\"let css of cssOptions\" [value]=\"css\">{{ css }}</option>\r\n </select>\r\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Firmware version</div>\r\n <div class=\"input-holder__plain-value text-description\">{{ device?.softwareVersion || 'Unknown' }}</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\">Media Settings</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\">Media Resource Group List</div>\r\n <div class=\"input-holder__plain-value text-description\">None</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\">Network Hold MOH Audio Source</div>\r\n <div class=\"input-holder__plain-value text-description\">None</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 Hold MOH Audio Source</div>\r\n <div class=\"input-holder__plain-value text-description\">None</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\">AAR Settings</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\">AAR Calling Search Space</div>\r\n <div class=\"input-holder__plain-value text-description\">None</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\">AAR Group</div>\r\n <div class=\"input-holder__plain-value text-description\">None</div>\r\n </div>\r\n <mat-divider></mat-divider>\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\">Device Additional 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\">Common Phone Profile</div>\r\n <div class=\"input-holder__plain-value text-description\">Standard Common Phone Profile</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 Locale</div>\r\n <div class=\"input-holder__plain-value text-description\">None</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\">Enable Extension Mobility</div>\r\n <div class=\"input-holder__input\">\r\n <mat-slide-toggle class=\"custom-toggle\" [formControl]=\"enableExtensionMobility\"></mat-slide-toggle>\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\">Privacy</div>\r\n <div class=\"input-holder__plain-value text-description\">Default</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\">Mobility user ID</div>\r\n <div class=\"input-holder__plain-value text-description\">Adam.Allen</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\">Always Use Prime Line</div>\r\n <div class=\"input-holder__plain-value text-description\">Default</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\">Geolocation</div>\r\n <div class=\"input-holder__plain-value text-description\"> </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\">Logged Into Hunt Group</div>\r\n <div class=\"input-holder__input\">\r\n <mat-slide-toggle class=\"custom-toggle\" [formControl]=\"loggedIntoHuntGroup\"></mat-slide-toggle>\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\">Remote Device</div>\r\n <div class=\"input-holder__input\">\r\n <mat-slide-toggle class=\"custom-toggle\" [formControl]=\"remoteDevice\"></mat-slide-toggle>\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\">Phone Security Profile</div>\r\n <div class=\"input-holder__plain-value text-description\">Cisco Dual Mode for iPhone - Standard SIP Non-Secure Profile</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\">Network Locale</div>\r\n <div class=\"input-holder__plain-value text-description\">China</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\">Built In Bridge</div>\r\n <div class=\"input-holder__plain-value text-description\">Default</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\">Device Mobility Mode</div>\r\n <div class=\"input-holder__plain-value text-description\">Default</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\">Use Trusted Relay Point</div>\r\n <div class=\"input-holder__plain-value text-description\">Default</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\">Always Use Prime Line for Voice Message</div>\r\n <div class=\"input-holder__plain-value text-description\">Default</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\">Ignore Presentation Indicators( internal calls only )</div>\r\n <div class=\"input-holder__input\">\r\n <mat-slide-toggle class=\"custom-toggle\" [formControl]=\"ignorePresentationIndicators\"></mat-slide-toggle>\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\">Hot line Device</div>\r\n <div class=\"input-holder__input\">\r\n <mat-slide-toggle class=\"custom-toggle\" [formControl]=\"hotlineDevice\"></mat-slide-toggle>\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\">Number Presentation Transformation</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\">\r\n Caller ID For Calls From This Phone\r\n <i class=\"icon info-icon rem1\" [matTooltip]=\"'Controls how the caller ID is presented for calls placed from this phone.'\"></i>\r\n </div>\r\n <div class=\"input-holder__input\">\r\n <mat-slide-toggle class=\"custom-toggle\" [formControl]=\"callerIdForCallsFromThisPhone\"></mat-slide-toggle>\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\">\r\n Remote Number\r\n <i class=\"icon info-icon rem1\" [matTooltip]=\"'Controls how the remote number is presented for this phone.'\"></i>\r\n </div>\r\n <div class=\"input-holder__input\">\r\n <mat-slide-toggle class=\"custom-toggle\" [formControl]=\"remoteNumber\"></mat-slide-toggle>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n\r\n <div class=\"settings-footer\">\r\n <div class=\"settings-footer__actions\">\r\n <button type=\"button\" class=\"btn-outline\" (click)=\"onCancel()\">Cancel</button>\r\n <button type=\"button\" class=\"btn-filled\" [disabled]=\"!hasChanges\" (click)=\"onSave()\">Save</button>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";*{margin:0}.app-icon{height:20px;width:20px;display:inline-block;cursor:pointer;background-repeat:no-repeat;background-position:center;transition:all .15s ease-out}.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{width:95%;margin:auto;margin-left:.5rem;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}.panel-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.5rem;background:linear-gradient(90deg,#0d56aa,#0d56ab)}.panel-header__title{font-size:1rem;font-weight:500;font-family:Poppins,Poppins,sans-serif;color:#fff}.device-settings{display:flex;flex-direction:column;min-height:100%;background:#F3F6F6;font-family:Poppins,Poppins,sans-serif}.device-settings .panel-body{flex:1;padding:2rem 1.5rem;display:flex;flex-direction:column;gap:3rem}.device-settings .panel-body .card{width:50rem;margin:0 auto;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;flex:1}.device-settings .panel-body .card.vertical-card{flex-direction:row}.device-settings .panel-body .card.vertical-card .main-content{gap:0}.device-settings .panel-body .card.vertical-card .main-content .mat-divider{border-top-color:#0003!important}.device-settings .panel-body .card.vertical-card .main-content .input-holder{min-height:2rem;box-sizing:content-box;display:flex;gap:3.25rem}.device-settings .panel-body .card.vertical-card .main-content .input-holder.input-holder-top{padding:.75rem 0 0}.device-settings .panel-body .card.vertical-card .main-content .input-holder.input-holder-bottom{padding:0 0 .75rem}.device-settings .panel-body .card.vertical-card .main-content .input-holder.input-holder-top-bottom{padding:.75rem 0}.device-settings .panel-body .card.vertical-card .main-content .input-holder .input-holder__name{max-width:150px;width:150px;flex-shrink:0;color:#000000f2;font-size:.875rem;font-weight:400;white-space:normal;overflow-wrap:break-word}.device-settings .panel-body .card.vertical-card .main-content .input-holder input{width:200px;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}.device-settings .panel-body .card.vertical-card .main-content .input-holder input:hover{background-color:#0000001f!important}.device-settings .panel-body .card.vertical-card .main-content .input-holder input:focus{display:flex;align-items:center;color:#000000b3;background:#fff;border:solid .0625rem rgba(0,0,0,.5019607843)!important;cursor:pointer;flex-wrap:wrap;gap:.5rem;box-shadow:0 0 0 .12rem #fff,0 0 0 .25rem #1170cf,0 0 0 .3rem #1170cf59;outline:none}.device-settings .panel-body .card.vertical-card .main-content .input-holder .input-holder__select-wrap{position:relative;display:flex;align-items:center}.device-settings .panel-body .card.vertical-card .main-content .input-holder .input-holder__select-wrap .input-holder__select{width:200px;appearance:none;background:#fff;border:solid .0625rem rgba(0,0,0,.5019607843)!important;border-radius:6px;font-family:inherit;font-size:.8125rem;color:#000000f2;cursor:pointer;height:21px;padding:4px 12px;box-sizing:content-box}.device-settings .panel-body .card.vertical-card .main-content .input-holder .input-holder__select-wrap .input-holder__select:focus{outline:none;border-color:#0006}.device-settings .panel-body .card.vertical-card .main-content .input-holder .input-holder__select-wrap .input-holder__select:hover{background-color:#0000001f!important}.device-settings .panel-body .card.vertical-card .main-content .input-holder .input-holder__select-wrap .input-holder__select:focus{color:#000000b3;background:#fff;border:solid .0625rem rgba(0,0,0,.5019607843)!important;cursor:pointer;box-shadow:0 0 0 .12rem #fff,0 0 0 .25rem #1170cf,0 0 0 .3rem #1170cf59;outline:none}.device-settings .panel-body .card.vertical-card .main-content .input-holder .input-holder__select-wrap .input-holder__select-icon{position:absolute;right:.5rem;font-size:1.125rem;height:1.125rem;width:1.125rem;color:#0006;pointer-events:none}.device-settings .panel-body .card .header{display:flex;align-items:center;justify-content:space-between;align-items:start;width:180px}.device-settings .panel-body .card .header .title{font-weight:500;font-size:1rem;font-family:Poppins,Poppins,sans-serif;color:#000000f2}.device-settings .panel-body .card .main-content{display:flex;flex-direction:column;min-width:0;gap:1.5rem;flex:1}.device-settings .panel-body .card .main-content .detail-row{display:flex;flex:1;min-width:0;gap:2rem}.device-settings .panel-body .card .main-content .detail-row .side{width:200px;display:flex;flex-direction:column;flex:1;gap:.25rem}.device-settings .panel-body .card .main-content .detail-row .side .main-value{font-weight:400;font-size:.875rem;color:#000000f2}.device-settings .panel-body .card .main-content .detail-row .side .extra-info{font-weight:400;font-size:.75rem;color:#333}.device-settings .panel-body .card .main-content .input-holder{display:grid;grid-template-columns:45% 55%;align-items:center}.device-settings .panel-body .card .main-content .input-holder__name{font-weight:400;font-size:.875rem}.device-settings .panel-body .card .main-content .input-holder__input .mat-form-field{width:100%;max-width:16rem}.device-settings .panel-body .card .main-content .input-holder__input .plain-input{width:100%;max-width:16rem;font-size:.875rem;padding:.5rem 0;border:none;border-bottom:1px solid rgba(0,0,0,.95);background:transparent;outline:none}.flex-column{display:flex;flex-direction:column}.gap-0_75{gap:.75rem}.text-description{font-size:.875rem;font-weight:400}.icon{background-repeat:no-repeat;background-position:center;display:inline-block;background-size:contain}.info-icon{background-image:url(\"data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 width%3D%2232%22 height%3D%2232%22 viewBox%3D%220 0 32 32%22%3E%3Cpath d%3D%22M15.75 10.5a1 1 0 1 0 0-2 1 1 0 0 0 0 2M16.75 14.5a.75.75 0 0 0-.75-.75h-2a.75.75 0 0 0 0 1.5h1.25v7H13a.75.75 0 0 0 0 1.5h6a.75.75 0 0 0 0-1.5h-2.25zM2.25 16C2.25 8.406 8.406 2.25 16 2.25S29.75 8.406 29.75 16 23.594 29.75 16 29.75 2.25 23.594 2.25 16M16 3.75C9.235 3.75 3.75 9.235 3.75 16S9.235 28.25 16 28.25 28.25 22.765 28.25 16 22.765 3.75 16 3.75%22%2F%3E%3C%2Fsvg%3E\")}.rem1{height:1rem;width:1rem;vertical-align:middle;margin-left:.25rem}.settings-footer{position:sticky;bottom:0;background:#ffffff;border-top:1px solid rgba(0,0,0,.2);padding:1rem 1.5rem}.settings-footer__actions{display:flex;justify-content:flex-end;gap:.75rem;max-width:50rem;margin:0 auto}.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:#ffffff;border:1px solid rgba(0,0,0,.2);color:#0006}.btn-outline:hover:not(:disabled){background:#f5f5f5}.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}::ng-deep .device-settings .custom-toggle .mat-slide-toggle-bar{position:relative!important;width:48px!important;height:25px!important;flex-shrink:0!important;border-radius:13px!important;background-color:#ccc!important}::ng-deep .device-settings .custom-toggle .mat-slide-toggle-thumb{height:20px!important;width:20px!important;position:absolute!important;border-radius:50%!important;display:flex!important;align-items:center!important;justify-content:center!important;left:3px!important;top:5px!important;background-color:#fff!important}::ng-deep .device-settings .custom-toggle .mat-slide-toggle-thumb:after{content:\"\\d7\";font-size:14px!important;color:#8e9fb7!important;line-height:1!important;display:block!important;pointer-events:none!important}::ng-deep .device-settings .custom-toggle.mat-checked .mat-slide-toggle-thumb{left:calc(100% - 11px)!important}::ng-deep .device-settings .custom-toggle.mat-checked .mat-slide-toggle-thumb:after{content:\"\\2713\";color:#0d56aa!important;font-weight:700!important;font-size:10px!important}::ng-deep .device-settings .custom-toggle.mat-checked .mat-slide-toggle-bar{background:#1170cf!important}\n"] }]
|
|
194
|
+
}], ctorParameters: function () { return [{ type: i1.UserService }, { type: i2.APIService }, { type: i3.DeviceService }, { type: i4.SiteSettingsService }, { type: i5.Router }]; }, propDecorators: { goBack: [{
|
|
195
|
+
type: Output
|
|
196
|
+
}], token: [{
|
|
197
|
+
type: Input
|
|
198
|
+
}], host: [{
|
|
199
|
+
type: Input
|
|
200
|
+
}], siteId: [{
|
|
201
|
+
type: Input
|
|
202
|
+
}], userId: [{
|
|
203
|
+
type: Input
|
|
204
|
+
}], deviceName: [{
|
|
205
|
+
type: Input
|
|
206
|
+
}] } });
|
|
207
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLXNldHRpbmdzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLWRldmljZS1tYW5hZ2Uvc3JjL2RldmljZS1zZXR0aW5ncy9kZXZpY2Utc2V0dGluZ3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL3VzZXItZGV2aWNlLW1hbmFnZS9zcmMvZGV2aWNlLXNldHRpbmdzL2RldmljZS1zZXR0aW5ncy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFXekUsTUFBTSxPQUFPLHVCQUF1QjtJQTJDbEMsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxTQUFTLElBQUksSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDO0lBQ3RILENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUM7SUFDOUMsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLHVCQUF1QixDQUFDO0lBQzFE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LENBQUMsT0FBTyxFQUFFLEFBQUQsRUFBRyxhQUFhLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxhQUFhLENBQUM7YUFDdkUsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsS0FBSyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7O3FIQTFNVSx1QkFBdUI7eUdBQXZCLHVCQUF1QixrTUNkcEMsNjdjQXdTQTs0RkQxUmEsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLHFCQUFxQjs4TUFLckIsTUFBTTtzQkFBZixNQUFNO2dCQUNFLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBmaW5hbGl6ZSwgZm9ya0pvaW4sIFN1YmplY3QsIHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQVBJU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2FwaS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGV2aWNlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2RldmljZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2l0ZVNldHRpbmdzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3NpdGUtc2V0dGluZ3Muc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1kZXZpY2Utc2V0dGluZ3MnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kZXZpY2Utc2V0dGluZ3MuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RldmljZS1zZXR0aW5ncy5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGV2aWNlU2V0dGluZ3NDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQE91dHB1dCgpIGdvQmFjayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBASW5wdXQoKSB0b2tlbiE6IHN0cmluZztcclxuICBASW5wdXQoKSBob3N0ITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHNpdGVJZCE6IHN0cmluZztcclxuICBASW5wdXQoKSB1c2VySWQhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZGV2aWNlTmFtZSE6IHN0cmluZztcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHVibGljIGRhdGFQZW5kaW5nID0gZmFsc2U7XHJcbiAgcHVibGljIGRldmljZTogYW55ID0gbnVsbDtcclxuICBwdWJsaWMgc29mdEtleXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIHB1YmxpYyByZWFkb25seSBwbGFyU2VydmljZSA9IG5ldyBGb3JtQ29udHJvbChmYWxzZSk7XHJcbiAgcHVibGljIHJlYWRvbmx5IGRlc2NyaXB0aW9uID0gbmV3IEZvcm1Db250cm9sKCcnKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgc29mdGtleVRlbXBsYXRlID0gbmV3IEZvcm1Db250cm9sKCdTdGFuZGFyZCB1c2VyJyk7XHJcbiAgcHVibGljIHJlYWRvbmx5IGRldmljZVBvb2wgPSBuZXcgRm9ybUNvbnRyb2woJ1BhcmlzX3JlZ3VsYXJfRFBfdGVzdCcpO1xyXG4gIHB1YmxpYyByZWFkb25seSBkZXZpY2VDc3MgPSBuZXcgRm9ybUNvbnRyb2woJ1BhcmlzX25hdGlvbmFsX0NTUycpO1xyXG4gIHB1YmxpYyByZWFkb25seSBlbmFibGVFeHRlbnNpb25Nb2JpbGl0eSA9IG5ldyBGb3JtQ29udHJvbCh0cnVlKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgbG9nZ2VkSW50b0h1bnRHcm91cCA9IG5ldyBGb3JtQ29udHJvbChmYWxzZSk7XHJcbiAgcHVibGljIHJlYWRvbmx5IHJlbW90ZURldmljZSA9IG5ldyBGb3JtQ29udHJvbChmYWxzZSk7XHJcbiAgcHVibGljIHJlYWRvbmx5IGlnbm9yZVByZXNlbnRhdGlvbkluZGljYXRvcnMgPSBuZXcgRm9ybUNvbnRyb2woZmFsc2UpO1xyXG4gIHB1YmxpYyByZWFkb25seSBob3RsaW5lRGV2aWNlID0gbmV3IEZvcm1Db250cm9sKGZhbHNlKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgY2FsbGVySWRGb3JDYWxsc0Zyb21UaGlzUGhvbmUgPSBuZXcgRm9ybUNvbnRyb2wodHJ1ZSk7XHJcbiAgcHVibGljIHJlYWRvbmx5IHJlbW90ZU51bWJlciA9IG5ldyBGb3JtQ29udHJvbCh0cnVlKTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBmb3JtQ29udHJvbHM6IEZvcm1Db250cm9sPGFueT5bXSA9IFtcclxuICAgIHRoaXMucGxhclNlcnZpY2UsXHJcbiAgICB0aGlzLmRlc2NyaXB0aW9uLFxyXG4gICAgdGhpcy5zb2Z0a2V5VGVtcGxhdGUsXHJcbiAgICB0aGlzLmRldmljZVBvb2wsXHJcbiAgICB0aGlzLmRldmljZUNzcyxcclxuICAgIHRoaXMuZW5hYmxlRXh0ZW5zaW9uTW9iaWxpdHksXHJcbiAgICB0aGlzLmxvZ2dlZEludG9IdW50R3JvdXAsXHJcbiAgICB0aGlzLnJlbW90ZURldmljZSxcclxuICAgIHRoaXMuaWdub3JlUHJlc2VudGF0aW9uSW5kaWNhdG9ycyxcclxuICAgIHRoaXMuaG90bGluZURldmljZSxcclxuICAgIHRoaXMuY2FsbGVySWRGb3JDYWxsc0Zyb21UaGlzUGhvbmUsXHJcbiAgICB0aGlzLnJlbW90ZU51bWJlcixcclxuICBdO1xyXG5cclxuICBwdWJsaWMgaGFzQ2hhbmdlcyA9IGZhbHNlO1xyXG5cclxuICBnZXQgbGluZXMoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmRldmljZT8ubGluZXM/Lm1hcCgobGluZTogYW55KSA9PiBsaW5lPy5leHRlbnNpb24gfHwgbGluZT8ubnVtYmVyKS5maWx0ZXIoQm9vbGVhbikuam9pbignIHwgJykgfHwgJ04vQSc7XHJcbiAgfVxyXG5cclxuICBnZXQgZGV2aWNlUG9vbHMoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2l0ZVNldHRpbmdzU2VydmljZS5kZXZpY2VQb29scztcclxuICB9XHJcblxyXG4gIGdldCBjc3NPcHRpb25zKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiB0aGlzLnNpdGVTZXR0aW5nc1NlcnZpY2UuY2FsbGluZ1NlYXJjaFNwYWNlVHlwZXM7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFwaVNlcnZpY2U6IEFQSVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRldmljZVNlcnZpY2U6IERldmljZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNpdGVTZXR0aW5nc1NlcnZpY2U6IFNpdGVTZXR0aW5nc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFwaVNlcnZpY2UudG9rZW4gPSB0aGlzLnRva2VuO1xyXG4gICAgdGhpcy5hcGlTZXJ2aWNlLmFwaVVybCA9IHRoaXMuaG9zdDtcclxuXHJcbiAgICB0aGlzLmZvcm1Db250cm9scy5mb3JFYWNoKGNvbnRyb2wgPT4gY29udHJvbC52YWx1ZUNoYW5nZXNcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuaGFzQ2hhbmdlcyA9IHRydWUpKTtcclxuXHJcbiAgICBpZiAodGhpcy51c2VyU2VydmljZS51c2VyRGV2aWNlKSB7XHJcbiAgICAgIHRoaXMuZGV2aWNlID0gdGhpcy51c2VyU2VydmljZS51c2VyRGV2aWNlO1xyXG4gICAgICB0aGlzLnBsYXJTZXJ2aWNlLnNldFZhbHVlKCEhdGhpcy5kZXZpY2U/LnBsYXJTZXJ2aWNlLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xyXG4gICAgICB0aGlzLmRlc2NyaXB0aW9uLnNldFZhbHVlKHRoaXMuZGV2aWNlPy5kZXNjcmlwdGlvbiB8fCAnJywge2VtaXRFdmVudDogZmFsc2V9KTtcclxuICAgICAgdGhpcy5zb2Z0a2V5VGVtcGxhdGUuc2V0VmFsdWUodGhpcy5kZXZpY2U/LnNvZnRrZXlUZW1wbGF0ZSB8fCAnJywge2VtaXRFdmVudDogZmFsc2V9KTtcclxuICAgICAgdGhpcy5kZXZpY2VQb29sLnNldFZhbHVlKHRoaXMuZGV2aWNlPy5kZXZpY2VQb29sTmFtZSB8fCAnJywge2VtaXRFdmVudDogZmFsc2V9KTtcclxuICAgICAgdGhpcy5kZXZpY2VDc3Muc2V0VmFsdWUodGhpcy5kZXZpY2U/LmNhbGxpbmdTZWFyY2hTcGFjZU5hbWUgfHwgJycsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XHJcbiAgICAgIHRoaXMuZW5hYmxlRXh0ZW5zaW9uTW9iaWxpdHkuc2V0VmFsdWUoISF0aGlzLmRldmljZT8uZW5hYmxlZEV4dGVuc2lvbk1vYmlsaXR5LCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xyXG4gICAgICB0aGlzLmxvZ2dlZEludG9IdW50R3JvdXAuc2V0VmFsdWUoISF0aGlzLmRldmljZT8ubG9nZ2VkSW50b0h1bnRHcm91cCwge2VtaXRFdmVudDogZmFsc2V9KTtcclxuICAgICAgdGhpcy5yZW1vdGVEZXZpY2Uuc2V0VmFsdWUoISF0aGlzLmRldmljZT8ucmVtb3RlRGV2aWNlLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xyXG4gICAgICB0aGlzLmhvdGxpbmVEZXZpY2Uuc2V0VmFsdWUoISF0aGlzLmRldmljZT8uaG90bGluZURldmljZSwge2VtaXRFdmVudDogZmFsc2V9KTtcclxuICAgICAgdGhpcy5pZ25vcmVQcmVzZW50YXRpb25JbmRpY2F0b3JzLnNldFZhbHVlKCEhdGhpcy5kZXZpY2U/Lmlnbm9yZVByZXNlbnRhdGlvbkluZGljYXRvcnMsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XHJcbiAgICAgIHRoaXMuY2FsbGVySWRGb3JDYWxsc0Zyb21UaGlzUGhvbmUuc2V0VmFsdWUoISF0aGlzLmRldmljZT8udXNlRGV2aWNlUG9vbENncG5JbmdyZXNzRE4sIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XHJcbiAgICAgIHRoaXMucmVtb3RlTnVtYmVyLnNldFZhbHVlKCEhdGhpcy5kZXZpY2U/LnJlbW90ZURldmljZSwge2VtaXRFdmVudDogZmFsc2V9KTtcclxuICAgICAgdGhpcy5nZXRTaXRlU2V0dGluZ3MoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZ2V0RGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXREYXRhKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRhUGVuZGluZyA9IHRydWU7XHJcbiAgICBjb25zdCBkZXZpY2VUeXBlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2RldmljZVR5cGUnKTtcclxuICAgIGxldCByZXF1ZXN0O1xyXG4gICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdpc1dlYmV4JykgPT09ICd0cnVlJykge1xyXG4gICAgICBjb25zdCBjdXN0b21lcklkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2N1c3RvbWVySWQnKTtcclxuICAgICAgY29uc3Qgd2ViZXhJZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3ZWJleFVVSUQnKTtcclxuICAgICAgcmVxdWVzdCA9IHRoaXMudXNlclNlcnZpY2UuZmV0Y2hXZWJleFVzZXJEZXZpY2UoY3VzdG9tZXJJZCEsIHdlYmV4SWQhLCBkZXZpY2VUeXBlISk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXF1ZXN0ID0gdGhpcy51c2VyU2VydmljZS5mZXRjaERJVXNlckRldmljZShOdW1iZXIodGhpcy5zaXRlSWQpLCB0aGlzLnVzZXJJZCwgZGV2aWNlVHlwZSEpO1xyXG4gICAgfVxyXG4gICAgZm9ya0pvaW4oe1xyXG4gICAgICBkZXZpY2U6IHJlcXVlc3QsXHJcbiAgICAgIHNvZnRLZXlzOiB0aGlzLnNpdGVTZXR0aW5nc1NlcnZpY2UuZ2V0RGV2aWNlU29mdGtleVRlbXBsYXRlcyhOdW1iZXIodGhpcy5zaXRlSWQpKSxcclxuICAgICAgc2l0ZURlZmF1bHRzOiB0aGlzLnNpdGVTZXR0aW5nc1NlcnZpY2UuZ2V0U2l0ZURlZmF1bHRzKE51bWJlcih0aGlzLnNpdGVJZCkpLFxyXG4gICAgfSlcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiB0aGlzLmRhdGFQZW5kaW5nID0gZmFsc2UpKVxyXG4gICAgICAuc3Vic2NyaWJlKCh7ZGV2aWNlLCBzb2Z0S2V5c30pID0+IHtcclxuICAgICAgICB0aGlzLmRldmljZSA9IGRldmljZTtcclxuICAgICAgICB0aGlzLnNvZnRLZXlzID0gKHNvZnRLZXlzIGFzIHN0cmluZ1tdKSB8fCBbXTtcclxuICAgICAgICB0aGlzLnBsYXJTZXJ2aWNlLnNldFZhbHVlKCEhdGhpcy5kZXZpY2U/LnBsYXJTZXJ2aWNlLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xyXG4gICAgICAgIHRoaXMuZGVzY3JpcHRpb24uc2V0VmFsdWUodGhpcy5kZXZpY2U/LmRlc2NyaXB0aW9uIHx8ICcnLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xyXG4gICAgICAgIHRoaXMuc29mdGtleVRlbXBsYXRlLnNldFZhbHVlKHRoaXMuZGV2aWNlPy5zb2Z0a2V5VGVtcGxhdGUgfHwgJycsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XHJcbiAgICAgICAgdGhpcy5kZXZpY2VQb29sLnNldFZhbHVlKHRoaXMuZGV2aWNlPy5kZXZpY2VQb29sTmFtZSB8fCAnJywge2VtaXRFdmVudDogZmFsc2V9KTtcclxuICAgICAgICB0aGlzLmRldmljZUNzcy5zZXRWYWx1ZSh0aGlzLmRldmljZT8uY2FsbGluZ1NlYXJjaFNwYWNlTmFtZSB8fCAnJywge2VtaXRFdmVudDogZmFsc2V9KTtcclxuICAgICAgICB0aGlzLmVuYWJsZUV4dGVuc2lvbk1vYmlsaXR5LnNldFZhbHVlKCEhdGhpcy5kZXZpY2U/LmVuYWJsZWRFeHRlbnNpb25Nb2JpbGl0eSwge2VtaXRFdmVudDogZmFsc2V9KTtcclxuICAgICAgICB0aGlzLmxvZ2dlZEludG9IdW50R3JvdXAuc2V0VmFsdWUoISF0aGlzLmRldmljZT8ubG9nZ2VkSW50b0h1bnRHcm91cCwge2VtaXRFdmVudDogZmFsc2V9KTtcclxuICAgICAgdGhpcy5yZW1vdGVEZXZpY2Uuc2V0VmFsdWUoISF0aGlzLmRldmljZT8ucmVtb3RlRGV2aWNlLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xyXG4gICAgICB0aGlzLmhvdGxpbmVEZXZpY2Uuc2V0VmFsdWUoISF0aGlzLmRldmljZT8uaG90bGluZURldmljZSwge2VtaXRFdmVudDogZmFsc2V9KTtcclxuICAgICAgdGhpcy5pZ25vcmVQcmVzZW50YXRpb25JbmRpY2F0b3JzLnNldFZhbHVlKCEhdGhpcy5kZXZpY2U/Lmlnbm9yZVByZXNlbnRhdGlvbkluZGljYXRvcnMsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XHJcbiAgICAgIHRoaXMuY2FsbGVySWRGb3JDYWxsc0Zyb21UaGlzUGhvbmUuc2V0VmFsdWUoISF0aGlzLmRldmljZT8udXNlRGV2aWNlUG9vbENncG5JbmdyZXNzRE4sIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XHJcbiAgICAgIHRoaXMucmVtb3RlTnVtYmVyLnNldFZhbHVlKCEhdGhpcy5kZXZpY2U/LnJlbW90ZURldmljZSwge2VtaXRFdmVudDogZmFsc2V9KTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFNpdGVTZXR0aW5ncygpOiB2b2lkIHtcclxuICAgIHRoaXMuZGF0YVBlbmRpbmcgPSB0cnVlO1xyXG4gICAgZm9ya0pvaW4oe1xyXG4gICAgICBzb2Z0S2V5czogdGhpcy5zaXRlU2V0dGluZ3NTZXJ2aWNlLmdldERldmljZVNvZnRrZXlUZW1wbGF0ZXMoTnVtYmVyKHRoaXMuc2l0ZUlkKSksXHJcbiAgICAgIHNpdGVEZWZhdWx0czogdGhpcy5zaXRlU2V0dGluZ3NTZXJ2aWNlLmdldFNpdGVEZWZhdWx0cyhOdW1iZXIodGhpcy5zaXRlSWQpKSxcclxuICAgIH0pXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gdGhpcy5kYXRhUGVuZGluZyA9IGZhbHNlKSlcclxuICAgICAgLnN1YnNjcmliZSgoe3NvZnRLZXlzfSkgPT4gdGhpcy5zb2Z0S2V5cyA9IChzb2Z0S2V5cyBhcyBzdHJpbmdbXSkgfHwgW10pO1xyXG4gIH1cclxuXHJcbiAgb25Hb0JhY2soKTogdm9pZCB7XHJcbiAgICBjb25zdCBbcGF0aF0gPSB0aGlzLnJvdXRlci51cmwuc3BsaXQoJz8nKTtcclxuICAgIGNvbnN0IHNlZ21lbnRzID0gcGF0aC5zcGxpdCgnLycpLmZpbHRlcihCb29sZWFuKTtcclxuICAgIGlmIChzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXSA9PT0gJ2RldmljZS1zZXR0aW5ncycpIHtcclxuICAgICAgc2VnbWVudHMucG9wKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvJyArIHNlZ21lbnRzLmpvaW4oJy8nKSk7XHJcbiAgICAvLyB0aGlzLmdvQmFjay5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBvbkNhbmNlbCgpOiB2b2lkIHtcclxuICAgIHRoaXMub25Hb0JhY2soKTtcclxuICB9XHJcblxyXG4gIG9uU2F2ZSgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5oYXNDaGFuZ2VzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBib2R5ID0gdGhpcy5nZXRDaGFuZ2VkRGV2aWNlRmllbGRzKCk7XHJcbiAgICBpZiAoIWJvZHkubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuaGFzQ2hhbmdlcyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLm9uR29CYWNrKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRhdGFQZW5kaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuZGV2aWNlU2VydmljZS5wdXREZXZpY2VGaWVsZHMoTnVtYmVyKHRoaXMuc2l0ZUlkKSwgdGhpcy5kZXZpY2U/Lm5hbWUgfHwgJycsIHRoaXMudXNlclNlcnZpY2UudXNlclRva2VuLCBib2R5KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy51c2VyU2VydmljZS5wZXJzaXN0VXNlckNhY2hlKCkpLFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcclxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmRhdGFQZW5kaW5nID0gZmFsc2UpLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaGFzQ2hhbmdlcyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMub25Hb0JhY2soKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENoYW5nZWREZXZpY2VGaWVsZHMoKTogc3RyaW5nW10ge1xyXG4gICAgY29uc3QgZmllbGRzTWFwOiBBcnJheTxbRm9ybUNvbnRyb2w8YW55Piwgc3RyaW5nLCBhbnldPiA9IFtcclxuICAgICAgW3RoaXMucGxhclNlcnZpY2UsICdwbGFyU2VydmljZScsICEhdGhpcy5kZXZpY2U/LnBsYXJTZXJ2aWNlXSxcclxuICAgICAgW3RoaXMuZGVzY3JpcHRpb24sICdkZXNjcmlwdGlvbicsIHRoaXMuZGV2aWNlPy5kZXNjcmlwdGlvbiB8fCAnJ10sXHJcbiAgICAgIFt0aGlzLnNvZnRrZXlUZW1wbGF0ZSwgJ3NvZnRrZXlUZW1wbGF0ZScsIHRoaXMuZGV2aWNlPy5zb2Z0a2V5VGVtcGxhdGUgfHwgJyddLFxyXG4gICAgICBbdGhpcy5kZXZpY2VQb29sLCAnZGV2aWNlUG9vbE5hbWUnLCB0aGlzLmRldmljZT8uZGV2aWNlUG9vbE5hbWUgfHwgJyddLFxyXG4gICAgICBbdGhpcy5kZXZpY2VDc3MsICdjYWxsaW5nU2VhcmNoU3BhY2VOYW1lJywgdGhpcy5kZXZpY2U/LmNhbGxpbmdTZWFyY2hTcGFjZU5hbWUgfHwgJyddLFxyXG4gICAgICBbdGhpcy5lbmFibGVFeHRlbnNpb25Nb2JpbGl0eSwgJ2VuYWJsZWRFeHRlbnNpb25Nb2JpbGl0eScsICEhdGhpcy5kZXZpY2U/LmVuYWJsZWRFeHRlbnNpb25Nb2JpbGl0eV0sXHJcbiAgICAgIFt0aGlzLmxvZ2dlZEludG9IdW50R3JvdXAsICdsb2dnZWRJbnRvSHVudEdyb3VwJywgISF0aGlzLmRldmljZT8ubG9nZ2VkSW50b0h1bnRHcm91cF0sXHJcbiAgICAgIFt0aGlzLnJlbW90ZURldmljZSwgJ3JlbW90ZURldmljZScsICEhdGhpcy5kZXZpY2U/LnJlbW90ZURldmljZV0sXHJcbiAgICAgIFt0aGlzLmlnbm9yZVByZXNlbnRhdGlvbkluZGljYXRvcnMsICdpZ25vcmVQcmVzZW50YXRpb25JbmRpY2F0b3JzJywgISF0aGlzLmRldmljZT8uaWdub3JlUHJlc2VudGF0aW9uSW5kaWNhdG9yc10sXHJcbiAgICAgIFt0aGlzLmhvdGxpbmVEZXZpY2UsICdob3RsaW5lRGV2aWNlJywgISF0aGlzLmRldmljZT8uaG90bGluZURldmljZV0sXHJcbiAgICAgIFt0aGlzLmNhbGxlcklkRm9yQ2FsbHNGcm9tVGhpc1Bob25lLCAndXNlRGV2aWNlUG9vbENncG5JbmdyZXNzRE4nLCAhIXRoaXMuZGV2aWNlPy51c2VEZXZpY2VQb29sQ2dwbkluZ3Jlc3NETl0sXHJcbiAgICBdO1xyXG5cclxuICAgIHJldHVybiBmaWVsZHNNYXBcclxuICAgICAgLmZpbHRlcigoW2NvbnRyb2wsICwgb3JpZ2luYWxWYWx1ZV0pID0+IGNvbnRyb2wudmFsdWUgIT09IG9yaWdpbmFsVmFsdWUpXHJcbiAgICAgIC5tYXAoKFtjb250cm9sLCBmaWVsZF0pID0+IGBkZXZpY2UuJHtmaWVsZH09JHtjb250cm9sLnZhbHVlfWApO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIiwiPGFwcC1sb2FkZXIgKm5nSWY9XCJkYXRhUGVuZGluZ1wiPjwvYXBwLWxvYWRlcj5cclxuPGRpdiBjbGFzcz1cImdvLWJhY2stYm94XCIgKGNsaWNrKT1cIm9uR29CYWNrKClcIj5cclxuICA8ZGl2IGNsYXNzPVwiZ28tYmFjay1ib3gtY29udGFpbmVyXCI+XHJcbiAgICA8c3BhbiBjbGFzcz1cImFwcC1pY29uIGljb24td2ViZXgtbGVmdC1hcnJvd1wiPjwvc3Bhbj5cclxuICAgIDxzcGFuIGNsYXNzPVwiZ28tYmFjay10aXRsZVwiPkRldmljZSBHZW5lcmFsIEluZm88L3NwYW4+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cImRldmljZS1zZXR0aW5nc1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJwYW5lbC1oZWFkZXJcIj5cclxuICAgIDxzcGFuIGNsYXNzPVwicGFuZWwtaGVhZGVyX190aXRsZVwiPkRldmljZSBTZXR0aW5nczwvc3Bhbj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cInBhbmVsLWJvZHlcIj5cclxuICAgIDxzZWN0aW9uIGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZVwiPkRldGFpbHM8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWFpbi1jb250ZW50XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbC1yb3dcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaWRlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWFpbi12YWx1ZVwiPnt7IGRldmljZT8ubmFtZSB8fCAnTi9BJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJleHRyYS1pbmZvXCI+TmFtZTwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNpZGVcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYWluLXZhbHVlXCI+e3sgZGV2aWNlPy5tb2RlbCB8fCAnTi9BJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJleHRyYS1pbmZvXCI+VHlwZTwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNpZGVcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYWluLXZhbHVlXCI+e3sgZGV2aWNlPy5kZXNjcmlwdGlvbiB8fCAnTi9BJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJleHRyYS1pbmZvXCI+RGV2aWNlIGRlc2NyaXB0aW9uPC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbC1yb3dcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaWRlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWFpbi12YWx1ZVwiPnt7IGxpbmVzIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImV4dHJhLWluZm9cIj5MaW5lPC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbC1yb3cgZmxleC1jb2x1bW5cIiBzdHlsZT1cImdhcDogMC41cmVtO1wiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRlc2NyaXB0aW9uXCI+UExBUiBzZXJ2aWNlPC9zcGFuPlxyXG4gICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9XCJjdXN0b20tdG9nZ2xlXCIgW2Zvcm1Db250cm9sXT1cInBsYXJTZXJ2aWNlXCI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvc2VjdGlvbj5cclxuXHJcbiAgICA8c2VjdGlvbiBjbGFzcz1cImNhcmQgdmVydGljYWwtY2FyZFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZVwiPkRldmljZSBpbmZvPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1haW4tY29udGVudFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLWJvdHRvbVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPlJlZ2lzdHJhdGlvbiBzdGF0dXM8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3BsYWluLXZhbHVlIHRleHQtZGVzY3JpcHRpb25cIj57eyBkZXZpY2U/LmZvcm0/LmdldCgncmVnaXN0cmF0aW9uU3RhdHVzJyk/LnZhbHVlIHx8ICdVbmtub3duJyB9fTwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5JUCBBZGRyZXNzPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19wbGFpbi12YWx1ZSB0ZXh0LWRlc2NyaXB0aW9uXCI+e3sgZGV2aWNlPy5pcEFkZHJlc3MgfHwgJ05vbmUnIH19PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkRlc2NyaXB0aW9uPC9kaXY+XHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbGFpbi1pbnB1dFwiIFtmb3JtQ29udHJvbF09XCJkZXNjcmlwdGlvblwiPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Qcm90b2NvbDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fcGxhaW4tdmFsdWUgdGV4dC1kZXNjcmlwdGlvblwiPlNJUDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Tb2Z0a2V5IHRlbXBsYXRlPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19zZWxlY3Qtd3JhcFwiPlxyXG4gICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19zZWxlY3RcIiBuYW1lPVwiY2x1c3RlclwiIFtmb3JtQ29udHJvbF09XCJzb2Z0a2V5VGVtcGxhdGVcIj5cclxuICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjbHVzdGVyIG9mIHNvZnRLZXlzXCIgW3ZhbHVlXT1cImNsdXN0ZXJcIj57eyBjbHVzdGVyIH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW5wdXQtaG9sZGVyX19zZWxlY3QtaWNvblwiIHNyYz1cImFzc2V0cy9pY29ucy9hcnJvdy1kb3duLWJvbGQuc3ZnXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+QnV0dG9uIHRlbXBsYXRlPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19wbGFpbi12YWx1ZSB0ZXh0LWRlc2NyaXB0aW9uXCI+U3RhbmRhcmQgODg1MSBTSVA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+TG9jYXRpb248L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3BsYWluLXZhbHVlIHRleHQtZGVzY3JpcHRpb25cIj5QYXJpc19pb3M8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+RGV2aWNlIHBvb2w8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3NlbGVjdC13cmFwXCI+XHJcbiAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3NlbGVjdFwiIG5hbWU9XCJkZXZpY2VQb29sXCIgW2Zvcm1Db250cm9sXT1cImRldmljZVBvb2xcIj5cclxuICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBwb29sIG9mIGRldmljZVBvb2xzXCIgW3ZhbHVlXT1cInBvb2xcIj57eyBwb29sIH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW5wdXQtaG9sZGVyX19zZWxlY3QtaWNvblwiIHNyYz1cImFzc2V0cy9pY29ucy9hcnJvdy1kb3duLWJvbGQuc3ZnXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+RGV2aWNlIENTUzwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fc2VsZWN0LXdyYXBcIj5cclxuICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImlucHV0LWhvbGRlcl9fc2VsZWN0XCIgbmFtZT1cImRldmljZUNzc1wiIFtmb3JtQ29udHJvbF09XCJkZXZpY2VDc3NcIj5cclxuICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjc3Mgb2YgY3NzT3B0aW9uc1wiIFt2YWx1ZV09XCJjc3NcIj57eyBjc3MgfX08L29wdGlvbj5cclxuICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3NlbGVjdC1pY29uXCIgc3JjPVwiYXNzZXRzL2ljb25zL2Fycm93LWRvd24tYm9sZC5zdmdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5GaXJtd2FyZSB2ZXJzaW9uPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19wbGFpbi12YWx1ZSB0ZXh0LWRlc2NyaXB0aW9uXCI+e3sgZGV2aWNlPy5zb2Z0d2FyZVZlcnNpb24gfHwgJ1Vua25vd24nIH19PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9zZWN0aW9uPlxyXG5cclxuICAgIDxzZWN0aW9uIGNsYXNzPVwiY2FyZCB2ZXJ0aWNhbC1jYXJkXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCI+TWVkaWEgU2V0dGluZ3M8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWFpbi1jb250ZW50XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItYm90dG9tXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+TWVkaWEgUmVzb3VyY2UgR3JvdXAgTGlzdDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fcGxhaW4tdmFsdWUgdGV4dC1kZXNjcmlwdGlvblwiPk5vbmU8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+TmV0d29yayBIb2xkIE1PSCBBdWRpbyBTb3VyY2U8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3BsYWluLXZhbHVlIHRleHQtZGVzY3JpcHRpb25cIj5Ob25lPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPlVzZXIgSG9sZCBNT0ggQXVkaW8gU291cmNlPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19wbGFpbi12YWx1ZSB0ZXh0LWRlc2NyaXB0aW9uXCI+Tm9uZTwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvc2VjdGlvbj5cclxuXHJcbiAgICA8c2VjdGlvbiBjbGFzcz1cImNhcmQgdmVydGljYWwtY2FyZFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZVwiPkFBUiBTZXR0aW5nczwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci1ib3R0b21cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5BQVIgQ2FsbGluZyBTZWFyY2ggU3BhY2U8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3BsYWluLXZhbHVlIHRleHQtZGVzY3JpcHRpb25cIj5Ob25lPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkFBUiBHcm91cDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fcGxhaW4tdmFsdWUgdGV4dC1kZXNjcmlwdGlvblwiPk5vbmU8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L3NlY3Rpb24+XHJcblxyXG4gICAgPHNlY3Rpb24gY2xhc3M9XCJjYXJkIHZlcnRpY2FsLWNhcmRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImhlYWRlclwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGl0bGVcIj5EZXZpY2UgQWRkaXRpb25hbCBJbmZvcm1hdGlvbjwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci1ib3R0b21cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Db21tb24gUGhvbmUgUHJvZmlsZTwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fcGxhaW4tdmFsdWUgdGV4dC1kZXNjcmlwdGlvblwiPlN0YW5kYXJkIENvbW1vbiBQaG9uZSBQcm9maWxlPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPlVzZXIgTG9jYWxlPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19wbGFpbi12YWx1ZSB0ZXh0LWRlc2NyaXB0aW9uXCI+Tm9uZTwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5FbmFibGUgRXh0ZW5zaW9uIE1vYmlsaXR5PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19pbnB1dFwiPlxyXG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz1cImN1c3RvbS10b2dnbGVcIiBbZm9ybUNvbnRyb2xdPVwiZW5hYmxlRXh0ZW5zaW9uTW9iaWxpdHlcIj48L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+UHJpdmFjeTwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fcGxhaW4tdmFsdWUgdGV4dC1kZXNjcmlwdGlvblwiPkRlZmF1bHQ8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+TW9iaWxpdHkgdXNlciBJRDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fcGxhaW4tdmFsdWUgdGV4dC1kZXNjcmlwdGlvblwiPkFkYW0uQWxsZW48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+QWx3YXlzIFVzZSBQcmltZSBMaW5lPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19wbGFpbi12YWx1ZSB0ZXh0LWRlc2NyaXB0aW9uXCI+RGVmYXVsdDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5HZW9sb2NhdGlvbjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fcGxhaW4tdmFsdWUgdGV4dC1kZXNjcmlwdGlvblwiPiZuYnNwOzwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Mb2dnZWQgSW50byBIdW50IEdyb3VwPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19pbnB1dFwiPlxyXG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz1cImN1c3RvbS10b2dnbGVcIiBbZm9ybUNvbnRyb2xdPVwibG9nZ2VkSW50b0h1bnRHcm91cFwiPjwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5SZW1vdGUgRGV2aWNlPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19pbnB1dFwiPlxyXG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz1cImN1c3RvbS10b2dnbGVcIiBbZm9ybUNvbnRyb2xdPVwicmVtb3RlRGV2aWNlXCI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPlBob25lIFNlY3VyaXR5IFByb2ZpbGU8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3BsYWluLXZhbHVlIHRleHQtZGVzY3JpcHRpb25cIj5DaXNjbyBEdWFsIE1vZGUgZm9yIGlQaG9uZSAtIFN0YW5kYXJkIFNJUCBOb24tU2VjdXJlIFByb2ZpbGU8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+TmV0d29yayBMb2NhbGU8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3BsYWluLXZhbHVlIHRleHQtZGVzY3JpcHRpb25cIj5DaGluYTwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5CdWlsdCBJbiBCcmlkZ2U8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3BsYWluLXZhbHVlIHRleHQtZGVzY3JpcHRpb25cIj5EZWZhdWx0PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkRldmljZSBNb2JpbGl0eSBNb2RlPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19wbGFpbi12YWx1ZSB0ZXh0LWRlc2NyaXB0aW9uXCI+RGVmYXVsdDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Vc2UgVHJ1c3RlZCBSZWxheSBQb2ludDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fcGxhaW4tdmFsdWUgdGV4dC1kZXNjcmlwdGlvblwiPkRlZmF1bHQ8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+QWx3YXlzIFVzZSBQcmltZSBMaW5lIGZvciBWb2ljZSBNZXNzYWdlPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19wbGFpbi12YWx1ZSB0ZXh0LWRlc2NyaXB0aW9uXCI+RGVmYXVsdDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5JZ25vcmUgUHJlc2VudGF0aW9uIEluZGljYXRvcnMoIGludGVybmFsIGNhbGxzIG9ubHkgKTwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9faW5wdXRcIj5cclxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9XCJjdXN0b20tdG9nZ2xlXCIgW2Zvcm1Db250cm9sXT1cImlnbm9yZVByZXNlbnRhdGlvbkluZGljYXRvcnNcIj48L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3BcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Ib3QgbGluZSBEZXZpY2U8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2lucHV0XCI+XHJcbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPVwiY3VzdG9tLXRvZ2dsZVwiIFtmb3JtQ29udHJvbF09XCJob3RsaW5lRGV2aWNlXCI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9zZWN0aW9uPlxyXG5cclxuICAgIDxzZWN0aW9uIGNsYXNzPVwiY2FyZCB2ZXJ0aWNhbC1jYXJkXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCI+TnVtYmVyIFByZXNlbnRhdGlvbiBUcmFuc2Zvcm1hdGlvbjwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci1ib3R0b21cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5cclxuICAgICAgICAgICAgQ2FsbGVyIElEIEZvciBDYWxscyBGcm9tIFRoaXMgUGhvbmVcclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uIGluZm8taWNvbiByZW0xXCIgW21hdFRvb2x0aXBdPVwiJ0NvbnRyb2xzIGhvdyB0aGUgY2FsbGVyIElEIGlzIHByZXNlbnRlZCBmb3IgY2FsbHMgcGxhY2VkIGZyb20gdGhpcyBwaG9uZS4nXCI+PC9pPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19pbnB1dFwiPlxyXG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz1cImN1c3RvbS10b2dnbGVcIiBbZm9ybUNvbnRyb2xdPVwiY2FsbGVySWRGb3JDYWxsc0Zyb21UaGlzUGhvbmVcIj48L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3BcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5cclxuICAgICAgICAgICAgUmVtb3RlIE51bWJlclxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImljb24gaW5mby1pY29uIHJlbTFcIiBbbWF0VG9vbHRpcF09XCInQ29udHJvbHMgaG93IHRoZSByZW1vdGUgbnVtYmVyIGlzIHByZXNlbnRlZCBmb3IgdGhpcyBwaG9uZS4nXCI+PC9pPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19pbnB1dFwiPlxyXG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz1cImN1c3RvbS10b2dnbGVcIiBbZm9ybUNvbnRyb2xdPVwicmVtb3RlTnVtYmVyXCI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9zZWN0aW9uPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwic2V0dGluZ3MtZm9vdGVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2V0dGluZ3MtZm9vdGVyX19hY3Rpb25zXCI+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLW91dGxpbmVcIiAoY2xpY2spPVwib25DYW5jZWwoKVwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1maWxsZWRcIiBbZGlzYWJsZWRdPVwiIWhhc0NoYW5nZXNcIiAoY2xpY2spPVwib25TYXZlKClcIj5TYXZlPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|