@tuki-io/tuki-widgets 0.0.219-dev.54 → 0.0.219-dev.56

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.
Files changed (86) hide show
  1. package/contact-center/cc-import/cc-import.module.d.ts +13 -0
  2. package/contact-center/cc-import/cc-import.service.d.ts +85 -0
  3. package/contact-center/cc-import/components/import-contact-center-panel/import-contact-center-panel.component.d.ts +56 -0
  4. package/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.component.d.ts +77 -0
  5. package/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.types.d.ts +3 -0
  6. package/contact-center/cc-import/constants/cc-import.constants.d.ts +37 -0
  7. package/contact-center/cc-import/mock/cc-import.mock.d.ts +4 -0
  8. package/contact-center/cc-import/types/cc-import.d.ts +73 -0
  9. package/contact-center/cc-import/types/uccx.d.ts +109 -0
  10. package/contact-center/cc-readiness/cc-readiness.module.d.ts +3 -3
  11. package/contact-center/public-api.d.ts +8 -0
  12. package/contact-center/shared/api.endpoints.d.ts +25 -0
  13. package/contact-center/shared/api.service.d.ts +3 -1
  14. package/contact-center/shared/components/card/card.component.d.ts +13 -0
  15. package/contact-center/shared/dcp-api.service.d.ts +15 -0
  16. package/contact-center/shared/shared.module.d.ts +11 -5
  17. package/esm2020/contact-center/cc-import/cc-import.module.mjs +45 -0
  18. package/esm2020/contact-center/cc-import/cc-import.service.mjs +228 -0
  19. package/esm2020/contact-center/cc-import/components/import-contact-center-panel/import-contact-center-panel.component.mjs +144 -0
  20. package/esm2020/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.component.mjs +243 -0
  21. package/esm2020/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.types.mjs +3 -0
  22. package/esm2020/contact-center/cc-import/constants/cc-import.constants.mjs +62 -0
  23. package/esm2020/contact-center/cc-import/mock/cc-import.mock.mjs +78 -0
  24. package/esm2020/contact-center/cc-import/types/cc-import.mjs +2 -0
  25. package/esm2020/contact-center/cc-import/types/uccx.mjs +24 -0
  26. package/esm2020/contact-center/cc-readiness/cc-readiness.module.mjs +7 -6
  27. package/esm2020/contact-center/cc-readiness/widgets/licences-requirement/licences-requirement.component.mjs +5 -5
  28. package/esm2020/contact-center/cc-readiness/widgets/summary-grid/summary-grid.component.mjs +2 -2
  29. package/esm2020/contact-center/public-api.mjs +9 -1
  30. package/esm2020/contact-center/shared/api.endpoints.mjs +26 -1
  31. package/esm2020/contact-center/shared/api.service.mjs +8 -3
  32. package/esm2020/contact-center/shared/components/card/card.component.mjs +24 -0
  33. package/esm2020/contact-center/shared/dcp-api.service.mjs +26 -0
  34. package/esm2020/contact-center/shared/shared.module.mjs +15 -5
  35. package/esm2020/user-device-manage/public-api.mjs +4 -1
  36. package/esm2020/user-device-manage/src/app.constants.mjs +9 -3
  37. package/esm2020/user-device-manage/src/associate-lines/associate-lines.component.mjs +311 -0
  38. package/esm2020/user-device-manage/src/classes/device.mjs +1 -1
  39. package/esm2020/user-device-manage/src/classes/deviceProfile.mjs +1 -1
  40. package/esm2020/user-device-manage/src/confirm-dialog/info-dialog.component.mjs +2 -2
  41. package/esm2020/user-device-manage/src/device-manage-widget.component.mjs +34 -17
  42. package/esm2020/user-device-manage/src/device-settings/device-settings.component.mjs +207 -0
  43. package/esm2020/user-device-manage/src/line-key-config/line-key-config.component.mjs +401 -0
  44. package/esm2020/user-device-manage/src/services/device.service.mjs +32 -2
  45. package/esm2020/user-device-manage/src/services/user.service.mjs +34 -6
  46. package/esm2020/user-device-manage/src/user-device-manage.module.mjs +19 -4
  47. package/esm2020/workspaces/src/components/workspace-detail/workspace-detail.component.mjs +17 -4
  48. package/esm2020/workspaces/src/components/workspace-device-detail/workspace-device-detail.component.mjs +66 -0
  49. package/esm2020/workspaces/src/components/workspaces-table/workspaces-table.component.mjs +6 -3
  50. package/esm2020/workspaces/src/services/workspace-detail.service.mjs +43 -1
  51. package/esm2020/workspaces/src/services/workspaces.service.mjs +2 -1
  52. package/esm2020/workspaces/src/types/workspace.mjs +1 -1
  53. package/esm2020/workspaces/src/workspaces.module.mjs +4 -1
  54. package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs +998 -127
  55. package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
  56. package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs +1018 -40
  57. package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
  58. package/fesm2015/tuki-io-tuki-widgets-workspaces.mjs +142 -16
  59. package/fesm2015/tuki-io-tuki-widgets-workspaces.mjs.map +1 -1
  60. package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs +989 -127
  61. package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
  62. package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs +1001 -39
  63. package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
  64. package/fesm2020/tuki-io-tuki-widgets-workspaces.mjs +133 -16
  65. package/fesm2020/tuki-io-tuki-widgets-workspaces.mjs.map +1 -1
  66. package/package.json +1 -1
  67. package/user-device-manage/public-api.d.ts +3 -0
  68. package/user-device-manage/src/app.constants.d.ts +6 -0
  69. package/user-device-manage/src/associate-lines/associate-lines.component.d.ts +95 -0
  70. package/user-device-manage/src/classes/device.d.ts +15 -0
  71. package/user-device-manage/src/classes/deviceProfile.d.ts +5 -0
  72. package/user-device-manage/src/device-associated-line/device-associated-line.component.d.ts +1 -0
  73. package/user-device-manage/src/device-manage-widget.component.d.ts +6 -1
  74. package/user-device-manage/src/device-settings/device-settings.component.d.ts +53 -0
  75. package/user-device-manage/src/line-key-config/line-key-config.component.d.ts +84 -0
  76. package/user-device-manage/src/services/device.service.d.ts +6 -1
  77. package/user-device-manage/src/services/user.service.d.ts +2 -1
  78. package/user-device-manage/src/user-device-manage.module.d.ts +10 -7
  79. package/workspaces/src/components/workspace-detail/workspace-detail.component.d.ts +6 -1
  80. package/workspaces/src/components/workspace-device-detail/workspace-device-detail.component.d.ts +25 -0
  81. package/workspaces/src/components/workspaces-table/workspaces-table.component.d.ts +1 -0
  82. package/workspaces/src/services/workspace-detail.service.d.ts +2 -0
  83. package/workspaces/src/types/workspace.d.ts +19 -0
  84. package/workspaces/src/workspaces.module.d.ts +8 -7
  85. package/contact-center/cc-readiness/components/card/card.component.d.ts +0 -6
  86. package/esm2020/contact-center/cc-readiness/components/card/card.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>\n<div class=\"go-back-box\" (click)=\"onGoBack()\">\n <div class=\"go-back-box-container\">\n <span class=\"app-icon icon-webex-left-arrow\"></span>\n <span class=\"go-back-title\">Device General Info</span>\n </div>\n</div>\n\n<div class=\"device-settings\">\n <div class=\"panel-header\">\n <span class=\"panel-header__title\">Device Settings</span>\n </div>\n\n <div class=\"panel-body\">\n <section class=\"card\">\n <div class=\"header\">\n <span class=\"title\">Details</span>\n </div>\n <div class=\"main-content\">\n <div class=\"detail-row\">\n <div class=\"side\">\n <span class=\"main-value\">{{ device?.name || 'N/A' }}</span>\n <span class=\"extra-info\">Name</span>\n </div>\n <div class=\"side\">\n <span class=\"main-value\">{{ device?.model || 'N/A' }}</span>\n <span class=\"extra-info\">Type</span>\n </div>\n <div class=\"side\">\n <span class=\"main-value\">{{ device?.description || 'N/A' }}</span>\n <span class=\"extra-info\">Device description</span>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"detail-row\">\n <div class=\"side\">\n <span class=\"main-value\">{{ lines }}</span>\n <span class=\"extra-info\">Line</span>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"detail-row flex-column\" style=\"gap: 0.5rem;\">\n <span class=\"text-description\">PLAR service</span>\n <mat-slide-toggle class=\"custom-toggle\" [formControl]=\"plarService\"></mat-slide-toggle>\n </div>\n </div>\n </section>\n\n <section class=\"card vertical-card\">\n <div class=\"header\">\n <span class=\"title\">Device info</span>\n </div>\n <div class=\"main-content\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">Registration status</div>\n <div class=\"input-holder__plain-value text-description\">{{ device?.form?.get('registrationStatus')?.value || 'Unknown' }}</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">IP Address</div>\n <div class=\"input-holder__plain-value text-description\">{{ device?.ipAddress || 'None' }}</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Description</div>\n <input class=\"plain-input\" [formControl]=\"description\">\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Protocol</div>\n <div class=\"input-holder__plain-value text-description\">SIP</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Softkey template</div>\n <div class=\"input-holder__select-wrap\">\n <select class=\"input-holder__select\" name=\"cluster\" [formControl]=\"softkeyTemplate\">\n <option *ngFor=\"let cluster of softKeys\" [value]=\"cluster\">{{ cluster }}</option>\n </select>\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Button template</div>\n <div class=\"input-holder__plain-value text-description\">Standard 8851 SIP</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Location</div>\n <div class=\"input-holder__plain-value text-description\">Paris_ios</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Device pool</div>\n <div class=\"input-holder__select-wrap\">\n <select class=\"input-holder__select\" name=\"devicePool\" [formControl]=\"devicePool\">\n <option *ngFor=\"let pool of devicePools\" [value]=\"pool\">{{ pool }}</option>\n </select>\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Device CSS</div>\n <div class=\"input-holder__select-wrap\">\n <select class=\"input-holder__select\" name=\"deviceCss\" [formControl]=\"deviceCss\">\n <option *ngFor=\"let css of cssOptions\" [value]=\"css\">{{ css }}</option>\n </select>\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\n </div>\n </div>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Firmware version</div>\n <div class=\"input-holder__plain-value text-description\">{{ device?.softwareVersion || 'Unknown' }}</div>\n </div>\n </div>\n </section>\n\n <section class=\"card vertical-card\">\n <div class=\"header\">\n <span class=\"title\">Media Settings</span>\n </div>\n <div class=\"main-content\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">Media Resource Group List</div>\n <div class=\"input-holder__plain-value text-description\">None</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Network Hold MOH Audio Source</div>\n <div class=\"input-holder__plain-value text-description\">None</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">User Hold MOH Audio Source</div>\n <div class=\"input-holder__plain-value text-description\">None</div>\n </div>\n </div>\n </section>\n\n <section class=\"card vertical-card\">\n <div class=\"header\">\n <span class=\"title\">AAR Settings</span>\n </div>\n <div class=\"main-content\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">AAR Calling Search Space</div>\n <div class=\"input-holder__plain-value text-description\">None</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">AAR Group</div>\n <div class=\"input-holder__plain-value text-description\">None</div>\n </div>\n <mat-divider></mat-divider>\n </div>\n </section>\n\n <section class=\"card vertical-card\">\n <div class=\"header\">\n <span class=\"title\">Device Additional Information</span>\n </div>\n <div class=\"main-content\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">Common Phone Profile</div>\n <div class=\"input-holder__plain-value text-description\">Standard Common Phone Profile</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">User Locale</div>\n <div class=\"input-holder__plain-value text-description\">None</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Enable Extension Mobility</div>\n <div class=\"input-holder__input\">\n <mat-slide-toggle class=\"custom-toggle\" [formControl]=\"enableExtensionMobility\"></mat-slide-toggle>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Privacy</div>\n <div class=\"input-holder__plain-value text-description\">Default</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Mobility user ID</div>\n <div class=\"input-holder__plain-value text-description\">Adam.Allen</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Always Use Prime Line</div>\n <div class=\"input-holder__plain-value text-description\">Default</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Geolocation</div>\n <div class=\"input-holder__plain-value text-description\">&nbsp;</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Logged Into Hunt Group</div>\n <div class=\"input-holder__input\">\n <mat-slide-toggle class=\"custom-toggle\" [formControl]=\"loggedIntoHuntGroup\"></mat-slide-toggle>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Remote Device</div>\n <div class=\"input-holder__input\">\n <mat-slide-toggle class=\"custom-toggle\" [formControl]=\"remoteDevice\"></mat-slide-toggle>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Phone Security Profile</div>\n <div class=\"input-holder__plain-value text-description\">Cisco Dual Mode for iPhone - Standard SIP Non-Secure Profile</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Network Locale</div>\n <div class=\"input-holder__plain-value text-description\">China</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Built In Bridge</div>\n <div class=\"input-holder__plain-value text-description\">Default</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Device Mobility Mode</div>\n <div class=\"input-holder__plain-value text-description\">Default</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Use Trusted Relay Point</div>\n <div class=\"input-holder__plain-value text-description\">Default</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Always Use Prime Line for Voice Message</div>\n <div class=\"input-holder__plain-value text-description\">Default</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Ignore Presentation Indicators( internal calls only )</div>\n <div class=\"input-holder__input\">\n <mat-slide-toggle class=\"custom-toggle\" [formControl]=\"ignorePresentationIndicators\"></mat-slide-toggle>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top\">\n <div class=\"input-holder__name\">Hot line Device</div>\n <div class=\"input-holder__input\">\n <mat-slide-toggle class=\"custom-toggle\" [formControl]=\"hotlineDevice\"></mat-slide-toggle>\n </div>\n </div>\n </div>\n </section>\n\n <section class=\"card vertical-card\">\n <div class=\"header\">\n <span class=\"title\">Number Presentation Transformation</span>\n </div>\n <div class=\"main-content\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">\n Caller ID For Calls From This Phone\n <i class=\"icon info-icon rem1\" [matTooltip]=\"'Controls how the caller ID is presented for calls placed from this phone.'\"></i>\n </div>\n <div class=\"input-holder__input\">\n <mat-slide-toggle class=\"custom-toggle\" [formControl]=\"callerIdForCallsFromThisPhone\"></mat-slide-toggle>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top\">\n <div class=\"input-holder__name\">\n Remote Number\n <i class=\"icon info-icon rem1\" [matTooltip]=\"'Controls how the remote number is presented for this phone.'\"></i>\n </div>\n <div class=\"input-holder__input\">\n <mat-slide-toggle class=\"custom-toggle\" [formControl]=\"remoteNumber\"></mat-slide-toggle>\n </div>\n </div>\n </div>\n </section>\n </div>\n\n <div class=\"settings-footer\">\n <div class=\"settings-footer__actions\">\n <button type=\"button\" class=\"btn-outline\" (click)=\"onCancel()\">Cancel</button>\n <button type=\"button\" class=\"btn-filled\" [disabled]=\"!hasChanges\" (click)=\"onSave()\">Save</button>\n </div>\n </div>\n</div>\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%3Cg id%3D%22arrow-left%22%3E%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%3C%2Fg%3E%3C%2Fsvg%3E\")}.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>\n<div class=\"go-back-box\" (click)=\"onGoBack()\">\n <div class=\"go-back-box-container\">\n <span class=\"app-icon icon-webex-left-arrow\"></span>\n <span class=\"go-back-title\">Device General Info</span>\n </div>\n</div>\n\n<div class=\"device-settings\">\n <div class=\"panel-header\">\n <span class=\"panel-header__title\">Device Settings</span>\n </div>\n\n <div class=\"panel-body\">\n <section class=\"card\">\n <div class=\"header\">\n <span class=\"title\">Details</span>\n </div>\n <div class=\"main-content\">\n <div class=\"detail-row\">\n <div class=\"side\">\n <span class=\"main-value\">{{ device?.name || 'N/A' }}</span>\n <span class=\"extra-info\">Name</span>\n </div>\n <div class=\"side\">\n <span class=\"main-value\">{{ device?.model || 'N/A' }}</span>\n <span class=\"extra-info\">Type</span>\n </div>\n <div class=\"side\">\n <span class=\"main-value\">{{ device?.description || 'N/A' }}</span>\n <span class=\"extra-info\">Device description</span>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"detail-row\">\n <div class=\"side\">\n <span class=\"main-value\">{{ lines }}</span>\n <span class=\"extra-info\">Line</span>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"detail-row flex-column\" style=\"gap: 0.5rem;\">\n <span class=\"text-description\">PLAR service</span>\n <mat-slide-toggle class=\"custom-toggle\" [formControl]=\"plarService\"></mat-slide-toggle>\n </div>\n </div>\n </section>\n\n <section class=\"card vertical-card\">\n <div class=\"header\">\n <span class=\"title\">Device info</span>\n </div>\n <div class=\"main-content\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">Registration status</div>\n <div class=\"input-holder__plain-value text-description\">{{ device?.form?.get('registrationStatus')?.value || 'Unknown' }}</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">IP Address</div>\n <div class=\"input-holder__plain-value text-description\">{{ device?.ipAddress || 'None' }}</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Description</div>\n <input class=\"plain-input\" [formControl]=\"description\">\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Protocol</div>\n <div class=\"input-holder__plain-value text-description\">SIP</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Softkey template</div>\n <div class=\"input-holder__select-wrap\">\n <select class=\"input-holder__select\" name=\"cluster\" [formControl]=\"softkeyTemplate\">\n <option *ngFor=\"let cluster of softKeys\" [value]=\"cluster\">{{ cluster }}</option>\n </select>\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Button template</div>\n <div class=\"input-holder__plain-value text-description\">Standard 8851 SIP</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Location</div>\n <div class=\"input-holder__plain-value text-description\">Paris_ios</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Device pool</div>\n <div class=\"input-holder__select-wrap\">\n <select class=\"input-holder__select\" name=\"devicePool\" [formControl]=\"devicePool\">\n <option *ngFor=\"let pool of devicePools\" [value]=\"pool\">{{ pool }}</option>\n </select>\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Device CSS</div>\n <div class=\"input-holder__select-wrap\">\n <select class=\"input-holder__select\" name=\"deviceCss\" [formControl]=\"deviceCss\">\n <option *ngFor=\"let css of cssOptions\" [value]=\"css\">{{ css }}</option>\n </select>\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\n </div>\n </div>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Firmware version</div>\n <div class=\"input-holder__plain-value text-description\">{{ device?.softwareVersion || 'Unknown' }}</div>\n </div>\n </div>\n </section>\n\n <section class=\"card vertical-card\">\n <div class=\"header\">\n <span class=\"title\">Media Settings</span>\n </div>\n <div class=\"main-content\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">Media Resource Group List</div>\n <div class=\"input-holder__plain-value text-description\">None</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Network Hold MOH Audio Source</div>\n <div class=\"input-holder__plain-value text-description\">None</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">User Hold MOH Audio Source</div>\n <div class=\"input-holder__plain-value text-description\">None</div>\n </div>\n </div>\n </section>\n\n <section class=\"card vertical-card\">\n <div class=\"header\">\n <span class=\"title\">AAR Settings</span>\n </div>\n <div class=\"main-content\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">AAR Calling Search Space</div>\n <div class=\"input-holder__plain-value text-description\">None</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">AAR Group</div>\n <div class=\"input-holder__plain-value text-description\">None</div>\n </div>\n <mat-divider></mat-divider>\n </div>\n </section>\n\n <section class=\"card vertical-card\">\n <div class=\"header\">\n <span class=\"title\">Device Additional Information</span>\n </div>\n <div class=\"main-content\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">Common Phone Profile</div>\n <div class=\"input-holder__plain-value text-description\">Standard Common Phone Profile</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">User Locale</div>\n <div class=\"input-holder__plain-value text-description\">None</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Enable Extension Mobility</div>\n <div class=\"input-holder__input\">\n <mat-slide-toggle class=\"custom-toggle\" [formControl]=\"enableExtensionMobility\"></mat-slide-toggle>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Privacy</div>\n <div class=\"input-holder__plain-value text-description\">Default</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Mobility user ID</div>\n <div class=\"input-holder__plain-value text-description\">Adam.Allen</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Always Use Prime Line</div>\n <div class=\"input-holder__plain-value text-description\">Default</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Geolocation</div>\n <div class=\"input-holder__plain-value text-description\">&nbsp;</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Logged Into Hunt Group</div>\n <div class=\"input-holder__input\">\n <mat-slide-toggle class=\"custom-toggle\" [formControl]=\"loggedIntoHuntGroup\"></mat-slide-toggle>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Remote Device</div>\n <div class=\"input-holder__input\">\n <mat-slide-toggle class=\"custom-toggle\" [formControl]=\"remoteDevice\"></mat-slide-toggle>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Phone Security Profile</div>\n <div class=\"input-holder__plain-value text-description\">Cisco Dual Mode for iPhone - Standard SIP Non-Secure Profile</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Network Locale</div>\n <div class=\"input-holder__plain-value text-description\">China</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Built In Bridge</div>\n <div class=\"input-holder__plain-value text-description\">Default</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Device Mobility Mode</div>\n <div class=\"input-holder__plain-value text-description\">Default</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Use Trusted Relay Point</div>\n <div class=\"input-holder__plain-value text-description\">Default</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Always Use Prime Line for Voice Message</div>\n <div class=\"input-holder__plain-value text-description\">Default</div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Ignore Presentation Indicators( internal calls only )</div>\n <div class=\"input-holder__input\">\n <mat-slide-toggle class=\"custom-toggle\" [formControl]=\"ignorePresentationIndicators\"></mat-slide-toggle>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top\">\n <div class=\"input-holder__name\">Hot line Device</div>\n <div class=\"input-holder__input\">\n <mat-slide-toggle class=\"custom-toggle\" [formControl]=\"hotlineDevice\"></mat-slide-toggle>\n </div>\n </div>\n </div>\n </section>\n\n <section class=\"card vertical-card\">\n <div class=\"header\">\n <span class=\"title\">Number Presentation Transformation</span>\n </div>\n <div class=\"main-content\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">\n Caller ID For Calls From This Phone\n <i class=\"icon info-icon rem1\" [matTooltip]=\"'Controls how the caller ID is presented for calls placed from this phone.'\"></i>\n </div>\n <div class=\"input-holder__input\">\n <mat-slide-toggle class=\"custom-toggle\" [formControl]=\"callerIdForCallsFromThisPhone\"></mat-slide-toggle>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top\">\n <div class=\"input-holder__name\">\n Remote Number\n <i class=\"icon info-icon rem1\" [matTooltip]=\"'Controls how the remote number is presented for this phone.'\"></i>\n </div>\n <div class=\"input-holder__input\">\n <mat-slide-toggle class=\"custom-toggle\" [formControl]=\"remoteNumber\"></mat-slide-toggle>\n </div>\n </div>\n </div>\n </section>\n </div>\n\n <div class=\"settings-footer\">\n <div class=\"settings-footer__actions\">\n <button type=\"button\" class=\"btn-outline\" (click)=\"onCancel()\">Cancel</button>\n <button type=\"button\" class=\"btn-filled\" [disabled]=\"!hasChanges\" (click)=\"onSave()\">Save</button>\n </div>\n </div>\n</div>\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%3Cg id%3D%22arrow-left%22%3E%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%3C%2Fg%3E%3C%2Fsvg%3E\")}.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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LENBQUMsT0FBTyxFQUFFLEFBQUQsRUFBRyxhQUFhLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxhQUFhLENBQUM7YUFDdkUsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsS0FBSyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7O3FIQTFNVSx1QkFBdUI7eUdBQXZCLHVCQUF1QixrTUNkcEMsNjJiQXdTQTs0RkQxUmEsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLHFCQUFxQjs4TUFLckIsTUFBTTtzQkFBZixNQUFNO2dCQUNFLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBmaW5hbGl6ZSwgZm9ya0pvaW4sIFN1YmplY3QsIHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3VzZXIuc2VydmljZSc7XG5pbXBvcnQgeyBBUElTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGV2aWNlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2RldmljZS5zZXJ2aWNlJztcbmltcG9ydCB7IFNpdGVTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zaXRlLXNldHRpbmdzLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZGV2aWNlLXNldHRpbmdzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RldmljZS1zZXR0aW5ncy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RldmljZS1zZXR0aW5ncy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBEZXZpY2VTZXR0aW5nc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQE91dHB1dCgpIGdvQmFjayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQElucHV0KCkgdG9rZW4hOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGhvc3QhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNpdGVJZCE6IHN0cmluZztcbiAgQElucHV0KCkgdXNlcklkITogc3RyaW5nO1xuICBASW5wdXQoKSBkZXZpY2VOYW1lITogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwdWJsaWMgZGF0YVBlbmRpbmcgPSBmYWxzZTtcbiAgcHVibGljIGRldmljZTogYW55ID0gbnVsbDtcbiAgcHVibGljIHNvZnRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHB1YmxpYyByZWFkb25seSBwbGFyU2VydmljZSA9IG5ldyBGb3JtQ29udHJvbChmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbiA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XG4gIHB1YmxpYyByZWFkb25seSBzb2Z0a2V5VGVtcGxhdGUgPSBuZXcgRm9ybUNvbnRyb2woJ1N0YW5kYXJkIHVzZXInKTtcbiAgcHVibGljIHJlYWRvbmx5IGRldmljZVBvb2wgPSBuZXcgRm9ybUNvbnRyb2woJ1BhcmlzX3JlZ3VsYXJfRFBfdGVzdCcpO1xuICBwdWJsaWMgcmVhZG9ubHkgZGV2aWNlQ3NzID0gbmV3IEZvcm1Db250cm9sKCdQYXJpc19uYXRpb25hbF9DU1MnKTtcbiAgcHVibGljIHJlYWRvbmx5IGVuYWJsZUV4dGVuc2lvbk1vYmlsaXR5ID0gbmV3IEZvcm1Db250cm9sKHRydWUpO1xuICBwdWJsaWMgcmVhZG9ubHkgbG9nZ2VkSW50b0h1bnRHcm91cCA9IG5ldyBGb3JtQ29udHJvbChmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSByZW1vdGVEZXZpY2UgPSBuZXcgRm9ybUNvbnRyb2woZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgaWdub3JlUHJlc2VudGF0aW9uSW5kaWNhdG9ycyA9IG5ldyBGb3JtQ29udHJvbChmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSBob3RsaW5lRGV2aWNlID0gbmV3IEZvcm1Db250cm9sKGZhbHNlKTtcbiAgcHVibGljIHJlYWRvbmx5IGNhbGxlcklkRm9yQ2FsbHNGcm9tVGhpc1Bob25lID0gbmV3IEZvcm1Db250cm9sKHRydWUpO1xuICBwdWJsaWMgcmVhZG9ubHkgcmVtb3RlTnVtYmVyID0gbmV3IEZvcm1Db250cm9sKHRydWUpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZm9ybUNvbnRyb2xzOiBGb3JtQ29udHJvbDxhbnk+W10gPSBbXG4gICAgdGhpcy5wbGFyU2VydmljZSxcbiAgICB0aGlzLmRlc2NyaXB0aW9uLFxuICAgIHRoaXMuc29mdGtleVRlbXBsYXRlLFxuICAgIHRoaXMuZGV2aWNlUG9vbCxcbiAgICB0aGlzLmRldmljZUNzcyxcbiAgICB0aGlzLmVuYWJsZUV4dGVuc2lvbk1vYmlsaXR5LFxuICAgIHRoaXMubG9nZ2VkSW50b0h1bnRHcm91cCxcbiAgICB0aGlzLnJlbW90ZURldmljZSxcbiAgICB0aGlzLmlnbm9yZVByZXNlbnRhdGlvbkluZGljYXRvcnMsXG4gICAgdGhpcy5ob3RsaW5lRGV2aWNlLFxuICAgIHRoaXMuY2FsbGVySWRGb3JDYWxsc0Zyb21UaGlzUGhvbmUsXG4gICAgdGhpcy5yZW1vdGVOdW1iZXIsXG4gIF07XG5cbiAgcHVibGljIGhhc0NoYW5nZXMgPSBmYWxzZTtcblxuICBnZXQgbGluZXMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kZXZpY2U/LmxpbmVzPy5tYXAoKGxpbmU6IGFueSkgPT4gbGluZT8uZXh0ZW5zaW9uIHx8IGxpbmU/Lm51bWJlcikuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyB8ICcpIHx8ICdOL0EnO1xuICB9XG5cbiAgZ2V0IGRldmljZVBvb2xzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5zaXRlU2V0dGluZ3NTZXJ2aWNlLmRldmljZVBvb2xzO1xuICB9XG5cbiAgZ2V0IGNzc09wdGlvbnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLnNpdGVTZXR0aW5nc1NlcnZpY2UuY2FsbGluZ1NlYXJjaFNwYWNlVHlwZXM7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBpU2VydmljZTogQVBJU2VydmljZSxcbiAgICBwcml2YXRlIGRldmljZVNlcnZpY2U6IERldmljZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzaXRlU2V0dGluZ3NTZXJ2aWNlOiBTaXRlU2V0dGluZ3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICkge1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5hcGlTZXJ2aWNlLnRva2VuID0gdGhpcy50b2tlbjtcbiAgICB0aGlzLmFwaVNlcnZpY2UuYXBpVXJsID0gdGhpcy5ob3N0O1xuXG4gICAgdGhpcy5mb3JtQ29udHJvbHMuZm9yRWFjaChjb250cm9sID0+IGNvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuaGFzQ2hhbmdlcyA9IHRydWUpKTtcblxuICAgIGlmICh0aGlzLnVzZXJTZXJ2aWNlLnVzZXJEZXZpY2UpIHtcbiAgICAgIHRoaXMuZGV2aWNlID0gdGhpcy51c2VyU2VydmljZS51c2VyRGV2aWNlO1xuICAgICAgdGhpcy5wbGFyU2VydmljZS5zZXRWYWx1ZSghIXRoaXMuZGV2aWNlPy5wbGFyU2VydmljZSwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgIHRoaXMuZGVzY3JpcHRpb24uc2V0VmFsdWUodGhpcy5kZXZpY2U/LmRlc2NyaXB0aW9uIHx8ICcnLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgdGhpcy5zb2Z0a2V5VGVtcGxhdGUuc2V0VmFsdWUodGhpcy5kZXZpY2U/LnNvZnRrZXlUZW1wbGF0ZSB8fCAnJywge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgIHRoaXMuZGV2aWNlUG9vbC5zZXRWYWx1ZSh0aGlzLmRldmljZT8uZGV2aWNlUG9vbE5hbWUgfHwgJycsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICB0aGlzLmRldmljZUNzcy5zZXRWYWx1ZSh0aGlzLmRldmljZT8uY2FsbGluZ1NlYXJjaFNwYWNlTmFtZSB8fCAnJywge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgIHRoaXMuZW5hYmxlRXh0ZW5zaW9uTW9iaWxpdHkuc2V0VmFsdWUoISF0aGlzLmRldmljZT8uZW5hYmxlZEV4dGVuc2lvbk1vYmlsaXR5LCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgdGhpcy5sb2dnZWRJbnRvSHVudEdyb3VwLnNldFZhbHVlKCEhdGhpcy5kZXZpY2U/LmxvZ2dlZEludG9IdW50R3JvdXAsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICB0aGlzLnJlbW90ZURldmljZS5zZXRWYWx1ZSghIXRoaXMuZGV2aWNlPy5yZW1vdGVEZXZpY2UsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICB0aGlzLmhvdGxpbmVEZXZpY2Uuc2V0VmFsdWUoISF0aGlzLmRldmljZT8uaG90bGluZURldmljZSwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgIHRoaXMuaWdub3JlUHJlc2VudGF0aW9uSW5kaWNhdG9ycy5zZXRWYWx1ZSghIXRoaXMuZGV2aWNlPy5pZ25vcmVQcmVzZW50YXRpb25JbmRpY2F0b3JzLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgdGhpcy5jYWxsZXJJZEZvckNhbGxzRnJvbVRoaXNQaG9uZS5zZXRWYWx1ZSghIXRoaXMuZGV2aWNlPy51c2VEZXZpY2VQb29sQ2dwbkluZ3Jlc3NETiwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgIHRoaXMucmVtb3RlTnVtYmVyLnNldFZhbHVlKCEhdGhpcy5kZXZpY2U/LnJlbW90ZURldmljZSwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgIHRoaXMuZ2V0U2l0ZVNldHRpbmdzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5nZXREYXRhKCk7XG4gIH1cblxuICBwcml2YXRlIGdldERhdGEoKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhUGVuZGluZyA9IHRydWU7XG4gICAgY29uc3QgZGV2aWNlVHlwZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdkZXZpY2VUeXBlJyk7XG4gICAgbGV0IHJlcXVlc3Q7XG4gICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdpc1dlYmV4JykgPT09ICd0cnVlJykge1xuICAgICAgY29uc3QgY3VzdG9tZXJJZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjdXN0b21lcklkJyk7XG4gICAgICBjb25zdCB3ZWJleElkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3dlYmV4VVVJRCcpO1xuICAgICAgcmVxdWVzdCA9IHRoaXMudXNlclNlcnZpY2UuZmV0Y2hXZWJleFVzZXJEZXZpY2UoY3VzdG9tZXJJZCEsIHdlYmV4SWQhLCBkZXZpY2VUeXBlISk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3QgPSB0aGlzLnVzZXJTZXJ2aWNlLmZldGNoRElVc2VyRGV2aWNlKE51bWJlcih0aGlzLnNpdGVJZCksIHRoaXMudXNlcklkLCBkZXZpY2VUeXBlISk7XG4gICAgfVxuICAgIGZvcmtKb2luKHtcbiAgICAgIGRldmljZTogcmVxdWVzdCxcbiAgICAgIHNvZnRLZXlzOiB0aGlzLnNpdGVTZXR0aW5nc1NlcnZpY2UuZ2V0RGV2aWNlU29mdGtleVRlbXBsYXRlcyhOdW1iZXIodGhpcy5zaXRlSWQpKSxcbiAgICAgIHNpdGVEZWZhdWx0czogdGhpcy5zaXRlU2V0dGluZ3NTZXJ2aWNlLmdldFNpdGVEZWZhdWx0cyhOdW1iZXIodGhpcy5zaXRlSWQpKSxcbiAgICB9KVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gdGhpcy5kYXRhUGVuZGluZyA9IGZhbHNlKSlcbiAgICAgIC5zdWJzY3JpYmUoKHtkZXZpY2UsIHNvZnRLZXlzfSkgPT4ge1xuICAgICAgICB0aGlzLmRldmljZSA9IGRldmljZTtcbiAgICAgICAgdGhpcy5zb2Z0S2V5cyA9IChzb2Z0S2V5cyBhcyBzdHJpbmdbXSkgfHwgW107XG4gICAgICAgIHRoaXMucGxhclNlcnZpY2Uuc2V0VmFsdWUoISF0aGlzLmRldmljZT8ucGxhclNlcnZpY2UsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICAgIHRoaXMuZGVzY3JpcHRpb24uc2V0VmFsdWUodGhpcy5kZXZpY2U/LmRlc2NyaXB0aW9uIHx8ICcnLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgICB0aGlzLnNvZnRrZXlUZW1wbGF0ZS5zZXRWYWx1ZSh0aGlzLmRldmljZT8uc29mdGtleVRlbXBsYXRlIHx8ICcnLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgICB0aGlzLmRldmljZVBvb2wuc2V0VmFsdWUodGhpcy5kZXZpY2U/LmRldmljZVBvb2xOYW1lIHx8ICcnLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgICB0aGlzLmRldmljZUNzcy5zZXRWYWx1ZSh0aGlzLmRldmljZT8uY2FsbGluZ1NlYXJjaFNwYWNlTmFtZSB8fCAnJywge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgICAgdGhpcy5lbmFibGVFeHRlbnNpb25Nb2JpbGl0eS5zZXRWYWx1ZSghIXRoaXMuZGV2aWNlPy5lbmFibGVkRXh0ZW5zaW9uTW9iaWxpdHksIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICAgIHRoaXMubG9nZ2VkSW50b0h1bnRHcm91cC5zZXRWYWx1ZSghIXRoaXMuZGV2aWNlPy5sb2dnZWRJbnRvSHVudEdyb3VwLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgdGhpcy5yZW1vdGVEZXZpY2Uuc2V0VmFsdWUoISF0aGlzLmRldmljZT8ucmVtb3RlRGV2aWNlLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgdGhpcy5ob3RsaW5lRGV2aWNlLnNldFZhbHVlKCEhdGhpcy5kZXZpY2U/LmhvdGxpbmVEZXZpY2UsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICB0aGlzLmlnbm9yZVByZXNlbnRhdGlvbkluZGljYXRvcnMuc2V0VmFsdWUoISF0aGlzLmRldmljZT8uaWdub3JlUHJlc2VudGF0aW9uSW5kaWNhdG9ycywge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgIHRoaXMuY2FsbGVySWRGb3JDYWxsc0Zyb21UaGlzUGhvbmUuc2V0VmFsdWUoISF0aGlzLmRldmljZT8udXNlRGV2aWNlUG9vbENncG5JbmdyZXNzRE4sIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICB0aGlzLnJlbW90ZU51bWJlci5zZXRWYWx1ZSghIXRoaXMuZGV2aWNlPy5yZW1vdGVEZXZpY2UsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2l0ZVNldHRpbmdzKCk6IHZvaWQge1xuICAgIHRoaXMuZGF0YVBlbmRpbmcgPSB0cnVlO1xuICAgIGZvcmtKb2luKHtcbiAgICAgIHNvZnRLZXlzOiB0aGlzLnNpdGVTZXR0aW5nc1NlcnZpY2UuZ2V0RGV2aWNlU29mdGtleVRlbXBsYXRlcyhOdW1iZXIodGhpcy5zaXRlSWQpKSxcbiAgICAgIHNpdGVEZWZhdWx0czogdGhpcy5zaXRlU2V0dGluZ3NTZXJ2aWNlLmdldFNpdGVEZWZhdWx0cyhOdW1iZXIodGhpcy5zaXRlSWQpKSxcbiAgICB9KVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gdGhpcy5kYXRhUGVuZGluZyA9IGZhbHNlKSlcbiAgICAgIC5zdWJzY3JpYmUoKHtzb2Z0S2V5c30pID0+IHRoaXMuc29mdEtleXMgPSAoc29mdEtleXMgYXMgc3RyaW5nW10pIHx8IFtdKTtcbiAgfVxuXG4gIG9uR29CYWNrKCk6IHZvaWQge1xuICAgIGNvbnN0IFtwYXRoXSA9IHRoaXMucm91dGVyLnVybC5zcGxpdCgnPycpO1xuICAgIGNvbnN0IHNlZ21lbnRzID0gcGF0aC5zcGxpdCgnLycpLmZpbHRlcihCb29sZWFuKTtcbiAgICBpZiAoc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMV0gPT09ICdkZXZpY2Utc2V0dGluZ3MnKSB7XG4gICAgICBzZWdtZW50cy5wb3AoKTtcbiAgICB9XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnLycgKyBzZWdtZW50cy5qb2luKCcvJykpO1xuICAgIC8vIHRoaXMuZ29CYWNrLmVtaXQoKTtcbiAgfVxuXG4gIG9uQ2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMub25Hb0JhY2soKTtcbiAgfVxuXG4gIG9uU2F2ZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaGFzQ2hhbmdlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJvZHkgPSB0aGlzLmdldENoYW5nZWREZXZpY2VGaWVsZHMoKTtcbiAgICBpZiAoIWJvZHkubGVuZ3RoKSB7XG4gICAgICB0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTtcbiAgICAgIHRoaXMub25Hb0JhY2soKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGFQZW5kaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmRldmljZVNlcnZpY2UucHV0RGV2aWNlRmllbGRzKE51bWJlcih0aGlzLnNpdGVJZCksIHRoaXMuZGV2aWNlPy5uYW1lIHx8ICcnLCB0aGlzLnVzZXJTZXJ2aWNlLnVzZXJUb2tlbiwgYm9keSlcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy51c2VyU2VydmljZS5wZXJzaXN0VXNlckNhY2hlKCkpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMuZGF0YVBlbmRpbmcgPSBmYWxzZSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5oYXNDaGFuZ2VzID0gZmFsc2U7XG4gICAgICAgIHRoaXMub25Hb0JhY2soKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDaGFuZ2VkRGV2aWNlRmllbGRzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBmaWVsZHNNYXA6IEFycmF5PFtGb3JtQ29udHJvbDxhbnk+LCBzdHJpbmcsIGFueV0+ID0gW1xuICAgICAgW3RoaXMucGxhclNlcnZpY2UsICdwbGFyU2VydmljZScsICEhdGhpcy5kZXZpY2U/LnBsYXJTZXJ2aWNlXSxcbiAgICAgIFt0aGlzLmRlc2NyaXB0aW9uLCAnZGVzY3JpcHRpb24nLCB0aGlzLmRldmljZT8uZGVzY3JpcHRpb24gfHwgJyddLFxuICAgICAgW3RoaXMuc29mdGtleVRlbXBsYXRlLCAnc29mdGtleVRlbXBsYXRlJywgdGhpcy5kZXZpY2U/LnNvZnRrZXlUZW1wbGF0ZSB8fCAnJ10sXG4gICAgICBbdGhpcy5kZXZpY2VQb29sLCAnZGV2aWNlUG9vbE5hbWUnLCB0aGlzLmRldmljZT8uZGV2aWNlUG9vbE5hbWUgfHwgJyddLFxuICAgICAgW3RoaXMuZGV2aWNlQ3NzLCAnY2FsbGluZ1NlYXJjaFNwYWNlTmFtZScsIHRoaXMuZGV2aWNlPy5jYWxsaW5nU2VhcmNoU3BhY2VOYW1lIHx8ICcnXSxcbiAgICAgIFt0aGlzLmVuYWJsZUV4dGVuc2lvbk1vYmlsaXR5LCAnZW5hYmxlZEV4dGVuc2lvbk1vYmlsaXR5JywgISF0aGlzLmRldmljZT8uZW5hYmxlZEV4dGVuc2lvbk1vYmlsaXR5XSxcbiAgICAgIFt0aGlzLmxvZ2dlZEludG9IdW50R3JvdXAsICdsb2dnZWRJbnRvSHVudEdyb3VwJywgISF0aGlzLmRldmljZT8ubG9nZ2VkSW50b0h1bnRHcm91cF0sXG4gICAgICBbdGhpcy5yZW1vdGVEZXZpY2UsICdyZW1vdGVEZXZpY2UnLCAhIXRoaXMuZGV2aWNlPy5yZW1vdGVEZXZpY2VdLFxuICAgICAgW3RoaXMuaWdub3JlUHJlc2VudGF0aW9uSW5kaWNhdG9ycywgJ2lnbm9yZVByZXNlbnRhdGlvbkluZGljYXRvcnMnLCAhIXRoaXMuZGV2aWNlPy5pZ25vcmVQcmVzZW50YXRpb25JbmRpY2F0b3JzXSxcbiAgICAgIFt0aGlzLmhvdGxpbmVEZXZpY2UsICdob3RsaW5lRGV2aWNlJywgISF0aGlzLmRldmljZT8uaG90bGluZURldmljZV0sXG4gICAgICBbdGhpcy5jYWxsZXJJZEZvckNhbGxzRnJvbVRoaXNQaG9uZSwgJ3VzZURldmljZVBvb2xDZ3BuSW5ncmVzc0ROJywgISF0aGlzLmRldmljZT8udXNlRGV2aWNlUG9vbENncG5JbmdyZXNzRE5dLFxuICAgIF07XG5cbiAgICByZXR1cm4gZmllbGRzTWFwXG4gICAgICAuZmlsdGVyKChbY29udHJvbCwgLCBvcmlnaW5hbFZhbHVlXSkgPT4gY29udHJvbC52YWx1ZSAhPT0gb3JpZ2luYWxWYWx1ZSlcbiAgICAgIC5tYXAoKFtjb250cm9sLCBmaWVsZF0pID0+IGBkZXZpY2UuJHtmaWVsZH09JHtjb250cm9sLnZhbHVlfWApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG59XG4iLCI8YXBwLWxvYWRlciAqbmdJZj1cImRhdGFQZW5kaW5nXCI+PC9hcHAtbG9hZGVyPlxuPGRpdiBjbGFzcz1cImdvLWJhY2stYm94XCIgKGNsaWNrKT1cIm9uR29CYWNrKClcIj5cbiAgPGRpdiBjbGFzcz1cImdvLWJhY2stYm94LWNvbnRhaW5lclwiPlxuICAgIDxzcGFuIGNsYXNzPVwiYXBwLWljb24gaWNvbi13ZWJleC1sZWZ0LWFycm93XCI+PC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwiZ28tYmFjay10aXRsZVwiPkRldmljZSBHZW5lcmFsIEluZm88L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJkZXZpY2Utc2V0dGluZ3NcIj5cbiAgPGRpdiBjbGFzcz1cInBhbmVsLWhlYWRlclwiPlxuICAgIDxzcGFuIGNsYXNzPVwicGFuZWwtaGVhZGVyX190aXRsZVwiPkRldmljZSBTZXR0aW5nczwvc3Bhbj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInBhbmVsLWJvZHlcIj5cbiAgICA8c2VjdGlvbiBjbGFzcz1cImNhcmRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZVwiPkRldGFpbHM8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbC1yb3dcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2lkZVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYWluLXZhbHVlXCI+e3sgZGV2aWNlPy5uYW1lIHx8ICdOL0EnIH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJleHRyYS1pbmZvXCI+TmFtZTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2lkZVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYWluLXZhbHVlXCI+e3sgZGV2aWNlPy5tb2RlbCB8fCAnTi9BJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXh0cmEtaW5mb1wiPlR5cGU8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNpZGVcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWFpbi12YWx1ZVwiPnt7IGRldmljZT8uZGVzY3JpcHRpb24gfHwgJ04vQScgfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImV4dHJhLWluZm9cIj5EZXZpY2UgZGVzY3JpcHRpb248L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbC1yb3dcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2lkZVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYWluLXZhbHVlXCI+e3sgbGluZXMgfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImV4dHJhLWluZm9cIj5MaW5lPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWwtcm93IGZsZXgtY29sdW1uXCIgc3R5bGU9XCJnYXA6IDAuNXJlbTtcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGVzY3JpcHRpb25cIj5QTEFSIHNlcnZpY2U8L3NwYW4+XG4gICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9XCJjdXN0b20tdG9nZ2xlXCIgW2Zvcm1Db250cm9sXT1cInBsYXJTZXJ2aWNlXCI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvc2VjdGlvbj5cblxuICAgIDxzZWN0aW9uIGNsYXNzPVwiY2FyZCB2ZXJ0aWNhbC1jYXJkXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGl0bGVcIj5EZXZpY2UgaW5mbzwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm1haW4tY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci1ib3R0b21cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+UmVnaXN0cmF0aW9uIHN0YXR1czwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3BsYWluLXZhbHVlIHRleHQtZGVzY3JpcHRpb25cIj57eyBkZXZpY2U/LmZvcm0/LmdldCgncmVnaXN0cmF0aW9uU3RhdHVzJyk/LnZhbHVlIHx8ICdVbmtub3duJyB9fTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+SVAgQWRkcmVzczwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3BsYWluLXZhbHVlIHRleHQtZGVzY3JpcHRpb25cIj57eyBkZXZpY2U/LmlwQWRkcmVzcyB8fCAnTm9uZScgfX08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkRlc2NyaXB0aW9uPC9kaXY+XG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiBbZm9ybUNvbnRyb2xdPVwiZGVzY3JpcHRpb25cIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPlByb3RvY29sPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fcGxhaW4tdmFsdWUgdGV4dC1kZXNjcmlwdGlvblwiPlNJUDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+U29mdGtleSB0ZW1wbGF0ZTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3NlbGVjdC13cmFwXCI+XG4gICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19zZWxlY3RcIiBuYW1lPVwiY2x1c3RlclwiIFtmb3JtQ29udHJvbF09XCJzb2Z0a2V5VGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgY2x1c3RlciBvZiBzb2Z0S2V5c1wiIFt2YWx1ZV09XCJjbHVzdGVyXCI+e3sgY2x1c3RlciB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW5wdXQtaG9sZGVyX19zZWxlY3QtaWNvblwiIHNyYz1cImFzc2V0cy9pY29ucy9hcnJvdy1kb3duLWJvbGQuc3ZnXCIgYWx0PVwiXCI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5CdXR0b24gdGVtcGxhdGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19wbGFpbi12YWx1ZSB0ZXh0LWRlc2NyaXB0aW9uXCI+U3RhbmRhcmQgODg1MSBTSVA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkxvY2F0aW9uPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fcGxhaW4tdmFsdWUgdGV4dC1kZXNjcmlwdGlvblwiPlBhcmlzX2lvczwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+RGV2aWNlIHBvb2w8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19zZWxlY3Qtd3JhcFwiPlxuICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImlucHV0LWhvbGRlcl9fc2VsZWN0XCIgbmFtZT1cImRldmljZVBvb2xcIiBbZm9ybUNvbnRyb2xdPVwiZGV2aWNlUG9vbFwiPlxuICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBwb29sIG9mIGRldmljZVBvb2xzXCIgW3ZhbHVlXT1cInBvb2xcIj57eyBwb29sIH19PC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3NlbGVjdC1pY29uXCIgc3JjPVwiYXNzZXRzL2ljb25zL2Fycm93LWRvd24tYm9sZC5zdmdcIiBhbHQ9XCJcIj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkRldmljZSBDU1M8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19zZWxlY3Qtd3JhcFwiPlxuICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImlucHV0LWhvbGRlcl9fc2VsZWN0XCIgbmFtZT1cImRldmljZUNzc1wiIFtmb3JtQ29udHJvbF09XCJkZXZpY2VDc3NcIj5cbiAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgY3NzIG9mIGNzc09wdGlvbnNcIiBbdmFsdWVdPVwiY3NzXCI+e3sgY3NzIH19PC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3NlbGVjdC1pY29uXCIgc3JjPVwiYXNzZXRzL2ljb25zL2Fycm93LWRvd24tYm9sZC5zdmdcIiBhbHQ9XCJcIj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+RmlybXdhcmUgdmVyc2lvbjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3BsYWluLXZhbHVlIHRleHQtZGVzY3JpcHRpb25cIj57eyBkZXZpY2U/LnNvZnR3YXJlVmVyc2lvbiB8fCAnVW5rbm93bicgfX08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG5cbiAgICA8c2VjdGlvbiBjbGFzcz1cImNhcmQgdmVydGljYWwtY2FyZFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImhlYWRlclwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCI+TWVkaWEgU2V0dGluZ3M8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItYm90dG9tXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPk1lZGlhIFJlc291cmNlIEdyb3VwIExpc3Q8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19wbGFpbi12YWx1ZSB0ZXh0LWRlc2NyaXB0aW9uXCI+Tm9uZTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+TmV0d29yayBIb2xkIE1PSCBBdWRpbyBTb3VyY2U8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19wbGFpbi12YWx1ZSB0ZXh0LWRlc2NyaXB0aW9uXCI+Tm9uZTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+VXNlciBIb2xkIE1PSCBBdWRpbyBTb3VyY2U8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19wbGFpbi12YWx1ZSB0ZXh0LWRlc2NyaXB0aW9uXCI+Tm9uZTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvc2VjdGlvbj5cblxuICAgIDxzZWN0aW9uIGNsYXNzPVwiY2FyZCB2ZXJ0aWNhbC1jYXJkXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGl0bGVcIj5BQVIgU2V0dGluZ3M8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItYm90dG9tXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkFBUiBDYWxsaW5nIFNlYXJjaCBTcGFjZTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3BsYWluLXZhbHVlIHRleHQtZGVzY3JpcHRpb25cIj5Ob25lPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5BQVIgR3JvdXA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19wbGFpbi12YWx1ZSB0ZXh0LWRlc2NyaXB0aW9uXCI+Tm9uZTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG5cbiAgICA8c2VjdGlvbiBjbGFzcz1cImNhcmQgdmVydGljYWwtY2FyZFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImhlYWRlclwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCI+RGV2aWNlIEFkZGl0aW9uYWwgSW5mb3JtYXRpb248L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItYm90dG9tXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkNvbW1vbiBQaG9uZSBQcm9maWxlPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fcGxhaW4tdmFsdWUgdGV4dC1kZXNjcmlwdGlvblwiPlN0YW5kYXJkIENvbW1vbiBQaG9uZSBQcm9maWxlPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Vc2VyIExvY2FsZTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3BsYWluLXZhbHVlIHRleHQtZGVzY3JpcHRpb25cIj5Ob25lPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5FbmFibGUgRXh0ZW5zaW9uIE1vYmlsaXR5PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9faW5wdXRcIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPVwiY3VzdG9tLXRvZ2dsZVwiIFtmb3JtQ29udHJvbF09XCJlbmFibGVFeHRlbnNpb25Nb2JpbGl0eVwiPjwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPlByaXZhY3k8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19wbGFpbi12YWx1ZSB0ZXh0LWRlc2NyaXB0aW9uXCI+RGVmYXVsdDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+TW9iaWxpdHkgdXNlciBJRDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3BsYWluLXZhbHVlIHRleHQtZGVzY3JpcHRpb25cIj5BZGFtLkFsbGVuPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5BbHdheXMgVXNlIFByaW1lIExpbmU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19wbGFpbi12YWx1ZSB0ZXh0LWRlc2NyaXB0aW9uXCI+RGVmYXVsdDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+R2VvbG9jYXRpb248L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19wbGFpbi12YWx1ZSB0ZXh0LWRlc2NyaXB0aW9uXCI+Jm5ic3A7PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Mb2dnZWQgSW50byBIdW50IEdyb3VwPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9faW5wdXRcIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPVwiY3VzdG9tLXRvZ2dsZVwiIFtmb3JtQ29udHJvbF09XCJsb2dnZWRJbnRvSHVudEdyb3VwXCI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+UmVtb3RlIERldmljZTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2lucHV0XCI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz1cImN1c3RvbS10b2dnbGVcIiBbZm9ybUNvbnRyb2xdPVwicmVtb3RlRGV2aWNlXCI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+UGhvbmUgU2VjdXJpdHkgUHJvZmlsZTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3BsYWluLXZhbHVlIHRleHQtZGVzY3JpcHRpb25cIj5DaXNjbyBEdWFsIE1vZGUgZm9yIGlQaG9uZSAtIFN0YW5kYXJkIFNJUCBOb24tU2VjdXJlIFByb2ZpbGU8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPk5ldHdvcmsgTG9jYWxlPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fcGxhaW4tdmFsdWUgdGV4dC1kZXNjcmlwdGlvblwiPkNoaW5hPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5CdWlsdCBJbiBCcmlkZ2U8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19wbGFpbi12YWx1ZSB0ZXh0LWRlc2NyaXB0aW9uXCI+RGVmYXVsdDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+RGV2aWNlIE1vYmlsaXR5IE1vZGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19wbGFpbi12YWx1ZSB0ZXh0LWRlc2NyaXB0aW9uXCI+RGVmYXVsdDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+VXNlIFRydXN0ZWQgUmVsYXkgUG9pbnQ8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19wbGFpbi12YWx1ZSB0ZXh0LWRlc2NyaXB0aW9uXCI+RGVmYXVsdDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+QWx3YXlzIFVzZSBQcmltZSBMaW5lIGZvciBWb2ljZSBNZXNzYWdlPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fcGxhaW4tdmFsdWUgdGV4dC1kZXNjcmlwdGlvblwiPkRlZmF1bHQ8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPklnbm9yZSBQcmVzZW50YXRpb24gSW5kaWNhdG9ycyggaW50ZXJuYWwgY2FsbHMgb25seSApPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9faW5wdXRcIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPVwiY3VzdG9tLXRvZ2dsZVwiIFtmb3JtQ29udHJvbF09XCJpZ25vcmVQcmVzZW50YXRpb25JbmRpY2F0b3JzXCI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Ib3QgbGluZSBEZXZpY2U8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19pbnB1dFwiPlxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9XCJjdXN0b20tdG9nZ2xlXCIgW2Zvcm1Db250cm9sXT1cImhvdGxpbmVEZXZpY2VcIj48L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9zZWN0aW9uPlxuXG4gICAgPHNlY3Rpb24gY2xhc3M9XCJjYXJkIHZlcnRpY2FsLWNhcmRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZVwiPk51bWJlciBQcmVzZW50YXRpb24gVHJhbnNmb3JtYXRpb248L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItYm90dG9tXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPlxuICAgICAgICAgICAgQ2FsbGVyIElEIEZvciBDYWxscyBGcm9tIFRoaXMgUGhvbmVcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbiBpbmZvLWljb24gcmVtMVwiIFttYXRUb29sdGlwXT1cIidDb250cm9scyBob3cgdGhlIGNhbGxlciBJRCBpcyBwcmVzZW50ZWQgZm9yIGNhbGxzIHBsYWNlZCBmcm9tIHRoaXMgcGhvbmUuJ1wiPjwvaT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19pbnB1dFwiPlxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9XCJjdXN0b20tdG9nZ2xlXCIgW2Zvcm1Db250cm9sXT1cImNhbGxlcklkRm9yQ2FsbHNGcm9tVGhpc1Bob25lXCI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5cbiAgICAgICAgICAgIFJlbW90ZSBOdW1iZXJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbiBpbmZvLWljb24gcmVtMVwiIFttYXRUb29sdGlwXT1cIidDb250cm9scyBob3cgdGhlIHJlbW90ZSBudW1iZXIgaXMgcHJlc2VudGVkIGZvciB0aGlzIHBob25lLidcIj48L2k+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9faW5wdXRcIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPVwiY3VzdG9tLXRvZ2dsZVwiIFtmb3JtQ29udHJvbF09XCJyZW1vdGVOdW1iZXJcIj48L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9zZWN0aW9uPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwic2V0dGluZ3MtZm9vdGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cInNldHRpbmdzLWZvb3Rlcl9fYWN0aW9uc1wiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tb3V0bGluZVwiIChjbGljayk9XCJvbkNhbmNlbCgpXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1maWxsZWRcIiBbZGlzYWJsZWRdPVwiIWhhc0NoYW5nZXNcIiAoY2xpY2spPVwib25TYXZlKClcIj5TYXZlPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=