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>
216 lines (193 loc) • 25.8 kB
JavaScript
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); }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
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) {
_inherits(RadioMounter, _React$Component);
var _super = _createSuper(RadioMounter);
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 = _super.call.apply(_super, [this].concat(args));
_this.state = {
keys: null
};
return _this;
}
_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"
}));
}
}]);
return RadioMounter;
}(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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1vdW50IiwiVGVzdFJlbmRlcmVyIiwiVGFibGUiLCJ3aW5kb3ciLCJSZXNpemVPYnNlcnZlciIsImplc3QiLCJmbiIsIm1vY2tJbXBsZW1lbnRhdGlvbiIsImRpc2Nvbm5lY3QiLCJvYnNlcnZlIiwidW5vYnNlcnZlIiwiQ29sdW1uIiwiZGF0YVNvdXJjZSIsImtleSIsIm9uZSIsIlJhZGlvTW91bnRlciIsInN0YXRlIiwia2V5cyIsImFyZ3MiLCJzZXRTdGF0ZSIsIkNvbXBvbmVudCIsImRlc2NyaWJlIiwiaXQiLCJvblNlbGVjdENoYW5nZSIsIndyYXBwZXIiLCJyb3ciLCJkaXNhYmxlZCIsImZpbmQiLCJhdCIsInNpbXVsYXRlIiwiZXhwZWN0Iiwic2VsZWN0ZWRSb3dLZXlzIiwidG9FcXVhbCIsImNyZWF0ZSIsInRvTWF0Y2hTbmFwc2hvdCIsIndyYXBwZXIwIiwid3JhcHBlcjEiLCJ0b0hhdmVCZWVuQ2FsbGVkV2l0aCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbXBvbmVudHMvdGFibGUvX190ZXN0c19fL3NlbGVjdFJvdy50ZXN0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHsgbW91bnQgfSBmcm9tIFwiZW56eW1lXCJcbmltcG9ydCBUZXN0UmVuZGVyZXIgZnJvbSBcInJlYWN0LXRlc3QtcmVuZGVyZXJcIlxuaW1wb3J0IFRhYmxlIGZyb20gXCIuLlwiXG5cbndpbmRvdy5SZXNpemVPYnNlcnZlciA9XG4gIHdpbmRvdy5SZXNpemVPYnNlcnZlciB8fFxuICBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+ICh7XG4gICAgZGlzY29ubmVjdDogamVzdC5mbigpLFxuICAgIG9ic2VydmU6IGplc3QuZm4oKSxcbiAgICB1bm9ic2VydmU6IGplc3QuZm4oKSxcbiAgfSkpXG5cbmNvbnN0IHsgQ29sdW1uIH0gPSBUYWJsZVxuXG5jb25zdCBkYXRhU291cmNlID0gW1xuICB7XG4gICAga2V5OiAwLFxuICAgIG9uZTogXCLnrKzkuIDpoblcIixcbiAgfSxcbiAge1xuICAgIGtleTogMSxcbiAgICBvbmU6IFwi56ys5LqM6aG5XCIsXG4gIH0sXG4gIHtcbiAgICBrZXk6IDIsXG4gICAgb25lOiBcIuesrOS4iemhuVwiLFxuICB9LFxuXVxuXG5jbGFzcyBSYWRpb01vdW50ZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0ZSA9IHtcbiAgICBrZXlzOiBudWxsLFxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsga2V5cyB9ID0gdGhpcy5zdGF0ZVxuICAgIHJldHVybiAoXG4gICAgICA8VGFibGVcbiAgICAgICAgZGF0YVNvdXJjZT17ZGF0YVNvdXJjZX1cbiAgICAgICAgc2VsZWN0ZWRSb3dLZXlzPXtrZXlzfVxuICAgICAgICBzZWxlY3RNdWx0aXBsZT17ZmFsc2V9XG4gICAgICAgIG9uU2VsZWN0Q2hhbmdlPXsoYXJncykgPT4gdGhpcy5zZXRTdGF0ZSh7IGtleXM6IGFyZ3MgfSl9XG4gICAgICA+XG4gICAgICAgIDxDb2x1bW4gdGl0bGU9XCJvbmVcIiBkYXRhSW5kZXg9XCJvbmVcIiAvPlxuICAgICAgPC9UYWJsZT5cbiAgICApXG4gIH1cbn1cblxuZGVzY3JpYmUoXCJkaXNhYmxlZCDpqozor4FcIiwgKCkgPT4ge1xuICBpdChcIuWNlemAiVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgb25TZWxlY3RDaGFuZ2UgPSBqZXN0LmZuKClcbiAgICAvKipcbiAgICAgKiDmqKHmi5/liY3kuKTpobnnpoHmraLvvIzlhbbkuK3kuIDkuKrkuLrmnKrpgInkuK3vvIzlj6bkuIDkuKrkuLrlt7LpgInkuK1cbiAgICAgKi9cbiAgICBjb25zdCB3cmFwcGVyID0gbW91bnQoXG4gICAgICA8VGFibGVcbiAgICAgICAgZGF0YVNvdXJjZT17ZGF0YVNvdXJjZX1cbiAgICAgICAgb25TZWxlY3RDaGFuZ2U9e29uU2VsZWN0Q2hhbmdlfVxuICAgICAgICBkZWZhdWx0U2VsZWN0ZWRSb3dLZXlzPXtbMV19XG4gICAgICAgIHNlbGVjdE11bHRpcGxlPXtmYWxzZX1cbiAgICAgICAgZ2V0U2VsZWN0UHJvcHM9eyhyb3cpID0+IHtcbiAgICAgICAgICBpZiAocm93KSB7XG4gICAgICAgICAgICBpZiAocm93LmtleSA9PT0gMCB8fCByb3cua2V5ID09PSAxKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHt9XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxDb2x1bW4gdGl0bGU9XCJvbmVcIiBkYXRhSW5kZXg9XCJvbmVcIiAvPlxuICAgICAgPC9UYWJsZT5cbiAgICApXG4gICAgd3JhcHBlci5maW5kKFwiLmFkdWktcmFkaW8taW5kaWNhdG9yXCIpLmF0KDApLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICBleHBlY3Qod3JhcHBlci5maW5kKFwiVGFibGVcIikuc3RhdGUoKS5zZWxlY3RlZFJvd0tleXMpLnRvRXF1YWwoWzFdKVxuICAgIHdyYXBwZXIuZmluZChcIi5hZHVpLXJhZGlvLWluZGljYXRvclwiKS5hdCgxKS5zaW11bGF0ZShcImNsaWNrXCIpXG4gICAgZXhwZWN0KHdyYXBwZXIuZmluZChcIlRhYmxlXCIpLnN0YXRlKCkuc2VsZWN0ZWRSb3dLZXlzKS50b0VxdWFsKFsxXSlcbiAgICB3cmFwcGVyLmZpbmQoXCIuYWR1aS1yYWRpby1pbmRpY2F0b3JcIikuYXQoMikuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgIGV4cGVjdCh3cmFwcGVyLmZpbmQoXCJUYWJsZVwiKS5zdGF0ZSgpLnNlbGVjdGVkUm93S2V5cykudG9FcXVhbChbMl0pXG4gIH0pXG5cbiAgaXQoXCLlpJrpgIlcIiwgKCkgPT4ge1xuICAgIGNvbnN0IG9uU2VsZWN0Q2hhbmdlID0gamVzdC5mbigpXG4gICAgLyoqXG4gICAgICog5qih5ouf5YmN5Lik6aG556aB5q2i77yM5YW25Lit5LiA5Liq5Li65pyq6YCJ5Lit77yM5Y+m5LiA5Liq5Li65bey6YCJ5LitXG4gICAgICovXG4gICAgY29uc3Qgd3JhcHBlciA9IG1vdW50KFxuICAgICAgPFRhYmxlXG4gICAgICAgIGRhdGFTb3VyY2U9e2RhdGFTb3VyY2V9XG4gICAgICAgIG9uU2VsZWN0Q2hhbmdlPXtvblNlbGVjdENoYW5nZX1cbiAgICAgICAgZGVmYXVsdFNlbGVjdGVkUm93S2V5cz17WzEsIFwi5aSa5L2Z6aG5XCJdfVxuICAgICAgICBzZWxlY3RNdWx0aXBsZVxuICAgICAgICBnZXRTZWxlY3RQcm9wcz17KHJvdykgPT4ge1xuICAgICAgICAgIGlmIChyb3cpIHtcbiAgICAgICAgICAgIGlmIChyb3cua2V5ID09PSAwIHx8IHJvdy5rZXkgPT09IDEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4ge31cbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPENvbHVtbiB0aXRsZT1cIm9uZVwiIGRhdGFJbmRleD1cIm9uZVwiIC8+XG4gICAgICA8L1RhYmxlPlxuICAgIClcbiAgICAvLyDlpJrpgInml7bmib7liLDnmoTnrKzkuIDkuKrlhYPntKDmmK/lhajpgInmoYZcbiAgICB3cmFwcGVyLmZpbmQoXCIuYWR1aS1jaGVja2JveC1pbmRpY2F0b3JcIikuYXQoMCkuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgIGV4cGVjdCh3cmFwcGVyLmZpbmQoXCJUYWJsZVwiKS5zdGF0ZSgpLnNlbGVjdGVkUm93S2V5cykudG9FcXVhbChbXG4gICAgICAxLFxuICAgICAgXCLlpJrkvZnpoblcIixcbiAgICAgIDIsXG4gICAgXSlcbiAgICB3cmFwcGVyLmZpbmQoXCIuYWR1aS1jaGVja2JveC1pbmRpY2F0b3JcIikuYXQoMCkuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgIGV4cGVjdCh3cmFwcGVyLmZpbmQoXCJUYWJsZVwiKS5zdGF0ZSgpLnNlbGVjdGVkUm93S2V5cykudG9FcXVhbChbMSwgXCLlpJrkvZnpoblcIl0pXG4gICAgd3JhcHBlci5maW5kKFwiLmFkdWktY2hlY2tib3gtaW5kaWNhdG9yXCIpLmF0KDMpLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICBleHBlY3Qod3JhcHBlci5maW5kKFwiVGFibGVcIikuc3RhdGUoKS5zZWxlY3RlZFJvd0tleXMpLnRvRXF1YWwoW1xuICAgICAgMSxcbiAgICAgIFwi5aSa5L2Z6aG5XCIsXG4gICAgICAyLFxuICAgIF0pXG4gICAgd3JhcHBlci5maW5kKFwiLmFkdWktY2hlY2tib3gtaW5kaWNhdG9yXCIpLmF0KDMpLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICBleHBlY3Qod3JhcHBlci5maW5kKFwiVGFibGVcIikuc3RhdGUoKS5zZWxlY3RlZFJvd0tleXMpLnRvRXF1YWwoWzEsIFwi5aSa5L2Z6aG5XCJdKVxuICB9KVxufSlcblxuZGVzY3JpYmUoXCJiYXNlXCIsICgpID0+IHtcbiAgaXQoXCLlv6vnhafmoLjlr7lcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHdyYXBwZXIgPSBUZXN0UmVuZGVyZXIuY3JlYXRlKFxuICAgICAgPFRhYmxlXG4gICAgICAgIGRhdGFTb3VyY2U9e2RhdGFTb3VyY2V9XG4gICAgICAgIGRlZmF1bHRTZWxlY3RlZFJvd0tleXM9e1sxXX1cbiAgICAgICAgc2VsZWN0TXVsdGlwbGU9e2ZhbHNlfVxuICAgICAgICBvblNlbGVjdENoYW5nZT17KCkgPT4ge319XG4gICAgICA+XG4gICAgICAgIDxDb2x1bW4gdGl0bGU9XCJvbmVcIiBkYXRhSW5kZXg9XCJvbmVcIiAvPlxuICAgICAgPC9UYWJsZT5cbiAgICApXG4gICAgZXhwZWN0KHdyYXBwZXIpLnRvTWF0Y2hTbmFwc2hvdCgpXG4gIH0pXG5cbiAgaXQoXCLmmK/lkKbog73lhoXpg6jpqbHliqhcIiwgKCkgPT4ge1xuICAgIGNvbnN0IG9uU2VsZWN0Q2hhbmdlID0gamVzdC5mbigpXG4gICAgY29uc3Qgd3JhcHBlciA9IG1vdW50KFxuICAgICAgPFRhYmxlXG4gICAgICAgIGRhdGFTb3VyY2U9e2RhdGFTb3VyY2V9XG4gICAgICAgIG9uU2VsZWN0Q2hhbmdlPXtvblNlbGVjdENoYW5nZX1cbiAgICAgICAgZGVmYXVsdFNlbGVjdGVkUm93S2V5cz17WzFdfVxuICAgICAgICBzZWxlY3RNdWx0aXBsZT17ZmFsc2V9XG4gICAgICA+XG4gICAgICAgIDxDb2x1bW4gdGl0bGU9XCJvbmVcIiBkYXRhSW5kZXg9XCJvbmVcIiAvPlxuICAgICAgPC9UYWJsZT5cbiAgICApXG4gICAgZXhwZWN0KHdyYXBwZXIuZmluZChcIlRhYmxlXCIpLnN0YXRlKCkuc2VsZWN0ZWRSb3dLZXlzKS50b0VxdWFsKFsxXSlcbiAgICB3cmFwcGVyLmZpbmQoXCIuYWR1aS1yYWRpby1pbmRpY2F0b3JcIikuYXQoMCkuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgIGV4cGVjdCh3cmFwcGVyLmZpbmQoXCJUYWJsZVwiKS5zdGF0ZSgpLnNlbGVjdGVkUm93S2V5cykudG9FcXVhbChbMF0pXG4gIH0pXG5cbiAgaXQoXCLmmK/lkKbog73lpJbpg6jmjqfliLZcIiwgKCkgPT4ge1xuICAgIGNvbnN0IG9uU2VsZWN0Q2hhbmdlID0gamVzdC5mbigpXG4gICAgY29uc3Qgd3JhcHBlcjAgPSBtb3VudChcbiAgICAgIDxUYWJsZVxuICAgICAgICBkYXRhU291cmNlPXtkYXRhU291cmNlfVxuICAgICAgICBvblNlbGVjdENoYW5nZT17b25TZWxlY3RDaGFuZ2V9XG4gICAgICAgIHNlbGVjdGVkUm93S2V5cz17WzFdfVxuICAgICAgICBzZWxlY3RNdWx0aXBsZT17ZmFsc2V9XG4gICAgICA+XG4gICAgICAgIDxDb2x1bW4gdGl0bGU9XCJvbmVcIiBkYXRhSW5kZXg9XCJvbmVcIiAvPlxuICAgICAgPC9UYWJsZT5cbiAgICApXG4gICAgZXhwZWN0KHdyYXBwZXIwLmZpbmQoXCJUYWJsZVwiKS5zdGF0ZSgpLnNlbGVjdGVkUm93S2V5cykudG9FcXVhbChbMV0pXG4gICAgd3JhcHBlcjAuZmluZChcIi5hZHVpLXJhZGlvLWluZGljYXRvclwiKS5hdCgwKS5zaW11bGF0ZShcImNsaWNrXCIpXG4gICAgZXhwZWN0KHdyYXBwZXIwLmZpbmQoXCJUYWJsZVwiKS5zdGF0ZSgpLnNlbGVjdGVkUm93S2V5cykudG9FcXVhbChbMV0pXG5cbiAgICBjb25zdCB3cmFwcGVyMSA9IG1vdW50KDxSYWRpb01vdW50ZXIgLz4pXG4gICAgZXhwZWN0KHdyYXBwZXIxLmZpbmQoXCJUYWJsZVwiKS5zdGF0ZSgpLnNlbGVjdGVkUm93S2V5cykudG9FcXVhbChbXSlcbiAgICB3cmFwcGVyMS5maW5kKFwiLmFkdWktcmFkaW8taW5kaWNhdG9yXCIpLmF0KDApLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICBleHBlY3Qod3JhcHBlcjEuZmluZChcIlRhYmxlXCIpLnN0YXRlKCkuc2VsZWN0ZWRSb3dLZXlzKS50b0VxdWFsKFswXSlcbiAgfSlcblxuICBpdChcIuaYr+WQpuaUr+aMgSBzZWxlY3RPblJvd0NsaWNrXCIsICgpID0+IHtcbiAgICBjb25zdCBvblNlbGVjdENoYW5nZSA9IGplc3QuZm4oKVxuICAgIGNvbnN0IHdyYXBwZXIgPSBtb3VudChcbiAgICAgIDxUYWJsZVxuICAgICAgICBkYXRhU291cmNlPXtkYXRhU291cmNlfVxuICAgICAgICBkZWZhdWx0U2VsZWN0ZWRSb3dLZXlzPXtbMV19XG4gICAgICAgIG9uU2VsZWN0Q2hhbmdlPXtvblNlbGVjdENoYW5nZX1cbiAgICAgICAgc2VsZWN0T25Sb3dDbGlja1xuICAgICAgPlxuICAgICAgICA8Q29sdW1uIHRpdGxlPVwib25lXCIgZGF0YUluZGV4PVwib25lXCIgLz5cbiAgICAgIDwvVGFibGU+XG4gICAgKVxuICAgIHdyYXBwZXIuZmluZCgnW3JvbGU9XCJyb3dcIl0nKS5hdCgwKS5zaW11bGF0ZShcImNsaWNrXCIpXG4gICAgZXhwZWN0KG9uU2VsZWN0Q2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChbMSwgMF0pXG4gIH0pXG59KVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLQSxLQUFaLE1BQXVCLE9BQXZCO0FBQ0EsU0FBU0MsS0FBVCxRQUFzQixRQUF0QjtBQUNBLE9BQU9DLFlBQVAsTUFBeUIscUJBQXpCO0FBQ0EsT0FBT0MsS0FBUCxNQUFrQixJQUFsQjtBQUVBQyxNQUFNLENBQUNDLGNBQVAsR0FDRUQsTUFBTSxDQUFDQyxjQUFQLElBQ0FDLElBQUksQ0FBQ0MsRUFBTCxHQUFVQyxrQkFBVixDQUE2QjtFQUFBLE9BQU87SUFDbENDLFVBQVUsRUFBRUgsSUFBSSxDQUFDQyxFQUFMLEVBRHNCO0lBRWxDRyxPQUFPLEVBQUVKLElBQUksQ0FBQ0MsRUFBTCxFQUZ5QjtJQUdsQ0ksU0FBUyxFQUFFTCxJQUFJLENBQUNDLEVBQUw7RUFIdUIsQ0FBUDtBQUFBLENBQTdCLENBRkY7QUFRQSxJQUFRSyxNQUFSLEdBQW1CVCxLQUFuQixDQUFRUyxNQUFSO0FBRUEsSUFBTUMsVUFBVSxHQUFHLENBQ2pCO0VBQ0VDLEdBQUcsRUFBRSxDQURQO0VBRUVDLEdBQUcsRUFBRTtBQUZQLENBRGlCLEVBS2pCO0VBQ0VELEdBQUcsRUFBRSxDQURQO0VBRUVDLEdBQUcsRUFBRTtBQUZQLENBTGlCLEVBU2pCO0VBQ0VELEdBQUcsRUFBRSxDQURQO0VBRUVDLEdBQUcsRUFBRTtBQUZQLENBVGlCLENBQW5COztJQWVNQyxZOzs7Ozs7Ozs7Ozs7Ozs7VUFDSkMsSyxHQUFRO01BQ05DLElBQUksRUFBRTtJQURBLEM7Ozs7OztXQUlSLGtCQUFTO01BQUE7O01BQ1AsSUFBUUEsSUFBUixHQUFpQixLQUFLRCxLQUF0QixDQUFRQyxJQUFSO01BQ0EsT0FDRSxvQkFBQyxLQUFEO1FBQ0UsVUFBVSxFQUFFTCxVQURkO1FBRUUsZUFBZSxFQUFFSyxJQUZuQjtRQUdFLGNB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