botframework-webchat-component
Version:
React component of botframework-webchat
176 lines (175 loc) • 30.2 kB
JavaScript
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _botframeworkWebchatApi = require("botframework-webchat-api");
var _classnames = _interopRequireDefault(require("classnames"));
var _react = _interopRequireWildcard(require("react"));
var _CollapseIcon = _interopRequireDefault(require("./Toast/CollapseIcon"));
var _ExpandIcon = _interopRequireDefault(require("./Toast/ExpandIcon"));
var _NotificationIcon = _interopRequireDefault(require("./Toast/NotificationIcon"));
var _randomId = _interopRequireDefault(require("./Utils/randomId"));
var _useStyleSet3 = _interopRequireDefault(require("./hooks/useStyleSet"));
var _useStyleToEmotionObject = _interopRequireDefault(require("./hooks/internal/useStyleToEmotionObject"));
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } /* eslint no-magic-numbers: ["error", { "ignore": [0, 1, 2, 3, 4, 5] }] */ /* eslint react/forbid-dom-props: "off" */
var useDebouncedNotifications = _botframeworkWebchatApi.hooks.useDebouncedNotifications,
useLocalizer = _botframeworkWebchatApi.hooks.useLocalizer,
useRenderToast = _botframeworkWebchatApi.hooks.useRenderToast;
var ROOT_STYLE = {
display: 'flex',
flexDirection: 'column',
'& .webchat__toaster__header': {
display: 'flex',
flexShrink: 0
},
'& .webchat__toaster__expandText': {
flex: 1
},
'& .webchat__toaster__list': {
display: 'block',
listStyleType: 'none'
}
};
var LEVEL_AS_NUMBER = {
error: 1,
warn: 2,
info: 3,
success: 4
};
var LEVEL_AS_NUMBER_KEYS = Object.keys(LEVEL_AS_NUMBER);
function getLevelAsNumber(level) {
// Mitigated through allowlisting.
// eslint-disable-next-line security/detect-object-injection
return LEVEL_AS_NUMBER_KEYS.includes(level) ? LEVEL_AS_NUMBER[level] : 5;
}
function compareLevel(x, y) {
return getLevelAsNumber(x) - getLevelAsNumber(y);
}
function sortNotifications(map) {
return Object.values(map)
// We want the order reversed, most recent on top.
.sort(function (_ref, _ref2) {
var x = _ref.timestamp;
var y = _ref2.timestamp;
return y - x;
});
}
var PASSTHRU_FN = function PASSTHRU_FN(value) {
return value;
};
var TOAST_ACCORDION_IDS = {
two: 'TOAST_ACCORDION_TWO',
few: 'TOAST_ACCORDION_FEW',
many: 'TOAST_ACCORDION_MANY',
other: 'TOAST_ACCORDION_OTHER'
};
var BasicToaster = function BasicToaster() {
var instanceId = (0, _react.useMemo)(_randomId.default, []);
var _useStyleSet = (0, _useStyleSet3.default)(),
_useStyleSet2 = _slicedToArray(_useStyleSet, 1),
toasterStyleSet = _useStyleSet2[0].toaster;
var _useDebouncedNotifica = useDebouncedNotifications(),
_useDebouncedNotifica2 = _slicedToArray(_useDebouncedNotifica, 1),
debouncedNotifications = _useDebouncedNotifica2[0];
var _useState = (0, _react.useState)(false),
_useState2 = _slicedToArray(_useState, 2),
expanded = _useState2[0],
setExpanded = _useState2[1];
var localizeWithPlural = useLocalizer({
plural: true
});
var renderToast = useRenderToast();
var rootClassName = (0, _useStyleToEmotionObject.default)()(ROOT_STYLE) + '';
var handleToggleExpand = (0, _react.useCallback)(function () {
return setExpanded(!expanded);
}, [expanded, setExpanded]);
var sortedNotifications = (0, _react.useMemo)(function () {
return sortNotifications(debouncedNotifications);
}, [debouncedNotifications]);
var sortedNotificationsWithChildren = (0, _react.useMemo)(function () {
return sortedNotifications.map(function (notification) {
var children = renderToast({
notification: notification
});
return children && {
children: children,
notification: notification
};
}).filter(PASSTHRU_FN);
}, [renderToast, sortedNotifications]);
var expandable = sortedNotificationsWithChildren.length > 1;
var _sortedNotificationsW = sortedNotificationsWithChildren.map(function (_ref3) {
var level = _ref3.notification.level;
return level;
}).sort(compareLevel),
_sortedNotificationsW2 = _slicedToArray(_sortedNotificationsW, 1),
highestLevel = _sortedNotificationsW2[0];
var expandableElementId = (0, _react.useMemo)(function () {
return !expandable || expanded ? "webchat__toaster__list__".concat(instanceId) : undefined;
}, [expandable, expanded, instanceId]);
var headerElementId = (0, _react.useMemo)(function () {
return expandable ? "webchat__toaster__header__".concat(instanceId) : undefined;
}, [expandable, instanceId]);
(0, _react.useEffect)(function () {
!expandable && setExpanded(false);
}, [expandable]);
return /*#__PURE__*/_react.default.createElement("div", {
"aria-labelledby": headerElementId,
"aria-live": "polite",
"aria-relevant": "all",
className: (0, _classnames.default)('webchat__toaster', {
'webchat__toaster--expandable': expandable,
'webchat__toaster--expanded': expanded,
'webchat__toaster--error': highestLevel === 'error',
'webchat__toaster--info': highestLevel === 'info',
'webchat__toaster--success': highestLevel === 'success',
'webchat__toaster--warn': highestLevel === 'warn'
}, rootClassName, toasterStyleSet + ''),
role: "log"
}, expandable && /*#__PURE__*/_react.default.createElement("button", {
"aria-controls": expandableElementId,
"aria-expanded": expanded,
className: "webchat__toaster__header",
id: headerElementId,
onClick: handleToggleExpand,
type: "button"
}, /*#__PURE__*/_react.default.createElement("div", {
"aria-hidden": true,
className: "webchat__toaster__expandLevelIconBox"
}, /*#__PURE__*/_react.default.createElement(_NotificationIcon.default, {
className: "webchat__toaster__expandLevelIcon",
level: highestLevel
})), /*#__PURE__*/_react.default.createElement("div", {
className: "webchat__toaster__expandText"
}, localizeWithPlural(TOAST_ACCORDION_IDS, sortedNotificationsWithChildren.length)), /*#__PURE__*/_react.default.createElement("div", {
"aria-hidden": true,
className: "webchat__toaster__expandIcon"
}, /*#__PURE__*/_react.default.createElement("div", {
className: "webchat__toaster__expandIconFocus"
}, expanded ? /*#__PURE__*/_react.default.createElement(_CollapseIcon.default, null) : /*#__PURE__*/_react.default.createElement(_ExpandIcon.default, null)))), (!expandable || expanded) && /*#__PURE__*/_react.default.createElement("div", {
"aria-labelledby": headerElementId,
className: "webchat__toaster__list",
id: expandableElementId
}, sortedNotificationsWithChildren.map(function (_ref4) {
var children = _ref4.children,
id = _ref4.notification.id;
return /*#__PURE__*/_react.default.createElement("div", {
"aria-atomic": true,
className: "webchat__toaster__listItem",
key: id
}, children);
})));
};
var _default = BasicToaster;
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYm90ZnJhbWV3b3JrV2ViY2hhdEFwaSIsInJlcXVpcmUiLCJfY2xhc3NuYW1lcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9Db2xsYXBzZUljb24iLCJfRXhwYW5kSWNvbiIsIl9Ob3RpZmljYXRpb25JY29uIiwiX3JhbmRvbUlkIiwiX3VzZVN0eWxlU2V0MyIsIl91c2VTdHlsZVRvRW1vdGlvbk9iamVjdCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsIm5vZGVJbnRlcm9wIiwiV2Vha01hcCIsImNhY2hlQmFiZWxJbnRlcm9wIiwiY2FjaGVOb2RlSW50ZXJvcCIsIm9iaiIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiZGVmYXVsdCIsImNhY2hlIiwiaGFzIiwiZ2V0IiwibmV3T2JqIiwiaGFzUHJvcGVydHlEZXNjcmlwdG9yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkZXNjIiwic2V0IiwiX3NsaWNlZFRvQXJyYXkiLCJhcnIiLCJpIiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlUmVzdCIsIlR5cGVFcnJvciIsIm8iLCJtaW5MZW4iLCJfYXJyYXlMaWtlVG9BcnJheSIsIm4iLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiQXJyYXkiLCJmcm9tIiwidGVzdCIsImxlbiIsImxlbmd0aCIsImFycjIiLCJfaSIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiX2FyciIsIl9uIiwiX2QiLCJfcyIsIl9lIiwibmV4dCIsImRvbmUiLCJwdXNoIiwidmFsdWUiLCJlcnIiLCJpc0FycmF5IiwidXNlRGVib3VuY2VkTm90aWZpY2F0aW9ucyIsImhvb2tzIiwidXNlTG9jYWxpemVyIiwidXNlUmVuZGVyVG9hc3QiLCJST09UX1NUWUxFIiwiZGlzcGxheSIsImZsZXhEaXJlY3Rpb24iLCJmbGV4U2hyaW5rIiwiZmxleCIsImxpc3RTdHlsZVR5cGUiLCJMRVZFTF9BU19OVU1CRVIiLCJlcnJvciIsIndhcm4iLCJpbmZvIiwic3VjY2VzcyIsIkxFVkVMX0FTX05VTUJFUl9LRVlTIiwia2V5cyIsImdldExldmVsQXNOdW1iZXIiLCJsZXZlbCIsImluY2x1ZGVzIiwiY29tcGFyZUxldmVsIiwieCIsInkiLCJzb3J0Tm90aWZpY2F0aW9ucyIsIm1hcCIsInZhbHVlcyIsInNvcnQiLCJfcmVmIiwiX3JlZjIiLCJ0aW1lc3RhbXAiLCJQQVNTVEhSVV9GTiIsIlRPQVNUX0FDQ09SRElPTl9JRFMiLCJ0d28iLCJmZXciLCJtYW55Iiwib3RoZXIiLCJCYXNpY1RvYXN0ZXIiLCJpbnN0YW5jZUlkIiwidXNlTWVtbyIsInJhbmRvbUlkIiwiX3VzZVN0eWxlU2V0IiwidXNlU3R5bGVTZXQiLCJfdXNlU3R5bGVTZXQyIiwidG9hc3RlclN0eWxlU2V0IiwidG9hc3RlciIsIl91c2VEZWJvdW5jZWROb3RpZmljYSIsIl91c2VEZWJvdW5jZWROb3RpZmljYTIiLCJkZWJvdW5jZWROb3RpZmljYXRpb25zIiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiZXhwYW5kZWQiLCJzZXRFeHBhbmRlZCIsImxvY2FsaXplV2l0aFBsdXJhbCIsInBsdXJhbCIsInJlbmRlclRvYXN0Iiwicm9vdENsYXNzTmFtZSIsInVzZVN0eWxlVG9FbW90aW9uT2JqZWN0IiwiaGFuZGxlVG9nZ2xlRXhwYW5kIiwidXNlQ2FsbGJhY2siLCJzb3J0ZWROb3RpZmljYXRpb25zIiwic29ydGVkTm90aWZpY2F0aW9uc1dpdGhDaGlsZHJlbiIsIm5vdGlmaWNhdGlvbiIsImNoaWxkcmVuIiwiZmlsdGVyIiwiZXhwYW5kYWJsZSIsIl9zb3J0ZWROb3RpZmljYXRpb25zVyIsIl9yZWYzIiwiX3NvcnRlZE5vdGlmaWNhdGlvbnNXMiIsImhpZ2hlc3RMZXZlbCIsImV4cGFuZGFibGVFbGVtZW50SWQiLCJjb25jYXQiLCJ1bmRlZmluZWQiLCJoZWFkZXJFbGVtZW50SWQiLCJ1c2VFZmZlY3QiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiY2xhc3NOYW1lcyIsInJvbGUiLCJpZCIsIm9uQ2xpY2siLCJ0eXBlIiwiX3JlZjQiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6ImNvbXBvbmVudDovLy8iLCJzb3VyY2VzIjpbIi4uL3NyYy9CYXNpY1RvYXN0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50IG5vLW1hZ2ljLW51bWJlcnM6IFtcImVycm9yXCIsIHsgXCJpZ25vcmVcIjogWzAsIDEsIDIsIDMsIDQsIDVdIH1dICovXG4vKiBlc2xpbnQgcmVhY3QvZm9yYmlkLWRvbS1wcm9wczogXCJvZmZcIiAqL1xuXG5pbXBvcnQgeyBob29rcyB9IGZyb20gJ2JvdGZyYW1ld29yay13ZWJjaGF0LWFwaSc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IENvbGxhcHNlSWNvbiBmcm9tICcuL1RvYXN0L0NvbGxhcHNlSWNvbic7XG5pbXBvcnQgRXhwYW5kSWNvbiBmcm9tICcuL1RvYXN0L0V4cGFuZEljb24nO1xuaW1wb3J0IE5vdGlmaWNhdGlvbkljb24gZnJvbSAnLi9Ub2FzdC9Ob3RpZmljYXRpb25JY29uJztcbmltcG9ydCByYW5kb21JZCBmcm9tICcuL1V0aWxzL3JhbmRvbUlkJztcbmltcG9ydCB1c2VTdHlsZVNldCBmcm9tICcuL2hvb2tzL3VzZVN0eWxlU2V0JztcbmltcG9ydCB1c2VTdHlsZVRvRW1vdGlvbk9iamVjdCBmcm9tICcuL2hvb2tzL2ludGVybmFsL3VzZVN0eWxlVG9FbW90aW9uT2JqZWN0JztcblxuY29uc3QgeyB1c2VEZWJvdW5jZWROb3RpZmljYXRpb25zLCB1c2VMb2NhbGl6ZXIsIHVzZVJlbmRlclRvYXN0IH0gPSBob29rcztcblxuY29uc3QgUk9PVF9TVFlMRSA9IHtcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcblxuICAnJiAud2ViY2hhdF9fdG9hc3Rlcl9faGVhZGVyJzoge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4U2hyaW5rOiAwXG4gIH0sXG5cbiAgJyYgLndlYmNoYXRfX3RvYXN0ZXJfX2V4cGFuZFRleHQnOiB7XG4gICAgZmxleDogMVxuICB9LFxuXG4gICcmIC53ZWJjaGF0X190b2FzdGVyX19saXN0Jzoge1xuICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgbGlzdFN0eWxlVHlwZTogJ25vbmUnXG4gIH1cbn07XG5cbmNvbnN0IExFVkVMX0FTX05VTUJFUiA9IHtcbiAgZXJyb3I6IDEsXG4gIHdhcm46IDIsXG4gIGluZm86IDMsXG4gIHN1Y2Nlc3M6IDRcbn07XG5cbmNvbnN0IExFVkVMX0FTX05VTUJFUl9LRVlTID0gT2JqZWN0LmtleXMoTEVWRUxfQVNfTlVNQkVSKTtcblxuZnVuY3Rpb24gZ2V0TGV2ZWxBc051bWJlcihsZXZlbCkge1xuICAvLyBNaXRpZ2F0ZWQgdGhyb3VnaCBhbGxvd2xpc3RpbmcuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWN1cml0eS9kZXRlY3Qtb2JqZWN0LWluamVjdGlvblxuICByZXR1cm4gTEVWRUxfQVNfTlVNQkVSX0tFWVMuaW5jbHVkZXMobGV2ZWwpID8gTEVWRUxfQVNfTlVNQkVSW2xldmVsXSA6IDU7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVMZXZlbCh4LCB5KSB7XG4gIHJldHVybiBnZXRMZXZlbEFzTnVtYmVyKHgpIC0gZ2V0TGV2ZWxBc051bWJlcih5KTtcbn1cblxuZnVuY3Rpb24gc29ydE5vdGlmaWNhdGlvbnMobWFwKSB7XG4gIHJldHVybiAoXG4gICAgT2JqZWN0LnZhbHVlcyhtYXApXG4gICAgICAvLyBXZSB3YW50IHRoZSBvcmRlciByZXZlcnNlZCwgbW9zdCByZWNlbnQgb24gdG9wLlxuICAgICAgLnNvcnQoKHsgdGltZXN0YW1wOiB4IH0sIHsgdGltZXN0YW1wOiB5IH0pID0+IHkgLSB4KVxuICApO1xufVxuXG5jb25zdCBQQVNTVEhSVV9GTiA9IHZhbHVlID0+IHZhbHVlO1xuY29uc3QgVE9BU1RfQUNDT1JESU9OX0lEUyA9IHtcbiAgdHdvOiAnVE9BU1RfQUNDT1JESU9OX1RXTycsXG4gIGZldzogJ1RPQVNUX0FDQ09SRElPTl9GRVcnLFxuICBtYW55OiAnVE9BU1RfQUNDT1JESU9OX01BTlknLFxuICBvdGhlcjogJ1RPQVNUX0FDQ09SRElPTl9PVEhFUidcbn07XG5cbmNvbnN0IEJhc2ljVG9hc3RlciA9ICgpID0+IHtcbiAgY29uc3QgaW5zdGFuY2VJZCA9IHVzZU1lbW8ocmFuZG9tSWQsIFtdKTtcbiAgY29uc3QgW3sgdG9hc3RlcjogdG9hc3RlclN0eWxlU2V0IH1dID0gdXNlU3R5bGVTZXQoKTtcbiAgY29uc3QgW2RlYm91bmNlZE5vdGlmaWNhdGlvbnNdID0gdXNlRGVib3VuY2VkTm90aWZpY2F0aW9ucygpO1xuICBjb25zdCBbZXhwYW5kZWQsIHNldEV4cGFuZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgbG9jYWxpemVXaXRoUGx1cmFsID0gdXNlTG9jYWxpemVyKHsgcGx1cmFsOiB0cnVlIH0pO1xuICBjb25zdCByZW5kZXJUb2FzdCA9IHVzZVJlbmRlclRvYXN0KCk7XG4gIGNvbnN0IHJvb3RDbGFzc05hbWUgPSB1c2VTdHlsZVRvRW1vdGlvbk9iamVjdCgpKFJPT1RfU1RZTEUpICsgJyc7XG5cbiAgY29uc3QgaGFuZGxlVG9nZ2xlRXhwYW5kID0gdXNlQ2FsbGJhY2soKCkgPT4gc2V0RXhwYW5kZWQoIWV4cGFuZGVkKSwgW2V4cGFuZGVkLCBzZXRFeHBhbmRlZF0pO1xuICBjb25zdCBzb3J0ZWROb3RpZmljYXRpb25zID0gdXNlTWVtbygoKSA9PiBzb3J0Tm90aWZpY2F0aW9ucyhkZWJvdW5jZWROb3RpZmljYXRpb25zKSwgW2RlYm91bmNlZE5vdGlmaWNhdGlvbnNdKTtcbiAgY29uc3Qgc29ydGVkTm90aWZpY2F0aW9uc1dpdGhDaGlsZHJlbiA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIHNvcnRlZE5vdGlmaWNhdGlvbnNcbiAgICAgICAgLm1hcChub3RpZmljYXRpb24gPT4ge1xuICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gcmVuZGVyVG9hc3QoeyBub3RpZmljYXRpb24gfSk7XG5cbiAgICAgICAgICByZXR1cm4gY2hpbGRyZW4gJiYgeyBjaGlsZHJlbiwgbm90aWZpY2F0aW9uIH07XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoUEFTU1RIUlVfRk4pLFxuICAgIFtyZW5kZXJUb2FzdCwgc29ydGVkTm90aWZpY2F0aW9uc11cbiAgKTtcblxuICBjb25zdCBleHBhbmRhYmxlID0gc29ydGVkTm90aWZpY2F0aW9uc1dpdGhDaGlsZHJlbi5sZW5ndGggPiAxO1xuICBjb25zdCBbaGlnaGVzdExldmVsXSA9IHNvcnRlZE5vdGlmaWNhdGlvbnNXaXRoQ2hpbGRyZW4ubWFwKCh7IG5vdGlmaWNhdGlvbjogeyBsZXZlbCB9IH0pID0+IGxldmVsKS5zb3J0KGNvbXBhcmVMZXZlbCk7XG5cbiAgY29uc3QgZXhwYW5kYWJsZUVsZW1lbnRJZCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKCFleHBhbmRhYmxlIHx8IGV4cGFuZGVkID8gYHdlYmNoYXRfX3RvYXN0ZXJfX2xpc3RfXyR7aW5zdGFuY2VJZH1gIDogdW5kZWZpbmVkKSxcbiAgICBbZXhwYW5kYWJsZSwgZXhwYW5kZWQsIGluc3RhbmNlSWRdXG4gICk7XG4gIGNvbnN0IGhlYWRlckVsZW1lbnRJZCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKGV4cGFuZGFibGUgPyBgd2ViY2hhdF9fdG9hc3Rlcl9faGVhZGVyX18ke2luc3RhbmNlSWR9YCA6IHVuZGVmaW5lZCksXG4gICAgW2V4cGFuZGFibGUsIGluc3RhbmNlSWRdXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAhZXhwYW5kYWJsZSAmJiBzZXRFeHBhbmRlZChmYWxzZSk7XG4gIH0sIFtleHBhbmRhYmxlXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBhcmlhLWxhYmVsbGVkYnk9e2hlYWRlckVsZW1lbnRJZH1cbiAgICAgIGFyaWEtbGl2ZT1cInBvbGl0ZVwiXG4gICAgICBhcmlhLXJlbGV2YW50PVwiYWxsXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhcbiAgICAgICAgJ3dlYmNoYXRfX3RvYXN0ZXInLFxuICAgICAgICB7XG4gICAgICAgICAgJ3dlYmNoYXRfX3RvYXN0ZXItLWV4cGFuZGFibGUnOiBleHBhbmRhYmxlLFxuICAgICAgICAgICd3ZWJjaGF0X190b2FzdGVyLS1leHBhbmRlZCc6IGV4cGFuZGVkLFxuICAgICAgICAgICd3ZWJjaGF0X190b2FzdGVyLS1lcnJvcic6IGhpZ2hlc3RMZXZlbCA9PT0gJ2Vycm9yJyxcbiAgICAgICAgICAnd2ViY2hhdF9fdG9hc3Rlci0taW5mbyc6IGhpZ2hlc3RMZXZlbCA9PT0gJ2luZm8nLFxuICAgICAgICAgICd3ZWJjaGF0X190b2FzdGVyLS1zdWNjZXNzJzogaGlnaGVzdExldmVsID09PSAnc3VjY2VzcycsXG4gICAgICAgICAgJ3dlYmNoYXRfX3RvYXN0ZXItLXdhcm4nOiBoaWdoZXN0TGV2ZWwgPT09ICd3YXJuJ1xuICAgICAgICB9LFxuICAgICAgICByb290Q2xhc3NOYW1lLFxuICAgICAgICB0b2FzdGVyU3R5bGVTZXQgKyAnJ1xuICAgICAgKX1cbiAgICAgIHJvbGU9XCJsb2dcIlxuICAgID5cbiAgICAgIHtleHBhbmRhYmxlICYmIChcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGFyaWEtY29udHJvbHM9e2V4cGFuZGFibGVFbGVtZW50SWR9XG4gICAgICAgICAgYXJpYS1leHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgICAgY2xhc3NOYW1lPVwid2ViY2hhdF9fdG9hc3Rlcl9faGVhZGVyXCJcbiAgICAgICAgICBpZD17aGVhZGVyRWxlbWVudElkfVxuICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVRvZ2dsZUV4cGFuZH1cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgYXJpYS1oaWRkZW49e3RydWV9IGNsYXNzTmFtZT1cIndlYmNoYXRfX3RvYXN0ZXJfX2V4cGFuZExldmVsSWNvbkJveFwiPlxuICAgICAgICAgICAgPE5vdGlmaWNhdGlvbkljb24gY2xhc3NOYW1lPVwid2ViY2hhdF9fdG9hc3Rlcl9fZXhwYW5kTGV2ZWxJY29uXCIgbGV2ZWw9e2hpZ2hlc3RMZXZlbH0gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIndlYmNoYXRfX3RvYXN0ZXJfX2V4cGFuZFRleHRcIj5cbiAgICAgICAgICAgIHtsb2NhbGl6ZVdpdGhQbHVyYWwoVE9BU1RfQUNDT1JESU9OX0lEUywgc29ydGVkTm90aWZpY2F0aW9uc1dpdGhDaGlsZHJlbi5sZW5ndGgpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgYXJpYS1oaWRkZW49e3RydWV9IGNsYXNzTmFtZT1cIndlYmNoYXRfX3RvYXN0ZXJfX2V4cGFuZEljb25cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwid2ViY2hhdF9fdG9hc3Rlcl9fZXhwYW5kSWNvbkZvY3VzXCI+e2V4cGFuZGVkID8gPENvbGxhcHNlSWNvbiAvPiA6IDxFeHBhbmRJY29uIC8+fTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICl9XG4gICAgICB7KCFleHBhbmRhYmxlIHx8IGV4cGFuZGVkKSAmJiAoXG4gICAgICAgIDxkaXYgYXJpYS1sYWJlbGxlZGJ5PXtoZWFkZXJFbGVtZW50SWR9IGNsYXNzTmFtZT1cIndlYmNoYXRfX3RvYXN0ZXJfX2xpc3RcIiBpZD17ZXhwYW5kYWJsZUVsZW1lbnRJZH0+XG4gICAgICAgICAge3NvcnRlZE5vdGlmaWNhdGlvbnNXaXRoQ2hpbGRyZW4ubWFwKCh7IGNoaWxkcmVuLCBub3RpZmljYXRpb246IHsgaWQgfSB9KSA9PiAoXG4gICAgICAgICAgICA8ZGl2IGFyaWEtYXRvbWljPXt0cnVlfSBjbGFzc05hbWU9XCJ3ZWJjaGF0X190b2FzdGVyX19saXN0SXRlbVwiIGtleT17aWR9PlxuICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQmFzaWNUb2FzdGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBR0EsSUFBQUEsdUJBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLFdBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUosT0FBQTtBQUVBLElBQUFLLGFBQUEsR0FBQUgsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFNLFdBQUEsR0FBQUosc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFPLGlCQUFBLEdBQUFMLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBUSxTQUFBLEdBQUFOLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBUyxhQUFBLEdBQUFQLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBVSx3QkFBQSxHQUFBUixzQkFBQSxDQUFBRixPQUFBO0FBQStFLFNBQUFXLHlCQUFBQyxXQUFBLGVBQUFDLE9BQUEsa0NBQUFDLGlCQUFBLE9BQUFELE9BQUEsUUFBQUUsZ0JBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSx5QkFBQUMsV0FBQSxXQUFBQSxXQUFBLEdBQUFHLGdCQUFBLEdBQUFELGlCQUFBLEtBQUFGLFdB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
;