@c8y/ngx-components 1017.0.63 → 1017.0.65

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.
@@ -1,17 +1,18 @@
1
1
  import { Component, EventEmitter, Input, Output } from '@angular/core';
2
2
  import { gettext } from '@c8y/ngx-components';
3
- import { AdvancedSoftwareService, PRODUCT_EXPERIENCE } from '@c8y/ngx-components/repository/shared';
4
- import { filter, get, set } from 'lodash-es';
5
- import { BehaviorSubject, combineLatest, Observable, of } from 'rxjs';
6
- import { debounceTime, distinctUntilChanged, map, share, switchMap, tap } from 'rxjs/operators';
3
+ import { PRODUCT_EXPERIENCE } from '@c8y/ngx-components/repository/shared';
4
+ import { filter, get } from 'lodash-es';
5
+ import { BehaviorSubject, combineLatest, Observable, of, Subject } from 'rxjs';
6
+ import { debounceTime, distinctUntilChanged, map, share, switchMap, takeUntil, tap } from 'rxjs/operators';
7
+ import { DeviceSoftwareService } from './device-software.service';
7
8
  import * as i0 from "@angular/core";
8
- import * as i1 from "@c8y/ngx-components/repository/shared";
9
+ import * as i1 from "./device-software.service";
9
10
  import * as i2 from "@angular/common";
10
11
  import * as i3 from "@c8y/ngx-components";
11
12
  import * as i4 from "ngx-bootstrap/tooltip";
