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>
193 lines • 27.4 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); }
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); }
import * as React from "react";
import { mount } from "enzyme";
import TestRenderer from "react-test-renderer";
import Table from "..";
window.ResizeObserver = window.ResizeObserver || jest.fn().mockImplementation(function () {
return {
disconnect: jest.fn(),
observe: jest.fn(),
unobserve: jest.fn()
};
});
var Column = Table.Column;
var dataSource = [{
key: 0,
one: "第一项"
}, {
key: 1,
one: "第二项"
}, {
key: 2,
one: "第三项"
}];
var RadioMounter = function (_React$Component) {
function RadioMounter() {
var _this;
_classCallCheck(this, RadioMounter);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _callSuper(this, RadioMounter, [].concat(args));
_this.state = {
keys: null
};
return _this;
}
_inherits(RadioMounter, _React$Component);
return _createClass(RadioMounter, [{
key: "render",
value: function render() {
var _this2 = this;
var keys = this.state.keys;
return React.createElement(Table, {
dataSource: dataSource,
selectedRowKeys: keys,
selectMultiple: false,
onSelectChange: function onSelectChange(args) {
return _this2.setState({
keys: args
});
}
}, React.createElement(Column, {
title: "one",
dataIndex: "one"
}));
}
}]);
}(React.Component);
describe("disabled 验证", function () {
it("单选", function () {
var onSelectChange = jest.fn();
var wrapper = mount(React.createElement(Table, {
dataSource: dataSource,
onSelectChange: onSelectChange,
defaultSelectedRowKeys: [1],
selectMultiple: false,
getSelectProps: function getSelectProps(row) {
if (row) {
if (row.key === 0 || row.key === 1) {
return {
disabled: true
};
}
}
return {};
}
}, React.createElement(Column, {
title: "one",
dataIndex: "one"
})));
wrapper.find(".adui-radio-indicator").at(0).simulate("click");
expect(wrapper.find("Table").state().selectedRowKeys).toEqual([1]);
wrapper.find(".adui-radio-indicator").at(1).simulate("click");
expect(wrapper.find("Table").state().selectedRowKeys).toEqual([1]);
wrapper.find(".adui-radio-indicator").at(2).simulate("click");
expect(wrapper.find("Table").state().selectedRowKeys).toEqual([2]);
});
it("多选", function () {
var onSelectChange = jest.fn();
var wrapper = mount(React.createElement(Table, {
dataSource: dataSource,
onSelectChange: onSelectChange,
defaultSelectedRowKeys: [1, "多余项"],
selectMultiple: true,
getSelectProps: function getSelectProps(row) {
if (row) {
if (row.key === 0 || row.key === 1) {
return {
disabled: true
};
}
}
return {};
}
}, React.createElement(Column, {
title: "one",
dataIndex: "one"
})));
wrapper.find(".adui-checkbox-indicator").at(0).simulate("click");
expect(wrapper.find("Table").state().selectedRowKeys).toEqual([1, "多余项", 2]);
wrapper.find(".adui-checkbox-indicator").at(0).simulate("click");
expect(wrapper.find("Table").state().selectedRowKeys).toEqual([1, "多余项"]);
wrapper.find(".adui-checkbox-indicator").at(3).simulate("click");
expect(wrapper.find("Table").state().selectedRowKeys).toEqual([1, "多余项", 2]);
wrapper.find(".adui-checkbox-indicator").at(3).simulate("click");
expect(wrapper.find("Table").state().selectedRowKeys).toEqual([1, "多余项"]);
});
});
describe("base", function () {
it("快照核对", function () {
var wrapper = TestRenderer.create(React.createElement(Table, {
dataSource: dataSource,
defaultSelectedRowKeys: [1],
selectMultiple: false,
onSelectChange: function onSelectChange() {}
}, React.createElement(Column, {
title: "one",
dataIndex: "one"
})));
expect(wrapper).toMatchSnapshot();
});
it("是否能内部驱动", function () {
var onSelectChange = jest.fn();
var wrapper = mount(React.createElement(Table, {
dataSource: dataSource,
onSelectChange: onSelectChange,
defaultSelectedRowKeys: [1],
selectMultiple: false
}, React.createElement(Column, {
title: "one",
dataIndex: "one"
})));
expect(wrapper.find("Table").state().selectedRowKeys).toEqual([1]);
wrapper.find(".adui-radio-indicator").at(0).simulate("click");
expect(wrapper.find("Table").state().selectedRowKeys).toEqual([0]);
});
it("是否能外部控制", function () {
var onSelectChange = jest.fn();
var wrapper0 = mount(React.createElement(Table, {
dataSource: dataSource,
onSelectChange: onSelectChange,
selectedRowKeys: [1],
selectMultiple: false
}, React.createElement(Column, {
title: "one",
dataIndex: "one"
})));
expect(wrapper0.find("Table").state().selectedRowKeys).toEqual([1]);
wrapper0.find(".adui-radio-indicator").at(0).simulate("click");
expect(wrapper0.find("Table").state().selectedRowKeys).toEqual([1]);
var wrapper1 = mount(React.createElement(RadioMounter, null));
expect(wrapper1.find("Table").state().selectedRowKeys).toEqual([]);
wrapper1.find(".adui-radio-indicator").at(0).simulate("click");
expect(wrapper1.find("Table").state().selectedRowKeys).toEqual([0]);
});
it("是否支持 selectOnRowClick", function () {
var onSelectChange = jest.fn();
var wrapper = mount(React.createElement(Table, {
dataSource: dataSource,
defaultSelectedRowKeys: [1],
onSelectChange: onSelectChange,
selectOnRowClick: true
}, React.createElement(Column, {
title: "one",
dataIndex: "one"
})));
wrapper.find('[role="row"]').at(0).simulate("click");
expect(onSelectChange).toHaveBeenCalledWith([1, 0]);
});
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1vdW50IiwiVGVzdFJlbmRlcmVyIiwiVGFibGUiLCJ3aW5kb3ciLCJSZXNpemVPYnNlcnZlciIsImplc3QiLCJmbiIsIm1vY2tJbXBsZW1lbnRhdGlvbiIsImRpc2Nvbm5lY3QiLCJvYnNlcnZlIiwidW5vYnNlcnZlIiwiQ29sdW1uIiwiZGF0YVNvdXJjZSIsImtleSIsIm9uZSIsIlJhZGlvTW91bnRlciIsIl9SZWFjdCRDb21wb25lbnQiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjayIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiX2NhbGxTdXBlciIsImNvbmNhdCIsInN0YXRlIiwia2V5cyIsIl9pbmhlcml0cyIsIl9jcmVhdGVDbGFzcyIsInZhbHVlIiwicmVuZGVyIiwiX3RoaXMyIiwiY3JlYXRlRWxlbWVudCIsInNlbGVjdGVkUm93S2V5cyIsInNlbGVjdE11bHRpcGxlIiwib25TZWxlY3RDaGFuZ2UiLCJzZXRTdGF0ZSIsInRpdGxlIiwiZGF0YUluZGV4IiwiQ29tcG9uZW50IiwiZGVzY3JpYmUiLCJpdCIsIndyYXBwZXIiLCJkZWZhdWx0U2VsZWN0ZWRSb3dLZXlzIiwiZ2V0U2VsZWN0UHJvcHMiLCJyb3ciLCJkaXNhYmxlZCIsImZpbmQiLCJhdCIsInNpbXVsYXRlIiwiZXhwZWN0IiwidG9FcXVhbCIsImNyZWF0ZSIsInRvTWF0Y2hTbmFwc2hvdCIsIndyYXBwZXIwIiwid3JhcHBlcjEiLCJzZWxlY3RPblJvd0NsaWNrIiwidG9IYXZlQmVlbkNhbGxlZFdpdGgiXSwic291cmNlcyI6WyIuLi8uLi8uLi9jb21wb25lbnRzL3RhYmxlL19fdGVzdHNfXy9zZWxlY3RSb3cudGVzdC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7IG1vdW50IH0gZnJvbSBcImVuenltZVwiXG5pbXBvcnQgVGVzdFJlbmRlcmVyIGZyb20gXCJyZWFjdC10ZXN0LXJlbmRlcmVyXCJcbmltcG9ydCBUYWJsZSBmcm9tIFwiLi5cIlxuXG53aW5kb3cuUmVzaXplT2JzZXJ2ZXIgPVxuICB3aW5kb3cuUmVzaXplT2JzZXJ2ZXIgfHxcbiAgamVzdC5mbigpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiAoe1xuICAgIGRpc2Nvbm5lY3Q6IGplc3QuZm4oKSxcbiAgICBvYnNlcnZlOiBqZXN0LmZuKCksXG4gICAgdW5vYnNlcnZlOiBqZXN0LmZuKCksXG4gIH0pKVxuXG5jb25zdCB7IENvbHVtbiB9ID0gVGFibGVcblxuY29uc3QgZGF0YVNvdXJjZSA9IFtcbiAge1xuICAgIGtleTogMCxcbiAgICBvbmU6IFwi56ys5LiA6aG5XCIsXG4gIH0sXG4gIHtcbiAgICBrZXk6IDEsXG4gICAgb25lOiBcIuesrOS6jOmhuVwiLFxuICB9LFxuICB7XG4gICAga2V5OiAyLFxuICAgIG9uZTogXCLnrKzkuInpoblcIixcbiAgfSxcbl1cblxuY2xhc3MgUmFkaW9Nb3VudGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc3RhdGUgPSB7XG4gICAga2V5czogbnVsbCxcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGtleXMgfSA9IHRoaXMuc3RhdGVcbiAgICByZXR1cm4gKFxuICAgICAgPFRhYmxlXG4gICAgICAgIGRhdGFTb3VyY2U9e2RhdGFTb3VyY2V9XG4gICAgICAgIHNlbGVjdGVkUm93S2V5cz17a2V5c31cbiAgICAgICAgc2VsZWN0TXVsdGlwbGU9e2ZhbHNlfVxuICAgICAgICBvblNlbGVjdENoYW5nZT17KGFyZ3MpID0+IHRoaXMuc2V0U3RhdGUoeyBrZXlzOiBhcmdzIH0pfVxuICAgICAgPlxuICAgICAgICA8Q29sdW1uIHRpdGxlPVwib25lXCIgZGF0YUluZGV4PVwib25lXCIgLz5cbiAgICAgIDwvVGFibGU+XG4gICAgKVxuICB9XG59XG5cbmRlc2NyaWJlKFwiZGlzYWJsZWQg6aqM6K+BXCIsICgpID0+IHtcbiAgaXQoXCLljZXpgIlcIiwgKCkgPT4ge1xuICAgIGNvbnN0IG9uU2VsZWN0Q2hhbmdlID0gamVzdC5mbigpXG4gICAgLyoqXG4gICAgICog5qih5ouf5YmN5Lik6aG556aB5q2i77yM5YW25Lit5LiA5Liq5Li65pyq6YCJ5Lit77yM5Y+m5LiA5Liq5Li65bey6YCJ5LitXG4gICAgICovXG4gICAgY29uc3Qgd3JhcHBlciA9IG1vdW50KFxuICAgICAgPFRhYmxlXG4gICAgICAgIGRhdGFTb3VyY2U9e2RhdGFTb3VyY2V9XG4gICAgICAgIG9uU2VsZWN0Q2hhbmdlPXtvblNlbGVjdENoYW5nZX1cbiAgICAgICAgZGVmYXVsdFNlbGVjdGVkUm93S2V5cz17WzFdfVxuICAgICAgICBzZWxlY3RNdWx0aXBsZT17ZmFsc2V9XG4gICAgICAgIGdldFNlbGVjdFByb3BzPXsocm93KSA9PiB7XG4gICAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgICAgaWYgKHJvdy5rZXkgPT09IDAgfHwgcm93LmtleSA9PT0gMSkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRpc2FibGVkOiB0cnVlLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7fVxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8Q29sdW1uIHRpdGxlPVwib25lXCIgZGF0YUluZGV4PVwib25lXCIgLz5cbiAgICAgIDwvVGFibGU+XG4gICAgKVxuICAgIHdyYXBwZXIuZmluZChcIi5hZHVpLXJhZGlvLWluZGljYXRvclwiKS5hdCgwKS5zaW11bGF0ZShcImNsaWNrXCIpXG4gICAgZXhwZWN0KHdyYXBwZXIuZmluZChcIlRhYmxlXCIpLnN0YXRlKCkuc2VsZWN0ZWRSb3dLZXlzKS50b0VxdWFsKFsxXSlcbiAgICB3cmFwcGVyLmZpbmQoXCIuYWR1aS1yYWRpby1pbmRpY2F0b3JcIikuYXQoMSkuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgIGV4cGVjdCh3cmFwcGVyLmZpbmQoXCJUYWJsZVwiKS5zdGF0ZSgpLnNlbGVjdGVkUm93S2V5cykudG9FcXVhbChbMV0pXG4gICAgd3JhcHBlci5maW5kKFwiLmFkdWktcmFkaW8taW5kaWNhdG9yXCIpLmF0KDIpLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICBleHBlY3Qod3JhcHBlci5maW5kKFwiVGFibGVcIikuc3RhdGUoKS5zZWxlY3RlZFJvd0tleXMpLnRvRXF1YWwoWzJdKVxuICB9KVxuXG4gIGl0KFwi5aSa6YCJXCIsICgpID0+IHtcbiAgICBjb25zdCBvblNlbGVjdENoYW5nZSA9IGplc3QuZm4oKVxuICAgIC8qKlxuICAgICAqIOaooeaLn+WJjeS4pOmhueemgeatou+8jOWFtuS4reS4gOS4quS4uuacqumAieS4re+8jOWPpuS4gOS4quS4uuW3sumAieS4rVxuICAgICAqL1xuICAgIGNvbnN0IHdyYXBwZXIgPSBtb3VudChcbiAgICAgIDxUYWJsZVxuICAgICAgICBkYXRhU291cmNlPXtkYXRhU291cmNlfVxuICAgICAgICBvblNlbGVjdENoYW5nZT17b25TZWxlY3RDaGFuZ2V9XG4gICAgICAgIGRlZmF1bHRTZWxlY3RlZFJvd0tleXM9e1sxLCBcIuWkmuS9memhuVwiXX1cbiAgICAgICAgc2VsZWN0TXVsdGlwbGVcbiAgICAgICAgZ2V0U2VsZWN0UHJvcHM9eyhyb3cpID0+IHtcbiAgICAgICAgICBpZiAocm93KSB7XG4gICAgICAgICAgICBpZiAocm93LmtleSA9PT0gMCB8fCByb3cua2V5ID09PSAxKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHt9XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxDb2x1bW4gdGl0bGU9XCJvbmVcIiBkYXRhSW5kZXg9XCJvbmVcIiAvPlxuICAgICAgPC9UYWJsZT5cbiAgICApXG4gICAgLy8g5aSa6YCJ5pe25om+5Yiw55qE56ys5LiA5Liq5YWD57Sg5piv5YWo6YCJ5qGGXG4gICAgd3JhcHBlci5maW5kKFwiLmFkdWktY2hlY2tib3gtaW5kaWNhdG9yXCIpLmF0KDApLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICBleHBlY3Qod3JhcHBlci5maW5kKFwiVGFibGVcIikuc3RhdGUoKS5zZWxlY3RlZFJvd0tleXMpLnRvRXF1YWwoW1xuICAgICAgMSxcbiAgICAgIFwi5aSa5L2Z6aG5XCIsXG4gICAgICAyLFxuICAgIF0pXG4gICAgd3JhcHBlci5maW5kKFwiLmFkdWktY2hlY2tib3gtaW5kaWNhdG9yXCIpLmF0KDApLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICBleHBlY3Qod3JhcHBlci5maW5kKFwiVGFibGVcIikuc3RhdGUoKS5zZWxlY3RlZFJvd0tleXMpLnRvRXF1YWwoWzEsIFwi5aSa5L2Z6aG5XCJdKVxuICAgIHdyYXBwZXIuZmluZChcIi5hZHVpLWNoZWNrYm94LWluZGljYXRvclwiKS5hdCgzKS5zaW11bGF0ZShcImNsaWNrXCIpXG4gICAgZXhwZWN0KHdyYXBwZXIuZmluZChcIlRhYmxlXCIpLnN0YXRlKCkuc2VsZWN0ZWRSb3dLZXlzKS50b0VxdWFsKFtcbiAgICAgIDEsXG4gICAgICBcIuWkmuS9memhuVwiLFxuICAgICAgMixcbiAgICBdKVxuICAgIHdyYXBwZXIuZmluZChcIi5hZHVpLWNoZWNrYm94LWluZGljYXRvclwiKS5hdCgzKS5zaW11bGF0ZShcImNsaWNrXCIpXG4gICAgZXhwZWN0KHdyYXBwZXIuZmluZChcIlRhYmxlXCIpLnN0YXRlKCkuc2VsZWN0ZWRSb3dLZXlzKS50b0VxdWFsKFsxLCBcIuWkmuS9memhuVwiXSlcbiAgfSlcbn0pXG5cbmRlc2NyaWJlKFwiYmFzZVwiLCAoKSA9PiB7XG4gIGl0KFwi5b+r54Wn5qC45a+5XCIsICgpID0+IHtcbiAgICBjb25zdCB3cmFwcGVyID0gVGVzdFJlbmRlcmVyLmNyZWF0ZShcbiAgICAgIDxUYWJsZVxuICAgICAgICBkYXRhU291cmNlPXtkYXRhU291cmNlfVxuICAgICAgICBkZWZhdWx0U2VsZWN0ZWRSb3dLZXlzPXtbMV19XG4gICAgICAgIHNlbGVjdE11bHRpcGxlPXtmYWxzZX1cbiAgICAgICAgb25TZWxlY3RDaGFuZ2U9eygpID0+IHt9fVxuICAgICAgPlxuICAgICAgICA8Q29sdW1uIHRpdGxlPVwib25lXCIgZGF0YUluZGV4PVwib25lXCIgLz5cbiAgICAgIDwvVGFibGU+XG4gICAgKVxuICAgIGV4cGVjdCh3cmFwcGVyKS50b01hdGNoU25hcHNob3QoKVxuICB9KVxuXG4gIGl0KFwi5piv5ZCm6IO95YaF6YOo6amx5YqoXCIsICgpID0+IHtcbiAgICBjb25zdCBvblNlbGVjdENoYW5nZSA9IGplc3QuZm4oKVxuICAgIGNvbnN0IHdyYXBwZXIgPSBtb3VudChcbiAgICAgIDxUYWJsZVxuICAgICAgICBkYXRhU291cmNlPXtkYXRhU291cmNlfVxuICAgICAgICBvblNlbGVjdENoYW5nZT17b25TZWxlY3RDaGFuZ2V9XG4gICAgICAgIGRlZmF1bHRTZWxlY3RlZFJvd0tleXM9e1sxXX1cbiAgICAgICAgc2VsZWN0TXVsdGlwbGU9e2ZhbHNlfVxuICAgICAgPlxuICAgICAgICA8Q29sdW1uIHRpdGxlPVwib25lXCIgZGF0YUluZGV4PVwib25lXCIgLz5cbiAgICAgIDwvVGFibGU+XG4gICAgKVxuICAgIGV4cGVjdCh3cmFwcGVyLmZpbmQoXCJUYWJsZVwiKS5zdGF0ZSgpLnNlbGVjdGVkUm93S2V5cykudG9FcXVhbChbMV0pXG4gICAgd3JhcHBlci5maW5kKFwiLmFkdWktcmFkaW8taW5kaWNhdG9yXCIpLmF0KDApLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICBleHBlY3Qod3JhcHBlci5maW5kKFwiVGFibGVcIikuc3RhdGUoKS5zZWxlY3RlZFJvd0tleXMpLnRvRXF1YWwoWzBdKVxuICB9KVxuXG4gIGl0KFwi5piv5ZCm6IO95aSW6YOo5o6n5Yi2XCIsICgpID0+IHtcbiAgICBjb25zdCBvblNlbGVjdENoYW5nZSA9IGplc3QuZm4oKVxuICAgIGNvbnN0IHdyYXBwZXIwID0gbW91bnQoXG4gICAgICA8VGFibGVcbiAgICAgICAgZGF0YVNvdXJjZT17ZGF0YVNvdXJjZX1cbiAgICAgICAgb25TZWxlY3RDaGFuZ2U9e29uU2VsZWN0Q2hhbmdlfVxuICAgICAgICBzZWxlY3RlZFJvd0tleXM9e1sxXX1cbiAgICAgICAgc2VsZWN0TXVsdGlwbGU9e2ZhbHNlfVxuICAgICAgPlxuICAgICAgICA8Q29sdW1uIHRpdGxlPVwib25lXCIgZGF0YUluZGV4PVwib25lXCIgLz5cbiAgICAgIDwvVGFibGU+XG4gICAgKVxuICAgIGV4cGVjdCh3cmFwcGVyMC5maW5kKFwiVGFibGVcIikuc3RhdGUoKS5zZWxlY3RlZFJvd0tleXMpLnRvRXF1YWwoWzFdKVxuICAgIHdyYXBwZXIwLmZpbmQoXCIuYWR1aS1yYWRpby1pbmRpY2F0b3JcIikuYXQoMCkuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgIGV4cGVjdCh3cmFwcGVyMC5maW5kKFwiVGFibGVcIikuc3RhdGUoKS5zZWxlY3RlZFJvd0tleXMpLnRvRXF1YWwoWzFdKVxuXG4gICAgY29uc3Qgd3JhcHBlcjEgPSBtb3VudCg8UmFkaW9Nb3VudGVyIC8+KVxuICAgIGV4cGVjdCh3cmFwcGVyMS5maW5kKFwiVGFibGVcIikuc3RhdGUoKS5zZWxlY3RlZFJvd0tleXMpLnRvRXF1YWwoW10pXG4gICAgd3JhcHBlcjEuZmluZChcIi5hZHVpLXJhZGlvLWluZGljYXRvclwiKS5hdCgwKS5zaW11bGF0ZShcImNsaWNrXCIpXG4gICAgZXhwZWN0KHdyYXBwZXIxLmZpbmQoXCJUYWJsZVwiKS5zdGF0ZSgpLnNlbGVjdGVkUm93S2V5cykudG9FcXVhbChbMF0pXG4gIH0pXG5cbiAgaXQoXCLmmK/lkKbmlK/mjIEgc2VsZWN0T25Sb3dDbGlja1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgb25TZWxlY3RDaGFuZ2UgPSBqZXN0LmZuKClcbiAgICBjb25zdCB3cmFwcGVyID0gbW91bnQoXG4gICAgICA8VGFibGVcbiAgICAgICAgZGF0YVNvdXJjZT17ZGF0YVNvdXJjZX1cbiAgICAgICAgZGVmYXVsdFNlbGVjdGVkUm93S2V5cz17WzFdfVxuICAgICAgICBvblNlbGVjdENoYW5nZT17b25TZWxlY3RDaGFuZ2V9XG4gICAgICAgIHNlbGVjdE9uUm93Q2xpY2tcbiAgICAgID5cbiAgICAgICAgPENvbHVtbiB0aXRsZT1cIm9uZVwiIGRhdGFJbmRleD1cIm9uZVwiIC8+XG4gICAgICA8L1RhYmxlPlxuICAgIClcbiAgICB3cmFwcGVyLmZpbmQoJ1tyb2xlPVwicm93XCJdJykuYXQoMCkuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgIGV4cGVjdChvblNlbGVjdENoYW5nZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoWzEsIDBdKVxuICB9KVxufSlcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBS0EsS0FBSyxNQUFNLE9BQU87QUFDOUIsU0FBU0MsS0FBSyxRQUFRLFFBQVE7QUFDOUIsT0FBT0MsWUFBWSxNQUFNLHFCQUFxQjtBQUM5QyxPQUFPQyxLQUFLLE1BQU0sSUFBSTtBQUV0QkMsTUFBTSxDQUFDQyxjQUFjLEdBQ25CRCxNQUFNLENBQUNDLGNBQWMsSUFDckJDLElBQUksQ0FBQ0MsRUFBRSxDQUFDLENBQUMsQ0FBQ0Msa0JBQWtCLENBQUM7RUFBQSxPQUFPO0lBQ2xDQyxVQUFVLEVBQUVILElBQUksQ0FBQ0MsRUFBRSxDQUFDLENBQUM7SUFDckJHLE9BQU8sRUFBRUosSUFBSSxDQUFDQyxFQUFFLENBQUMsQ0FBQztJQUNsQkksU0FBUyxFQUFFTCxJQUFJLENBQUNDLEVBQUUsQ0FBQztFQUNyQixDQUFDO0FBQUEsQ0FBQyxDQUFDO0FBRUwsSUFBUUssTUFBTSxHQUFLVCxLQUFLLENBQWhCUyxNQUFNO0FBRWQsSUFBTUMsVUFBVSxHQUFHLENBQ2pCO0VBQ0VDLEdBQUcsRUFBRSxDQUFDO0VBQ05DLEdBQUcsRUFBRTtBQUNQLENBQUMsRUFDRDtFQUNFRCxHQUFHLEVBQUUsQ0FB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