@c8y/ngx-components 1011.0.19 → 1011.0.22

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 (49) hide show
  1. package/assets-navigator/asset-node.service.d.ts +7 -3
  2. package/assets-navigator/c8y-ngx-components-assets-navigator.metadata.json +1 -1
  3. package/bundles/c8y-ngx-components-assets-navigator.umd.js +7 -2
  4. package/bundles/c8y-ngx-components-assets-navigator.umd.js.map +1 -1
  5. package/bundles/c8y-ngx-components-assets-navigator.umd.min.js +1 -1
  6. package/bundles/c8y-ngx-components-assets-navigator.umd.min.js.map +1 -1
  7. package/bundles/c8y-ngx-components-child-devices.umd.js +416 -0
  8. package/bundles/c8y-ngx-components-child-devices.umd.js.map +1 -0
  9. package/bundles/c8y-ngx-components-child-devices.umd.min.js +16 -0
  10. package/bundles/c8y-ngx-components-child-devices.umd.min.js.map +1 -0
  11. package/bundles/c8y-ngx-components-device-grid.umd.js +169 -36
  12. package/bundles/c8y-ngx-components-device-grid.umd.js.map +1 -1
  13. package/bundles/c8y-ngx-components-device-grid.umd.min.js +2 -2
  14. package/bundles/c8y-ngx-components-device-grid.umd.min.js.map +1 -1
  15. package/bundles/c8y-ngx-components-sub-assets.umd.js +5 -3
  16. package/bundles/c8y-ngx-components-sub-assets.umd.js.map +1 -1
  17. package/bundles/c8y-ngx-components-sub-assets.umd.min.js +1 -1
  18. package/bundles/c8y-ngx-components-sub-assets.umd.min.js.map +1 -1
  19. package/child-devices/c8y-ngx-components-child-devices.d.ts +5 -0
  20. package/child-devices/c8y-ngx-components-child-devices.metadata.json +1 -0
  21. package/child-devices/child-devices.component.d.ts +9 -0
  22. package/child-devices/child-devices.guard.d.ts +7 -0
  23. package/child-devices/child-devices.module.d.ts +2 -0
  24. package/child-devices/index.d.ts +2 -0
  25. package/child-devices/package.json +11 -0
  26. package/device-grid/c8y-ngx-components-device-grid.metadata.json +1 -1
  27. package/device-grid/device-grid.component.d.ts +18 -4
  28. package/device-grid/device-grid.service.d.ts +8 -3
  29. package/esm2015/assets-navigator/asset-node.service.js +8 -3
  30. package/esm2015/child-devices/c8y-ngx-components-child-devices.js +6 -0
  31. package/esm2015/child-devices/child-devices.component.js +30 -0
  32. package/esm2015/child-devices/child-devices.guard.js +30 -0
  33. package/esm2015/child-devices/child-devices.module.js +36 -0
  34. package/esm2015/child-devices/index.js +3 -0
  35. package/esm2015/device-grid/device-grid.component.js +62 -15
  36. package/esm2015/device-grid/device-grid.service.js +59 -22
  37. package/esm2015/sub-assets/sub-assets.service.js +7 -5
  38. package/fesm2015/c8y-ngx-components-assets-navigator.js +7 -2
  39. package/fesm2015/c8y-ngx-components-assets-navigator.js.map +1 -1
  40. package/fesm2015/c8y-ngx-components-child-devices.js +96 -0
  41. package/fesm2015/c8y-ngx-components-child-devices.js.map +1 -0
  42. package/fesm2015/c8y-ngx-components-device-grid.js +118 -35
  43. package/fesm2015/c8y-ngx-components-device-grid.js.map +1 -1
  44. package/fesm2015/c8y-ngx-components-sub-assets.js +6 -4
  45. package/fesm2015/c8y-ngx-components-sub-assets.js.map +1 -1
  46. package/locales/locales.pot +6 -0
  47. package/package.json +2 -2
  48. package/sub-assets/c8y-ngx-components-sub-assets.metadata.json +1 -1
  49. package/sub-assets/sub-assets.service.d.ts +3 -2
@@ -1,6 +1,6 @@
1
1
  import { __awaiter } from "tslib";
2
2
  import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
3
- import { DataGridComponent, FilteringActionType, gettext } from '@c8y/ngx-components';
3
+ import { DataGridComponent, FilteringActionType, gettext, } from '@c8y/ngx-components';
4
4
  import { DeviceGridService } from './device-grid.service';
