@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
182 lines • 24.2 kB
JavaScript
import { FormGroup } from '@angular/forms';
import { BaseColumn, gettext, PushStatus, SendStatus } from '@c8y/ngx-components';
import { DeviceStatusCellRendererComponent } from './status.cell-renderer.component';
export class StatusDeviceGridColumn extends BaseColumn {
constructor() {
super();
const responseIntervalPath = 'c8y_RequiredAvailability.responseInterval';
const responseIntervalLessThanOrEqualTo0 = { [responseIntervalPath]: { __le: 0 } };
const responseIntervalNotDefined = { __not: { __has: responseIntervalPath } };
const availabilityStatusPath = 'c8y_Availability.status';
const availabilityStatusAvailable = { [availabilityStatusPath]: SendStatus.AVAILABLE };
const availabilityStatusUnavailable = { [availabilityStatusPath]: SendStatus.UNAVAILABLE };
const availabilityStatusMaintenance = { [availabilityStatusPath]: SendStatus.MAINTENANCE };
const availabilityStatusNotDefined = { __not: { __has: availabilityStatusPath } };
const connectionStatusPath = 'c8y_Connection.status';
const connectionStatusConnected = { [connectionStatusPath]: PushStatus.CONNECTED };
const connectionStatusDisconnected = { [connectionStatusPath]: PushStatus.DISCONNECTED };
const connectionStatusMaintenance = { [connectionStatusPath]: PushStatus.MAINTENANCE };
const deviceUnderMaintenance = {
__or: [
responseIntervalLessThanOrEqualTo0,
availabilityStatusMaintenance,
connectionStatusMaintenance
]
};
const deviceNotUnderMaintenance = {
// using __and of __nots because backend does not support __not with __ors
__and: [
{ __not: responseIntervalLessThanOrEqualTo0 },
{ __not: availabilityStatusMaintenance },
{ __not: connectionStatusMaintenance }
]
};
this.name = 'status';
this.header = gettext('Status');
this.dataType = "icon" /* ColumnDataType.Icon */;
this.cellRendererComponent = DeviceStatusCellRendererComponent;
this.resizable = false;
this.filterable = true;
this.filteringConfig = {
fields: [
{
type: 'object',
templateOptions: {
label: 'Show items with status'
},
fieldGroup: [
{
key: 'sendStatus',
type: 'object',
props: {
label: gettext('Send status')
},
fieldGroup: [
{
key: 'sendOnline',
type: 'switch',
props: { label: gettext('Online') }
},
{
key: 'sendOffline',
type: 'switch',
props: { label: gettext('Offline') }
},
{
key: 'sendUnknown',
type: 'switch',
props: { label: gettext('Unknown') }
},
{
key: 'sendNotMonitored',
type: 'switch',
props: { label: gettext('Not monitored') }
}
]
},
{
key: 'pushStatus',
type: 'object',
props: {
label: gettext('Push status')
},
fieldGroup: [
{
key: 'pushOnline',
type: 'switch',
props: { label: gettext('Online') }
},
{
key: 'pushOffline',
type: 'switch',
props: { label: gettext('Offline') }
},
{
key: 'pushNotMonitored',
type: 'switch',
props: { label: gettext('Not monitored') }
}
]
},
{
key: 'maintenanceStatus',
type: 'object',
props: {
label: gettext('Maintenance status')
},
fieldGroup: [
{
key: 'maintenance',
type: 'switch',
props: { label: gettext('Device is under maintenance') }
}
]
}
],
validators: {
atLeastOneFilled: {
expression: (formGroup) => {
const sendStatus = formGroup.get('sendStatus').value || {};
const pushStatus = formGroup.get('pushStatus').value || {};
const maintenanceStatus = formGroup.get('maintenanceStatus').value || {};
return (sendStatus.sendOnline ||
sendStatus.sendOffline ||
sendStatus.sendUnknown ||
sendStatus.sendNotMonitored ||
pushStatus.pushOnline ||
pushStatus.pushOffline ||
pushStatus.pushNotMonitored ||
maintenanceStatus.maintenance);
}
}
}
}
],
formGroup: new FormGroup({}),
getFilter(model) {
const filter = {};
const ors = [];
if (model?.sendStatus?.sendOnline) {
ors.push({
__and: [deviceNotUnderMaintenance, availabilityStatusAvailable]
});
}
if (model?.sendStatus?.sendOffline) {
ors.push({
__and: [deviceNotUnderMaintenance, availabilityStatusUnavailable]
});
}
if (model?.sendStatus?.sendUnknown) {
ors.push({
__and: [deviceNotUnderMaintenance, availabilityStatusNotDefined]
});
}
if (model?.sendStatus?.sendNotMonitored || model?.pushStatus?.pushNotMonitored) {
ors.push(responseIntervalNotDefined);
}
if (model?.pushStatus?.pushOnline) {
ors.push({
__and: [deviceNotUnderMaintenance, connectionStatusConnected]
});
}
if (model?.pushStatus?.pushOffline) {
ors.push({
__and: [deviceNotUnderMaintenance, connectionStatusDisconnected]
});
}
if (model?.maintenanceStatus?.maintenance) {
ors.push(deviceUnderMaintenance);
}
if (ors.length) {
filter.__or = ors;
}
return filter;
}
};
this.sortable = true;
this.sortingConfig = {
pathSortingConfigs: [{ path: availabilityStatusPath }]
};
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHVzLmRldmljZS1ncmlkLWNvbHVtbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2RldmljZS1ncmlkL2NvbHVtbnMvc3RhdHVzLmRldmljZS1ncmlkLWNvbHVtbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBa0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRyxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVyRixNQUFNLE9BQU8sc0JBQXVCLFNBQVEsVUFBVTtJQUNwRDtRQUNFLEtBQUssRUFBRSxDQUFDO1FBRVIsTUFBTSxvQkFBb0IsR0FBRywyQ0FBMkMsQ0FBQztRQUN6RSxNQUFNLGtDQUFrQyxHQUFHLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDbkYsTUFBTSwwQkFBMEIsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxFQUFFLENBQUM7UUFFOUUsTUFBTSxzQkFBc0IsR0FBRyx5QkFBeUIsQ0FBQztRQUN6RCxNQUFNLDJCQUEyQixHQUFHLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN2RixNQUFNLDZCQUE2QixHQUFHLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMzRixNQUFNLDZCQUE2QixHQUFHLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMzRixNQUFNLDRCQUE0QixHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLHNCQUFzQixFQUFFLEVBQUUsQ0FBQztRQUVsRixNQUFNLG9CQUFvQixHQUFHLHVCQUF1QixDQUFDO1FBQ3JELE1BQU0seUJBQXlCLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25GLE1BQU0sNEJBQTRCLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3pGLE1BQU0sMkJBQTJCLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRXZGLE1BQU0sc0JBQXNCLEdBQUc7WUFDN0IsSUFBSSxFQUFFO2dCQUNKLGtDQUFrQztnQkFDbEMsNkJBQTZCO2dCQUM3QiwyQkFBMkI7YUFDNUI7U0FDRixDQUFDO1FBQ0YsTUFBTSx5QkFBeUIsR0FBRztZQUNoQywwRUFBMEU7WUFDMUUsS0FBSyxFQUFFO2dCQUNMLEVBQUUsS0FBSyxFQUFFLGtDQUFrQyxFQUFFO2dCQUM3QyxFQUFFLEtBQUssRUFBRSw2QkFBNkIsRUFBRTtnQkFDeEMsRUFBRSxLQUFLLEVBQUUsMkJBQTJCLEVBQUU7YUFDdkM7U0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLFFBQVEsbUNBQXNCLENBQUM7UUFDcEMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLGlDQUFpQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBRXZCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxlQUFlLEdBQUc7WUFDckIsTUFBTSxFQUFFO2dCQUNOO29CQUNFLElBQUksRUFBRSxRQUFRO29CQUNkLGVBQWUsRUFBRTt3QkFDZixLQUFLLEVBQUUsd0JBQXdCO3FCQUNoQztvQkFDRCxVQUFVLEVBQUU7d0JBQ1Y7NEJBQ0UsR0FBRyxFQUFFLFlBQVk7NEJBQ2pCLElBQUksRUFBRSxRQUFROzRCQUNkLEtBQUssRUFBRTtnQ0FDTCxLQUFLLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQzs2QkFDOUI7NEJBQ0QsVUFBVSxFQUFFO2dDQUNWO29DQUNFLEdBQUcsRUFBRSxZQUFZO29DQUNqQixJQUFJLEVBQUUsUUFBUTtvQ0FDZCxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2lDQUNwQztnQ0FDRDtvQ0FDRSxHQUFHLEVBQUUsYUFBYTtvQ0FDbEIsSUFBSSxFQUFFLFFBQVE7b0NBQ2QsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtpQ0FDckM7Z0NBQ0Q7b0NBQ0UsR0FBRyxFQUFFLGFBQWE7b0NBQ2xCLElBQUksRUFBRSxRQUFRO29DQUNkLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7aUNBQ3JDO2dDQUNEO29DQUNFLEdBQUcsRUFBRSxrQkFBa0I7b0NBQ3ZCLElBQUksRUFBRSxRQUFRO29DQUNkLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUU7aUNBQzNDOzZCQUNGO3lCQUNGO3dCQUNEOzRCQUNFLEdBQUcsRUFBRSxZQUFZOzRCQUNqQixJQUFJLEVBQUUsUUFBUTs0QkFDZCxLQUFLLEVBQUU7Z0NBQ0wsS0FBSyxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUM7NkJBQzlCOzRCQUNELFVBQVUsRUFBRTtnQ0FDVjtvQ0FDRSxHQUFHLEVBQUUsWUFBWTtvQ0FDakIsSUFBSSxFQUFFLFFBQVE7b0NBQ2QsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtpQ0FDcEM7Z0NBQ0Q7b0NBQ0UsR0FBRyxFQUFFLGFBQWE7b0NBQ2xCLElBQUksRUFBRSxRQUFRO29DQUNkLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7aUNBQ3JDO2dDQUNEO29DQUNFLEdBQUcsRUFBRSxrQkFBa0I7b0NBQ3ZCLElBQUksRUFBRSxRQUFRO29DQUNkLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUU7aUNBQzNDOzZCQUNGO3lCQUNGO3dCQUNEOzRCQUNFLEdBQUcsRUFBRSxtQkFBbUI7NEJBQ3hCLElBQUksRUFBRSxRQUFROzRCQUNkLEtBQUssRUFBRTtnQ0FDTCxLQUFLLEVBQUUsT0FBTyxDQUFDLG9CQUFvQixDQUFDOzZCQUNyQzs0QkFDRCxVQUFVLEVBQUU7Z0NBQ1Y7b0NBQ0UsR0FBRyxFQUFFLGFBQWE7b0NBQ2xCLElBQUksRUFBRSxRQUFRO29DQUNkLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsNkJBQTZCLENBQUMsRUFBRTtpQ0FDekQ7NkJBQ0Y7eUJBQ0Y7cUJBQ0Y7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWLGdCQUFnQixFQUFFOzRCQUNoQixVQUFVLEVBQUUsQ0FBQyxTQUFjLEVBQUUsRUFBRTtnQ0FDN0IsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO2dDQUMzRCxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7Z0NBQzNELE1BQU0saUJBQWlCLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7Z0NBRXpFLE9BQU8sQ0FDTCxVQUFVLENBQUMsVUFBVTtvQ0FDckIsVUFBVSxDQUFDLFdBQVc7b0NBQ3RCLFVBQVUsQ0FBQyxXQUFXO29DQUN0QixVQUFVLENBQUMsZ0JBQWdCO29DQUMzQixVQUFVLENBQUMsVUFBVTtvQ0FDckIsVUFBVSxDQUFDLFdBQVc7b0NBQ3RCLFVBQVUsQ0FBQyxnQkFBZ0I7b0NBQzNCLGlCQUFpQixDQUFDLFdBQVcsQ0FDOUIsQ0FBQzs0QkFDSixDQUFDO3lCQUNGO3FCQUNGO2lCQUNGO2FBQ0Y7WUFDRCxTQUFTLEVBQUUsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQzVCLFNBQVMsQ0FBQyxLQUFLO2dCQUNiLE1BQU0sTUFBTSxHQUFRLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUVmLElBQUksS0FBSyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQztvQkFDbEMsR0FBRyxDQUFDLElBQUksQ0FBQzt3QkFDUCxLQUFLLEVBQUUsQ0FBQyx5QkFBeUIsRUFBRSwyQkFBMkIsQ0FBQztxQkFDaEUsQ0FBQyxDQUFDO2dCQUNMLENBQUM7Z0JBRUQsSUFBSSxLQUFLLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxDQUFDO29CQUNuQyxHQUFHLENBQUMsSUFBSSxDQUFDO3dCQUNQLEtBQUssRUFBRSxDQUFDLHlCQUF5QixFQUFFLDZCQUE2QixDQUFDO3FCQUNsRSxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFFRCxJQUFJLEtBQUssRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLENBQUM7b0JBQ25DLEdBQUcsQ0FBQyxJQUFJLENBQUM7d0JBQ1AsS0FBSyxFQUFFLENBQUMseUJBQXlCLEVBQUUsNEJBQTRCLENBQUM7cUJBQ2pFLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUVELElBQUksS0FBSyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsSUFBSSxLQUFLLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLENBQUM7b0JBQy9FLEdBQUcsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztnQkFDdkMsQ0FBQztnQkFFRCxJQUFJLEtBQUssRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUM7b0JBQ2xDLEdBQUcsQ0FBQyxJQUFJLENBQUM7d0JBQ1AsS0FBSyxFQUFFLENBQUMseUJBQXlCLEVBQUUseUJBQXlCLENBQUM7cUJBQzlELENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUVELElBQUksS0FBSyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsQ0FBQztvQkFDbkMsR0FBRyxDQUFDLElBQUksQ0FBQzt3QkFDUCxLQUFLLEVBQUUsQ0FBQyx5QkFBeUIsRUFBRSw0QkFBNEIsQ0FBQztxQkFDakUsQ0FBQyxDQUFDO2dCQUNMLENBQUM7Z0JBRUQsSUFBSSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLENBQUM7b0JBQzFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztnQkFDbkMsQ0FBQztnQkFFRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDZixNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztnQkFDcEIsQ0FBQztnQkFFRCxPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDO1NBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxhQUFhLEdBQUc7WUFDbkIsa0JBQWtCLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxzQkFBc0IsRUFBRSxDQUFDO1NBQ3ZELENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCYXNlQ29sdW1uLCBDb2x1bW5EYXRhVHlwZSwgZ2V0dGV4dCwgUHVzaFN0YXR1cywgU2VuZFN0YXR1cyB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgRGV2aWNlU3RhdHVzQ2VsbFJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi9zdGF0dXMuY2VsbC1yZW5kZXJlci5jb21wb25lbnQnO1xuXG5leHBvcnQgY2xhc3MgU3RhdHVzRGV2aWNlR3JpZENvbHVtbiBleHRlbmRzIEJhc2VDb2x1bW4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgY29uc3QgcmVzcG9uc2VJbnRlcnZhbFBhdGggPSAnYzh5X1JlcXVpcmVkQXZhaWxhYmlsaXR5LnJlc3BvbnNlSW50ZXJ2YWwnO1xuICAgIGNvbnN0IHJlc3BvbnNlSW50ZXJ2YWxMZXNzVGhhbk9yRXF1YWxUbzAgPSB7IFtyZXNwb25zZUludGVydmFsUGF0aF06IHsgX19sZTogMCB9IH07XG4gICAgY29uc3QgcmVzcG9uc2VJbnRlcnZhbE5vdERlZmluZWQgPSB7IF9fbm90OiB7IF9faGFzOiByZXNwb25zZUludGVydmFsUGF0aCB9IH07XG5cbiAgICBjb25zdCBhdmFpbGFiaWxpdHlTdGF0dXNQYXRoID0gJ2M4eV9BdmFpbGFiaWxpdHkuc3RhdHVzJztcbiAgICBjb25zdCBhdmFpbGFiaWxpdHlTdGF0dXNBdmFpbGFibGUgPSB7IFthdmFpbGFiaWxpdHlTdGF0dXNQYXRoXTogU2VuZFN0YXR1cy5BVkFJTEFCTEUgfTtcbiAgICBjb25zdCBhdmFpbGFiaWxpdHlTdGF0dXNVbmF2YWlsYWJsZSA9IHsgW2F2YWlsYWJpbGl0eVN0YXR1c1BhdGhdOiBTZW5kU3RhdHVzLlVOQVZBSUxBQkxFIH07XG4gICAgY29uc3QgYXZhaWxhYmlsaXR5U3RhdHVzTWFpbnRlbmFuY2UgPSB7IFthdmFpbGFiaWxpdHlTdGF0dXNQYXRoXTogU2VuZFN0YXR1cy5NQUlOVEVOQU5DRSB9O1xuICAgIGNvbnN0IGF2YWlsYWJpbGl0eVN0YXR1c05vdERlZmluZWQgPSB7IF9fbm90OiB7IF9faGFzOiBhdmFpbGFiaWxpdHlTdGF0dXNQYXRoIH0gfTtcblxuICAgIGNvbnN0IGNvbm5lY3Rpb25TdGF0dXNQYXRoID0gJ2M4eV9Db25uZWN0aW9uLnN0YXR1cyc7XG4gICAgY29uc3QgY29ubmVjdGlvblN0YXR1c0Nvbm5lY3RlZCA9IHsgW2Nvbm5lY3Rpb25TdGF0dXNQYXRoXTogUHVzaFN0YXR1cy5DT05ORUNURUQgfTtcbiAgICBjb25zdCBjb25uZWN0aW9uU3RhdHVzRGlzY29ubmVjdGVkID0geyBbY29ubmVjdGlvblN0YXR1c1BhdGhdOiBQdXNoU3RhdHVzLkRJU0NPTk5FQ1RFRCB9O1xuICAgIGNvbnN0IGNvbm5lY3Rpb25TdGF0dXNNYWludGVuYW5jZSA9IHsgW2Nvbm5lY3Rpb25TdGF0dXNQYXRoXTogUHVzaFN0YXR1cy5NQUlOVEVOQU5DRSB9O1xuXG4gICAgY29uc3QgZGV2aWNlVW5kZXJNYWludGVuYW5jZSA9IHtcbiAgICAgIF9fb3I6IFtcbiAgICAgICAgcmVzcG9uc2VJbnRlcnZhbExlc3NUaGFuT3JFcXVhbFRvMCxcbiAgICAgICAgYXZhaWxhYmlsaXR5U3RhdHVzTWFpbnRlbmFuY2UsXG4gICAgICAgIGNvbm5lY3Rpb25TdGF0dXNNYWludGVuYW5jZVxuICAgICAgXVxuICAgIH07XG4gICAgY29uc3QgZGV2aWNlTm90VW5kZXJNYWludGVuYW5jZSA9IHtcbiAgICAgIC8vIHVzaW5nIF9fYW5kIG9mIF9fbm90cyBiZWNhdXNlIGJhY2tlbmQgZG9lcyBub3Qgc3VwcG9ydCBfX25vdCB3aXRoIF9fb3JzXG4gICAgICBfX2FuZDogW1xuICAgICAgICB7IF9fbm90OiByZXNwb25zZUludGVydmFsTGVzc1RoYW5PckVxdWFsVG8wIH0sXG4gICAgICAgIHsgX19ub3Q6IGF2YWlsYWJpbGl0eVN0YXR1c01haW50ZW5hbmNlIH0sXG4gICAgICAgIHsgX19ub3Q6IGNvbm5lY3Rpb25TdGF0dXNNYWludGVuYW5jZSB9XG4gICAgICBdXG4gICAgfTtcblxuICAgIHRoaXMubmFtZSA9ICdzdGF0dXMnO1xuICAgIHRoaXMuaGVhZGVyID0gZ2V0dGV4dCgnU3RhdHVzJyk7XG4gICAgdGhpcy5kYXRhVHlwZSA9IENvbHVtbkRhdGFUeXBlLkljb247XG4gICAgdGhpcy5jZWxsUmVuZGVyZXJDb21wb25lbnQgPSBEZXZpY2VTdGF0dXNDZWxsUmVuZGVyZXJDb21wb25lbnQ7XG4gICAgdGhpcy5yZXNpemFibGUgPSBmYWxzZTtcblxuICAgIHRoaXMuZmlsdGVyYWJsZSA9IHRydWU7XG4gICAgdGhpcy5maWx0ZXJpbmdDb25maWcgPSB7XG4gICAgICBmaWVsZHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgIHRlbXBsYXRlT3B0aW9uczoge1xuICAgICAgICAgICAgbGFiZWw6ICdTaG93IGl0ZW1zIHdpdGggc3RhdHVzJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZmllbGRHcm91cDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBrZXk6ICdzZW5kU3RhdHVzJyxcbiAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgbGFiZWw6IGdldHRleHQoJ1NlbmQgc3RhdHVzJylcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZmllbGRHcm91cDogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGtleTogJ3NlbmRPbmxpbmUnLFxuICAgICAgICAgICAgICAgICAgdHlwZTogJ3N3aXRjaCcsXG4gICAgICAgICAgICAgICAgICBwcm9wczogeyBsYWJlbDogZ2V0dGV4dCgnT25saW5lJykgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAga2V5OiAnc2VuZE9mZmxpbmUnLFxuICAgICAgICAgICAgICAgICAgdHlwZTogJ3N3aXRjaCcsXG4gICAgICAgICAgICAgICAgICBwcm9wczogeyBsYWJlbDogZ2V0dGV4dCgnT2ZmbGluZScpIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGtleTogJ3NlbmRVbmtub3duJyxcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdzd2l0Y2gnLFxuICAgICAgICAgICAgICAgICAgcHJvcHM6IHsgbGFiZWw6IGdldHRleHQoJ1Vua25vd24nKSB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBrZXk6ICdzZW5kTm90TW9uaXRvcmVkJyxcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdzd2l0Y2gnLFxuICAgICAgICAgICAgICAgICAgcHJvcHM6IHsgbGFiZWw6IGdldHRleHQoJ05vdCBtb25pdG9yZWQnKSB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBrZXk6ICdwdXNoU3RhdHVzJyxcbiAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgbGFiZWw6IGdldHRleHQoJ1B1c2ggc3RhdHVzJylcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZmllbGRHcm91cDogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGtleTogJ3B1c2hPbmxpbmUnLFxuICAgICAgICAgICAgICAgICAgdHlwZTogJ3N3aXRjaCcsXG4gICAgICAgICAgICAgICAgICBwcm9wczogeyBsYWJlbDogZ2V0dGV4dCgnT25saW5lJykgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAga2V5OiAncHVzaE9mZmxpbmUnLFxuICAgICAgICAgICAgICAgICAgdHlwZTogJ3N3aXRjaCcsXG4gICAgICAgICAgICAgICAgICBwcm9wczogeyBsYWJlbDogZ2V0dGV4dCgnT2ZmbGluZScpIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGtleTogJ3B1c2hOb3RNb25pdG9yZWQnLFxuICAgICAgICAgICAgICAgICAgdHlwZTogJ3N3aXRjaCcsXG4gICAgICAgICAgICAgICAgICBwcm9wczogeyBsYWJlbDogZ2V0dGV4dCgnTm90IG1vbml0b3JlZCcpIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGtleTogJ21haW50ZW5hbmNlU3RhdHVzJyxcbiAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgbGFiZWw6IGdldHRleHQoJ01haW50ZW5hbmNlIHN0YXR1cycpXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGZpZWxkR3JvdXA6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBrZXk6ICdtYWludGVuYW5jZScsXG4gICAgICAgICAgICAgICAgICB0eXBlOiAnc3dpdGNoJyxcbiAgICAgICAgICAgICAgICAgIHByb3BzOiB7IGxhYmVsOiBnZXR0ZXh0KCdEZXZpY2UgaXMgdW5kZXIgbWFpbnRlbmFuY2UnKSB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICB2YWxpZGF0b3JzOiB7XG4gICAgICAgICAgICBhdExlYXN0T25lRmlsbGVkOiB7XG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IChmb3JtR3JvdXA6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbmRTdGF0dXMgPSBmb3JtR3JvdXAuZ2V0KCdzZW5kU3RhdHVzJykudmFsdWUgfHwge307XG4gICAgICAgICAgICAgICAgY29uc3QgcHVzaFN0YXR1cyA9IGZvcm1Hcm91cC5nZXQoJ3B1c2hTdGF0dXMnKS52YWx1ZSB8fCB7fTtcbiAgICAgICAgICAgICAgICBjb25zdCBtYWludGVuYW5jZVN0YXR1cyA9IGZvcm1Hcm91cC5nZXQoJ21haW50ZW5hbmNlU3RhdHVzJykudmFsdWUgfHwge307XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgc2VuZFN0YXR1cy5zZW5kT25saW5lIHx8XG4gICAgICAgICAgICAgICAgICBzZW5kU3RhdHVzLnNlbmRPZmZsaW5lIHx8XG4gICAgICAgICAgICAgICAgICBzZW5kU3RhdHVzLnNlbmRVbmtub3duIHx8XG4gICAgICAgICAgICAgICAgICBzZW5kU3RhdHVzLnNlbmROb3RNb25pdG9yZWQgfHxcbiAgICAgICAgICAgICAgICAgIHB1c2hTdGF0dXMucHVzaE9ubGluZSB8fFxuICAgICAgICAgICAgICAgICAgcHVzaFN0YXR1cy5wdXNoT2ZmbGluZSB8fFxuICAgICAgICAgICAgICAgICAgcHVzaFN0YXR1cy5wdXNoTm90TW9uaXRvcmVkIHx8XG4gICAgICAgICAgICAgICAgICBtYWludGVuYW5jZVN0YXR1cy5tYWludGVuYW5jZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBmb3JtR3JvdXA6IG5ldyBGb3JtR3JvdXAoe30pLFxuICAgICAgZ2V0RmlsdGVyKG1vZGVsKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcjogYW55ID0ge307XG4gICAgICAgIGNvbnN0IG9ycyA9IFtdO1xuXG4gICAgICAgIGlmIChtb2RlbD8uc2VuZFN0YXR1cz8uc2VuZE9ubGluZSkge1xuICAgICAgICAgIG9ycy5wdXNoKHtcbiAgICAgICAgICAgIF9fYW5kOiBbZGV2aWNlTm90VW5kZXJNYWludGVuYW5jZSwgYXZhaWxhYmlsaXR5U3RhdHVzQXZhaWxhYmxlXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vZGVsPy5zZW5kU3RhdHVzPy5zZW5kT2ZmbGluZSkge1xuICAgICAgICAgIG9ycy5wdXNoKHtcbiAgICAgICAgICAgIF9fYW5kOiBbZGV2aWNlTm90VW5kZXJNYWludGVuYW5jZSwgYXZhaWxhYmlsaXR5U3RhdHVzVW5hdmFpbGFibGVdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kZWw/LnNlbmRTdGF0dXM/LnNlbmRVbmtub3duKSB7XG4gICAgICAgICAgb3JzLnB1c2goe1xuICAgICAgICAgICAgX19hbmQ6IFtkZXZpY2VOb3RVbmRlck1haW50ZW5hbmNlLCBhdmFpbGFiaWxpdHlTdGF0dXNOb3REZWZpbmVkXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vZGVsPy5zZW5kU3RhdHVzPy5zZW5kTm90TW9uaXRvcmVkIHx8IG1vZGVsPy5wdXNoU3RhdHVzPy5wdXNoTm90TW9uaXRvcmVkKSB7XG4gICAgICAgICAgb3JzLnB1c2gocmVzcG9uc2VJbnRlcnZhbE5vdERlZmluZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vZGVsPy5wdXNoU3RhdHVzPy5wdXNoT25saW5lKSB7XG4gICAgICAgICAgb3JzLnB1c2goe1xuICAgICAgICAgICAgX19hbmQ6IFtkZXZpY2VOb3RVbmRlck1haW50ZW5hbmNlLCBjb25uZWN0aW9uU3RhdHVzQ29ubmVjdGVkXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vZGVsPy5wdXNoU3RhdHVzPy5wdXNoT2ZmbGluZSkge1xuICAgICAgICAgIG9ycy5wdXNoKHtcbiAgICAgICAgICAgIF9fYW5kOiBbZGV2aWNlTm90VW5kZXJNYWludGVuYW5jZSwgY29ubmVjdGlvblN0YXR1c0Rpc2Nvbm5lY3RlZF1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb2RlbD8ubWFpbnRlbmFuY2VTdGF0dXM/Lm1haW50ZW5hbmNlKSB7XG4gICAgICAgICAgb3JzLnB1c2goZGV2aWNlVW5kZXJNYWludGVuYW5jZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3JzLmxlbmd0aCkge1xuICAgICAgICAgIGZpbHRlci5fX29yID0gb3JzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5zb3J0YWJsZSA9IHRydWU7XG4gICAgdGhpcy5zb3J0aW5nQ29uZmlnID0ge1xuICAgICAgcGF0aFNvcnRpbmdDb25maWdzOiBbeyBwYXRoOiBhdmFpbGFiaWxpdHlTdGF0dXNQYXRoIH1dXG4gICAgfTtcbiAgfVxufVxuIl19