matrix-react-sdk
Version:
SDK for matrix.org using React
159 lines (157 loc) • 27.2 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireDefault(require("react"));
var _classnames = _interopRequireDefault(require("classnames"));
var _matrix = require("matrix-js-sdk/src/matrix");
var _DateUtils = require("../../../../DateUtils");
var _languageHandler = require("../../../../languageHandler");
var _AccessibleButton = _interopRequireDefault(require("../../elements/AccessibleButton"));
var _Spinner = _interopRequireDefault(require("../../elements/Spinner"));
var _ToggleSwitch = _interopRequireDefault(require("../../elements/ToggleSwitch"));
var _DeviceDetailHeading = require("./DeviceDetailHeading");
var _DeviceVerificationStatusCard = require("./DeviceVerificationStatusCard");
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } /*
Copyright 2024 New Vector Ltd.
Copyright 2022 The Matrix.org Foundation C.I.C.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
Please see LICENSE files in the repository root for full details.
*/
const DeviceDetails = ({
device,
pusher,
localNotificationSettings,
isSigningOut,
onVerifyDevice,
onSignOutDevice,
saveDeviceName,
setPushNotifications,
supportsMSC3881,
className,
isCurrentDevice
}) => {
const metadata = [{
id: "session",
values: [{
label: (0, _languageHandler._t)("settings|sessions|session_id"),
value: device.device_id
}, {
label: (0, _languageHandler._t)("settings|sessions|last_activity"),
value: device.last_seen_ts && (0, _DateUtils.formatDate)(new Date(device.last_seen_ts))
}]
}, {
id: "application",
heading: (0, _languageHandler._t)("common|application"),
values: [{
label: (0, _languageHandler._t)("common|name"),
value: device.appName
}, {
label: (0, _languageHandler._t)("common|version"),
value: device.appVersion
}, {
label: (0, _languageHandler._t)("settings|sessions|url"),
value: device.url
}]
}, {
id: "device",
heading: (0, _languageHandler._t)("common|device"),
values: [{
label: (0, _languageHandler._t)("common|model"),
value: device.deviceModel
}, {
label: (0, _languageHandler._t)("settings|sessions|os"),
value: device.deviceOperatingSystem
}, {
label: (0, _languageHandler._t)("settings|sessions|browser"),
value: device.client
}, {
label: (0, _languageHandler._t)("settings|sessions|ip"),
value: device.last_seen_ip
}]
}].map(section => // filter out falsy values
_objectSpread(_objectSpread({}, section), {}, {
values: section.values.filter(row => !!row.value)
})).filter(section =>
// then filter out sections with no values
section.values.length);
const showPushNotificationSection = !!pusher || !!localNotificationSettings;
function isPushNotificationsEnabled(pusher, notificationSettings) {
if (pusher) return !!pusher[_matrix.PUSHER_ENABLED.name];
if (localNotificationSettings) return !localNotificationSettings.is_silenced;
return true;
}
function isCheckboxDisabled(pusher, notificationSettings) {
if (localNotificationSettings) return false;
if (pusher && !supportsMSC3881) return true;
return false;
}
return /*#__PURE__*/_react.default.createElement("div", {
className: (0, _classnames.default)("mx_DeviceDetails", className),
"data-testid": `device-detail-${device.device_id}`
}, /*#__PURE__*/_react.default.createElement("section", {
className: "mx_DeviceDetails_section"
}, /*#__PURE__*/_react.default.createElement(_DeviceDetailHeading.DeviceDetailHeading, {
device: device,
saveDeviceName: saveDeviceName
}), /*#__PURE__*/_react.default.createElement(_DeviceVerificationStatusCard.DeviceVerificationStatusCard, {
device: device,
onVerifyDevice: onVerifyDevice,
isCurrentDevice: true
})), /*#__PURE__*/_react.default.createElement("section", {
className: "mx_DeviceDetails_section"
}, /*#__PURE__*/_react.default.createElement("p", {
className: "mx_DeviceDetails_sectionHeading"
}, (0, _languageHandler._t)("settings|sessions|details_heading")), metadata.map(({
heading,
values,
id
}, index) => /*#__PURE__*/_react.default.createElement("table", {
className: "mx_DeviceDetails_metadataTable",
key: index,
"data-testid": `device-detail-metadata-${id}`
}, heading && /*#__PURE__*/_react.default.createElement("thead", null, /*#__PURE__*/_react.default.createElement("tr", null, /*#__PURE__*/_react.default.createElement("th", null, heading))), /*#__PURE__*/_react.default.createElement("tbody", null, values.map(({
label,
value
}) => /*#__PURE__*/_react.default.createElement("tr", {
key: label
}, /*#__PURE__*/_react.default.createElement("td", {
className: "mxDeviceDetails_metadataLabel"
}, label), /*#__PURE__*/_react.default.createElement("td", {
className: "mxDeviceDetails_metadataValue"
}, value))))))), showPushNotificationSection && /*#__PURE__*/_react.default.createElement("section", {
className: "mx_DeviceDetails_section mx_DeviceDetails_pushNotifications",
"data-testid": "device-detail-push-notification"
}, /*#__PURE__*/_react.default.createElement(_ToggleSwitch.default
// For backwards compatibility, if `enabled` is missing
// default to `true`
, {
checked: isPushNotificationsEnabled(pusher, localNotificationSettings),
disabled: isCheckboxDisabled(pusher, localNotificationSettings),
onChange: checked => setPushNotifications?.(device.device_id, checked),
title: (0, _languageHandler._t)("settings|sessions|push_toggle"),
"data-testid": "device-detail-push-notification-checkbox"
}), /*#__PURE__*/_react.default.createElement("p", {
className: "mx_DeviceDetails_sectionHeading"
}, (0, _languageHandler._t)("settings|sessions|push_heading"), /*#__PURE__*/_react.default.createElement("small", {
className: "mx_DeviceDetails_sectionSubheading"
}, (0, _languageHandler._t)("settings|sessions|push_subheading")))), /*#__PURE__*/_react.default.createElement("section", {
className: "mx_DeviceDetails_section"
}, /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
onClick: onSignOutDevice,
kind: "danger_inline",
disabled: isSigningOut,
"data-testid": "device-detail-sign-out-cta"
}, /*#__PURE__*/_react.default.createElement("span", {
className: "mx_DeviceDetails_signOutButtonContent"
}, (0, _languageHandler._t)("settings|sessions|sign_out"), isSigningOut && /*#__PURE__*/_react.default.createElement(_Spinner.default, {
w: 16,
h: 16
})))));
};
var _default = exports.default = DeviceDetails;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9jbGFzc25hbWVzIiwiX21hdHJpeCIsIl9EYXRlVXRpbHMiLCJfbGFuZ3VhZ2VIYW5kbGVyIiwiX0FjY2Vzc2libGVCdXR0b24iLCJfU3Bpbm5lciIsIl9Ub2dnbGVTd2l0Y2giLCJfRGV2aWNlRGV0YWlsSGVhZGluZyIsIl9EZXZpY2VWZXJpZmljYXRpb25TdGF0dXNDYXJkIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImRlZmF1bHQiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiRGV2aWNlRGV0YWlscyIsImRldmljZSIsInB1c2hlciIsImxvY2FsTm90aWZpY2F0aW9uU2V0dGluZ3MiLCJpc1NpZ25pbmdPdXQiLCJvblZlcmlmeURldmljZSIsIm9uU2lnbk91dERldmljZSIsInNhdmVEZXZpY2VOYW1lIiwic2V0UHVzaE5vdGlmaWNhdGlvbnMiLCJzdXBwb3J0c01TQzM4ODEiLCJjbGFzc05hbWUiLCJpc0N1cnJlbnREZXZpY2UiLCJtZXRhZGF0YSIsImlkIiwidmFsdWVzIiwibGFiZWwiLCJfdCIsInZhbHVlIiwiZGV2aWNlX2lkIiwibGFzdF9zZWVuX3RzIiwiZm9ybWF0RGF0ZSIsIkRhdGUiLCJoZWFkaW5nIiwiYXBwTmFtZSIsImFwcFZlcnNpb24iLCJ1cmwiLCJkZXZpY2VNb2RlbCIsImRldmljZU9wZXJhdGluZ1N5c3RlbSIsImNsaWVudCIsImxhc3Rfc2Vlbl9pcCIsIm1hcCIsInNlY3Rpb24iLCJyb3ciLCJzaG93UHVzaE5vdGlmaWNhdGlvblNlY3Rpb24iLCJpc1B1c2hOb3RpZmljYXRpb25zRW5hYmxlZCIsIm5vdGlmaWNhdGlvblNldHRpbmdzIiwiUFVTSEVSX0VOQUJMRUQiLCJuYW1lIiwiaXNfc2lsZW5jZWQiLCJpc0NoZWNrYm94RGlzYWJsZWQiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lcyIsIkRldmljZURldGFpbEhlYWRpbmciLCJEZXZpY2VWZXJpZmljYXRpb25TdGF0dXNDYXJkIiwiaW5kZXgiLCJrZXkiLCJjaGVja2VkIiwiZGlzYWJsZWQiLCJvbkNoYW5nZSIsInRpdGxlIiwib25DbGljayIsImtpbmQiLCJ3IiwiaCIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL3NldHRpbmdzL2RldmljZXMvRGV2aWNlRGV0YWlscy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjIgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCB7IElQdXNoZXIsIFBVU0hFUl9FTkFCTEVELCBMb2NhbE5vdGlmaWNhdGlvblNldHRpbmdzIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuXG5pbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0RhdGVVdGlsc1wiO1xuaW1wb3J0IHsgX3QgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbGFuZ3VhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgQWNjZXNzaWJsZUJ1dHRvbiBmcm9tIFwiLi4vLi4vZWxlbWVudHMvQWNjZXNzaWJsZUJ1dHRvblwiO1xuaW1wb3J0IFNwaW5uZXIgZnJvbSBcIi4uLy4uL2VsZW1lbnRzL1NwaW5uZXJcIjtcbmltcG9ydCBUb2dnbGVTd2l0Y2ggZnJvbSBcIi4uLy4uL2VsZW1lbnRzL1RvZ2dsZVN3aXRjaFwiO1xuaW1wb3J0IHsgRGV2aWNlRGV0YWlsSGVhZGluZyB9IGZyb20gXCIuL0RldmljZURldGFpbEhlYWRpbmdcIjtcbmltcG9ydCB7IERldmljZVZlcmlmaWNhdGlvblN0YXR1c0NhcmQgfSBmcm9tIFwiLi9EZXZpY2VWZXJpZmljYXRpb25TdGF0dXNDYXJkXCI7XG5pbXBvcnQgeyBFeHRlbmRlZERldmljZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbmludGVyZmFjZSBQcm9wcyB7XG4gICAgZGV2aWNlOiBFeHRlbmRlZERldmljZTtcbiAgICBwdXNoZXI/OiBJUHVzaGVyO1xuICAgIGxvY2FsTm90aWZpY2F0aW9uU2V0dGluZ3M/OiBMb2NhbE5vdGlmaWNhdGlvblNldHRpbmdzO1xuICAgIGlzU2lnbmluZ091dDogYm9vbGVhbjtcbiAgICBvblZlcmlmeURldmljZT86ICgpID0+IHZvaWQ7XG4gICAgb25TaWduT3V0RGV2aWNlOiAoKSA9PiB2b2lkO1xuICAgIHNhdmVEZXZpY2VOYW1lOiAoZGV2aWNlTmFtZTogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgIHNldFB1c2hOb3RpZmljYXRpb25zPzogKGRldmljZUlkOiBzdHJpbmcsIGVuYWJsZWQ6IGJvb2xlYW4pID0+IFByb21pc2U8dm9pZD47XG4gICAgc3VwcG9ydHNNU0MzODgxPzogYm9vbGVhbjtcbiAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgaXNDdXJyZW50RGV2aWNlPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIE1ldGFkYXRhVGFibGUge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgaGVhZGluZz86IHN0cmluZztcbiAgICB2YWx1ZXM6IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU/OiBzdHJpbmcgfCBSZWFjdC5SZWFjdE5vZGUgfVtdO1xufVxuXG5jb25zdCBEZXZpY2VEZXRhaWxzOiBSZWFjdC5GQzxQcm9wcz4gPSAoe1xuICAgIGRldmljZSxcbiAgICBwdXNoZXIsXG4gICAgbG9jYWxOb3RpZmljYXRpb25TZXR0aW5ncyxcbiAgICBpc1NpZ25pbmdPdXQsXG4gICAgb25WZXJpZnlEZXZpY2UsXG4gICAgb25TaWduT3V0RGV2aWNlLFxuICAgIHNhdmVEZXZpY2VOYW1lLFxuICAgIHNldFB1c2hOb3RpZmljYXRpb25zLFxuICAgIHN1cHBvcnRzTVNDMzg4MSxcbiAgICBjbGFzc05hbWUsXG4gICAgaXNDdXJyZW50RGV2aWNlLFxufSkgPT4ge1xuICAgIGNvbnN0IG1ldGFkYXRhOiBNZXRhZGF0YVRhYmxlW10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInNlc3Npb25cIixcbiAgICAgICAgICAgIHZhbHVlczogW1xuICAgICAgICAgICAgICAgIHsgbGFiZWw6IF90KFwic2V0dGluZ3N8c2Vzc2lvbnN8c2Vzc2lvbl9pZFwiKSwgdmFsdWU6IGRldmljZS5kZXZpY2VfaWQgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBfdChcInNldHRpbmdzfHNlc3Npb25zfGxhc3RfYWN0aXZpdHlcIiksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBkZXZpY2UubGFzdF9zZWVuX3RzICYmIGZvcm1hdERhdGUobmV3IERhdGUoZGV2aWNlLmxhc3Rfc2Vlbl90cykpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJhcHBsaWNhdGlvblwiLFxuICAgICAgICAgICAgaGVhZGluZzogX3QoXCJjb21tb258YXBwbGljYXRpb25cIiksXG4gICAgICAgICAgICB2YWx1ZXM6IFtcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiBfdChcImNvbW1vbnxuYW1lXCIpLCB2YWx1ZTogZGV2aWNlLmFwcE5hbWUgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiBfdChcImNvbW1vbnx2ZXJzaW9uXCIpLCB2YWx1ZTogZGV2aWNlLmFwcFZlcnNpb24gfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiBfdChcInNldHRpbmdzfHNlc3Npb25zfHVybFwiKSwgdmFsdWU6IGRldmljZS51cmwgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcImRldmljZVwiLFxuICAgICAgICAgICAgaGVhZGluZzogX3QoXCJjb21tb258ZGV2aWNlXCIpLFxuICAgICAgICAgICAgdmFsdWVzOiBbXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogX3QoXCJjb21tb258bW9kZWxcIiksIHZhbHVlOiBkZXZpY2UuZGV2aWNlTW9kZWwgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiBfdChcInNldHRpbmdzfHNlc3Npb25zfG9zXCIpLCB2YWx1ZTogZGV2aWNlLmRldmljZU9wZXJhdGluZ1N5c3RlbSB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6IF90KFwic2V0dGluZ3N8c2Vzc2lvbnN8YnJvd3NlclwiKSwgdmFsdWU6IGRldmljZS5jbGllbnQgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiBfdChcInNldHRpbmdzfHNlc3Npb25zfGlwXCIpLCB2YWx1ZTogZGV2aWNlLmxhc3Rfc2Vlbl9pcCB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICBdXG4gICAgICAgIC5tYXAoKHNlY3Rpb24pID0+XG4gICAgICAgICAgICAvLyBmaWx0ZXIgb3V0IGZhbHN5IHZhbHVlc1xuICAgICAgICAgICAgKHsgLi4uc2VjdGlvbiwgdmFsdWVzOiBzZWN0aW9uLnZhbHVlcy5maWx0ZXIoKHJvdykgPT4gISFyb3cudmFsdWUpIH0pLFxuICAgICAgICApXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAoc2VjdGlvbikgPT5cbiAgICAgICAgICAgICAgICAvLyB0aGVuIGZpbHRlciBvdXQgc2VjdGlvbnMgd2l0aCBubyB2YWx1ZXNcbiAgICAgICAgICAgICAgICBzZWN0aW9uLnZhbHVlcy5sZW5ndGgsXG4gICAgICAgICk7XG5cbiAgICBjb25zdCBzaG93UHVzaE5vdGlmaWNhdGlvblNlY3Rpb24gPSAhIXB1c2hlciB8fCAhIWxvY2FsTm90aWZpY2F0aW9uU2V0dGluZ3M7XG5cbiAgICBmdW5jdGlvbiBpc1B1c2hOb3RpZmljYXRpb25zRW5hYmxlZChwdXNoZXI/OiBJUHVzaGVyLCBub3RpZmljYXRpb25TZXR0aW5ncz86IExvY2FsTm90aWZpY2F0aW9uU2V0dGluZ3MpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHB1c2hlcikgcmV0dXJuICEhcHVzaGVyW1BVU0hFUl9FTkFCTEVELm5hbWVdO1xuICAgICAgICBpZiAobG9jYWxOb3RpZmljYXRpb25TZXR0aW5ncykgcmV0dXJuICFsb2NhbE5vdGlmaWNhdGlvblNldHRpbmdzLmlzX3NpbGVuY2VkO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0NoZWNrYm94RGlzYWJsZWQocHVzaGVyPzogSVB1c2hlciwgbm90aWZpY2F0aW9uU2V0dGluZ3M/OiBMb2NhbE5vdGlmaWNhdGlvblNldHRpbmdzKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChsb2NhbE5vdGlmaWNhdGlvblNldHRpbmdzKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChwdXNoZXIgJiYgIXN1cHBvcnRzTVNDMzg4MSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhcIm14X0RldmljZURldGFpbHNcIiwgY2xhc3NOYW1lKX0gZGF0YS10ZXN0aWQ9e2BkZXZpY2UtZGV0YWlsLSR7ZGV2aWNlLmRldmljZV9pZH1gfT5cbiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cIm14X0RldmljZURldGFpbHNfc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgIDxEZXZpY2VEZXRhaWxIZWFkaW5nIGRldmljZT17ZGV2aWNlfSBzYXZlRGV2aWNlTmFtZT17c2F2ZURldmljZU5hbWV9IC8+XG4gICAgICAgICAgICAgICAgPERldmljZVZlcmlmaWNhdGlvblN0YXR1c0NhcmQgZGV2aWNlPXtkZXZpY2V9IG9uVmVyaWZ5RGV2aWNlPXtvblZlcmlmeURldmljZX0gaXNDdXJyZW50RGV2aWNlIC8+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJteF9EZXZpY2VEZXRhaWxzX3NlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJteF9EZXZpY2VEZXRhaWxzX3NlY3Rpb25IZWFkaW5nXCI+e190KFwic2V0dGluZ3N8c2Vzc2lvbnN8ZGV0YWlsc19oZWFkaW5nXCIpfTwvcD5cbiAgICAgICAgICAgICAgICB7bWV0YWRhdGEubWFwKCh7IGhlYWRpbmcsIHZhbHVlcywgaWQgfSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICAgICAgPHRhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteF9EZXZpY2VEZXRhaWxzX21ldGFkYXRhVGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgZGV2aWNlLWRldGFpbC1tZXRhZGF0YS0ke2lkfWB9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtoZWFkaW5nICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD57aGVhZGluZ308L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2YWx1ZXMubWFwKCh7IGxhYmVsLCB2YWx1ZSB9KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBrZXk9e2xhYmVsfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJteERldmljZURldGFpbHNfbWV0YWRhdGFMYWJlbFwiPntsYWJlbH08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cIm14RGV2aWNlRGV0YWlsc19tZXRhZGF0YVZhbHVlXCI+e3ZhbHVlfTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAge3Nob3dQdXNoTm90aWZpY2F0aW9uU2VjdGlvbiAmJiAoXG4gICAgICAgICAgICAgICAgPHNlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXhfRGV2aWNlRGV0YWlsc19zZWN0aW9uIG14X0RldmljZURldGFpbHNfcHVzaE5vdGlmaWNhdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImRldmljZS1kZXRhaWwtcHVzaC1ub3RpZmljYXRpb25cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFRvZ2dsZVN3aXRjaFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBpZiBgZW5hYmxlZGAgaXMgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB0byBgdHJ1ZWBcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2lzUHVzaE5vdGlmaWNhdGlvbnNFbmFibGVkKHB1c2hlciwgbG9jYWxOb3RpZmljYXRpb25TZXR0aW5ncyl9XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNDaGVja2JveERpc2FibGVkKHB1c2hlciwgbG9jYWxOb3RpZmljYXRpb25TZXR0aW5ncyl9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGNoZWNrZWQpID0+IHNldFB1c2hOb3RpZmljYXRpb25zPy4oZGV2aWNlLmRldmljZV9pZCwgY2hlY2tlZCl9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17X3QoXCJzZXR0aW5nc3xzZXNzaW9uc3xwdXNoX3RvZ2dsZVwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZGV2aWNlLWRldGFpbC1wdXNoLW5vdGlmaWNhdGlvbi1jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm14X0RldmljZURldGFpbHNfc2VjdGlvbkhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtfdChcInNldHRpbmdzfHNlc3Npb25zfHB1c2hfaGVhZGluZ1wiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzc05hbWU9XCJteF9EZXZpY2VEZXRhaWxzX3NlY3Rpb25TdWJoZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge190KFwic2V0dGluZ3N8c2Vzc2lvbnN8cHVzaF9zdWJoZWFkaW5nXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJteF9EZXZpY2VEZXRhaWxzX3NlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8QWNjZXNzaWJsZUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtvblNpZ25PdXREZXZpY2V9XG4gICAgICAgICAgICAgICAgICAgIGtpbmQ9XCJkYW5nZXJfaW5saW5lXCJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzU2lnbmluZ091dH1cbiAgICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJkZXZpY2UtZGV0YWlsLXNpZ24tb3V0LWN0YVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJteF9EZXZpY2VEZXRhaWxzX3NpZ25PdXRCdXR0b25Db250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7X3QoXCJzZXR0aW5nc3xzZXNzaW9uc3xzaWduX291dFwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc1NpZ25pbmdPdXQgJiYgPFNwaW5uZXIgdz17MTZ9IGg9ezE2fSAvPn1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvQWNjZXNzaWJsZUJ1dHRvbj5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IERldmljZURldGFpbHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FB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Q1YsQ0FDSSxDQUFDLEVBQ1RnQiwyQkFBMkIsaUJBQ3hCbkUsTUFBQSxDQUFBOEIsT0FBQSxDQUFBNEMsYUFBQTtJQUNJOUIsU0FBUyxFQUFDLDZEQUE2RDtJQUN2RSxlQUFZO0VBQWlDLGdCQUU3QzVDLE1BQUEsQ0FBQThCLE9BQUEsQ0FBQTRDLGFBQUEsQ0FBQ2pFLGFBQUEsQ0FBQXFCO0VBQ0c7RUFDQTtFQUFBO0lBQ0FrRCxPQUFPLEVBQUVaLDBCQUEwQixDQUFDaEMsTUFBTSxFQUFFQyx5QkFBeUIsQ0FBRTtJQUN2RTRDLFFBQVEsRUFBRVIsa0JBQWtCLENBQUNyQyxNQUFNLEVBQUVDLHlCQUF5QixDQUFFO0lBQ2hFNkMsUUFBUSxFQUFHRixPQUFPLElBQUt0QyxvQkFBb0IsR0FBR1AsTUFBTSxDQUFDaUIsU0FBUyxFQUFFNEIsT0FBTyxDQUFFO0lBQ3pFRyxLQUFLLEVBQUUsSUFBQWpDLG1CQUFFLEVBQUMsK0JBQStCLENBQUU7SUFDM0MsZUFBWTtFQUEwQyxDQUN6RCxDQUFDLGVBQ0ZsRCxNQUFBLENBQUE4QixPQUFBLENBQUE0QyxhQUFBO0lBQUc5QixTQUFTLEVBQUM7RUFBaUMsR0FDekMsSUFBQU0sbUJBQUUsRUFBQyxnQ0FBZ0MsQ0FBQyxlQUNyQ2xELE1BQUEsQ0FBQThCLE9BQUEsQ0FBQTRDLGFBQUE7SUFBTzlCLFNBQVMsRUFBQztFQUFvQyxHQUNoRCxJQUFBTSxtQkFBRSxFQUFDLG1DQUFtQyxDQUNwQyxDQUNSLENBQ0UsQ0FDWixlQUNEbEQsTUFBQSxDQUFBOEIsT0FBQSxDQUFBNEMsYUFBQTtJQUFTOUIsU0FBUyxFQUFDO0VBQTBCLGdCQUN6QzVDLE1BQUEsQ0FBQThCLE9BQUEsQ0FBQTRDLGFBQUEsQ0FBQ25FLGlCQUFBLENBQUF1QixPQUFnQjtJQUNic0QsT0FBTyxFQUFFNUMsZUFBZ0I7SUFDekI2QyxJQUFJLEVBQUMsZUFBZTtJQUNwQkosUUFBUSxFQUFFM0MsWUFBYTtJQUN2QixlQUFZO0VBQTRCLGdCQUV4Q3RDLE1BQUEsQ0FBQThCLE9BQUEsQ0FBQTRDLGFBQUE7SUFBTTlCLFNBQVMsRUFBQztFQUF1QyxHQUNsRCxJQUFBTSxtQkFBRSxFQUFDLDRCQUE0QixDQUFDLEVBQ2hDWixZQUFZLGlCQUFJdEMsTUFBQSxDQUFBOEIsT0FBQSxDQUFBNEMsYUFBQSxDQUFDbEUsUUFBQSxDQUFBc0IsT0FBTztJQUFDd0QsQ0FBQyxFQUFFLEVBQUc7SUFBQ0MsQ0FBQyxFQUFFO0VBQUcsQ0FBRSxDQUN2QyxDQUNRLENBQ2IsQ0FDUixDQUFDO0FBRWQsQ0FBQztBQUFDLElBQUFDLFFBQUEsR0FBQUMsT0FBQSxDQUFBM0QsT0FBQSxHQUVhSSxhQUFhIiwiaWdub3JlTGlzdCI6W119