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>

294 lines (293 loc) 54.7 kB
"use strict"; 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 _Handle = _interopRequireDefault(require("rc-slider/lib/Handle")); var _Range = _interopRequireDefault(require("rc-slider/lib/Range")); var _Slider = _interopRequireDefault(require("rc-slider/lib/Slider")); var _numericInput = _interopRequireDefault(require("../numeric-input")); var _tooltip = _interopRequireDefault(require("../tooltip")); require("./style"); var _excluded = ["className", "defaultValue", "inputVisible", "marks", "max", "min", "onAfterChange", "onBeforeChange", "onChange", "range", "step", "style", "tipFormatter", "tooltipProps", "value"], _excluded2 = ["dragging", "index", "value"]; 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 _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); } function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _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(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } 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 noop = function noop() {}; var prefix = "adui-slider"; var Slider = function Slider(_ref) { var className = _ref.className, defaultValue = _ref.defaultValue, inputVisible = _ref.inputVisible, marks = _ref.marks, max = _ref.max, min = _ref.min, onAfterChange = _ref.onAfterChange, onBeforeChange = _ref.onBeforeChange, onChange = _ref.onChange, range = _ref.range, step = _ref.step, style = _ref.style, tipFormatter = _ref.tipFormatter, tooltipProps = _ref.tooltipProps, valueProp = _ref.value, otherProps = _objectWithoutProperties(_ref, _excluded); var tooltipLeft = (0, _react.useRef)(null); var tooltipRight = (0, _react.useRef)(null); var tooltipCombined = (0, _react.useRef)(null); var _useState = (0, _react.useState)("separated"), _useState2 = _slicedToArray(_useState, 2), rangeTooltipCombinedStatus = _useState2[0], setRangeTooltipCombinedStatus = _useState2[1]; var _useState3 = (0, _react.useState)(false), _useState4 = _slicedToArray(_useState3, 2), active = _useState4[0], setActive = _useState4[1]; var _useState5 = (0, _react.useState)([]), _useState6 = _slicedToArray(_useState5, 2), tooltipVisibleArray = _useState6[0], setTooltipVisibleArray = _useState6[1]; var _useState7 = (0, _react.useState)(function () { var val; if (valueProp !== null) { val = typeof valueProp === "string" ? Number(valueProp) : valueProp; } else if (defaultValue !== null) { val = typeof defaultValue === "string" ? Number(defaultValue) : defaultValue; } if (val === undefined) { return val; } return range ? val : Number(val); }), _useState8 = _slicedToArray(_useState7, 2), value = _useState8[0], setValue = _useState8[1]; if (valueProp !== null && valueProp !== undefined && (_typeof(valueProp) === "object" || !isNaN(valueProp)) && (typeof valueProp === "string" ? Number(valueProp) : valueProp) !== value) { setValue(range ? valueProp : Number(valueProp)); } (0, _react.useEffect)(function () { if (range && Array.isArray(value) && (tooltipVisibleArray[0] || active) && tooltipLeft.current && tooltipRight.current) { var rectLeft = tooltipLeft.current.getBoundingClientRect(); var rectRight = tooltipRight.current.getBoundingClientRect(); if (rectLeft.left === rectRight.left) { setRangeTooltipCombinedStatus("overlapped"); } else if (rectLeft.left + rectLeft.width > rectRight.left) { setRangeTooltipCombinedStatus("combined"); if (tooltipCombined.current) { tooltipCombined.current.style.left = "calc(".concat(value[0], "% - ").concat(rectLeft.width / 2, "px)"); tooltipCombined.current.style.width = "calc(".concat(value[1] - value[0], "% + ").concat(rectLeft.width, "px)"); } } else { setRangeTooltipCombinedStatus("separated"); } } }, [value, range, active, tooltipVisibleArray]); var valuePropsObject = {}; var numericInputPropsObject = {}; if (defaultValue !== null) { valuePropsObject.defaultValue = defaultValue; } if (value !== null) { valuePropsObject.value = value; } if (defaultValue !== null && !Array.isArray(defaultValue)) { numericInputPropsObject.defaultValue = defaultValue; } if (value !== null && !Array.isArray(value)) { numericInputPropsObject.value = value; } var classSet = (0, _classnames["default"])(className, "".concat(prefix, "-wrapper"), _defineProperty(_defineProperty({}, "".concat(prefix, "-active"), active), "".concat(prefix, "-hasMarks"), marks && Object.keys(marks).length)); var stepString = step ? step.toString() : "1"; var precision = 0; if (stepString.includes(".")) { precision = stepString.length - stepString.indexOf(".") - 1; } var setTooltipVisible = function setTooltipVisible(bool) { if (bool) { setTooltipVisibleArray({ 0: true, 1: true }); } else if (!active) { setTooltipVisibleArray({ 0: false, 1: false }); } }; var handleWithTooltip = function handleWithTooltip(_ref2) { var dragging = _ref2.dragging, index = _ref2.index, val = _ref2.value, restProps = _objectWithoutProperties(_ref2, _excluded2); if (tipFormatter) { if (range) { return _react["default"].createElement(_Handle["default"], _extends({ value: val, onMouseEnter: function onMouseEnter() { return setTooltipVisible(true); }, onMouseLeave: function onMouseLeave() { return setTooltipVisible(false); } }, restProps)); } return _react["default"].createElement(_tooltip["default"], { key: index, popup: tipFormatter(val), placement: tooltipProps && tooltipProps.placement || "top", visible: tooltipVisibleArray[index] || active }, _react["default"].createElement(_Handle["default"], _extends({ value: val, onMouseEnter: function onMouseEnter() { return setTooltipVisible(true); }, onMouseLeave: function onMouseLeave() { return setTooltipVisible(false); } }, restProps))); } return _react["default"].createElement(_Handle["default"], _extends({ key: index, value: val }, restProps)); }; var handleBeforeChange = function handleBeforeChange(val) { setActive(true); document.documentElement.style.cursor = "pointer"; if (onBeforeChange) { onBeforeChange(val); } }; var handleAfterChange = function handleAfterChange(val) { setActive(false); setTooltipVisibleArray({ 0: false, 1: false }); document.documentElement.style.cursor = ""; if (onAfterChange) { onAfterChange(val); } }; var checkValueIsValid = function checkValueIsValid(val) { return val !== value && val !== null && val !== undefined && min !== undefined && max !== undefined && val >= min && val <= max; }; var handleChange = function handleChange(val) { var newValue = range ? val : Number(val); if (range || checkValueIsValid(newValue)) { if (valueProp === null) { setValue(newValue); } if (onChange) { onChange(newValue); } } }; var sliderProps = _objectSpread(_objectSpread({ handle: function handle(info) { return handleWithTooltip(info); }, marks: marks, min: min, max: max, onAfterChange: handleAfterChange, onBeforeChange: handleBeforeChange, onChange: handleChange, prefixCls: prefix, step: step }, valuePropsObject), otherProps); var slider = range ? _react["default"].createElement(_Range["default"], sliderProps) : _react["default"].createElement(_Slider["default"], sliderProps); return _react["default"].createElement("div", { className: classSet, style: style }, tipFormatter && range && Array.isArray(value) && _react["default"].createElement("div", { className: (0, _classnames["default"])("adui-slider-range-tooltip-wrapper", { "adui-slider-range-tooltip-wrapper-visible": tooltipVisibleArray[0] || active, "adui-slider-range-tooltip-wrapper-combined": rangeTooltipCombinedStatus === "combined", "adui-slider-range-tooltip-wrapper-overlapped": rangeTooltipCombinedStatus === "overlapped" }) }, _react["default"].createElement("div", { className: "adui-slider-range-tooltip adui-slider-range-tooltip-left", style: { left: "".concat(value[0], "%") }, ref: tooltipLeft }, tipFormatter(value[0])), _react["default"].createElement("div", { className: "adui-slider-range-tooltip adui-slider-range-tooltip-right", style: { left: "".concat(value[1], "%") }, ref: tooltipRight }, tipFormatter(value[1])), _react["default"].createElement("div", { className: "adui-slider-range-tooltip-combined", ref: tooltipCombined }, tipFormatter(value[0]), " - ", tipFormatter(value[1]))), slider, inputVisible && !range && _react["default"].createElement(_numericInput["default"], _extends({ placeholder: "", precision: precision, onChange: function onChange(val) { handleChange(typeof val === "string" ? 0 : val); }, step: step, style: { marginLeft: "12px", width: "56px", height: "22px" } }, numericInputPropsObject, otherProps))); }; Slider.propTypes = { className: _propTypes["default"].string, defaultValue: _propTypes["default"].any, inputVisible: _propTypes["default"].bool, marks: _propTypes["default"].any, max: _propTypes["default"].number, min: _propTypes["default"].number, onAfterChange: _propTypes["default"].func, onBeforeChange: _propTypes["default"].func, onChange: _propTypes["default"].func, range: _propTypes["default"].bool, step: _propTypes["default"].number, style: _propTypes["default"].object, tipFormatter: _propTypes["default"].func, tooltipProps: _propTypes["default"].object, value: _propTypes["default"].any }; Slider.defaultProps = { className: undefined, defaultValue: null, inputVisible: true, marks: {}, max: 100, min: 0, onAfterChange: noop, onBeforeChange: noop, onChange: noop, range: false, step: 1, style: {}, tipFormatter: null, tooltipProps: {}, value: null }; var _default = exports["default"] = Slider; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcHJvcFR5cGVzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jbGFzc25hbWVzIiwiX0hhbmRsZSIsIl9SYW5nZSIsIl9TbGlkZXIiLCJfbnVtZXJpY0lucHV0IiwiX3Rvb2x0aXAiLCJfZXhjbHVkZWQiLCJfZXhjbHVkZWQyIiwiZSIsIl9fZXNNb2R1bGUiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJXZWFrTWFwIiwiciIsInQiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfZXh0ZW5kcyIsImFzc2lnbiIsImJpbmQiLCJfdG9Qcm9wZXJ0eUtleSIsInZhbHVlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfdG9QcmltaXRpdmUiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJfc2xpY2VkVG9BcnJheSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJuYW1lIiwiQXJyYXkiLCJmcm9tIiwidGVzdCIsImwiLCJmIiwibmV4dCIsImRvbmUiLCJpc0FycmF5IiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJzIiwiaW5jbHVkZXMiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIm5vb3AiLCJwcmVmaXgiLCJTbGlkZXIiLCJfcmVmIiwiY2xhc3NOYW1lIiwiZGVmYXVsdFZhbHVlIiwiaW5wdXRWaXNpYmxlIiwibWFya3MiLCJtYXgiLCJtaW4iLCJvbkFmdGVyQ2hhbmdlIiwib25CZWZvcmVDaGFuZ2UiLCJvbkNoYW5nZSIsInJhbmdlIiwic3RlcCIsInN0eWxlIiwidGlwRm9ybWF0dGVyIiwidG9vbHRpcFByb3BzIiwidmFsdWVQcm9wIiwib3RoZXJQcm9wcyIsInRvb2x0aXBMZWZ0IiwidXNlUmVmIiwidG9vbHRpcFJpZ2h0IiwidG9vbHRpcENvbWJpbmVkIiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwicmFuZ2VUb29sdGlwQ29tYmluZWRTdGF0dXMiLCJzZXRSYW5nZVRvb2x0aXBDb21iaW5lZFN0YXR1cyIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiYWN0aXZlIiwic2V0QWN0aXZlIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJ0b29sdGlwVmlzaWJsZUFycmF5Iiwic2V0VG9vbHRpcFZpc2libGVBcnJheSIsIl91c2VTdGF0ZTciLCJ2YWwiLCJ1bmRlZmluZWQiLCJfdXNlU3RhdGU4Iiwic2V0VmFsdWUiLCJpc05hTiIsInVzZUVmZmVjdCIsImN1cnJlbnQiLCJyZWN0TGVmdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInJlY3RSaWdodCIsImxlZnQiLCJ3aWR0aCIsImNvbmNhdCIsInZhbHVlUHJvcHNPYmplY3QiLCJudW1lcmljSW5wdXRQcm9wc09iamVjdCIsImNsYXNzU2V0IiwiY2xhc3NOYW1lcyIsInN0ZXBTdHJpbmciLCJwcmVjaXNpb24iLCJpbmRleE9mIiwic2V0VG9vbHRpcFZpc2libGUiLCJib29sIiwiaGFuZGxlV2l0aFRvb2x0aXAiLCJfcmVmMiIsImRyYWdnaW5nIiwiaW5kZXgiLCJyZXN0UHJvcHMiLCJjcmVhdGVFbGVtZW50Iiwib25Nb3VzZUVudGVyIiwib25Nb3VzZUxlYXZlIiwia2V5IiwicG9wdXAiLCJwbGFjZW1lbnQiLCJ2aXNpYmxlIiwiaGFuZGxlQmVmb3JlQ2hhbmdlIiwiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiLCJjdXJzb3IiLCJoYW5kbGVBZnRlckNoYW5nZSIsImNoZWNrVmFsdWVJc1ZhbGlkIiwiaGFuZGxlQ2hhbmdlIiwibmV3VmFsdWUiLCJzbGlkZXJQcm9wcyIsImhhbmRsZSIsImluZm8iLCJwcmVmaXhDbHMiLCJzbGlkZXIiLCJyZWYiLCJwbGFjZWhvbGRlciIsIm1hcmdpbkxlZnQiLCJoZWlnaHQiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJzdHJpbmciLCJhbnkiLCJudW1iZXIiLCJmdW5jIiwib2JqZWN0IiwiZGVmYXVsdFByb3BzIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vY29tcG9uZW50cy9zbGlkZXIvU2xpZGVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIlxuaW1wb3J0IFJjSGFuZGxlIGZyb20gXCJyYy1zbGlkZXIvbGliL0hhbmRsZVwiXG5pbXBvcnQgUmNSYW5nZSBmcm9tIFwicmMtc2xpZGVyL2xpYi9SYW5nZVwiXG5pbXBvcnQgUmNTbGlkZXIgZnJvbSBcInJjLXNsaWRlci9saWIvU2xpZGVyXCJcbmltcG9ydCBOdW1lcmljSW5wdXQgZnJvbSBcIi4uL251bWVyaWMtaW5wdXRcIlxuaW1wb3J0IFRvb2x0aXAsIHsgSVRvb2x0aXBQcm9wcyB9IGZyb20gXCIuLi90b29sdGlwXCJcbmltcG9ydCBcIi4vc3R5bGVcIlxuXG5jb25zdCBub29wID0gKCkgPT4ge31cblxuY29uc3QgcHJlZml4ID0gXCJhZHVpLXNsaWRlclwiXG5cbmludGVyZmFjZSBJSGFuZGxlR2VuZXJhdG9ySW5mbyB7XG4gIFtrZXk6IHN0cmluZ106IGFueVxuICBkcmFnZ2luZzogYm9vbGVhblxuICBpbmRleDogbnVtYmVyXG4gIHZhbHVlOiBudW1iZXJcbn1cblxuaW50ZXJmYWNlIElWYWx1ZSB7XG4gIGRlZmF1bHRWYWx1ZT86IFNsaWRlclZhbHVlXG4gIHZhbHVlPzogU2xpZGVyVmFsdWVcbn1cblxuaW50ZXJmYWNlIElOdW1lcmljSW5wdXRWYWx1ZSB7XG4gIGRlZmF1bHRWYWx1ZT86IG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGxcbiAgdmFsdWU/OiBudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNsaWRlck1hcmtzIHtcbiAgW2tleTogbnVtYmVyXTpcbiAgICB8IFJlYWN0LlJlYWN0Tm9kZVxuICAgIHwge1xuICAgICAgICBzdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllc1xuICAgICAgICBsYWJlbDogUmVhY3QuUmVhY3ROb2RlXG4gICAgICB9XG59XG5cbmV4cG9ydCB0eXBlIFNsaWRlclZhbHVlID0gbnVtYmVyIHwgW251bWJlciwgbnVtYmVyXSB8IHVuZGVmaW5lZCB8IG51bGxcblxuZXhwb3J0IHR5cGUgQ2hhbmdlSGFuZGxlciA9ICh2YWx1ZTogU2xpZGVyVmFsdWUpID0+IHZvaWRcblxuZXhwb3J0IGludGVyZmFjZSBJU2xpZGVyUHJvcHMge1xuICBba2V5OiBzdHJpbmddOiBhbnlcbiAgLyoqXG4gICAqIOmZhOWKoOexu+WQjVxuICAgKi9cbiAgY2xhc3NOYW1lPzogc3RyaW5nXG4gIC8qKlxuICAgKiDliJ3lp4vnmoTpu5jorqTlgLxcbiAgICovXG4gIGRlZmF1bHRWYWx1ZT86IFNsaWRlclZhbHVlXG4gIC8qKlxuICAgKiDmmK/lkKbmlK/mjIHovpPlhaXmoYbvvIzmraQgcHJvcCDkuI7lj4zmu5HlnZfmqKHlvI/kupLmlqVcbiAgICovXG4gIGlucHV0VmlzaWJsZT86IGJvb2xlYW5cbiAgLyoqXG4gICAqIOWIu+W6puagh+iusO+8jOS+i+Wmgu+8mnsyNTogXCIyNSVcIiwgNTA6IFwiNTDihINcIn1cbiAgICovXG4gIG1hcmtzPzogSVNsaWRlck1hcmtzXG4gIC8qKlxuICAgKiDmnIDlpKflgLxcbiAgICovXG4gIG1heD86IG51bWJlclxuICAvKipcbiAgICog5pyA5bCP5YC8XG4gICAqL1xuICBtaW4/OiBudW1iZXJcbiAgLyoqXG4gICAqIOWcqCBgb25tb3VzZXVwYCDml7bop6blj5HnmoQgaGFuZGxlclxuICAgKi9cbiAgb25BZnRlckNoYW5nZT86IENoYW5nZUhhbmRsZXJcbiAgLyoqXG4gICAqIOWcqCBgb25tb3VzZWRvd25gIOaXtuinpuWPkeeahCBoYW5kbGVyXG4gICAqL1xuICBvbkJlZm9yZUNoYW5nZT86IENoYW5nZUhhbmRsZXJcbiAgLyoqXG4gICAqIOWcqOWAvOWPkeeUn+WPmOWMluaXtuinpuWPkeeahCBoYW5kbGVyXG4gICAqL1xuICBvbkNoYW5nZT86IENoYW5nZUhhbmRsZXJcbiAgLyoqXG4gICAqIOWPjOa7keWdl+aooeW8j1xuICAgKi9cbiAgcmFuZ2U/OiBib29sZWFuXG4gIC8qKlxuICAgKiDmraXplb/vvIzlv4XpobvlpKfkuo4gMFxuICAgKi9cbiAgc3RlcD86IG51bWJlclxuICAvKipcbiAgICog6ZmE5Yqg5qC35byPXG4gICAqL1xuICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXNcbiAgLyoqXG4gICAqIOWvueS6jiBUb29sdGlwIOWGheWuuei/m+ihjOe8lui+ke+8jOWmgu+8mnRpcEZvcm1hdHRlcj17dmFsdWUgPT4gYCR7dmFsdWV95YWDYH1cbiAgICovXG4gIHRpcEZvcm1hdHRlcj86IG51bGwgfCAoKHZhbHVlOiBudW1iZXIpID0+IFJlYWN0LlJlYWN0Tm9kZSlcbiAgLyoqXG4gICAqIOW8gOWQryB0aXBGb3JtYXR0ZXIg5ZCO77yM5a+55LqOIFRvb2x0aXAg55qEIHByb3BzXG4gICAqL1xuICB0b29sdGlwUHJvcHM/OiBJVG9vbHRpcFByb3BzXG4gIC8qKlxuICAgKiDorr7nva7lvZPliY3nmoTlgLxcbiAgICovXG4gIHZhbHVlPzogU2xpZGVyVmFsdWVcbn1cblxuLyoqXG4gKiDmu5HliqjmnaHnlKjkuo7ku6Xmi5bmi73nmoTmlrnlvI/vvIzmm7TkurrmgKfljJblnLDlrozmiJDovpPlhaXmlbDmja7jgIHpgInmi6nmlbDmja7ljLrpl7TnrYnnm67nmoTjgIJcbiAqL1xuY29uc3QgU2xpZGVyOiBSZWFjdC5GQzxJU2xpZGVyUHJvcHM+ID0gKHtcbiAgY2xhc3NOYW1lLFxuICBkZWZhdWx0VmFsdWUsXG4gIGlucHV0VmlzaWJsZSxcbiAgbWFya3MsXG4gIG1heCxcbiAgbWluLFxuICBvbkFmdGVyQ2hhbmdlLFxuICBvbkJlZm9yZUNoYW5nZSxcbiAgb25DaGFuZ2UsXG4gIHJhbmdlLFxuICBzdGVwLFxuICBzdHlsZSxcbiAgdGlwRm9ybWF0dGVyLFxuICB0b29sdGlwUHJvcHMsXG4gIHZhbHVlOiB2YWx1ZVByb3AsXG4gIC4uLm90aGVyUHJvcHNcbn06IElTbGlkZXJQcm9wcykgPT4ge1xuICBjb25zdCB0b29sdGlwTGVmdCA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgdG9vbHRpcFJpZ2h0ID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCB0b29sdGlwQ29tYmluZWQgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IFtyYW5nZVRvb2x0aXBDb21iaW5lZFN0YXR1cywgc2V0UmFuZ2VUb29sdGlwQ29tYmluZWRTdGF0dXNdID0gdXNlU3RhdGU8XG4gICAgXCJjb21iaW5lZFwiIHwgXCJzZXBhcmF0ZWRcIiB8IFwib3ZlcmxhcHBlZFwiXG4gID4oXCJzZXBhcmF0ZWRcIilcbiAgY29uc3QgW2FjdGl2ZSwgc2V0QWN0aXZlXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbdG9vbHRpcFZpc2libGVBcnJheSwgc2V0VG9vbHRpcFZpc2libGVBcnJheV0gPSB1c2VTdGF0ZTx7XG4gICAgW2luZGV4OiBudW1iZXJdOiBib29sZWFuXG4gIH0+KFtdKVxuICAvKipcbiAgICog5Yid5aeL5YyWIFNsaWRlciDnmoTlgLxcbiAgICogMS4g5LyY5YWI5Yik5patIFByb3AgdmFsdWXvvIzlpoLmnpzlrZjlnKggUHJvcCB2YWx1Ze+8jOWImSBTbGlkZXIg5a6M5YWo5Lqk55Sx5aSW6YOo5o6n5Yi277yM5YaF6YOo54q25oCB5peg5pWI77ybXG4gICAqIDIuIOWGjeWIpOaWrSBQcm9wIGRlZmF1bHRWYWx1Ze+8jOWmguaenOWtmOWcqOm7mOiupOWAvO+8jOWImSBTbGlkZXIg5YC85Li65q2k6buY6K6k5YC844CCXG4gICAqL1xuICBjb25zdCBbdmFsdWUsIHNldFZhbHVlXSA9IHVzZVN0YXRlKCgpOiBTbGlkZXJWYWx1ZSA9PiB7XG4gICAgbGV0IHZhbFxuICAgIGlmICh2YWx1ZVByb3AgIT09IG51bGwpIHtcbiAgICAgIHZhbCA9IHR5cGVvZiB2YWx1ZVByb3AgPT09IFwic3RyaW5nXCIgPyBOdW1iZXIodmFsdWVQcm9wKSA6IHZhbHVlUHJvcFxuICAgIH0gZWxzZSBpZiAoZGVmYXVsdFZhbHVlICE9PSBudWxsKSB7XG4gICAgICB2YWwgPVxuICAgICAgICB0eXBlb2YgZGVmYXVsdFZhbHVlID09PSBcInN0cmluZ1wiID8gTnVtYmVyKGRlZmF1bHRWYWx1ZSkgOiBkZWZhdWx0VmFsdWVcbiAgICB9XG4gICAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdmFsXG4gICAgfVxuICAgIHJldHVybiByYW5nZSA/IHZhbCA6IE51bWJlcih2YWwpXG4gIH0pXG5cbiAgLy8g55u45b2T5LqO55Sf5ZG95ZGo5pyfIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1xuICBpZiAoXG4gICAgdmFsdWVQcm9wICE9PSBudWxsICYmXG4gICAgdmFsdWVQcm9wICE9PSB1bmRlZmluZWQgJiZcbiAgICAodHlwZW9mIHZhbHVlUHJvcCA9PT0gXCJvYmplY3RcIiB8fCAhaXNOYU4odmFsdWVQcm9wKSkgJiZcbiAgICAodHlwZW9mIHZhbHVlUHJvcCA9PT0gXCJzdHJpbmdcIiA/IE51bWJlcih2YWx1ZVByb3ApIDogdmFsdWVQcm9wKSAhPT0gdmFsdWVcbiAgKSB7XG4gICAgc2V0VmFsdWUocmFuZ2UgPyB2YWx1ZVByb3AgOiBOdW1iZXIodmFsdWVQcm9wKSlcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8g6L+Z6YeM5YGa5Y+M5ruR5Z2X5qih5byP5pe255qEIHRvb2x0aXAg6K6+6K6hXG4gICAgaWYgKFxuICAgICAgcmFuZ2UgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUpICYmXG4gICAgICAodG9vbHRpcFZpc2libGVBcnJheVswXSB8fCBhY3RpdmUpICYmXG4gICAgICB0b29sdGlwTGVmdC5jdXJyZW50ICYmXG4gICAgICB0b29sdGlwUmlnaHQuY3VycmVudFxuICAgICkge1xuICAgICAgY29uc3QgcmVjdExlZnQgPSB0b29sdGlwTGVmdC5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICBjb25zdCByZWN0UmlnaHQgPSB0b29sdGlwUmlnaHQuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgLy8g5Yik5pat5Lik5LiqIHRvb2x0aXAg5piv5ZCm5Zyo5L2N572u5LiK5a2Y5Zyo6YeN5Y+gXG4gICAgICBpZiAocmVjdExlZnQubGVmdCA9PT0gcmVjdFJpZ2h0LmxlZnQpIHtcbiAgICAgICAgc2V0UmFuZ2VUb29sdGlwQ29tYmluZWRTdGF0dXMoXCJvdmVybGFwcGVkXCIpXG4gICAgICB9IGVsc2UgaWYgKHJlY3RMZWZ0LmxlZnQgKyByZWN0TGVmdC53aWR0aCA+IHJlY3RSaWdodC5sZWZ0KSB7XG4gICAgICAgIHNldFJhbmdlVG9vbHRpcENvbWJpbmVkU3RhdHVzKFwiY29tYmluZWRcIilcblxuICAgICAgICBpZiAodG9vbHRpcENvbWJpbmVkLmN1cnJlbnQpIHtcbiAgICAgICAgICB0b29sdGlwQ29tYmluZWQuY3VycmVudC5zdHlsZS5sZWZ0ID0gYGNhbGMoJHt2YWx1ZVswXX0lIC0gJHtcbiAgICAgICAgICAgIHJlY3RMZWZ0LndpZHRoIC8gMlxuICAgICAgICAgIH1weClgXG5cbiAgICAgICAgICB0b29sdGlwQ29tYmluZWQuY3VycmVudC5zdHlsZS53aWR0aCA9IGBjYWxjKCR7XG4gICAgICAgICAgICB2YWx1ZVsxXSAtIHZhbHVlWzBdXG4gICAgICAgICAgfSUgKyAke3JlY3RMZWZ0LndpZHRofXB4KWBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0UmFuZ2VUb29sdGlwQ29tYmluZWRTdGF0dXMoXCJzZXBhcmF0ZWRcIilcbiAgICAgIH1cbiAgICB9XG4gIH0sIFt2YWx1ZSwgcmFuZ2UsIGFjdGl2ZSwgdG9vbHRpcFZpc2libGVBcnJheV0pXG5cbiAgY29uc3QgdmFsdWVQcm9wc09iamVjdDogSVZhbHVlID0ge31cbiAgY29uc3QgbnVtZXJpY0lucHV0UHJvcHNPYmplY3Q6IElOdW1lcmljSW5wdXRWYWx1ZSA9IHt9XG5cbiAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCkge1xuICAgIHZhbHVlUHJvcHNPYmplY3QuZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlXG4gIH1cbiAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgdmFsdWVQcm9wc09iamVjdC52YWx1ZSA9IHZhbHVlXG4gIH1cblxuICBpZiAoZGVmYXVsdFZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KGRlZmF1bHRWYWx1ZSkpIHtcbiAgICBudW1lcmljSW5wdXRQcm9wc09iamVjdC5kZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWVcbiAgfVxuICBpZiAodmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgbnVtZXJpY0lucHV0UHJvcHNPYmplY3QudmFsdWUgPSB2YWx1ZVxuICB9XG5cbiAgY29uc3QgY2xhc3NTZXQgPSBjbGFzc05hbWVzKGNsYXNzTmFtZSwgYCR7cHJlZml4fS13cmFwcGVyYCwge1xuICAgIFtgJHtwcmVmaXh9LWFjdGl2ZWBdOiBhY3RpdmUsXG4gICAgW2Ake3ByZWZpeH0taGFzTWFya3NgXTogbWFya3MgJiYgT2JqZWN0LmtleXMobWFya3MpLmxlbmd0aCxcbiAgfSlcblxuICBjb25zdCBzdGVwU3RyaW5nID0gc3RlcCA/IHN0ZXAudG9TdHJpbmcoKSA6IFwiMVwiXG4gIGxldCBwcmVjaXNpb24gPSAwXG4gIGlmIChzdGVwU3RyaW5nLmluY2x1ZGVzKFwiLlwiKSkge1xuICAgIHByZWNpc2lvbiA9IHN0ZXBTdHJpbmcubGVuZ3RoIC0gc3RlcFN0cmluZy5pbmRleE9mKFwiLlwiKSAtIDFcbiAgfVxuXG4gIGNvbnN0IHNldFRvb2x0aXBWaXNpYmxlID0gKGJvb2w6IGJvb2xlYW4pID0+IHtcbiAgICBpZiAoYm9vbCkge1xuICAgICAgc2V0VG9vbHRpcFZpc2libGVBcnJheSh7XG4gICAgICAgIDA6IHRydWUsXG4gICAgICAgIDE6IHRydWUsXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoIWFjdGl2ZSkge1xuICAgICAgc2V0VG9vbHRpcFZpc2libGVBcnJheSh7XG4gICAgICAgIDA6IGZhbHNlLFxuICAgICAgICAxOiBmYWxzZSxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlV2l0aFRvb2x0aXAgPSAoe1xuICAgIGRyYWdnaW5nLFxuICAgIGluZGV4LFxuICAgIHZhbHVlOiB2YWwsXG4gICAgLi4ucmVzdFByb3BzXG4gIH06IElIYW5kbGVHZW5lcmF0b3JJbmZvKSA9PiB7XG4gICAgaWYgKHRpcEZvcm1hdHRlcikge1xuICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFJjSGFuZGxlXG4gICAgICAgICAgICB2YWx1ZT17dmFsfVxuICAgICAgICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiBzZXRUb29sdGlwVmlzaWJsZSh0cnVlKX1cbiAgICAgICAgICAgIG9uTW91c2VMZWF2ZT17KCkgPT4gc2V0VG9vbHRpcFZpc2libGUoZmFsc2UpfVxuICAgICAgICAgICAgey4uLnJlc3RQcm9wc31cbiAgICAgICAgICAvPlxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VG9vbHRpcFxuICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgcG9wdXA9e3RpcEZvcm1hdHRlcih2YWwpfVxuICAgICAgICAgIHBsYWNlbWVudD17KHRvb2x0aXBQcm9wcyAmJiB0b29sdGlwUHJvcHMucGxhY2VtZW50KSB8fCBcInRvcFwifVxuICAgICAgICAgIHZpc2libGU9e3Rvb2x0aXBWaXNpYmxlQXJyYXlbaW5kZXhdIHx8IGFjdGl2ZX1cbiAgICAgICAgPlxuICAgICAgICAgIDxSY0hhbmRsZVxuICAgICAgICAgICAgdmFsdWU9e3ZhbH1cbiAgICAgICAgICAgIG9uTW91c2VFbnRlcj17KCkgPT4gc2V0VG9vbHRpcFZpc2libGUodHJ1ZSl9XG4gICAgICAgICAgICBvbk1vdXNlTGVhdmU9eygpID0+IHNldFRvb2x0aXBWaXNpYmxlKGZhbHNlKX1cbiAgICAgICAgICAgIHsuLi5yZXN0UHJvcHN9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiA8UmNIYW5kbGUga2V5PXtpbmRleH0gdmFsdWU9e3ZhbH0gey4uLnJlc3RQcm9wc30gLz5cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUJlZm9yZUNoYW5nZSA9ICh2YWw6IFNsaWRlclZhbHVlKSA9PiB7XG4gICAgc2V0QWN0aXZlKHRydWUpXG4gICAgLy8g5ouW5ou95byA5aeL77yM5q2k5pe25L+d6K+B6L+H56iL5Lit6byg5qCH56e75Yqo5Yiw5ZOq6YeM5omL5Yq/6YO95LiN5Y+YXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmN1cnNvciA9IFwicG9pbnRlclwiXG4gICAgaWYgKG9uQmVmb3JlQ2hhbmdlKSB7XG4gICAgICBvbkJlZm9yZUNoYW5nZSh2YWwpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQWZ0ZXJDaGFuZ2UgPSAodmFsOiBTbGlkZXJWYWx1ZSkgPT4ge1xuICAgIHNldEFjdGl2ZShmYWxzZSlcbiAgICBzZXRUb29sdGlwVmlzaWJsZUFycmF5KHtcbiAgICAgIDA6IGZhbHNlLFxuICAgICAgMTogZmFsc2UsXG4gICAgfSlcbiAgICAvLyDmi5bmi73nu5PmnZ/vvIzmoLflvI/ph43nva5cbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuY3Vyc29yID0gXCJcIlxuICAgIGlmIChvbkFmdGVyQ2hhbmdlKSB7XG4gICAgICBvbkFmdGVyQ2hhbmdlKHZhbClcbiAgICB9XG4gIH1cblxuICBjb25zdCBjaGVja1ZhbHVlSXNWYWxpZCA9ICh2YWw6IFNsaWRlclZhbHVlKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHZhbCAhPT0gdmFsdWUgJiZcbiAgICAgIHZhbCAhPT0gbnVsbCAmJlxuICAgICAgdmFsICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIG1pbiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBtYXggIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdmFsID49IG1pbiAmJlxuICAgICAgdmFsIDw9IG1heFxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9ICh2YWw6IFNsaWRlclZhbHVlKSA9PiB7XG4gICAgY29uc3QgbmV3VmFsdWUgPSByYW5nZSA/IHZhbCA6IE51bWJlcih2YWwpXG4gICAgaWYgKHJhbmdlIHx8IGNoZWNrVmFsdWVJc1ZhbGlkKG5ld1ZhbHVlKSkge1xuICAgICAgaWYgKHZhbHVlUHJvcCA9PT0gbnVsbCkge1xuICAgICAgICBzZXRWYWx1ZShuZXdWYWx1ZSlcbiAgICAgIH1cbiAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICBvbkNoYW5nZShuZXdWYWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBzbGlkZXJQcm9wcyA9IHtcbiAgICBoYW5kbGU6IChpbmZvOiBJSGFuZGxlR2VuZXJhdG9ySW5mbykgPT4gaGFuZGxlV2l0aFRvb2x0aXAoaW5mbyksXG4gICAgbWFya3MsXG4gICAgbWluLFxuICAgIG1heCxcbiAgICBvbkFmdGVyQ2hhbmdlOiBoYW5kbGVBZnRlckNoYW5nZSxcbiAgICBvbkJlZm9yZUNoYW5nZTogaGFuZGxlQmVmb3JlQ2hhbmdlLFxuICAgIG9uQ2hhbmdlOiBoYW5kbGVDaGFuZ2UsXG4gICAgcHJlZml4Q2xzOiBwcmVmaXgsXG4gICAgc3RlcCxcbiAgICAuLi52YWx1ZVByb3BzT2JqZWN0LFxuICAgIC4uLm90aGVyUHJvcHMsXG4gIH1cblxuICBjb25zdCBzbGlkZXIgPSByYW5nZSA/IChcbiAgICA8UmNSYW5nZSB7Li4uc2xpZGVyUHJvcHN9IC8+XG4gICkgOiAoXG4gICAgPFJjU2xpZGVyIHsuLi5zbGlkZXJQcm9wc30gLz5cbiAgKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzU2V0fSBzdHlsZT17c3R5bGV9PlxuICAgICAge3RpcEZvcm1hdHRlciAmJiByYW5nZSAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoXCJhZHVpLXNsaWRlci1yYW5nZS10b29sdGlwLXdyYXBwZXJcIiwge1xuICAgICAgICAgICAgXCJhZHVpLXNsaWRlci1yYW5nZS10b29sdGlwLXdyYXBwZXItdmlzaWJsZVwiOlxuICAgICAgICAgICAgICB0b29sdGlwVmlzaWJsZUFycmF5WzBdIHx8IGFjdGl2ZSxcbiAgICAgICAgICAgIFwiYWR1aS1zbGlkZXItcmFuZ2UtdG9vbHRpcC13cmFwcGVyLWNvbWJpbmVkXCI6XG4gICAgICAgICAgICAgIHJhbmdlVG9vbHRpcENvbWJpbmVkU3RhdHVzID09PSBcImNvbWJpbmVkXCIsXG4gICAgICAgICAgICBcImFkdWktc2xpZGVyLXJhbmdlLXRvb2x0aXAtd3JhcHBlci1vdmVybGFwcGVkXCI6XG4gICAgICAgICAgICAgIHJhbmdlVG9vbHRpcENvbWJpbmVkU3RhdHVzID09PSBcIm92ZXJsYXBwZWRcIixcbiAgICAgICAgICB9KX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImFkdWktc2xpZGVyLXJhbmdlLXRvb2x0aXAgYWR1aS1zbGlkZXItcmFuZ2UtdG9vbHRpcC1sZWZ0XCJcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGxlZnQ6IGAke3ZhbHVlWzBdfSVgLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHJlZj17dG9vbHRpcExlZnR9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RpcEZvcm1hdHRlcih2YWx1ZVswXSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWR1aS1zbGlkZXItcmFuZ2UtdG9vbHRpcCBhZHVpLXNsaWRlci1yYW5nZS10b29sdGlwLXJpZ2h0XCJcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGxlZnQ6IGAke3ZhbHVlWzFdfSVgLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHJlZj17dG9vbHRpcFJpZ2h0fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aXBGb3JtYXR0ZXIodmFsdWVbMV0pfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImFkdWktc2xpZGVyLXJhbmdlLXRvb2x0aXAtY29tYmluZWRcIlxuICAgICAgICAgICAgcmVmPXt0b29sdGlwQ29tYmluZWR9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RpcEZvcm1hdHRlcih2YWx1ZVswXSl9IC0ge3RpcEZvcm1hdHRlcih2YWx1ZVsxXSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIHtzbGlkZXJ9XG4gICAgICB7aW5wdXRWaXNpYmxlICYmICFyYW5nZSAmJiAoXG4gICAgICAgIDxOdW1lcmljSW5wdXRcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlwiXG4gICAgICAgICAgcHJlY2lzaW9uPXtwcmVjaXNpb259XG4gICAgICAgICAgb25DaGFuZ2U9eyh2YWwpID0+IHtcbiAgICAgICAgICAgIGhhbmRsZUNoYW5nZSh0eXBlb2YgdmFsID09PSBcInN0cmluZ1wiID8gMCA6IHZhbClcbiAgICAgICAgICB9fVxuICAgICAgICAgIHN0ZXA9e3N0ZXB9XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIG1hcmdpbkxlZnQ6IFwiMTJweFwiLFxuICAgICAgICAgICAgd2lkdGg6IFwiNTZweFwiLFxuICAgICAgICAgICAgaGVpZ2h0OiBcIjIycHhcIixcbiAgICAgICAgICB9fVxuICAgICAgICAgIHsuLi5udW1lcmljSW5wdXRQcm9wc09iamVjdH1cbiAgICAgICAgICB7Li4ub3RoZXJQcm9wc31cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gIClcbn1cblxuU2xpZGVyLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIOmZhOWKoOexu+WQjVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICog5Yid5aeL55qE6buY6K6k5YC8XG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiDmmK/lkKbmlK/mjIHovpPlhaXmoYbvvIzmraQgcHJvcCDkuI7lj4zmu5HlnZfmqKHlvI/kupLmlqVcbiAgICovXG4gIGlucHV0VmlzaWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiDliLvluqbmoIforrDvvIzkvovlpoLvvJp7MjU6IFwiMjUlXCIsIDUwOiBcIjUw4oSDXCJ9XG4gICAqL1xuICBtYXJrczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIOacgOWkp+WAvFxuICAgKi9cbiAgbWF4OiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICog5pyA5bCP5YC8XG4gICAqL1xuICBtaW46IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiDlnKggYG9ubW91c2V1cGAg5pe26Kem5Y+R55qEIGhhbmRsZXJcbiAgICovXG4gIG9uQWZ0ZXJDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICog5ZyoIGBvbm1vdXNlZG93bmAg5pe26Kem5Y+R55qEIGhhbmRsZXJcbiAgICovXG4gIG9uQmVmb3JlQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIOWcqOWAvOWPkeeUn+WPmOWMluaXtuinpuWPkeeahCBoYW5kbGVyXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiDlj4zmu5HlnZfmqKHlvI9cbiAgICovXG4gIHJhbmdlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIOatpemVv++8jOW/hemhu+Wkp+S6jiAwXG4gICAqL1xuICBzdGVwOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICog6ZmE5Yqg5qC35byPXG4gICAqL1xuICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIOWvueS6jiBUb29sdGlwIOWGheWuuei/m+ihjOe8lui+ke+8jOWmgu+8mnRpcEZvcm1hdHRlcj17dmFsdWUgPT4gYCR7dmFsdWV95YWDYH1cbiAgICovXG4gIHRpcEZvcm1hdHRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiDlvIDlkK8gdGlwRm9ybWF0dGVyIOWQju+8jOWvueS6jiBUb29sdGlwIOeahCBwcm9wc1xuICAgKi9cbiAgdG9vbHRpcFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICog6K6+572u5b2T5YmN55qE5YC8XG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbn1cblxuU2xpZGVyLmRlZmF1bHRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lOiB1bmRlZmluZWQsXG4gIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgaW5wdXRWaXNpYmxlOiB0cnVlLFxuICBtYXJrczoge30sXG4gIG1heDogMTAwLFxuICBtaW46IDAsXG4gIG9uQWZ0ZXJDaGFuZ2U6IG5vb3AsXG4gIG9uQmVmb3JlQ2hhbmdlOiBub29wLFxuICBvbkNoYW5nZTogbm9vcCxcbiAgcmFuZ2U6IGZhbHNlLFxuICBzdGVwOiAxLFxuICBzdHlsZToge30sXG4gIHRpcEZvcm1hdHRlcjogbnVsbCxcbiAgdG9vbHRpcFByb3BzOiB7fSxcbiAgdmFsdWU6IG51bGwsXG59XG5cbmV4cG9ydCBkZWZhdWx0IFNsaWRlclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxVQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxXQUFBLEdBQUFELHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFGLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSyxNQUFBLEdBQUFILHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBTSxPQUFBLEdBQUFKLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBTyxhQUFBLEdBQUFMLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBUSxRQUFBLEdBQUFOLHNCQUFBLENBQUFGLE9BQUE7QUFDQUEsT0FBQTtBQUFnQixJQUFBUyxTQUFBO0VBQUFDLFVBQUE7QUFBQSxTQUFBUix1QkFBQVMsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLGdCQUFBQSxDQUFBO0FBQUEsU0FBQUUseUJBQUFGLENBQUEsNkJBQUFHLE9BQUEsbUJBQUFD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