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>
289 lines (253 loc) • 35.8 kB
JavaScript
var _excluded = ["action", "className", "closable", "content", "duration", "getContainer", "intent", "onClose"],
_excluded2 = ["onClose", "getContainer"];
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; }
import React, { forwardRef, useEffect, useImperativeHandle, useRef } from "react";
import * as ReactDOM from "react-dom";
import PropTypes from "prop-types";
import classNames from "classnames";
import Button from "../button";
import "./style";
var prefix = "adui-channels-message";
var INTENTS = ["normal", "primary", "success", "warning", "danger"];
var Message = 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 = useRef(null);
var icon = React.createElement("svg", {
className: "".concat(prefix, "-icon"),
width: "20",
height: "20",
viewBox: "0 0 20 20",
fill: "none"
}, React.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.createElement("svg", {
className: "".concat(prefix, "-icon"),
width: "20",
height: "20",
viewBox: "0 0 20 20",
fill: "none"
}, React.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.createElement("svg", {
className: "".concat(prefix, "-icon"),
width: "20",
height: "20",
viewBox: "0 0 20 20",
fill: "none"
}, React.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.createElement("svg", {
className: "".concat(prefix, "-icon"),
width: "20",
height: "20",
viewBox: "0 0 20 20",
fill: "none"
}, React.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);
}
};
useEffect(function () {
setCloseTimer();
return clearCloseTimer;
}, []);
useImperativeHandle(ref, function () {
return {
close: close,
getDomNode: function getDomNode() {
return messageRef.current;
}
};
});
var hasActions = action || closable;
return React.createElement("div", _extends({
className: classNames(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.createElement("div", {
className: "".concat(prefix, "-content")
}, content), hasActions && React.createElement("div", {
className: "".concat(prefix, "-actions")
}, action && React.createElement("div", {
className: "".concat(prefix, "-action")
}, React.createElement(Button, {
theme: "light",
onClick: function onClick() {
var onClick = action.onClick;
if (onClick) {
onClick();
}
}
}, action.text)), closable && React.createElement(Button, {
leftIcon: "cancel",
theme: "light",
onClick: close
})));
});
Message.displayName = "Message";
Message.propTypes = {
action: PropTypes.any,
className: PropTypes.string,
closable: PropTypes.bool,
content: PropTypes.node,
duration: PropTypes.number,
getContainer: PropTypes.func,
intent: PropTypes.any,
onClose: PropTypes.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.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
}));
};
});
export default Message;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsImZvcndhcmRSZWYiLCJ1c2VFZmZlY3QiLCJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwidXNlUmVmIiwiUmVhY3RET00iLCJQcm9wVHlwZXMiLCJjbGFzc05hbWVzIiwiQnV0dG9uIiwicHJlZml4IiwiSU5URU5UUyIsIk1lc3NhZ2UiLCJyZWYiLCJhY3Rpb24iLCJjbGFzc05hbWUiLCJjbG9zYWJsZSIsImNvbnRlbnQiLCJkdXJhdGlvbiIsImdldENvbnRhaW5lciIsImludGVudCIsIm9uQ2xvc2UiLCJvdGhlclByb3BzIiwibWVzc2FnZVJlZiIsImljb24iLCJ0aW1lciIsImNsZWFyQ2xvc2VUaW1lciIsImNsZWFyVGltZW91dCIsImNsb3NlIiwiY3VycmVudCIsInN0eWxlIiwib3BhY2l0eSIsInZpc2liaWxpdHkiLCJmaWx0ZXIiLCJzZXRDbG9zZVRpbWVyIiwic2V0VGltZW91dCIsImdldERvbU5vZGUiLCJoYXNBY3Rpb25zIiwib25DbGljayIsInRleHQiLCJkaXNwbGF5TmFtZSIsInByb3BUeXBlcyIsImFueSIsInN0cmluZyIsImJvb2wiLCJub2RlIiwibnVtYmVyIiwiZnVuYyIsImRlZmF1bHRQcm9wcyIsInVuZGVmaW5lZCIsIm5ld0luc3RhbmNlIiwicHJvcHMiLCJpbnN0YW5jZXMiLCJBcnJheSIsImZyb20iLCJkb2N1bWVudCIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJvIiwiZGF0YXNldCIsImxlbmd0aCIsImZpcnN0SW5zdGFuY2UiLCJmaXJzdENoaWxkIiwiY2hpbGRyZW4iLCJpbnN0YW5jZSIsImNvbnRhaW5lciIsImNyZWF0ZUVsZW1lbnQiLCJhcHBlbmRDaGlsZCIsImJvZHkiLCJ1cGRhdGVTdHlsZXMiLCJtZXNzYWdlcyIsInByb3RvdHlwZSIsImZvckVhY2giLCJjYWxsIiwibWVzc2FnZSIsImluZGV4IiwidHJhbnNmb3JtIiwidW5tb3VudFJlc3VsdCIsInVubW91bnRDb21wb25lbnRBdE5vZGUiLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJyZW5kZXIiLCJkZXN0cm95IiwiY29uZmlnIiwiY25mZyJdLCJzb3VyY2VzIjpbIi4uLy4uL2NvbXBvbmVudHMvY2hhbm5lbHMtbWVzc2FnZS9NZXNzYWdlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5pbXBvcnQgUmVhY3QsIHtcbiAgZm9yd2FyZFJlZixcbiAgdXNlRWZmZWN0LFxuICB1c2VJbXBlcmF0aXZlSGFuZGxlLFxuICB1c2VSZWYsXG59IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgKiBhcyBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIlxuaW1wb3J0IEJ1dHRvbiBmcm9tIFwiLi4vYnV0dG9uXCJcbmltcG9ydCBcIi4vc3R5bGVcIlxuXG5jb25zdCBwcmVmaXggPSBcImFkdWktY2hhbm5lbHMtbWVzc2FnZVwiXG5jb25zdCBJTlRFTlRTID0gW1wibm9ybWFsXCIsIFwicHJpbWFyeVwiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCIsIFwiZGFuZ2VyXCJdXG5cbmV4cG9ydCBpbnRlcmZhY2UgSU1lc3NhZ2VQcm9wcyB7XG4gIFtrZXk6IHN0cmluZ106IGFueVxuICAvKipcbiAgICog6KGM5Yqo5oyJ6ZKu55qE6YWN572u77yM5aaC77yaYWN0aW9uOiB7IHRleHQ6IFwi6Kej6ZSBXCIsIG9uQ2xpY2s6ICgpID0+IHsgbWVzc2FnZS5kZXN0cm95KCkgfSB9XG4gICAqL1xuICBhY3Rpb24/OiB7IHRleHQ6IHN0cmluZzsgb25DbGljazogKCkgPT4gdm9pZCB9IHwgbnVsbFxuICAvKipcbiAgICog6ZmE5Yqg57G75ZCNXG4gICAqL1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgLyoqXG4gICAqIOaYr+WQpuaYvuekuuWFs+mXrSBJY29u77yM5aaC5p6c6ZyA6KaB5Y+q5pSv5oyB5omL5Yqo5YWz6Zet77yM6L+Y6ZyA6KaB5Lyg5YWlIGR1cmF0aW9uOiAwXG4gICAqL1xuICBjbG9zYWJsZT86IGJvb2xlYW5cbiAgLyoqXG4gICAqIOWGheWuuVxuICAgKi9cbiAgY29udGVudD86IFJlYWN0LlJlYWN0Tm9kZVxuICAvKipcbiAgICog6Ze06ZqU5aSa5LmF6Ieq5Yqo5YWz6Zet77yM5Y2V5L2N5Li6IHPvvIzlpoLmnpzkvKDlhaUgMO+8jOWImeihqOekuuS4jeS8muiHquWKqOa2iOWksVxuICAgKi9cbiAgZHVyYXRpb24/OiBudW1iZXJcbiAgLyoqXG4gICAqIE1lc3NhZ2Ug5o+S5YWl5Yiw5ZOq5Liq5YWD57Sg77yM6buY6K6kICgpID0+IGRvY3VtZW50LmJvZHlcbiAgICovXG4gIGdldENvbnRhaW5lcj86ICgpID0+IEhUTUxFbGVtZW50XG4gIC8qKlxuICAgKiDorr7nva7nsbvlnotcbiAgICovXG4gIGludGVudDogXCJub3JtYWxcIiB8IFwicHJpbWFyeVwiIHwgXCJzdWNjZXNzXCIgfCBcIndhcm5pbmdcIiB8IFwiZGFuZ2VyXCJcbiAgLyoqXG4gICAqIOWFs+mXreaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvbkNsb3NlPzogKCgpID0+IHZvaWQpIHwgbnVsbFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElNZXNzYWdlXG4gIGV4dGVuZHMgUmVhY3QuRm9yd2FyZFJlZkV4b3RpY0NvbXBvbmVudDxcbiAgICBJTWVzc2FnZVByb3BzICYgUmVhY3QuUmVmQXR0cmlidXRlczxIVE1MRGl2RWxlbWVudD5cbiAgPiB7XG4gIG5vcm1hbDogYW55XG4gIHByaW1hcnk6IGFueVxuICBzdWNjZXNzOiBhbnlcbiAgd2FybmluZzogYW55XG4gIGRhbmdlcjogYW55XG59XG5cbi8qKlxuICog5YWo5bGA5o+Q6YaS55So5LqO5YWo5bGA5oCn5Zyw5bGV56S66ZyA6KaB5Y2z5pe25oCn5YWz5rOo55qE5L+h5oGv44CCXG4gKi9cbi8vIEB0cy1pZ25vcmVcbmNvbnN0IE1lc3NhZ2U6IElNZXNzYWdlID0gZm9yd2FyZFJlZihcbiAgKFxuICAgIHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNsb3NhYmxlLFxuICAgICAgY29udGVudCxcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgZ2V0Q29udGFpbmVyLFxuICAgICAgaW50ZW50LFxuICAgICAgb25DbG9zZSxcbiAgICAgIC4uLm90aGVyUHJvcHNcbiAgICB9OiBJTWVzc2FnZVByb3BzLFxuICAgIHJlZjogYW55XG4gICkgPT4ge1xuICAgIGNvbnN0IG1lc3NhZ2VSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG5cbiAgICBsZXQgaWNvbiA9IChcbiAgICAgIDxzdmdcbiAgICAgICAgY2xhc3NOYW1lPXtgJHtwcmVmaXh9LWljb25gfVxuICAgICAgICB3aWR0aD1cIjIwXCJcbiAgICAgICAgaGVpZ2h0PVwiMjBcIlxuICAgICAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcbiAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGZpbGxSdWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgY2xpcFJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICBkPVwiTTEuNjY2NjMgMTBDMS42NjY2MyAxNC42MDI0IDUuMzk3NTkgMTguMzMzMyA5Ljk5OTk2IDE4LjMzMzNDMTQuNjAyMyAxOC4zMzMzIDE4LjMzMzMgMTQuNjAyNCAxOC4zMzMzIDEwQzE4LjMzMzMgNS4zOTc2MyAxNC42MDIzIDEuNjY2NjcgOS45OTk5NiAxLjY2NjY3QzUuMzk3NTkgMS42NjY2NyAxLjY2NjYzIDUuMzk3NjMgMS42NjY2MyAxMFpNMTMuNjg1NiA3LjExNjY3TDkuMDE5NDkgMTEuNzgyOEw2LjcxNDU3IDkuNDc3ODVMNS44MzMyOSAxMC4zNTkxTDguMzE0MzggMTIuODQyQzguNzA0ODEgMTMuMjMyNyA5LjMzODA2IDEzLjIzMjkgOS43Mjg3MSAxMi44NDI0TDE0LjU3MSA4LjAwMjExTDEzLjY4NTYgNy4xMTY2N1pcIlxuICAgICAgICAgIGZpbGw9XCIjMDdDMTYwXCJcbiAgICAgICAgICBmaWxsT3BhY2l0eT1cIjAuOVwiXG4gICAgICAgIC8+XG4gICAgICA8L3N2Zz5cbiAgICApXG5cbiAgICBzd2l0Y2ggKGludGVudCkge1xuICAgICAgY2FzZSBcIm5vcm1hbFwiOlxuICAgICAgICBpY29uID0gKFxuICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7cHJlZml4fS1pY29uYH1cbiAgICAgICAgICAgIHdpZHRoPVwiMjBcIlxuICAgICAgICAgICAgaGVpZ2h0PVwiMjBcIlxuICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMCAyMFwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgZmlsbFJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgY2xpcFJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgZD1cIk05Ljk5OTk2IDE4LjMzMzNDNS4zOTc1OSAxOC4zMzMzIDEuNjY2NjMgMTQuNjAyNCAxLjY2NjYzIDEwQzEuNjY2NjMgNS4zOTc2MiA1LjM5NzU5IDEuNjY2NjYgOS45OTk5NiAxLjY2NjY2QzE0LjYwMjMgMS42NjY2NiAxOC4zMzMzIDUuMzk3NjIgMTguMzMzMyAxMEMxOC4zMzMzIDE0LjYwMjQgMTQuNjAyMyAxOC4zMzMzIDkuOTk5OTYgMTguMzMzM1pNMTAuNjI1IDguMzMzMzNWMTQuMTY2N0g5LjM3NDk2VjguMzMzMzNIMTAuNjI1Wk05Ljk5OTk2IDcuNUMxMC40NjAyIDcuNSAxMC44MzMzIDcuMTI2OSAxMC44MzMzIDYuNjY2NjZDMTAuODMzMyA2LjIwNjQzIDEwLjQ2MDIgNS44MzMzMyA5Ljk5OTk2IDUuODMzMzNDOS41Mzk3MiA1LjgzMzMzIDkuMTY2NjMgNi4yMDY0MyA5LjE2NjYzIDYuNjY2NjZDOS4xNjY2MyA3LjEyNjkgOS41Mzk3MiA3LjUgOS45OTk5NiA3LjVaXCJcbiAgICAgICAgICAgICAgZmlsbD1cIiMxMEFFRkZcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcIndhcm5pbmdcIjpcbiAgICAgICAgaWNvbiA9IChcbiAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICBjbGFzc05hbWU9e2Ake3ByZWZpeH0taWNvbmB9XG4gICAgICAgICAgICB3aWR0aD1cIjIwXCJcbiAgICAgICAgICAgIGhlaWdodD1cIjIwXCJcbiAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGZpbGxSdWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICAgIGNsaXBSdWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICAgIGQ9XCJNMTguMzAwNSAxNi4wNDM5QzE4LjY4NTUgMTYuNzEwNSAxOC4yMDQ0IDE3LjU0MzkgMTcuNDM0NiAxNy41NDM5TDIuNTY1MyAxNy41NDUyQzEuNzk1NTEgMTcuNTQ1MiAxLjMxNDMxIDE2LjcxMiAxLjY5OTEzIDE2LjA0NTNMOS4xMzI1NCAzLjE2NjgzQzkuNTE3MzggMi41MDAxIDEwLjQ3OTcgMi41MDAwMiAxMC44NjQ2IDMuMTY2NjdMMTguMzAwNSAxNi4wNDM5Wk05LjM3MjUzIDcuOTU0MUgxMC42Mjc0TDEwLjUyOTggMTIuNjc1OEg5LjQ3MDE5TDkuMzcyNTMgNy45NTQxWk05LjI4OTUyIDE0LjQwNDNDOS4yODk1MiAxNC43OSA5LjYwMjAyIDE1LjA5NzcgOS45OTc1MyAxNS4wOTc3QzEwLjM5NzkgMTUuMDk3NyAxMC43MTA0IDE0Ljc5IDEwLjcxMDQgMTQuNDA0M0MxMC43MTA0IDE0LjAxODUgMTAuMzk3OSAxMy43MTU4IDkuOTk3NTMgMTMuNzE1OEM5LjYwMjAyIDEzLjcxNTggOS4yODk1MiAxNC4wMTg1IDkuMjg5NTIgMTQuNDA0M1pcIlxuICAgICAgICAgICAgICBmaWxsPVwiI0ZBOUQzQlwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICApXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwiZGFuZ2VyXCI6XG4gICAgICAgIGljb24gPSAoXG4gICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtwcmVmaXh9LWljb25gfVxuICAgICAgICAgICAgd2lkdGg9XCIyMFwiXG4gICAgICAgICAgICBoZWlnaHQ9XCIyMFwiXG4gICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICBmaWxsUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgICBjbGlwUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgICBkPVwiTTkuOTk5OTYgMTguMzMzM0M1LjM5NzU5IDE4LjMzMzMgMS42NjY2MyAxNC42MDI0IDEuNjY2NjMgMTBDMS42NjY2MyA1LjM5NzYzIDUuMzk3NTkgMS42NjY2NyA5Ljk5OTk2IDEuNjY2NjdDMTQuNjAyMyAxLjY2NjY3IDE4LjMzMzMgNS4zOTc2MyAxOC4zMzMzIDEwQzE4LjMzMzMgMTQuNjAyNCAxNC42MDIzIDE4LjMzMzMgOS45OTk5NiAxOC4zMzMzWk05LjM2Mzg5IDUuMTEzMTJIMTAuNjM0MkwxMC41NDMxIDExLjQ0MzdIOS40NTUwNEw5LjM2Mzg5IDUuMTEzMTJaTTkuMjQ5OTYgMTMuNTE3M0M5LjI0OTk2IDEzLjkzMzEgOS41ODAzNiAxNC4yNTIxIDkuOTk2MjIgMTQuMjUyMUMxMC40MjM1IDE0LjI1MjEgMTAuNzQ4MiAxMy45MzMxIDEwLjc0ODIgMTMuNTE3M0MxMC43NDgyIDEzLjEwMTQgMTAuNDIzNSAxMi43ODI0IDkuOTk2MjIgMTIuNzgyNEM5LjU4MDM2IDEyLjc4MjQgOS4yNDk5NiAxMy4xMDE0IDkuMjQ5OTYgMTMuNTE3M1pcIlxuICAgICAgICAgICAgICBmaWxsPVwiI0ZBNTE1MVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICApXG4gICAgICAgIGJyZWFrXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVha1xuICAgIH1cblxuICAgIGxldCB0aW1lcjogbnVsbCB8IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+XG5cbiAgICBjb25zdCBjbGVhckNsb3NlVGltZXIgPSAoKSA9PiB7XG4gICAgICBpZiAodGltZXIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKVxuICAgICAgICB0aW1lciA9IG51bGxcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbG9zZSA9ICgpID0+IHtcbiAgICAgIGlmIChtZXNzYWdlUmVmICYmIG1lc3NhZ2VSZWYuY3VycmVudCkge1xuICAgICAgICBtZXNzYWdlUmVmLmN1cnJlbnQuc3R5bGUub3BhY2l0eSA9IFwiMFwiXG4gICAgICAgIG1lc3NhZ2VSZWYuY3VycmVudC5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIlxuICAgICAgICBtZXNzYWdlUmVmLmN1cnJlbnQuc3R5bGUuZmlsdGVyID0gXCJibHVyKDRweClcIlxuICAgICAgfVxuICAgICAgY2xlYXJDbG9zZVRpbWVyKClcbiAgICAgIGlmIChvbkNsb3NlKSB7XG4gICAgICAgIG9uQ2xvc2UoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNldENsb3NlVGltZXIgPSAoKSA9PiB7XG4gICAgICBpZiAoZHVyYXRpb24pIHtcbiAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjbG9zZSgpXG4gICAgICAgIH0sIGR1cmF0aW9uICogMTAwMClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgc2V0Q2xvc2VUaW1lcigpXG4gICAgICByZXR1cm4gY2xlYXJDbG9zZVRpbWVyXG4gICAgfSwgW10pXG5cbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcbiAgICAgIGNsb3NlLFxuICAgICAgZ2V0RG9tTm9kZTogKCkgPT4gbWVzc2FnZVJlZi5jdXJyZW50LFxuICAgIH0pKVxuXG4gICAgY29uc3QgaGFzQWN0aW9ucyA9IGFjdGlvbiB8fCBjbG9zYWJsZVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKFxuICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICBgJHtwcmVmaXh9LWJhc2VgLFxuICAgICAgICAgIGAke3ByZWZpeH0tJHtpbnRlbnR9YCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBbYCR7cHJlZml4fS1oYXNBY3Rpb25zYF06IGhhc0FjdGlvbnMsXG4gICAgICAgICAgfVxuICAgICAgICApfVxuICAgICAgICBvbk1vdXNlRW50ZXI9e2NsZWFyQ2xvc2VUaW1lcn1cbiAgICAgICAgb25Nb3VzZUxlYXZlPXtzZXRDbG9zZVRpbWVyfVxuICAgICAgICByZWY9e21lc3NhZ2VSZWZ9XG4gICAgICAgIGRhdGEtZHVyYXRpb249e2R1cmF0aW9ufVxuICAgICAgICB7Li4ub3RoZXJQcm9wc31cbiAgICAgID5cbiAgICAgICAge2ljb259XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtwcmVmaXh9LWNvbnRlbnRgfT57Y29udGVudH08L2Rpdj5cbiAgICAgICAge2hhc0FjdGlvbnMgJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtwcmVmaXh9LWFjdGlvbnNgfT5cbiAgICAgICAgICAgIHthY3Rpb24gJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cHJlZml4fS1hY3Rpb25gfT5cbiAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICB0aGVtZT1cImxpZ2h0XCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBvbkNsaWNrIH0gPSBhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uQ2xpY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrKClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7YWN0aW9uLnRleHR9XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHtjbG9zYWJsZSAmJiAoXG4gICAgICAgICAgICAgIDxCdXR0b24gbGVmdEljb249XCJjYW5jZWxcIiB0aGVtZT1cImxpZ2h0XCIgb25DbGljaz17Y2xvc2V9IC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9XG4pXG5cbk1lc3NhZ2UuZGlzcGxheU5hbWUgPSBcIk1lc3NhZ2VcIlxuXG5NZXNzYWdlLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIOihjOWKqOaMiemSrueahOmFjee9ru+8jOWmgu+8mmFjdGlvbjogeyB0ZXh0OiBcIuino+mUgVwiLCBvbkNsaWNrOiAoKSA9PiB7IG1lc3NhZ2UuZGVzdHJveSgpIH0gfVxuICAgKi9cbiAgYWN0aW9uOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICog6ZmE5Yqg57G75ZCNXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiDmmK/lkKbmmL7npLrlhbPpl60gSWNvbu+8jOWmguaenOmcgOimgeWPquaUr+aMgeaJi+WKqOWFs+mXre+8jOi/mOmcgOimgeS8oOWFpSBkdXJhdGlvbjogMFxuICAgKi9cbiAgY2xvc2FibGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICog5YaF5a65XG4gICAqL1xuICBjb250ZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIOmXtOmalOWkmuS5heiHquWKqOWFs+mXre+8jOWNleS9jeS4uiBz77yM5aaC5p6c5Lyg5YWlIDDvvIzliJnooajnpLrkuI3kvJroh6rliqjmtojlpLFcbiAgICovXG4gIGR1cmF0aW9uOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICogTWVzc2FnZSDmj5LlhaXliLDlk6rkuKrlhYPntKDvvIzpu5jorqQgKCkgPT4gZG9jdW1lbnQuYm9keVxuICAgKi9cbiAgZ2V0Q29udGFpbmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIOiuvue9ruexu+Wei1xuICAgKi9cbiAgaW50ZW50OiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICog5YWz6Zet5pe255qEIGhhbmRsZXJcbiAgICovXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxufVxuXG5NZXNzYWdlLmRlZmF1bHRQcm9wcyA9IHtcbiAgYWN0aW9uOiBudWxsLFxuICBjbGFzc05hbWU6IHVuZGVmaW5lZCxcbiAgY2xvc2FibGU6IGZhbHNlLFxuICBjb250ZW50OiBudWxsLFxuICBkdXJhdGlvbjogMixcbiAgZ2V0Q29udGFpbmVyOiB1bmRlZmluZWQsXG4gIGludGVudDogXCJub3JtYWxcIixcbiAgb25DbG9zZTogbnVsbCxcbn1cblxuY29uc3QgbmV3SW5zdGFuY2UgPSAocHJvcHM6IElNZXNzYWdlUHJvcHMpID0+IHtcbiAgbGV0IGluc3RhbmNlcyA9IEFycmF5LmZyb20oXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShgJHtwcmVmaXh9LXdyYXBwZXJgKVxuICApXG4gIGluc3RhbmNlcyA9IGluc3RhbmNlcy5maWx0ZXIoXG4gICAgKG86IEhUTUxEaXZFbGVtZW50KSA9PiBvLmRhdGFzZXQuY2xvc2UgIT09IFwidHJ1ZVwiXG4gIClcbiAgaWYgKGluc3RhbmNlcyAmJiBpbnN0YW5jZXMubGVuZ3RoID4gMikge1xuICAgIGNvbnN0IGZpcnN0SW5zdGFuY2UgPSBpbnN0YW5jZXNbMF0gYXMgSFRNTEVsZW1lbnRcbiAgICBjb25zdCBmaXJzdENoaWxkID0gZmlyc3RJbnN0YW5jZS5jaGlsZHJlblswXSBhcyBIVE1MRWxlbWVudFxuICAgIGlmIChmaXJzdENoaWxkLmRhdGFzZXQuZHVyYXRpb24gIT09IFwiMFwiKSB7XG4gICAgICBmaXJzdEluc3RhbmNlLmRhdGFzZXQuY2xvc2UgPSBcInRydWVcIlxuICAgICAgZmlyc3RDaGlsZC5zdHlsZS5vcGFjaXR5ID0gXCIwXCJcbiAgICAgIGZpcnN0Q2hpbGQuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCJcbiAgICAgIGZpcnN0Q2hpbGQuc3R5bGUuZmlsdGVyID0gXCJibHVyKDRweClcIlxuICAgIH1cbiAgfVxuXG4gIGxldCBpbnN0YW5jZTogYW55XG5cbiAgY29uc3QgeyBvbkNsb3NlLCBnZXRDb250YWluZXIsIC4uLm90aGVyUHJvcHMgfSA9IHByb3BzXG4gIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIilcbiAgY29udGFpbmVyLmNsYXNzTmFtZSA9IGAke3ByZWZpeH0td3JhcHBlcmBcbiAgaWYgKGdldENvbnRhaW5lcikge1xuICAgIGdldENvbnRhaW5lcigpLmFwcGVuZENoaWxkKGNvbnRhaW5lcilcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lcilcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZVN0eWxlcyA9ICgpID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2VzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShgJHtwcmVmaXh9LXdyYXBwZXJgKVxuICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChcbiAgICAgICAgbWVzc2FnZXMsXG4gICAgICAgIChtZXNzYWdlOiBIVE1MRGl2RWxlbWVudCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgIG1lc3NhZ2Uuc3R5bGUub3BhY2l0eSA9IFwiMVwiXG4gICAgICAgICAgbWVzc2FnZS5zdHlsZS50cmFuc2Zvcm0gPSBgXG4gICAgICAgICAgdHJhbnNsYXRlM2QodmFyKC0tbWVzc2FnZS1vZmZzZXQteCksXG4gICAgICAgICAgY2FsYygke1xuICAgICAgICAgICAgNTYgKiAobWVzc2FnZXMubGVuZ3RoIC0gMSAtIGluZGV4KVxuICAgICAgICAgIH1weCArIHZhcigtLW1lc3NhZ2Utb2Zmc2V0LXkpKSwgMClgXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LCA1MClcbiAgfVxuXG4gIHVwZGF0ZVN0eWxlcygpXG5cbiAgY29uc3QgY2xvc2UgPSAoKSA9PiB7XG4gICAgaWYgKG9uQ2xvc2UpIHtcbiAgICAgIG9uQ2xvc2UoKVxuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHVubW91bnRSZXN1bHQgPSBSZWFjdERPTS51bm1vdW50Q29tcG9uZW50QXROb2RlKGNvbnRhaW5lcilcbiAgICAgIGlmICh1bm1vdW50UmVzdWx0ICYmIGNvbnRhaW5lci5wYXJlbnROb2RlKSB7XG4gICAgICAgIGNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNvbnRhaW5lcilcbiAgICAgICAgdXBkYXRlU3R5bGVzKClcbiAgICAgIH1cbiAgICB9LCAzMDApXG4gIH1cblxuICBSZWFjdERPTS5yZW5kZXIoXG4gICAgPE1lc3NhZ2VcbiAgICAgIHJlZj17KG1lc3NhZ2UpID0+IHtcbiAgICAgICAgaW5zdGFuY2UgPSBtZXNzYWdlXG4gICAgICB9fVxuICAgICAgb25DbG9zZT17Y2xvc2V9XG4gICAgICB7Li4ub3RoZXJQcm9wc31cbiAgICAvPixcbiAgICBjb250YWluZXJcbiAgKVxuXG4gIHJldHVybiB7XG4gICAgZGVzdHJveTogKCkgPT4ge1xuICAgICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICAgIGluc3RhbmNlLmNsb3NlKClcbiAgICAgIH1cbiAgICB9LFxuICB9XG59XG5cbklOVEVOVFMuZm9yRWFjaChcbiAgKGludGVudDogXCJub3JtYWxcIiB8IFwicHJpbWFyeVwiIHwgXCJzdWNjZXNzXCIgfCBcIndhcm5pbmdcIiB8IFwiZGFuZ2VyXCIpID0+IHtcbiAgICBNZXNzYWdlW2ludGVudF0gPSAoY29uZmlnOiBJTWVzc2FnZVByb3BzIHwgc3RyaW5nKSA9PiB7XG4gICAgICBsZXQgY25mZyA9IHsgaW50ZW50IH0gYXMgSU1lc3NhZ2VQcm9wc1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgY25mZyA9IHsgY29udGVudDogY29uZmlnLCBpbnRlbnQgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY25mZyA9IGNvbmZpZ1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ld0luc3RhbmNlKHtcbiAgICAgICAgLi4uY25mZyxcbiAgICAgICAgaW50ZW50LFxuICAgICAgfSlcbiAgICB9XG4gIH1cbilcblxuZXhwb3J0IGRlZmF1bHQgTWVzc2FnZVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFDQSxPQUFPQSxLQUFQLElBQ0VDLFVBREYsRUFFRUMsU0FGRixFQUdFQyxtQkFIRixFQUlFQyxNQUpGLFFBS08sT0FMUDtBQU1BLE9BQU8sS0FBS0MsUUFBWixNQUEwQixXQUExQjtBQUNBLE9BQU9DLFNBQVAsTUFBc0IsWUFBdEI7QUFDQSxPQUFPQyxVQUFQLE1BQXVCLFlBQXZCO0FBQ0EsT0FBT0MsTUFBUCxNQUFtQixXQUFuQjtBQUNBLE9BQU8sU0FBUDtBQUVBLElBQU1DLE1BQU0sR0FBRyx1QkFBZjtBQUNBLElBQU1DLE9BQU8sR0FBRyxDQUFDLFFBQUQsRUFBVyxTQUFYLEVBQXNCLFNBQXRCLEVBQWlDLFNBQWpDLEVBQTRDLFFBQTVDLENBQWhCO0FBcURBLElBQU1DLE9BQWlCLEdBQUdWLFVBQVUsQ0FDbEMsZ0JBWUVXLEdBWkYsRUFhSztFQUFBLElBWERDLE1BV0MsUUFYREEsTUFXQztFQUFBLElB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