12
13
  export class DeviceSoftwareListComponent {
13
- constructor(advancedSoftwareService) {
14
- this.advancedSoftwareService = advancedSoftwareService;
14
+ constructor(deviceSoftwareService) {
15
+ this.deviceSoftwareService = deviceSoftwareService;
15
16
  this.PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE;
16
17
  this.filterCriteria$ = of(null);
17
18
  this.update = new EventEmitter();
@@ -21,6 +22,7 @@ export class DeviceSoftwareListComponent {
21
22
  this.supportsSoftwareOperations = false;
22
23
  this.operationTypes = ['c8y_SoftwareUpdate', 'c8y_SoftwareList', 'c8y_Software'];
23
24
  this.legacySoftwareList$ = new BehaviorSubject([]);
25
+ this.destroyed$ = new Subject();
24
26
  }
25
27
  set softwareList(softwareList) {
26
28
  if (softwareList !== null) {
@@ -31,20 +33,12 @@ export class DeviceSoftwareListComponent {
31
33
  this.softwareItems$ = combineLatest([
32
34
  this.filterCriteria$.pipe(debounceTime(300), distinctUntilChanged()),
33
35
  this.legacySoftwareList$
34
- ]).pipe(switchMap(([filterCriteria, legacySoftwareList]) => {
35
- if (legacySoftwareList) {
36
- return of(this.getLegacySoftwareList(filterCriteria)).pipe(map(resultList => ({ resultList, filterCriteria })));
37
- }
38
- else {
39
- return this.getAdvancedSoftwareList(filterCriteria).then(resultList => ({
40
- resultList,
41
- filterCriteria
42
- }));
43
- }
44
- }), tap(({ resultList, filterCriteria }) => {
36
+ ]).pipe(switchMap(([filterCriteria, legacySoftwareList]) => this.deviceSoftwareService
37
+ .getSoftwareList(this.device?.id, filterCriteria, legacySoftwareList)
38
+ .pipe(map(resultList => ({ resultList, filterCriteria })))), tap(({ resultList, filterCriteria }) => {
45
39
  this.notifyListEmpty(!resultList?.paging?.totalPages && !filterCriteria);
46
40
  this.noSearchResults = !resultList?.paging?.totalPages && !!filterCriteria;
47
- }), map(({ resultList }) => resultList), share());
41
+ }), map(({ resultList }) => resultList), share(), takeUntil(this.destroyed$));
48
42
  const supportedOperations = get(this.device, 'c8y_SupportedOperations', []);
49
43
  this.supportsSoftwareOperations = this.operationTypes.some(operationType => supportedOperations.indexOf(operationType) > -1);
50
44
  }
@@ -56,53 +50,21 @@ export class DeviceSoftwareListComponent {
56
50
  const relevantChanges = filter(this.deviceSoftwareChanges, software);
57
51
  return relevantChanges.length > 0;
58
52
  }
59
- getAdvancedSoftwareList(filterCriteria) {
60
- const queryFilter = {
61
- deviceId: this.device.id,
62
- currentPage: 1,
63
- pageSize: 50,
64
- withTotalPages: true
65
- };
66
- if (filterCriteria?.name) {
67
- set(queryFilter, 'name', `*${filterCriteria.name}*`);
68
- }
69
- if (filterCriteria?.softwareType) {
70
- set(queryFilter, 'type', `${filterCriteria.softwareType}`);
71
- }
72
- return this.advancedSoftwareService.list(queryFilter);
73
- }
74
- getLegacySoftwareList(filterCriteria) {
75
- const data = filterCriteria
76
- ? this.legacySoftwareList$.value.filter(item => {
77
- let match = true;
78
- if (filterCriteria?.name) {
79
- match = match && item.name?.includes(filterCriteria.name);
80
- }
81
- if (filterCriteria?.softwareType) {
82
- match = match && item.softwareType === filterCriteria.softwareType;
83
- }
84
- return match;
85
- })
86
- : this.legacySoftwareList$.value;
87
- return {
88
- data,
89
- res: null,
90
- paging: {
91
- totalPages: data.length
92
- }
93
- };
53
+ ngOnDestroy() {
54
+ this.destroyed$.next();
55
+ this.destroyed$.complete();
94
56
  }
95
57
  notifyListEmpty(isEmpty) {
96
58
  this.emptyList = isEmpty;
97
59
  this.onListEmpty.emit(isEmpty);
98
60
  }
99
61
  }
100
- DeviceSoftwareListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DeviceSoftwareListComponent, deps: [{ token: i1.AdvancedSoftwareService }], target: i0.ɵɵFactoryTarget.Component });
62
+ DeviceSoftwareListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DeviceSoftwareListComponent, deps: [{ token: i1.DeviceSoftwareService }], target: i0.ɵɵFactoryTarget.Component });
101
63
  DeviceSoftwareListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DeviceSoftwareListComponent, selector: "c8y-device-software-list", inputs: { softwareList: "softwareList", device: "device", deviceSoftwareChanges: "deviceSoftwareChanges", filterCriteria$: "filterCriteria$" }, outputs: { update: "update", remove: "remove", onListEmpty: "onListEmpty" }, ngImport: i0, template: "<c8y-list-group class=\"no-border-2nd-last\">\n <c8y-li\n [ngClass]=\"{ disabled: isSoftwareGoingToBeChanged(software) }\"\n *c8yFor=\"let software of softwareItems$\"\n >\n <!-- SOFTWARE ICON -->\n <c8y-li-icon>\n <i c8yIcon=\"c8y-tools\"></i>\n </c8y-li-icon>\n\n <c8y-li-body class=\"content-flex-20\">\n <div title=\"{{ software.name }}\" class=\"col-9\">\n <p class=\"d-flex\">\n <!-- SOFTWARE NAME -->\n <span class=\"text-truncate\">\n {{ software.name }}\n </span>\n <!-- SOFTWARE TYPE-->\n <span class=\"text-truncate\">\n <span class=\"label label-primary m-l-8\">{{ software.softwareType }}</span>\n </span>\n </p>\n <!-- SOFTWARE VERSION -->\n <p class=\"d-flex a-i-center\">\n <span class=\"text-truncate text-label-small m-r-4\" translate>Version</span>\n <span class=\"text-truncate m-r-4\" title=\"{{ software.version }}\">\n {{ software.version }}\n </span>\n <i\n *ngIf=\"software.installed\"\n c8yIcon=\"warning\"\n class=\"text-warning a-s-center\"\n [tooltip]=\"\n alreadyInstalledMessage\n | translate: { name: software.name, version: software.version }\n \"\n container=\"body\"\n placement=\"top\"\n [delay]=\"500\"\n ></i>\n </p>\n </div>\n\n <div\n *ngIf=\"supportsSoftwareOperations && (showUpdate || showRemove)\"\n class=\"col-3 text-right m-0 flex-grow d-flex a-i-center\"\n >\n <!-- UPDATE SOFTWARE -->\n <button\n *ngIf=\"showUpdate && !isSoftwareGoingToBeChanged(software)\"\n class=\"btn btn-default btn-xs m-l-auto m-r-4\"\n (click)=\"update.emit(software)\"\n title=\"{{ 'Update`software,verb`' | translate }}\"\n type=\"button\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.SOFTWARE.EVENTS.DEVICE_TAB\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.SOFTWARE.COMPONENTS.DEVICE_SOFTWARE_LIST,\n action: PRODUCT_EXPERIENCE.SOFTWARE.ACTIONS.OPEN_UPDATE_SOFTWARE\n }\"\n >\n {{ 'Update`software,verb`' | translate }}\n </button>\n\n <!-- REMOVE SOFTWARE -->\n <button\n *ngIf=\"showRemove && !isSoftwareGoingToBeChanged(software)\"\n class=\"btn btn-dot btn-dot--danger m-l-4\"\n (click)=\"remove.emit(software)\"\n tooltip=\"{{ 'Remove`software,verb`' | translate }}\"\n [attr.aria-label]=\"'Remove`software,verb`' | translate\"\n placement=\"bottom\"\n container=\"body\"\n [delay]=\"500\"\n type=\"button\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.SOFTWARE.EVENTS.DEVICE_TAB\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.SOFTWARE.COMPONENTS.DEVICE_SOFTWARE_LIST,\n action: PRODUCT_EXPERIENCE.SOFTWARE.ACTIONS.DELETE_SOFTWARE\n }\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n </c8y-li-body>\n </c8y-li>\n</c8y-list-group>\n<!-- NO SEARCH RESULTS STATE -->\n<div class=\"card-block\" *ngIf=\"noSearchResults || emptyList\">\n <ng-content *ngIf=\"emptyList\" select=\".c8y-empty-state:not(.c8y-no-results-state)\"></ng-content>\n <ng-content *ngIf=\"noSearchResults\" select=\".c8y-no-results-state\"></ng-content>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount"] }, { kind: "component", type: i3.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i3.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "emptyActions", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i3.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i3.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "directive", type: i3.ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit"] }, { kind: "directive", type: i4.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] });
102
64
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DeviceSoftwareListComponent, decorators: [{
103
65
  type: Component,
104
66
  args: [{ selector: 'c8y-device-software-list', template: "<c8y-list-group class=\"no-border-2nd-last\">\n <c8y-li\n [ngClass]=\"{ disabled: isSoftwareGoingToBeChanged(software) }\"\n *c8yFor=\"let software of softwareItems$\"\n >\n <!-- SOFTWARE ICON -->\n <c8y-li-icon>\n <i c8yIcon=\"c8y-tools\"></i>\n </c8y-li-icon>\n\n <c8y-li-body class=\"content-flex-20\">\n <div title=\"{{ software.name }}\" class=\"col-9\">\n <p class=\"d-flex\">\n <!-- SOFTWARE NAME -->\n <span class=\"text-truncate\">\n {{ software.name }}\n </span>\n <!-- SOFTWARE TYPE-->\n <span class=\"text-truncate\">\n <span class=\"label label-primary m-l-8\">{{ software.softwareType }}</span>\n </span>\n </p>\n <!-- SOFTWARE VERSION -->\n <p class=\"d-flex a-i-center\">\n <span class=\"text-truncate text-label-small m-r-4\" translate>Version</span>\n <span class=\"text-truncate m-r-4\" title=\"{{ software.version }}\">\n {{ software.version }}\n </span>\n <i\n *ngIf=\"software.installed\"\n c8yIcon=\"warning\"\n class=\"text-warning a-s-center\"\n [tooltip]=\"\n alreadyInstalledMessage\n | translate: { name: software.name, version: software.version }\n \"\n container=\"body\"\n placement=\"top\"\n [delay]=\"500\"\n ></i>\n </p>\n </div>\n\n <div\n *ngIf=\"supportsSoftwareOperations && (showUpdate || showRemove)\"\n class=\"col-3 text-right m-0 flex-grow d-flex a-i-center\"\n >\n <!-- UPDATE SOFTWARE -->\n <button\n *ngIf=\"showUpdate && !isSoftwareGoingToBeChanged(software)\"\n class=\"btn btn-default btn-xs m-l-auto m-r-4\"\n (click)=\"update.emit(software)\"\n title=\"{{ 'Update`software,verb`' | translate }}\"\n type=\"button\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.SOFTWARE.EVENTS.DEVICE_TAB\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.SOFTWARE.COMPONENTS.DEVICE_SOFTWARE_LIST,\n action: PRODUCT_EXPERIENCE.SOFTWARE.ACTIONS.OPEN_UPDATE_SOFTWARE\n }\"\n >\n {{ 'Update`software,verb`' | translate }}\n </button>\n\n <!-- REMOVE SOFTWARE -->\n <button\n *ngIf=\"showRemove && !isSoftwareGoingToBeChanged(software)\"\n class=\"btn btn-dot btn-dot--danger m-l-4\"\n (click)=\"remove.emit(software)\"\n tooltip=\"{{ 'Remove`software,verb`' | translate }}\"\n [attr.aria-label]=\"'Remove`software,verb`' | translate\"\n placement=\"bottom\"\n container=\"body\"\n [delay]=\"500\"\n type=\"button\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.SOFTWARE.EVENTS.DEVICE_TAB\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.SOFTWARE.COMPONENTS.DEVICE_SOFTWARE_LIST,\n action: PRODUCT_EXPERIENCE.SOFTWARE.ACTIONS.DELETE_SOFTWARE\n }\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n </c8y-li-body>\n </c8y-li>\n</c8y-list-group>\n<!-- NO SEARCH RESULTS STATE -->\n<div class=\"card-block\" *ngIf=\"noSearchResults || emptyList\">\n <ng-content *ngIf=\"emptyList\" select=\".c8y-empty-state:not(.c8y-no-results-state)\"></ng-content>\n <ng-content *ngIf=\"noSearchResults\" select=\".c8y-no-results-state\"></ng-content>\n</div>\n" }]
105
- }], ctorParameters: function () { return [{ type: i1.AdvancedSoftwareService }]; }, propDecorators: { softwareList: [{
67
+ }], ctorParameters: function () { return [{ type: i1.DeviceSoftwareService }]; }, propDecorators: { softwareList: [{
106
68
  type: Input
107
69
  }], device: [{
108
70
  type: Input
@@ -117,4 +79,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
117
79
  }], onListEmpty: [{
118
80
  type: Output
119
81
  }] } });
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLXNvZnR3YXJlLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcmVwb3NpdG9yeS9zb2Z0d2FyZS9kZXZpY2UtdGFiL2RldmljZS1zb2Z0d2FyZS1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3JlcG9zaXRvcnkvc29mdHdhcmUvZGV2aWNlLXRhYi9kZXZpY2Utc29mdHdhcmUtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVqRyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUMsT0FBTyxFQUNMLHVCQUF1QixFQUl2QixrQkFBa0IsRUFDbkIsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RSxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFNaEcsTUFBTSxPQUFPLDJCQUEyQjtJQXlCdEMsWUFBb0IsdUJBQWdEO1FBQWhELDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBeUI7UUF4QnBFLHVCQUFrQixHQUFHLGtCQUFrQixDQUFDO1FBUS9CLG9CQUFlLEdBQStCLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0RCxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQWtCLENBQUM7UUFDNUMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFrQixDQUFDO1FBQzVDLGdCQUFXLEdBQTBCLElBQUksWUFBWSxFQUFFLENBQUM7UUFNbEUsNEJBQXVCLEdBQUcsT0FBTyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7UUFDdEYsK0JBQTBCLEdBQVksS0FBSyxDQUFDO1FBRTNCLG1CQUFjLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUVyRix3QkFBbUIsR0FBc0MsSUFBSSxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFbEIsQ0FBQztJQXZCeEUsSUFBYSxZQUFZLENBQUMsWUFBOEI7UUFDdEQsSUFBSSxZQUFZLEtBQUssSUFBSSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDN0M7SUFDSCxDQUFDO0lBcUJELFFBQVE7UUFDTixJQUFJLENBQUMsY0FBYyxHQUFHLGFBQWEsQ0FBQztZQUNsQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQztZQUNwRSxJQUFJLENBQUMsbUJBQW1CO1NBQ3pCLENBQUMsQ0FBQyxJQUFJLENBQ0wsU0FBUyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxFQUFFO1lBQ2pELElBQUksa0JBQWtCLEVBQUU7Z0JBQ3RCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDeEQsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQ3BELENBQUM7YUFDSDtpQkFBTTtnQkFDTCxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUN0RSxVQUFVO29CQUNWLGNBQWM7aUJBQ2YsQ0FBQyxDQUFDLENBQUM7YUFDTDtRQUNILENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsVUFBVSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDekUsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsVUFBVSxJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUM7UUFDN0UsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQ25DLEtBQUssRUFBRSxDQUNSLENBQUM7UUFDRixNQUFNLG1CQUFtQixHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLHlCQUF5QixFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDeEQsYUFBYSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQ2pFLENBQUM7SUFDSixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELDBCQUEwQixDQUFDLFFBQXdCO1FBQ2pELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDckUsT0FBTyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU8sdUJBQXVCLENBQzdCLGNBQThCO1FBRTlCLE1BQU0sV0FBVyxHQUFHO1lBQ2xCLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDeEIsV0FBVyxFQUFFLENBQUM7WUFDZCxRQUFRLEVBQUUsRUFBRTtZQUNaLGNBQWMsRUFBRSxJQUFJO1NBQ3JCLENBQUM7UUFDRixJQUFJLGNBQWMsRUFBRSxJQUFJLEVBQUU7WUFDeEIsR0FBRyxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxjQUFjLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztTQUN0RDtRQUNELElBQUksY0FBYyxFQUFFLFlBQVksRUFBRTtZQUNoQyxHQUFHLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxHQUFHLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1NBQzVEO1FBQ0QsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FFbkQsQ0FBQztJQUNKLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxjQUE4QjtRQUMxRCxNQUFNLElBQUksR0FBRyxjQUFjO1lBQ3pCLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDM0MsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO2dCQUNqQixJQUFJLGNBQWMsRUFBRSxJQUFJLEVBQUU7b0JBQ3hCLEtBQUssR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUMzRDtnQkFDRCxJQUFJLGNBQWMsRUFBRSxZQUFZLEVBQUU7b0JBQ2hDLEtBQUssR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxjQUFjLENBQUMsWUFBWSxDQUFDO2lCQUNwRTtnQkFFRCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUMsQ0FBQztZQUNKLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDO1FBQ25DLE9BQU87WUFDTCxJQUFJO1lBQ0osR0FBRyxFQUFFLElBQUk7WUFDVCxNQUFNLEVBQUU7Z0JBQ04sVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNO2FBQ0U7U0FDNUIsQ0FBQztJQUNKLENBQUM7SUFFTyxlQUFlLENBQUMsT0FBZ0I7UUFDdEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakMsQ0FBQzs7d0hBakhVLDJCQUEyQjs0R0FBM0IsMkJBQTJCLDZSQ2xCeEMscWdIQTZGQTsyRkQzRWEsMkJBQTJCO2tCQUp2QyxTQUFTOytCQUNFLDBCQUEwQjs4R0FLdkIsWUFBWTtzQkFBeEIsS0FBSztnQkFLRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0ksTUFBTTtzQkFBZixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJDb250ZW50SW5pdCwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3QsIElSZXN1bHRMaXN0LCBQYWdpbmcgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBnZXR0ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBBZHZhbmNlZFNvZnR3YXJlU2VydmljZSxcbiAgRGV2aWNlU29mdHdhcmUsXG4gIERldmljZVNvZnR3YXJlQ2hhbmdlLFxuICBGaWx0ZXJDcml0ZXJpYSxcbiAgUFJPRFVDVF9FWFBFUklFTkNFXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvcmVwb3NpdG9yeS9zaGFyZWQnO1xuaW1wb3J0IHsgZmlsdGVyLCBnZXQsIHNldCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHNoYXJlLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWRldmljZS1zb2Z0d2FyZS1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICdkZXZpY2Utc29mdHdhcmUtbGlzdC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgRGV2aWNlU29mdHdhcmVMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0IHtcbiAgUFJPRFVDVF9FWFBFUklFTkNFID0gUFJPRFVDVF9FWFBFUklFTkNFO1xuICBASW5wdXQoKSBzZXQgc29mdHdhcmVMaXN0KHNvZnR3YXJlTGlzdDogRGV2aWNlU29mdHdhcmVbXSkge1xuICAgIGlmIChzb2Z0d2FyZUxpc3QgIT09IG51bGwpIHtcbiAgICAgIHRoaXMubGVnYWN5U29mdHdhcmVMaXN0JC5uZXh0KHNvZnR3YXJlTGlzdCk7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpIGRldmljZTogSU1hbmFnZWRPYmplY3Q7XG4gIEBJbnB1dCgpIGRldmljZVNvZnR3YXJlQ2hhbmdlczogRGV2aWNlU29mdHdhcmVDaGFuZ2VbXTtcbiAgQElucHV0KCkgZmlsdGVyQ3JpdGVyaWEkOiBPYnNlcnZhYmxlPEZpbHRlckNyaXRlcmlhPiA9IG9mKG51bGwpO1xuICBAT3V0cHV0KCkgdXBkYXRlID0gbmV3IEV2ZW50RW1pdHRlcjxEZXZpY2VTb2Z0d2FyZT4oKTtcbiAgQE91dHB1dCgpIHJlbW92ZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGV2aWNlU29mdHdhcmU+KCk7XG4gIEBPdXRwdXQoKSBvbkxpc3RFbXB0eTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBzb2Z0d2FyZUl0ZW1zJDogT2JzZXJ2YWJsZTxJUmVzdWx0TGlzdDxEZXZpY2VTb2Z0d2FyZT4+O1xuICBzaG93VXBkYXRlOiBib29sZWFuO1xuICBzaG93UmVtb3ZlOiBib29sZWFuO1xuICBlbXB0eUxpc3Q6IGJvb2xlYW47XG4gIG5vU2VhcmNoUmVzdWx0czogYm9vbGVhbjtcbiAgYWxyZWFkeUluc3RhbGxlZE1lc3NhZ2UgPSBnZXR0ZXh0KCdUaGlzIHNvZnR3YXJlIGlzIGFscmVhZHkgaW5zdGFsbGVkIG9uIHRoZSBkZXZpY2UnKTtcbiAgc3VwcG9ydHNTb2Z0d2FyZU9wZXJhdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IG9wZXJhdGlvblR5cGVzID0gWydjOHlfU29mdHdhcmVVcGRhdGUnLCAnYzh5X1NvZnR3YXJlTGlzdCcsICdjOHlfU29mdHdhcmUnXTtcblxuICBwcml2YXRlIGxlZ2FjeVNvZnR3YXJlTGlzdCQ6IEJlaGF2aW9yU3ViamVjdDxEZXZpY2VTb2Z0d2FyZVtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYWR2YW5jZWRTb2Z0d2FyZVNlcnZpY2U6IEFkdmFuY2VkU29mdHdhcmVTZXJ2aWNlKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc29mdHdhcmVJdGVtcyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuZmlsdGVyQ3JpdGVyaWEkLnBpcGUoZGVib3VuY2VUaW1lKDMwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLFxuICAgICAgdGhpcy5sZWdhY3lTb2Z0d2FyZUxpc3QkXG4gICAgXSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoW2ZpbHRlckNyaXRlcmlhLCBsZWdhY3lTb2Z0d2FyZUxpc3RdKSA9PiB7XG4gICAgICAgIGlmIChsZWdhY3lTb2Z0d2FyZUxpc3QpIHtcbiAgICAgICAgICByZXR1cm4gb2YodGhpcy5nZXRMZWdhY3lTb2Z0d2FyZUxpc3QoZmlsdGVyQ3JpdGVyaWEpKS5waXBlKFxuICAgICAgICAgICAgbWFwKHJlc3VsdExpc3QgPT4gKHsgcmVzdWx0TGlzdCwgZmlsdGVyQ3JpdGVyaWEgfSkpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBZHZhbmNlZFNvZnR3YXJlTGlzdChmaWx0ZXJDcml0ZXJpYSkudGhlbihyZXN1bHRMaXN0ID0+ICh7XG4gICAgICAgICAgICByZXN1bHRMaXN0LFxuICAgICAgICAgICAgZmlsdGVyQ3JpdGVyaWFcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgdGFwKCh7IHJlc3VsdExpc3QsIGZpbHRlckNyaXRlcmlhIH0pID0+IHtcbiAgICAgICAgdGhpcy5ub3RpZnlMaXN0RW1wdHkoIXJlc3VsdExpc3Q/LnBhZ2luZz8udG90YWxQYWdlcyAmJiAhZmlsdGVyQ3JpdGVyaWEpO1xuICAgICAgICB0aGlzLm5vU2VhcmNoUmVzdWx0cyA9ICFyZXN1bHRMaXN0Py5wYWdpbmc/LnRvdGFsUGFnZXMgJiYgISFmaWx0ZXJDcml0ZXJpYTtcbiAgICAgIH0pLFxuICAgICAgbWFwKCh7IHJlc3VsdExpc3QgfSkgPT4gcmVzdWx0TGlzdCksXG4gICAgICBzaGFyZSgpXG4gICAgKTtcbiAgICBjb25zdCBzdXBwb3J0ZWRPcGVyYXRpb25zID0gZ2V0KHRoaXMuZGV2aWNlLCAnYzh5X1N1cHBvcnRlZE9wZXJhdGlvbnMnLCBbXSk7XG4gICAgdGhpcy5zdXBwb3J0c1NvZnR3YXJlT3BlcmF0aW9ucyA9IHRoaXMub3BlcmF0aW9uVHlwZXMuc29tZShcbiAgICAgIG9wZXJhdGlvblR5cGUgPT4gc3VwcG9ydGVkT3BlcmF0aW9ucy5pbmRleE9mKG9wZXJhdGlvblR5cGUpID4gLTFcbiAgICApO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMuc2hvd1VwZGF0ZSA9IHRoaXMudXBkYXRlLm9ic2VydmVycy5sZW5ndGggPiAwO1xuICAgIHRoaXMuc2hvd1JlbW92ZSA9IHRoaXMucmVtb3ZlLm9ic2VydmVycy5sZW5ndGggPiAwO1xuICB9XG5cbiAgaXNTb2Z0d2FyZUdvaW5nVG9CZUNoYW5nZWQoc29mdHdhcmU6IERldmljZVNvZnR3YXJlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVsZXZhbnRDaGFuZ2VzID0gZmlsdGVyKHRoaXMuZGV2aWNlU29mdHdhcmVDaGFuZ2VzLCBzb2Z0d2FyZSk7XG4gICAgcmV0dXJuIHJlbGV2YW50Q2hhbmdlcy5sZW5ndGggPiAwO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBZHZhbmNlZFNvZnR3YXJlTGlzdChcbiAgICBmaWx0ZXJDcml0ZXJpYTogRmlsdGVyQ3JpdGVyaWFcbiAgKTogUHJvbWlzZTxJUmVzdWx0TGlzdDxEZXZpY2VTb2Z0d2FyZT4+IHtcbiAgICBjb25zdCBxdWVyeUZpbHRlciA9IHtcbiAgICAgIGRldmljZUlkOiB0aGlzLmRldmljZS5pZCxcbiAgICAgIGN1cnJlbnRQYWdlOiAxLFxuICAgICAgcGFnZVNpemU6IDUwLFxuICAgICAgd2l0aFRvdGFsUGFnZXM6IHRydWVcbiAgICB9O1xuICAgIGlmIChmaWx0ZXJDcml0ZXJpYT8ubmFtZSkge1xuICAgICAgc2V0KHF1ZXJ5RmlsdGVyLCAnbmFtZScsIGAqJHtmaWx0ZXJDcml0ZXJpYS5uYW1lfSpgKTtcbiAgICB9XG4gICAgaWYgKGZpbHRlckNyaXRlcmlhPy5zb2Z0d2FyZVR5cGUpIHtcbiAgICAgIHNldChxdWVyeUZpbHRlciwgJ3R5cGUnLCBgJHtmaWx0ZXJDcml0ZXJpYS5zb2Z0d2FyZVR5cGV9YCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFkdmFuY2VkU29mdHdhcmVTZXJ2aWNlLmxpc3QocXVlcnlGaWx0ZXIpIGFzIHVua25vd24gYXMgUHJvbWlzZTxcbiAgICAgIElSZXN1bHRMaXN0PERldmljZVNvZnR3YXJlPlxuICAgID47XG4gIH1cblxuICBwcml2YXRlIGdldExlZ2FjeVNvZnR3YXJlTGlzdChmaWx0ZXJDcml0ZXJpYTogRmlsdGVyQ3JpdGVyaWEpOiBJUmVzdWx0TGlzdDxEZXZpY2VTb2Z0d2FyZT4ge1xuICAgIGNvbnN0IGRhdGEgPSBmaWx0ZXJDcml0ZXJpYVxuICAgICAgPyB0aGlzLmxlZ2FjeVNvZnR3YXJlTGlzdCQudmFsdWUuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICAgIGxldCBtYXRjaCA9IHRydWU7XG4gICAgICAgICAgaWYgKGZpbHRlckNyaXRlcmlhPy5uYW1lKSB7XG4gICAgICAgICAgICBtYXRjaCA9IG1hdGNoICYmIGl0ZW0ubmFtZT8uaW5jbHVkZXMoZmlsdGVyQ3JpdGVyaWEubmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChmaWx0ZXJDcml0ZXJpYT8uc29mdHdhcmVUeXBlKSB7XG4gICAgICAgICAgICBtYXRjaCA9IG1hdGNoICYmIGl0ZW0uc29mdHdhcmVUeXBlID09PSBmaWx0ZXJDcml0ZXJpYS5zb2Z0d2FyZVR5cGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICB9KVxuICAgICAgOiB0aGlzLmxlZ2FjeVNvZnR3YXJlTGlzdCQudmFsdWU7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGEsXG4gICAgICByZXM6IG51bGwsXG4gICAgICBwYWdpbmc6IHtcbiAgICAgICAgdG90YWxQYWdlczogZGF0YS5sZW5ndGhcbiAgICAgIH0gYXMgUGFnaW5nPERldmljZVNvZnR3YXJlPlxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIG5vdGlmeUxpc3RFbXB0eShpc0VtcHR5OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5lbXB0eUxpc3QgPSBpc0VtcHR5O1xuICAgIHRoaXMub25MaXN0RW1wdHkuZW1pdChpc0VtcHR5KTtcbiAgfVxufVxuIiwiPGM4eS1saXN0LWdyb3VwIGNsYXNzPVwibm8tYm9yZGVyLTJuZC1sYXN0XCI+XG4gIDxjOHktbGlcbiAgICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBpc1NvZnR3YXJlR29pbmdUb0JlQ2hhbmdlZChzb2Z0d2FyZSkgfVwiXG4gICAgKmM4eUZvcj1cImxldCBzb2Z0d2FyZSBvZiBzb2Z0d2FyZUl0ZW1zJFwiXG4gID5cbiAgICA8IS0tIFNPRlRXQVJFIElDT04gLS0+XG4gICAgPGM4eS1saS1pY29uPlxuICAgICAgPGkgYzh5SWNvbj1cImM4eS10b29sc1wiPjwvaT5cbiAgICA8L2M4eS1saS1pY29uPlxuXG4gICAgPGM4eS1saS1ib2R5IGNsYXNzPVwiY29udGVudC1mbGV4LTIwXCI+XG4gICAgICA8ZGl2IHRpdGxlPVwie3sgc29mdHdhcmUubmFtZSB9fVwiIGNsYXNzPVwiY29sLTlcIj5cbiAgICAgICAgPHAgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICA8IS0tIFNPRlRXQVJFIE5BTUUgLS0+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+XG4gICAgICAgICAgICB7eyBzb2Z0d2FyZS5uYW1lIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwhLS0gU09GVFdBUkUgVFlQRS0tPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbCBsYWJlbC1wcmltYXJ5IG0tbC04XCI+e3sgc29mdHdhcmUuc29mdHdhcmVUeXBlIH19PC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9wPlxuICAgICAgICA8IS0tIFNPRlRXQVJFIFZFUlNJT04gLS0+XG4gICAgICAgIDxwIGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXJcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdHJ1bmNhdGUgdGV4dC1sYWJlbC1zbWFsbCBtLXItNFwiIHRyYW5zbGF0ZT5WZXJzaW9uPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10cnVuY2F0ZSBtLXItNFwiIHRpdGxlPVwie3sgc29mdHdhcmUudmVyc2lvbiB9fVwiPlxuICAgICAgICAgICAge3sgc29mdHdhcmUudmVyc2lvbiB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8aVxuICAgICAgICAgICAgKm5nSWY9XCJzb2Z0d2FyZS5pbnN0YWxsZWRcIlxuICAgICAgICAgICAgYzh5SWNvbj1cIndhcm5pbmdcIlxuICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXdhcm5pbmcgYS1zLWNlbnRlclwiXG4gICAgICAgICAgICBbdG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgYWxyZWFkeUluc3RhbGxlZE1lc3NhZ2VcbiAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZTogeyBuYW1lOiBzb2Z0d2FyZS5uYW1lLCB2ZXJzaW9uOiBzb2Z0d2FyZS52ZXJzaW9uIH1cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgIHBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgICAgICBbZGVsYXldPVwiNTAwXCJcbiAgICAgICAgICA+PC9pPlxuICAgICAgICA8L3A+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cInN1cHBvcnRzU29mdHdhcmVPcGVyYXRpb25zICYmIChzaG93VXBkYXRlIHx8IHNob3dSZW1vdmUpXCJcbiAgICAgICAgY2xhc3M9XCJjb2wtMyB0ZXh0LXJpZ2h0IG0tMCBmbGV4LWdyb3cgZC1mbGV4IGEtaS1jZW50ZXJcIlxuICAgICAgPlxuICAgICAgICA8IS0tIFVQREFURSBTT0ZUV0FSRSAtLT5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwic2hvd1VwZGF0ZSAmJiAhaXNTb2Z0d2FyZUdvaW5nVG9CZUNoYW5nZWQoc29mdHdhcmUpXCJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4teHMgbS1sLWF1dG8gbS1yLTRcIlxuICAgICAgICAgIChjbGljayk9XCJ1cGRhdGUuZW1pdChzb2Z0d2FyZSlcIlxuICAgICAgICAgIHRpdGxlPVwie3sgJ1VwZGF0ZWBzb2Z0d2FyZSx2ZXJiYCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGM4eVByb2R1Y3RFeHBlcmllbmNlXG4gICAgICAgICAgW2FjdGlvbk5hbWVdPVwiUFJPRFVDVF9FWFBFUklFTkNFLlNPRlRXQVJFLkVWRU5UUy5ERVZJQ0VfVEFCXCJcbiAgICAgICAgICBbYWN0aW9uRGF0YV09XCJ7XG4gICAgICAgICAgICBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5TT0ZUV0FSRS5DT01QT05FTlRTLkRFVklDRV9TT0ZUV0FSRV9MSVNULFxuICAgICAgICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0UuU09GVFdBUkUuQUNUSU9OUy5PUEVOX1VQREFURV9TT0ZUV0FSRVxuICAgICAgICAgIH1cIlxuICAgICAgICA+XG4gICAgICAgICAge3sgJ1VwZGF0ZWBzb2Z0d2FyZSx2ZXJiYCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPCEtLSBSRU1PVkUgU09GVFdBUkUgLS0+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAqbmdJZj1cInNob3dSZW1vdmUgJiYgIWlzU29mdHdhcmVHb2luZ1RvQmVDaGFuZ2VkKHNvZnR3YXJlKVwiXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRvdCBidG4tZG90LS1kYW5nZXIgbS1sLTRcIlxuICAgICAgICAgIChjbGljayk9XCJyZW1vdmUuZW1pdChzb2Z0d2FyZSlcIlxuICAgICAgICAgIHRvb2x0aXA9XCJ7eyAnUmVtb3ZlYHNvZnR3YXJlLHZlcmJgJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInUmVtb3ZlYHNvZnR3YXJlLHZlcmJgJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcbiAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICBbZGVsYXldPVwiNTAwXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgICAgICAgIFthY3Rpb25OYW1lXT1cIlBST0RVQ1RfRVhQRVJJRU5DRS5TT0ZUV0FSRS5FVkVOVFMuREVWSUNFX1RBQlwiXG4gICAgICAgICAgW2FjdGlvbkRhdGFdPVwie1xuICAgICAgICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuU09GVFdBUkUuQ09NUE9ORU5UUy5ERVZJQ0VfU09GVFdBUkVfTElTVCxcbiAgICAgICAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLlNPRlRXQVJFLkFDVElPTlMuREVMRVRFX1NPRlRXQVJFXG4gICAgICAgICAgfVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjOHlJY29uPVwibWludXMtY2lyY2xlXCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvYzh5LWxpLWJvZHk+XG4gIDwvYzh5LWxpPlxuPC9jOHktbGlzdC1ncm91cD5cbjwhLS0gTk8gU0VBUkNIIFJFU1VMVFMgU1RBVEUgLS0+XG48ZGl2IGNsYXNzPVwiY2FyZC1ibG9ja1wiICpuZ0lmPVwibm9TZWFyY2hSZXN1bHRzIHx8IGVtcHR5TGlzdFwiPlxuICA8bmctY29udGVudCAqbmdJZj1cImVtcHR5TGlzdFwiIHNlbGVjdD1cIi5jOHktZW1wdHktc3RhdGU6bm90KC5jOHktbm8tcmVzdWx0cy1zdGF0ZSlcIj48L25nLWNvbnRlbnQ+XG4gIDxuZy1jb250ZW50ICpuZ0lmPVwibm9TZWFyY2hSZXN1bHRzXCIgc2VsZWN0PVwiLmM4eS1uby1yZXN1bHRzLXN0YXRlXCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG4iXX0=
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLXNvZnR3YXJlLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcmVwb3NpdG9yeS9zb2Z0d2FyZS9kZXZpY2UtdGFiL2RldmljZS1zb2Z0d2FyZS1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3JlcG9zaXRvcnkvc29mdHdhcmUvZGV2aWNlLXRhYi9kZXZpY2Utc29mdHdhcmUtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5QyxPQUFPLEVBSUwsa0JBQWtCLEVBQ25CLE1BQU0sdUNBQXVDLENBQUM7QUFDL0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDeEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0UsT0FBTyxFQUNMLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsR0FBRyxFQUNILEtBQUssRUFDTCxTQUFTLEVBQ1QsU0FBUyxFQUNULEdBQUcsRUFDSixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7QUFNbEUsTUFBTSxPQUFPLDJCQUEyQjtJQTBCdEMsWUFBb0IscUJBQTRDO1FBQTVDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUF6QmhFLHVCQUFrQixHQUFHLGtCQUFrQixDQUFDO1FBUS9CLG9CQUFlLEdBQStCLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0RCxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQWtC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O1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVPLGVBQWUsQ0FBQyxPQUFnQjtRQUN0QyxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQyxDQUFDOzt3SEF0RVUsMkJBQTJCOzRHQUEzQiwyQkFBMkIsNlJDbEN4QyxxZ0hBNkZBOzJGRDNEYSwyQkFBMkI7a0JBSnZDLFNBQVM7K0JBQ0UsMEJBQTBCOzRHQUt2QixZQUFZO3NCQUF4QixLQUFLO2dCQUtHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDSSxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdCwgSVJlc3VsdExpc3QgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBnZXR0ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBEZXZpY2VTb2Z0d2FyZSxcbiAgRGV2aWNlU29mdHdhcmVDaGFuZ2UsXG4gIEZpbHRlckNyaXRlcmlhLFxuICBQUk9EVUNUX0VYUEVSSUVOQ0Vcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9yZXBvc2l0b3J5L3NoYXJlZCc7XG5pbXBvcnQgeyBmaWx0ZXIsIGdldCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBkZWJvdW5jZVRpbWUsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBtYXAsXG4gIHNoYXJlLFxuICBzd2l0Y2hNYXAsXG4gIHRha2VVbnRpbCxcbiAgdGFwXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERldmljZVNvZnR3YXJlU2VydmljZSB9IGZyb20gJy4vZGV2aWNlLXNvZnR3YXJlLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZGV2aWNlLXNvZnR3YXJlLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJ2RldmljZS1zb2Z0d2FyZS1saXN0LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBEZXZpY2VTb2Z0d2FyZUxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gIFBST0RVQ1RfRVhQRVJJRU5DRSA9IFBST0RVQ1RfRVhQRVJJRU5DRTtcbiAgQElucHV0KCkgc2V0IHNvZnR3YXJlTGlzdChzb2Z0d2FyZUxpc3Q6IERldmljZVNvZnR3YXJlW10pIHtcbiAgICBpZiAoc29mdHdhcmVMaXN0ICE9PSBudWxsKSB7XG4gICAgICB0aGlzLmxlZ2FjeVNvZnR3YXJlTGlzdCQubmV4dChzb2Z0d2FyZUxpc3QpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKSBkZXZpY2U6IElNYW5hZ2VkT2JqZWN0O1xuICBASW5wdXQoKSBkZXZpY2VTb2Z0d2FyZUNoYW5nZXM6IERldmljZVNvZnR3YXJlQ2hhbmdlW107XG4gIEBJbnB1dCgpIGZpbHRlckNyaXRlcmlhJDogT2JzZXJ2YWJsZTxGaWx0ZXJDcml0ZXJpYT4gPSBvZihudWxsKTtcbiAgQE91dHB1dCgpIHVwZGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGV2aWNlU29mdHdhcmU+KCk7XG4gIEBPdXRwdXQoKSByZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPERldmljZVNvZnR3YXJlPigpO1xuICBAT3V0cHV0KCkgb25MaXN0RW1wdHk6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgc29mdHdhcmVJdGVtcyQ6IE9ic2VydmFibGU8SVJlc3VsdExpc3Q8RGV2aWNlU29mdHdhcmU+PjtcbiAgc2hvd1VwZGF0ZTogYm9vbGVhbjtcbiAgc2hvd1JlbW92ZTogYm9vbGVhbjtcbiAgZW1wdHlMaXN0OiBib29sZWFuO1xuICBub1NlYXJjaFJlc3VsdHM6IGJvb2xlYW47XG4gIGFscmVhZHlJbnN0YWxsZWRNZXNzYWdlID0gZ2V0dGV4dCgnVGhpcyBzb2Z0d2FyZSBpcyBhbHJlYWR5IGluc3RhbGxlZCBvbiB0aGUgZGV2aWNlJyk7XG4gIHN1cHBvcnRzU29mdHdhcmVPcGVyYXRpb25zOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBvcGVyYXRpb25UeXBlcyA9IFsnYzh5X1NvZnR3YXJlVXBkYXRlJywgJ2M4eV9Tb2Z0d2FyZUxpc3QnLCAnYzh5X1NvZnR3YXJlJ107XG5cbiAgcHJpdmF0ZSBsZWdhY3lTb2Z0d2FyZUxpc3QkOiBCZWhhdmlvclN1YmplY3Q8RGV2aWNlU29mdHdhcmVbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcbiAgcHJpdmF0ZSBkZXN0cm95ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRldmljZVNvZnR3YXJlU2VydmljZTogRGV2aWNlU29mdHdhcmVTZXJ2aWNlKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc29mdHdhcmVJdGVtcyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuZmlsdGVyQ3JpdGVyaWEkLnBpcGUoZGVib3VuY2VUaW1lKDMwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLFxuICAgICAgdGhpcy5sZWdhY3lTb2Z0d2FyZUxpc3QkXG4gICAgXSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoW2ZpbHRlckNyaXRlcmlhLCBsZWdhY3lTb2Z0d2FyZUxpc3RdKSA9PlxuICAgICAgICB0aGlzLmRldmljZVNvZnR3YXJlU2VydmljZVxuICAgICAgICAgIC5nZXRTb2Z0d2FyZUxpc3QodGhpcy5kZXZpY2U/LmlkLCBmaWx0ZXJDcml0ZXJpYSwgbGVnYWN5U29mdHdhcmVMaXN0KVxuICAgICAgICAgIC5waXBlKG1hcChyZXN1bHRMaXN0ID0+ICh7IHJlc3VsdExpc3QsIGZpbHRlckNyaXRlcmlhIH0pKSlcbiAgICAgICksXG4gICAgICB0YXAoKHsgcmVzdWx0TGlzdCwgZmlsdGVyQ3JpdGVyaWEgfSkgPT4ge1xuICAgICAgICB0aGlzLm5vdGlmeUxpc3RFbXB0eSghcmVzdWx0TGlzdD8ucGFnaW5nPy50b3RhbFBhZ2VzICYmICFmaWx0ZXJDcml0ZXJpYSk7XG4gICAgICAgIHRoaXMubm9TZWFyY2hSZXN1bHRzID0gIXJlc3VsdExpc3Q/LnBhZ2luZz8udG90YWxQYWdlcyAmJiAhIWZpbHRlckNyaXRlcmlhO1xuICAgICAgfSksXG4gICAgICBtYXAoKHsgcmVzdWx0TGlzdCB9KSA9PiByZXN1bHRMaXN0KSxcbiAgICAgIHNoYXJlKCksXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKVxuICAgICk7XG4gICAgY29uc3Qgc3VwcG9ydGVkT3BlcmF0aW9ucyA9IGdldCh0aGlzLmRldmljZSwgJ2M4eV9TdXBwb3J0ZWRPcGVyYXRpb25zJywgW10pO1xuICAgIHRoaXMuc3VwcG9ydHNTb2Z0d2FyZU9wZXJhdGlvbnMgPSB0aGlzLm9wZXJhdGlvblR5cGVzLnNvbWUoXG4gICAgICBvcGVyYXRpb25UeXBlID0+IHN1cHBvcnRlZE9wZXJhdGlvbnMuaW5kZXhPZihvcGVyYXRpb25UeXBlKSA+IC0xXG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICB0aGlzLnNob3dVcGRhdGUgPSB0aGlzLnVwZGF0ZS5vYnNlcnZlcnMubGVuZ3RoID4gMDtcbiAgICB0aGlzLnNob3dSZW1vdmUgPSB0aGlzLnJlbW92ZS5vYnNlcnZlcnMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGlzU29mdHdhcmVHb2luZ1RvQmVDaGFuZ2VkKHNvZnR3YXJlOiBEZXZpY2VTb2Z0d2FyZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJlbGV2YW50Q2hhbmdlcyA9IGZpbHRlcih0aGlzLmRldmljZVNvZnR3YXJlQ2hhbmdlcywgc29mdHdhcmUpO1xuICAgIHJldHVybiByZWxldmFudENoYW5nZXMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveWVkJC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95ZWQkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcml2YXRlIG5vdGlmeUxpc3RFbXB0eShpc0VtcHR5OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5lbXB0eUxpc3QgPSBpc0VtcHR5O1xuICAgIHRoaXMub25MaXN0RW1wdHkuZW1pdChpc0VtcHR5KTtcbiAgfVxufVxuIiwiPGM4eS1saXN0LWdyb3VwIGNsYXNzPVwibm8tYm9yZGVyLTJuZC1sYXN0XCI+XG4gIDxjOHktbGlcbiAgICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBpc1NvZnR3YXJlR29pbmdUb0JlQ2hhbmdlZChzb2Z0d2FyZSkgfVwiXG4gICAgKmM4eUZvcj1cImxldCBzb2Z0d2FyZSBvZiBzb2Z0d2FyZUl0ZW1zJFwiXG4gID5cbiAgICA8IS0tIFNPRlRXQVJFIElDT04gLS0+XG4gICAgPGM4eS1saS1pY29uPlxuICAgICAgPGkgYzh5SWNvbj1cImM4eS10b29sc1wiPjwvaT5cbiAgICA8L2M4eS1saS1pY29uPlxuXG4gICAgPGM4eS1saS1ib2R5IGNsYXNzPVwiY29udGVudC1mbGV4LTIwXCI+XG4gICAgICA8ZGl2IHRpdGxlPVwie3sgc29mdHdhcmUubmFtZSB9fVwiIGNsYXNzPVwiY29sLTlcIj5cbiAgICAgICAgPHAgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICA8IS0tIFNPRlRXQVJFIE5BTUUgLS0+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+XG4gICAgICAgICAgICB7eyBzb2Z0d2FyZS5uYW1lIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwhLS0gU09GVFdBUkUgVFlQRS0tPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbCBsYWJlbC1wcmltYXJ5IG0tbC04XCI+e3sgc29mdHdhcmUuc29mdHdhcmVUeXBlIH19PC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9wPlxuICAgICAgICA8IS0tIFNPRlRXQVJFIFZFUlNJT04gLS0+XG4gICAgICAgIDxwIGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXJcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdHJ1bmNhdGUgdGV4dC1sYWJlbC1zbWFsbCBtLXItNFwiIHRyYW5zbGF0ZT5WZXJzaW9uPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10cnVuY2F0ZSBtLXItNFwiIHRpdGxlPVwie3sgc29mdHdhcmUudmVyc2lvbiB9fVwiPlxuICAgICAgICAgICAge3sgc29mdHdhcmUudmVyc2lvbiB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8aVxuICAgICAgICAgICAgKm5nSWY9XCJzb2Z0d2FyZS5pbnN0YWxsZWRcIlxuICAgICAgICAgICAgYzh5SWNvbj1cIndhcm5pbmdcIlxuICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXdhcm5pbmcgYS1zLWNlbnRlclwiXG4gICAgICAgICAgICBbdG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgYWxyZWFkeUluc3RhbGxlZE1lc3NhZ2VcbiAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZTogeyBuYW1lOiBzb2Z0d2FyZS5uYW1lLCB2ZXJzaW9uOiBzb2Z0d2FyZS52ZXJzaW9uIH1cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgIHBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgICAgICBbZGVsYXldPVwiNTAwXCJcbiAgICAgICAgICA+PC9pPlxuICAgICAgICA8L3A+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cInN1cHBvcnRzU29mdHdhcmVPcGVyYXRpb25zICYmIChzaG93VXBkYXRlIHx8IHNob3dSZW1vdmUpXCJcbiAgICAgICAgY2xhc3M9XCJjb2wtMyB0ZXh0LXJpZ2h0IG0tMCBmbGV4LWdyb3cgZC1mbGV4IGEtaS1jZW50ZXJcIlxuICAgICAgPlxuICAgICAgICA8IS0tIFVQREFURSBTT0ZUV0FSRSAtLT5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwic2hvd1VwZGF0ZSAmJiAhaXNTb2Z0d2FyZUdvaW5nVG9CZUNoYW5nZWQoc29mdHdhcmUpXCJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4teHMgbS1sLWF1dG8gbS1yLTRcIlxuICAgICAgICAgIChjbGljayk9XCJ1cGRhdGUuZW1pdChzb2Z0d2FyZSlcIlxuICAgICAgICAgIHRpdGxlPVwie3sgJ1VwZGF0ZWBzb2Z0d2FyZSx2ZXJiYCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGM4eVByb2R1Y3RFeHBlcmllbmNlXG4gICAgICAgICAgW2FjdGlvbk5hbWVdPVwiUFJPRFVDVF9FWFBFUklFTkNFLlNPRlRXQVJFLkVWRU5UUy5ERVZJQ0VfVEFCXCJcbiAgICAgICAgICBbYWN0aW9uRGF0YV09XCJ7XG4gICAgICAgICAgICBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5TT0ZUV0FSRS5DT01QT05FTlRTLkRFVklDRV9TT0ZUV0FSRV9MSVNULFxuICAgICAgICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0UuU09GVFdBUkUuQUNUSU9OUy5PUEVOX1VQREFURV9TT0ZUV0FSRVxuICAgICAgICAgIH1cIlxuICAgICAgICA+XG4gICAgICAgICAge3sgJ1VwZGF0ZWBzb2Z0d2FyZSx2ZXJiYCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPCEtLSBSRU1PVkUgU09GVFdBUkUgLS0+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAqbmdJZj1cInNob3dSZW1vdmUgJiYgIWlzU29mdHdhcmVHb2luZ1RvQmVDaGFuZ2VkKHNvZnR3YXJlKVwiXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRvdCBidG4tZG90LS1kYW5nZXIgbS1sLTRcIlxuICAgICAgICAgIChjbGljayk9XCJyZW1vdmUuZW1pdChzb2Z0d2FyZSlcIlxuICAgICAgICAgIHRvb2x0aXA9XCJ7eyAnUmVtb3ZlYHNvZnR3YXJlLHZlcmJgJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInUmVtb3ZlYHNvZnR3YXJlLHZlcmJgJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcbiAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICBbZGVsYXldPVwiNTAwXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgICAgICAgIFthY3Rpb25OYW1lXT1cIlBST0RVQ1RfRVhQRVJJRU5DRS5TT0ZUV0FSRS5FVkVOVFMuREVWSUNFX1RBQlwiXG4gICAgICAgICAgW2FjdGlvbkRhdGFdPVwie1xuICAgICAgICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuU09GVFdBUkUuQ09NUE9ORU5UUy5ERVZJQ0VfU09GVFdBUkVfTElTVCxcbiAgICAgICAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLlNPRlRXQVJFLkFDVElPTlMuREVMRVRFX1NPRlRXQVJFXG4gICAgICAgICAgfVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjOHlJY29uPVwibWludXMtY2lyY2xlXCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvYzh5LWxpLWJvZHk+XG4gIDwvYzh5LWxpPlxuPC9jOHktbGlzdC1ncm91cD5cbjwhLS0gTk8gU0VBUkNIIFJFU1VMVFMgU1RBVEUgLS0+XG48ZGl2IGNsYXNzPVwiY2FyZC1ibG9ja1wiICpuZ0lmPVwibm9TZWFyY2hSZXN1bHRzIHx8IGVtcHR5TGlzdFwiPlxuICA8bmctY29udGVudCAqbmdJZj1cImVtcHR5TGlzdFwiIHNlbGVjdD1cIi5jOHktZW1wdHktc3RhdGU6bm90KC5jOHktbm8tcmVzdWx0cy1zdGF0ZSlcIj48L25nLWNvbnRlbnQ+XG4gIDxuZy1jb250ZW50ICpuZ0lmPVwibm9TZWFyY2hSZXN1bHRzXCIgc2VsZWN0PVwiLmM4eS1uby1yZXN1bHRzLXN0YXRlXCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,93 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { AdvancedSoftwareService } from '@c8y/ngx-components/repository/shared';
3
+ import { set } from 'lodash-es';
4
+ import { BehaviorSubject, Subject } from 'rxjs';
5
+ import { share, switchMap } from 'rxjs/operators';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@c8y/ngx-components/repository/shared";
8
+ export class DeviceSoftwareService {
9
+ constructor(advancedSoftwareService) {
10
+ this.advancedSoftwareService = advancedSoftwareService;
11
+ this.reloadSubject$ = new BehaviorSubject(null);
12
+ this.loadingSubject$ = new Subject();
13
+ }
14
+ /**
15
+ * Indicates whether device software data is currently being loaded.
16
+ */
17
+ get loading$() {
18
+ return this.loadingSubject$.asObservable().pipe(share());
19
+ }
20
+ /**
21
+ * Trigger device software data reload.
22
+ */
23
+ reload() {
24
+ this.reloadSubject$.next();
25
+ }
26
+ /**
27
+ * Retrieves the software list that is installed on a given device.
28
+ *
29
+ * @param deviceId ID of the device to retrieve software data for
30
+ * @param filterCriteria Criteria that software items are filtered by.
31
+ * @param legacySoftwareList If provided no data will be fetched from backend. The provided software list
32
+ * will be filtered by the specified filter criteria.
33
+ *
34
+ * @returns The software items installed on the specified device filtered by the specified criteria.
35
+ */
36
+ getSoftwareList(deviceId, filterCriteria, legacySoftwareList) {
37
+ this.loadingSubject$.next(true);
38
+ return this.reloadSubject$.pipe(switchMap(() => {
39
+ const softwareList$ = !!legacySoftwareList
40
+ ? this.getLegacySoftwareList(legacySoftwareList, filterCriteria)
41
+ : this.getAdvancedSoftwareList(deviceId, filterCriteria);
42
+ return softwareList$.then(resultList => {
43
+ this.loadingSubject$.next(false);
44
+ return resultList;
45
+ });
46
+ }), share());
47
+ }
48
+ getAdvancedSoftwareList(deviceId, filterCriteria) {
49
+ const queryFilter = {
50
+ deviceId,
51
+ currentPage: 1,
52
+ pageSize: 50,
53
+ withTotalPages: true
54
+ };
55
+ if (filterCriteria?.name) {
56
+ set(queryFilter, 'name', `*${filterCriteria.name}*`);
57
+ }
58
+ if (filterCriteria?.softwareType) {
59
+ set(queryFilter, 'type', `${filterCriteria.softwareType}`);
60
+ }
61
+ return this.advancedSoftwareService.list(queryFilter);
62
+ }
63
+ getLegacySoftwareList(legacySoftwareList, filterCriteria) {
64
+ const data = filterCriteria
65
+ ? legacySoftwareList.filter(item => {
66
+ let match = true;
67
+ if (filterCriteria?.name) {
68
+ match = match && item.name?.includes(filterCriteria.name);
69
+ }
70
+ if (filterCriteria?.softwareType) {
71
+ match = match && item.softwareType === filterCriteria.softwareType;
72
+ }
73
+ return match;
74
+ })
75
+ : legacySoftwareList;
76
+ return Promise.resolve({
77
+ data,
78
+ res: null,
79
+ paging: {
80
+ totalPages: data.length
81
+ }
82
+ });
83
+ }
84
+ }
85
+ DeviceSoftwareService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DeviceSoftwareService, deps: [{ token: i1.AdvancedSoftwareService }], target: i0.ɵɵFactoryTarget.Injectable });
86
+ DeviceSoftwareService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DeviceSoftwareService, providedIn: 'root' });
87
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DeviceSoftwareService, decorators: [{
88
+ type: Injectable,
89
+ args: [{
90
+ providedIn: 'root'
91
+ }]
92
+ }], ctorParameters: function () { return [{ type: i1.AdvancedSoftwareService }]; } });
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLXNvZnR3YXJlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9yZXBvc2l0b3J5L3NvZnR3YXJlL2RldmljZS10YWIvZGV2aWNlLXNvZnR3YXJlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQ0wsdUJBQXVCLEVBR3hCLE1BQU0sdUNBQXVDLENBQUM7QUFDL0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNoQyxPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFLbEQsTUFBTSxPQUFPLHFCQUFxQjtJQVdoQyxZQUFvQix1QkFBZ0Q7UUFBaEQsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtRQUg1RCxtQkFBYyxHQUFHLElBQUksZUFBZSxDQUFPLElBQUksQ0FBQyxDQUFDO1FBQ2pELG9CQUFlLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztJQUVzQixDQUFDO0lBVnhFOztPQUVHO0lBQ0gsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFPRDs7T0FFRztJQUNILE1BQU07UUFDSixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxlQUFlLENBQ2IsUUFBUSxFQUNSLGNBQThCLEVBQzlCLGtCQUFxQztRQUVyQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVoQyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUM3QixTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2IsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDLGtCQUFrQjtnQkFDeEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxrQkFBa0IsRUFBRSxjQUFjLENBQUM7Z0JBQ2hFLENBQUMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQzNELE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDckMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2pDLE9BQU8sVUFBVSxDQUFDO1lBQ3BCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLEVBQ0YsS0FBSyxFQUFFLENBQ1IsQ0FBQztJQUNKLENBQUM7SUFFTyx1QkFBdUIsQ0FDN0IsUUFBUSxFQUNSLGNBQThCO1FBRTlCLE1BQU0sV0FBVyxHQUFHO1lBQ2xCLFFBQVE7WUFDUixXQUFXLEVBQUUsQ0FBQztZQUNkLFFBQVEsRUFBRSxFQUFFO1lBQ1osY0FBYyxFQUFFLElBQUk7U0FDckIsQ0FBQztRQUNGLElBQUksY0FBYyxFQUFFLElBQUksRUFBRTtZQUN4QixHQUFHLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLGNBQWMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1NBQ3REO1FBQ0QsSUFBSSxjQUFjLEVBQUUsWUFBWSxFQUFFO1lBQ2hDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLEdBQUcsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7U0FDNUQ7UUFDRCxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUVuRCxDQUFDO0lBQ0osQ0FBQztJQUVPLHFCQUFxQixDQUMzQixrQkFBb0MsRUFDcEMsY0FBOEI7UUFFOUIsTUFBTSxJQUFJLEdBQUcsY0FBYztZQUN6QixDQUFDLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMvQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7Z0JBQ2pCLElBQUksY0FBYyxFQUFFLElBQUksRUFBRTtvQkFDeEIsS0FBSyxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQzNEO2dCQUNELElBQUksY0FBYyxFQUFFLFlBQVksRUFBRTtvQkFDaEMsS0FBSyxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLGNBQWMsQ0FBQyxZQUFZLENBQUM7aUJBQ3BFO2dCQUVELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQyxDQUFDO1lBQ0osQ0FBQyxDQUFDLGtCQUFrQixDQUFDO1FBQ3ZCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUNyQixJQUFJO1lBQ0osR0FBRyxFQUFFLElBQUk7WUFDVCxNQUFNLEVBQUU7Z0JBQ04sVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNO2FBQ0U7U0FDNUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7a0hBaEdVLHFCQUFxQjtzSEFBckIscUJBQXFCLGNBRnBCLE1BQU07MkZBRVAscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElSZXN1bHRMaXN0LCBQYWdpbmcgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBBZHZhbmNlZFNvZnR3YXJlU2VydmljZSxcbiAgRGV2aWNlU29mdHdhcmUsXG4gIEZpbHRlckNyaXRlcmlhXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvcmVwb3NpdG9yeS9zaGFyZWQnO1xuaW1wb3J0IHsgc2V0IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc2hhcmUsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRGV2aWNlU29mdHdhcmVTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIGRldmljZSBzb2Z0d2FyZSBkYXRhIGlzIGN1cnJlbnRseSBiZWluZyBsb2FkZWQuXG4gICAqL1xuICBnZXQgbG9hZGluZyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMubG9hZGluZ1N1YmplY3QkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoc2hhcmUoKSk7XG4gIH1cblxuICBwcml2YXRlIHJlbG9hZFN1YmplY3QkID0gbmV3IEJlaGF2aW9yU3ViamVjdDx2b2lkPihudWxsKTtcbiAgcHJpdmF0ZSBsb2FkaW5nU3ViamVjdCQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYWR2YW5jZWRTb2Z0d2FyZVNlcnZpY2U6IEFkdmFuY2VkU29mdHdhcmVTZXJ2aWNlKSB7fVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VyIGRldmljZSBzb2Z0d2FyZSBkYXRhIHJlbG9hZC5cbiAgICovXG4gIHJlbG9hZCgpIHtcbiAgICB0aGlzLnJlbG9hZFN1YmplY3QkLm5leHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHNvZnR3YXJlIGxpc3QgdGhhdCBpcyBpbnN0YWxsZWQgb24gYSBnaXZlbiBkZXZpY2UuXG4gICAqXG4gICAqIEBwYXJhbSBkZXZpY2VJZCBJRCBvZiB0aGUgZGV2aWNlIHRvIHJldHJpZXZlIHNvZnR3YXJlIGRhdGEgZm9yXG4gICAqIEBwYXJhbSBmaWx0ZXJDcml0ZXJpYSBDcml0ZXJpYSB0aGF0IHNvZnR3YXJlIGl0ZW1zIGFyZSBmaWx0ZXJlZCBieS5cbiAgICogQHBhcmFtIGxlZ2FjeVNvZnR3YXJlTGlzdCBJZiBwcm92aWRlZCBubyBkYXRhIHdpbGwgYmUgZmV0Y2hlZCBmcm9tIGJhY2tlbmQuIFRoZSBwcm92aWRlZCBzb2Z0d2FyZSBsaXN0XG4gICAqIHdpbGwgYmUgZmlsdGVyZWQgYnkgdGhlIHNwZWNpZmllZCBmaWx0ZXIgY3JpdGVyaWEuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBzb2Z0d2FyZSBpdGVtcyBpbnN0YWxsZWQgb24gdGhlIHNwZWNpZmllZCBkZXZpY2UgZmlsdGVyZWQgYnkgdGhlIHNwZWNpZmllZCBjcml0ZXJpYS5cbiAgICovXG4gIGdldFNvZnR3YXJlTGlzdChcbiAgICBkZXZpY2VJZCxcbiAgICBmaWx0ZXJDcml0ZXJpYTogRmlsdGVyQ3JpdGVyaWEsXG4gICAgbGVnYWN5U29mdHdhcmVMaXN0PzogRGV2aWNlU29mdHdhcmVbXVxuICApOiBPYnNlcnZhYmxlPElSZXN1bHRMaXN0PERldmljZVNvZnR3YXJlPj4ge1xuICAgIHRoaXMubG9hZGluZ1N1YmplY3QkLm5leHQodHJ1ZSk7XG5cbiAgICByZXR1cm4gdGhpcy5yZWxvYWRTdWJqZWN0JC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgY29uc3Qgc29mdHdhcmVMaXN0JCA9ICEhbGVnYWN5U29mdHdhcmVMaXN0XG4gICAgICAgICAgPyB0aGlzLmdldExlZ2FjeVNvZnR3YXJlTGlzdChsZWdhY3lTb2Z0d2FyZUxpc3QsIGZpbHRlckNyaXRlcmlhKVxuICAgICAgICAgIDogdGhpcy5nZXRBZHZhbmNlZFNvZnR3YXJlTGlzdChkZXZpY2VJZCwgZmlsdGVyQ3JpdGVyaWEpO1xuICAgICAgICByZXR1cm4gc29mdHdhcmVMaXN0JC50aGVuKHJlc3VsdExpc3QgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QkLm5leHQoZmFsc2UpO1xuICAgICAgICAgIHJldHVybiByZXN1bHRMaXN0O1xuICAgICAgICB9KTtcbiAgICAgIH0pLFxuICAgICAgc2hhcmUoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldEFkdmFuY2VkU29mdHdhcmVMaXN0KFxuICAgIGRldmljZUlkLFxuICAgIGZpbHRlckNyaXRlcmlhOiBGaWx0ZXJDcml0ZXJpYVxuICApOiBQcm9taXNlPElSZXN1bHRMaXN0PERldmljZVNvZnR3YXJlPj4ge1xuICAgIGNvbnN0IHF1ZXJ5RmlsdGVyID0ge1xuICAgICAgZGV2aWNlSWQsXG4gICAgICBjdXJyZW50UGFnZTogMSxcbiAgICAgIHBhZ2VTaXplOiA1MCxcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlXG4gICAgfTtcbiAgICBpZiAoZmlsdGVyQ3JpdGVyaWE/Lm5hbWUpIHtcbiAgICAgIHNldChxdWVyeUZpbHRlciwgJ25hbWUnLCBgKiR7ZmlsdGVyQ3JpdGVyaWEubmFtZX0qYCk7XG4gICAgfVxuICAgIGlmIChmaWx0ZXJDcml0ZXJpYT8uc29mdHdhcmVUeXBlKSB7XG4gICAgICBzZXQocXVlcnlGaWx0ZXIsICd0eXBlJywgYCR7ZmlsdGVyQ3JpdGVyaWEuc29mdHdhcmVUeXBlfWApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hZHZhbmNlZFNvZnR3YXJlU2VydmljZS5saXN0KHF1ZXJ5RmlsdGVyKSBhcyB1bmtub3duIGFzIFByb21pc2U8XG4gICAgICBJUmVzdWx0TGlzdDxEZXZpY2VTb2Z0d2FyZT5cbiAgICA+O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMZWdhY3lTb2Z0d2FyZUxpc3QoXG4gICAgbGVnYWN5U29mdHdhcmVMaXN0OiBEZXZpY2VTb2Z0d2FyZVtdLFxuICAgIGZpbHRlckNyaXRlcmlhOiBGaWx0ZXJDcml0ZXJpYVxuICApOiBQcm9taXNlPElSZXN1bHRMaXN0PERldmljZVNvZnR3YXJlPj4ge1xuICAgIGNvbnN0IGRhdGEgPSBmaWx0ZXJDcml0ZXJpYVxuICAgICAgPyBsZWdhY3lTb2Z0d2FyZUxpc3QuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICAgIGxldCBtYXRjaCA9IHRydWU7XG4gICAgICAgICAgaWYgKGZpbHRlckNyaXRlcmlhPy5uYW1lKSB7XG4gICAgICAgICAgICBtYXRjaCA9IG1hdGNoICYmIGl0ZW0ubmFtZT8uaW5jbHVkZXMoZmlsdGVyQ3JpdGVyaWEubmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChmaWx0ZXJDcml0ZXJpYT8uc29mdHdhcmVUeXBlKSB7XG4gICAgICAgICAgICBtYXRjaCA9IG1hdGNoICYmIGl0ZW0uc29mdHdhcmVUeXBlID09PSBmaWx0ZXJDcml0ZXJpYS5zb2Z0d2FyZVR5cGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICB9KVxuICAgICAgOiBsZWdhY3lTb2Z0d2FyZUxpc3Q7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICBkYXRhLFxuICAgICAgcmVzOiBudWxsLFxuICAgICAgcGFnaW5nOiB7XG4gICAgICAgIHRvdGFsUGFnZXM6IGRhdGEubGVuZ3RoXG4gICAgICB9IGFzIFBhZ2luZzxEZXZpY2VTb2Z0d2FyZT5cbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -1,7 +1,8 @@
1
1
  export * from './device-software-changes.component';
