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>

267 lines (217 loc) 35.9 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 _propTypes = _interopRequireDefault(require("prop-types")); var _classnames = _interopRequireDefault(require("classnames")); var _warning = _interopRequireDefault(require("../_util/warning")); var _configProvider = require("../config-provider"); require("./style"); var _excluded = ["autoFocus", "className", "countHanzi", "defaultValue", "disabled", "id", "inputClassName", "inputStyle", "intent", "limit", "name", "onBlur", "onChange", "onFocus", "onKeyDown", "onPressEnter", "onScroll", "placeholder", "required", "resize", "size", "theme", "type", "value"]; 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 _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 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 _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 _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; } 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 noop = function noop() {}; var prefix = "adui-input"; var Textarea = (0, _react.forwardRef)(function (_ref, ref) { var _classNames; var autoFocus = _ref.autoFocus, className = _ref.className, countHanzi = _ref.countHanzi, defaultValue = _ref.defaultValue, disabled = _ref.disabled, id = _ref.id, inputClassName = _ref.inputClassName, inputStyle = _ref.inputStyle, intent = _ref.intent, limit = _ref.limit, name = _ref.name, onBlur = _ref.onBlur, onChange = _ref.onChange, onFocus = _ref.onFocus, onKeyDown = _ref.onKeyDown, onPressEnter = _ref.onPressEnter, onScroll = _ref.onScroll, placeholder = _ref.placeholder, required = _ref.required, resize = _ref.resize, sizeProp = _ref.size, theme = _ref.theme, type = _ref.type, value = _ref.value, otherProps = _objectWithoutProperties(_ref, _excluded); var _useState = (0, _react.useState)(false), _useState2 = _slicedToArray(_useState, 2), focused = _useState2[0], setFocused = _useState2[1]; var textareaRef = (0, _react.useRef)(null); var _useContext = (0, _react.useContext)(_configProvider.ConfigContext), sizeContext = _useContext.size; var size = (0, _configProvider.getComputedSize)(sizeProp, sizeContext); var handleChange = function handleChange(e) { if (!disabled && onChange) { var val = e.target.value.replace(/\u0008|\u0009|\u000B|\u000C|\u000D|\u00A0|\u2028|\u2029|\uFEFF/g, ""); onChange(e, val); } }; var handleKeyDown = function handleKeyDown(e) { if (e.key === "Enter" && onPressEnter) { onPressEnter(e); } if (onKeyDown) { onKeyDown(e); } }; var handleBlur = function handleBlur(e) { setFocused(false); if (onBlur) { onBlur(e); } }; var handleFocus = function handleFocus(e) { setFocused(true); if (onFocus) { onFocus(e); } }; var fixControlledValue = function fixControlledValue(val) { if (typeof val === "undefined" || val === null) { return ""; } return val; }; var getFormatStrLeng = function getFormatStrLeng(str) { var len = str.length; var realLength = 0; var charCode = -1; for (var i = 0; i < len; i += 1) { charCode = str.charCodeAt(i); if (charCode >= 0 && charCode <= 128) { realLength += 0.5; } else { realLength += 1; } } return Math.ceil(realLength); }; (0, _react.useImperativeHandle)(ref, function () { return { input: textareaRef === null || textareaRef === void 0 ? void 0 : textareaRef.current, handleChange: handleChange, handleKeyDown: handleKeyDown, handleBlur: handleBlur, handleFocus: handleFocus }; }); var textareaProps = { autoFocus: autoFocus, className: (0, _classnames["default"])("".concat(prefix, "-base"), inputClassName), disabled: disabled, id: id, name: name, onBlur: handleBlur, onChange: handleChange, onFocus: handleFocus, onKeyDown: handleKeyDown, onScroll: onScroll, placeholder: placeholder, ref: textareaRef, required: required, style: _objectSpread({ resize: resize }, inputStyle), type: type }; if (value !== null) { textareaProps.value = fixControlledValue(value); } else { textareaProps.defaultValue = fixControlledValue(defaultValue); } var length; if (limit) { (0, _warning["default"])(resize === "none", "Input.Textarea", "不允许同时使用 prop `limit` 与 prop `resize`"); if (value) { length = countHanzi ? getFormatStrLeng(value) : value.length; } else { (0, _warning["default"])(value !== null, "Input.Textarea", "如果要限制字数,必须从外部控制 value。"); length = 0; } } var classSet = (0, _classnames["default"])(className, "".concat(prefix, "-wrapper"), "".concat(prefix, "-wrapper_textarea"), "".concat(prefix, "-").concat(size), (_classNames = {}, _defineProperty(_classNames, "".concat(prefix, "-").concat(theme), theme), _defineProperty(_classNames, "".concat(prefix, "-resizable"), resize !== "none"), _defineProperty(_classNames, "".concat(prefix, "-disabled"), disabled), _defineProperty(_classNames, "".concat(prefix, "-limited"), !!limit), _defineProperty(_classNames, "".concat(prefix, "-normal"), intent === "normal"), _defineProperty(_classNames, "".concat(prefix, "-primary"), intent === "primary"), _defineProperty(_classNames, "".concat(prefix, "-success"), intent === "success"), _defineProperty(_classNames, "".concat(prefix, "-warning"), intent === "warning"), _defineProperty(_classNames, "".concat(prefix, "-danger"), intent === "danger" || length && limit && length > limit), _defineProperty(_classNames, "".concat(prefix, "-focused"), focused), _classNames)); return _react["default"].createElement("div", _extends({ className: classSet }, otherProps), _react["default"].createElement("textarea", textareaProps), !!limit && _react["default"].createElement("div", { className: "".concat(prefix, "-limit") }, _react["default"].createElement("span", null, "".concat(length, "/").concat(limit)))); }); Textarea.propTypes = { autoFocus: _propTypes["default"].bool, className: _propTypes["default"].string, countHanzi: _propTypes["default"].bool, defaultValue: _propTypes["default"].string, disabled: _propTypes["default"].bool, id: _propTypes["default"].string, inputClassName: _propTypes["default"].string, inputStyle: _propTypes["default"].object, intent: _propTypes["default"].oneOf(["normal", "primary", "success", "warning", "danger"]), limit: _propTypes["default"].number, name: _propTypes["default"].string, onBlur: _propTypes["default"].func, onChange: _propTypes["default"].func, onFocus: _propTypes["default"].func, onKeyDown: _propTypes["default"].func, onPressEnter: _propTypes["default"].func, onScroll: _propTypes["default"].func, placeholder: _propTypes["default"].string, required: _propTypes["default"].bool, resize: _propTypes["default"].oneOf(["none", "both", "horizontal", "vertical"]), size: _propTypes["default"].oneOf(["mini", "small", "medium", "large"]), theme: _propTypes["default"].oneOf([null, "light"]), type: _propTypes["default"].string, value: _propTypes["default"].string }; Textarea.defaultProps = { autoFocus: false, className: undefined, countHanzi: true, defaultValue: null, disabled: false, id: null, inputClassName: undefined, inputStyle: {}, intent: "normal", limit: null, name: null, onBlur: noop, onChange: noop, onFocus: noop, onKeyDown: noop, onPressEnter: noop, onScroll: noop, placeholder: "请输入", required: false, resize: "none", size: "small", theme: null, type: null, value: null }; Textarea.displayName = "Textarea"; var _default = Textarea; exports["default"] = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJub29wIiwicHJlZml4IiwiVGV4dGFyZWEiLCJmb3J3YXJkUmVmIiwicmVmIiwiYXV0b0ZvY3VzIiwiY2xhc3NOYW1lIiwiY291bnRIYW56aSIsImRlZmF1bHRWYWx1ZSIsImRpc2FibGVkIiwiaWQiLCJpbnB1dENsYXNzTmFtZSIsImlucHV0U3R5bGUiLCJpbnRlbnQiLCJsaW1pdCIsIm5hbWUiLCJvbkJsdXIiLCJvbkNoYW5nZSIsIm9uRm9jdXMiLCJvbktleURvd24iLCJvblByZXNzRW50ZXIiLCJvblNjcm9sbCIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJyZXNpemUiLCJzaXplUHJvcCIsInNpemUiLCJ0aGVtZSIsInR5cGUiLCJ2YWx1ZSIsIm90aGVyUHJvcHMiLCJ1c2VTdGF0ZSIsImZvY3VzZWQiLCJzZXRGb2N1c2VkIiwidGV4dGFyZWFSZWYiLCJ1c2VSZWYiLCJ1c2VDb250ZXh0IiwiQ29uZmlnQ29udGV4dCIsInNpemVDb250ZXh0IiwiZ2V0Q29tcHV0ZWRTaXplIiwiaGFuZGxlQ2hhbmdlIiwiZSIsInZhbCIsInRhcmdldCIsInJlcGxhY2UiLCJoYW5kbGVLZXlEb3duIiwia2V5IiwiaGFuZGxlQmx1ciIsImhhbmRsZUZvY3VzIiwiZml4Q29udHJvbGxlZFZhbHVlIiwiZ2V0Rm9ybWF0U3RyTGVuZyIsInN0ciIsImxlbiIsImxlbmd0aCIsInJlYWxMZW5ndGgiLCJjaGFyQ29kZSIsImkiLCJjaGFyQ29kZUF0IiwiTWF0aCIsImNlaWwiLCJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwiaW5wdXQiLCJjdXJyZW50IiwidGV4dGFyZWFQcm9wcyIsImNsYXNzTmFtZXMiLCJzdHlsZSIsIndhcm5pbmciLCJjbGFzc1NldCIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsImJvb2wiLCJzdHJpbmciLCJvYmplY3QiLCJvbmVPZiIsIm51bWJlciIsImZ1bmMiLCJkZWZhdWx0UHJvcHMiLCJ1bmRlZmluZWQiLCJkaXNwbGF5TmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uL2NvbXBvbmVudHMvaW5wdXQvVGV4dGFyZWEudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwge1xuICBmb3J3YXJkUmVmLFxuICB1c2VDb250ZXh0LFxuICB1c2VJbXBlcmF0aXZlSGFuZGxlLFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiXG5pbXBvcnQgd2FybmluZyBmcm9tIFwiLi4vX3V0aWwvd2FybmluZ1wiXG5pbXBvcnQgeyBDb25maWdDb250ZXh0LCBnZXRDb21wdXRlZFNpemUgfSBmcm9tIFwiLi4vY29uZmlnLXByb3ZpZGVyXCJcbmltcG9ydCBcIi4vc3R5bGVcIlxuXG5jb25zdCBub29wID0gKCkgPT4ge31cblxuY29uc3QgcHJlZml4ID0gXCJhZHVpLWlucHV0XCJcblxuZXhwb3J0IGludGVyZmFjZSBJVGV4dGFyZWFQcm9wcyB7XG4gIFtrZXk6IHN0cmluZ106IGFueVxuICAvKipcbiAgICogaW5wdXQg5qCH562+5Y6f55Sf5bGe5oCnIC0gYXV0b0ZvY3VzXG4gICAqL1xuICBhdXRvRm9jdXM/OiBib29sZWFuXG4gIC8qKlxuICAgKiDpmYTliqDnsbvlkI1cbiAgICovXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICAvKipcbiAgICog5piv5ZCm5oyJ54Wn5LiA5Liq5rGJ5a2X566XIDIg5a2X5pWw55qE5pa55byP6ZmQ5Yi26ZW/5bqmXG4gICAqL1xuICBjb3VudEhhbnppPzogYm9vbGVhblxuICAvKipcbiAgICog6buY6K6k5YC8IC0g5YaF6YOo6amx5YqoXG4gICAqL1xuICBkZWZhdWx0VmFsdWU/OiBzdHJpbmcgfCBudWxsXG4gIC8qKlxuICAgKiDmmK/lkKbnpoHnlKhcbiAgICovXG4gIGRpc2FibGVkPzogYm9vbGVhblxuICAvKipcbiAgICog6L6T5YWl5qGG55qEIGlkXG4gICAqL1xuICBpZD86IHN0cmluZyB8IG51bGxcbiAgLyoqXG4gICAqIOexu+Wei1xuICAgKi9cbiAgaW50ZW50PzogXCJub3JtYWxcIiB8IFwicHJpbWFyeVwiIHwgXCJzdWNjZXNzXCIgfCBcIndhcm5pbmdcIiB8IFwiZGFuZ2VyXCJcbiAgLyoqXG4gICAqIOS9nOeUqOWIsCBpbnB1dCDlhYPntKDnmoTnsbvlkI1cbiAgICovXG4gIGlucHV0Q2xhc3NOYW1lPzogc3RyaW5nXG4gIC8qKlxuICAgKiDkvZznlKjliLAgaW5wdXQg5YWD57Sg55qE5qC35byPXG4gICAqL1xuICBpbnB1dFN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllc1xuICAvKipcbiAgICog6ZmQ5Yi26ZW/5bqmXG4gICAqL1xuICBsaW1pdD86IG51bWJlciB8IG51bGxcbiAgLyoqXG4gICAqIGlucHV0IOagh+etvuWOn+eUn+WxnuaApyAtIG5hbWVcbiAgICovXG4gIG5hbWU/OiBzdHJpbmcgfCBudWxsXG4gIC8qKlxuICAgKiBibHVyIOaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvbkJsdXI/OiAoZTogUmVhY3QuRm9jdXNFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4gdm9pZFxuICAvKipcbiAgICog5YC85pS55Y+Y5pe255qEIGhhbmRsZXJcbiAgICovXG4gIG9uQ2hhbmdlPzogKGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQ+LCB2YWx1ZT86IHN0cmluZykgPT4gdm9pZFxuICAvKipcbiAgICogZm9jdXMg5pe255qEIGhhbmRsZXJcbiAgICovXG4gIG9uRm9jdXM/OiAoZTogUmVhY3QuRm9jdXNFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4gdm9pZFxuICAvKipcbiAgICoga2V5ZG93biDml7bnmoQgaGFuZGxlclxuICAgKi9cbiAgb25LZXlEb3duPzogKGU6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudD4pID0+IHZvaWRcbiAgLyoqXG4gICAqIGVudGVyIOaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvblByZXNzRW50ZXI/OiAoZTogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4gdm9pZFxuICAvKipcbiAgICogc2Nyb2xsIOaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvblNjcm9sbD86IChlOiBSZWFjdC5VSUV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KSA9PiB2b2lkXG4gIC8qKlxuICAgKiBwbGFjZWhvbGRlclxuICAgKi9cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmdcbiAgLyoqXG4gICAqIGlucHV0IOagh+etvuWOn+eUn+WxnuaApyAtIHJlcXVpcmVkXG4gICAqL1xuICByZXF1aXJlZD86IGJvb2xlYW5cbiAgLyoqXG4gICAqIOaYr+WQpuaUr+aMgeiwg+aVtOWkp+Wwj1xuICAgKi9cbiAgcmVzaXplPzogXCJub25lXCIgfCBcImJvdGhcIiB8IFwiaG9yaXpvbnRhbFwiIHwgXCJ2ZXJ0aWNhbFwiXG4gIC8qKlxuICAgKiDorr7nva7lsLrlr7hcbiAgICovXG4gIHNpemU/OiBcIm1pbmlcIiB8IFwic21hbGxcIiB8IFwibWVkaXVtXCIgfCBcImxhcmdlXCJcbiAgLyoqXG4gICAqIOiuvue9ruS4u+mimFxuICAgKi9cbiAgdGhlbWU/OiBudWxsIHwgXCJsaWdodFwiXG4gIC8qKlxuICAgKiBpbnB1dCDmoIfnrb7ljp/nlJ/lsZ7mgKcgLSB0eXBlXG4gICAqL1xuICB0eXBlPzogc3RyaW5nIHwgbnVsbFxuICAvKipcbiAgICog5YC8IC0g5aSW6YOo5o6n5Yi2XG4gICAqL1xuICB2YWx1ZT86IHN0cmluZyB8IG51bGxcbn1cblxuLyoqXG4gKiDovpPlhaXljLrln5/vvIznlKjkuo7lpJrooYznuq/mlofmnKznvJbovpHjgIJcbiAqL1xuY29uc3QgVGV4dGFyZWE6IFJlYWN0LkZvcndhcmRSZWZFeG90aWNDb21wb25lbnQ8XG4gIElUZXh0YXJlYVByb3BzICYgUmVhY3QuUmVmQXR0cmlidXRlczxhbnk+XG4+ID0gZm9yd2FyZFJlZihcbiAgKFxuICAgIHtcbiAgICAgIGF1dG9Gb2N1cyxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvdW50SGFuemksXG4gICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGlkLFxuICAgICAgaW5wdXRDbGFzc05hbWUsXG4gICAgICBpbnB1dFN0eWxlLFxuICAgICAgaW50ZW50LFxuICAgICAgbGltaXQsXG4gICAgICBuYW1lLFxuICAgICAgb25CbHVyLFxuICAgICAgb25DaGFuZ2UsXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25LZXlEb3duLFxuICAgICAgb25QcmVzc0VudGVyLFxuICAgICAgb25TY3JvbGwsXG4gICAgICBwbGFjZWhvbGRlcixcbiAgICAgIHJlcXVpcmVkLFxuICAgICAgcmVzaXplLFxuICAgICAgc2l6ZTogc2l6ZVByb3AsXG4gICAgICB0aGVtZSxcbiAgICAgIHR5cGUsXG4gICAgICB2YWx1ZSxcbiAgICAgIC4uLm90aGVyUHJvcHNcbiAgICB9OiBJVGV4dGFyZWFQcm9wcyxcbiAgICByZWZcbiAgKSA9PiB7XG4gICAgY29uc3QgW2ZvY3VzZWQsIHNldEZvY3VzZWRdID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgICBjb25zdCB0ZXh0YXJlYVJlZiA9IHVzZVJlZjxIVE1MVGV4dEFyZWFFbGVtZW50PihudWxsKVxuXG4gICAgY29uc3QgeyBzaXplOiBzaXplQ29udGV4dCB9ID0gdXNlQ29udGV4dChDb25maWdDb250ZXh0KVxuXG4gICAgY29uc3Qgc2l6ZSA9IGdldENvbXB1dGVkU2l6ZShzaXplUHJvcCwgc2l6ZUNvbnRleHQpXG5cbiAgICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudD4pID0+IHtcbiAgICAgIGlmICghZGlzYWJsZWQgJiYgb25DaGFuZ2UpIHtcbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tY29udHJvbC1yZWdleCwgbWF4LWxlbiAqL1xuICAgICAgICAvLyAwOCBCYWNrc3BhY2UsIDA5IFRhYiwgMEIg5Z6C55u05Yi26KGo56ymLCAwQyDmjaLpobUsIDBEIOWbnui9piwgQTAg5LiN6Ze05pat56m65qC8LFxuICAgICAgICAvLyAyMDI4LzIwMjkg5YiG6ZqU56ymLCBGRWZmIOWtl+iKgumhuuW6j+agh+iusOOAglxuICAgICAgICBjb25zdCB2YWwgPSBlLnRhcmdldC52YWx1ZS5yZXBsYWNlKFxuICAgICAgICAgIC9cXHUwMDA4fFxcdTAwMDl8XFx1MDAwQnxcXHUwMDBDfFxcdTAwMER8XFx1MDBBMHxcXHUyMDI4fFxcdTIwMjl8XFx1RkVGRi9nLFxuICAgICAgICAgIFwiXCJcbiAgICAgICAgKVxuICAgICAgICBvbkNoYW5nZShlLCB2YWwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlS2V5RG93biA9IChlOiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoZS5rZXkgPT09IFwiRW50ZXJcIiAmJiBvblByZXNzRW50ZXIpIHtcbiAgICAgICAgb25QcmVzc0VudGVyKGUpXG4gICAgICB9XG4gICAgICBpZiAob25LZXlEb3duKSB7XG4gICAgICAgIG9uS2V5RG93bihlKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZUJsdXIgPSAoZTogUmVhY3QuRm9jdXNFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgICAgc2V0Rm9jdXNlZChmYWxzZSlcbiAgICAgIGlmIChvbkJsdXIpIHtcbiAgICAgICAgb25CbHVyKGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlRm9jdXMgPSAoZTogUmVhY3QuRm9jdXNFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgICAgc2V0Rm9jdXNlZCh0cnVlKVxuICAgICAgaWYgKG9uRm9jdXMpIHtcbiAgICAgICAgb25Gb2N1cyhlKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGZpeENvbnRyb2xsZWRWYWx1ZSA9ICh2YWw/OiBzdHJpbmcgfCBudWxsKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHZhbCA9PT0gXCJ1bmRlZmluZWRcIiB8fCB2YWwgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFwiXCJcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxcbiAgICB9XG5cbiAgICBjb25zdCBnZXRGb3JtYXRTdHJMZW5nID0gKHN0cjogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBsZW4gPSBzdHIubGVuZ3RoXG4gICAgICBsZXQgcmVhbExlbmd0aCA9IDBcbiAgICAgIGxldCBjaGFyQ29kZSA9IC0xXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgIGNoYXJDb2RlID0gc3RyLmNoYXJDb2RlQXQoaSlcbiAgICAgICAgaWYgKGNoYXJDb2RlID49IDAgJiYgY2hhckNvZGUgPD0gMTI4KSB7XG4gICAgICAgICAgcmVhbExlbmd0aCArPSAwLjVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWFsTGVuZ3RoICs9IDFcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE1hdGguY2VpbChyZWFsTGVuZ3RoKVxuICAgIH1cblxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuICAgICAgaW5wdXQ6IHRleHRhcmVhUmVmPy5jdXJyZW50LFxuICAgICAgaGFuZGxlQ2hhbmdlLFxuICAgICAgaGFuZGxlS2V5RG93bixcbiAgICAgIGhhbmRsZUJsdXIsXG4gICAgICBoYW5kbGVGb2N1cyxcbiAgICB9KSlcblxuICAgIGNvbnN0IHRleHRhcmVhUHJvcHM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7XG4gICAgICBhdXRvRm9jdXMsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoYCR7cHJlZml4fS1iYXNlYCwgaW5wdXRDbGFzc05hbWUpLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBpZCxcbiAgICAgIG5hbWUsXG4gICAgICBvbkJsdXI6IGhhbmRsZUJsdXIsXG4gICAgICBvbkNoYW5nZTogaGFuZGxlQ2hhbmdlLFxuICAgICAgb25Gb2N1czogaGFuZGxlRm9jdXMsXG4gICAgICBvbktleURvd246IGhhbmRsZUtleURvd24sXG4gICAgICBvblNjcm9sbCxcbiAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgcmVmOiB0ZXh0YXJlYVJlZixcbiAgICAgIHJlcXVpcmVkLFxuICAgICAgc3R5bGU6IHsgcmVzaXplLCAuLi5pbnB1dFN0eWxlIH0sXG4gICAgICB0eXBlLFxuICAgIH1cblxuICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgdGV4dGFyZWFQcm9wcy52YWx1ZSA9IGZpeENvbnRyb2xsZWRWYWx1ZSh2YWx1ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGV4dGFyZWFQcm9wcy5kZWZhdWx0VmFsdWUgPSBmaXhDb250cm9sbGVkVmFsdWUoZGVmYXVsdFZhbHVlKVxuICAgIH1cblxuICAgIGxldCBsZW5ndGhcbiAgICBpZiAobGltaXQpIHtcbiAgICAgIHdhcm5pbmcoXG4gICAgICAgIHJlc2l6ZSA9PT0gXCJub25lXCIsXG4gICAgICAgIFwiSW5wdXQuVGV4dGFyZWFcIixcbiAgICAgICAgXCLkuI3lhYHorrjlkIzml7bkvb/nlKggcHJvcCBgbGltaXRgIOS4jiBwcm9wIGByZXNpemVgXCJcbiAgICAgIClcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBsZW5ndGggPSBjb3VudEhhbnppID8gZ2V0Rm9ybWF0U3RyTGVuZyh2YWx1ZSkgOiB2YWx1ZS5sZW5ndGhcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdhcm5pbmcoXG4gICAgICAgICAgdmFsdWUgIT09IG51bGwsXG4gICAgICAgICAgXCJJbnB1dC5UZXh0YXJlYVwiLFxuICAgICAgICAgIFwi5aaC5p6c6KaB6ZmQ5Yi25a2X5pWw77yM5b+F6aG75LuO5aSW6YOo5o6n5Yi2IHZhbHVl44CCXCJcbiAgICAgICAgKVxuICAgICAgICBsZW5ndGggPSAwXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NTZXQgPSBjbGFzc05hbWVzKFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgYCR7cHJlZml4fS13cmFwcGVyYCxcbiAgICAgIGAke3ByZWZpeH0td3JhcHBlcl90ZXh0YXJlYWAsXG4gICAgICBgJHtwcmVmaXh9LSR7c2l6ZX1gLFxuICAgICAge1xuICAgICAgICBbYCR7cHJlZml4fS0ke3RoZW1lfWBdOiB0aGVtZSxcbiAgICAgICAgW2Ake3ByZWZpeH0tcmVzaXphYmxlYF06IHJlc2l6ZSAhPT0gXCJub25lXCIsXG4gICAgICAgIFtgJHtwcmVmaXh9LWRpc2FibGVkYF06IGRpc2FibGVkLFxuICAgICAgICBbYCR7cHJlZml4fS1saW1pdGVkYF06ICEhbGltaXQsXG4gICAgICAgIFtgJHtwcmVmaXh9LW5vcm1hbGBdOiBpbnRlbnQgPT09IFwibm9ybWFsXCIsXG4gICAgICAgIFtgJHtwcmVmaXh9LXByaW1hcnlgXTogaW50ZW50ID09PSBcInByaW1hcnlcIixcbiAgICAgICAgW2Ake3ByZWZpeH0tc3VjY2Vzc2BdOiBpbnRlbnQgPT09IFwic3VjY2Vzc1wiLFxuICAgICAgICBbYCR7cHJlZml4fS13YXJuaW5nYF06IGludGVudCA9PT0gXCJ3YXJuaW5nXCIsXG4gICAgICAgIFtgJHtwcmVmaXh9LWRhbmdlcmBdOlxuICAgICAgICAgIGludGVudCA9PT0gXCJkYW5nZXJcIiB8fCAobGVuZ3RoICYmIGxpbWl0ICYmIGxlbmd0aCA+IGxpbWl0KSxcbiAgICAgICAgW2Ake3ByZWZpeH0tZm9jdXNlZGBdOiBmb2N1c2VkLFxuICAgICAgfVxuICAgIClcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NTZXR9IHsuLi5vdGhlclByb3BzfT5cbiAgICAgICAgPHRleHRhcmVhIHsuLi50ZXh0YXJlYVByb3BzfSAvPlxuICAgICAgICB7ISFsaW1pdCAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3ByZWZpeH0tbGltaXRgfT5cbiAgICAgICAgICAgIDxzcGFuPntgJHtsZW5ndGh9LyR7bGltaXR9YH08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cbilcblxuVGV4dGFyZWEucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogaW5wdXQg5qCH562+5Y6f55Sf5bGe5oCnIC0gYXV0b0ZvY3VzXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICog6ZmE5Yqg57G75ZCNXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiDmmK/lkKbmjInnhafkuIDkuKrmsYnlrZfnrpcgMiDlrZfmlbDnmoTmlrnlvI/pmZDliLbplb/luqZcbiAgICovXG4gIGNvdW50SGFuemk6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICog6buY6K6k5YC8IC0g5YaF6YOo6amx5YqoXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiDmmK/lkKbnpoHnlKhcbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIOi+k+WFpeahhueahCBpZFxuICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiDkvZznlKjliLAgaW5wdXQg5YWD57Sg55qE57G75ZCNXG4gICAqL1xuICBpbnB1dENsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIOS9nOeUqOWIsCBpbnB1dCDlhYPntKDnmoTmoLflvI9cbiAgICovXG4gIGlucHV0U3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiDorr7nva7nsbvlnotcbiAgICovXG4gIGludGVudDogUHJvcFR5cGVzLm9uZU9mKFtcbiAgICBcIm5vcm1hbFwiLFxuICAgIFwicHJpbWFyeVwiLFxuICAgIFwic3VjY2Vzc1wiLFxuICAgIFwid2FybmluZ1wiLFxuICAgIFwiZGFuZ2VyXCIsXG4gIF0pLFxuICAvKipcbiAgICog6ZmQ5Yi26ZW/5bqmXG4gICAqL1xuICBsaW1pdDogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIHRleHRhcmVhIOagh+etvuWOn+eUn+WxnuaApyAtIG5hbWVcbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBibHVyIOaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICog5YC85pS55Y+Y5pe255qEIGhhbmRsZXJcbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIGZvY3VzIOaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIGtleWRvd24g5pe255qEIGhhbmRsZXJcbiAgICovXG4gIG9uS2V5RG93bjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBlbnRlciDml7bnmoQgaGFuZGxlclxuICAgKi9cbiAgb25QcmVzc0VudGVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIHNjcm9sbCDml7bnmoQgaGFuZGxlclxuICAgKi9cbiAgb25TY3JvbGw6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogcGxhY2Vob2xkZXJcbiAgICovXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogaW5wdXQg5qCH562+5Y6f55Sf5bGe5oCnIC0gcmVxdWlyZWRcbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIOaYr+WQpuaUr+aMgeiwg+aVtOWkp+Wwj1xuICAgKi9cbiAgcmVzaXplOiBQcm9wVHlwZXMub25lT2YoW1wibm9uZVwiLCBcImJvdGhcIiwgXCJob3Jpem9udGFsXCIsIFwidmVydGljYWxcIl0pLFxuICAvKipcbiAgICog6K6+572u5bC65a+4XG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wibWluaVwiLCBcInNtYWxsXCIsIFwibWVkaXVtXCIsIFwibGFyZ2VcIl0pLFxuICAvKipcbiAgICog6K6+572u5Li76aKYXG4gICAqL1xuICB0aGVtZTogUHJvcFR5cGVzLm9uZU9mKFtudWxsLCBcImxpZ2h0XCJdKSxcbiAgLyoqXG4gICAqIHRleHRhcmVhIOagh+etvuWOn+eUn+WxnuaApyAtIHR5cGVcbiAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiDlgLwgLSDlpJbpg6jmjqfliLZcbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxufVxuXG5UZXh0YXJlYS5kZWZhdWx0UHJvcHMgPSB7XG4gIGF1dG9Gb2N1czogZmFsc2UsXG4gIGNsYXNzTmFtZTogdW5kZWZpbmVkLFxuICBjb3VudEhhbnppOiB0cnVlLFxuICBkZWZhdWx0VmFsdWU6IG51bGwsXG4gIGRpc2FibGVkOiBmYWxzZSxcbiAgaWQ6IG51bGwsXG4gIGlucHV0Q2xhc3NOYW1lOiB1bmRlZmluZWQsXG4gIGlucHV0U3R5bGU6IHt9LFxuICBpbnRlbnQ6IFwibm9ybWFsXCIsXG4gIGxpbWl0OiBudWxsLFxuICBuYW1lOiBudWxsLFxuICBvbkJsdXI6IG5vb3AsXG4gIG9uQ2hhbmdlOiBub29wLFxuICBvbkZvY3VzOiBub29wLFxuICBvbktleURvd246IG5vb3AsXG4gIG9uUHJlc3NFbnRlcjogbm9vcCxcbiAgb25TY3JvbGw6IG5vb3AsXG4gIHBsYWNlaG9sZGVyOiBcIuivt+i+k+WFpVwiLFxuICByZXF1aXJlZDogZmFsc2UsXG4gIHJlc2l6ZTogXCJub25lXCIsXG4gIHNpemU6IFwic21hbGxcIixcbiAgdGhlbWU6IG51bGwsXG4gIHR5cGU6IG51bGwsXG4gIHZhbHVlOiBudWxsLFxufVxuXG5UZXh0YXJlYS5kaXNwbGF5TmFtZSA9IFwiVGV4dGFyZWFcIlxuXG5leHBvcnQgZGVmYXVsdCBUZXh0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