UNPKG

adui

Version:

<div> <img src="https://wxa.wxs.qq.com/mpweb/delivery/legacy/wxadtouch/upload/t1/od834zef_52939fc6.png" style="margin:40px 0 0 -8px; background-color: #fcfcfc; box-shadow: none;" /> </div>

312 lines (263 loc) 37.8 kB
"use strict"; 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 _react = _interopRequireWildcard(require("react")); var ReactDOM = _interopRequireWildcard(require("react-dom")); var _propTypes = _interopRequireDefault(require("prop-types")); var _classnames = _interopRequireDefault(require("classnames")); var _button = _interopRequireDefault(require("../button")); require("./style"); var _excluded = ["action", "className", "closable", "content", "duration", "getContainer", "intent", "onClose"], _excluded2 = ["onClose", "getContainer"]; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } 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 ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } var prefix = "adui-channels-message"; var INTENTS = ["normal", "primary", "success", "warning", "danger"]; var Message = (0, _react.forwardRef)(function (_ref, ref) { var action = _ref.action, className = _ref.className, closable = _ref.closable, content = _ref.content, duration = _ref.duration, getContainer = _ref.getContainer, intent = _ref.intent, onClose = _ref.onClose, otherProps = _objectWithoutProperties(_ref, _excluded); var messageRef = (0, _react.useRef)(null); var icon = _react["default"].createElement("svg", { className: "".concat(prefix, "-icon"), width: "20", height: "20", viewBox: "0 0 20 20", fill: "none" }, _react["default"].createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M1.66663 10C1.66663 14.6024 5.39759 18.3333 9.99996 18.3333C14.6023 18.3333 18.3333 14.6024 18.3333 10C18.3333 5.39763 14.6023 1.66667 9.99996 1.66667C5.39759 1.66667 1.66663 5.39763 1.66663 10ZM13.6856 7.11667L9.01949 11.7828L6.71457 9.47785L5.83329 10.3591L8.31438 12.842C8.70481 13.2327 9.33806 13.2329 9.72871 12.8424L14.571 8.00211L13.6856 7.11667Z", fill: "#07C160", fillOpacity: "0.9" })); switch (intent) { case "normal": icon = _react["default"].createElement("svg", { className: "".concat(prefix, "-icon"), width: "20", height: "20", viewBox: "0 0 20 20", fill: "none" }, _react["default"].createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M9.99996 18.3333C5.39759 18.3333 1.66663 14.6024 1.66663 10C1.66663 5.39762 5.39759 1.66666 9.99996 1.66666C14.6023 1.66666 18.3333 5.39762 18.3333 10C18.3333 14.6024 14.6023 18.3333 9.99996 18.3333ZM10.625 8.33333V14.1667H9.37496V8.33333H10.625ZM9.99996 7.5C10.4602 7.5 10.8333 7.1269 10.8333 6.66666C10.8333 6.20643 10.4602 5.83333 9.99996 5.83333C9.53972 5.83333 9.16663 6.20643 9.16663 6.66666C9.16663 7.1269 9.53972 7.5 9.99996 7.5Z", fill: "#10AEFF" })); break; case "warning": icon = _react["default"].createElement("svg", { className: "".concat(prefix, "-icon"), width: "20", height: "20", viewBox: "0 0 20 20", fill: "none" }, _react["default"].createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M18.3005 16.0439C18.6855 16.7105 18.2044 17.5439 17.4346 17.5439L2.5653 17.5452C1.79551 17.5452 1.31431 16.712 1.69913 16.0453L9.13254 3.16683C9.51738 2.5001 10.4797 2.50002 10.8646 3.16667L18.3005 16.0439ZM9.37253 7.9541H10.6274L10.5298 12.6758H9.47019L9.37253 7.9541ZM9.28952 14.4043C9.28952 14.79 9.60202 15.0977 9.99753 15.0977C10.3979 15.0977 10.7104 14.79 10.7104 14.4043C10.7104 14.0185 10.3979 13.7158 9.99753 13.7158C9.60202 13.7158 9.28952 14.0185 9.28952 14.4043Z", fill: "#FA9D3B" })); break; case "danger": icon = _react["default"].createElement("svg", { className: "".concat(prefix, "-icon"), width: "20", height: "20", viewBox: "0 0 20 20", fill: "none" }, _react["default"].createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M9.99996 18.3333C5.39759 18.3333 1.66663 14.6024 1.66663 10C1.66663 5.39763 5.39759 1.66667 9.99996 1.66667C14.6023 1.66667 18.3333 5.39763 18.3333 10C18.3333 14.6024 14.6023 18.3333 9.99996 18.3333ZM9.36389 5.11312H10.6342L10.5431 11.4437H9.45504L9.36389 5.11312ZM9.24996 13.5173C9.24996 13.9331 9.58036 14.2521 9.99622 14.2521C10.4235 14.2521 10.7482 13.9331 10.7482 13.5173C10.7482 13.1014 10.4235 12.7824 9.99622 12.7824C9.58036 12.7824 9.24996 13.1014 9.24996 13.5173Z", fill: "#FA5151" })); break; default: break; } var timer; var clearCloseTimer = function clearCloseTimer() { if (timer) { clearTimeout(timer); timer = null; } }; var close = function close() { if (messageRef && messageRef.current) { messageRef.current.style.opacity = "0"; messageRef.current.style.visibility = "hidden"; messageRef.current.style.filter = "blur(4px)"; } clearCloseTimer(); if (onClose) { onClose(); } }; var setCloseTimer = function setCloseTimer() { if (duration) { timer = setTimeout(function () { close(); }, duration * 1000); } }; (0, _react.useEffect)(function () { setCloseTimer(); return clearCloseTimer; }, []); (0, _react.useImperativeHandle)(ref, function () { return { close: close, getDomNode: function getDomNode() { return messageRef.current; } }; }); var hasActions = action || closable; return _react["default"].createElement("div", _extends({ className: (0, _classnames["default"])(className, "".concat(prefix, "-base"), "".concat(prefix, "-").concat(intent), _defineProperty({}, "".concat(prefix, "-hasActions"), hasActions)), onMouseEnter: clearCloseTimer, onMouseLeave: setCloseTimer, ref: messageRef, "data-duration": duration }, otherProps), icon, _react["default"].createElement("div", { className: "".concat(prefix, "-content") }, content), hasActions && _react["default"].createElement("div", { className: "".concat(prefix, "-actions") }, action && _react["default"].createElement("div", { className: "".concat(prefix, "-action") }, _react["default"].createElement(_button["default"], { theme: "light", onClick: function onClick() { var onClick = action.onClick; if (onClick) { onClick(); } } }, action.text)), closable && _react["default"].createElement(_button["default"], { leftIcon: "cancel", theme: "light", onClick: close }))); }); Message.displayName = "Message"; Message.propTypes = { action: _propTypes["default"].any, className: _propTypes["default"].string, closable: _propTypes["default"].bool, content: _propTypes["default"].node, duration: _propTypes["default"].number, getContainer: _propTypes["default"].func, intent: _propTypes["default"].any, onClose: _propTypes["default"].func }; Message.defaultProps = { action: null, className: undefined, closable: false, content: null, duration: 2, getContainer: undefined, intent: "normal", onClose: null }; var newInstance = function newInstance(props) { var instances = Array.from(document.getElementsByClassName("".concat(prefix, "-wrapper"))); instances = instances.filter(function (o) { return o.dataset.close !== "true"; }); if (instances && instances.length > 2) { var firstInstance = instances[0]; var firstChild = firstInstance.children[0]; if (firstChild.dataset.duration !== "0") { firstInstance.dataset.close = "true"; firstChild.style.opacity = "0"; firstChild.style.visibility = "hidden"; firstChild.style.filter = "blur(4px)"; } } var instance; var onClose = props.onClose, getContainer = props.getContainer, otherProps = _objectWithoutProperties(props, _excluded2); var container = document.createElement("div"); container.className = "".concat(prefix, "-wrapper"); if (getContainer) { getContainer().appendChild(container); } else { document.body.appendChild(container); } var updateStyles = function updateStyles() { setTimeout(function () { var messages = document.getElementsByClassName("".concat(prefix, "-wrapper")); Array.prototype.forEach.call(messages, function (message, index) { message.style.opacity = "1"; message.style.transform = "\n translate3d(var(--message-offset-x),\n calc(".concat(56 * (messages.length - 1 - index), "px + var(--message-offset-y)), 0)"); }); }, 50); }; updateStyles(); var close = function close() { if (onClose) { onClose(); } setTimeout(function () { var unmountResult = ReactDOM.unmountComponentAtNode(container); if (unmountResult && container.parentNode) { container.parentNode.removeChild(container); updateStyles(); } }, 300); }; ReactDOM.render(_react["default"].createElement(Message, _extends({ ref: function ref(message) { instance = message; }, onClose: close }, otherProps)), container); return { destroy: function destroy() { if (instance) { instance.close(); } } }; }; INTENTS.forEach(function (intent) { Message[intent] = function (config) { var cnfg = { intent: intent }; if (typeof config === "string") { cnfg = { content: config, intent: intent }; } else { cnfg = config; } return newInstance(_objectSpread(_objectSpread({}, cnfg), {}, { intent: intent })); }; }); var _default = Message; exports["default"] = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwcmVmaXgiLCJJTlRFTlRTIiwiTWVzc2FnZSIsImZvcndhcmRSZWYiLCJyZWYiLCJhY3Rpb24iLCJjbGFzc05hbWUiLCJjbG9zYWJsZSIsImNvbnRlbnQiLCJkdXJhdGlvbiIsImdldENvbnRhaW5lciIsImludGVudCIsIm9uQ2xvc2UiLCJvdGhlclByb3BzIiwibWVzc2FnZVJlZiIsInVzZVJlZiIsImljb24iLCJ0aW1lciIsImNsZWFyQ2xvc2VUaW1lciIsImNsZWFyVGltZW91dCIsImNsb3NlIiwiY3VycmVudCIsInN0eWxlIiwib3BhY2l0eSIsInZpc2liaWxpdHkiLCJmaWx0ZXIiLCJzZXRDbG9zZVRpbWVyIiwic2V0VGltZW91dCIsInVzZUVmZmVjdCIsInVzZUltcGVyYXRpdmVIYW5kbGUiLCJnZXREb21Ob2RlIiwiaGFzQWN0aW9ucyIsImNsYXNzTmFtZXMiLCJvbkNsaWNrIiwidGV4dCIsImRpc3BsYXlOYW1lIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiYW55Iiwic3RyaW5nIiwiYm9vbCIsIm5vZGUiLCJudW1iZXIiLCJmdW5jIiwiZGVmYXVsdFByb3BzIiwidW5kZWZpbmVkIiwibmV3SW5zdGFuY2UiLCJwcm9wcyIsImluc3RhbmNlcyIsIkFycmF5IiwiZnJvbSIsImRvY3VtZW50IiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsIm8iLCJkYXRhc2V0IiwibGVuZ3RoIiwiZmlyc3RJbnN0YW5jZSIsImZpcnN0Q2hpbGQiLCJjaGlsZHJlbiIsImluc3RhbmNlIiwiY29udGFpbmVyIiwiY3JlYXRlRWxlbWVudCIsImFwcGVuZENoaWxkIiwiYm9keSIsInVwZGF0ZVN0eWxlcyIsIm1lc3NhZ2VzIiwicHJvdG90eXBlIiwiZm9yRWFjaCIsImNhbGwiLCJtZXNzYWdlIiwiaW5kZXgiLCJ0cmFuc2Zvcm0iLCJ1bm1vdW50UmVzdWx0IiwiUmVhY3RET00iLCJ1bm1vdW50Q29tcG9uZW50QXROb2RlIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwicmVuZGVyIiwiZGVzdHJveSIsImNvbmZpZyIsImNuZmciXSwic291cmNlcyI6WyIuLi8uLi9jb21wb25lbnRzL2NoYW5uZWxzLW1lc3NhZ2UvTWVzc2FnZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuaW1wb3J0IFJlYWN0LCB7XG4gIGZvcndhcmRSZWYsXG4gIHVzZUVmZmVjdCxcbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZSxcbiAgdXNlUmVmLFxufSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0ICogYXMgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gXCJjbGFzc25hbWVzXCJcbmltcG9ydCBCdXR0b24gZnJvbSBcIi4uL2J1dHRvblwiXG5pbXBvcnQgXCIuL3N0eWxlXCJcblxuY29uc3QgcHJlZml4ID0gXCJhZHVpLWNoYW5uZWxzLW1lc3NhZ2VcIlxuY29uc3QgSU5URU5UUyA9IFtcIm5vcm1hbFwiLCBcInByaW1hcnlcIiwgXCJzdWNjZXNzXCIsIFwid2FybmluZ1wiLCBcImRhbmdlclwiXVxuXG5leHBvcnQgaW50ZXJmYWNlIElNZXNzYWdlUHJvcHMge1xuICBba2V5OiBzdHJpbmddOiBhbnlcbiAgLyoqXG4gICAqIOihjOWKqOaMiemSrueahOmFjee9ru+8jOWmgu+8mmFjdGlvbjogeyB0ZXh0OiBcIuino+mUgVwiLCBvbkNsaWNrOiAoKSA9PiB7IG1lc3NhZ2UuZGVzdHJveSgpIH0gfVxuICAgKi9cbiAgYWN0aW9uPzogeyB0ZXh0OiBzdHJpbmc7IG9uQ2xpY2s6ICgpID0+IHZvaWQgfSB8IG51bGxcbiAgLyoqXG4gICAqIOmZhOWKoOexu+WQjVxuICAgKi9cbiAgY2xhc3NOYW1lPzogc3RyaW5nXG4gIC8qKlxuICAgKiDmmK/lkKbmmL7npLrlhbPpl60gSWNvbu+8jOWmguaenOmcgOimgeWPquaUr+aMgeaJi+WKqOWFs+mXre+8jOi/mOmcgOimgeS8oOWFpSBkdXJhdGlvbjogMFxuICAgKi9cbiAgY2xvc2FibGU/OiBib29sZWFuXG4gIC8qKlxuICAgKiDlhoXlrrlcbiAgICovXG4gIGNvbnRlbnQ/OiBSZWFjdC5SZWFjdE5vZGVcbiAgLyoqXG4gICAqIOmXtOmalOWkmuS5heiHquWKqOWFs+mXre+8jOWNleS9jeS4uiBz77yM5aaC5p6c5Lyg5YWlIDDvvIzliJnooajnpLrkuI3kvJroh6rliqjmtojlpLFcbiAgICovXG4gIGR1cmF0aW9uPzogbnVtYmVyXG4gIC8qKlxuICAgKiBNZXNzYWdlIOaPkuWFpeWIsOWTquS4quWFg+e0oO+8jOm7mOiupCAoKSA9PiBkb2N1bWVudC5ib2R5XG4gICAqL1xuICBnZXRDb250YWluZXI/OiAoKSA9PiBIVE1MRWxlbWVudFxuICAvKipcbiAgICog6K6+572u57G75Z6LXG4gICAqL1xuICBpbnRlbnQ6IFwibm9ybWFsXCIgfCBcInByaW1hcnlcIiB8IFwic3VjY2Vzc1wiIHwgXCJ3YXJuaW5nXCIgfCBcImRhbmdlclwiXG4gIC8qKlxuICAgKiDlhbPpl63ml7bnmoQgaGFuZGxlclxuICAgKi9cbiAgb25DbG9zZT86ICgoKSA9PiB2b2lkKSB8IG51bGxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTWVzc2FnZVxuICBleHRlbmRzIFJlYWN0LkZvcndhcmRSZWZFeG90aWNDb21wb25lbnQ8XG4gICAgSU1lc3NhZ2VQcm9wcyAmIFJlYWN0LlJlZkF0dHJpYnV0ZXM8SFRNTERpdkVsZW1lbnQ+XG4gID4ge1xuICBub3JtYWw6IGFueVxuICBwcmltYXJ5OiBhbnlcbiAgc3VjY2VzczogYW55XG4gIHdhcm5pbmc6IGFueVxuICBkYW5nZXI6IGFueVxufVxuXG4vKipcbiAqIOWFqOWxgOaPkOmGkueUqOS6juWFqOWxgOaAp+WcsOWxleekuumcgOimgeWNs+aXtuaAp+WFs+azqOeahOS/oeaBr+OAglxuICovXG4vLyBAdHMtaWdub3JlXG5jb25zdCBNZXNzYWdlOiBJTWVzc2FnZSA9IGZvcndhcmRSZWYoXG4gIChcbiAgICB7XG4gICAgICBhY3Rpb24sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjbG9zYWJsZSxcbiAgICAgIGNvbnRlbnQsXG4gICAgICBkdXJhdGlvbixcbiAgICAgIGdldENvbnRhaW5lcixcbiAgICAgIGludGVudCxcbiAgICAgIG9uQ2xvc2UsXG4gICAgICAuLi5vdGhlclByb3BzXG4gICAgfTogSU1lc3NhZ2VQcm9wcyxcbiAgICByZWY6IGFueVxuICApID0+IHtcbiAgICBjb25zdCBtZXNzYWdlUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuXG4gICAgbGV0IGljb24gPSAoXG4gICAgICA8c3ZnXG4gICAgICAgIGNsYXNzTmFtZT17YCR7cHJlZml4fS1pY29uYH1cbiAgICAgICAgd2lkdGg9XCIyMFwiXG4gICAgICAgIGhlaWdodD1cIjIwXCJcbiAgICAgICAgdmlld0JveD1cIjAgMCAyMCAyMFwiXG4gICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgID5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICBmaWxsUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgIGNsaXBSdWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgZD1cIk0xLjY2NjYzIDEwQzEuNjY2NjMgMTQuNjAyNCA1LjM5NzU5IDE4LjMzMzMgOS45OTk5NiAxOC4zMzMzQzE0LjYwMjMgMTguMzMzMyAxOC4zMzMzIDE0LjYwMjQgMTguMzMzMyAxMEMxOC4zMzMzIDUuMzk3NjMgMTQuNjAyMyAxLjY2NjY3IDkuOTk5OTYgMS42NjY2N0M1LjM5NzU5IDEuNjY2NjcgMS42NjY2MyA1LjM5NzYzIDEuNjY2NjMgMTBaTTEzLjY4NTYgNy4xMTY2N0w5LjAxOTQ5IDExLjc4MjhMNi43MTQ1NyA5LjQ3Nzg1TDUuODMzMjkgMTAuMzU5MUw4LjMxNDM4IDEyLjg0MkM4LjcwNDgxIDEzLjIzMjcgOS4zMzgwNiAxMy4yMzI5IDkuNzI4NzEgMTIuODQyNEwxNC41NzEgOC4wMDIxMUwxMy42ODU2IDcuMTE2NjdaXCJcbiAgICAgICAgICBmaWxsPVwiIzA3QzE2MFwiXG4gICAgICAgICAgZmlsbE9wYWNpdHk9XCIwLjlcIlxuICAgICAgICAvPlxuICAgICAgPC9zdmc+XG4gICAgKVxuXG4gICAgc3dpdGNoIChpbnRlbnQpIHtcbiAgICAgIGNhc2UgXCJub3JtYWxcIjpcbiAgICAgICAgaWNvbiA9IChcbiAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICBjbGFzc05hbWU9e2Ake3ByZWZpeH0taWNvbmB9XG4gICAgICAgICAgICB3aWR0aD1cIjIwXCJcbiAgICAgICAgICAgIGhlaWdodD1cIjIwXCJcbiAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGZpbGxSdWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICAgIGNsaXBSdWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICAgIGQ9XCJNOS45OTk5NiAxOC4zMzMzQzUuMzk3NTkgMTguMzMzMyAxLjY2NjYzIDE0LjYwMjQgMS42NjY2MyAxMEMxLjY2NjYzIDUuMzk3NjIgNS4zOTc1OSAxLjY2NjY2IDkuOTk5OTYgMS42NjY2NkMxNC42MDIzIDEuNjY2NjYgMTguMzMzMyA1LjM5NzYyIDE4LjMzMzMgMTBDMTguMzMzMyAxNC42MDI0IDE0LjYwMjMgMTguMzMzMyA5Ljk5OTk2IDE4LjMzMzNaTTEwLjYyNSA4LjMzMzMzVjE0LjE2NjdIOS4zNzQ5NlY4LjMzMzMzSDEwLjYyNVpNOS45OTk5NiA3LjVDMTAuNDYwMiA3LjUgMTAuODMzMyA3LjEyNjkgMTAuODMzMyA2LjY2NjY2QzEwLjgzMzMgNi4yMDY0MyAxMC40NjAyIDUuODMzMzMgOS45OTk5NiA1LjgzMzMzQzkuNTM5NzIgNS44MzMzMyA5LjE2NjYzIDYuMjA2NDMgOS4xNjY2MyA2LjY2NjY2QzkuMTY2NjMgNy4xMjY5IDkuNTM5NzIgNy41IDkuOTk5OTYgNy41WlwiXG4gICAgICAgICAgICAgIGZpbGw9XCIjMTBBRUZGXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIClcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJ3YXJuaW5nXCI6XG4gICAgICAgIGljb24gPSAoXG4gICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtwcmVmaXh9LWljb25gfVxuICAgICAgICAgICAgd2lkdGg9XCIyMFwiXG4gICAgICAgICAgICBoZWlnaHQ9XCIyMFwiXG4gICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICBmaWxsUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgICBjbGlwUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgICBkPVwiTTE4LjMwMDUgMTYuMDQzOUMxOC42ODU1IDE2LjcxMDUgMTguMjA0NCAxNy41NDM5IDE3LjQzNDYgMTcuNTQzOUwyLjU2NTMgMTcuNTQ1MkMxLjc5NTUxIDE3LjU0NTIgMS4zMTQzMSAxNi43MTIgMS42OTkxMyAxNi4wNDUzTDkuMTMyNTQgMy4xNjY4M0M5LjUxNzM4IDIuNTAwMSAxMC40Nzk3IDIuNTAwMDIgMTAuODY0NiAzLjE2NjY3TDE4LjMwMDUgMTYuMDQzOVpNOS4zNzI1MyA3Ljk1NDFIMTAuNjI3NEwxMC41Mjk4IDEyLjY3NThIOS40NzAxOUw5LjM3MjUzIDcuOTU0MVpNOS4yODk1MiAxNC40MDQzQzkuMjg5NTIgMTQuNzkgOS42MDIwMiAxNS4wOTc3IDkuOTk3NTMgMTUuMDk3N0MxMC4zOTc5IDE1LjA5NzcgMTAuNzEwNCAxNC43OSAxMC43MTA0IDE0LjQwNDNDMTAuNzEwNCAxNC4wMTg1IDEwLjM5NzkgMTMuNzE1OCA5Ljk5NzUzIDEzLjcxNThDOS42MDIwMiAxMy43MTU4IDkuMjg5NTIgMTQuMDE4NSA5LjI4OTUyIDE0LjQwNDNaXCJcbiAgICAgICAgICAgICAgZmlsbD1cIiNGQTlEM0JcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcImRhbmdlclwiOlxuICAgICAgICBpY29uID0gKFxuICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7cHJlZml4fS1pY29uYH1cbiAgICAgICAgICAgIHdpZHRoPVwiMjBcIlxuICAgICAgICAgICAgaGVpZ2h0PVwiMjBcIlxuICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMCAyMFwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgZmlsbFJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgY2xpcFJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgZD1cIk05Ljk5OTk2IDE4LjMzMzNDNS4zOTc1OSAxOC4zMzMzIDEuNjY2NjMgMTQuNjAyNCAxLjY2NjYzIDEwQzEuNjY2NjMgNS4zOTc2MyA1LjM5NzU5IDEuNjY2NjcgOS45OTk5NiAxLjY2NjY3QzE0LjYwMjMgMS42NjY2NyAxOC4zMzMzIDUuMzk3NjMgMTguMzMzMyAxMEMxOC4zMzMzIDE0LjYwMjQgMTQuNjAyMyAxOC4zMzMzIDkuOTk5OTYgMTguMzMzM1pNOS4zNjM4OSA1LjExMzEySDEwLjYzNDJMMTAuNTQzMSAxMS40NDM3SDkuNDU1MDRMOS4zNjM4OSA1LjExMzEyWk05LjI0OTk2IDEzLjUxNzNDOS4yNDk5NiAxMy45MzMxIDkuNTgwMzYgMTQuMjUyMSA5Ljk5NjIyIDE0LjI1MjFDMTAuNDIzNSAxNC4yNTIxIDEwLjc0ODIgMTMuOTMzMSAxMC43NDgyIDEzLjUxNzNDMTAuNzQ4MiAxMy4xMDE0IDEwLjQyMzUgMTIuNzgyNCA5Ljk5NjIyIDEyLjc4MjRDOS41ODAzNiAxMi43ODI0IDkuMjQ5OTYgMTMuMTAxNCA5LjI0OTk2IDEzLjUxNzNaXCJcbiAgICAgICAgICAgICAgZmlsbD1cIiNGQTUxNTFcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgKVxuICAgICAgICBicmVha1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBsZXQgdGltZXI6IG51bGwgfCBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PlxuXG4gICAgY29uc3QgY2xlYXJDbG9zZVRpbWVyID0gKCkgPT4ge1xuICAgICAgaWYgKHRpbWVyKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcilcbiAgICAgICAgdGltZXIgPSBudWxsXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xvc2UgPSAoKSA9PiB7XG4gICAgICBpZiAobWVzc2FnZVJlZiAmJiBtZXNzYWdlUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgbWVzc2FnZVJlZi5jdXJyZW50LnN0eWxlLm9wYWNpdHkgPSBcIjBcIlxuICAgICAgICBtZXNzYWdlUmVmLmN1cnJlbnQuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCJcbiAgICAgICAgbWVzc2FnZVJlZi5jdXJyZW50LnN0eWxlLmZpbHRlciA9IFwiYmx1cig0cHgpXCJcbiAgICAgIH1cbiAgICAgIGNsZWFyQ2xvc2VUaW1lcigpXG4gICAgICBpZiAob25DbG9zZSkge1xuICAgICAgICBvbkNsb3NlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZXRDbG9zZVRpbWVyID0gKCkgPT4ge1xuICAgICAgaWYgKGR1cmF0aW9uKSB7XG4gICAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY2xvc2UoKVxuICAgICAgICB9LCBkdXJhdGlvbiAqIDEwMDApXG4gICAgICB9XG4gICAgfVxuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIHNldENsb3NlVGltZXIoKVxuICAgICAgcmV0dXJuIGNsZWFyQ2xvc2VUaW1lclxuICAgIH0sIFtdKVxuXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG4gICAgICBjbG9zZSxcbiAgICAgIGdldERvbU5vZGU6ICgpID0+IG1lc3NhZ2VSZWYuY3VycmVudCxcbiAgICB9KSlcblxuICAgIGNvbnN0IGhhc0FjdGlvbnMgPSBhY3Rpb24gfHwgY2xvc2FibGVcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhcbiAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgICAgYCR7cHJlZml4fS1iYXNlYCxcbiAgICAgICAgICBgJHtwcmVmaXh9LSR7aW50ZW50fWAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgW2Ake3ByZWZpeH0taGFzQWN0aW9uc2BdOiBoYXNBY3Rpb25zLFxuICAgICAgICAgIH1cbiAgICAgICAgKX1cbiAgICAgICAgb25Nb3VzZUVudGVyPXtjbGVhckNsb3NlVGltZXJ9XG4gICAgICAgIG9uTW91c2VMZWF2ZT17c2V0Q2xvc2VUaW1lcn1cbiAgICAgICAgcmVmPXttZXNzYWdlUmVmfVxuICAgICAgICBkYXRhLWR1cmF0aW9uPXtkdXJhdGlvbn1cbiAgICAgICAgey4uLm90aGVyUHJvcHN9XG4gICAgICA+XG4gICAgICAgIHtpY29ufVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cHJlZml4fS1jb250ZW50YH0+e2NvbnRlbnR9PC9kaXY+XG4gICAgICAgIHtoYXNBY3Rpb25zICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cHJlZml4fS1hY3Rpb25zYH0+XG4gICAgICAgICAgICB7YWN0aW9uICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3ByZWZpeH0tYWN0aW9uYH0+XG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgdGhlbWU9XCJsaWdodFwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgb25DbGljayB9ID0gYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkNsaWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaygpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2FjdGlvbi50ZXh0fVxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7Y2xvc2FibGUgJiYgKFxuICAgICAgICAgICAgICA8QnV0dG9uIGxlZnRJY29uPVwiY2FuY2VsXCIgdGhlbWU9XCJsaWdodFwiIG9uQ2xpY2s9e2Nsb3NlfSAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxuKVxuXG5NZXNzYWdlLmRpc3BsYXlOYW1lID0gXCJNZXNzYWdlXCJcblxuTWVzc2FnZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiDooYzliqjmjInpkq7nmoTphY3nva7vvIzlpoLvvJphY3Rpb246IHsgdGV4dDogXCLop6PplIFcIiwgb25DbGljazogKCkgPT4geyBtZXNzYWdlLmRlc3Ryb3koKSB9IH1cbiAgICovXG4gIGFjdGlvbjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIOmZhOWKoOexu+WQjVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICog5piv5ZCm5pi+56S65YWz6ZetIEljb27vvIzlpoLmnpzpnIDopoHlj6rmlK/mjIHmiYvliqjlhbPpl63vvIzov5jpnIDopoHkvKDlhaUgZHVyYXRpb246IDBcbiAgICovXG4gIGNsb3NhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIOWGheWuuVxuICAgKi9cbiAgY29udGVudDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiDpl7TpmpTlpJrkuYXoh6rliqjlhbPpl63vvIzljZXkvY3kuLogc++8jOWmguaenOS8oOWFpSAw77yM5YiZ6KGo56S65LiN5Lya6Ieq5Yqo5raI5aSxXG4gICAqL1xuICBkdXJhdGlvbjogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIE1lc3NhZ2Ug5o+S5YWl5Yiw5ZOq5Liq5YWD57Sg77yM6buY6K6kICgpID0+IGRvY3VtZW50LmJvZHlcbiAgICovXG4gIGdldENvbnRhaW5lcjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiDorr7nva7nsbvlnotcbiAgICovXG4gIGludGVudDogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIOWFs+mXreaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbn1cblxuTWVzc2FnZS5kZWZhdWx0UHJvcHMgPSB7XG4gIGFjdGlvbjogbnVsbCxcbiAgY2xhc3NOYW1lOiB1bmRlZmluZWQsXG4gIGNsb3NhYmxlOiBmYWxzZSxcbiAgY29udGVudDogbnVsbCxcbiAgZHVyYXRpb246IDIsXG4gIGdldENvbnRhaW5lcjogdW5kZWZpbmVkLFxuICBpbnRlbnQ6IFwibm9ybWFsXCIsXG4gIG9uQ2xvc2U6IG51bGwsXG59XG5cbmNvbnN0IG5ld0luc3RhbmNlID0gKHByb3BzOiBJTWVzc2FnZVByb3BzKSA9PiB7XG4gIGxldCBpbnN0YW5jZXMgPSBBcnJheS5mcm9tKFxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYCR7cHJlZml4fS13cmFwcGVyYClcbiAgKVxuICBpbnN0YW5jZXMgPSBpbnN0YW5jZXMuZmlsdGVyKFxuICAgIChvOiBIVE1MRGl2RWxlbWVudCkgPT4gby5kYXRhc2V0LmNsb3NlICE9PSBcInRydWVcIlxuICApXG4gIGlmIChpbnN0YW5jZXMgJiYgaW5zdGFuY2VzLmxlbmd0aCA+IDIpIHtcbiAgICBjb25zdCBmaXJzdEluc3RhbmNlID0gaW5zdGFuY2VzWzBdIGFzIEhUTUxFbGVtZW50XG4gICAgY29uc3QgZmlyc3RDaGlsZCA9IGZpcnN0SW5zdGFuY2UuY2hpbGRyZW5bMF0gYXMgSFRNTEVsZW1lbnRcbiAgICBpZiAoZmlyc3RDaGlsZC5kYXRhc2V0LmR1cmF0aW9uICE9PSBcIjBcIikge1xuICAgICAgZmlyc3RJbnN0YW5jZS5kYXRhc2V0LmNsb3NlID0gXCJ0cnVlXCJcbiAgICAgIGZpcnN0Q2hpbGQuc3R5bGUub3BhY2l0eSA9IFwiMFwiXG4gICAgICBmaXJzdENoaWxkLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiXG4gICAgICBmaXJzdENoaWxkLnN0eWxlLmZpbHRlciA9IFwiYmx1cig0cHgpXCJcbiAgICB9XG4gIH1cblxuICBsZXQgaW5zdGFuY2U6IGFueVxuXG4gIGNvbnN0IHsgb25DbG9zZSwgZ2V0Q29udGFpbmVyLCAuLi5vdGhlclByb3BzIH0gPSBwcm9wc1xuICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpXG4gIGNvbnRhaW5lci5jbGFzc05hbWUgPSBgJHtwcmVmaXh9LXdyYXBwZXJgXG4gIGlmIChnZXRDb250YWluZXIpIHtcbiAgICBnZXRDb250YWluZXIoKS5hcHBlbmRDaGlsZChjb250YWluZXIpXG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb250YWluZXIpXG4gIH1cblxuICBjb25zdCB1cGRhdGVTdHlsZXMgPSAoKSA9PiB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYCR7cHJlZml4fS13cmFwcGVyYClcbiAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoXG4gICAgICAgIG1lc3NhZ2VzLFxuICAgICAgICAobWVzc2FnZTogSFRNTERpdkVsZW1lbnQsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICBtZXNzYWdlLnN0eWxlLm9wYWNpdHkgPSBcIjFcIlxuICAgICAgICAgIG1lc3NhZ2Uuc3R5bGUudHJhbnNmb3JtID0gYFxuICAgICAgICAgIHRyYW5zbGF0ZTNkKHZhcigtLW1lc3NhZ2Utb2Zmc2V0LXgpLFxuICAgICAgICAgIGNhbGMoJHtcbiAgICAgICAgICAgIDU2ICogKG1lc3NhZ2VzLmxlbmd0aCAtIDEgLSBpbmRleClcbiAgICAgICAgICB9cHggKyB2YXIoLS1tZXNzYWdlLW9mZnNldC15KSksIDApYFxuICAgICAgICB9XG4gICAgICApXG4gICAgfSwgNTApXG4gIH1cblxuICB1cGRhdGVTdHlsZXMoKVxuXG4gIGNvbnN0IGNsb3NlID0gKCkgPT4ge1xuICAgIGlmIChvbkNsb3NlKSB7XG4gICAgICBvbkNsb3NlKClcbiAgICB9XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCB1bm1vdW50UmVzdWx0ID0gUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZShjb250YWluZXIpXG4gICAgICBpZiAodW5tb3VudFJlc3VsdCAmJiBjb250YWluZXIucGFyZW50Tm9kZSkge1xuICAgICAgICBjb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjb250YWluZXIpXG4gICAgICAgIHVwZGF0ZVN0eWxlcygpXG4gICAgICB9XG4gICAgfSwgMzAwKVxuICB9XG5cbiAgUmVhY3RET00ucmVuZGVyKFxuICAgIDxNZXNzYWdlXG4gICAgICByZWY9eyhtZXNzYWdlKSA9PiB7XG4gICAgICAgIGluc3RhbmNlID0gbWVzc2FnZVxuICAgICAgfX1cbiAgICAgIG9uQ2xvc2U9e2Nsb3NlfVxuICAgICAgey4uLm90aGVyUHJvcHN9XG4gICAgLz4sXG4gICAgY29udGFpbmVyXG4gIClcblxuICByZXR1cm4ge1xuICAgIGRlc3Ryb3k6ICgpID0+IHtcbiAgICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgICBpbnN0YW5jZS5jbG9zZSgpXG4gICAgICB9XG4gICAgfSxcbiAgfVxufVxuXG5JTlRFTlRTLmZvckVhY2goXG4gIChpbnRlbnQ6IFwibm9ybWFsXCIgfCBcInByaW1hcnlcIiB8IFwic3VjY2Vzc1wiIHwgXCJ3YXJuaW5nXCIgfCBcImRhbmdlclwiKSA9PiB7XG4gICAgTWVzc2FnZVtpbnRlbnRdID0gKGNvbmZpZzogSU1lc3NhZ2VQcm9wcyB8IHN0cmluZykgPT4ge1xuICAgICAgbGV0IGNuZmcgPSB7IGludGVudCB9IGFzIElNZXNzYWdlUHJvcHNcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNuZmcgPSB7IGNvbnRlbnQ6IGNvbmZpZywgaW50ZW50IH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNuZmcgPSBjb25maWdcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXdJbnN0YW5jZSh7XG4gICAgICAgIC4uLmNuZmcsXG4gICAgICAgIGludGVudCxcbiAgICAgIH0pXG4gICAgfVxuICB9XG4pXG5cbmV4cG9ydCBkZWZhdWx0IE1lc3NhZ2VcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQ0E7O0FBTUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsSUFBTUEsTUFBTSxHQUFHLHVCQUFmO0FBQ0EsSUFBTUMsT0FBTyxHQUFHLENBQUMsUUFBRCxFQUFXLFNBQVgsRUFBc0IsU0FBdEIsRUFBaUMsU0FBakMsRUFBNEMsUUFBNUMsQ0FBaEI7QUFxREEsSUFBTUMsT0FBaUIsR0FBRyxJQUFBQyxpQkFBQSxFQUN4QixnQkFZRUMsR0FaRixFQWFLO0VBQUEsSUFYREMsTUFXQyxRQVhEQSxNQVdDO0VBQUEsSUFWREMsU0FVQyxRQVZEQSxTQVVDO0VBQUEsSUFUREMsUUFTQyxRQVREQSxRQVNDO0VBQUEsSUFSREMsT0FRQyxRQVJEQSxPQVFDO0VBQUEsSUFQREMsUUFPQyxRQVBEQSxRQU9DO0VBQUEsSUFOREMsWUFNQyxRQU5EQSxZQU1DO0VBQUEsSUFMREMsTUFLQyxRQUxEQSxNQUtDO0VBQUEsSUFK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