2
2
  export * from './device-software-list.component';
3
+ export * from './device-software.service';
3
4
  export * from './installed-software.component';
4
5
  export * from './software-device-tab.component';
5
6
  export * from './software-device-tab.guard';
6
7
  export * from './software-repository-device-tab.module';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9yZXBvc2l0b3J5L3NvZnR3YXJlL2RldmljZS10YWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMseUNBQXlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2RldmljZS1zb2Z0d2FyZS1jaGFuZ2VzLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2RldmljZS1zb2Z0d2FyZS1saXN0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2luc3RhbGxlZC1zb2Z0d2FyZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zb2Z0d2FyZS1kZXZpY2UtdGFiLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NvZnR3YXJlLWRldmljZS10YWIuZ3VhcmQnO1xuZXhwb3J0ICogZnJvbSAnLi9zb2Z0d2FyZS1yZXBvc2l0b3J5LWRldmljZS10YWIubW9kdWxlJztcbiJdfQ==
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9yZXBvc2l0b3J5L3NvZnR3YXJlL2RldmljZS10YWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx5Q0FBeUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZGV2aWNlLXNvZnR3YXJlLWNoYW5nZXMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZGV2aWNlLXNvZnR3YXJlLWxpc3QuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZGV2aWNlLXNvZnR3YXJlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnN0YWxsZWQtc29mdHdhcmUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc29mdHdhcmUtZGV2aWNlLXRhYi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zb2Z0d2FyZS1kZXZpY2UtdGFiLmd1YXJkJztcbmV4cG9ydCAqIGZyb20gJy4vc29mdHdhcmUtcmVwb3NpdG9yeS1kZXZpY2UtdGFiLm1vZHVsZSc7XG4iXX0=
@@ -3,20 +3,23 @@ import { ActivatedRoute } from '@angular/router';
3
3
  import { InventoryService, OperationStatus } from '@c8y/client';
