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>
257 lines (256 loc) • 45.1 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); }
var _react = _interopRequireWildcard(require("react"));
var _enzyme = require("enzyme");
var _reactTestRenderer = _interopRequireDefault(require("react-test-renderer"));
var _ = _interopRequireDefault(require(".."));
var _core = require("../core");
var _testUtils = require("react-dom/test-utils");
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 _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 _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), 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 _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
var RangePicker = _["default"].RangePicker;
var RangePickerMounter = function (_Component) {
function RangePickerMounter() {
var _this;
_classCallCheck(this, RangePickerMounter);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _callSuper(this, RangePickerMounter, [].concat(args));
_this.state = {
component: null,
value: [new Date(), new Date()],
visible: true
};
return _this;
}
_inherits(RangePickerMounter, _Component);
return _createClass(RangePickerMounter, [{
key: "render",
value: function render() {
var _this2 = this;
var _this$state = this.state,
value = _this$state.value,
visible = _this$state.visible;
return _react["default"].createElement(RangePicker, _extends({
shortcuts: [{
label: "祖国生日",
value: [new Date("2020-10-01"), new Date("2020-10-07")]
}],
ref: function ref(component) {
if (!_this2.state.component) {
_this2.setState({
component: component
});
}
},
closeOnSelect: true,
value: value,
visible: visible,
onChange: function onChange(val) {
return _this2.setState({
value: val
});
},
onVisibleChange: function onVisibleChange(bool) {
return _this2.setState({
visible: bool
});
}
}, this.props));
}
}]);
}(_react.Component);
describe("RangePicker", function () {
beforeAll(function () {
jest.useFakeTimers();
});
afterAll(function () {
jest.useRealTimers();
});
it("是否正确渲染", function () {
var wrapper = _reactTestRenderer["default"].create(_react["default"].createElement(RangePicker, null));
expect(wrapper).toMatchSnapshot();
});
it("内部驱动", function () {
var val = [new Date("2020-02-02"), new Date("2020-03-01")];
var wrapper = (0, _enzyme.mount)(_react["default"].createElement(RangePicker, {
defaultValue: val,
defaultVisible: false,
closeOnSelect: true
}));
expect(wrapper.find("input").at(0).props().value).toBe((0, _core.convertDateRangeToString)(val));
wrapper.find("input").simulate("focus");
expect(wrapper.find("Popover").at(0).props().visible).toBe(true);
wrapper.find("input").simulate("change", {
target: {
value: ""
}
});
expect(wrapper.find("input").props().value).toBe("");
wrapper.find("input").simulate("change", {
target: {
value: "2020-02-22 - 2020-02-28"
}
});
expect(wrapper.find("input").props().value).toBe("2020-02-22 - 2020-02-28");
(0, _testUtils.act)(function () {
wrapper.find("input").simulate("keydown", {
key: "enter",
keyCode: 13
});
jest.runAllTimers();
wrapper.update();
expect(wrapper.find("Popover").at(0).props().visible).toBe(false);
});
(0, _testUtils.act)(function () {
wrapper.find(".adui-date-day").at(14).simulate("click");
wrapper.find(".adui-date-day").at(15).simulate("click");
var expectedVal = (0, _core.convertDateRangeToString)([new Date(wrapper.find(".adui-date-day").at(14).props()["aria-label"] + " 12:00"), new Date(wrapper.find(".adui-date-day").at(15).props()["aria-label"] + " 12:00")]);
jest.advanceTimersByTime(350);
wrapper.update();
expect(wrapper.find("Popover").at(0).props().visible).toBe(false);
});
});
it("外部控制", function () {
var val = [new Date(), new Date()];
var wrapper = (0, _enzyme.mount)(_react["default"].createElement(RangePicker, {
value: [new Date(), new Date()],
visible: true,
closeOnSelect: true
}));
expect(wrapper.find("input").at(0).props().value).toBe((0, _core.convertDateRangeToString)(val));
expect(wrapper.find("Popover").at(0).props().visible).toBe(true);
(0, _testUtils.act)(function () {
wrapper.find(".adui-date-day").at(14).simulate("click");
wrapper.find(".adui-date-day").at(15).simulate("click");
jest.advanceTimersByTime(350);
wrapper.update();
expect(wrapper.find("input").at(0).props().value).toBe((0, _core.convertDateRangeToString)(val));
});
(0, _testUtils.act)(function () {
wrapper.find(".adui-date-day").at(15).simulate("click");
wrapper.find(".adui-date-day").at(16).simulate("click");
jest.advanceTimersByTime(350);
wrapper.update();
expect(wrapper.find("input").at(0).props().value).toBe((0, _core.convertDateRangeToString)(val));
expect(wrapper.find("Popover").at(0).props().visible).toBe(true);
});
var mounter = (0, _enzyme.mount)(_react["default"].createElement(RangePickerMounter, null));
var today = (0, _core.convertDateRangeToString)(new Date());
mounter.find("input").simulate("change", {
target: {
value: "2020-02-22 - 2020-02-26"
}
});
expect((0, _core.convertDateRangeToString)(mounter.state().value)).toBe("2020-02-22 - 2020-02-26");
mounter.find("input").simulate("change", {
target: {
value: "2020-02-25 - 2020-02-26"
}
});
expect((0, _core.convertDateRangeToString)(mounter.state().value)).toBe("2020-02-25 - 2020-02-26");
mounter.find("input").simulate("change", {
target: {
value: ""
}
});
expect((0, _core.convertDateRangeToString)(mounter.state().value)).toBe("");
expect(mounter.find("Popover").at(0).props().visible).toBe(true);
(0, _testUtils.act)(function () {
mounter.find(".adui-date-day").at(15).simulate("click");
mounter.find(".adui-date-day").at(16).simulate("click");
jest.runAllTimers();
mounter.update();
});
});
it("DayPicker 操作", function () {
var today = new Date();
var wrapper = (0, _enzyme.mount)(_react["default"].createElement(RangePickerMounter, null));
var expectedRange = [];
(0, _testUtils.act)(function () {
wrapper.find(".adui-date-day").at(10).simulate("click");
expectedRange[0] = new Date(wrapper.find(".adui-date-day").at(10).props()["aria-label"] + " 12:00");
wrapper.find("button").at(1).simulate("click");
wrapper.find("button").at(1).simulate("click");
jest.runAllTimers();
wrapper.update();
});
(0, _testUtils.act)(function () {
wrapper.find(".adui-date-day").at(10).simulate("click");
expectedRange[1] = new Date(wrapper.find(".adui-date-day").at(10).props()["aria-label"] + " 12:00");
jest.runAllTimers();
wrapper.update();
expect((0, _core.convertDateRangeToString)(wrapper.state().value) === (0, _core.convertDateRangeToString)(expectedRange)).toBe(true);
});
(0, _testUtils.act)(function () {
wrapper.find(".adui-date-shortcut").at(0).simulate("keydown", {
key: "enter",
keyCode: 13
});
jest.runAllTimers();
wrapper.update();
expect((0, _core.convertDateRangeToString)(wrapper.state().value)).toBe("2020-10-01 - 2020-10-07");
});
var wrapperForCoverage0 = (0, _enzyme.mount)(_react["default"].createElement(RangePickerMounter, {
disabled: true
}));
wrapperForCoverage0.state().component.handleVisibleChange(false);
wrapperForCoverage0.find(".adui-date-day").at(14).simulate("mouseenter");
wrapperForCoverage0.find(".adui-date-day").at(14).simulate("mouseleave");
jest.runAllTimers();
});
it("测试 min max", function () {
var wrapper = (0, _enzyme.mount)(_react["default"].createElement(RangePickerMounter, {
minDate: new Date("2018-12-31"),
maxDate: new Date("2020-01-01")
}));
(0, _testUtils.act)(function () {
wrapper.find("select").at(0).simulate("change", {
target: {
value: "2019"
}
});
wrapper.find("select").at(1).simulate("change", {
target: {
value: "1"
}
});
jest.runAllTimers();
wrapper.update();
wrapper.find(".adui-date-day").at(14).simulate("click");
jest.runAllTimers();
wrapper.update();
wrapper.find("select").at(1).simulate("change", {
target: {
value: "11"
}
});
wrapper.find("select").at(0).simulate("change", {
target: {
value: "2020"
}
});
jest.runAllTimers();
wrapper.update();
wrapper.find(".adui-date-day").at(14).simulate("click");
jest.runAllTimers();
wrapper.update();
});
});
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfZW56eW1lIiwiX3JlYWN0VGVzdFJlbmRlcmVyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl8iLCJfY29yZSIsIl90ZXN0VXRpbHMiLCJlIiwiX19lc01vZHVsZSIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsIldlYWtNYXAiLCJyIiwidCIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfZXh0ZW5kcyIsImFzc2lnbiIsImJpbmQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcHBseSIsIl9jbGFzc0NhbGxDaGVjayIsIlR5cGVFcnJvciIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwibyIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIl90b1Byb3BlcnR5S2V5Iiwia2V5IiwiX2NyZWF0ZUNsYXNzIiwicHJvdG90eXBlIiwiX3RvUHJpbWl0aXZlIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJTdHJpbmciLCJOdW1iZXIiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsIlJlZmVyZW5jZUVycm9yIiwiQm9vbGVhbiIsInZhbHVlT2YiLCJzZXRQcm90b3R5cGVPZiIsImdldFByb3RvdHlwZU9mIiwiX2luaGVyaXRzIiwiY3JlYXRlIiwidmFsdWUiLCJfc2V0UHJvdG90eXBlT2YiLCJSYW5nZVBpY2tlciIsIkRhdGVQaWNrZXIiLCJSYW5nZVBpY2tlck1vdW50ZXIiLCJfQ29tcG9uZW50IiwiX3RoaXMiLCJfbGVuIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNvbmNhdCIsInN0YXRlIiwiY29tcG9uZW50IiwiRGF0ZSIsInZpc2libGUiLCJyZW5kZXIiLCJfdGhpczIiLCJfdGhpcyRzdGF0ZSIsImNyZWF0ZUVsZW1lbnQiLCJzaG9ydGN1dHMiLCJsYWJlbCIsInJlZiIsInNldFN0YXRlIiwiY2xvc2VPblNlbGVjdCIsIm9uQ2hhbmdlIiwidmFsIiwib25WaXNpYmxlQ2hhbmdlIiwiYm9vbCIsInByb3BzIiwiQ29tcG9uZW50IiwiZGVzY3JpYmUiLCJiZWZvcmVBbGwiLCJqZXN0IiwidXNlRmFrZVRpbWVycyIsImFmdGVyQWxsIiwidXNlUmVhbFRpbWVycyIsIml0Iiwid3JhcHBlciIsIlRlc3RSZW5kZXJlciIsImV4cGVjdCIsInRvTWF0Y2hTbmFwc2hvdCIsIm1vdW50IiwiZGVmYXVsdFZhbHVlIiwiZGVmYXVsdFZpc2libGUiLCJmaW5kIiwiYXQiLCJ0b0JlIiwiY29udmVydERhdGVSYW5nZVRvU3RyaW5nIiwic2ltdWxhdGUiLCJ0YXJnZXQiLCJhY3QiLCJrZXlDb2RlIiwicnVuQWxsVGltZXJzIiwidXBkYXRlIiwiZXhwZWN0ZWRWYWwiLCJhZHZhbmNlVGltZXJzQnlUaW1lIiwibW91bnRlciIsInRvZGF5IiwiZXhwZWN0ZWRSYW5nZSIsIndyYXBwZXJGb3JDb3ZlcmFnZTAiLCJkaXNhYmxlZCIsImhhbmRsZVZpc2libGVDaGFuZ2UiLCJtaW5EYXRlIiwibWF4RGF0ZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbXBvbmVudHMvZGF0ZS1waWNrZXIvX190ZXN0c19fL1JhbmdlUGlja2VyLnRlc3QudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBAdHMtbm9jaGVja1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgeyBtb3VudCB9IGZyb20gXCJlbnp5bWVcIlxuaW1wb3J0IFRlc3RSZW5kZXJlciBmcm9tIFwicmVhY3QtdGVzdC1yZW5kZXJlclwiXG5pbXBvcnQgRGF0ZVBpY2tlciBmcm9tIFwiLi5cIlxuaW1wb3J0IHsgY29udmVydERhdGVSYW5nZVRvU3RyaW5nLCBjb252ZXJ0RGF0ZVRvU3RyaW5nIH0gZnJvbSBcIi4uL2NvcmVcIlxuaW1wb3J0IHsgYWN0IH0gZnJvbSBcInJlYWN0LWRvbS90ZXN0LXV0aWxzXCJcblxuY29uc3QgUmFuZ2VQaWNrZXIgPSBEYXRlUGlja2VyLlJhbmdlUGlja2VyXG5cbmNsYXNzIFJhbmdlUGlja2VyTW91bnRlciBleHRlbmRzIENvbXBvbmVudCB7XG4gIHN0YXRlID0ge1xuICAgIGNvbXBvbmVudDogbnVsbCxcbiAgICB2YWx1ZTogW25ldyBEYXRlKCksIG5ldyBEYXRlKCldLFxuICAgIHZpc2libGU6IHRydWUsXG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyB2YWx1ZSwgdmlzaWJsZSB9ID0gdGhpcy5zdGF0ZVxuICAgIHJldHVybiAoXG4gICAgICA8UmFuZ2VQaWNrZXJcbiAgICAgICAgc2hvcnRjdXRzPXtbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbGFiZWw6IFwi56WW5Zu955Sf5pelXCIsXG4gICAgICAgICAgICB2YWx1ZTogW25ldyBEYXRlKFwiMjAyMC0xMC0wMVwiKSwgbmV3IERhdGUoXCIyMDIwLTEwLTA3XCIpXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdfVxuICAgICAgICByZWY9eyhjb21wb25lbnQpID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMuc3RhdGUuY29tcG9uZW50KSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgY29tcG9uZW50IH0pXG4gICAgICAgICAgfVxuICAgICAgICB9fVxuICAgICAgICBjbG9zZU9uU2VsZWN0XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgdmlzaWJsZT17dmlzaWJsZX1cbiAgICAgICAgb25DaGFuZ2U9eyh2YWwpID0+IHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdmFsIH0pfVxuICAgICAgICBvblZpc2libGVDaGFuZ2U9eyhib29sKSA9PiB0aGlzLnNldFN0YXRlKHsgdmlzaWJsZTogYm9vbCB9KX1cbiAgICAgICAgey4uLnRoaXMucHJvcHN9XG4gICAgICAvPlxuICAgIClcbiAgfVxufVxuXG5kZXNjcmliZShcIlJhbmdlUGlja2VyXCIsICgpID0+IHtcbiAgYmVmb3JlQWxsKCgpID0+IHtcbiAgICBqZXN0LnVzZUZha2VUaW1lcnMoKVxuICB9KVxuXG4gIGFmdGVyQWxsKCgpID0+IHtcbiAgICBqZXN0LnVzZVJlYWxUaW1lcnMoKVxuICB9KVxuXG4gIGl0KFwi5piv5ZCm5q2j56Gu5riy5p+TXCIsICgpID0+IHtcbiAgICBjb25zdCB3cmFwcGVyID0gVGVzdFJlbmRlcmVyLmNyZWF0ZSg8UmFuZ2VQaWNrZXIgLz4pXG4gICAgZXhwZWN0KHdyYXBwZXIpLnRvTWF0Y2hTbmFwc2hvdCgpXG4gIH0pXG5cbiAgaXQoXCLlhoXpg6jpqbHliqhcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHZhbCA9IFtuZXcgRGF0ZShcIjIwMjAtMDItMDJcIiksIG5ldyBEYXRlKFwiMjAyMC0wMy0wMVwiKV1cbiAgICBjb25zdCB3cmFwcGVyID0gbW91bnQoXG4gICAgICA8UmFuZ2VQaWNrZXIgZGVmYXVsdFZhbHVlPXt2YWx9IGRlZmF1bHRWaXNpYmxlPXtmYWxzZX0gY2xvc2VPblNlbGVjdCAvPlxuICAgIClcbiAgICBleHBlY3Qod3JhcHBlci5maW5kKFwiaW5wdXRcIikuYXQoMCkucHJvcHMoKS52YWx1ZSkudG9CZShcbiAgICAgIGNvbnZlcnREYXRlUmFuZ2VUb1N0cmluZyh2YWwpXG4gICAgKVxuXG4gICAgd3JhcHBlci5maW5kKFwiaW5wdXRcIikuc2ltdWxhdGUoXCJmb2N1c1wiKVxuXG4gICAgZXhwZWN0KHdyYXBwZXIuZmluZChcIlBvcG92ZXJcIikuYXQoMCkucHJvcHMoKS52aXNpYmxlKS50b0JlKHRydWUpXG5cbiAgICB3cmFwcGVyLmZpbmQoXCJpbnB1dFwiKS5zaW11bGF0ZShcImNoYW5nZVwiLCB7IHRhcmdldDogeyB2YWx1ZTogXCJcIiB9IH0pXG4gICAgZXhwZWN0KHdyYXBwZXIuZmluZChcImlucHV0XCIpLnByb3BzKCkudmFsdWUpLnRvQmUoXCJcIilcblxuICAgIHdyYXBwZXJcbiAgICAgIC5maW5kKFwiaW5wdXRcIilcbiAgICAgIC5zaW11bGF0ZShcImNoYW5nZVwiLCB7IHRhcmdldDogeyB2YWx1ZTogXCIyMDIwLTAyLTIyIC0gMjAyMC0wMi0yOFwiIH0gfSlcbiAgICBleHBlY3Qod3JhcHBlci5maW5kKFwiaW5wdXRcIikucHJvcHMoKS52YWx1ZSkudG9CZShcIjIwMjAtMDItMjIgLSAyMDIwLTAyLTI4XCIpXG5cbiAgICBhY3QoKCkgPT4ge1xuICAgICAgd3JhcHBlci5maW5kKFwiaW5wdXRcIikuc2ltdWxhdGUoXCJrZXlkb3duXCIsIHsga2V5OiBcImVudGVyXCIsIGtleUNvZGU6IDEzIH0pXG4gICAgICBqZXN0LnJ1bkFsbFRpbWVycygpXG4gICAgICB3cmFwcGVyLnVwZGF0ZSgpXG4gICAgICBleHBlY3Qod3JhcHBlci5maW5kKFwiUG9wb3ZlclwiKS5hdCgwKS5wcm9wcygpLnZpc2libGUpLnRvQmUoZmFsc2UpXG4gICAgfSlcblxuICAgIGFjdCgoKSA9PiB7XG4gICAgICB3cmFwcGVyLmZpbmQoXCIuYWR1aS1kYXRlLWRheVwiKS5hdCgxNCkuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgICAgd3JhcHBlci5maW5kKFwiLmFkdWktZGF0ZS1kYXlcIikuYXQoMTUpLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICAgIGNvbnN0IGV4cGVjdGVkVmFsID0gY29udmVydERhdGVSYW5nZVRvU3RyaW5nKFtcbiAgICAgICAgbmV3IERhdGUoXG4gICAgICAgICAgd3JhcHBlci5maW5kKFwiLmFkdWktZGF0ZS1kYXlcIikuYXQoMTQpLnByb3BzKClbXCJhcmlhLWxhYmVsXCJdICsgXCIgMTI6MDBcIlxuICAgICAgICApLFxuICAgICAgICBuZXcgRGF0ZShcbiAgICAgICAgICB3cmFwcGVyLmZpbmQoXCIuYWR1aS1kYXRlLWRheVwiKS5hdCgxNSkucHJvcHMoKVtcImFyaWEtbGFiZWxcIl0gKyBcIiAxMjowMFwiXG4gICAgICAgICksXG4gICAgICBdKVxuICAgICAgLy8g562J5b6FIDM1MG1zXG4gICAgICBqZXN0LmFkdmFuY2VUaW1lcnNCeVRpbWUoMzUwKVxuICAgICAgd3JhcHBlci51cGRhdGUoKVxuICAgICAgZXhwZWN0KHdyYXBwZXIuZmluZChcIlBvcG92ZXJcIikuYXQoMCkucHJvcHMoKS52aXNpYmxlKS50b0JlKGZhbHNlKVxuICAgIH0pXG4gIH0pXG5cbiAgaXQoXCLlpJbpg6jmjqfliLZcIiwgKCkgPT4ge1xuICAgIC8qKlxuICAgICAqIOS7peS4i+mDveaYr+mqjOivgeWklumDqOaOp+WItuaXtuWGhemDqOeahOWkseaViFxuICAgICAqL1xuICAgIGNvbnN0IHZhbCA9IFtuZXcgRGF0ZSgpLCBuZXcgRGF0ZSgpXVxuICAgIGNvbnN0IHdyYXBwZXIgPSBtb3VudChcbiAgICAgIDxSYW5nZVBpY2tlciB2YWx1ZT17W25ldyBEYXRlKCksIG5ldyBEYXRlKCldfSB2aXNpYmxlIGNsb3NlT25TZWxlY3QgLz5cbiAgICApXG4gICAgZXhwZWN0KHdyYXBwZXIuZmluZChcImlucHV0XCIpLmF0KDApLnByb3BzKCkudmFsdWUpLnRvQmUoXG4gICAgICBjb252ZXJ0RGF0ZVJhbmdlVG9TdHJpbmcodmFsKVxuICAgIClcblxuICAgIGV4cGVjdCh3cmFwcGVyLmZpbmQoXCJQb3BvdmVyXCIpLmF0KDApLnByb3BzKCkudmlzaWJsZSkudG9CZSh0cnVlKVxuXG4gICAgYWN0KCgpID0+IHtcbiAgICAgIHdyYXBwZXIuZmluZChcIi5hZHVpLWRhdGUtZGF5XCIpLmF0KDE0KS5zaW11bGF0ZShcImNsaWNrXCIpXG4gICAgICB3cmFwcGVyLmZpbmQoXCIuYWR1aS1kYXRlLWRheVwiKS5hdCgxNSkuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgICAgLy8g562J5b6FIDM1MG1zXG4gICAgICBqZXN0LmFkdmFuY2VUaW1lcnNCeVRpbWUoMzUwKVxuICAgICAgd3JhcHBlci51cGRhdGUoKVxuICAgICAgZXhwZWN0KHdyYXBwZXIuZmluZChcImlucHV0XCIpLmF0KDApLnByb3BzKCkudmFsdWUpLnRvQmUoXG4gICAgICAgIGNvbnZlcnREYXRlUmFuZ2VUb1N0cmluZyh2YWwpXG4gICAgICApXG4gICAgfSlcblxuICAgIGFjdCgoKSA9PiB7XG4gICAgICB3cmFwcGVyLmZpbmQoXCIuYWR1aS1kYXRlLWRheVwiKS5hdCgxNSkuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgICAgd3JhcHBlci5maW5kKFwiLmFkdWktZGF0ZS1kYXlcIikuYXQoMTYpLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICAgIC8vIOetieW+hSAzNTBtc1xuICAgICAgamVzdC5hZHZhbmNlVGltZXJzQnlUaW1lKDM1MClcbiAgICAgIHdyYXBwZXIudXBkYXRlKClcbiAgICAgIGV4cGVjdCh3cmFwcGVyLmZpbmQoXCJpbnB1dFwiKS5hdCgwKS5wcm9wcygpLnZhbHVlKS50b0JlKFxuICAgICAgICBjb252ZXJ0RGF0ZVJhbmdlVG9TdHJpbmcodmFsKVxuICAgICAgKVxuICAgICAgZXhwZWN0KHdyYXBwZXIuZmluZChcIlBvcG92ZXJcIikuYXQoMCkucHJvcHMoKS52aXNpYmxlKS50b0JlKHRydWUpXG4gICAgfSlcblxuICAgIC8qKlxuICAgICAqIOS7peS4i+aYr+mqjOivgeWklumDqOaOp+WItuaXtiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMg55qE5pyJ5pWIXG4gICAgICovXG4gICAgY29uc3QgbW91bnRlciA9IG1vdW50KDxSYW5nZVBpY2tlck1vdW50ZXIgLz4pXG4gICAgY29uc3QgdG9kYXkgPSBjb252ZXJ0RGF0ZVJhbmdlVG9TdHJpbmcobmV3IERhdGUoKSlcbiAgICBtb3VudGVyXG4gICAgICAuZmluZChcImlucHV0XCIpXG4gICAgICAuc2ltdWxhdGUoXCJjaGFuZ2VcIiwgeyB0YXJnZXQ6IHsgdmFsdWU6IFwiMjAyMC0wMi0yMiAtIDIwMjAtMDItMjZcIiB9IH0pXG4gICAgZXhwZWN0KGNvbnZlcnREYXRlUmFuZ2VUb1N0cmluZyhtb3VudGVyLnN0YXRlKCkudmFsdWUpKS50b0JlKFxuICAgICAgXCIyMDIwLTAyLTIyIC0gMjAyMC0wMi0yNlwiXG4gICAgKVxuICAgIG1vdW50ZXJcbiAgICAgIC5maW5kKFwiaW5wdXRcIilcbiAgICAgIC5zaW11bGF0ZShcImNoYW5nZVwiLCB7IHRhcmdldDogeyB2YWx1ZTogXCIyMDIwLTAyLTI1IC0gMjAyMC0wMi0yNlwiIH0gfSlcbiAgICBleHBlY3QoY29udmVydERhdGVSYW5nZVRvU3RyaW5nKG1vdW50ZXIuc3RhdGUoKS52YWx1ZSkpLnRvQmUoXG4gICAgICBcIjIwMjAtMDItMjUgLSAyMDIwLTAyLTI2XCJcbiAgICApXG4gICAgbW91bnRlci5maW5kKFwiaW5wdXRcIikuc2ltdWxhdGUoXCJjaGFuZ2VcIiwgeyB0YXJnZXQ6IHsgdmFsdWU6IFwiXCIgfSB9KVxuICAgIGV4cGVjdChjb252ZXJ0RGF0ZVJhbmdlVG9TdHJpbmcobW91bnRlci5zdGF0ZSgpLnZhbHVlKSkudG9CZShcIlwiKVxuICAgIGV4cGVjdChtb3VudGVyLmZpbmQoXCJQb3BvdmVyXCIpLmF0KDApLnByb3BzKCkudmlzaWJsZSkudG9CZSh0cnVlKVxuICAgIGFjdCgoKSA9PiB7XG4gICAgICBtb3VudGVyLmZpbmQoXCIuYWR1aS1kYXRlLWRheVwiKS5hdCgxNSkuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgICAgbW91bnRlci5maW5kKFwiLmFkdWktZGF0ZS1kYXlcIikuYXQoMTYpLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICAgIGplc3QucnVuQWxsVGltZXJzKClcbiAgICAgIG1vdW50ZXIudXBkYXRlKClcbiAgICB9KVxuICB9KVxuXG4gIGl0KFwiRGF5UGlja2VyIOaTjeS9nFwiLCAoKSA9PiB7XG4gICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpXG4gICAgY29uc3Qgd3JhcHBlciA9IG1vdW50KDxSYW5nZVBpY2tlck1vdW50ZXIgLz4pXG4gICAgY29uc3QgZXhwZWN0ZWRSYW5nZSA9IFtdXG4gICAgYWN0KCgpID0+IHtcbiAgICAgIHdyYXBwZXIuZmluZChcIi5hZHVpLWRhdGUtZGF5XCIpLmF0KDEwKS5zaW11bGF0ZShcImNsaWNrXCIpXG4gICAgICBleHBlY3RlZFJhbmdlWzBdID0gbmV3IERhdGUoXG4gICAgICAgIHdyYXBwZXIuZmluZChcIi5hZHVpLWRhdGUtZGF5XCIpLmF0KDEwKS5wcm9wcygpW1wiYXJpYS1sYWJlbFwiXSArIFwiIDEyOjAwXCJcbiAgICAgIClcbiAgICAgIHdyYXBwZXIuZmluZChcImJ1dHRvblwiKS5hdCgxKS5zaW11bGF0ZShcImNsaWNrXCIpXG4gICAgICB3cmFwcGVyLmZpbmQoXCJidXR0b25cIikuYXQoMSkuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgICAgamVzdC5ydW5BbGxUaW1lcnMoKVxuICAgICAgd3JhcHBlci51cGRhdGUoKVxuICAgIH0pXG5cbiAgICBhY3QoKCkgPT4ge1xuICAgICAgd3JhcHBlci5maW5kKFwiLmFkdWktZGF0ZS1kYXlcIikuYXQoMTApLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICAgIGV4cGVjdGVkUmFuZ2VbMV0gPSBuZXcgRGF0ZShcbiAgICAgICAgd3JhcHBlci5maW5kKFwiLmFkdWktZGF0ZS1kYXlcIikuYXQoMTApLnByb3BzKClbXCJhcmlhLWxhYmVsXCJdICsgXCIgMTI6MDBcIlxuICAgICAgKVxuICAgICAgamVzdC5ydW5BbGxUaW1lcnMoKVxuICAgICAgd3JhcHBlci51cGRhdGUoKVxuICAgICAgZXhwZWN0KFxuICAgICAgICBjb252ZXJ0RGF0ZVJhbmdlVG9TdHJpbmcod3JhcHBlci5zdGF0ZSgpLnZhbHVlKSA9PT1cbiAgICAgICAgICBjb252ZXJ0RGF0ZVJhbmdlVG9TdHJpbmcoZXhwZWN0ZWRSYW5nZSlcbiAgICAgICkudG9CZSh0cnVlKVxuICAgIH0pXG5cbiAgICBhY3QoKCkgPT4ge1xuICAgICAgd3JhcHBlclxuICAgICAgICAuZmluZChcIi5hZHVpLWRhdGUtc2hvcnRjdXRcIilcbiAgICAgICAgLmF0KDApXG4gICAgICAgIC5zaW11bGF0ZShcImtleWRvd25cIiwgeyBrZXk6IFwiZW50ZXJcIiwga2V5Q29kZTogMTMgfSlcbiAgICAgIGplc3QucnVuQWxsVGltZXJzKClcbiAgICAgIHdyYXBwZXIudXBkYXRlKClcbiAgICAgIGV4cGVjdChjb252ZXJ0RGF0ZVJhbmdlVG9TdHJpbmcod3JhcHBlci5zdGF0ZSgpLnZhbHVlKSkudG9CZShcbiAgICAgICAgXCIyMDIwLTEwLTAxIC0gMjAyMC0xMC0wN1wiXG4gICAgICApXG4gICAgfSlcblxuICAgIGNvbnN0IHdyYXBwZXJGb3JDb3ZlcmFnZTAgPSBtb3VudCg8UmFuZ2VQaWNrZXJNb3VudGVyIGRpc2FibGVkIC8+KVxuICAgIHdyYXBwZXJGb3JDb3ZlcmFnZTAuc3RhdGUoKS5jb21wb25lbnQuaGFuZGxlVmlzaWJsZUNoYW5nZShmYWxzZSlcbiAgICB3cmFwcGVyRm9yQ292ZXJhZ2UwLmZpbmQoXCIuYWR1aS1kYXRlLWRheVwiKS5hdCgxNCkuc2ltdWxhdGUoXCJtb3VzZWVudGVyXCIpXG4gICAgd3JhcHBlckZvckNvdmVyYWdlMC5maW5kKFwiLmFkdWktZGF0ZS1kYXlcIikuYXQoMTQpLnNpbXVsYXRlKFwibW91c2VsZWF2ZVwiKVxuICAgIGplc3QucnVuQWxsVGltZXJzKClcbiAgfSlcblxuICBpdChcIua1i+ivlSBtaW4gbWF4XCIsICgpID0+IHtcbiAgICBjb25zdCB3cmFwcGVyID0gbW91bnQoXG4gICAgICA8UmFuZ2VQaWNrZXJNb3VudGVyXG4gICAgICAgIG1pbkRhdGU9e25ldyBEYXRlKFwiMjAxOC0xMi0zMVwiKX1cbiAgICAgICAgbWF4RGF0ZT17bmV3IERhdGUoXCIyMDIwLTAxLTAxXCIpfVxuICAgICAgLz5cbiAgICApXG4gICAgYWN0KCgpID0+IHtcbiAgICAgIHdyYXBwZXJcbiAgICAgICAgLmZpbmQoXCJzZWxlY3RcIilcbiAgICAgICAgLmF0KDApXG4gICAgICAgIC5zaW11bGF0ZShcImNoYW5nZVwiLCB7IHRhcmdldDogeyB2YWx1ZTogXCIyMDE5XCIgfSB9KVxuICAgICAgd3JhcHBlclxuICAgICAgICAuZmluZChcInNlbGVjdFwiKVxuICAgICAgICAuYXQoMSlcbiAgICAgICAgLnNpbXVsYXRlKFwiY2hhbmdlXCIsIHsgdGFyZ2V0OiB7IHZhbHVlOiBcIjFcIiB9IH0pXG4gICAgICBqZXN0LnJ1bkFsbFRpbWVycygpXG4gICAgICB3cmFwcGVyLnVwZGF0ZSgpXG4gICAgICB3cmFwcGVyLmZpbmQoXCIuYWR1aS1kYXRlLWRheVwiKS5hdCgxNCkuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgICAgamVzdC5ydW5BbGxUaW1lcnMoKVxuICAgICAgd3JhcHBlci51cGRhdGUoKVxuICAgICAgd3JhcHBlclxuICAgICAgICAuZmluZChcInNlbGVjdFwiKVxuICAgICAgICAuYXQoMSlcbiAgICAgICAgLnNpbXVsYXRlKFwiY2hhbmdlXCIsIHsgdGFyZ2V0OiB7IHZhbHVlOiBcIjExXCIgfSB9KVxuICAgICAgd3JhcHBlclxuICAgICAgICAuZmluZChcInNlbGVjdFwiKVxuICAgICAgICAuYXQoMClcbiAgICAgICAgLnNpbXVsYXRlKFwiY2hhbmdlXCIsIHsgdGFyZ2V0OiB7IHZhbHVlOiBcIjIwMjBcIiB9IH0pXG4gICAgICBqZXN0LnJ1bkFsbFRpbWVycygpXG4gICAgICB3cmFwcGVyLnVwZGF0ZSgpXG4gICAgICB3cmFwcGVyLmZpbmQoXCIuYWR1aS1kYXRlLWRheVwiKS5hdCgxNCkuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgICAgamVzdC5ydW5BbGxUaW1lcnMoKVxuICAgICAgd3JhcHBlci51cGRhdGUoKVxuICAgIH0pXG4gIH0pXG59KVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFFQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9B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
;