5
5
  export class DeviceGridComponent {
6
6
  constructor(deviceGridService) {
@@ -10,14 +10,20 @@ export class DeviceGridComponent {
10
10
  this.loadingItemsLabel = gettext('Loading devices…');
11
11
  this.selectable = false;
12
12
  this.baseQuery = {};
13
- this.showChildDevices = {};
13
+ this.childDeviceGrid = false;
14
+ /**
15
+ * Determines if additional "Show child devices" toggle should be shown and in what state it should be.
16
+ * @deprecated It's going to be replaced with a generic hook allowing to easily add custom actions in the grid header.
17
+ */
18
+ this.showChildDevices = { show: false, value: false };
19
+ /** Emits an event when columns configuration changes. */
14
20
  this.onColumnsChange = new EventEmitter();
15
21
  this.onDeviceQueryStringChange = new EventEmitter();
16
22
  this.itemsSelect = new EventEmitter();
17
23
  this.onChildDevices = new EventEmitter();
24
+ this.actionControls = [];
18
25
  this.columns = this.deviceGridService.getDefaultColumns();
19
26
  this.pagination = this.deviceGridService.getDefaultPagination();
20
- this.actionControls = this.deviceGridService.getDefaultActionControls();
21
27
  this.bulkActionControls = this.deviceGridService.getDefaultBulkActionControls();
22
28
  this.withChildren = false;
23
29
  this.serverSideDataCallback = this.onDataSourceModifier.bind(this);
@@ -58,30 +64,69 @@ export class DeviceGridComponent {
58
64
  this.bulkActionControls = this.deviceGridService.getDefaultBulkActionControls();
59
65
  }
60
66
  }
67
+ ngOnInit() {
68
+ this.setActionControls();
69
+ }
61
70
  trackByName(_index, column) {
62
71
  return column.name;
63
72
  }
64
73
  onDataSourceModifier(dataSourceModifier) {
65
74
  return __awaiter(this, void 0, void 0, function* () {
66
75
  let serverSideDataResult;
67
- const { res, data, paging } = yield this.deviceGridService.getData(dataSourceModifier.columns, dataSourceModifier.pagination, this.baseQuery, this.withChildren);
68
- const filteredSize = yield this.deviceGridService.getCount(dataSourceModifier.columns, dataSourceModifier.pagination, this.baseQuery);
69
- const size = yield this.deviceGridService.getTotal(this.baseQuery);
76
+ let filteredSize;
77
+ let size;
78
+ if (this.childDeviceGrid) {
79
+ const { res, data, paging } = yield this.deviceGridService.getChildDeviceData(dataSourceModifier.columns, dataSourceModifier.pagination, this.baseQuery, this.withChildren, this.parentDeviceId);
80
+ filteredSize = yield this.deviceGridService.getCountChildDevices(dataSourceModifier.columns, dataSourceModifier.pagination, this.baseQuery, this.parentDeviceId);
81
+ size = yield this.deviceGridService.getTotalChildDevices(this.baseQuery, this.parentDeviceId);
82
+ serverSideDataResult = {
83
+ res,
84
+ data,
85
+ paging,
86
+ filteredSize,
87
+ size,
88
+ };
89
+ }
90
+ else {
91
+ const { res, data, paging } = yield this.deviceGridService.getData(dataSourceModifier.columns, dataSourceModifier.pagination, this.baseQuery, this.withChildren);
92
+ filteredSize = yield this.deviceGridService.getCount(dataSourceModifier.columns, dataSourceModifier.pagination, this.baseQuery);
93
+ size = yield this.deviceGridService.getTotal(this.baseQuery);
94
+ serverSideDataResult = {
95
+ res,
96
+ data,
97
+ paging,
98
+ filteredSize,
99
+ size,
100
+ };
101
+ }
70
102
  this.onColumnsChange.emit(dataSourceModifier.columns);
71
103
  this.onDeviceQueryStringChange.emit(this.deviceGridService.getDeviceQueryString(dataSourceModifier.columns, this.baseQuery));
72
- serverSideDataResult = {
73
- res,
74
- data,
75
- paging,
76
- filteredSize,
77
- size
78
- };
79
104
  if (this.dataCallback) {
80
105
  serverSideDataResult = this.dataCallback(serverSideDataResult);
81
106
  }
82
107
  return serverSideDataResult;
83
108
  });
84
109
  }
110
+ setActionControls() {
111
+ return __awaiter(this, void 0, void 0, function* () {
112
+ if (this.childDeviceGrid) {
113
+ const deleteAction = {
114
+ type: "DELETE" /* Delete */,
115
+ callback: (device) => this.onDeleteDevice(device),
116
+ };
117
+ this.actionControls.push(deleteAction);
118
+ }
119
+ else {
120
+ this.actionControls = this.deviceGridService.getDefaultActionControls();
121
+ }
122
+ });
123
+ }
124
+ onDeleteDevice(device) {
125
+ return __awaiter(this, void 0, void 0, function* () {
126
+ yield this.deviceGridService.delete(device);
127
+ this.refresh.emit();
128
+ });
129
+ }
85
130
  updateFiltering(columnNames, action) {
86
131
  const { type } = action;
87
132
  if (type === FilteringActionType.ResetFilter) {
@@ -98,7 +143,7 @@ export class DeviceGridComponent {
98
143
  DeviceGridComponent.decorators = [
99
144
  { type: Component, args: [{
100
145
  selector: 'c8y-device-grid',
101
- template: "<c8y-data-grid\n [title]=\"title\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [infiniteScroll]=\"infiniteScroll\"\n [actionControls]=\"actionControls\"\n [selectable]=\"selectable\"\n [bulkActionControls]=\"bulkActionControls\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n (itemsSelect)=\"itemsSelect.emit($event)\"\n (onConfigChange)=\"configChange($event)\"\n [refresh]=\"refresh\"\n [showChildDevices]=\"showChildDevices\"\n (onChildDevices)=\"withChildren=$event;onChildDevices.emit($event)\"\n>\n <div class=\"c8y-empty-state\">\n <h1 c8yIcon=\"search\"></h1>\n <div>\n <p>\n <strong>{{ 'No matching devices.' | translate }}</strong>\n </p>\n <small>{{ 'Refine your search terms' | translate }}</small>\n </div>\n </div>\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n</c8y-data-grid>\n"
146
+ template: "<c8y-data-grid\n [title]=\"title\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [infiniteScroll]=\"infiniteScroll\"\n [actionControls]=\"actionControls\"\n [selectable]=\"selectable\"\n [bulkActionControls]=\"bulkActionControls\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n (itemsSelect)=\"itemsSelect.emit($event)\"\n (onConfigChange)=\"configChange($event)\"\n [refresh]=\"refresh\"\n [showChildDevices]=\"showChildDevices\"\n (onChildDevices)=\"withChildren = $event; onChildDevices.emit($event)\"\n>\n <div class=\"c8y-empty-state\">\n <h1 c8yIcon=\"search\"></h1>\n <div>\n <p>\n <strong>{{ 'No matching devices.' | translate }}</strong>\n </p>\n <small>{{ 'Refine your search terms' | translate }}</small>\n </div>\n </div>\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n</c8y-data-grid>\n"
102
147
  },] }
103
148
  ];
104
149
  DeviceGridComponent.ctorParameters = () => [
@@ -117,6 +162,8 @@ DeviceGridComponent.propDecorators = {
117
162
  selectable: [{ type: Input }],
118
163
  baseQuery: [{ type: Input }],
119
164
  _bulkActionControls: [{ type: Input, args: ['bulkActionControls',] }],
165
+ childDeviceGrid: [{ type: Input }],
166
+ parentDeviceId: [{ type: Input }],
120
167
  showChildDevices: [{ type: Input }],
121
168
  onColumnsChange: [{ type: Output }],
122
169
  onDeviceQueryStringChange: [{ type: Output }],
@@ -124,4 +171,4 @@ DeviceGridComponent.propDecorators = {
124
171
  onChildDevices: [{ type: Output }],
125
172
  dataGrid: [{ type: ViewChild, args: [DataGridComponent, { static: true },] }]
126
173
  };
127
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZGV2aWNlLWdyaWQvZGV2aWNlLWdyaWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBR0wsaUJBQWlCLEVBRWpCLG1CQUFtQixFQUVuQixPQUFPLEVBS1IsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQU0xRCxNQUFNLE9BQU8sbUJBQW1CO0lBNkQ5QixZQUFtQixpQkFBb0M7UUFBcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQTFEOUMsVUFBSyxHQUFXLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuQyx1QkFBa0IsR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNsRCxzQkFBaUIsR0FBVyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQTZCeEQsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1QixjQUFTLEdBQVEsRUFBRSxDQUFDO1FBUXBCLHFCQUFnQixHQUFRLEVBQUUsQ0FBQztRQUMxQixvQkFBZSxHQUFxQyxJQUFJLFlBQVksRUFFM0UsQ0FBQztRQUNNLDhCQUF5QixHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzdFLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVksQ0FBQztRQUMzQyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFdkQsWUFBTyxHQUF1QixJQUFJLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6RSxlQUFVLEdBQWUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDdkUsbUJB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NkJBQ04sTUFBTTt1QkFTTixTQUFTLFNBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWN0aW9uQ29udHJvbCxcbiAgQnVsa0FjdGlvbkNvbnRyb2wsXG4gIERhdGFHcmlkQ29tcG9uZW50LFxuICBEYXRhU291cmNlTW9kaWZpZXIsXG4gIEZpbHRlcmluZ0FjdGlvblR5cGUsXG4gIEZpbHRlcmluZ01vZGlmaWVyLFxuICBnZXR0ZXh0LFxuICBMb2FkTW9yZU1vZGUsXG4gIFBhZ2luYXRpb24sXG4gIFNlcnZlclNpZGVEYXRhUmVzdWx0LFxuICBHcmlkQ29uZmlnXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgRGV2aWNlR3JpZENvbHVtbiwgRGF0YUNhbGxiYWNrIH0gZnJvbSAnLi9kZXZpY2UtZ3JpZC5tb2RlbHMnO1xuaW1wb3J0IHsgRGV2aWNlR3JpZFNlcnZpY2UgfSBmcm9tICcuL2RldmljZS1ncmlkLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZGV2aWNlLWdyaWQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGV2aWNlLWdyaWQuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIERldmljZUdyaWRDb21wb25lbnQge1xuICBASW5wdXQoKSBkYXRhQ2FsbGJhY2s6IERhdGFDYWxsYmFjaztcbiAgQElucHV0KCkgcmVmcmVzaDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmcgPSBnZXR0ZXh0KCdEZXZpY2VzJyk7XG4gIEBJbnB1dCgpIGxvYWRNb3JlSXRlbXNMYWJlbCA9IGdldHRleHQoJ0xvYWQgbW9yZSBkZXZpY2VzJyk7XG4gIEBJbnB1dCgpIGxvYWRpbmdJdGVtc0xhYmVsOiBzdHJpbmcgPSBnZXR0ZXh0KCdMb2FkaW5nIGRldmljZXPigKYnKTtcbiAgQElucHV0KCdjb2x1bW5zJykgc2V0IF9jb2x1bW5zKHZhbHVlOiBEZXZpY2VHcmlkQ29sdW1uW10pIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuZGV2aWNlR3JpZFNlcnZpY2UuZ2V0VXNlckNvbmZpZ3VyZWRDb2x1bW5zKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5kZXZpY2VHcmlkU2VydmljZS5nZXRVc2VyQ29uZmlndXJlZENvbHVtbnMoXG4gICAgICAgIHRoaXMuZGV2aWNlR3JpZFNlcnZpY2UuZ2V0RGVmYXVsdENvbHVtbnMoKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCdwYWdpbmF0aW9uJykgc2V0IF9wYWdpbmF0aW9uKHZhbHVlOiBQYWdpbmF0aW9uKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLnBhZ2luYXRpb24gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYWdpbmF0aW9uID0gdGhpcy5kZXZpY2VHcmlkU2VydmljZS5nZXREZWZhdWx0UGFnaW5hdGlvbigpO1xuICAgIH1cbiAgfVxuICBpbmZpbml0ZVNjcm9sbDogTG9hZE1vcmVNb2RlO1xuICBASW5wdXQoJ2luZmluaXRlU2Nyb2xsJykgc2V0IF9pbmZpbml0ZVNjcm9sbChpbmZpbml0ZVNjcm9sbDogTG9hZE1vcmVNb2RlKSB7XG4gICAgdGhpcy5pbmZpbml0ZVNjcm9sbCA9IGluZmluaXRlU2Nyb2xsO1xuICAgIHRoaXMucGFnaW5hdGlvbiA9IHRoaXMuZGV2aWNlR3JpZFNlcnZpY2UuZ2V0SW5maW5pdGVTY3JvbGxQYWdpbmF0aW9uKCk7XG4gIH1cbiAgQElucHV0KCdhY3Rpb25Db250cm9scycpIHNldCBfYWN0aW9uQ29udHJvbHModmFsdWU6IEFjdGlvbkNvbnRyb2xbXSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5hY3Rpb25Db250cm9scyA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFjdGlvbkNvbnRyb2xzID0gdGhpcy5kZXZpY2VHcmlkU2VydmljZS5nZXREZWZhdWx0QWN0aW9uQ29udHJvbHMoKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCkgc2VsZWN0YWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBiYXNlUXVlcnk6IGFueSA9IHt9O1xuICBASW5wdXQoJ2J1bGtBY3Rpb25Db250cm9scycpIHNldCBfYnVsa0FjdGlvbkNvbnRyb2xzKHZhbHVlOiBCdWxrQWN0aW9uQ29udHJvbFtdKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLmJ1bGtBY3Rpb25Db250cm9scyA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJ1bGtBY3Rpb25Db250cm9scyA9IHRoaXMuZGV2aWNlR3JpZFNlcnZpY2UuZ2V0RGVmYXVsdEJ1bGtBY3Rpb25Db250cm9scygpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKSBzaG93Q2hpbGREZXZpY2VzOiBhbnkgPSB7fTtcbiAgQE91dHB1dCgpIG9uQ29sdW1uc0NoYW5nZTogRXZlbnRFbWl0dGVyPERldmljZUdyaWRDb2x1bW5bXT4gPSBuZXcgRXZlbnRFbWl0dGVyPFxuICAgIERldmljZUdyaWRDb2x1bW5bXVxuICA+KCk7XG4gIEBPdXRwdXQoKSBvbkRldmljZVF1ZXJ5U3RyaW5nQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgaXRlbXNTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdPigpO1xuICBAT3V0cHV0KCkgb25DaGlsZERldmljZXMgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgY29sdW1uczogRGV2aWNlR3JpZENvbHVtbltdID0gdGhpcy5kZXZpY2VHcmlkU2VydmljZS5nZXREZWZhdWx0Q29sdW1ucygpO1xuICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uID0gdGhpcy5kZXZpY2VHcmlkU2VydmljZS5nZXREZWZhdWx0UGFnaW5hdGlvbigpO1xuICBhY3Rpb25Db250cm9sczogQWN0aW9uQ29udHJvbFtdID0gdGhpcy5kZXZpY2VHcmlkU2VydmljZS5nZXREZWZhdWx0QWN0aW9uQ29udHJvbHMoKTtcbiAgYnVsa0FjdGlvbkNvbnRyb2xzOiBCdWxrQWN0aW9uQ29udHJvbFtdID0gdGhpcy5kZXZpY2VHcmlkU2VydmljZS5nZXREZWZhdWx0QnVsa0FjdGlvbkNvbnRyb2xzKCk7XG4gIHNlcnZlclNpZGVEYXRhQ2FsbGJhY2s6IGFueTtcbiAgd2l0aENoaWxkcmVuOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZChEYXRhR3JpZENvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgZGF0YUdyaWQ6IERhdGFHcmlkQ29tcG9uZW50O1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBkZXZpY2VHcmlkU2VydmljZTogRGV2aWNlR3JpZFNlcnZpY2UpIHtcbiAgICB0aGlzLnNlcnZlclNpZGVEYXRhQ2FsbGJhY2sgPSB0aGlzLm9uRGF0YVNvdXJjZU1vZGlmaWVyLmJpbmQodGhpcyk7XG4gIH1cblxuICB0cmFja0J5TmFtZShfaW5kZXgsIGNvbHVtbjogRGV2aWNlR3JpZENvbHVtbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNvbHVtbi5uYW1lO1xuICB9XG5cbiAgYXN5bmMgb25EYXRhU291cmNlTW9kaWZpZXIoXG4gICAgZGF0YVNvdXJjZU1vZGlmaWVyOiBEYXRhU291cmNlTW9kaWZpZXJcbiAgKTogUHJvbWlzZTxTZXJ2ZXJTaWRlRGF0YVJlc3VsdD4ge1xuICAgIGxldCBzZXJ2ZXJTaWRlRGF0YVJlc3VsdDogU2VydmVyU2lkZURhdGFSZXN1bHQ7XG4gICAgY29uc3QgeyByZXMsIGRhdGEsIHBhZ2luZyB9ID0gYXdhaXQgdGhpcy5kZXZpY2VHcmlkU2VydmljZS5nZXREYXRhKFxuICAgICAgZGF0YVNvdXJjZU1vZGlmaWVyLmNvbHVtbnMsXG4gICAgICBkYXRhU291cmNlTW9kaWZpZXIucGFnaW5hdGlvbixcbiAgICAgIHRoaXMuYmFzZVF1ZXJ5LFxuICAgICAgdGhpcy53aXRoQ2hpbGRyZW5cbiAgICApO1xuXG4gICAgY29uc3QgZmlsdGVyZWRTaXplOiBudW1iZXIgPSBhd2FpdCB0aGlzLmRldmljZUdyaWRTZXJ2aWNlLmdldENvdW50KFxuICAgICAgZGF0YVNvdXJjZU1vZGlmaWVyLmNvbHVtbnMsXG4gICAgICBkYXRhU291cmNlTW9kaWZpZXIucGFnaW5hdGlvbixcbiAgICAgIHRoaXMuYmFzZVF1ZXJ5XG4gICAgKTtcbiAgICBjb25zdCBzaXplOiBudW1iZXIgPSBhd2FpdCB0aGlzLmRldmljZUdyaWRTZXJ2aWNlLmdldFRvdGFsKHRoaXMuYmFzZVF1ZXJ5KTtcblxuICAgIHRoaXMub25Db2x1bW5zQ2hhbmdlLmVtaXQoZGF0YVNvdXJjZU1vZGlmaWVyLmNvbHVtbnMpO1xuICAgIHRoaXMub25EZXZpY2VRdWVyeVN0cmluZ0NoYW5nZS5lbWl0KFxuICAgICAgdGhpcy5kZXZpY2VHcmlkU2VydmljZS5nZXREZXZpY2VRdWVyeVN0cmluZyhkYXRhU291cmNlTW9kaWZpZXIuY29sdW1ucywgdGhpcy5iYXNlUXVlcnkpXG4gICAgKTtcblxuICAgIHNlcnZlclNpZGVEYXRhUmVzdWx0ID0ge1xuICAgICAgcmVzLFxuICAgICAgZGF0YSxcbiAgICAgIHBhZ2luZyxcbiAgICAgIGZpbHRlcmVkU2l6ZSxcbiAgICAgIHNpemVcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuZGF0YUNhbGxiYWNrKSB7XG4gICAgICBzZXJ2ZXJTaWRlRGF0YVJlc3VsdCA9IHRoaXMuZGF0YUNhbGxiYWNrKHNlcnZlclNpZGVEYXRhUmVzdWx0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VydmVyU2lkZURhdGFSZXN1bHQ7XG4gIH1cblxuICB1cGRhdGVGaWx0ZXJpbmcoXG4gICAgY29sdW1uTmFtZXM6IHN0cmluZ1tdLFxuICAgIGFjdGlvbjoge1xuICAgICAgdHlwZTogRmlsdGVyaW5nQWN0aW9uVHlwZTtcbiAgICAgIHBheWxvYWQ/OiB7IGZpbHRlcmluZ01vZGlmaWVyOiBGaWx0ZXJpbmdNb2RpZmllciB9O1xuICAgIH1cbiAgKSB7XG4gICAgY29uc3QgeyB0eXBlIH0gPSBhY3Rpb247XG4gICAgaWYgKHR5cGUgPT09IEZpbHRlcmluZ0FjdGlvblR5cGUuUmVzZXRGaWx0ZXIpIHtcbiAgICAgIHRoaXMuZGF0YUdyaWQuY2xlYXJGaWx0ZXJzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YUdyaWQudXBkYXRlRmlsdGVyaW5nKGNvbHVtbk5hbWVzLCBhY3Rpb24pO1xuICAgIH1cbiAgfVxuXG4gIGNvbmZpZ0NoYW5nZShjb25maWc6IEdyaWRDb25maWcpIHtcbiAgICB0aGlzLmRldmljZUdyaWRTZXJ2aWNlLnNhdmVDb25maWcoY29uZmlnKTtcbiAgfVxufVxuIl19
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZGV2aWNlLWdyaWQvZGV2aWNlLWdyaWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxRixPQUFPLEVBR0wsaUJBQWlCLEVBRWpCLG1CQUFtQixFQUVuQixPQUFPLEdBT1IsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQU0xRCxNQUFNLE9BQU8sbUJBQW1CO0lBcUU5QixZQUFtQixpQkFBb0M7UUFBcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQWpFOUMsVUFBSyxHQUFXLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuQyx1QkFBa0IsR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNsRCxzQkFBaUIsR0FBVyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQTZCeEQsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1QixjQUFTLEdBQVEsRUFBRSxDQUFDO1FBUXBCLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBRTFDOzs7V0FHRztRQUNNLHFCQUFnQixHQUFzQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQzdGLHlEQUF5RDtRQUMvQyxvQkFBZSxHQUFxQyxJQUFJLFlBQVksRUFFM0UsQ0FBQztRQUNNLDhCQUF5QixHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzdFLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVksQ0FBQztRQUMzQyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFdkQsbUJBQWMsR0FBb0IsRUFBRSxDQUFD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QkFDVCxRQUFRLEVBQUUsaUJBQWlCO2dCQUMzQiw0aUNBQTJDO2FBQzVDOzs7WUFMUSxpQkFBaUI7OzsyQkFRdkIsS0FBSztzQkFDTCxLQUFLO29CQUNMLEtBQUs7aUNBQ0wsS0FBSztnQ0FDTCxLQUFLO3VCQUNMLEtBQUssU0FBQyxTQUFTOzBCQVNmLEtBQUssU0FBQyxZQUFZOzhCQVFsQixLQUFLLFNBQUMsZ0JBQWdCOzhCQUl0QixLQUFLLFNBQUMsZ0JBQWdCO3lCQU90QixLQUFLO3dCQUNMLEtBQUs7a0NBQ0wsS0FBSyxTQUFDLG9CQUFvQjs4QkFPMUIsS0FBSzs2QkFDTCxLQUFLOytCQUtMLEtBQUs7OEJBRUwsTUFBTTt3Q0FHTixNQUFNOzBCQUNOLE1BQU07NkJBQ04sTUFBTTt1QkFTTixTQUFTLFNBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFjdGlvbkNvbnRyb2wsXG4gIEJ1bGtBY3Rpb25Db250cm9sLFxuICBEYXRhR3JpZENvbXBvbmVudCxcbiAgRGF0YVNvdXJjZU1vZGlmaWVyLFxuICBGaWx0ZXJpbmdBY3Rpb25UeXBlLFxuICBGaWx0ZXJpbmdNb2RpZmllcixcbiAgZ2V0dGV4dCxcbiAgTG9hZE1vcmVNb2RlLFxuICBQYWdpbmF0aW9uLFxuICBTZXJ2ZXJTaWRlRGF0YVJlc3VsdCxcbiAgR3JpZENvbmZpZyxcbiAgQnVpbHRJbkFjdGlvblR5cGUsXG4gIFJvdyxcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBEZXZpY2VHcmlkQ29sdW1uLCBEYXRhQ2FsbGJhY2sgfSBmcm9tICcuL2RldmljZS1ncmlkLm1vZGVscyc7XG5pbXBvcnQgeyBEZXZpY2VHcmlkU2VydmljZSB9IGZyb20gJy4vZGV2aWNlLWdyaWQuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1kZXZpY2UtZ3JpZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kZXZpY2UtZ3JpZC5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIERldmljZUdyaWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvKiogT3B0aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBhbGxvd3MgdG8gbW9kaWZ5IHNlcnZlciBzaWRlIGRhdGEgcmVzdWx0IGJlZm9yZSBpdCdzIHJlbmRlcmVkLiAqL1xuICBASW5wdXQoKSBkYXRhQ2FsbGJhY2s6IERhdGFDYWxsYmFjaztcbiAgQElucHV0KCkgcmVmcmVzaDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmcgPSBnZXR0ZXh0KCdEZXZpY2VzJyk7XG4gIEBJbnB1dCgpIGxvYWRNb3JlSXRlbXNMYWJlbCA9IGdldHRleHQoJ0xvYWQgbW9yZSBkZXZpY2VzJyk7XG4gIEBJbnB1dCgpIGxvYWRpbmdJdGVtc0xhYmVsOiBzdHJpbmcgPSBnZXR0ZXh0KCdMb2FkaW5nIGRldmljZXPigKYnKTtcbiAgQElucHV0KCdjb2x1bW5zJykgc2V0IF9jb2x1bW5zKHZhbHVlOiBEZXZpY2VHcmlkQ29sdW1uW10pIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuZGV2aWNlR3JpZFNlcnZpY2UuZ2V0VXNlckNvbmZpZ3VyZWRDb2x1bW5zKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5kZXZpY2VHcmlkU2VydmljZS5nZXRVc2VyQ29uZmlndXJlZENvbHVtbnMoXG4gICAgICAgIHRoaXMuZGV2aWNlR3JpZFNlcnZpY2UuZ2V0RGVmYXVsdENvbHVtbnMoKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCdwYWdpbmF0aW9uJykgc2V0IF9wYWdpbmF0aW9uKHZhbHVlOiBQYWdpbmF0aW9uKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLnBhZ2luYXRpb24gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYWdpbmF0aW9uID0gdGhpcy5kZXZpY2VHcmlkU2VydmljZS5nZXREZWZhdWx0UGFnaW5hdGlvbigpO1xuICAgIH1cbiAgfVxuICBpbmZpbml0ZVNjcm9sbDogTG9hZE1vcmVNb2RlO1xuICBASW5wdXQoJ2luZmluaXRlU2Nyb2xsJykgc2V0IF9pbmZpbml0ZVNjcm9sbChpbmZpbml0ZVNjcm9sbDogTG9hZE1vcmVNb2RlKSB7XG4gICAgdGhpcy5pbmZpbml0ZVNjcm9sbCA9IGluZmluaXRlU2Nyb2xsO1xuICAgIHRoaXMucGFnaW5hdGlvbiA9IHRoaXMuZGV2aWNlR3JpZFNlcnZpY2UuZ2V0SW5maW5pdGVTY3JvbGxQYWdpbmF0aW9uKCk7XG4gIH1cbiAgQElucHV0KCdhY3Rpb25Db250cm9scycpIHNldCBfYWN0aW9uQ29udHJvbHModmFsdWU6IEFjdGlvbkNvbnRyb2xbXSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5hY3Rpb25Db250cm9scyA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFjdGlvbkNvbnRyb2xzID0gdGhpcy5kZXZpY2VHcmlkU2VydmljZS5nZXREZWZhdWx0QWN0aW9uQ29udHJvbHMoKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCkgc2VsZWN0YWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBiYXNlUXVlcnk6IGFueSA9IHt9O1xuICBASW5wdXQoJ2J1bGtBY3Rpb25Db250cm9scycpIHNldCBfYnVsa0FjdGlvbkNvbnRyb2xzKHZhbHVlOiBCdWxrQWN0aW9uQ29udHJvbFtdKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLmJ1bGtBY3Rpb25Db250cm9scyA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJ1bGtBY3Rpb25Db250cm9scyA9IHRoaXMuZGV2aWNlR3JpZFNlcnZpY2UuZ2V0RGVmYXVsdEJ1bGtBY3Rpb25Db250cm9scygpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKSBjaGlsZERldmljZUdyaWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgcGFyZW50RGV2aWNlSWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgYWRkaXRpb25hbCBcIlNob3cgY2hpbGQgZGV2aWNlc1wiIHRvZ2dsZSBzaG91bGQgYmUgc2hvd24gYW5kIGluIHdoYXQgc3RhdGUgaXQgc2hvdWxkIGJlLlxuICAgKiBAZGVwcmVjYXRlZCBJdCdzIGdvaW5nIHRvIGJlIHJlcGxhY2VkIHdpdGggYSBnZW5lcmljIGhvb2sgYWxsb3dpbmcgdG8gZWFzaWx5IGFkZCBjdXN0b20gYWN0aW9ucyBpbiB0aGUgZ3JpZCBoZWFkZXIuXG4gICAqL1xuICBASW5wdXQoKSBzaG93Q2hpbGREZXZpY2VzOiB7IHNob3c6IGJvb2xlYW47IHZhbHVlOiBib29sZWFuIH0gPSB7IHNob3c6IGZhbHNlLCB2YWx1ZTogZmFsc2UgfTtcbiAgLyoqIEVtaXRzIGFuIGV2ZW50IHdoZW4gY29sdW1ucyBjb25maWd1cmF0aW9uIGNoYW5nZXMuICovXG4gIEBPdXRwdXQoKSBvbkNvbHVtbnNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxEZXZpY2VHcmlkQ29sdW1uW10+ID0gbmV3IEV2ZW50RW1pdHRlcjxcbiAgICBEZXZpY2VHcmlkQ29sdW1uW11cbiAgPigpO1xuICBAT3V0cHV0KCkgb25EZXZpY2VRdWVyeVN0cmluZ0NoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIGl0ZW1zU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKTtcbiAgQE91dHB1dCgpIG9uQ2hpbGREZXZpY2VzID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIGFjdGlvbkNvbnRyb2xzOiBBY3Rpb25Db250cm9sW10gPSBbXTtcbiAgY29sdW1uczogRGV2aWNlR3JpZENvbHVtbltdID0gdGhpcy5kZXZpY2VHcmlkU2VydmljZS5nZXREZWZhdWx0Q29sdW1ucygpO1xuICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uID0gdGhpcy5kZXZpY2VHcmlkU2VydmljZS5nZXREZWZhdWx0UGFnaW5hdGlvbigpO1xuICBidWxrQWN0aW9uQ29udHJvbHM6IEJ1bGtBY3Rpb25Db250cm9sW10gPSB0aGlzLmRldmljZUdyaWRTZXJ2aWNlLmdldERlZmF1bHRCdWxrQWN0aW9uQ29udHJvbHMoKTtcbiAgc2VydmVyU2lkZURhdGFDYWxsYmFjazogYW55O1xuICB3aXRoQ2hpbGRyZW46IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKERhdGFHcmlkQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBkYXRhR3JpZDogRGF0YUdyaWRDb21wb25lbnQ7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGRldmljZUdyaWRTZXJ2aWNlOiBEZXZpY2VHcmlkU2VydmljZSkge1xuICAgIHRoaXMuc2VydmVyU2lkZURhdGFDYWxsYmFjayA9IHRoaXMub25EYXRhU291cmNlTW9kaWZpZXIuYmluZCh0aGlzKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc2V0QWN0aW9uQ29udHJvbHMoKTtcbiAgfVxuXG4gIHRyYWNrQnlOYW1lKF9pbmRleCwgY29sdW1uOiBEZXZpY2VHcmlkQ29sdW1uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY29sdW1uLm5hbWU7XG4gIH1cblxuICBhc3luYyBvbkRhdGFTb3VyY2VNb2RpZmllcihcbiAgICBkYXRhU291cmNlTW9kaWZpZXI6IERhdGFTb3VyY2VNb2RpZmllclxuICApOiBQcm9taXNlPFNlcnZlclNpZGVEYXRhUmVzdWx0PiB7XG4gICAgbGV0IHNlcnZlclNpZGVEYXRhUmVzdWx0OiBTZXJ2ZXJTaWRlRGF0YVJlc3VsdDtcbiAgICBsZXQgZmlsdGVyZWRTaXplOiBudW1iZXI7XG4gICAgbGV0IHNpemU6IG51bWJlcjtcbiAgICBpZiAodGhpcy5jaGlsZERldmljZUdyaWQpIHtcbiAgICAgIGNvbnN0IHsgcmVzLCBkYXRhLCBwYWdpbmcgfSA9IGF3YWl0IHRoaXMuZGV2aWNlR3JpZFNlcnZpY2UuZ2V0Q2hpbGREZXZpY2VEYXRhKFxuICAgICAgICBkYXRhU291cmNlTW9kaWZpZXIuY29sdW1ucyxcbiAgICAgICAgZGF0YVNvdXJjZU1vZGlmaWVyLnBhZ2luYXRpb24sXG4gICAgICAgIHRoaXMuYmFzZVF1ZXJ5LFxuICAgICAgICB0aGlzLndpdGhDaGlsZHJlbixcbiAgICAgICAgdGhpcy5wYXJlbnREZXZpY2VJZFxuICAgICAgKTtcblxuICAgICAgZmlsdGVyZWRTaXplID0gYXdhaXQgdGhpcy5kZXZpY2VHcmlkU2VydmljZS5nZXRDb3VudENoaWxkRGV2aWNlcyhcbiAgICAgICAgZGF0YVNvdXJjZU1vZGlmaWVyLmNvbHVtbnMsXG4gICAgICAgIGRhdGFTb3VyY2VNb2RpZmllci5wYWdpbmF0aW9uLFxuICAgICAgICB0aGlzLmJhc2VRdWVyeSxcbiAgICAgICAgdGhpcy5wYXJlbnREZXZpY2VJZFxuICAgICAgKTtcbiAgICAgIHNpemUgPSBhd2FpdCB0aGlzLmRldmljZUdyaWRTZXJ2aWNlLmdldFRvdGFsQ2hpbGREZXZpY2VzKHRoaXMuYmFzZVF1ZXJ5LCB0aGlzLnBhcmVudERldmljZUlkKTtcblxuICAgICAgc2VydmVyU2lkZURhdGFSZXN1bHQgPSB7XG4gICAgICAgIHJlcyxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgcGFnaW5nLFxuICAgICAgICBmaWx0ZXJlZFNpemUsXG4gICAgICAgIHNpemUsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7IHJlcywgZGF0YSwgcGFnaW5nIH0gPSBhd2FpdCB0aGlzLmRldmljZUdyaWRTZXJ2aWNlLmdldERhdGEoXG4gICAgICAgIGRhdGFTb3VyY2VNb2RpZmllci5jb2x1bW5zLFxuICAgICAgICBkYXRhU291cmNlTW9kaWZpZXIucGFnaW5hdGlvbixcbiAgICAgICAgdGhpcy5iYXNlUXVlcnksXG4gICAgICAgIHRoaXMud2l0aENoaWxkcmVuXG4gICAgICApO1xuXG4gICAgICBmaWx0ZXJlZFNpemUgPSBhd2FpdCB0aGlzLmRldmljZUdyaWRTZXJ2aWNlLmdldENvdW50KFxuICAgICAgICBkYXRhU291cmNlTW9kaWZpZXIuY29sdW1ucyxcbiAgICAgICAgZGF0YVNvdXJjZU1vZGlmaWVyLnBhZ2luYXRpb24sXG4gICAgICAgIHRoaXMuYmFzZVF1ZXJ5XG4gICAgICApO1xuICAgICAgc2l6ZSA9IGF3YWl0IHRoaXMuZGV2aWNlR3JpZFNlcnZpY2UuZ2V0VG90YWwodGhpcy5iYXNlUXVlcnkpO1xuXG4gICAgICBzZXJ2ZXJTaWRlRGF0YVJlc3VsdCA9IHtcbiAgICAgICAgcmVzLFxuICAgICAgICBkYXRhLFxuICAgICAgICBwYWdpbmcsXG4gICAgICAgIGZpbHRlcmVkU2l6ZSxcbiAgICAgICAgc2l6ZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5vbkNvbHVtbnNDaGFuZ2UuZW1pdChkYXRhU291cmNlTW9kaWZpZXIuY29sdW1ucyk7XG4gICAgdGhpcy5vbkRldmljZVF1ZXJ5U3RyaW5nQ2hhbmdlLmVtaXQoXG4gICAgICB0aGlzLmRldmljZUdyaWRTZXJ2aWNlLmdldERldmljZVF1ZXJ5U3RyaW5nKGRhdGFTb3VyY2VNb2RpZmllci5jb2x1bW5zLCB0aGlzLmJhc2VRdWVyeSlcbiAgICApO1xuXG4gICAgaWYgKHRoaXMuZGF0YUNhbGxiYWNrKSB7XG4gICAgICBzZXJ2ZXJTaWRlRGF0YVJlc3VsdCA9IHRoaXMuZGF0YUNhbGxiYWNrKHNlcnZlclNpZGVEYXRhUmVzdWx0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VydmVyU2lkZURhdGFSZXN1bHQ7XG4gIH1cblxuICBhc3luYyBzZXRBY3Rpb25Db250cm9scygpIHtcbiAgICBpZiAodGhpcy5jaGlsZERldmljZUdyaWQpIHtcbiAgICAgIGNvbnN0IGRlbGV0ZUFjdGlvbjogQWN0aW9uQ29udHJvbCA9IHtcbiAgICAgICAgdHlwZTogQnVpbHRJbkFjdGlvblR5cGUuRGVsZXRlLFxuICAgICAgICBjYWxsYmFjazogKGRldmljZTogUm93KSA9PiB0aGlzLm9uRGVsZXRlRGV2aWNlKGRldmljZSBhcyBJTWFuYWdlZE9iamVjdCksXG4gICAgICB9O1xuICAgICAgdGhpcy5hY3Rpb25Db250cm9scy5wdXNoKGRlbGV0ZUFjdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWN0aW9uQ29udHJvbHMgPSB0aGlzLmRldmljZUdyaWRTZXJ2aWNlLmdldERlZmF1bHRBY3Rpb25Db250cm9scygpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9uRGVsZXRlRGV2aWNlKGRldmljZSkge1xuICAgIGF3YWl0IHRoaXMuZGV2aWNlR3JpZFNlcnZpY2UuZGVsZXRlKGRldmljZSk7XG4gICAgdGhpcy5yZWZyZXNoLmVtaXQoKTtcbiAgfVxuXG4gIHVwZGF0ZUZpbHRlcmluZyhcbiAgICBjb2x1bW5OYW1lczogc3RyaW5nW10sXG4gICAgYWN0aW9uOiB7XG4gICAgICB0eXBlOiBGaWx0ZXJpbmdBY3Rpb25UeXBlO1xuICAgICAgcGF5bG9hZD86IHsgZmlsdGVyaW5nTW9kaWZpZXI6IEZpbHRlcmluZ01vZGlmaWVyIH07XG4gICAgfVxuICApIHtcbiAgICBjb25zdCB7IHR5cGUgfSA9IGFjdGlvbjtcbiAgICBpZiAodHlwZSA9PT0gRmlsdGVyaW5nQWN0aW9uVHlwZS5SZXNldEZpbHRlcikge1xuICAgICAgdGhpcy5kYXRhR3JpZC5jbGVhckZpbHRlcnMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRhR3JpZC51cGRhdGVGaWx0ZXJpbmcoY29sdW1uTmFtZXMsIGFjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgY29uZmlnQ2hhbmdlKGNvbmZpZzogR3JpZENvbmZpZykge1xuICAgIHRoaXMuZGV2aWNlR3JpZFNlcnZpY2Uuc2F2ZUNvbmZpZyhjb25maWcpO1xuICB9XG59XG4iXX0=
@@ -1,6 +1,7 @@
1
1
  import { __awaiter } from "tslib";
2
2
  import { Injectable } from '@angular/core';
3
3
  import { InventoryService, QueriesUtil } from '@c8y/client';
4
+ import { AlertService, ModalService, Status, gettext, } from '@c8y/ngx-components';
4
5
  import { TranslateService } from '@ngx-translate/core';
5
6
  import { assign, forEach, get, identity, map, remove, sortBy, transform } from 'lodash-es';
6
7
  import { AlarmsDeviceGridColumn } from './columns/alarms.device-grid-column';
@@ -13,9 +14,11 @@ import { SerialNumberDeviceGridColumn } from './columns/serial-number.device-gri
13
14
  import { StatusDeviceGridColumn } from './columns/status.device-grid-column';
14
15
  import { SystemIdDeviceGridColumn } from './columns/system-id.device-grid-column';
15
16
  export class DeviceGridService {
16
- constructor(inventoryService, translateService) {
17
+ constructor(inventoryService, translateService, alertService, modal) {
17
18
  this.inventoryService = inventoryService;
18
19
  this.translateService = translateService;
20
+ this.alertService = alertService;
21
+ this.modal = modal;
19
22
  this.GRID_CONFIG_DEFAULT_STORAGE_KEY = 'device-grid-config';
20
23
  this.DEFAULT_PAGE_SIZE = 20;
21
24
  this.queriesUtil = new QueriesUtil();
@@ -30,28 +33,28 @@ export class DeviceGridService {
30
33
  new RegistrationDateDeviceGridColumn(),
31
34
  new SystemIdDeviceGridColumn(),
32
35
  new ImeiDeviceGridColumn(),
33
- new AlarmsDeviceGridColumn()
36
+ new AlarmsDeviceGridColumn(),
34
37
  ];
35
38
  return defaultColumns;
36
39
  }
37
40
  getDefaultPagination() {
38
41
  return {
39
42
  pageSize: 10,
40
- currentPage: 1
43
+ currentPage: 1,
41
44
  };
42
45
  }
43
46
  getInfiniteScrollPagination() {
44
47
  return {
45
48
  pageSize: 50,
46
- currentPage: 1
49
+ currentPage: 1,
47
50
  };
48
51
  }
49
52
  getDefaultActionControls() {
50
53
  return [
51
54
  {
52
55
  type: "DELETE" /* Delete */,
53
- callback: (item) => this.delete(item)
54
- }
56
+ callback: (item) => this.delete(item),
57
+ },
55
58
  ];
56
59
  }
57
60
  getDefaultBulkActionControls() {
@@ -94,9 +97,9 @@ export class DeviceGridService {
94
97
  const reOrderedColumns = [];
95
98
  let noConfigColumns = [];
96
99
  try {
97
- noConfigColumns = columns.filter(col => !config.columns.includes(col));
100
+ noConfigColumns = columns.filter((col) => !config.columns.includes(col));
98
101
  config.columns.forEach(({ visible, name, sortOrder }) => {
99
- const columnToReorder = columns.find(col => col.name === name);
102
+ const columnToReorder = columns.find((col) => col.name === name);
100
103
  if (columnToReorder) {
101
104
  columnToReorder.visible = visible;
102
105
  columnToReorder.sortOrder = sortOrder;
@@ -112,7 +115,19 @@ export class DeviceGridService {
112
115
  return columns;
113
116
  }
114
117
  delete(device) {
115
- console.log('should delete', device);
118
+ return __awaiter(this, void 0, void 0, function* () {
119
+ try {
120
+ yield this.modal.confirm(gettext('Delete device'), this.translateService.instant(gettext(`You are about to delete device: "{{ name }}". Do you want to proceed?`), { name: device.name }), Status.DANGER, { ok: gettext('Delete'), cancel: gettext('Cancel') });
121
+ yield this.inventoryService.delete(device);
122
+ this.alertService.success(gettext('Device deleted.'));
123
+ }
124
+ catch (ex) {
125
+ // only if not cancel from modal
126
+ if (ex) {
127
+ this.alertService.addServerFailure(ex);
128
+ }
129
+ }
130
+ });
116
131
  }
117
132
  getData(columns, pagination, query = {}, withChildren = false) {
118
133
  return __awaiter(this, void 0, void 0, function* () {
@@ -120,18 +135,42 @@ export class DeviceGridService {
120
135
  return this.inventoryService.list(filters);
121
136
  });
122
137
  }
138
+ getChildDeviceData(columns, pagination, query = {}, withChildren = false, id) {
139
+ return __awaiter(this, void 0, void 0, function* () {
140
+ const childDeviceFilters = true;
141
+ const filters = Object.assign(Object.assign({}, this.getDevicesFilters(columns, pagination, query, childDeviceFilters)), { withParents: true, withChildren });
142
+ return this.inventoryService.childDevicesList(id, filters);
143
+ });
144
+ }
123
145
  getCount(columns, pagination, query = {}) {
124
146
  return __awaiter(this, void 0, void 0, function* () {
125
147
  const filters = Object.assign(Object.assign({}, this.getDevicesFilters(columns, pagination, query)), { pageSize: 1, currentPage: 1 });
126
148
  return (yield this.inventoryService.list(filters)).paging.totalPages;
127
149
  });
128
150
  }
151
+ getCountChildDevices(columns, pagination, query = {}, id) {
152
+ return __awaiter(this, void 0, void 0, function* () {
153
+ const childDeviceFilters = true;
154
+ const filters = Object.assign(Object.assign({}, this.getDevicesFilters(columns, pagination, query, childDeviceFilters)), { pageSize: 1, currentPage: 1 });
155
+ return (yield this.inventoryService.childDevicesList(id, filters)).paging.totalPages;
156
+ });
157
+ }
158
+ getTotalChildDevices(query = {}, id) {
159
+ return __awaiter(this, void 0, void 0, function* () {
160
+ const filters = {
161
+ q: this.queriesUtil.buildQuery(query),
162
+ pageSize: 1,
163
+ withTotalPages: true,
164
+ };
165
+ return (yield this.inventoryService.childDevicesList(id, filters)).paging.totalPages;
166
+ });
167
+ }
129
168
  getTotal(query = {}) {
130
169
  return __awaiter(this, void 0, void 0, function* () {
131
170
  const filters = {
132
171
  q: this.queriesUtil.buildQuery(query),
133
172
  pageSize: 1,
134
- withTotalPages: true
173
+ withTotalPages: true,
135
174
  };
136
175
  return (yield this.inventoryService.list(filters)).paging.totalPages;
137
176
  });
@@ -166,14 +205,10 @@ export class DeviceGridService {
166
205
  isVendme(device) {
167
206
  return device.type === 'com_nsn_startups_vendme_VendingMachine';
168
207
  }
169
- getDevicesFilters(columns, pagination, query) {
170
- return {
171
- q: this.getDeviceQueryString(columns, query),
172
- pageSize: pagination.pageSize,
173
- currentPage: pagination.currentPage,
174
- withChildren: false,
175
- withTotalPages: true
176
- };
208
+ getDevicesFilters(columns, pagination, query, childDeviceFilters) {
209
+ return Object.assign(Object.assign({}, (childDeviceFilters
210
+ ? { query: this.getDeviceQueryString(columns, query) }
211
+ : { q: this.getDeviceQueryString(columns, query) })), { pageSize: pagination.pageSize, currentPage: pagination.currentPage, withChildren: false, withTotalPages: true });
177
212
  }
178
213
  extendQueryByColumn(query, column) {
179
214
  if (column.filterable && column.externalFilterQuery) {
@@ -184,7 +219,7 @@ export class DeviceGridService {
184
219
  query.__filter.__and.push(queryObj);
185
220
  }
186
221
  else if (queryObj.__and && get(query, '__filter.__and')) {
187
- queryObj.__and.map(obj => query.__filter.__and.push(obj));
222
+ queryObj.__and.map((obj) => query.__filter.__and.push(obj));
188
223
  }
189
224
  else {
190
225
  assign(query.__filter, queryObj);
@@ -192,7 +227,7 @@ export class DeviceGridService {
192
227
  }
193
228
  if (column.sortable && column.sortOrder) {
194
229
  const cs = {};
195
- forEach(column.sortingConfig.pathSortingConfigs, pathSortingConfig => {
230
+ forEach(column.sortingConfig.pathSortingConfigs, (pathSortingConfig) => {
196
231
  cs[pathSortingConfig.path] =
197
232
  (column.sortOrder === 'asc' ? 1 : -1) * (pathSortingConfig.sortOrderModifier || 1);
198
233
  });
@@ -206,6 +241,8 @@ DeviceGridService.decorators = [
206
241
  ];
207
242
  DeviceGridService.ctorParameters = () => [
208
243
  { type: InventoryService },
209
- { type: TranslateService }
244
+ { type: TranslateService },
245
+ { type: AlertService },
246
+ { type: ModalService }
210
247
  ];
211
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLWdyaWQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2RldmljZS1ncmlkL2RldmljZS1ncmlkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFrQixnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFTNUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDM0YsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDN0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDM0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDekUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDM0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDekUsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDbEcsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDMUYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDN0UsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFJbEYsTUFBTSxPQUFPLGlCQUFpQjtJQUs1QixZQUNZLGdCQUFrQyxFQUNsQyxnQkFBa0M7UUFEbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxxQkFBZ0IsR0FB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LENBQUM7SUFDZixDQUFDOzs7WUFuT0YsVUFBVTs7O1lBdEJjLGdCQUFnQjtZQVNoQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdCwgSW52ZW50b3J5U2VydmljZSwgUXVlcmllc1V0aWwgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBBY3Rpb25Db250cm9sLFxuICBCdWxrQWN0aW9uQ29udHJvbCxcbiAgUGFnaW5hdGlvbixcbiAgUm93LFxuICBHcmlkQ29uZmlnLFxuICBDb2x1bW5cbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBhc3NpZ24sIGZvckVhY2gsIGdldCwgaWRlbnRpdHksIG1hcCwgcmVtb3ZlLCBzb3J0QnksIHRyYW5zZm9ybSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBBbGFybXNEZXZpY2VHcmlkQ29sdW1uIH0gZnJvbSAnLi9jb2x1bW5zL2FsYXJtcy5kZXZpY2UtZ3JpZC1jb2x1bW4nO1xuaW1wb3J0IHsgR3JvdXBEZXZpY2VHcmlkQ29sdW1uIH0gZnJvbSAnLi9jb2x1bW5zL2dyb3VwLmRldmljZS1ncmlkLWNvbHVtbic7XG5pbXBvcnQgeyBJbWVpRGV2aWNlR3JpZENvbHVtbiB9IGZyb20gJy4vY29sdW1ucy9pbWVpLmRldmljZS1ncmlkLWNvbHVtbic7XG5pbXBvcnQgeyBNb2RlbERldmljZUdyaWRDb2x1bW4gfSBmcm9tICcuL2NvbHVtbnMvbW9kZWwuZGV2aWNlLWdyaWQtY29sdW1uJztcbmltcG9ydCB7IE5hbWVEZXZpY2VHcmlkQ29sdW1uIH0gZnJvbSAnLi9jb2x1bW5zL25hbWUuZGV2aWNlLWdyaWQtY29sdW1uJztcbmltcG9ydCB7IFJlZ2lzdHJhdGlvbkRhdGVEZXZpY2VHcmlkQ29sdW1uIH0gZnJvbSAnLi9jb2x1bW5zL3JlZ2lzdHJhdGlvbi1kYXRlLmRldmljZS1ncmlkLWNvbHVtbic7XG5pbXBvcnQgeyBTZXJpYWxOdW1iZXJEZXZpY2VHcmlkQ29sdW1uIH0gZnJvbSAnLi9jb2x1bW5zL3NlcmlhbC1udW1iZXIuZGV2aWNlLWdyaWQtY29sdW1uJztcbmltcG9ydCB7IFN0YXR1c0RldmljZUdyaWRDb2x1bW4gfSBmcm9tICcuL2NvbHVtbnMvc3RhdHVzLmRldmljZS1ncmlkLWNvbHVtbic7XG5pbXBvcnQgeyBTeXN0ZW1JZERldmljZUdyaWRDb2x1bW4gfSBmcm9tICcuL2NvbHVtbnMvc3lzdGVtLWlkLmRldmljZS1ncmlkLWNvbHVtbic7XG5pbXBvcnQgeyBEZXZpY2VHcmlkQWN0aW9uVHlwZSwgRGV2aWNlR3JpZENvbHVtbiB9IGZyb20gJy4vZGV2aWNlLWdyaWQubW9kZWxzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERldmljZUdyaWRTZXJ2aWNlIHtcbiAgcHJvdGVjdGVkIHF1ZXJpZXNVdGlsOiBRdWVyaWVzVXRpbDtcbiAgcHJvdGVjdGVkIEdSSURfQ09ORklHX0RFRkFVTFRfU1RPUkFHRV9LRVkgPSAnZGV2aWNlLWdyaWQtY29uZmlnJztcbiAgcHJvdGVjdGVkIERFRkFVTFRfUEFHRV9TSVpFID0gMjA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGludmVudG9yeVNlcnZpY2U6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5xdWVyaWVzVXRpbCA9IG5ldyBRdWVyaWVzVXRpbCgpO1xuICB9XG5cbiAgZ2V0RGVmYXVsdENvbHVtbnMoKTogRGV2aWNlR3JpZENvbHVtbltdIHtcbiAgICBjb25zdCBkZWZhdWx0Q29sdW1ucyA9IFtcbiAgICAgIG5ldyBTdGF0dXNEZXZpY2VHcmlkQ29sdW1uKCksXG4gICAgICBuZXcgTmFtZURldmljZUdyaWRDb2x1bW4oKSxcbiAgICAgIG5ldyBNb2RlbERldmljZUdyaWRDb2x1bW4oKSxcbiAgICAgIG5ldyBTZXJpYWxOdW1iZXJEZXZpY2VHcmlkQ29sdW1uKCksXG4gICAgICBuZXcgR3JvdXBEZXZpY2VHcmlkQ29sdW1uKCksXG4gICAgICBuZXcgUmVnaXN0cmF0aW9uRGF0ZURldmljZUdyaWRDb2x1bW4oKSxcbiAgICAgIG5ldyBTeXN0ZW1JZERldmljZUdyaWRDb2x1bW4oKSxcbiAgICAgIG5ldyBJbWVpRGV2aWNlR3JpZENvbHVtbigpLFxuICAgICAgbmV3IEFsYXJtc0RldmljZUdyaWRDb2x1bW4oKVxuICAgIF07XG5cbiAgICByZXR1cm4gZGVmYXVsdENvbHVtbnM7XG4gIH1cblxuICBnZXREZWZhdWx0UGFnaW5hdGlvbigpOiBQYWdpbmF0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFnZVNpemU6IDEwLFxuICAgICAgY3VycmVudFBhZ2U6IDFcbiAgICB9O1xuICB9XG5cbiAgZ2V0SW5maW5pdGVTY3JvbGxQYWdpbmF0aW9uKCk6IFBhZ2luYXRpb24ge1xuICAgIHJldHVybiB7XG4gICAgICBwYWdlU2l6ZTogNTAsXG4gICAgICBjdXJyZW50UGFnZTogMVxuICAgIH07XG4gIH1cblxuICBnZXREZWZhdWx0QWN0aW9uQ29udHJvbHMoKTogQWN0aW9uQ29udHJvbFtdIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICB0eXBlOiBEZXZpY2VHcmlkQWN0aW9uVHlwZS5EZWxldGUsXG4gICAgICAgIGNhbGxiYWNrOiAoaXRlbTogUm93KSA9PiB0aGlzLmRlbGV0ZShpdGVtIGFzIElNYW5hZ2VkT2JqZWN0KVxuICAgICAgfVxuICAgIF07XG4gIH1cblxuICBnZXREZWZhdWx0QnVsa0FjdGlvbkNvbnRyb2xzKCk6IEJ1bGtBY3Rpb25Db250cm9sW10ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGdldFByb3Blck5hbWUoZGV2aWNlOiBJTWFuYWdlZE9iamVjdCk6IHN0cmluZyB7XG4gICAgY29uc3QgeyBpZCwgbmFtZSB9ID0gZGV2aWNlO1xuICAgIHJldHVybiBuYW1lID8gbmFtZSA6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdEZXZpY2Uge3tpZH19JywgeyBpZCB9KTtcbiAgfVxuXG4gIGdldE1vZGVsKGRldmljZTogSU1hbmFnZWRPYmplY3QpOiBzdHJpbmcge1xuICAgIGNvbnN0IGhhcmR3YXJlID0gdGhpcy5nZXRIYXJkd2FyZShkZXZpY2UpO1xuICAgIHJldHVybiBoYXJkd2FyZSAmJiBoYXJkd2FyZS5tb2RlbDtcbiAgfVxuXG4gIGdldFNlcmlhbE51bWJlcihkZXZpY2U6IElNYW5hZ2VkT2JqZWN0KTogc3RyaW5nIHtcbiAgICBjb25zdCBoYXJkd2FyZSA9IHRoaXMuZ2V0SGFyZHdhcmUoZGV2aWNlKTtcbiAgICBjb25zdCBzZXJpYWxQcm9wZXJ0eU5hbWUgPSB0aGlzLmlzVmVuZG1lKGRldmljZSkgPyAnc2VyaWFsJyA6ICdzZXJpYWxOdW1iZXInO1xuICAgIHJldHVybiBoYXJkd2FyZSAmJiBoYXJkd2FyZVtzZXJpYWxQcm9wZXJ0eU5hbWVdO1xuICB9XG5cbiAgZ2V0UGFyZW50c05hbWVzKGRldmljZTogSU1hbmFnZWRPYmplY3QsIGZlYXR1cmVkUGFyZW50SWQ/OiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IGFzc2V0UGFyZW50c1JlZmVyZW5jZXMgPSBkZXZpY2UuYXNzZXRQYXJlbnRzLnJlZmVyZW5jZXM7XG4gICAgY29uc3QgYXNzZXRQYXJlbnRzID0gbWFwKGFzc2V0UGFyZW50c1JlZmVyZW5jZXMsICdtYW5hZ2VkT2JqZWN0Jyk7XG4gICAgY29uc3Qgc29ydGVkQnlOYW1lID0gc29ydEJ5KGFzc2V0UGFyZW50cywgWyduYW1lJ10pO1xuICAgIGNvbnN0IGZlYXR1cmVkSXRlbXMgPSByZW1vdmUoc29ydGVkQnlOYW1lLCB7IGlkOiBmZWF0dXJlZFBhcmVudElkIH0pO1xuICAgIGNvbnN0IGl0ZW1zID0gZmVhdHVyZWRJdGVtcy5jb25jYXQoc29ydGVkQnlOYW1lKTtcbiAgICBjb25zdCBuYW1lcyA9IG1hcChpdGVtcywgJ25hbWUnKTtcbiAgICByZXR1cm4gbmFtZXMuam9pbignLCAnKTtcbiAgfVxuXG4gIGdldEhyZWYoZ3JvdXBPckRldmljZTogSU1hbmFnZWRPYmplY3QsIHByZWZpeCA9ICcjLycpOiBzdHJpbmcge1xuICAgIGlmIChncm91cE9yRGV2aWNlLmM4eV9Jc0RldmljZUdyb3VwIHx8IGdyb3VwT3JEZXZpY2UuYzh5X0lzRHluYW1pY0dyb3VwKSB7XG4gICAgICByZXR1cm4gYCR7cHJlZml4fWdyb3VwLyR7Z3JvdXBPckRldmljZS5pZH1gO1xuICAgIH1cbiAgICByZXR1cm4gYCR7cHJlZml4fWRldmljZS8ke2dyb3VwT3JEZXZpY2UuaWR9YDtcbiAgfVxuXG4gIGdldEFsYXJtc0hyZWYoZGV2aWNlOiBJTWFuYWdlZE9iamVjdCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuZ2V0SHJlZihkZXZpY2UpfS9hbGFybXNgO1xuICB9XG5cbiAgZ2V0VXNlckNvbmZpZ3VyZWRDb2x1bW5zKGNvbHVtbnM6IENvbHVtbltdKSB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5nZXRDb25maWcoKTtcbiAgICBpZiAoY29uZmlnLmNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgcmVPcmRlcmVkQ29sdW1ucyA9IFtdO1xuICAgICAgbGV0IG5vQ29uZmlnQ29sdW1ucyA9IFtdO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbm9Db25maWdDb2x1bW5zID0gY29sdW1ucy5maWx0ZXIoY29sID0+ICFjb25maWcuY29sdW1ucy5pbmNsdWRlcyhjb2wpKTtcbiAgICAgICAgY29uZmlnLmNvbHVtbnMuZm9yRWFjaCgoeyB2aXNpYmxlLCBuYW1lLCBzb3J0T3JkZXIgfSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbHVtblRvUmVvcmRlciA9IGNvbHVtbnMuZmluZChjb2wgPT4gY29sLm5hbWUgPT09IG5hbWUpO1xuICAgICAgICAgIGlmIChjb2x1bW5Ub1Jlb3JkZXIpIHtcbiAgICAgICAgICAgIGNvbHVtblRvUmVvcmRlci52aXNpYmxlID0gdmlzaWJsZTtcbiAgICAgICAgICAgIGNvbHVtblRvUmVvcmRlci5zb3J0T3JkZXIgPSBzb3J0T3JkZXI7XG4gICAgICAgICAgICByZU9yZGVyZWRDb2x1bW5zLnB1c2goY29sdW1uVG9SZW9yZGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgdGhpcy5jbGVhckNvbmZpZygpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFsuLi5yZU9yZGVyZWRDb2x1bW5zLCAuLi5ub0NvbmZpZ0NvbHVtbnNdO1xuICAgIH1cbiAgICByZXR1cm4gY29sdW1ucztcbiAgfVxuXG4gIGRlbGV0ZShkZXZpY2U6IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgY29uc29sZS5sb2coJ3Nob3VsZCBkZWxldGUnLCBkZXZpY2UpO1xuICB9XG5cbiAgYXN5bmMgZ2V0RGF0YShcbiAgICBjb2x1bW5zOiBEZXZpY2VHcmlkQ29sdW1uW10sXG4gICAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbixcbiAgICBxdWVyeTogYW55ID0ge30sXG4gICAgd2l0aENoaWxkcmVuOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgY29uc3QgZmlsdGVycyA9IHtcbiAgICAgIC4uLnRoaXMuZ2V0RGV2aWNlc0ZpbHRlcnMoY29sdW1ucywgcGFnaW5hdGlvbiwgcXVlcnkpLFxuICAgICAgd2l0aFBhcmVudHM6IHRydWUsXG4gICAgICB3aXRoQ2hpbGRyZW5cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeVNlcnZpY2UubGlzdChmaWx0ZXJzKTtcbiAgfVxuXG4gIGFzeW5jIGdldENvdW50KGNvbHVtbnM6IERldmljZUdyaWRDb2x1bW5bXSwgcGFnaW5hdGlvbjogUGFnaW5hdGlvbiwgcXVlcnk6IGFueSA9IHt9KSB7XG4gICAgY29uc3QgZmlsdGVycyA9IHtcbiAgICAgIC4uLnRoaXMuZ2V0RGV2aWNlc0ZpbHRlcnMoY29sdW1ucywgcGFnaW5hdGlvbiwgcXVlcnkpLFxuICAgICAgcGFnZVNpemU6IDEsXG4gICAgICBjdXJyZW50UGFnZTogMVxuICAgIH07XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmludmVudG9yeVNlcnZpY2UubGlzdChmaWx0ZXJzKSkucGFnaW5nLnRvdGFsUGFnZXM7XG4gIH1cblxuICBhc3luYyBnZXRUb3RhbChxdWVyeTogYW55ID0ge30pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IGZpbHRlcnMgPSB7XG4gICAgICBxOiB0aGlzLnF1ZXJpZXNVdGlsLmJ1aWxkUXVlcnkocXVlcnkpLFxuICAgICAgcGFnZVNpemU6IDEsXG4gICAgICB3aXRoVG90YWxQYWdlczogdHJ1ZVxuICAgIH07XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmludmVudG9yeVNlcnZpY2UubGlzdChmaWx0ZXJzKSkucGFnaW5nLnRvdGFsUGFnZXM7XG4gIH1cblxuICBnZXREZXZpY2VRdWVyeVN0cmluZyhjb2x1bW5zOiBEZXZpY2VHcmlkQ29sdW1uW10sIHF1ZXJ5OiBhbnkpOiBzdHJpbmcge1xuICAgIGxldCBmdWxsUXVlcnkgPSB0aGlzLmdldFF1ZXJ5T2JqKGNvbHVtbnMpO1xuICAgIGZ1bGxRdWVyeSA9IHRoaXMucXVlcmllc1V0aWwuYWRkQW5kRmlsdGVyKGZ1bGxRdWVyeSwgcXVlcnkpO1xuICAgIHJldHVybiB0aGlzLnF1ZXJpZXNVdGlsLmJ1aWxkUXVlcnkoZnVsbFF1ZXJ5KTtcbiAgfVxuXG4gIGdldFF1ZXJ5T2JqKGNvbHVtbnM6IERldmljZUdyaWRDb2x1bW5bXSwgZGVmYXVsdEZpbHRlciA9IHt9KTogYW55IHtcbiAgICByZXR1cm4gdHJhbnNmb3JtKGNvbHVtbnMsIChxdWVyeSwgY29sdW1uKSA9PiB0aGlzLmV4dGVuZFF1ZXJ5QnlDb2x1bW4ocXVlcnksIGNvbHVtbiksIHtcbiAgICAgIF9fZmlsdGVyOiB7fSxcbiAgICAgIF9fb3JkZXJieTogW10sXG4gICAgICAuLi5kZWZhdWx0RmlsdGVyXG4gICAgfSk7XG4gIH1cblxuICBnZXRDb25maWcoa2V5OiBzdHJpbmcgPSB0aGlzLkdSSURfQ09ORklHX0RFRkFVTFRfU1RPUkFHRV9LRVkpOiBHcmlkQ29uZmlnIHtcbiAgICBjb25zdCBjb25maWcgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSkpO1xuICAgIGlmIChjb25maWcgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB7IGNvbHVtbnM6IFtdLCBwYWdpbmF0aW9uOiB7IHBhZ2VTaXplOiB0aGlzLkRFRkFVTFRfUEFHRV9TSVpFLCBjdXJyZW50UGFnZTogMSB9IH07XG4gICAgfVxuICAgIHJldHVybiBjb25maWcgYXMgR3JpZENvbmZpZztcbiAgfVxuXG4gIHNhdmVDb25maWcoY29uZmlnOiBHcmlkQ29uZmlnLCBrZXk6IHN0cmluZyA9IHRoaXMuR1JJRF9DT05GSUdfREVGQVVMVF9TVE9SQUdFX0tFWSkge1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7XG4gIH1cblxuICBjbGVhckNvbmZpZyhrZXk6IHN0cmluZyA9IHRoaXMuR1JJRF9DT05GSUdfREVGQVVMVF9TVE9SQUdFX0tFWSkge1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XG4gIH1cblxuICBwcml2YXRlIGdldEhhcmR3YXJlKGRldmljZTogSU1hbmFnZWRPYmplY3QpOiBhbnkge1xuICAgIGNvbnN0IGhhcmR3YXJlUHJvcGVydHlOYW1lID0gdGhpcy5pc1ZlbmRtZShkZXZpY2UpXG4gICAgICA/ICdjb21fbnNuX3N0YXJ0dXBzX3ZlbmRtZV9mcmFnbWVudHNfVmVuZGluZ01hY2hpbmVUeXBlSW5mbydcbiAgICAgIDogJ2M4eV9IYXJkd2FyZSc7XG4gICAgcmV0dXJuIGRldmljZSAmJiBkZXZpY2VbaGFyZHdhcmVQcm9wZXJ0eU5hbWVdO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1ZlbmRtZShkZXZpY2U6IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgcmV0dXJuIGRldmljZS50eXBlID09PSAnY29tX25zbl9zdGFydHVwc192ZW5kbWVfVmVuZGluZ01hY2hpbmUnO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZXZpY2VzRmlsdGVycyhjb2x1bW5zOiBEZXZpY2VHcmlkQ29sdW1uW10sIHBhZ2luYXRpb246IFBhZ2luYXRpb24sIHF1ZXJ5OiBhbnkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcTogdGhpcy5nZXREZXZpY2VRdWVyeVN0cmluZyhjb2x1bW5zLCBxdWVyeSksXG4gICAgICBwYWdlU2l6ZTogcGFnaW5hdGlvbi5wYWdlU2l6ZSxcbiAgICAgIGN1cnJlbnRQYWdlOiBwYWdpbmF0aW9uLmN1cnJlbnRQYWdlLFxuICAgICAgd2l0aENoaWxkcmVuOiBmYWxzZSxcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0ZW5kUXVlcnlCeUNvbHVtbihxdWVyeTogYW55LCBjb2x1bW46IERldmljZUdyaWRDb2x1bW4pOiB2b2lkIHtcbiAgICBpZiAoY29sdW1uLmZpbHRlcmFibGUgJiYgY29sdW1uLmV4dGVybmFsRmlsdGVyUXVlcnkpIHtcbiAgICAgIGNvbnN0IGdldEZpbHRlciA9IGNvbHVtbi5maWx0ZXJpbmdDb25maWcuZ2V0RmlsdGVyIHx8IGlkZW50aXR5O1xuICAgICAgY29uc3QgcXVlcnlPYmogPSBnZXRGaWx0ZXIoY29sdW1uLmV4dGVybmFsRmlsdGVyUXVlcnkpO1xuXG4gICAgICBpZiAocXVlcnlPYmouX19vcikge1xuICAgICAgICBxdWVyeS5fX2ZpbHRlci5fX2FuZCA9IHF1ZXJ5Ll9fZmlsdGVyLl9fYW5kIHx8IFtdO1xuICAgICAgICBxdWVyeS5fX2ZpbHRlci5fX2FuZC5wdXNoKHF1ZXJ5T2JqKTtcbiAgICAgIH0gZWxzZSBpZiAocXVlcnlPYmouX19hbmQgJiYgZ2V0KHF1ZXJ5LCAnX19maWx0ZXIuX19hbmQnKSkge1xuICAgICAgICBxdWVyeU9iai5fX2FuZC5tYXAob2JqID0+IHF1ZXJ5Ll9fZmlsdGVyLl9fYW5kLnB1c2gob2JqKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhc3NpZ24ocXVlcnkuX19maWx0ZXIsIHF1ZXJ5T2JqKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29sdW1uLnNvcnRhYmxlICYmIGNvbHVtbi5zb3J0T3JkZXIpIHtcbiAgICAgIGNvbnN0IGNzID0ge307XG4gICAgICBmb3JFYWNoKGNvbHVtbi5zb3J0aW5nQ29uZmlnLnBhdGhTb3J0aW5nQ29uZmlncywgcGF0aFNvcnRpbmdDb25maWcgPT4ge1xuICAgICAgICBjc1twYXRoU29ydGluZ0NvbmZpZy5wYXRoXSA9XG4gICAgICAgICAgKGNvbHVtbi5zb3J0T3JkZXIgPT09ICdhc2MnID8gMSA6IC0xKSAqIChwYXRoU29ydGluZ0NvbmZpZy5zb3J0T3JkZXJNb2RpZmllciB8fCAxKTtcbiAgICAgIH0pO1xuICAgICAgcXVlcnkuX19vcmRlcmJ5LnB1c2goY3MpO1xuICAgIH1cbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cbn1cbiJdfQ==
248
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLWdyaWQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2RldmljZS1ncmlkL2RldmljZS1ncmlkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFrQixnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUUsT0FBTyxFQUtMLFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLE9BQU8sR0FHUixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzNGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzFGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBSWxGLE1BQU0sT0FBTyxpQkFBaUI7SUFLNUIs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QkFBZ0I7WUFhaEMsZ0JBQWdCO1lBUHZCLFlBQVk7WUFDWixZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3QsIEludmVudG9yeVNlcnZpY2UsIFF1ZXJpZXNVdGlsIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWN0aW9uQ29udHJvbCxcbiAgQnVsa0FjdGlvbkNvbnRyb2wsXG4gIENvbHVtbixcbiAgR3JpZENvbmZpZyxcbiAgQWxlcnRTZXJ2aWNlLFxuICBNb2RhbFNlcnZpY2UsXG4gIFN0YXR1cyxcbiAgZ2V0dGV4dCxcbiAgUGFnaW5hdGlvbixcbiAgUm93LFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGFzc2lnbiwgZm9yRWFjaCwgZ2V0LCBpZGVudGl0eSwgbWFwLCByZW1vdmUsIHNvcnRCeSwgdHJhbnNmb3JtIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEFsYXJtc0RldmljZUdyaWRDb2x1bW4gfSBmcm9tICcuL2NvbHVtbnMvYWxhcm1zLmRldmljZS1ncmlkLWNvbHVtbic7XG5pbXBvcnQgeyBHcm91cERldmljZUdyaWRDb2x1bW4gfSBmcm9tICcuL2NvbHVtbnMvZ3JvdXAuZGV2aWNlLWdyaWQtY29sdW1uJztcbmltcG9ydCB7IEltZWlEZXZpY2VHcmlkQ29sdW1uIH0gZnJvbSAnLi9jb2x1bW5zL2ltZWkuZGV2aWNlLWdyaWQtY29sdW1uJztcbmltcG9ydCB7IE1vZGVsRGV2aWNlR3JpZENvbHVtbiB9IGZyb20gJy4vY29sdW1ucy9tb2RlbC5kZXZpY2UtZ3JpZC1jb2x1bW4nO1xuaW1wb3J0IHsgTmFtZURldmljZUdyaWRDb2x1bW4gfSBmcm9tICcuL2NvbHVtbnMvbmFtZS5kZXZpY2UtZ3JpZC1jb2x1bW4nO1xuaW1wb3J0IHsgUmVnaXN0cmF0aW9uRGF0ZURldmljZUdyaWRDb2x1bW4gfSBmcm9tICcuL2NvbHVtbnMvcmVnaXN0cmF0aW9uLWRhdGUuZGV2aWNlLWdyaWQtY29sdW1uJztcbmltcG9ydCB7IFNlcmlhbE51bWJlckRldmljZUdyaWRDb2x1bW4gfSBmcm9tICcuL2NvbHVtbnMvc2VyaWFsLW51bWJlci5kZXZpY2UtZ3JpZC1jb2x1bW4nO1xuaW1wb3J0IHsgU3RhdHVzRGV2aWNlR3JpZENvbHVtbiB9IGZyb20gJy4vY29sdW1ucy9zdGF0dXMuZGV2aWNlLWdyaWQtY29sdW1uJztcbmltcG9ydCB7IFN5c3RlbUlkRGV2aWNlR3JpZENvbHVtbiB9IGZyb20gJy4vY29sdW1ucy9zeXN0ZW0taWQuZGV2aWNlLWdyaWQtY29sdW1uJztcbmltcG9ydCB7IERldmljZUdyaWRBY3Rpb25UeXBlLCBEZXZpY2VHcmlkQ29sdW1uIH0gZnJvbSAnLi9kZXZpY2UtZ3JpZC5tb2RlbHMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGV2aWNlR3JpZFNlcnZpY2Uge1xuICBwcm90ZWN0ZWQgcXVlcmllc1V0aWw6IFF1ZXJpZXNVdGlsO1xuICBwcm90ZWN0ZWQgR1JJRF9DT05GSUdfREVGQVVMVF9TVE9SQUdFX0tFWSA9ICdkZXZpY2UtZ3JpZC1jb25maWcnO1xuICBwcm90ZWN0ZWQgREVGQVVMVF9QQUdFX1NJWkUgPSAyMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgaW52ZW50b3J5U2VydmljZTogSW52ZW50b3J5U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG1vZGFsOiBNb2RhbFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5xdWVyaWVzVXRpbCA9IG5ldyBRdWVyaWVzVXRpbCgpO1xuICB9XG5cbiAgZ2V0RGVmYXVsdENvbHVtbnMoKTogRGV2aWNlR3JpZENvbHVtbltdIHtcbiAgICBjb25zdCBkZWZhdWx0Q29sdW1ucyA9IFtcbiAgICAgIG5ldyBTdGF0dXNEZXZpY2VHcmlkQ29sdW1uKCksXG4gICAgICBuZXcgTmFtZURldmljZUdyaWRDb2x1bW4oKSxcbiAgICAgIG5ldyBNb2RlbERldmljZUdyaWRDb2x1bW4oKSxcbiAgICAgIG5ldyBTZXJpYWxOdW1iZXJEZXZpY2VHcmlkQ29sdW1uKCksXG4gICAgICBuZXcgR3JvdXBEZXZpY2VHcmlkQ29sdW1uKCksXG4gICAgICBuZXcgUmVnaXN0cmF0aW9uRGF0ZURldmljZUdyaWRDb2x1bW4oKSxcbiAgICAgIG5ldyBTeXN0ZW1JZERldmljZUdyaWRDb2x1bW4oKSxcbiAgICAgIG5ldyBJbWVpRGV2aWNlR3JpZENvbHVtbigpLFxuICAgICAgbmV3IEFsYXJtc0RldmljZUdyaWRDb2x1bW4oKSxcbiAgICBdO1xuXG4gICAgcmV0dXJuIGRlZmF1bHRDb2x1bW5zO1xuICB9XG5cbiAgZ2V0RGVmYXVsdFBhZ2luYXRpb24oKTogUGFnaW5hdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2VTaXplOiAxMCxcbiAgICAgIGN1cnJlbnRQYWdlOiAxLFxuICAgIH07XG4gIH1cblxuICBnZXRJbmZpbml0ZVNjcm9sbFBhZ2luYXRpb24oKTogUGFnaW5hdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2VTaXplOiA1MCxcbiAgICAgIGN1cnJlbnRQYWdlOiAxLFxuICAgIH07XG4gIH1cblxuICBnZXREZWZhdWx0QWN0aW9uQ29udHJvbHMoKTogQWN0aW9uQ29udHJvbFtdIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICB0eXBlOiBEZXZpY2VHcmlkQWN0aW9uVHlwZS5EZWxldGUsXG4gICAgICAgIGNhbGxiYWNrOiAoaXRlbTogUm93KSA9PiB0aGlzLmRlbGV0ZShpdGVtIGFzIElNYW5hZ2VkT2JqZWN0KSxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuXG4gIGdldERlZmF1bHRCdWxrQWN0aW9uQ29udHJvbHMoKTogQnVsa0FjdGlvbkNvbnRyb2xbXSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZ2V0UHJvcGVyTmFtZShkZXZpY2U6IElNYW5hZ2VkT2JqZWN0KTogc3RyaW5nIHtcbiAgICBjb25zdCB7IGlkLCBuYW1lIH0gPSBkZXZpY2U7XG4gICAgcmV0dXJuIG5hbWUgPyBuYW1lIDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0RldmljZSB7e2lkfX0nLCB7IGlkIH0pO1xuICB9XG5cbiAgZ2V0TW9kZWwoZGV2aWNlOiBJTWFuYWdlZE9iamVjdCk6IHN0cmluZyB7XG4gICAgY29uc3QgaGFyZHdhcmUgPSB0aGlzLmdldEhhcmR3YXJlKGRldmljZSk7XG4gICAgcmV0dXJuIGhhcmR3YXJlICYmIGhhcmR3YXJlLm1vZGVsO1xuICB9XG5cbiAgZ2V0U2VyaWFsTnVtYmVyKGRldmljZTogSU1hbmFnZWRPYmplY3QpOiBzdHJpbmcge1xuICAgIGNvbnN0IGhhcmR3YXJlID0gdGhpcy5nZXRIYXJkd2FyZShkZXZpY2UpO1xuICAgIGNvbnN0IHNlcmlhbFByb3BlcnR5TmFtZSA9IHRoaXMuaXNWZW5kbWUoZGV2aWNlKSA/ICdzZXJpYWwnIDogJ3NlcmlhbE51bWJlcic7XG4gICAgcmV0dXJuIGhhcmR3YXJlICYmIGhhcmR3YXJlW3NlcmlhbFByb3BlcnR5TmFtZV07XG4gIH1cblxuICBnZXRQYXJlbnRzTmFtZXMoZGV2aWNlOiBJTWFuYWdlZE9iamVjdCwgZmVhdHVyZWRQYXJlbnRJZD86IHN0cmluZyB8IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgYXNzZXRQYXJlbnRzUmVmZXJlbmNlcyA9IGRldmljZS5hc3NldFBhcmVudHMucmVmZXJlbmNlcztcbiAgICBjb25zdCBhc3NldFBhcmVudHMgPSBtYXAoYXNzZXRQYXJlbnRzUmVmZXJlbmNlcywgJ21hbmFnZWRPYmplY3QnKTtcbiAgICBjb25zdCBzb3J0ZWRCeU5hbWUgPSBzb3J0QnkoYXNzZXRQYXJlbnRzLCBbJ25hbWUnXSk7XG4gICAgY29uc3QgZmVhdHVyZWRJdGVtcyA9IHJlbW92ZShzb3J0ZWRCeU5hbWUsIHsgaWQ6IGZlYXR1cmVkUGFyZW50SWQgfSk7XG4gICAgY29uc3QgaXRlbXMgPSBmZWF0dXJlZEl0ZW1zLmNvbmNhdChzb3J0ZWRCeU5hbWUpO1xuICAgIGNvbnN0IG5hbWVzID0gbWFwKGl0ZW1zLCAnbmFtZScpO1xuICAgIHJldHVybiBuYW1lcy5qb2luKCcsICcpO1xuICB9XG5cbiAgZ2V0SHJlZihncm91cE9yRGV2aWNlOiBJTWFuYWdlZE9iamVjdCwgcHJlZml4ID0gJyMvJyk6IHN0cmluZyB7XG4gICAgaWYgKGdyb3VwT3JEZXZpY2UuYzh5X0lzRGV2aWNlR3JvdXAgfHwgZ3JvdXBPckRldmljZS5jOHlfSXNEeW5hbWljR3JvdXApIHtcbiAgICAgIHJldHVybiBgJHtwcmVmaXh9Z3JvdXAvJHtncm91cE9yRGV2aWNlLmlkfWA7XG4gICAgfVxuICAgIHJldHVybiBgJHtwcmVmaXh9ZGV2aWNlLyR7Z3JvdXBPckRldmljZS5pZH1gO1xuICB9XG5cbiAgZ2V0QWxhcm1zSHJlZihkZXZpY2U6IElNYW5hZ2VkT2JqZWN0KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5nZXRIcmVmKGRldmljZSl9L2FsYXJtc2A7XG4gIH1cblxuICBnZXRVc2VyQ29uZmlndXJlZENvbHVtbnMoY29sdW1uczogQ29sdW1uW10pIHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmdldENvbmZpZygpO1xuICAgIGlmIChjb25maWcuY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCByZU9yZGVyZWRDb2x1bW5zID0gW107XG4gICAgICBsZXQgbm9Db25maWdDb2x1bW5zID0gW107XG4gICAgICB0cnkge1xuICAgICAgICBub0NvbmZpZ0NvbHVtbnMgPSBjb2x1bW5zLmZpbHRlcigoY29sKSA9PiAhY29uZmlnLmNvbHVtbnMuaW5jbHVkZXMoY29sKSk7XG4gICAgICAgIGNvbmZpZy5jb2x1bW5zLmZvckVhY2goKHsgdmlzaWJsZSwgbmFtZSwgc29ydE9yZGVyIH0pID0+IHtcbiAgICAgICAgICBjb25zdCBjb2x1bW5Ub1Jlb3JkZXIgPSBjb2x1bW5zLmZpbmQoKGNvbCkgPT4gY29sLm5hbWUgPT09IG5hbWUpO1xuICAgICAgICAgIGlmIChjb2x1bW5Ub1Jlb3JkZXIpIHtcbiAgICAgICAgICAgIGNvbHVtblRvUmVvcmRlci52aXNpYmxlID0gdmlzaWJsZTtcbiAgICAgICAgICAgIGNvbHVtblRvUmVvcmRlci5zb3J0T3JkZXIgPSBzb3J0T3JkZXI7XG4gICAgICAgICAgICByZU9yZGVyZWRDb2x1bW5zLnB1c2goY29sdW1uVG9SZW9yZGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgdGhpcy5jbGVhckNvbmZpZygpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFsuLi5yZU9yZGVyZWRDb2x1bW5zLCAuLi5ub0NvbmZpZ0NvbHVtbnNdO1xuICAgIH1cbiAgICByZXR1cm4gY29sdW1ucztcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZShkZXZpY2U6IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubW9kYWwuY29uZmlybShcbiAgICAgICAgZ2V0dGV4dCgnRGVsZXRlIGRldmljZScpLFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICBnZXR0ZXh0KGBZb3UgYXJlIGFib3V0IHRvIGRlbGV0ZSBkZXZpY2U6IFwie3sgbmFtZSB9fVwiLiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkP2ApLFxuICAgICAgICAgIHsgbmFtZTogZGV2aWNlLm5hbWUgfVxuICAgICAgICApLFxuICAgICAgICBTdGF0dXMuREFOR0VSLFxuICAgICAgICB7IG9rOiBnZXR0ZXh0KCdEZWxldGUnKSwgY2FuY2VsOiBnZXR0ZXh0KCdDYW5jZWwnKSB9XG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmRlbGV0ZShkZXZpY2UpO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdEZXZpY2UgZGVsZXRlZC4nKSk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIC8vIG9ubHkgaWYgbm90IGNhbmNlbCBmcm9tIG1vZGFsXG5cbiAgICAgIGlmIChleCkge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGV4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXREYXRhKFxuICAgIGNvbHVtbnM6IERldmljZUdyaWRDb2x1bW5bXSxcbiAgICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uLFxuICAgIHF1ZXJ5OiBhbnkgPSB7fSxcbiAgICB3aXRoQ2hpbGRyZW46IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgICBjb25zdCBmaWx0ZXJzID0ge1xuICAgICAgLi4udGhpcy5nZXREZXZpY2VzRmlsdGVycyhjb2x1bW5zLCBwYWdpbmF0aW9uLCBxdWVyeSksXG4gICAgICB3aXRoUGFyZW50czogdHJ1ZSxcbiAgICAgIHdpdGhDaGlsZHJlbixcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeVNlcnZpY2UubGlzdChmaWx0ZXJzKTtcbiAgfVxuXG4gIGFzeW5jIGdldENoaWxkRGV2aWNlRGF0YShcbiAgICBjb2x1bW5zOiBEZXZpY2VHcmlkQ29sdW1uW10sXG4gICAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbixcbiAgICBxdWVyeTogYW55ID0ge30sXG4gICAgd2l0aENoaWxkcmVuOiBib29sZWFuID0gZmFsc2UsXG4gICAgaWQ6IHN0cmluZ1xuICApIHtcbiAgICBjb25zdCBjaGlsZERldmljZUZpbHRlcnMgPSB0cnVlO1xuICAgIGNvbnN0IGZpbHRlcnMgPSB7XG4gICAgICAuLi50aGlzLmdldERldmljZXNGaWx0ZXJzKGNvbHVtbnMsIHBhZ2luYXRpb24sIHF1ZXJ5LCBjaGlsZERldmljZUZpbHRlcnMpLFxuICAgICAgd2l0aFBhcmVudHM6IHRydWUsXG4gICAgICB3aXRoQ2hpbGRyZW4sXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmNoaWxkRGV2aWNlc0xpc3QoaWQsIGZpbHRlcnMpO1xuICB9XG5cbiAgYXN5bmMgZ2V0Q291bnQoY29sdW1uczogRGV2aWNlR3JpZENvbHVtbltdLCBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uLCBxdWVyeTogYW55ID0ge30pIHtcbiAgICBjb25zdCBmaWx0ZXJzID0ge1xuICAgICAgLi4udGhpcy5nZXREZXZpY2VzRmlsdGVycyhjb2x1bW5zLCBwYWdpbmF0aW9uLCBxdWVyeSksXG4gICAgICBwYWdlU2l6ZTogMSxcbiAgICAgIGN1cnJlbnRQYWdlOiAxLFxuICAgIH07XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmludmVudG9yeVNlcnZpY2UubGlzdChmaWx0ZXJzKSkucGFnaW5nLnRvdGFsUGFnZXM7XG4gIH1cblxuICBhc3luYyBnZXRDb3VudENoaWxkRGV2aWNlcyhcbiAgICBjb2x1bW5zOiBEZXZpY2VHcmlkQ29sdW1uW10sXG4gICAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbixcbiAgICBxdWVyeTogYW55ID0ge30sXG4gICAgaWQ6IHN0cmluZ1xuICApIHtcbiAgICBjb25zdCBjaGlsZERldmljZUZpbHRlcnMgPSB0cnVlO1xuICAgIGNvbnN0IGZpbHRlcnMgPSB7XG4gICAgICAuLi50aGlzLmdldERldmljZXNGaWx0ZXJzKGNvbHVtbnMsIHBhZ2luYXRpb24sIHF1ZXJ5LCBjaGlsZERldmljZUZpbHRlcnMpLFxuICAgICAgcGFnZVNpemU6IDEsXG4gICAgICBjdXJyZW50UGFnZTogMSxcbiAgICB9O1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmNoaWxkRGV2aWNlc0xpc3QoaWQsIGZpbHRlcnMpKS5wYWdpbmcudG90YWxQYWdlcztcbiAgfVxuXG4gIGFzeW5jIGdldFRvdGFsQ2hpbGREZXZpY2VzKHF1ZXJ5OiBhbnkgPSB7fSwgaWQ6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgZmlsdGVycyA9IHtcbiAgICAgIHE6IHRoaXMucXVlcmllc1V0aWwuYnVpbGRRdWVyeShxdWVyeSksXG4gICAgICBwYWdlU2l6ZTogMSxcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlLFxuICAgIH07XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmludmVudG9yeVNlcnZpY2UuY2hpbGREZXZpY2VzTGlzdChpZCwgZmlsdGVycykpLnBhZ2luZy50b3RhbFBhZ2VzO1xuICB9XG5cbiAgYXN5bmMgZ2V0VG90YWwocXVlcnk6IGFueSA9IHt9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBmaWx0ZXJzID0ge1xuICAgICAgcTogdGhpcy5xdWVyaWVzVXRpbC5idWlsZFF1ZXJ5KHF1ZXJ5KSxcbiAgICAgIHBhZ2VTaXplOiAxLFxuICAgICAgd2l0aFRvdGFsUGFnZXM6IHRydWUsXG4gICAgfTtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5saXN0KGZpbHRlcnMpKS5wYWdpbmcudG90YWxQYWdlcztcbiAgfVxuXG4gIGdldERldmljZVF1ZXJ5U3RyaW5nKGNvbHVtbnM6IERldmljZUdyaWRDb2x1bW5bXSwgcXVlcnk6IGFueSk6IHN0cmluZyB7XG4gICAgbGV0IGZ1bGxRdWVyeSA9IHRoaXMuZ2V0UXVlcnlPYmooY29sdW1ucyk7XG4gICAgZnVsbFF1ZXJ5ID0gdGhpcy5xdWVyaWVzVXRpbC5hZGRBbmRGaWx0ZXIoZnVsbFF1ZXJ5LCBxdWVyeSk7XG4gICAgcmV0dXJuIHRoaXMucXVlcmllc1V0aWwuYnVpbGRRdWVyeShmdWxsUXVlcnkpO1xuICB9XG5cbiAgZ2V0UXVlcnlPYmooY29sdW1uczogRGV2aWNlR3JpZENvbHVtbltdLCBkZWZhdWx0RmlsdGVyID0ge30pOiBhbnkge1xuICAgIHJldHVybiB0cmFuc2Zvcm0oY29sdW1ucywgKHF1ZXJ5LCBjb2x1bW4pID0+IHRoaXMuZXh0ZW5kUXVlcnlCeUNvbHVtbihxdWVyeSwgY29sdW1uKSwge1xuICAgICAgX19maWx0ZXI6IHt9LFxuICAgICAgX19vcmRlcmJ5OiBbXSxcbiAgICAgIC4uLmRlZmF1bHRGaWx0ZXIsXG4gICAgfSk7XG4gIH1cblxuICBnZXRDb25maWcoa2V5OiBzdHJpbmcgPSB0aGlzLkdSSURfQ09ORklHX0RFRkFVTFRfU1RPUkFHRV9LRVkpOiBHcmlkQ29uZmlnIHtcbiAgICBjb25zdCBjb25maWcgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSkpO1xuICAgIGlmIChjb25maWcgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB7IGNvbHVtbnM6IFtdLCBwYWdpbmF0aW9uOiB7IHBhZ2VTaXplOiB0aGlzLkRFRkFVTFRfUEFHRV9TSVpFLCBjdXJyZW50UGFnZTogMSB9IH07XG4gICAgfVxuICAgIHJldHVybiBjb25maWcgYXMgR3JpZENvbmZpZztcbiAgfVxuXG4gIHNhdmVDb25maWcoY29uZmlnOiBHcmlkQ29uZmlnLCBrZXk6IHN0cmluZyA9IHRoaXMuR1JJRF9DT05GSUdfREVGQVVMVF9TVE9SQUdFX0tFWSkge1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7XG4gIH1cblxuICBjbGVhckNvbmZpZyhrZXk6IHN0cmluZyA9IHRoaXMuR1JJRF9DT05GSUdfREVGQVVMVF9TVE9SQUdFX0tFWSkge1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XG4gIH1cblxuICBwcml2YXRlIGdldEhhcmR3YXJlKGRldmljZTogSU1hbmFnZWRPYmplY3QpOiBhbnkge1xuICAgIGNvbnN0IGhhcmR3YXJlUHJvcGVydHlOYW1lID0gdGhpcy5pc1ZlbmRtZShkZXZpY2UpXG4gICAgICA/ICdjb21fbnNuX3N0YXJ0dXBzX3ZlbmRtZV9mcmFnbWVudHNfVmVuZGluZ01hY2hpbmVUeXBlSW5mbydcbiAgICAgIDogJ2M4eV9IYXJkd2FyZSc7XG4gICAgcmV0dXJuIGRldmljZSAmJiBkZXZpY2VbaGFyZHdhcmVQcm9wZXJ0eU5hbWVdO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1ZlbmRtZShkZXZpY2U6IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgcmV0dXJuIGRldmljZS50eXBlID09PSAnY29tX25zbl9zdGFydHVwc192ZW5kbWVfVmVuZGluZ01hY2hpbmUnO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZXZpY2VzRmlsdGVycyhcbiAgICBjb2x1bW5zOiBEZXZpY2VHcmlkQ29sdW1uW10sXG4gICAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbixcbiAgICBxdWVyeTogYW55LFxuICAgIGNoaWxkRGV2aWNlRmlsdGVycz86IGJvb2xlYW5cbiAgKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLihjaGlsZERldmljZUZpbHRlcnNcbiAgICAgICAgPyB7IHF1ZXJ5OiB0aGlzLmdldERldmljZVF1ZXJ5U3RyaW5nKGNvbHVtbnMsIHF1ZXJ5KSB9XG4gICAgICAgIDogeyBxOiB0aGlzLmdldERldmljZVF1ZXJ5U3RyaW5nKGNvbHVtbnMsIHF1ZXJ5KSB9KSxcbiAgICAgIHBhZ2VTaXplOiBwYWdpbmF0aW9uLnBhZ2VTaXplLFxuICAgICAgY3VycmVudFBhZ2U6IHBhZ2luYXRpb24uY3VycmVudFBhZ2UsXG4gICAgICB3aXRoQ2hpbGRyZW46IGZhbHNlLFxuICAgICAgd2l0aFRvdGFsUGFnZXM6IHRydWUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0ZW5kUXVlcnlCeUNvbHVtbihxdWVyeTogYW55LCBjb2x1bW46IERldmljZUdyaWRDb2x1bW4pOiB2b2lkIHtcbiAgICBpZiAoY29sdW1uLmZpbHRlcmFibGUgJiYgY29sdW1uLmV4dGVybmFsRmlsdGVyUXVlcnkpIHtcbiAgICAgIGNvbnN0IGdldEZpbHRlciA9IGNvbHVtbi5maWx0ZXJpbmdDb25maWcuZ2V0RmlsdGVyIHx8IGlkZW50aXR5O1xuICAgICAgY29uc3QgcXVlcnlPYmogPSBnZXRGaWx0ZXIoY29sdW1uLmV4dGVybmFsRmlsdGVyUXVlcnkpO1xuXG4gICAgICBpZiAocXVlcnlPYmouX19vcikge1xuICAgICAgICBxdWVyeS5fX2ZpbHRlci5fX2FuZCA9IHF1ZXJ5Ll9fZmlsdGVyLl9fYW5kIHx8IFtdO1xuICAgICAgICBxdWVyeS5fX2ZpbHRlci5fX2FuZC5wdXNoKHF1ZXJ5T2JqKTtcbiAgICAgIH0gZWxzZSBpZiAocXVlcnlPYmouX19hbmQgJiYgZ2V0KHF1ZXJ5LCAnX19maWx0ZXIuX19hbmQnKSkge1xuICAgICAgICBxdWVyeU9iai5fX2FuZC5tYXAoKG9iaikgPT4gcXVlcnkuX19maWx0ZXIuX19hbmQucHVzaChvYmopKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFzc2lnbihxdWVyeS5fX2ZpbHRlciwgcXVlcnlPYmopO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2x1bW4uc29ydGFibGUgJiYgY29sdW1uLnNvcnRPcmRlcikge1xuICAgICAgY29uc3QgY3MgPSB7fTtcbiAgICAgIGZvckVhY2goY29sdW1uLnNvcnRpbmdDb25maWcucGF0aFNvcnRpbmdDb25maWdzLCAocGF0aFNvcnRpbmdDb25maWcpID0+IHtcbiAgICAgICAgY3NbcGF0aFNvcnRpbmdDb25maWcucGF0aF0gPVxuICAgICAgICAgIChjb2x1bW4uc29ydE9yZGVyID09PSAnYXNjJyA/IDEgOiAtMSkgKiAocGF0aFNvcnRpbmdDb25maWcuc29ydE9yZGVyTW9kaWZpZXIgfHwgMSk7XG4gICAgICB9KTtcbiAgICAgIHF1ZXJ5Ll9fb3JkZXJieS5wdXNoKGNzKTtcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXJ5O1xuICB9XG59XG4iXX0=