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>
265 lines (264 loc) • 44.5 kB
JavaScript
;
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
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(e) { return e && e.__esModule ? e : { "default": e }; }
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
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) { _defineProperty(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; }
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; }
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 = exports["default"] = Message;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJSZWFjdERPTSIsIl9wcm9wVHlwZXMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2NsYXNzbmFtZXMiLCJfYnV0dG9uIiwiX2V4Y2x1ZGVkIiwiX2V4Y2x1ZGVkMiIsImUiLCJfX2VzTW9kdWxlIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiV2Vha01hcCIsInIiLCJ0IiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX2V4dGVuZHMiLCJhc3NpZ24iLCJiaW5kIiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiX3RvUHJpbWl0aXZlIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsInMiLCJpbmNsdWRlcyIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwicHJlZml4IiwiSU5URU5UUyIsIk1lc3NhZ2UiLCJmb3J3YXJkUmVmIiwiX3JlZiIsInJlZiIsImFjdGlvbiIsImNsYXNzTmFtZSIsImNsb3NhYmxlIiwiY29udGVudCIsImR1cmF0aW9uIiwiZ2V0Q29udGFpbmVyIiwiaW50ZW50Iiwib25DbG9zZSIsIm90aGVyUHJvcHMiLCJtZXNzYWdlUmVmIiwidXNlUmVmIiwiaWNvbiIsImNyZWF0ZUVsZW1lbnQiLCJjb25jYXQiLCJ3aWR0aCIsImhlaWdodCIsInZpZXdCb3giLCJmaWxsIiwiZmlsbFJ1bGUiLCJjbGlwUnVsZSIsImQiLCJmaWxsT3BhY2l0eSIsInRpbWVyIiwiY2xlYXJDbG9zZVRpbWVyIiwiY2xlYXJUaW1lb3V0IiwiY2xvc2UiLCJjdXJyZW50Iiwic3R5bGUiLCJvcGFjaXR5IiwidmlzaWJpbGl0eSIsInNldENsb3NlVGltZXIiLCJzZXRUaW1lb3V0IiwidXNlRWZmZWN0IiwidXNlSW1wZXJhdGl2ZUhhbmRsZSIsImdldERvbU5vZGUiLCJoYXNBY3Rpb25zIiwiY2xhc3NOYW1lcyIsIm9uTW91c2VFbnRlciIsIm9uTW91c2VMZWF2ZSIsInRoZW1lIiwib25DbGljayIsInRleHQiLCJsZWZ0SWNvbiIsImRpc3BsYXlOYW1lIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiYW55Iiwic3RyaW5nIiwiYm9vbCIsIm5vZGUiLCJudW1iZXIiLCJmdW5jIiwiZGVmYXVsdFByb3BzIiwidW5kZWZpbmVkIiwibmV3SW5zdGFuY2UiLCJwcm9wcyIsImluc3RhbmNlcyIsIkFycmF5IiwiZnJvbSIsImRvY3VtZW50IiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsImRhdGFzZXQiLCJmaXJzdEluc3RhbmNlIiwiZmlyc3RDaGlsZCIsImNoaWxkcmVuIiwiaW5zdGFuY2UiLCJjb250YWluZXIiLCJhcHBlbmRDaGlsZCIsImJvZHkiLCJ1cGRhdGVTdHlsZXMiLCJtZXNzYWdlcyIsInByb3RvdHlwZSIsIm1lc3NhZ2UiLCJpbmRleCIsInRyYW5zZm9ybSIsInVubW91bnRSZXN1bHQiLCJ1bm1vdW50Q29tcG9uZW50QXROb2RlIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwicmVuZGVyIiwiZGVzdHJveSIsImNvbmZpZyIsImNuZmciLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9jb21wb25lbnRzL2NoYW5uZWxzLW1lc3NhZ2UvTWVzc2FnZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuaW1wb3J0IFJlYWN0LCB7XG4gIGZvcndhcmRSZWYsXG4gIHVzZUVmZmVjdCxcbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZSxcbiAgdXNlUmVmLFxufSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0ICogYXMgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gXCJjbGFzc25hbWVzXCJcbmltcG9ydCBCdXR0b24gZnJvbSBcIi4uL2J1dHRvblwiXG5pbXBvcnQgXCIuL3N0eWxlXCJcblxuY29uc3QgcHJlZml4ID0gXCJhZHVpLWNoYW5uZWxzLW1lc3NhZ2VcIlxuY29uc3QgSU5URU5UUyA9IFtcIm5vcm1hbFwiLCBcInByaW1hcnlcIiwgXCJzdWNjZXNzXCIsIFwid2FybmluZ1wiLCBcImRhbmdlclwiXVxuXG5leHBvcnQgaW50ZXJmYWNlIElNZXNzYWdlUHJvcHMge1xuICBba2V5OiBzdHJpbmddOiBhbnlcbiAgLyoqXG4gICAqIOihjOWKqOaMiemSrueahOmFjee9ru+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+IHtcbiAgICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgICBpbnN0YW5jZS5jbG9zZSgpXG4gICAgICB9XG4gICAgfSxcbiAgfVxufVxuXG5JTlRFTlRTLmZvckVhY2goXG4gIChpbnRlbnQ6IFwibm9ybWFsXCIgfCBcInByaW1hcnlcIiB8IFwic3VjY2Vzc1wiIHwgXCJ3YXJuaW5nXCIgfCBcImRhbmdlclwiKSA9PiB7XG4gICAgTWVzc2FnZVtpbnRlbnRdID0gKGNvbmZpZzogSU1lc3NhZ2VQcm9wcyB8IHN0cmluZykgPT4ge1xuICAgICAgbGV0IGNuZmcgPSB7IGludGVudCB9IGFzIElNZXNzYWdlUHJvcHNcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNuZmcgPSB7IGNvbnRlbnQ6IGNvbmZpZywgaW50ZW50IH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNuZmcgPSBjb25maWdcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXdJbnN0YW5jZSh7XG4gICAgICAgIC4uLmNuZmcsXG4gICAgICAgIGludGVudCxcbiAgICAgIH0pXG4gICAgfVxuICB9XG4pXG5cbmV4cG9ydCBkZWZhdWx0IE1lc3NhZ2VcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQU1BLElBQUFDLFFBQUEsR0FBQUYsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLFVBQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFJLFdBQUEsR0FBQUQsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFLLE9BQUEsR0FBQUYsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBQSxPQUFBO0FBQWdCLElBQUFNLFNBQUE7RUFBQUMsVUFBQTtBQUFBLFNBQUFKLHVCQUFBSyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsZ0JBQUFBLENBQUE7QUFBQSxTQUFBRSx5QkFBQUYsQ0FBQSw2QkFBQUcsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRCx3QkFBQSxZQUFBQSx5QkFBQUYsQ0FBQSxXQUFBQSxDQUFBLEdBQUFL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