4
4
  import { AdvancedSoftwareService, RepositoryService, RepositoryType } from '@c8y/ngx-components/repository/shared';
5
5
  import { BehaviorSubject } from 'rxjs';
6
- import { distinctUntilKeyChanged, map, switchMap } from 'rxjs/operators';
6
+ import { filter, map, switchMap, take } from 'rxjs/operators';
7
+ import { DeviceSoftwareService } from './device-software.service';
7
8
  import * as i0 from "@angular/core";
8
9
  import * as i1 from "@angular/router";
9
10
  import * as i2 from "@c8y/ngx-components/repository/shared";
10
11
  import * as i3 from "@c8y/client";
11
- import * as i4 from "@angular/common";
12
- import * as i5 from "@c8y/ngx-components";
13
- import * as i6 from "./installed-software.component";
14
- import * as i7 from "./device-software-changes.component";
12
+ import * as i4 from "./device-software.service";
13
+ import * as i5 from "@angular/common";
14
+ import * as i6 from "@c8y/ngx-components";
15
+ import * as i7 from "./installed-software.component";
16
+ import * as i8 from "./device-software-changes.component";
15
17
  export class SoftwareDeviceTabComponent {
16
- constructor(route, repository, inventory, advancedSoftwareService) {
18
+ constructor(route, repository, inventory, deviceSoftwareService, advancedSoftwareService) {
17
19
  this.route = route;
18
20
  this.repository = repository;
19
21
  this.inventory = inventory;
22
+ this.deviceSoftwareService = deviceSoftwareService;
20
23
  this.advancedSoftwareService = advancedSoftwareService;
21
24
  this.deviceId = this.route.snapshot.parent.data.contextData.id;
22
25
  this.device$ = new BehaviorSubject(this.route.snapshot.parent.data.contextData);
@@ -24,7 +27,7 @@ export class SoftwareDeviceTabComponent {
24
27
  const deviceTypeQuery = this.repository.getDeviceTypeQuery(RepositoryType.SOFTWARE, device);
25
28
  return this.repository.getSoftwareTypeQuery(device, deviceTypeQuery);
26
29
  }));
27
- this.list$ = this.device$.pipe(distinctUntilKeyChanged('id'), switchMap(device => this.advancedSoftwareService
30
+ this.list$ = this.device$.pipe(switchMap(device => this.advancedSoftwareService
28
31
  .isASMAvailable()
29
32
  .then(isASMAvailable => ({ isASMAvailable, device }))), map(({ isASMAvailable, device }) =>
30
33
  // with ASM available software items will be retrieved directly in the
@@ -65,7 +68,13 @@ export class SoftwareDeviceTabComponent {
65
68
  }
66
69
  async loadDevice() {
67
70
  this.reloading = true;
68
- const device = (await this.inventory.detail(this.deviceId, { withChildren: false })).data;
71
+ this.deviceSoftwareService.reload();
72
+ const device = await Promise.all([
73
+ this.deviceSoftwareService.loading$
74
+ .pipe(filter(loading => !loading), take(1))
75
+ .toPromise(),
76
+ this.inventory.detail(this.deviceId, { withChildren: false }).then(result => result.data)
77
+ ]).then(([_, device]) => device);
69
78
  this.device$.next(device);
70
79
  this.reloading = false;
71
80
  }
@@ -100,10 +109,10 @@ export class SoftwareDeviceTabComponent {
100
109
  return (operation && [OperationStatus.PENDING, OperationStatus.EXECUTING].includes(operation.status));
101
110
  }
102
111
  }
103
- SoftwareDeviceTabComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: SoftwareDeviceTabComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.RepositoryService }, { token: i3.InventoryService }, { token: i2.AdvancedSoftwareService }], target: i0.ɵɵFactoryTarget.Component });
104
- SoftwareDeviceTabComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: SoftwareDeviceTabComponent, selector: "c8y-software-device-tab", ngImport: i0, template: "<c8y-action-bar-item [placement]=\"'right'\">\n <button class=\"btn btn-link\" title=\"{{ 'Reload' | translate }}\" (click)=\"loadDevice()\">\n <i c8yIcon=\"refresh\" [ngClass]=\"{ 'icon-spin': reloading }\"></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<div class=\"card split-view--7-5 m-b-0\">\n <c8y-installed-software\n class=\"split-view__list\"\n [device]=\"device$ | async\"\n [typesQuery]=\"typesQuery$ | async\"\n [softwareList]=\"list$ | async\"\n [deviceSoftwareChanges]=\"changes$ | async\"\n [deviceSoftwareChangesOperation]=\"changesOperation$ | async\"\n [deviceSoftwareChangesInProgress]=\"changesInProgress$ | async\"\n (changes)=\"addChanges($event)\"\n (showSoftwareChanges)=\"showSoftwareChanges = true\"\n ></c8y-installed-software>\n <c8y-device-software-changes\n class=\"bg-level-1 split-view__detail\"\n [ngClass]=\"{ 'split-view__detail--selected': showSoftwareChanges }\"\n [changes]=\"changes$ | async\"\n [changesInProgress]=\"changesInProgress$ | async\"\n (clear)=\"clearChanges()\"\n (drop)=\"dropChange($event)\"\n (apply)=\"applyChanges()\"\n (hideSoftwareChanges)=\"showSoftwareChanges = false\"\n ></c8y-device-software-changes>\n</div>\n", dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i5.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId"] }, { kind: "directive", type: i5.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "component", type: i6.InstalledSoftwareComponent, selector: "c8y-installed-software", inputs: ["device", "softwareList", "deviceSoftwareChanges", "deviceSoftwareChangesOperation", "deviceSoftwareChangesInProgress", "typesQuery"], outputs: ["changes", "showSoftwareChanges"] }, { kind: "component", type: i7.DeviceSoftwareChangesComponent, selector: "c8y-device-software-changes", inputs: ["changes", "changesInProgress"], outputs: ["clear", "drop", "apply", "hideSoftwareChanges"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.C8yTranslatePipe, name: "translate" }] });
112
+ SoftwareDeviceTabComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: SoftwareDeviceTabComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.RepositoryService }, { token: i3.InventoryService }, { token: i4.DeviceSoftwareService }, { token: i2.AdvancedSoftwareService }], target: i0.ɵɵFactoryTarget.Component });
113
+ SoftwareDeviceTabComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: SoftwareDeviceTabComponent, selector: "c8y-software-device-tab", ngImport: i0, template: "<c8y-action-bar-item [placement]=\"'right'\">\n <button class=\"btn btn-link\" title=\"{{ 'Reload' | translate }}\" (click)=\"loadDevice()\">\n <i c8yIcon=\"refresh\" [ngClass]=\"{ 'icon-spin': reloading }\"></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<div class=\"card split-view--7-5 m-b-0\">\n <c8y-installed-software\n class=\"split-view__list\"\n [device]=\"device$ | async\"\n [typesQuery]=\"typesQuery$ | async\"\n [softwareList]=\"list$ | async\"\n [deviceSoftwareChanges]=\"changes$ | async\"\n [deviceSoftwareChangesOperation]=\"changesOperation$ | async\"\n [deviceSoftwareChangesInProgress]=\"changesInProgress$ | async\"\n (changes)=\"addChanges($event)\"\n (showSoftwareChanges)=\"showSoftwareChanges = true\"\n ></c8y-installed-software>\n <c8y-device-software-changes\n class=\"bg-level-1 split-view__detail\"\n [ngClass]=\"{ 'split-view__detail--selected': showSoftwareChanges }\"\n [changes]=\"changes$ | async\"\n [changesInProgress]=\"changesInProgress$ | async\"\n (clear)=\"clearChanges()\"\n (drop)=\"dropChange($event)\"\n (apply)=\"applyChanges()\"\n (hideSoftwareChanges)=\"showSoftwareChanges = false\"\n ></c8y-device-software-changes>\n</div>\n", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i6.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId"] }, { kind: "directive", type: i6.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "component", type: i7.InstalledSoftwareComponent, selector: "c8y-installed-software", inputs: ["device", "softwareList", "deviceSoftwareChanges", "deviceSoftwareChangesOperation", "deviceSoftwareChangesInProgress", "typesQuery"], outputs: ["changes", "showSoftwareChanges"] }, { kind: "component", type: i8.DeviceSoftwareChangesComponent, selector: "c8y-device-software-changes", inputs: ["changes", "changesInProgress"], outputs: ["clear", "drop", "apply", "hideSoftwareChanges"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.C8yTranslatePipe, name: "translate" }] });
105
114
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: SoftwareDeviceTabComponent, decorators: [{
106
115
  type: Component,
107
116
  args: [{ selector: 'c8y-software-device-tab', template: "<c8y-action-bar-item [placement]=\"'right'\">\n <button class=\"btn btn-link\" title=\"{{ 'Reload' | translate }}\" (click)=\"loadDevice()\">\n <i c8yIcon=\"refresh\" [ngClass]=\"{ 'icon-spin': reloading }\"></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<div class=\"card split-view--7-5 m-b-0\">\n <c8y-installed-software\n class=\"split-view__list\"\n [device]=\"device$ | async\"\n [typesQuery]=\"typesQuery$ | async\"\n [softwareList]=\"list$ | async\"\n [deviceSoftwareChanges]=\"changes$ | async\"\n [deviceSoftwareChangesOperation]=\"changesOperation$ | async\"\n [deviceSoftwareChangesInProgress]=\"changesInProgress$ | async\"\n (changes)=\"addChanges($event)\"\n (showSoftwareChanges)=\"showSoftwareChanges = true\"\n ></c8y-installed-software>\n <c8y-device-software-changes\n class=\"bg-level-1 split-view__detail\"\n [ngClass]=\"{ 'split-view__detail--selected': showSoftwareChanges }\"\n [changes]=\"changes$ | async\"\n [changesInProgress]=\"changesInProgress$ | async\"\n (clear)=\"clearChanges()\"\n (drop)=\"dropChange($event)\"\n (apply)=\"applyChanges()\"\n (hideSoftwareChanges)=\"showSoftwareChanges = false\"\n ></c8y-device-software-changes>\n</div>\n" }]
108
- }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.RepositoryService }, { type: i3.InventoryService }, { type: i2.AdvancedSoftwareService }]; } });
109
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29mdHdhcmUtZGV2aWNlLXRhYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9yZXBvc2l0b3J5L3NvZnR3YXJlL2RldmljZS10YWIvc29mdHdhcmUtZGV2aWNlLXRhYi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9yZXBvc2l0b3J5L3NvZnR3YXJlL2RldmljZS10YWIvc29mdHdhcmUtZGV2aWNlLXRhYi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQWtCLGdCQUFnQixFQUFjLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1RixPQUFPLEVBQ0wsdUJBQXVCLEVBR3ZCLGlCQUFpQixFQUNqQixjQUFjLEVBQ2YsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7OztBQU16RSxNQUFNLE9BQU8sMEJBQTBCO0lBOEJyQyxZQUNVLEtBQXFCLEVBQ3JCLFVBQTZCLEVBQzdCLFNBQTJCLEVBQzNCLHVCQUFnRDtRQUhoRCxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixlQUFVLEdBQVYsVUFBVSxDQUFtQjtRQUM3QixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQiw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBakMxRCxhQUFRLEdBQW9CLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUMzRSxZQUFPLEdBQUcsSUFBSSxlQUFlLENBQWlCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDM0YsZ0JBQVcsR0FBdUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ2pELEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNYLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM1RixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ3ZFLENBQUMsQ0FBQyxDQUNILENBQUM7UUFDRixVQUFLLEdBQWlDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNyRCx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsRUFDN0IsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQ2pCLElBQUksQ0FBQyx1QkFBdUI7YUFDekIsY0FBYyxFQUFFO2FBQ2hCLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUN4RCxFQUNELEdBQUcsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUU7UUFDakMsc0VBQXNFO1FBQ3RFLGlDQUFpQztRQUNqQyxjQUFjLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FDM0UsQ0FDRixDQUFDO1FBQ0YsYUFBUSxHQUFHLElBQUksZUFBZSxDQUF5QixFQUFFLENBQUMsQ0FBQztRQUMzRCxzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBYSxJQUFJLENBQUMsQ0FBQztRQUMxRCx1QkFBa0IsR0FBd0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FDbkUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUMvQyxDQUFDO1FBQ0YsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQix3QkFBbUIsR0FBWSxLQUFLLENBQUM7SUFPbEMsQ0FBQztJQUVKLEtBQUssQ0FBQyxRQUFRO1FBQ1osTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDeEIsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELFVBQVUsQ0FBQyxnQkFBd0M7UUFDakQsSUFBSSxhQUFhLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUFFO1lBQ3pDLE1BQU0sYUFBYSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FDdEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsZUFBZSxDQUFDLENBQ25ELENBQUM7WUFDRixJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUNsQixhQUFhLEdBQUcsQ0FBQyxHQUFHLGFBQWEsRUFBRSxlQUFlLENBQUMsQ0FBQzthQUNyRDtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELFVBQVUsQ0FBQyxpQkFBdUM7UUFDaEQsSUFBSSxhQUFhLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsYUFBYSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQ2xDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxpQkFBaUIsQ0FBQyxDQUN0RSxDQUFDO1FBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELGNBQWMsQ0FBQyxPQUE2QixFQUFFLE9BQTZCO1FBQ3pFLE9BQU8sQ0FDTCxPQUFPLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJO1lBQzdCLE9BQU8sQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDLE9BQU87WUFDbkMsT0FBTyxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsTUFBTSxDQUNsQyxDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVU7UUFDZCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixNQUFNLE1BQU0sR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzFGLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWTtRQUNoQixNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsNkJBQTZCLENBQ25FLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FDcEIsQ0FBQztRQUNGLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU8sS0FBSyxDQUFDLGFBQWE7UUFDekIsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0RixNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVPLEtBQUssQ0FBQyxjQUFjLENBQUMsU0FBcUI7UUFDaEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV2QyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDaEMsTUFBTSxJQUFJLENBQUMsMkJBQTJCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQ25ELGVBQWUsQ0FBQyxFQUFFO2dCQUNoQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLGVBQWUsQ0FBQyxNQUFNLEtBQUssZUFBZSxDQUFDLFVBQVUsRUFBRTtvQkFDekQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUNwQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7aUJBQ25CO1lBQ0gsQ0FBQyxFQUNELGVBQWUsQ0FBQyxFQUFFO2dCQUNoQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQy9DLENBQUMsQ0FDRixDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLDJCQUEyQixDQUFDLFNBQXFCO1FBQzdELE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQ0FBcUMsQ0FDekUsU0FBUyxFQUNULElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUNuQixDQUFDO1FBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVPLFlBQVksQ0FBQyxTQUFxQjtRQUN4QyxPQUFPLENBQ0wsU0FBUyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FDN0YsQ0FBQztJQUNKLENBQUM7O3VIQS9IVSwwQkFBMEI7MkdBQTFCLDBCQUEwQiwrRENqQnZDLG12Q0E4QkE7MkZEYmEsMEJBQTBCO2tCQUp0QyxTQUFTOytCQUNFLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdCwgSW52ZW50b3J5U2VydmljZSwgSU9wZXJhdGlvbiwgT3BlcmF0aW9uU3RhdHVzIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWR2YW5jZWRTb2Z0d2FyZVNlcnZpY2UsXG4gIERldmljZVNvZnR3YXJlLFxuICBEZXZpY2VTb2Z0d2FyZUNoYW5nZSxcbiAgUmVwb3NpdG9yeVNlcnZpY2UsXG4gIFJlcG9zaXRvcnlUeXBlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvcmVwb3NpdG9yeS9zaGFyZWQnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsS2V5Q2hhbmdlZCwgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1zb2Z0d2FyZS1kZXZpY2UtdGFiJyxcbiAgdGVtcGxhdGVVcmw6ICdzb2Z0d2FyZS1kZXZpY2UtdGFiLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBTb2Z0d2FyZURldmljZVRhYkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGRldmljZUlkOiBzdHJpbmcgfCBudW1iZXIgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmVudC5kYXRhLmNvbnRleHREYXRhLmlkO1xuICBkZXZpY2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJTWFuYWdlZE9iamVjdD4odGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJlbnQuZGF0YS5jb250ZXh0RGF0YSk7XG4gIHR5cGVzUXVlcnkkOiBPYnNlcnZhYmxlPG9iamVjdD4gPSB0aGlzLmRldmljZSQucGlwZShcbiAgICBtYXAoZGV2aWNlID0+IHtcbiAgICAgIGNvbnN0IGRldmljZVR5cGVRdWVyeSA9IHRoaXMucmVwb3NpdG9yeS5nZXREZXZpY2VUeXBlUXVlcnkoUmVwb3NpdG9yeVR5cGUuU09GVFdBUkUsIGRldmljZSk7XG4gICAgICByZXR1cm4gdGhpcy5yZXBvc2l0b3J5LmdldFNvZnR3YXJlVHlwZVF1ZXJ5KGRldmljZSwgZGV2aWNlVHlwZVF1ZXJ5KTtcbiAgICB9KVxuICApO1xuICBsaXN0JDogT2JzZXJ2YWJsZTxEZXZpY2VTb2Z0d2FyZVtdPiA9IHRoaXMuZGV2aWNlJC5waXBlKFxuICAgIGRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkKCdpZCcpLFxuICAgIHN3aXRjaE1hcChkZXZpY2UgPT5cbiAgICAgIHRoaXMuYWR2YW5jZWRTb2Z0d2FyZVNlcnZpY2VcbiAgICAgICAgLmlzQVNNQXZhaWxhYmxlKClcbiAgICAgICAgLnRoZW4oaXNBU01BdmFpbGFibGUgPT4gKHsgaXNBU01BdmFpbGFibGUsIGRldmljZSB9KSlcbiAgICApLFxuICAgIG1hcCgoeyBpc0FTTUF2YWlsYWJsZSwgZGV2aWNlIH0pID0+XG4gICAgICAvLyB3aXRoIEFTTSBhdmFpbGFibGUgc29mdHdhcmUgaXRlbXMgd2lsbCBiZSByZXRyaWV2ZWQgZGlyZWN0bHkgaW4gdGhlXG4gICAgICAvLyBkZXZpY2Utc29mdHdhcmUtbGlzdCBjb21wb25lbnRcbiAgICAgIGlzQVNNQXZhaWxhYmxlID8gdW5kZWZpbmVkIDogdGhpcy5yZXBvc2l0b3J5LmdldERldmljZVNvZnR3YXJlTGlzdChkZXZpY2UpXG4gICAgKVxuICApO1xuICBjaGFuZ2VzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGV2aWNlU29mdHdhcmVDaGFuZ2VbXT4oW10pO1xuICBjaGFuZ2VzT3BlcmF0aW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SU9wZXJhdGlvbj4obnVsbCk7XG4gIGNoYW5nZXNJblByb2dyZXNzJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuY2hhbmdlc09wZXJhdGlvbiQucGlwZShcbiAgICBtYXAob3BlcmF0aW9uID0+IHRoaXMuaXNJblByb2dyZXNzKG9wZXJhdGlvbikpXG4gICk7XG4gIHJlbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93U29mdHdhcmVDaGFuZ2VzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZXBvc2l0b3J5OiBSZXBvc2l0b3J5U2VydmljZSxcbiAgICBwcml2YXRlIGludmVudG9yeTogSW52ZW50b3J5U2VydmljZSxcbiAgICBwcml2YXRlIGFkdmFuY2VkU29mdHdhcmVTZXJ2aWNlOiBBZHZhbmNlZFNvZnR3YXJlU2VydmljZVxuICApIHt9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgYXdhaXQgdGhpcy5sb2FkRGV2aWNlKCk7XG4gICAgYXdhaXQgdGhpcy5sb2FkT3BlcmF0aW9uKCk7XG4gIH1cblxuICBhZGRDaGFuZ2VzKHJlcXVlc3RlZENoYW5nZXM6IERldmljZVNvZnR3YXJlQ2hhbmdlW10pIHtcbiAgICBsZXQgc3RhZ2VkQ2hhbmdlcyA9IFsuLi50aGlzLmNoYW5nZXMkLnZhbHVlXTtcbiAgICByZXF1ZXN0ZWRDaGFuZ2VzLmZvckVhY2gocmVxdWVzdGVkQ2hhbmdlID0+IHtcbiAgICAgIGNvbnN0IGFscmVhZHlTdGFnZWQgPSBzdGFnZWRDaGFuZ2VzLnNvbWUoc3RhZ2VkQ2hhbmdlID0+XG4gICAgICAgIHRoaXMuYXJlU2FtZUNoYW5nZXMoc3RhZ2VkQ2hhbmdlLCByZXF1ZXN0ZWRDaGFuZ2UpXG4gICAgICApO1xuICAgICAgaWYgKCFhbHJlYWR5U3RhZ2VkKSB7XG4gICAgICAgIHN0YWdlZENoYW5nZXMgPSBbLi4uc3RhZ2VkQ2hhbmdlcywgcmVxdWVzdGVkQ2hhbmdlXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmNoYW5nZXMkLm5leHQoc3RhZ2VkQ2hhbmdlcyk7XG4gIH1cblxuICBkcm9wQ2hhbmdlKGNoYW5nZVRvQmVEcm9wcGVkOiBEZXZpY2VTb2Z0d2FyZUNoYW5nZSkge1xuICAgIGxldCBzdGFnZWRDaGFuZ2VzID0gWy4uLnRoaXMuY2hhbmdlcyQudmFsdWVdO1xuICAgIHN0YWdlZENoYW5nZXMgPSBzdGFnZWRDaGFuZ2VzLmZpbHRlcihcbiAgICAgIHN0YWdlZENoYW5nZSA9PiAhdGhpcy5hcmVTYW1lQ2hhbmdlcyhzdGFnZWRDaGFuZ2UsIGNoYW5nZVRvQmVEcm9wcGVkKVxuICAgICk7XG4gICAgdGhpcy5jaGFuZ2VzJC5uZXh0KHN0YWdlZENoYW5nZXMpO1xuICB9XG5cbiAgYXJlU2FtZUNoYW5nZXMoY2hhbmdlMTogRGV2aWNlU29mdHdhcmVDaGFuZ2UsIGNoYW5nZTI6IERldmljZVNvZnR3YXJlQ2hhbmdlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGNoYW5nZTEubmFtZSA9PT0gY2hhbmdlMi5uYW1lICYmXG4gICAgICBjaGFuZ2UxLnZlcnNpb24gPT09IGNoYW5nZTIudmVyc2lvbiAmJlxuICAgICAgY2hhbmdlMS5hY3Rpb24gPT09IGNoYW5nZTIuYWN0aW9uXG4gICAgKTtcbiAgfVxuXG4gIGNsZWFyQ2hhbmdlcygpIHtcbiAgICB0aGlzLmNoYW5nZXMkLm5leHQoW10pO1xuICB9XG5cbiAgYXN5bmMgbG9hZERldmljZSgpIHtcbiAgICB0aGlzLnJlbG9hZGluZyA9IHRydWU7XG4gICAgY29uc3QgZGV2aWNlID0gKGF3YWl0IHRoaXMuaW52ZW50b3J5LmRldGFpbCh0aGlzLmRldmljZUlkLCB7IHdpdGhDaGlsZHJlbjogZmFsc2UgfSkpLmRhdGE7XG4gICAgdGhpcy5kZXZpY2UkLm5leHQoZGV2aWNlKTtcbiAgICB0aGlzLnJlbG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgYXBwbHlDaGFuZ2VzKCkge1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IGF3YWl0IHRoaXMucmVwb3NpdG9yeS5jcmVhdGVTb2Z0d2FyZVVwZGF0ZU9wZXJhdGlvbihcbiAgICAgIHRoaXMuZGV2aWNlJC52YWx1ZSxcbiAgICAgIHRoaXMuY2hhbmdlcyQudmFsdWVcbiAgICApO1xuICAgIGF3YWl0IHRoaXMudHJhY2tPcGVyYXRpb24ob3BlcmF0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZE9wZXJhdGlvbigpIHtcbiAgICBjb25zdCBvcGVyYXRpb24gPSBhd2FpdCB0aGlzLnJlcG9zaXRvcnkuZ2V0TGFzdFNvZnR3YXJlVXBkYXRlT3BlcmF0aW9uKHRoaXMuZGV2aWNlSWQpO1xuICAgIGF3YWl0IHRoaXMudHJhY2tPcGVyYXRpb24ob3BlcmF0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdHJhY2tPcGVyYXRpb24ob3BlcmF0aW9uOiBJT3BlcmF0aW9uKSB7XG4gICAgdGhpcy5jaGFuZ2VzT3BlcmF0aW9uJC5uZXh0KG9wZXJhdGlvbik7XG5cbiAgICBpZiAodGhpcy5pc0luUHJvZ3Jlc3Mob3BlcmF0aW9uKSkge1xuICAgICAgYXdhaXQgdGhpcy5kaXNwbGF5Q2hhbmdlc0Zyb21PcGVyYXRpb24ob3BlcmF0aW9uKTtcbiAgICAgIHRoaXMucmVwb3NpdG9yeS5vYnNlcnZlT3BlcmF0aW9uKG9wZXJhdGlvbikuc3Vic2NyaWJlKFxuICAgICAgICBvcGVyYXRpb25VcGRhdGUgPT4ge1xuICAgICAgICAgIHRoaXMuY2hhbmdlc09wZXJhdGlvbiQubmV4dChvcGVyYXRpb25VcGRhdGUpO1xuICAgICAgICAgIGlmIChvcGVyYXRpb25VcGRhdGUuc3RhdHVzID09PSBPcGVyYXRpb25TdGF0dXMuU1VDQ0VTU0ZVTCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhckNoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMubG9hZERldmljZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgb3BlcmF0aW9uVXBkYXRlID0+IHtcbiAgICAgICAgICB0aGlzLmNoYW5nZXNPcGVyYXRpb24kLm5leHQob3BlcmF0aW9uVXBkYXRlKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRpc3BsYXlDaGFuZ2VzRnJvbU9wZXJhdGlvbihvcGVyYXRpb246IElPcGVyYXRpb24pIHtcbiAgICBjb25zdCBjaGFuZ2VzID0gYXdhaXQgdGhpcy5yZXBvc2l0b3J5LmdldERldmljZVNvZnR3YXJlQ2hhbmdlc0Zyb21PcGVyYXRpb24oXG4gICAgICBvcGVyYXRpb24sXG4gICAgICB0aGlzLmRldmljZSQudmFsdWVcbiAgICApO1xuICAgIHRoaXMuY2hhbmdlcyQubmV4dChjaGFuZ2VzKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNJblByb2dyZXNzKG9wZXJhdGlvbjogSU9wZXJhdGlvbikge1xuICAgIHJldHVybiAoXG4gICAgICBvcGVyYXRpb24gJiYgW09wZXJhdGlvblN0YXR1cy5QRU5ESU5HLCBPcGVyYXRpb25TdGF0dXMuRVhFQ1VUSU5HXS5pbmNsdWRlcyhvcGVyYXRpb24uc3RhdHVzKVxuICAgICk7XG4gIH1cbn1cbiIsIjxjOHktYWN0aW9uLWJhci1pdGVtIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiPlxuICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCIgdGl0bGU9XCJ7eyAnUmVsb2FkJyB8IHRyYW5zbGF0ZSB9fVwiIChjbGljayk9XCJsb2FkRGV2aWNlKClcIj5cbiAgICA8aSBjOHlJY29uPVwicmVmcmVzaFwiIFtuZ0NsYXNzXT1cInsgJ2ljb24tc3Bpbic6IHJlbG9hZGluZyB9XCI+PC9pPlxuICAgIHt7ICdSZWxvYWQnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48ZGl2IGNsYXNzPVwiY2FyZCBzcGxpdC12aWV3LS03LTUgbS1iLTBcIj5cbiAgPGM4eS1pbnN0YWxsZWQtc29mdHdhcmVcbiAgICBjbGFzcz1cInNwbGl0LXZpZXdfX2xpc3RcIlxuICAgIFtkZXZpY2VdPVwiZGV2aWNlJCB8IGFzeW5jXCJcbiAgICBbdHlwZXNRdWVyeV09XCJ0eXBlc1F1ZXJ5JCB8IGFzeW5jXCJcbiAgICBbc29mdHdhcmVMaXN0XT1cImxpc3QkIHwgYXN5bmNcIlxuICAgIFtkZXZpY2VTb2Z0d2FyZUNoYW5nZXNdPVwiY2hhbmdlcyQgfCBhc3luY1wiXG4gICAgW2RldmljZVNvZnR3YXJlQ2hhbmdlc09wZXJhdGlvbl09XCJjaGFuZ2VzT3BlcmF0aW9uJCB8IGFzeW5jXCJcbiAgICBbZGV2aWNlU29mdHdhcmVDaGFuZ2VzSW5Qcm9ncmVzc109XCJjaGFuZ2VzSW5Qcm9ncmVzcyQgfCBhc3luY1wiXG4gICAgKGNoYW5nZXMpPVwiYWRkQ2hhbmdlcygkZXZlbnQpXCJcbiAgICAoc2hvd1NvZnR3YXJlQ2hhbmdlcyk9XCJzaG93U29mdHdhcmVDaGFuZ2VzID0gdHJ1ZVwiXG4gID48L2M4eS1pbnN0YWxsZWQtc29mdHdhcmU+XG4gIDxjOHktZGV2aWNlLXNvZnR3YXJlLWNoYW5nZXNcbiAgICBjbGFzcz1cImJnLWxldmVsLTEgc3BsaXQtdmlld19fZGV0YWlsXCJcbiAgICBbbmdDbGFzc109XCJ7ICdzcGxpdC12aWV3X19kZXRhaWwtLXNlbGVjdGVkJzogc2hvd1NvZnR3YXJlQ2hhbmdlcyB9XCJcbiAgICBbY2hhbmdlc109XCJjaGFuZ2VzJCB8IGFzeW5jXCJcbiAgICBbY2hhbmdlc0luUHJvZ3Jlc3NdPVwiY2hhbmdlc0luUHJvZ3Jlc3MkIHwgYXN5bmNcIlxuICAgIChjbGVhcik9XCJjbGVhckNoYW5nZXMoKVwiXG4gICAgKGRyb3ApPVwiZHJvcENoYW5nZSgkZXZlbnQpXCJcbiAgICAoYXBwbHkpPVwiYXBwbHlDaGFuZ2VzKClcIlxuICAgIChoaWRlU29mdHdhcmVDaGFuZ2VzKT1cInNob3dTb2Z0d2FyZUNoYW5nZXMgPSBmYWxzZVwiXG4gID48L2M4eS1kZXZpY2Utc29mdHdhcmUtY2hhbmdlcz5cbjwvZGl2PlxuIl19
117
+ }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.RepositoryService }, { type: i3.InventoryService }, { type: i4.DeviceSoftwareService }, { type: i2.AdvancedSoftwareService }]; } });
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29mdHdhcmUtZGV2aWNlLXRhYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9yZXBvc2l0b3J5L3NvZnR3YXJlL2RldmljZS10YWIvc29mdHdhcmUtZGV2aWNlLXRhYi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9yZXBvc2l0b3J5L3NvZnR3YXJlL2RldmljZS10YWIvc29mdHdhcmUtZGV2aWNlLXRhYi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQWtCLGdCQUFnQixFQUFjLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1RixPQUFPLEVBQ0wsdUJBQXVCLEVBR3ZCLGlCQUFpQixFQUNqQixjQUFjLEVBQ2YsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7Ozs7OztBQU1sRSxNQUFNLE9BQU8sMEJBQTBCO0lBNkJyQyxZQUNVLEtBQXFCLEVBQ3JCLFVBQTZCLEVBQzdCLFNBQTJCLEVBQzNCLHFCQUE0QyxFQUM1Qyx1QkFBZ0Q7UUFKaEQsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7UUFDN0IsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1Qyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBakMxRCxhQUFRLEdBQW9CLElB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Q0FBQztZQUMvQyxDQUFDLENBQ0YsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxTQUFxQjtRQUM3RCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMscUNBQXFDLENBQ3pFLFNBQVMsRUFDVCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FDbkIsQ0FBQztRQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTyxZQUFZLENBQUMsU0FBcUI7UUFDeEMsT0FBTyxDQUNMLFNBQVMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQzdGLENBQUM7SUFDSixDQUFDOzt1SEF4SVUsMEJBQTBCOzJHQUExQiwwQkFBMEIsK0RDbEJ2QyxtdkNBOEJBOzJGRFphLDBCQUEwQjtrQkFKdEMsU0FBUzsrQkFDRSx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3QsIEludmVudG9yeVNlcnZpY2UsIElPcGVyYXRpb24sIE9wZXJhdGlvblN0YXR1cyB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFkdmFuY2VkU29mdHdhcmVTZXJ2aWNlLFxuICBEZXZpY2VTb2Z0d2FyZSxcbiAgRGV2aWNlU29mdHdhcmVDaGFuZ2UsXG4gIFJlcG9zaXRvcnlTZXJ2aWNlLFxuICBSZXBvc2l0b3J5VHlwZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL3JlcG9zaXRvcnkvc2hhcmVkJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERldmljZVNvZnR3YXJlU2VydmljZSB9IGZyb20gJy4vZGV2aWNlLXNvZnR3YXJlLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktc29mdHdhcmUtZGV2aWNlLXRhYicsXG4gIHRlbXBsYXRlVXJsOiAnc29mdHdhcmUtZGV2aWNlLXRhYi5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgU29mdHdhcmVEZXZpY2VUYWJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBkZXZpY2VJZDogc3RyaW5nIHwgbnVtYmVyID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJlbnQuZGF0YS5jb250ZXh0RGF0YS5pZDtcbiAgZGV2aWNlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SU1hbmFnZWRPYmplY3Q+KHRoaXMucm91dGUuc25hcHNob3QucGFyZW50LmRhdGEuY29udGV4dERhdGEpO1xuICB0eXBlc1F1ZXJ5JDogT2JzZXJ2YWJsZTxvYmplY3Q+ID0gdGhpcy5kZXZpY2UkLnBpcGUoXG4gICAgbWFwKGRldmljZSA9PiB7XG4gICAgICBjb25zdCBkZXZpY2VUeXBlUXVlcnkgPSB0aGlzLnJlcG9zaXRvcnkuZ2V0RGV2aWNlVHlwZVF1ZXJ5KFJlcG9zaXRvcnlUeXBlLlNPRlRXQVJFLCBkZXZpY2UpO1xuICAgICAgcmV0dXJuIHRoaXMucmVwb3NpdG9yeS5nZXRTb2Z0d2FyZVR5cGVRdWVyeShkZXZpY2UsIGRldmljZVR5cGVRdWVyeSk7XG4gICAgfSlcbiAgKTtcbiAgbGlzdCQ6IE9ic2VydmFibGU8RGV2aWNlU29mdHdhcmVbXT4gPSB0aGlzLmRldmljZSQucGlwZShcbiAgICBzd2l0Y2hNYXAoZGV2aWNlID0+XG4gICAgICB0aGlzLmFkdmFuY2VkU29mdHdhcmVTZXJ2aWNlXG4gICAgICAgIC5pc0FTTUF2YWlsYWJsZSgpXG4gICAgICAgIC50aGVuKGlzQVNNQXZhaWxhYmxlID0+ICh7IGlzQVNNQXZhaWxhYmxlLCBkZXZpY2UgfSkpXG4gICAgKSxcbiAgICBtYXAoKHsgaXNBU01BdmFpbGFibGUsIGRldmljZSB9KSA9PlxuICAgICAgLy8gd2l0aCBBU00gYXZhaWxhYmxlIHNvZnR3YXJlIGl0ZW1zIHdpbGwgYmUgcmV0cmlldmVkIGRpcmVjdGx5IGluIHRoZVxuICAgICAgLy8gZGV2aWNlLXNvZnR3YXJlLWxpc3QgY29tcG9uZW50XG4gICAgICBpc0FTTUF2YWlsYWJsZSA/IHVuZGVmaW5lZCA6IHRoaXMucmVwb3NpdG9yeS5nZXREZXZpY2VTb2Z0d2FyZUxpc3QoZGV2aWNlKVxuICAgIClcbiAgKTtcbiAgY2hhbmdlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERldmljZVNvZnR3YXJlQ2hhbmdlW10+KFtdKTtcbiAgY2hhbmdlc09wZXJhdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElPcGVyYXRpb24+KG51bGwpO1xuICBjaGFuZ2VzSW5Qcm9ncmVzcyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmNoYW5nZXNPcGVyYXRpb24kLnBpcGUoXG4gICAgbWFwKG9wZXJhdGlvbiA9PiB0aGlzLmlzSW5Qcm9ncmVzcyhvcGVyYXRpb24pKVxuICApO1xuICByZWxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd1NvZnR3YXJlQ2hhbmdlczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcmVwb3NpdG9yeTogUmVwb3NpdG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkZXZpY2VTb2Z0d2FyZVNlcnZpY2U6IERldmljZVNvZnR3YXJlU2VydmljZSxcbiAgICBwcml2YXRlIGFkdmFuY2VkU29mdHdhcmVTZXJ2aWNlOiBBZHZhbmNlZFNvZnR3YXJlU2VydmljZVxuICApIHt9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgYXdhaXQgdGhpcy5sb2FkRGV2aWNlKCk7XG4gICAgYXdhaXQgdGhpcy5sb2FkT3BlcmF0aW9uKCk7XG4gIH1cblxuICBhZGRDaGFuZ2VzKHJlcXVlc3RlZENoYW5nZXM6IERldmljZVNvZnR3YXJlQ2hhbmdlW10pIHtcbiAgICBsZXQgc3RhZ2VkQ2hhbmdlcyA9IFsuLi50aGlzLmNoYW5nZXMkLnZhbHVlXTtcbiAgICByZXF1ZXN0ZWRDaGFuZ2VzLmZvckVhY2gocmVxdWVzdGVkQ2hhbmdlID0+IHtcbiAgICAgIGNvbnN0IGFscmVhZHlTdGFnZWQgPSBzdGFnZWRDaGFuZ2VzLnNvbWUoc3RhZ2VkQ2hhbmdlID0+XG4gICAgICAgIHRoaXMuYXJlU2FtZUNoYW5nZXMoc3RhZ2VkQ2hhbmdlLCByZXF1ZXN0ZWRDaGFuZ2UpXG4gICAgICApO1xuICAgICAgaWYgKCFhbHJlYWR5U3RhZ2VkKSB7XG4gICAgICAgIHN0YWdlZENoYW5nZXMgPSBbLi4uc3RhZ2VkQ2hhbmdlcywgcmVxdWVzdGVkQ2hhbmdlXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmNoYW5nZXMkLm5leHQoc3RhZ2VkQ2hhbmdlcyk7XG4gIH1cblxuICBkcm9wQ2hhbmdlKGNoYW5nZVRvQmVEcm9wcGVkOiBEZXZpY2VTb2Z0d2FyZUNoYW5nZSkge1xuICAgIGxldCBzdGFnZWRDaGFuZ2VzID0gWy4uLnRoaXMuY2hhbmdlcyQudmFsdWVdO1xuICAgIHN0YWdlZENoYW5nZXMgPSBzdGFnZWRDaGFuZ2VzLmZpbHRlcihcbiAgICAgIHN0YWdlZENoYW5nZSA9PiAhdGhpcy5hcmVTYW1lQ2hhbmdlcyhzdGFnZWRDaGFuZ2UsIGNoYW5nZVRvQmVEcm9wcGVkKVxuICAgICk7XG4gICAgdGhpcy5jaGFuZ2VzJC5uZXh0KHN0YWdlZENoYW5nZXMpO1xuICB9XG5cbiAgYXJlU2FtZUNoYW5nZXMoY2hhbmdlMTogRGV2aWNlU29mdHdhcmVDaGFuZ2UsIGNoYW5nZTI6IERldmljZVNvZnR3YXJlQ2hhbmdlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGNoYW5nZTEubmFtZSA9PT0gY2hhbmdlMi5uYW1lICYmXG4gICAgICBjaGFuZ2UxLnZlcnNpb24gPT09IGNoYW5nZTIudmVyc2lvbiAmJlxuICAgICAgY2hhbmdlMS5hY3Rpb24gPT09IGNoYW5nZTIuYWN0aW9uXG4gICAgKTtcbiAgfVxuXG4gIGNsZWFyQ2hhbmdlcygpIHtcbiAgICB0aGlzLmNoYW5nZXMkLm5leHQoW10pO1xuICB9XG5cbiAgYXN5bmMgbG9hZERldmljZSgpIHtcbiAgICB0aGlzLnJlbG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5kZXZpY2VTb2Z0d2FyZVNlcnZpY2UucmVsb2FkKCk7XG4gICAgY29uc3QgZGV2aWNlID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5kZXZpY2VTb2Z0d2FyZVNlcnZpY2UubG9hZGluZyRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKGxvYWRpbmcgPT4gIWxvYWRpbmcpLFxuICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgKVxuICAgICAgICAudG9Qcm9taXNlKCksXG4gICAgICB0aGlzLmludmVudG9yeS5kZXRhaWwodGhpcy5kZXZpY2VJZCwgeyB3aXRoQ2hpbGRyZW46IGZhbHNlIH0pLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKVxuICAgIF0pLnRoZW4oKFtfLCBkZXZpY2VdKSA9PiBkZXZpY2UpO1xuICAgIHRoaXMuZGV2aWNlJC5uZXh0KGRldmljZSk7XG4gICAgdGhpcy5yZWxvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGFwcGx5Q2hhbmdlcygpIHtcbiAgICBjb25zdCBvcGVyYXRpb24gPSBhd2FpdCB0aGlzLnJlcG9zaXRvcnkuY3JlYXRlU29mdHdhcmVVcGRhdGVPcGVyYXRpb24oXG4gICAgICB0aGlzLmRldmljZSQudmFsdWUsXG4gICAgICB0aGlzLmNoYW5nZXMkLnZhbHVlXG4gICAgKTtcbiAgICBhd2FpdCB0aGlzLnRyYWNrT3BlcmF0aW9uKG9wZXJhdGlvbik7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRPcGVyYXRpb24oKSB7XG4gICAgY29uc3Qgb3BlcmF0aW9uID0gYXdhaXQgdGhpcy5yZXBvc2l0b3J5LmdldExhc3RTb2Z0d2FyZVVwZGF0ZU9wZXJhdGlvbih0aGlzLmRldmljZUlkKTtcbiAgICBhd2FpdCB0aGlzLnRyYWNrT3BlcmF0aW9uKG9wZXJhdGlvbik7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHRyYWNrT3BlcmF0aW9uKG9wZXJhdGlvbjogSU9wZXJhdGlvbikge1xuICAgIHRoaXMuY2hhbmdlc09wZXJhdGlvbiQubmV4dChvcGVyYXRpb24pO1xuXG4gICAgaWYgKHRoaXMuaXNJblByb2dyZXNzKG9wZXJhdGlvbikpIHtcbiAgICAgIGF3YWl0IHRoaXMuZGlzcGxheUNoYW5nZXNGcm9tT3BlcmF0aW9uKG9wZXJhdGlvbik7XG4gICAgICB0aGlzLnJlcG9zaXRvcnkub2JzZXJ2ZU9wZXJhdGlvbihvcGVyYXRpb24pLnN1YnNjcmliZShcbiAgICAgICAgb3BlcmF0aW9uVXBkYXRlID0+IHtcbiAgICAgICAgICB0aGlzLmNoYW5nZXNPcGVyYXRpb24kLm5leHQob3BlcmF0aW9uVXBkYXRlKTtcbiAgICAgICAgICBpZiAob3BlcmF0aW9uVXBkYXRlLnN0YXR1cyA9PT0gT3BlcmF0aW9uU3RhdHVzLlNVQ0NFU1NGVUwpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJDaGFuZ2VzKCk7XG4gICAgICAgICAgICB0aGlzLmxvYWREZXZpY2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9wZXJhdGlvblVwZGF0ZSA9PiB7XG4gICAgICAgICAgdGhpcy5jaGFuZ2VzT3BlcmF0aW9uJC5uZXh0KG9wZXJhdGlvblVwZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkaXNwbGF5Q2hhbmdlc0Zyb21PcGVyYXRpb24ob3BlcmF0aW9uOiBJT3BlcmF0aW9uKSB7XG4gICAgY29uc3QgY2hhbmdlcyA9IGF3YWl0IHRoaXMucmVwb3NpdG9yeS5nZXREZXZpY2VTb2Z0d2FyZUNoYW5nZXNGcm9tT3BlcmF0aW9uKFxuICAgICAgb3BlcmF0aW9uLFxuICAgICAgdGhpcy5kZXZpY2UkLnZhbHVlXG4gICAgKTtcbiAgICB0aGlzLmNoYW5nZXMkLm5leHQoY2hhbmdlcyk7XG4gIH1cblxuICBwcml2YXRlIGlzSW5Qcm9ncmVzcyhvcGVyYXRpb246IElPcGVyYXRpb24pIHtcbiAgICByZXR1cm4gKFxuICAgICAgb3BlcmF0aW9uICYmIFtPcGVyYXRpb25TdGF0dXMuUEVORElORywgT3BlcmF0aW9uU3RhdHVzLkVYRUNVVElOR10uaW5jbHVkZXMob3BlcmF0aW9uLnN0YXR1cylcbiAgICApO1xuICB9XG59XG4iLCI8Yzh5LWFjdGlvbi1iYXItaXRlbSBbcGxhY2VtZW50XT1cIidyaWdodCdcIj5cbiAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbGlua1wiIHRpdGxlPVwie3sgJ1JlbG9hZCcgfCB0cmFuc2xhdGUgfX1cIiAoY2xpY2spPVwibG9hZERldmljZSgpXCI+XG4gICAgPGkgYzh5SWNvbj1cInJlZnJlc2hcIiBbbmdDbGFzc109XCJ7ICdpY29uLXNwaW4nOiByZWxvYWRpbmcgfVwiPjwvaT5cbiAgICB7eyAnUmVsb2FkJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGRpdiBjbGFzcz1cImNhcmQgc3BsaXQtdmlldy0tNy01IG0tYi0wXCI+XG4gIDxjOHktaW5zdGFsbGVkLXNvZnR3YXJlXG4gICAgY2xhc3M9XCJzcGxpdC12aWV3X19saXN0XCJcbiAgICBbZGV2aWNlXT1cImRldmljZSQgfCBhc3luY1wiXG4gICAgW3R5cGVzUXVlcnldPVwidHlwZXNRdWVyeSQgfCBhc3luY1wiXG4gICAgW3NvZnR3YXJlTGlzdF09XCJsaXN0JCB8IGFzeW5jXCJcbiAgICBbZGV2aWNlU29mdHdhcmVDaGFuZ2VzXT1cImNoYW5nZXMkIHwgYXN5bmNcIlxuICAgIFtkZXZpY2VTb2Z0d2FyZUNoYW5nZXNPcGVyYXRpb25dPVwiY2hhbmdlc09wZXJhdGlvbiQgfCBhc3luY1wiXG4gICAgW2RldmljZVNvZnR3YXJlQ2hhbmdlc0luUHJvZ3Jlc3NdPVwiY2hhbmdlc0luUHJvZ3Jlc3MkIHwgYXN5bmNcIlxuICAgIChjaGFuZ2VzKT1cImFkZENoYW5nZXMoJGV2ZW50KVwiXG4gICAgKHNob3dTb2Z0d2FyZUNoYW5nZXMpPVwic2hvd1NvZnR3YXJlQ2hhbmdlcyA9IHRydWVcIlxuICA+PC9jOHktaW5zdGFsbGVkLXNvZnR3YXJlPlxuICA8Yzh5LWRldmljZS1zb2Z0d2FyZS1jaGFuZ2VzXG4gICAgY2xhc3M9XCJiZy1sZXZlbC0xIHNwbGl0LXZpZXdfX2RldGFpbFwiXG4gICAgW25nQ2xhc3NdPVwieyAnc3BsaXQtdmlld19fZGV0YWlsLS1zZWxlY3RlZCc6IHNob3dTb2Z0d2FyZUNoYW5nZXMgfVwiXG4gICAgW2NoYW5nZXNdPVwiY2hhbmdlcyQgfCBhc3luY1wiXG4gICAgW2NoYW5nZXNJblByb2dyZXNzXT1cImNoYW5nZXNJblByb2dyZXNzJCB8IGFzeW5jXCJcbiAgICAoY2xlYXIpPVwiY2xlYXJDaGFuZ2VzKClcIlxuICAgIChkcm9wKT1cImRyb3BDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKGFwcGx5KT1cImFwcGx5Q2hhbmdlcygpXCJcbiAgICAoaGlkZVNvZnR3YXJlQ2hhbmdlcyk9XCJzaG93U29mdHdhcmVDaGFuZ2VzID0gZmFsc2VcIlxuICA+PC9jOHktZGV2aWNlLXNvZnR3YXJlLWNoYW5nZXM+XG48L2Rpdj5cbiJdfQ==