diff --git a/dist/react-bootstrap-table.js b/dist/react-bootstrap-table.js index 5d4585ae6..11191db76 100644 --- a/dist/react-bootstrap-table.js +++ b/dist/react-bootstrap-table.js @@ -66,11 +66,11 @@ return /******/ (function(modules) { // webpackBootstrap var _BootstrapTable2 = _interopRequireDefault(_BootstrapTable); - var _TableHeaderColumn = __webpack_require__(41); + var _TableHeaderColumn = __webpack_require__(40); var _TableHeaderColumn2 = _interopRequireDefault(_TableHeaderColumn); - var _storeTableDataStore = __webpack_require__(33); + var _storeTableDataStore = __webpack_require__(32); if (typeof window !== 'undefined') { window.BootstrapTable = _BootstrapTable2['default']; @@ -122,29 +122,29 @@ return /******/ (function(modules) { // webpackBootstrap var _TableBody2 = _interopRequireDefault(_TableBody); - var _paginationPaginationList = __webpack_require__(29); + var _paginationPaginationList = __webpack_require__(28); var _paginationPaginationList2 = _interopRequireDefault(_paginationPaginationList); - var _toolbarToolBar = __webpack_require__(31); + var _toolbarToolBar = __webpack_require__(30); var _toolbarToolBar2 = _interopRequireDefault(_toolbarToolBar); - var _TableFilter = __webpack_require__(32); + var _TableFilter = __webpack_require__(31); var _TableFilter2 = _interopRequireDefault(_TableFilter); - var _storeTableDataStore = __webpack_require__(33); + var _storeTableDataStore = __webpack_require__(32); - var _util = __webpack_require__(35); + var _util = __webpack_require__(34); var _util2 = _interopRequireDefault(_util); - var _csv_export_util = __webpack_require__(36); + var _csv_export_util = __webpack_require__(35); var _csv_export_util2 = _interopRequireDefault(_csv_export_util); - var _Filter = __webpack_require__(40); + var _Filter = __webpack_require__(39); var BootstrapTable = (function (_Component) { _inherits(BootstrapTable, _Component); @@ -198,15 +198,15 @@ return /******/ (function(modules) { // webpackBootstrap } }; - this.handleRowMouseOut = function (row) { + this.handleRowMouseOut = function (row, event) { if (_this.props.options.onRowMouseOut) { - _this.props.options.onRowMouseOut(row); + _this.props.options.onRowMouseOut(row, event); } }; - this.handleRowMouseOver = function (row) { + this.handleRowMouseOver = function (row, event) { if (_this.props.options.onRowMouseOver) { - _this.props.options.onRowMouseOver(row); + _this.props.options.onRowMouseOver(row, event); } }; @@ -1449,14 +1449,14 @@ return /******/ (function(modules) { // webpackBootstrap _get(Object.getPrototypeOf(TableBody.prototype), 'constructor', this).call(this, props); - this.handleRowMouseOut = function (rowIndex) { + this.handleRowMouseOut = function (rowIndex, event) { var targetRow = _this.props.data[rowIndex]; - _this.props.onRowMouseOut(targetRow); + _this.props.onRowMouseOut(targetRow, event); }; - this.handleRowMouseOver = function (rowIndex) { + this.handleRowMouseOver = function (rowIndex, event) { var targetRow = _this.props.data[rowIndex]; - _this.props.onRowMouseOver(targetRow); + _this.props.onRowMouseOver(targetRow, event); }; this.handleRowClick = function (rowIndex) { @@ -1792,13 +1792,13 @@ return /******/ (function(modules) { // webpackBootstrap this.rowMouseOut = function (e) { if (_this.props.onRowMouseOut) { - _this.props.onRowMouseOut(e.currentTarget.rowIndex); + _this.props.onRowMouseOut(e.currentTarget.rowIndex, e); } }; this.rowMouseOver = function (e) { if (_this.props.onRowMouseOver) { - _this.props.onRowMouseOver(e.currentTarget.rowIndex); + _this.props.onRowMouseOver(e.currentTarget.rowIndex, e); } }; @@ -2451,23 +2451,10 @@ return /******/ (function(modules) { // webpackBootstrap _this2.refs[key].hideToast(false); }); } - }, { - key: "render", - value: function render() { - var _this3 = this; - - return _react2.default.createElement( - "div", - _extends({}, this.props, { "aria-live": "polite", role: "alert" }), - this.state.toasts.map(function (toast) { - return _this3.props.toastMessageFactory(toast); - }) - ); - } }, { key: "_notify", value: function _notify(type, message, title) { - var _this4 = this; + var _this3 = this; var optionsOverride = arguments.length <= 3 || arguments[3] === undefined ? {} : arguments[3]; @@ -2490,7 +2477,7 @@ return /******/ (function(modules) { // webpackBootstrap if ("function" === typeof optionsOverride.handleOnClick) { optionsOverride.handleOnClick(); } - return _this4._handle_toast_on_click(e); + return _this3._handle_toast_on_click(e); }, handleRemove: this._handle_toast_remove.bind(this) } @@ -2516,24 +2503,50 @@ return /******/ (function(modules) { // webpackBootstrap }, { key: "_handle_toast_remove", value: function _handle_toast_remove(toastId) { - var _this5 = this; + var _this4 = this; var operationName = "" + (this.props.newestOnTop ? "reduceRight" : "reduce"); this.state.toasts[operationName](function (found, toast, index) { if (found || toast.toastId !== toastId) { return false; } - _this5.setState((0, _reactAddonsUpdate2.default)(_this5.state, { + _this4.setState((0, _reactAddonsUpdate2.default)(_this4.state, { toasts: { $splice: [[index, 1]] } })); return true; }, false); } + }, { + key: "render", + value: function render() { + var _this5 = this; + + return _react2.default.createElement( + "div", + _extends({}, this.props, { "aria-live": "polite", role: "alert" }), + this.state.toasts.map(function (toast) { + return _this5.props.toastMessageFactory(toast); + }) + ); + } }]); return ToastContainer; }(_react.Component); + ToastContainer.propTypes = { + toastType: _react.PropTypes.shape({ + error: _react.PropTypes.string, + info: _react.PropTypes.string, + success: _react.PropTypes.string, + warning: _react.PropTypes.string + }).isRequired, + id: _react.PropTypes.string.isRequired, + toastMessageFactory: _react.PropTypes.func.isRequired, + preventDuplicates: _react.PropTypes.bool.isRequired, + newestOnTop: _react.PropTypes.bool.isRequired, + onClick: _react.PropTypes.func.isRequired + }; ToastContainer.defaultProps = { toastType: { error: "error", @@ -2940,7 +2953,7 @@ return /******/ (function(modules) { // webpackBootstrap var _animationMixin2 = _interopRequireDefault(_animationMixin); - var _jQueryMixin = __webpack_require__(28); + var _jQueryMixin = __webpack_require__(27); var _jQueryMixin2 = _interopRequireDefault(_jQueryMixin); @@ -3055,11 +3068,7 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _CSSCore = __webpack_require__(24); - - var _CSSCore2 = _interopRequireDefault(_CSSCore); - - var _ReactTransitionEvents = __webpack_require__(26); + var _ReactTransitionEvents = __webpack_require__(24); var _ReactTransitionEvents2 = _interopRequireDefault(_ReactTransitionEvents); @@ -3067,6 +3076,10 @@ return /******/ (function(modules) { // webpackBootstrap var _reactDom2 = _interopRequireDefault(_reactDom); + var _elementClass = __webpack_require__(26); + + var _elementClass2 = _interopRequireDefault(_elementClass); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var TICK = 17; @@ -3123,15 +3136,16 @@ return /******/ (function(modules) { // webpackBootstrap return; } - _CSSCore2.default.removeClass(node, className); - _CSSCore2.default.removeClass(node, activeClassName); + var classList = (0, _elementClass2.default)(node); + classList.remove(className); + classList.remove(activeClassName); _ReactTransitionEvents2.default.removeEndEventListener(node, endListener); }; _ReactTransitionEvents2.default.addEndEventListener(node, endListener); - _CSSCore2.default.addClass(node, className); + (0, _elementClass2.default)(node).add(className); // Need to do this to actually trigger a transition. this._queue_class(activeClassName); @@ -3142,8 +3156,9 @@ return /******/ (function(modules) { // webpackBootstrap var className = this.props.transition + "-" + animationType; var activeClassName = className + "-active"; - _CSSCore2.default.removeClass(node, className); - _CSSCore2.default.removeClass(node, activeClassName); + var classList = (0, _elementClass2.default)(node); + classList.remove(className); + classList.remove(activeClassName); }, _set_animation: function _set_animation(hide) { var node = _reactDom2.default.findDOMNode(this); @@ -3154,7 +3169,7 @@ return /******/ (function(modules) { // webpackBootstrap } animations.forEach(function (anim) { - _CSSCore2.default.removeClass(node, anim); + return (0, _elementClass2.default)(node).remove(anim); }); _ReactTransitionEvents2.default.removeEndEventListener(node, endListener); @@ -3163,7 +3178,7 @@ return /******/ (function(modules) { // webpackBootstrap _ReactTransitionEvents2.default.addEndEventListener(node, endListener); animations.forEach(function (anim) { - _CSSCore2.default.addClass(node, anim); + return (0, _elementClass2.default)(node).add(anim); }); }, _get_animation_classes: function _get_animation_classes(hide) { @@ -3175,11 +3190,10 @@ return /******/ (function(modules) { // webpackBootstrap } }, _clear_animation: function _clear_animation(hide) { - var _this2 = this; - + var node = _reactDom2.default.findDOMNode(this); var animations = this._get_animation_classes(hide); animations.forEach(function (animation) { - _CSSCore2.default.removeClass(_reactDom2.default.findDOMNode(_this2), animation); + return (0, _elementClass2.default)(node).remove(animation); }); }, _queue_class: function _queue_class(className) { @@ -3190,8 +3204,15 @@ return /******/ (function(modules) { // webpackBootstrap } }, _flush_class_name_queue: function _flush_class_name_queue() { + var _this2 = this; + if (this._is_mounted) { - this.classNameQueue.forEach(_CSSCore2.default.addClass.bind(_CSSCore2.default, _reactDom2.default.findDOMNode(this))); + (function () { + var node = _reactDom2.default.findDOMNode(_this2); + _this2.classNameQueue.forEach(function (className) { + return (0, _elementClass2.default)(node).add(className); + }); + })(); } this.classNameQueue.length = 0; this.timeout = null; @@ -3245,165 +3266,6 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, /* 24 */ -/***/ function(module, exports, __webpack_require__) { - - /* WEBPACK VAR INJECTION */(function(process) {/** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule CSSCore - * @typechecks - */ - - 'use strict'; - - var invariant = __webpack_require__(25); - - /** - * The CSSCore module specifies the API (and implements most of the methods) - * that should be used when dealing with the display of elements (via their - * CSS classes and visibility on screen. It is an API focused on mutating the - * display and not reading it as no logical state should be encoded in the - * display of elements. - */ - - var CSSCore = { - - /** - * Adds the class passed in to the element if it doesn't already have it. - * - * @param {DOMElement} element the element to set the class on - * @param {string} className the CSS className - * @return {DOMElement} the element passed in - */ - addClass: function (element, className) { - !!/\s/.test(className) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'CSSCore.addClass takes only a single class name. "%s" contains ' + 'multiple classes.', className) : invariant(false) : undefined; - - if (className) { - if (element.classList) { - element.classList.add(className); - } else if (!CSSCore.hasClass(element, className)) { - element.className = element.className + ' ' + className; - } - } - return element; - }, - - /** - * Removes the class passed in from the element - * - * @param {DOMElement} element the element to set the class on - * @param {string} className the CSS className - * @return {DOMElement} the element passed in - */ - removeClass: function (element, className) { - !!/\s/.test(className) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'CSSCore.removeClass takes only a single class name. "%s" contains ' + 'multiple classes.', className) : invariant(false) : undefined; - - if (className) { - if (element.classList) { - element.classList.remove(className); - } else if (CSSCore.hasClass(element, className)) { - element.className = element.className.replace(new RegExp('(^|\\s)' + className + '(?:\\s|$)', 'g'), '$1').replace(/\s+/g, ' ') // multiple spaces to one - .replace(/^\s*|\s*$/g, ''); // trim the ends - } - } - return element; - }, - - /** - * Helper to add or remove a class from an element based on a condition. - * - * @param {DOMElement} element the element to set the class on - * @param {string} className the CSS className - * @param {*} bool condition to whether to add or remove the class - * @return {DOMElement} the element passed in - */ - conditionClass: function (element, className, bool) { - return (bool ? CSSCore.addClass : CSSCore.removeClass)(element, className); - }, - - /** - * Tests whether the element has the class specified. - * - * @param {DOMNode|DOMWindow} element the element to set the class on - * @param {string} className the CSS className - * @return {boolean} true if the element has the class, false if not - */ - hasClass: function (element, className) { - !!/\s/.test(className) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'CSS.hasClass takes only a single class name.') : invariant(false) : undefined; - if (element.classList) { - return !!className && element.classList.contains(className); - } - return (' ' + element.className + ' ').indexOf(' ' + className + ' ') > -1; - } - - }; - - module.exports = CSSCore; - /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(18))) - -/***/ }, -/* 25 */ -/***/ function(module, exports, __webpack_require__) { - - /* WEBPACK VAR INJECTION */(function(process) {/** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule invariant - */ - - 'use strict'; - - /** - * Use invariant() to assert state which your program assumes to be true. - * - * Provide sprintf-style format (only %s is supported) and arguments - * to provide information about what broke and what you were - * expecting. - * - * The invariant message will be stripped in production, but the invariant - * will remain to ensure logic does not differ in production. - */ - - function invariant(condition, format, a, b, c, d, e, f) { - if (process.env.NODE_ENV !== 'production') { - if (format === undefined) { - throw new Error('invariant requires an error message argument'); - } - } - - if (!condition) { - var error; - if (format === undefined) { - error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.'); - } else { - var args = [a, b, c, d, e, f]; - var argIndex = 0; - error = new Error(format.replace(/%s/g, function () { - return args[argIndex++]; - })); - error.name = 'Invariant Violation'; - } - - error.framesToPop = 1; // we don't care about invariant's own frame - throw error; - } - } - - module.exports = invariant; - /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(18))) - -/***/ }, -/* 26 */ /***/ function(module, exports, __webpack_require__) { /** @@ -3419,7 +3281,7 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; - var ExecutionEnvironment = __webpack_require__(27); + var ExecutionEnvironment = __webpack_require__(25); /** * EVENT_NAME_MAP is used to determine which event fired when a @@ -3517,7 +3379,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = ReactTransitionEvents; /***/ }, -/* 27 */ +/* 25 */ /***/ function(module, exports) { /** @@ -3558,7 +3420,72 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = ExecutionEnvironment; /***/ }, -/* 28 */ +/* 26 */ +/***/ function(module, exports) { + + module.exports = function(opts) { + return new ElementClass(opts) + } + + function indexOf(arr, prop) { + if (arr.indexOf) return arr.indexOf(prop) + for (var i = 0, len = arr.length; i < len; i++) + if (arr[i] === prop) return i + return -1 + } + + function ElementClass(opts) { + if (!(this instanceof ElementClass)) return new ElementClass(opts) + var self = this + if (!opts) opts = {} + + // similar doing instanceof HTMLElement but works in IE8 + if (opts.nodeType) opts = {el: opts} + + this.opts = opts + this.el = opts.el || document.body + if (typeof this.el !== 'object') this.el = document.querySelector(this.el) + } + + ElementClass.prototype.add = function(className) { + var el = this.el + if (!el) return + if (el.className === "") return el.className = className + var classes = el.className.split(' ') + if (indexOf(classes, className) > -1) return classes + classes.push(className) + el.className = classes.join(' ') + return classes + } + + ElementClass.prototype.remove = function(className) { + var el = this.el + if (!el) return + if (el.className === "") return + var classes = el.className.split(' ') + var idx = indexOf(classes, className) + if (idx > -1) classes.splice(idx, 1) + el.className = classes.join(' ') + return classes + } + + ElementClass.prototype.has = function(className) { + var el = this.el + if (!el) return + var classes = el.className.split(' ') + return indexOf(classes, className) > -1 + } + + ElementClass.prototype.toggle = function(className) { + var el = this.el + if (!el) return + if (this.has(className)) this.remove(className) + else this.add(className) + } + + +/***/ }, +/* 27 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3651,7 +3578,7 @@ return /******/ (function(modules) { // webpackBootstrap }; /***/ }, -/* 29 */ +/* 28 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -3674,7 +3601,7 @@ return /******/ (function(modules) { // webpackBootstrap var _react2 = _interopRequireDefault(_react); - var _PageButtonJs = __webpack_require__(30); + var _PageButtonJs = __webpack_require__(29); var _PageButtonJs2 = _interopRequireDefault(_PageButtonJs); @@ -3907,7 +3834,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 30 */ +/* 29 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -3985,7 +3912,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 31 */ +/* 30 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -4444,7 +4371,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 32 */ +/* 31 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -4579,7 +4506,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 33 */ +/* 32 */ /***/ function(module, exports, __webpack_require__) { /* eslint no-nested-ternary: 0 */ @@ -4606,7 +4533,7 @@ return /******/ (function(modules) { // webpackBootstrap var _Const2 = _interopRequireDefault(_Const); - var EventEmitter = __webpack_require__(34).EventEmitter; + var EventEmitter = __webpack_require__(33).EventEmitter; function _sort(arr, sortField, order, sortFunc) { order = order.toLowerCase(); @@ -5129,7 +5056,7 @@ return /******/ (function(modules) { // webpackBootstrap exports.TableDataStore = TableDataStore; /***/ }, -/* 34 */ +/* 33 */ /***/ function(module, exports) { // Copyright Joyent, Inc. and other Node contributors. @@ -5215,11 +5142,18 @@ return /******/ (function(modules) { // webpackBootstrap break; // slower default: - args = Array.prototype.slice.call(arguments, 1); + len = arguments.length; + args = new Array(len - 1); + for (i = 1; i < len; i++) + args[i - 1] = arguments[i]; handler.apply(this, args); } } else if (isObject(handler)) { - args = Array.prototype.slice.call(arguments, 1); + len = arguments.length; + args = new Array(len - 1); + for (i = 1; i < len; i++) + args[i - 1] = arguments[i]; + listeners = handler.slice(); len = listeners.length; for (i = 0; i < len; i++) @@ -5257,6 +5191,7 @@ return /******/ (function(modules) { // webpackBootstrap // Check for listener leak if (isObject(this._events[type]) && !this._events[type].warned) { + var m; if (!isUndefined(this._maxListeners)) { m = this._maxListeners; } else { @@ -5378,7 +5313,7 @@ return /******/ (function(modules) { // webpackBootstrap if (isFunction(listeners)) { this.removeListener(type, listeners); - } else if (listeners) { + } else { // LIFO order while (listeners.length) this.removeListener(type, listeners[listeners.length - 1]); @@ -5399,20 +5334,15 @@ return /******/ (function(modules) { // webpackBootstrap return ret; }; - EventEmitter.prototype.listenerCount = function(type) { - if (this._events) { - var evlistener = this._events[type]; - - if (isFunction(evlistener)) - return 1; - else if (evlistener) - return evlistener.length; - } - return 0; - }; - EventEmitter.listenerCount = function(emitter, type) { - return emitter.listenerCount(type); + var ret; + if (!emitter._events || !emitter._events[type]) + ret = 0; + else if (isFunction(emitter._events[type])) + ret = 1; + else + ret = emitter._events[type].length; + return ret; }; function isFunction(arg) { @@ -5433,7 +5363,7 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 35 */ +/* 34 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -5501,7 +5431,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 36 */ +/* 35 */ /***/ function(module, exports, __webpack_require__) { /* eslint block-scoped-var: 0 */ @@ -5514,7 +5444,7 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); if (typeof window !== 'undefined') { - var filesaver = __webpack_require__(37); + var filesaver = __webpack_require__(36); var saveAs = filesaver.saveAs; } @@ -5548,7 +5478,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 37 */ +/* 36 */ /***/ function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* FileSaver.js @@ -5809,21 +5739,21 @@ return /******/ (function(modules) { // webpackBootstrap if (typeof module !== "undefined" && module.exports) { module.exports.saveAs = saveAs; - } else if ("function" !== "undefined" && __webpack_require__(38) !== null && __webpack_require__(39) != null) { + } else if ("function" !== "undefined" && __webpack_require__(37) !== null && __webpack_require__(38) != null) { !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function () { return saveAs; }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); } /***/ }, -/* 38 */ +/* 37 */ /***/ function(module, exports) { module.exports = function() { throw new Error("define cannot be used indirect"); }; /***/ }, -/* 39 */ +/* 38 */ /***/ function(module, exports) { /* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {module.exports = __webpack_amd_options__; @@ -5831,7 +5761,7 @@ return /******/ (function(modules) { // webpackBootstrap /* WEBPACK VAR INJECTION */}.call(exports, {})) /***/ }, -/* 40 */ +/* 39 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -5854,7 +5784,7 @@ return /******/ (function(modules) { // webpackBootstrap var _Const2 = _interopRequireDefault(_Const); - var _events = __webpack_require__(34); + var _events = __webpack_require__(33); var Filter = (function (_EventEmitter) { _inherits(Filter, _EventEmitter); @@ -5901,7 +5831,7 @@ return /******/ (function(modules) { // webpackBootstrap exports.Filter = Filter; /***/ }, -/* 41 */ +/* 40 */ /***/ function(module, exports, __webpack_require__) { /* eslint default-case: 0 */ @@ -5932,27 +5862,27 @@ return /******/ (function(modules) { // webpackBootstrap var _Const2 = _interopRequireDefault(_Const); - var _util = __webpack_require__(35); + var _util = __webpack_require__(34); var _util2 = _interopRequireDefault(_util); - var _filtersDate = __webpack_require__(42); + var _filtersDate = __webpack_require__(41); var _filtersDate2 = _interopRequireDefault(_filtersDate); - var _filtersText = __webpack_require__(43); + var _filtersText = __webpack_require__(42); var _filtersText2 = _interopRequireDefault(_filtersText); - var _filtersRegex = __webpack_require__(44); + var _filtersRegex = __webpack_require__(43); var _filtersRegex2 = _interopRequireDefault(_filtersRegex); - var _filtersSelect = __webpack_require__(45); + var _filtersSelect = __webpack_require__(44); var _filtersSelect2 = _interopRequireDefault(_filtersSelect); - var _filtersNumber = __webpack_require__(46); + var _filtersNumber = __webpack_require__(45); var _filtersNumber2 = _interopRequireDefault(_filtersNumber); @@ -6131,7 +6061,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 42 */ +/* 41 */ /***/ function(module, exports, __webpack_require__) { /* eslint quotes: 0 */ @@ -6223,7 +6153,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 43 */ +/* 42 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -6323,7 +6253,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 44 */ +/* 43 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -6423,7 +6353,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 45 */ +/* 44 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -6536,7 +6466,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 46 */ +/* 45 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -6750,4 +6680,4 @@ return /******/ (function(modules) { // webpackBootstrap /******/ ]) }); ; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCA3ZDJhNWYzY2RhMzY5Y2I5MTEwNCIsIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jvb3RzdHJhcFRhYmxlLmpzIiwid2VicGFjazovLy9leHRlcm5hbCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovLy8uL3NyYy9Db25zdC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvVGFibGVIZWFkZXIuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcInJvb3RcIjpcIlJlYWN0RE9NXCIsXCJjb21tb25qczJcIjpcInJlYWN0LWRvbVwiLFwiY29tbW9uanNcIjpcInJlYWN0LWRvbVwiLFwiYW1kXCI6XCJyZWFjdC1kb21cIn0iLCJ3ZWJwYWNrOi8vLy4vfi9jbGFzc25hbWVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9TZWxlY3RSb3dIZWFkZXJDb2x1bW4uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL1RhYmxlQm9keS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvVGFibGVSb3cuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL1RhYmxlQ29sdW1uLmpzIiwid2VicGFjazovLy8uL3NyYy9UYWJsZUVkaXRDb2x1bW4uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL0VkaXRvci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvTm90aWZpY2F0aW9uLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtdG9hc3RyL2xpYi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXRvYXN0ci9saWIvVG9hc3RDb250YWluZXIuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC10b2FzdHIvfi9yZWFjdC1hZGRvbnMtdXBkYXRlL2luZGV4LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QvbGliL3VwZGF0ZS5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL34vbm9kZS1saWJzLWJyb3dzZXIvfi9wcm9jZXNzL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC9saWIvT2JqZWN0LmFzc2lnbi5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0L34vZmJqcy9saWIva2V5T2YuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC9+L2ZianMvbGliL2ludmFyaWFudC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXRvYXN0ci9saWIvVG9hc3RNZXNzYWdlL2luZGV4LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtdG9hc3RyL2xpYi9Ub2FzdE1lc3NhZ2UvYW5pbWF0aW9uTWl4aW4uanMiLCJ3ZWJwYWNrOi8vLy4vfi9mYmpzL2xpYi9DU1NDb3JlLmpzIiwid2VicGFjazovLy8uL34vZmJqcy9saWIvaW52YXJpYW50LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QvbGliL1JlYWN0VHJhbnNpdGlvbkV2ZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0L34vZmJqcy9saWIvRXhlY3V0aW9uRW52aXJvbm1lbnQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC10b2FzdHIvbGliL1RvYXN0TWVzc2FnZS9qUXVlcnlNaXhpbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcGFnaW5hdGlvbi9QYWdpbmF0aW9uTGlzdC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcGFnaW5hdGlvbi9QYWdlQnV0dG9uLmpzIiwid2VicGFjazovLy8uL3NyYy90b29sYmFyL1Rvb2xCYXIuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL1RhYmxlRmlsdGVyLmpzIiwid2VicGFjazovLy8uL3NyYy9zdG9yZS9UYWJsZURhdGFTdG9yZS5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL34vbm9kZS1saWJzLWJyb3dzZXIvfi9ldmVudHMvZXZlbnRzLmpzIiwid2VicGFjazovLy8uL3NyYy91dGlsLmpzIiwid2VicGFjazovLy8uL3NyYy9jc3ZfZXhwb3J0X3V0aWwuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2ZpbGVzYXZlci5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vYW1kLWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vYW1kLW9wdGlvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL0ZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvVGFibGVIZWFkZXJDb2x1bW4uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2ZpbHRlcnMvRGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZmlsdGVycy9UZXh0LmpzIiwid2VicGFjazovLy8uL3NyYy9maWx0ZXJzL1JlZ2V4LmpzIiwid2VicGFjazovLy8uL3NyYy9maWx0ZXJzL1NlbGVjdC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZmlsdGVycy9OdW1iZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87QUNWQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBZTtBQUNmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7MkNDdEMyQixDQUFrQjs7Ozs4Q0FDZixFQUFxQjs7OztnREFDdEIsRUFBd0I7O0FBRXJELEtBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxFQUFFO0FBQ2pDLFNBQU0sQ0FBQyxjQUFjLDhCQUFpQixDQUFDO0FBQ3ZDLFNBQU0sQ0FBQyxpQkFBaUIsaUNBQW9CLENBQUM7QUFDN0MsU0FBTSxDQUFDLFlBQVksb0NBQWUsQ0FBQztFQUNwQztzQkFDYztBQUNiLGlCQUFjO0FBQ2Qsb0JBQWlC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QTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLElBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQU87O0FBRVA7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsTUFBSztBQUNMLElBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMLElBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQSxJQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLElBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBLElBQUc7QUFDSDtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEc7Ozs7OztBQ2hNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztB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OztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQUc7QUFDSCxxQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O2tDQ3pTa0IsQ0FBTzs7OztrQ0FDUCxDQUFTOzs7O3VDQUNOLENBQVk7Ozs7c0JBRWxCO0FBQ2IsdUJBQW9CLGdDQUFDLEtBQUssRUFBRTtBQUMxQixTQUFNLFVBQVUsR0FBRyw2QkFBUyxPQUFPLEVBQUU7QUFDbkMsZUFBUSxFQUFFLEtBQUssS0FBSyxtQkFBTSxRQUFRO01BQ25DLENBQUMsQ0FBQztBQUNILFlBQ0U7O1NBQU0sU0FBUyxFQUFHLFVBQVk7T0FDNUIsMkNBQU0sU0FBUyxFQUFDLE9BQU8sRUFBQyxLQUFLLEVBQUcsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFJLEdBQVE7TUFDMUQsQ0FDUDtJQUNIOztBQUVELG9CQUFpQiwrQkFBRztBQUNsQixTQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFDLFVBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUMzQixVQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7O0FBRTdCLFNBQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUMsVUFBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0FBQ2xDLFVBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQztBQUN4QixVQUFLLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDekIsVUFBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDO0FBQ2xDLFVBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQztBQUM1QixVQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7QUFDN0IsVUFBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBQ2hDLFVBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7O0FBRXpCLGFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2pDLFNBQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7QUFDN0IsVUFBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBQ2hDLFNBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7QUFDM0IsU0FBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDOztBQUV0QyxhQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7QUFFakMsWUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFFO0lBQ2xCOztBQUVELFlBQVMsdUJBQUc7QUFDVixZQUFPLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxPQUFPLE1BQU0sQ0FBQyxRQUFRLEtBQUssV0FBVyxDQUFDO0lBQ2hGO0VBQ0Y7Ozs7Ozs7Ozs7Ozs7Ozs7QUN6Q0QsS0FBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUU7QUFDakMsT0FBTSxTQUFTLEdBQUcsbUJBQU8sQ0FBQyxFQUFhLENBQUMsQ0FBQztBQUN6QyxPQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO0VBQy9COztBQUVELFVBQVMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7QUFDNUIsT0FBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLE9BQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsT0FBTyxVQUFVLENBQUM7O0FBRXpDLGFBQVUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQzs7QUFFcEMsT0FBSSxDQUFDLEdBQUcsQ0FBQyxVQUFTLEdBQUcsRUFBRTtBQUNyQixTQUFJLENBQUMsR0FBRyxDQUFDLFVBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUN4QixXQUFNLElBQUksR0FBRyxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxXQUFXLEdBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUksRUFBRSxDQUFDO0FBQzNFLGlCQUFVLElBQUksSUFBSSxDQUFDO0FBQ25CLFdBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsSUFBSSxHQUFHLENBQUM7TUFDNUMsQ0FBQyxDQUFDOztBQUVILGVBQVUsSUFBSSxJQUFJLENBQUM7SUFDcEIsQ0FBQyxDQUFDOztBQUVILFVBQU8sVUFBVSxDQUFDO0VBQ25COztBQUVELEtBQU0sU0FBUyxHQUFHLFNBQVosU0FBUyxDQUFZLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0FBQy9DLE9BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEMsT0FBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUU7QUFDakMsV0FBTSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUUsVUFBVSxDQUFFLEVBQzFCLEVBQUUsSUFBSSxFQUFFLDBCQUEwQixFQUFFLENBQUMsRUFDckMsUUFBUSxJQUFJLGlCQUFpQixDQUFDLENBQUM7SUFDcEM7RUFDRixDQUFDOztzQkFFYSxTQUFTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3ZCeEIsS0FBSSxNQUFNLEdBQUcsTUFBTSxJQUFLLFdBQVMsSUFBSSxFQUFFO0FBQ3RDLGNBQVksQ0FBQzs7QUFFYixNQUFJLE9BQU8sU0FBUyxLQUFLLFdBQVcsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRTtBQUNqRixVQUFPO0dBQ1A7QUFDRCxNQUNHLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUTs7O0FBRW5CLFNBQU8sR0FBRyxTQUFWLE9BQU8sR0FBYztBQUN0QixVQUFPLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUM7R0FDMUM7TUFDQyxTQUFTLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyw4QkFBOEIsRUFBRSxHQUFHLENBQUM7TUFDcEUsaUJBQWlCLElBQUcsVUFBVSxJQUFJLFNBQVM7TUFDM0MsS0FBSyxHQUFHLFNBQVIsS0FBSyxDQUFZLElBQUksRUFBRTtBQUN4QixPQUFJLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNwQyxPQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0dBQzFCO01BQ0MsU0FBUyxHQUFHLDBCQUEwQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDO01BQ2hFLGFBQWEsR0FBRyxJQUFJLENBQUMsdUJBQXVCO01BQzVDLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLElBQUksYUFBYSxJQUFJLElBQUksQ0FBQyxvQkFBb0I7TUFDN0UsYUFBYSxHQUFHLFNBQWhCLGFBQWEsQ0FBWSxFQUFFLEVBQUU7QUFDOUIsSUFBQyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsWUFBVztBQUNqRCxVQUFNLEVBQUUsQ0FBQztJQUNULEVBQUUsQ0FBQyxDQUFDLENBQUM7R0FDTjtNQUNDLG1CQUFtQixHQUFHLDBCQUEwQjtNQUNoRCxXQUFXLEdBQUcsQ0FBQzs7Ozs7QUFJZiwwQkFBd0IsR0FBRyxHQUFHOztBQUM5QixRQUFNLEdBQUcsU0FBVCxNQUFNLENBQVksSUFBSSxFQUFFO0FBQ3pCLE9BQUksT0FBTyxHQUFHLFNBQVYsT0FBTyxHQUFjO0FBQ3hCLFFBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFOztBQUM3QixZQUFPLEVBQUUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDaEMsTUFBTTs7QUFDTixTQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7S0FDZDtJQUNELENBQUM7QUFDRixPQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDaEIsV0FBTyxFQUFFLENBQUM7SUFDVixNQUFNO0FBQ04sY0FBVSxDQUFDLE9BQU8sRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0lBQzlDO0dBQ0Q7TUFDQyxRQUFRLEdBQUcsU0FBWCxRQUFRLENBQVksU0FBUyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUU7QUFDcEQsY0FBVyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDckMsT0FBSSxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztBQUMzQixVQUFPLENBQUMsRUFBRSxFQUFFO0FBQ1gsUUFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRCxRQUFJLE9BQU8sUUFBUSxLQUFLLFVBQVUsRUFBRTtBQUNuQyxTQUFJO0FBQ0gsY0FBUSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxJQUFJLFNBQVMsQ0FBQyxDQUFDO01BQzdDLENBQUMsT0FBTyxFQUFFLEVBQUU7QUFDWixtQkFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQ2xCO0tBQ0Q7SUFDRDtHQUNEO01BQ0MsUUFBUSxHQUFHLFNBQVgsUUFBUSxDQUFZLElBQUksRUFBRTs7QUFFM0IsT0FBSSw0RUFBNEUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ2pHLFdBQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBQyxDQUFDLENBQUM7SUFDckQ7QUFDRCxVQUFPLElBQUksQ0FBQztHQUNaO01BQ0MsU0FBUyxHQUFHLFNBQVosU0FBUyxDQUFZLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQy9DLE9BQUksQ0FBQyxXQUFXLEVBQUU7QUFDakIsUUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0Qjs7QUFFRCxPQUNHLFNBQVMsR0FBRyxJQUFJO09BQ2hCLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSTtPQUNoQixZQUFZLEdBQUcsS0FBSztPQUNwQixVQUFVO09BQ1YsV0FBVztPQUNYLFlBQVksR0FBRyxTQUFmLFlBQVksR0FBYztBQUMzQixZQUFRLENBQUMsU0FBUyxFQUFFLG9DQUFvQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JFOzs7QUFFQyxXQUFRLEdBQUcsU0FBWCxRQUFRLEdBQWM7QUFDdkIsUUFBSSxXQUFXLElBQUksU0FBUyxJQUFJLE9BQU8sVUFBVSxLQUFLLFdBQVcsRUFBRTs7QUFFbEUsU0FBSSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztBQUM5QixXQUFNLENBQUMsU0FBUyxHQUFHLFlBQVc7QUFDN0IsVUFBSSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUMvQixpQkFBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsc0JBQXNCLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDakcsZUFBUyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO0FBQ3RDLGtCQUFZLEVBQUUsQ0FBQztNQUNmLENBQUM7QUFDRixXQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNCLGNBQVMsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztBQUN0QyxZQUFPO0tBQ1A7O0FBRUQsUUFBSSxZQUFZLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDaEMsZUFBVSxHQUFHLE9BQU8sRUFBRSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUM3QztBQUNELFFBQUksV0FBVyxFQUFFO0FBQ2hCLGdCQUFXLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7S0FDdkMsTUFBTTtBQUNOLFNBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzlDLFNBQUksT0FBTyxJQUFJLFNBQVMsSUFBSSxTQUFTLEVBQUU7O0FBRXRDLFVBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLFVBQVU7TUFDL0I7S0FDRDtBQUNELGFBQVMsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztBQUN0QyxnQkFBWSxFQUFFLENBQUM7QUFDZixVQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkI7T0FDQyxTQUFTLEdBQUcsU0FBWixTQUFTLENBQVksSUFBSSxFQUFFO0FBQzVCLFdBQU8sWUFBVztBQUNqQixTQUFJLFNBQVMsQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDLElBQUksRUFBRTtBQUM1QyxhQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO01BQ25DO0tBQ0QsQ0FBQztJQUNGO09BQ0MsbUJBQW1CLEdBQUcsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUM7T0FDdEQsS0FBSyxDQUNQO0FBQ0QsWUFBUyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO0FBQ3RDLE9BQUksQ0FBQyxJQUFJLEVBQUU7QUFDVixRQUFJLEdBQUcsVUFBVSxDQUFDO0lBQ2xCO0FBQ0QsT0FBSSxpQkFBaUIsRUFBRTtBQUN0QixjQUFVLEdBQUcsT0FBTyxFQUFFLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdDLGFBQVMsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO0FBQzVCLGFBQVMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzFCLGNBQVUsQ0FBQyxZQUFXO0FBQ3JCLFVBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNqQixpQkFBWSxFQUFFLENBQUM7QUFDZixXQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbkIsY0FBUyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO0tBQ3RDLENBQUMsQ0FBQztBQUNILFdBQU87SUFDUDs7Ozs7O0FBTUQsT0FBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLEtBQUssbUJBQW1CLEVBQUU7QUFDeEQsU0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQztBQUN2QyxRQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztBQUMzRCxnQkFBWSxHQUFHLElBQUksQ0FBQztJQUNwQjs7OztBQUlELE9BQUksYUFBYSxJQUFJLElBQUksS0FBSyxVQUFVLEVBQUU7QUFDekMsUUFBSSxJQUFJLFdBQVcsQ0FBQztJQUNwQjtBQUNELE9BQUksSUFBSSxLQUFLLG1CQUFtQixJQUFJLGFBQWEsRUFBRTtBQUNsRCxlQUFXLEdBQUcsSUFBSSxDQUFDO0lBQ25CO0FBQ0QsT0FBSSxDQUFDLE1BQU0sRUFBRTtBQUNaLFlBQVEsRUFBRSxDQUFDO0FBQ1gsV0FBTztJQUNQO0FBQ0QsY0FBVyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDekIsU0FBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxVQUFTLEVBQUUsRUFBRTtBQUMxRCxNQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxDQUFDLFVBQVMsR0FBRyxFQUFFO0FBQzFFLFNBQUksSUFBSSxHQUFHLFNBQVAsSUFBSSxHQUFjO0FBQ3JCLFNBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLG1CQUFtQixFQUFFLFNBQVMsQ0FBQyxVQUFTLElBQUksRUFBRTtBQUMvRCxXQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxVQUFTLE1BQU0sRUFBRTtBQUM1QyxjQUFNLENBQUMsVUFBVSxHQUFHLFVBQVMsS0FBSyxFQUFFO0FBQ25DLG9CQUFXLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDekMsa0JBQVMsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztBQUN0QyxpQkFBUSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDdkMsZUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2IsQ0FBQztBQUNGLGNBQU0sQ0FBQyxPQUFPLEdBQUcsWUFBVztBQUMzQixhQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQ3pCLGFBQUksS0FBSyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsU0FBUyxFQUFFO0FBQ25DLGtCQUFRLEVBQUUsQ0FBQztVQUNYO1NBQ0QsQ0FBQztBQUNGLHlDQUFpQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBUyxLQUFLLEVBQUU7QUFDcEUsZUFBTSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxTQUFTLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDO1NBQy9DLENBQUMsQ0FBQztBQUNILGNBQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkIsaUJBQVMsQ0FBQyxLQUFLLEdBQUcsWUFBVztBQUM1QixlQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDZixrQkFBUyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO1NBQ3RDLENBQUM7QUFDRixpQkFBUyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO1FBQ3pDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztPQUNkLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztNQUNkLENBQUM7QUFDRixRQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUMsRUFBRSxTQUFTLENBQUMsVUFBUyxJQUFJLEVBQUU7O0FBRTNELFVBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNkLFVBQUksRUFBRSxDQUFDO01BQ1AsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxVQUFTLEVBQUUsRUFBRTtBQUMxQixVQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLGFBQWEsRUFBRTtBQUNqQyxXQUFJLEVBQUUsQ0FBQztPQUNQLE1BQU07QUFDTixlQUFRLEVBQUUsQ0FBQztPQUNYO01BQ0QsQ0FBQyxDQUFDLENBQUM7S0FDSixDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDZCxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7R0FDZDtNQUNDLFFBQVEsR0FBRyxTQUFTLENBQUMsU0FBUztNQUM5QixNQUFNLEdBQUcsU0FBVCxNQUFNLENBQVksSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7QUFDNUMsVUFBTyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0dBQzlDLENBQ0Q7O0FBRUQsTUFBSSxPQUFPLFNBQVMsS0FBSyxXQUFXLElBQUksU0FBUyxDQUFDLGdCQUFnQixFQUFFO0FBQ25FLFVBQU8sVUFBUyxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtBQUN4QyxRQUFJLENBQUMsV0FBVyxFQUFFO0FBQ2pCLFNBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDdEI7QUFDRCxXQUFPLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLFVBQVUsQ0FBQyxDQUFDO0lBQzVELENBQUM7R0FDRjs7QUFFRCxVQUFRLENBQUMsS0FBSyxHQUFHLFlBQVc7QUFDM0IsT0FBSSxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLFlBQVMsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztBQUN0QyxXQUFRLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0dBQzdCLENBQUM7QUFDRixVQUFRLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLFVBQVEsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLFVBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDOztBQUVsQixVQUFRLENBQUMsS0FBSyxHQUNkLFFBQVEsQ0FBQyxZQUFZLEdBQ3JCLFFBQVEsQ0FBQyxVQUFVLEdBQ25CLFFBQVEsQ0FBQyxPQUFPLEdBQ2hCLFFBQVEsQ0FBQyxPQUFPLEdBQ2hCLFFBQVEsQ0FBQyxPQUFPLEdBQ2hCLFFBQVEsQ0FBQyxVQUFVLEdBQ2xCLElBQUksQ0FBQzs7QUFFTixTQUFPLE1BQU0sQ0FBQztFQUNkLEVBQ0csT0FBTyxJQUFJLEtBQUssV0FBVyxJQUFJLElBQUksSUFDbkMsT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLE1BQU0sSUFDdkMsVUFBSyxPQUFPLENBQ2QsQ0FBQzs7Ozs7QUFLSCxLQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFO0FBQ25ELFFBQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztFQUNoQyxNQUFNLElBQUssVUFBYSxLQUFLLFdBQVcsSUFBSSx1QkFBTSxLQUFLLElBQUksSUFBTSx1QkFBVSxJQUFJLElBQUssRUFBRTtBQUNyRixtQ0FBTyxFQUFFLGtDQUFFLFlBQVc7QUFDcEIsVUFBTyxNQUFNLENBQUM7R0FDZiwrSUFBQyxDQUFDOzs7Ozs7O0FDNVFMLDhCQUE2QixtREFBbUQ7Ozs7Ozs7QUNBaEY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrQ0NBa0IsQ0FBUzs7OzttQ0FDRSxFQUFROztLQUV4QixNQUFNO2FBQU4sTUFBTTs7QUFDTixZQURBLE1BQU0sQ0FDTCxJQUFJLEVBQUU7MkJBRFAsTUFBTTs7QUFFZixnQ0FGUyxNQUFNLDZDQUVULElBQUksRUFBRTtBQUNaLFNBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO0lBQ3pCOztnQkFKVSxNQUFNOztZQU1MLHNCQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO0FBQ25DLFdBQU0sVUFBVSxHQUFHLElBQUksSUFBSSxtQkFBTSxXQUFXLENBQUMsTUFBTSxDQUFDOztBQUVwRCxXQUFJLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFOztBQUUvQyxhQUFJLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDcEIsY0FBSyxJQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7QUFDeEIsZUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFO0FBQ3RDLHFCQUFRLEdBQUcsS0FBSyxDQUFDO0FBQ2pCLG1CQUFNO1lBQ1A7VUFDRjs7QUFFRCxhQUFJLFFBQVEsRUFBRTtBQUNaLGVBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQztVQUNwRSxNQUFNO0FBQ0wsa0JBQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztVQUN0QztRQUNGLE1BQU0sSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO0FBQ3hDLGdCQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEMsTUFBTTtBQUNMLGFBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQztRQUMzRTtBQUNELFdBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO01BQ2pEOzs7VUE5QlUsTUFBTTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0NDRHlCLENBQU87Ozs7a0NBQ2pDLENBQVM7Ozs7aUNBQ1YsRUFBUTs7Ozt3Q0FDRixFQUFnQjs7Ozt3Q0FDaEIsRUFBZ0I7Ozs7eUNBQ2YsRUFBaUI7Ozs7MENBQ2hCLEVBQWtCOzs7OzBDQUNsQixFQUFrQjs7OztLQUVyQyxpQkFBaUI7YUFBakIsaUJBQWlCOztBQUVWLFlBRlAsaUJBQWlCLENBRVQsS0FBSyxFQUFFOzs7MkJBRmYsaUJBQWlCOztBQUduQixnQ0FIRSxpQkFBaUIsNkNBR2IsS0FBSyxFQUFFOztVQUlmLGlCQUFpQixHQUFHLFlBQU07QUFDeEIsV0FBSSxDQUFDLE1BQUssS0FBSyxDQUFDLFFBQVEsRUFBRSxPQUFPO0FBQ2pDLFdBQU0sS0FBSyxHQUFHLE1BQUssS0FBSyxDQUFDLElBQUksS0FBSyxtQkFBTSxTQUFTLEdBQUcsbUJBQU0sUUFBUSxHQUFHLG1CQUFNLFNBQVMsQ0FBQztBQUNyRixhQUFLLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQUssS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO01BQ2hEOztBQVBDLFNBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEQ7O2dCQUxHLGlCQUFpQjs7WUFhVCxzQkFBQyxLQUFLLEVBQUUsSUFBSSxFQUFFO0FBQ3hCLFdBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO01BQzNFOzs7WUFFUyxzQkFBRztBQUNYLGVBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSTtBQUM5QixjQUFLLG1CQUFNLFdBQVcsQ0FBQyxJQUFJO0FBQUU7QUFDM0Isb0JBQ0Usd0VBQWlCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtBQUNoQyx5QkFBVSxFQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBVSxFQUFDLGFBQWEsRUFBRyxJQUFJLENBQUMsWUFBYyxJQUFHLENBQzNFO1lBQ0g7QUFDRCxjQUFLLG1CQUFNLFdBQVcsQ0FBQyxLQUFLO0FBQUU7QUFDNUIsb0JBQ0UseUVBQWtCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtBQUNqQyx5QkFBVSxFQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBVSxFQUFDLGFBQWEsRUFBRyxJQUFJLENBQUMsWUFBYyxJQUFHLENBQzNFO1lBQ0g7QUFDRCxjQUFLLG1CQUFNLFdBQVcsQ0FBQyxNQUFNO0FBQUU7QUFDN0Isb0JBQ0UsMEVBQW1CLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtBQUNsQyx5QkFBVSxFQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBVSxFQUFDLGFBQWEsRUFBRyxJQUFJLENBQUMsWUFBYyxJQUFHLENBQzNFO1lBQ0g7QUFDRCxjQUFLLG1CQUFNLFdBQVcsQ0FBQyxNQUFNO0FBQUU7QUFDN0Isb0JBQ0UsMEVBQW1CLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtBQUNsQyx5QkFBVSxFQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBVSxFQUFDLGFBQWEsRUFBRyxJQUFJLENBQUMsWUFBYyxJQUFHLENBQzNFO1lBQ0g7QUFDRCxjQUFLLG1CQUFNLFdBQVcsQ0FBQyxJQUFJO0FBQUU7QUFDM0Isb0JBQ0Usd0VBQWlCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtBQUNoQyx5QkFBVSxFQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBVSxFQUFDLGFBQWEsRUFBRyxJQUFJLENBQUMsWUFBYyxJQUFHLENBQzNFO1lBQ0g7QUFDRCxjQUFLLG1CQUFNLFdBQVcsQ0FBQyxNQUFNO0FBQUU7QUFDN0Isb0JBQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQ2pELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7WUFDL0M7QUFBQSxRQUNBO01BQ0Y7OztZQUVnQiw2QkFBRztBQUNsQixXQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztNQUMxRTs7O1lBRUssa0JBQUc7QUFDUCxXQUFJLFlBQVksYUFBQztBQUNqQixXQUFNLE9BQU8sR0FBRztBQUNkLGtCQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTO0FBQy9CLGdCQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLElBQUk7UUFDM0MsQ0FBQztBQUNGLFdBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUU7QUFDNUIscUJBQVksR0FBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFJLElBQUksR0FDMUM7O2FBQU0sU0FBUyxFQUFDLE9BQU87V0FDckI7O2VBQU0sU0FBUyxFQUFDLFVBQVU7YUFDeEIsMkNBQU0sU0FBUyxFQUFDLE9BQU8sRUFBQyxLQUFLLEVBQUcsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBSSxHQUFRO1lBQ2pGO1dBQ1A7O2VBQU0sU0FBUyxFQUFDLFFBQVE7YUFDdEIsMkNBQU0sU0FBUyxFQUFDLE9BQU8sRUFBQyxLQUFLLEVBQUcsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUksR0FBUTtZQUN4RTtVQUVWLENBQUM7UUFDSDtBQUNELFdBQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLGtCQUFLLG9CQUFvQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDO0FBQzlGLFdBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxhQUFhLEdBQUcsRUFBRSxDQUFDLENBQUM7O0FBRXhGLGNBQ0U7O1dBQUksR0FBRyxFQUFDLFlBQVk7QUFDaEIsb0JBQVMsRUFBRyxPQUFTO0FBQ3JCLGdCQUFLLEVBQUcsT0FBUztBQUNqQixnQkFBSyxFQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBVTtBQUM3QixrQkFBTyxFQUFHLElBQUksQ0FBQyxpQkFBbUI7U0FDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRO1NBQUksU0FBUztTQUNsQzs7YUFBSyxPQUFPLEVBQUcsV0FBQztzQkFBSSxDQUFDLENBQUMsZUFBZSxFQUFFO2NBQUU7V0FDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLElBQUk7VUFDMUM7UUFDSCxDQUNMO01BQ0g7OztVQTdGRyxpQkFBaUI7OztBQWdHdkIsS0FBTSxlQUFlLEdBQUcsRUFBRSxDQUFDO0FBQzNCLE1BQUssSUFBTSxHQUFHLElBQUksbUJBQU0sV0FBVyxFQUFFO0FBQ25DLGtCQUFlLENBQUMsSUFBSSxDQUFDLG1CQUFNLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzlDOztBQUVELGtCQUFpQixDQUFDLFNBQVMsR0FBRztBQUM1QixZQUFTLEVBQUUsaUJBQVUsTUFBTTtBQUMzQixZQUFTLEVBQUUsaUJBQVUsTUFBTTtBQUMzQixXQUFRLEVBQUUsaUJBQVUsSUFBSTtBQUN4QixTQUFNLEVBQUUsaUJBQVUsSUFBSTtBQUN0QixhQUFVLEVBQUUsaUJBQVUsSUFBSTtBQUMxQixRQUFLLEVBQUUsaUJBQVUsSUFBSTtBQUNyQixXQUFRLEVBQUUsaUJBQVUsR0FBRztBQUN2QixTQUFNLEVBQUUsaUJBQVUsSUFBSTtBQUN0QixhQUFVLEVBQUUsaUJBQVUsSUFBSTtBQUMxQixZQUFTLEVBQUUsaUJBQVUsTUFBTTtBQUMzQixRQUFLLEVBQUUsaUJBQVUsTUFBTTtBQUN2QixXQUFRLEVBQUUsaUJBQVUsSUFBSTtBQUN4QixrQkFBZSxFQUFFLGlCQUFVLEdBQUc7QUFDOUIsa0JBQWUsRUFBRSxpQkFBVSxJQUFJO0FBQy9CLE9BQUksRUFBRSxpQkFBVSxNQUFNO0FBQ3RCLGtCQUFlLEVBQUUsaUJBQVUsR0FBRztBQUM5QixTQUFNLEVBQUUsaUJBQVUsS0FBSyxDQUFDO0FBQ3RCLFNBQUksRUFBRSxpQkFBVSxLQUFLLENBQUMsZUFBZSxDQUFDO0FBQ3RDLFVBQUssRUFBRSxpQkFBVSxNQUFNO0FBQ3ZCLFlBQU8sRUFBRSxpQkFBVSxTQUFTLENBQUMsQ0FDM0IsaUJBQVUsTUFBTTtBQUNoQixzQkFBVSxPQUFPLENBQUMsaUJBQVUsTUFBTSxDQUFDO01BQ3BDLENBQUM7QUFDRixzQkFBaUIsRUFBRSxpQkFBVSxPQUFPLENBQUMsaUJBQVUsTUFBTSxDQUFDO0FBQ3RELFlBQU8sRUFBRSxpQkFBVSxNQUFNO0FBQ3pCLGdCQUFXLEVBQUUsaUJBQVUsTUFBTTtBQUM3QixlQUFVLEVBQUUsaUJBQVUsSUFBSTtBQUMxQiwyQkFBc0IsRUFBRSxpQkFBVSxNQUFNO0lBQ3pDLENBQUM7QUFDRixnQkFBYSxFQUFFLGlCQUFVLElBQUk7RUFDOUIsQ0FBQzs7QUFFRixrQkFBaUIsQ0FBQyxZQUFZLEdBQUc7QUFDL0IsWUFBUyxFQUFFLE1BQU07QUFDakIsV0FBUSxFQUFFLEtBQUs7QUFDZixhQUFVLEVBQUUsU0FBUztBQUNyQixRQUFLLEVBQUUsS0FBSztBQUNaLFdBQVEsRUFBRSxJQUFJO0FBQ2QsU0FBTSxFQUFFLFNBQVM7QUFDakIsU0FBTSxFQUFFLEtBQUs7QUFDYixhQUFVLEVBQUUsSUFBSTtBQUNoQixZQUFTLEVBQUUsRUFBRTtBQUNiLFFBQUssRUFBRSxJQUFJO0FBQ1gsV0FBUSxFQUFFLFNBQVM7QUFDbkIsa0JBQWUsRUFBRSxFQUFFO0FBQ25CLGtCQUFlLEVBQUUsS0FBSztBQUN0QixPQUFJLEVBQUUsU0FBUztBQUNmLGtCQUFlLEVBQUUsU0FBUztBQUMxQixTQUFNLEVBQUUsU0FBUztBQUNqQixnQkFBYSxFQUFFLElBQUk7RUFDcEIsQ0FBQzs7c0JBRWEsaUJBQWlCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tDQ25LWSxDQUFPOzs7O2tDQUNqQyxDQUFVOzs7O0tBRXRCLFVBQVU7YUFBVixVQUFVOztBQUNILFlBRFAsVUFBVSxDQUNGLEtBQUssRUFBRTsyQkFEZixVQUFVOztBQUVaLGdDQUZFLFVBQVUsNkNBRU4sS0FBSyxFQUFFO0FBQ2IsU0FBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0Qzs7Z0JBSkcsVUFBVTs7WUFNQSwwQkFBRztBQUNmLFdBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUNyQixXQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFOztBQUUzQixhQUFNLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3ZELG9CQUFXLEdBQU0sWUFBWSxDQUFDLFdBQVcsRUFBRSxTQUFJLENBQUMsR0FBRyxJQUFJLFlBQVksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQUMsQ0FBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBSSxDQUFDLEdBQUcsR0FBRyxZQUFZLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFHLENBQUM7UUFDOUk7QUFDRCxjQUFPLFdBQVcsQ0FBQztNQUNwQjs7O1lBRUssZ0JBQUMsS0FBSyxFQUFFO0FBQ1osV0FBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDckMsV0FBSSxTQUFTLEVBQUU7QUFDYixhQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxtQkFBTSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkUsTUFBTTtBQUNMLGFBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxtQkFBTSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEQ7TUFDRjs7O1lBRWdCLDZCQUFHO0FBQ2xCLFdBQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQztBQUNuRCxXQUFJLFNBQVMsRUFBRTtBQUNiLGFBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLG1CQUFNLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RTtNQUNGOzs7WUFFSyxrQkFBRztBQUNQLGNBQ0ksNENBQU8sR0FBRyxFQUFDLFdBQVc7QUFDbkIsa0JBQVMsRUFBQyxpQ0FBaUM7QUFDM0MsYUFBSSxFQUFDLE1BQU07QUFDWCxpQkFBUSxFQUFHLElBQUksQ0FBQyxNQUFRO0FBQ3hCLHFCQUFZLEVBQUcsSUFBSSxDQUFDLGNBQWMsRUFBSSxHQUFHLENBQzlDO01BQ0g7OztVQXhDRyxVQUFVOzs7QUEyQ2hCLFdBQVUsQ0FBQyxTQUFTLEdBQUc7QUFDckIsZ0JBQWEsRUFBRSxpQkFBVSxJQUFJLENBQUMsVUFBVTtBQUN4QyxlQUFZLEVBQUUsaUJBQVUsTUFBTTtBQUM5QixhQUFVLEVBQUUsaUJBQVUsTUFBTTtFQUM3QixDQUFDOztzQkFFYSxVQUFVOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrQ0N0RG1CLENBQU87Ozs7a0NBQ2pDLENBQVU7Ozs7S0FFdEIsVUFBVTthQUFWLFVBQVU7O0FBQ0gsWUFEUCxVQUFVLENBQ0YsS0FBSyxFQUFFOzJCQURmLFVBQVU7O0FBRVosZ0NBRkUsVUFBVSw2Q0FFTixLQUFLLEVBQUU7QUFDYixTQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JDLFNBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3JCOztnQkFMRyxVQUFVOztZQU9SLGdCQUFDLEtBQUssRUFBRTs7O0FBQ1osV0FBSSxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQ2hCLHFCQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVCO0FBQ0QsV0FBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDdkMsV0FBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsWUFBTTtBQUM5QixlQUFLLEtBQUssQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLG1CQUFNLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvRCxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDdEI7OztZQUVnQiw2QkFBRztBQUNsQixXQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUM7QUFDdEQsV0FBSSxZQUFZLEVBQUU7QUFDaEIsYUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLG1CQUFNLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRTtNQUNGOzs7WUFFbUIsZ0NBQUc7QUFDckIsbUJBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDNUI7OztZQUVLLGtCQUFHO29CQUMyQyxJQUFJLENBQUMsS0FBSztXQUFwRCxXQUFXLFVBQVgsV0FBVztXQUFFLFVBQVUsVUFBVixVQUFVO1dBQUUsWUFBWSxVQUFaLFlBQVk7O0FBQzdDLGNBQ0UsNENBQU8sR0FBRyxFQUFDLFdBQVc7QUFDcEIsa0JBQVMsRUFBQyxpQ0FBaUM7QUFDM0MsYUFBSSxFQUFDLE1BQU07QUFDWCxpQkFBUSxFQUFHLElBQUksQ0FBQyxNQUFRO0FBQ3hCLG9CQUFXLEVBQUcsV0FBVyxlQUFhLFVBQVUsUUFBTztBQUN2RCxxQkFBWSxFQUFHLFlBQVksR0FBRyxZQUFZLEdBQUcsRUFBSSxHQUFHLENBQ3REO01BQ0g7OztVQXRDRyxVQUFVOzs7QUF5Q2hCLFdBQVUsQ0FBQyxTQUFTLEdBQUc7QUFDckIsZ0JBQWEsRUFBRSxpQkFBVSxJQUFJLENBQUMsVUFBVTtBQUN4QyxlQUFZLEVBQUUsaUJBQVUsTUFBTTtBQUM5QixRQUFLLEVBQUUsaUJBQVUsTUFBTTtBQUN2QixjQUFXLEVBQUUsaUJBQVUsTUFBTTtBQUM3QixhQUFVLEVBQUUsaUJBQVUsTUFBTTtFQUM3QixDQUFDOztBQUVGLFdBQVUsQ0FBQyxZQUFZLEdBQUc7QUFDeEIsUUFBSyxFQUFFLG1CQUFNLFlBQVk7RUFDMUIsQ0FBQzs7c0JBRWEsVUFBVTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0NDeERtQixDQUFPOzs7O2tDQUNqQyxDQUFVOzs7O0tBRXRCLFdBQVc7YUFBWCxXQUFXOztBQUNKLFlBRFAsV0FBVyxDQUNILEtBQUssRUFBRTsyQkFEZixXQUFXOztBQUViLGdDQUZFLFdBQVcsNkNBRVAsS0FBSyxFQUFFO0FBQ2IsU0FBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQyxTQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztJQUNyQjs7Z0JBTEcsV0FBVzs7WUFPVCxnQkFBQyxLQUFLLEVBQUU7OztBQUNaLFdBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUNoQixxQkFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QjtBQUNELFdBQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQ3ZDLFdBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLFlBQU07QUFDOUIsZUFBSyxLQUFLLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxtQkFBTSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO01BQ3RCOzs7WUFFZ0IsNkJBQUc7QUFDbEIsV0FBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDO0FBQy9DLFdBQUksS0FBSyxFQUFFO0FBQ1QsYUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLG1CQUFNLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxRDtNQUNGOzs7WUFFbUIsZ0NBQUc7QUFDckIsbUJBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDNUI7OztZQUVLLGtCQUFHO29CQUMyQyxJQUFJLENBQUMsS0FBSztXQUFwRCxZQUFZLFVBQVosWUFBWTtXQUFFLFdBQVcsVUFBWCxXQUFXO1dBQUUsVUFBVSxVQUFWLFVBQVU7O0FBQzdDLGNBQ0UsNENBQU8sR0FBRyxFQUFDLFdBQVc7QUFDbEIsa0JBQVMsRUFBQyxpQ0FBaUM7QUFDM0MsYUFBSSxFQUFDLE1BQU07QUFDWCxpQkFBUSxFQUFHLElBQUksQ0FBQyxNQUFRO0FBQ3hCLG9CQUFXLEVBQUcsV0FBVyx5QkFBdUIsVUFBVSxRQUFPO0FBQ2pFLHFCQUFZLEVBQUksWUFBWSxHQUFJLFlBQVksR0FBRyxFQUFJLEdBQUcsQ0FDMUQ7TUFDSDs7O1VBdENHLFdBQVc7OztBQXlDakIsWUFBVyxDQUFDLFNBQVMsR0FBRztBQUN0QixnQkFBYSxFQUFFLGlCQUFVLElBQUksQ0FBQyxVQUFVO0FBQ3hDLGVBQVksRUFBRSxpQkFBVSxNQUFNO0FBQzlCLFFBQUssRUFBRSxpQkFBVSxNQUFNO0FBQ3ZCLGNBQVcsRUFBRSxpQkFBVSxNQUFNO0FBQzdCLGFBQVUsRUFBRSxpQkFBVSxNQUFNO0VBQzdCLENBQUM7O0FBRUYsWUFBVyxDQUFDLFlBQVksR0FBRztBQUN6QixRQUFLLEVBQUUsbUJBQU0sWUFBWTtFQUMxQixDQUFDOztzQkFFYSxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrQ0N4RGtCLENBQU87Ozs7dUNBQzlCLENBQVk7Ozs7a0NBQ2YsQ0FBVTs7OztLQUV0QixZQUFZO2FBQVosWUFBWTs7QUFDTCxZQURQLFlBQVksQ0FDSixLQUFLLEVBQUU7MkJBRGYsWUFBWTs7QUFFZCxnQ0FGRSxZQUFZLDZDQUVSLEtBQUssRUFBRTtBQUNiLFNBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsU0FBSSxDQUFDLEtBQUssR0FBRztBQUNYLDRCQUFxQixFQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxLQUFLLFNBQVMsSUFDckQsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUU7TUFDckUsQ0FBQztJQUNIOztnQkFSRyxZQUFZOztZQVVWLGdCQUFDLEtBQUssRUFBRTtXQUNKLEtBQUssR0FBSyxLQUFLLENBQUMsTUFBTSxDQUF0QixLQUFLOztBQUNiLFdBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxxQkFBcUIsRUFBRyxLQUFLLEtBQUssRUFBRyxFQUFFLENBQUMsQ0FBQztBQUN6RCxXQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsbUJBQU0sV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQzNEOzs7WUFFUyxzQkFBRztBQUNYLFdBQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztvQkFDdUIsSUFBSSxDQUFDLEtBQUs7V0FBL0MsT0FBTyxVQUFQLE9BQU87V0FBRSxXQUFXLFVBQVgsV0FBVztXQUFFLFVBQVUsVUFBVixVQUFVOztBQUN4QyxpQkFBVSxDQUFDLElBQUksQ0FDYjs7V0FBUSxHQUFHLEVBQUMsSUFBSSxFQUFDLEtBQUssRUFBQyxFQUFFO1NBQUcsV0FBVyxnQkFBYyxVQUFVLFFBQUs7UUFBVyxDQUMvRSxDQUFDO0FBQ0gsYUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsYUFBRyxFQUFJO0FBQzlCLG1CQUFVLENBQUMsSUFBSSxDQUFDOzthQUFRLEdBQUcsRUFBRyxHQUFLLEVBQUMsS0FBSyxFQUFHLEdBQUs7V0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO1VBQVcsQ0FBQyxDQUFDO1FBQzlFLENBQUMsQ0FBQztBQUNILGNBQU8sVUFBVSxDQUFDO01BQ25COzs7WUFFZ0IsNkJBQUc7QUFDbEIsV0FBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO0FBQzFDLFdBQUksS0FBSyxFQUFFO0FBQ1QsYUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLG1CQUFNLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzRDtNQUNGOzs7WUFFSyxrQkFBRztBQUNQLFdBQU0sV0FBVyxHQUFHLDZCQUFTLFFBQVEsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUM1RCxFQUFFLHNCQUFzQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDOztBQUV4RSxjQUNFOztXQUFRLEdBQUcsRUFBQyxhQUFhO0FBQ3JCLG9CQUFTLEVBQUcsV0FBYTtBQUN6QixtQkFBUSxFQUFHLElBQUksQ0FBQyxNQUFRO0FBQ3hCLHVCQUFZLEVBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEtBQUssU0FBUyxHQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLEVBQUk7U0FDdkYsSUFBSSxDQUFDLFVBQVUsRUFBRTtRQUNaLENBQ1Q7TUFDSDs7O1VBL0NHLFlBQVk7OztBQWtEbEIsYUFBWSxDQUFDLFNBQVMsR0FBRztBQUN2QixnQkFBYSxFQUFFLGlCQUFVLElBQUksQ0FBQyxVQUFVO0FBQ3hDLFVBQU8sRUFBRSxpQkFBVSxNQUFNLENBQUMsVUFBVTtBQUNwQyxjQUFXLEVBQUUsaUJBQVUsTUFBTTtBQUM3QixhQUFVLEVBQUUsaUJBQVUsTUFBTTtFQUM3QixDQUFDOztzQkFFYSxZQUFZOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrQ0M3RGlCLENBQU87Ozs7dUNBQzlCLENBQVk7Ozs7a0NBQ2YsQ0FBVTs7OztBQUU1QixLQUFNLGdCQUFnQixHQUFHLENBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUUsQ0FBQzs7S0FFdkQsWUFBWTthQUFaLFlBQVk7O0FBQ0wsWUFEUCxZQUFZLENBQ0osS0FBSyxFQUFFOzJCQURmLFlBQVk7O0FBRWQsZ0NBRkUsWUFBWSw2Q0FFUixLQUFLLEVBQUU7QUFDYixTQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxnQkFBZ0IsQ0FBQztBQUMxRSxTQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUNwQixTQUFJLENBQUMsS0FBSyxHQUFHO0FBQ1gsNEJBQXFCLEVBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEtBQUssU0FBUyxJQUMzRCxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUMzQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBRztNQUN4RSxDQUFDO0FBQ0YsU0FBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyRCxTQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzRCxTQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5RDs7Z0JBZEcsWUFBWTs7WUFnQkYsd0JBQUMsS0FBSyxFQUFFOzs7QUFDcEIsV0FBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUM7QUFDMUQsV0FBSSxVQUFVLEtBQUssRUFBRSxFQUFFO0FBQ3JCLGdCQUFPO1FBQ1I7QUFDRCxXQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDaEIscUJBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUI7QUFDRCxXQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUN2QyxXQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxZQUFNO0FBQzlCLGVBQUssS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFWLFVBQVUsRUFBRSxFQUFFLG1CQUFNLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6RixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDdEI7OztZQUVnQiwyQkFBQyxLQUFLLEVBQUU7QUFDdkIsV0FBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUM7V0FDbEQsS0FBSyxHQUFLLEtBQUssQ0FBQyxNQUFNLENBQXRCLEtBQUs7O0FBQ2IsV0FBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLHFCQUFxQixFQUFHLEtBQUssS0FBSyxFQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELFdBQUksVUFBVSxLQUFLLEVBQUUsRUFBRTtBQUNyQixnQkFBTztRQUNSO0FBQ0QsV0FBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBVixVQUFVLEVBQUUsRUFBRSxtQkFBTSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDbkY7OztZQUVpQiw0QkFBQyxLQUFLLEVBQUU7QUFDeEIsV0FBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO0FBQzNDLFdBQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQ3RDLFdBQUksS0FBSyxLQUFLLEVBQUUsRUFBRTtBQUNoQixnQkFBTztRQUNSO0FBQ0QsV0FBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBVixVQUFVLEVBQUUsRUFBRSxtQkFBTSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7TUFDbkY7OztZQUVtQixnQ0FBRztBQUNyQixXQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDdEIsaUJBQVUsQ0FBQyxJQUFJLENBQUMsNkNBQVEsR0FBRyxFQUFDLElBQUksR0FBVSxDQUFDLENBQUM7QUFDNUMsWUFBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdEQsbUJBQVUsQ0FBQyxJQUFJLENBQ2I7O2FBQVEsR0FBRyxFQUFHLENBQUcsRUFBQyxLQUFLLEVBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBRztXQUNqRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1VBQ3BCLENBQ1YsQ0FBQztRQUNIO0FBQ0QsY0FBTyxVQUFVLENBQUM7TUFDbkI7OztZQUVlLDRCQUFHO0FBQ2pCLFdBQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztXQUNkLE9BQU8sR0FBSyxJQUFJLENBQUMsS0FBSyxDQUF0QixPQUFPOztBQUVmLGlCQUFVLENBQUMsSUFBSSxDQUNiOztXQUFRLEdBQUcsRUFBQyxJQUFJLEVBQUMsS0FBSyxFQUFDLEVBQUU7U0FDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLGdCQUFjLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxRQUFLO1FBQ3pELENBQ1YsQ0FBQztBQUNGLFlBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3ZDLG1CQUFVLENBQUMsSUFBSSxDQUFDOzthQUFRLEdBQUcsRUFBRyxDQUFHLEVBQUMsS0FBSyxFQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUc7V0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDO1VBQVcsQ0FBQyxDQUFDO1FBQ2pGO0FBQ0QsY0FBTyxVQUFVLENBQUM7TUFDbkI7OztZQUVnQiw2QkFBRztBQUNsQixXQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQztBQUMxRCxXQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7QUFDNUMsV0FBSSxVQUFVLElBQUksTUFBTSxFQUFFO0FBQ3hCLGFBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsTUFBTSxFQUFOLE1BQU0sRUFBRSxVQUFVLEVBQVYsVUFBVSxFQUFFLEVBQUUsbUJBQU0sV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVFO01BQ0Y7OztZQUVtQixnQ0FBRztBQUNyQixtQkFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUM1Qjs7O1lBRUssa0JBQUc7QUFDUCxXQUFNLFdBQVcsR0FBRyw2QkFDbEIsZUFBZSxFQUFFLHFCQUFxQixFQUFFLGNBQWMsRUFDdEQsRUFBRSxzQkFBc0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQzs7QUFFaEUsY0FDRTs7V0FBSyxTQUFTLEVBQUMsc0JBQXNCO1NBQ25DOzthQUFRLEdBQUcsRUFBQyx3QkFBd0I7QUFDNUIsc0JBQVMsRUFBQyx1Q0FBdUM7QUFDakQscUJBQVEsRUFBRyxJQUFJLENBQUMsa0JBQW9CO0FBQ3BDLHlCQUFZLEVBQ1QsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLEVBQ2xFO1dBQ0wsSUFBSSxDQUFDLG9CQUFvQixFQUFFO1VBQ3RCO1NBRU4sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQ2pCOzthQUFRLEdBQUcsRUFBQyxjQUFjO0FBQ3hCLHNCQUFTLEVBQUcsV0FBYTtBQUN6QixxQkFBUSxFQUFHLElBQUksQ0FBQyxpQkFBbUI7QUFDbkMseUJBQVksRUFDVCxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsRUFDOUQ7V0FDQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7VUFDbEIsR0FDVCw0Q0FBTyxHQUFHLEVBQUMsY0FBYztBQUNsQixlQUFJLEVBQUMsUUFBUTtBQUNiLG9CQUFTLEVBQUMsa0NBQWtDO0FBQzVDLHNCQUFXLEVBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLGVBQWEsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLFFBQU87QUFDN0UsbUJBQVEsRUFBRyxJQUFJLENBQUMsY0FBZ0I7QUFDaEMsdUJBQVksRUFDVCxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsRUFDOUQsR0FBRztRQUVYLENBQ047TUFDSDs7O1VBN0hHLFlBQVk7OztBQWdJbEIsYUFBWSxDQUFDLFNBQVMsR0FBRztBQUN2QixnQkFBYSxFQUFFLGlCQUFVLElBQUksQ0FBQyxVQUFVO0FBQ3hDLFVBQU8sRUFBRSxpQkFBVSxPQUFPLENBQUMsaUJBQVUsTUFBTSxDQUFDO0FBQzVDLGVBQVksRUFBRSxpQkFBVSxLQUFLLENBQUM7QUFDNUIsV0FBTSxFQUFFLGlCQUFVLE1BQU07QUFDeEIsZUFBVSxFQUFFLGlCQUFVLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztJQUM5QyxDQUFDO0FBQ0YsUUFBSyxFQUFFLGlCQUFVLE1BQU07O0FBRXZCLG9CQUFpQixFQUFFLDJCQUFTLEtBQUssRUFBRSxRQUFRLEVBQUU7QUFDM0MsU0FBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUNwQixjQUFPO01BQ1I7QUFDRCxVQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQyxXQUFJLGlCQUFpQixHQUFHLEtBQUssQ0FBQztBQUM5QixZQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2hELGFBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzlDLDRCQUFpQixHQUFHLElBQUksQ0FBQztBQUN6QixpQkFBTTtVQUNQO1FBQ0Y7QUFDRCxXQUFJLENBQUMsaUJBQWlCLEVBQUU7QUFDdEIsZ0JBQU8sSUFBSSxLQUFLLHVFQUNILGdCQUFnQixDQUFHLENBQUM7UUFDbEM7TUFDRjtJQUNGO0FBQ0QsY0FBVyxFQUFFLGlCQUFVLE1BQU07QUFDN0IsYUFBVSxFQUFFLGlCQUFVLE1BQU07RUFDN0IsQ0FBQzs7QUFFRixhQUFZLENBQUMsWUFBWSxHQUFHO0FBQzFCLFFBQUssRUFBRSxtQkFBTSxZQUFZO0VBQzFCLENBQUM7O3NCQUVhLFlBQVkiLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIiksIHJlcXVpcmUoXCJyZWFjdC1kb21cIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wicmVhY3RcIiwgXCJyZWFjdC1kb21cIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiUmVhY3RCb290c3RyYXBUYWJsZVwiXSA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpLCByZXF1aXJlKFwicmVhY3QtZG9tXCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJSZWFjdEJvb3RzdHJhcFRhYmxlXCJdID0gZmFjdG9yeShyb290W1wiUmVhY3RcIl0sIHJvb3RbXCJSZWFjdERPTVwiXSk7XG59KSh0aGlzLCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzJfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV81X18pIHtcbnJldHVybiBcblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiB3ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb25cbiAqKi8iLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcblxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0ZXhwb3J0czoge30sXG4gXHRcdFx0aWQ6IG1vZHVsZUlkLFxuIFx0XHRcdGxvYWRlZDogZmFsc2VcbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubG9hZGVkID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIHdlYnBhY2svYm9vdHN0cmFwIDdkMmE1ZjNjZGEzNjljYjkxMTA0XG4gKiovIiwiaW1wb3J0IEJvb3RzdHJhcFRhYmxlIGZyb20gJy4vQm9vdHN0cmFwVGFibGUnO1xuaW1wb3J0IFRhYmxlSGVhZGVyQ29sdW1uIGZyb20gJy4vVGFibGVIZWFkZXJDb2x1bW4nO1xuaW1wb3J0IHsgVGFibGVEYXRhU2V0IH0gZnJvbSAnLi9zdG9yZS9UYWJsZURhdGFTdG9yZSc7XG5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICB3aW5kb3cuQm9vdHN0cmFwVGFibGUgPSBCb290c3RyYXBUYWJsZTtcbiAgd2luZG93LlRhYmxlSGVhZGVyQ29sdW1uID0gVGFibGVIZWFkZXJDb2x1bW47XG4gIHdpbmRvdy5UYWJsZURhdGFTZXQgPSBUYWJsZURhdGFTZXQ7XG59XG5leHBvcnQgZGVmYXVsdCB7XG4gIEJvb3RzdHJhcFRhYmxlLFxuICBUYWJsZUhlYWRlckNvbHVtbixcbiAgVGFibGVEYXRhU2V0XG59O1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvaW5kZXguanNcbiAqKi8iLCIvKiBlc2xpbnQgbm8tYWxlcnQ6IDAgKi9cbi8qIGVzbGludCBtYXgtbGVuOiAwICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBQcm9wVHlwZXMgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi9Db25zdCc7XG5pbXBvcnQgVGFibGVIZWFkZXIgZnJvbSAnLi9UYWJsZUhlYWRlcic7XG5pbXBvcnQgVGFibGVCb2R5IGZyb20gJy4vVGFibGVCb2R5JztcbmltcG9ydCBQYWdpbmF0aW9uTGlzdCBmcm9tICcuL3BhZ2luYXRpb24vUGFnaW5hdGlvbkxpc3QnO1xuaW1wb3J0IFRvb2xCYXIgZnJvbSAnLi90b29sYmFyL1Rvb2xCYXInO1xuaW1wb3J0IFRhYmxlRmlsdGVyIGZyb20gJy4vVGFibGVGaWx0ZXInO1xuaW1wb3J0IHsgVGFibGVEYXRhU3RvcmUgfSBmcm9tICcuL3N0b3JlL1RhYmxlRGF0YVN0b3JlJztcbmltcG9ydCBVdGlsIGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgZXhwb3J0Q1NWIGZyb20gJy4vY3N2X2V4cG9ydF91dGlsJztcbmltcG9ydCB7IEZpbHRlciB9IGZyb20gJy4vRmlsdGVyJztcblxuY2xhc3MgQm9vdHN0cmFwVGFibGUgZXh0ZW5kcyBDb21wb25lbnQge1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaXNJRSA9IGZhbHNlO1xuICAgIHRoaXMuX2F0dGFjaENlbGxFZGl0RnVuYygpO1xuICAgIGlmIChVdGlsLmNhblVzZURPTSgpKSB7XG4gICAgICB0aGlzLmlzSUUgPSBkb2N1bWVudC5kb2N1bWVudE1vZGU7XG4gICAgfVxuICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnByb3BzLmRhdGEpKSB7XG4gICAgICB0aGlzLnN0b3JlID0gbmV3IFRhYmxlRGF0YVN0b3JlKHRoaXMucHJvcHMuZGF0YS5nZXREYXRhKCkpO1xuICAgICAgdGhpcy5wcm9wcy5kYXRhLmNsZWFyKCk7XG4gICAgICB0aGlzLnByb3BzLmRhdGEub24oJ2NoYW5nZScsIChkYXRhKSA9PiB7XG4gICAgICAgIHRoaXMuc3RvcmUuc2V0RGF0YShkYXRhKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgZGF0YTogdGhpcy5nZXRUYWJsZURhdGEoKVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb3B5ID0gdGhpcy5wcm9wcy5kYXRhLnNsaWNlKCk7XG4gICAgICB0aGlzLnN0b3JlID0gbmV3IFRhYmxlRGF0YVN0b3JlKGNvcHkpO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdFRhYmxlKHRoaXMucHJvcHMpO1xuXG4gICAgaWYgKHRoaXMuZmlsdGVyKSB7XG4gICAgICB0aGlzLmZpbHRlci5vbignb25GaWx0ZXJDaGFuZ2UnLCAoY3VycmVudEZpbHRlcikgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZUZpbHRlckRhdGEoY3VycmVudEZpbHRlcik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9wcy5zZWxlY3RSb3cgJiYgdGhpcy5wcm9wcy5zZWxlY3RSb3cuc2VsZWN0ZWQpIHtcbiAgICAgIGNvbnN0IGNvcHkgPSB0aGlzLnByb3BzLnNlbGVjdFJvdy5zZWxlY3RlZC5zbGljZSgpO1xuICAgICAgdGhpcy5zdG9yZS5zZXRTZWxlY3RlZFJvd0tleShjb3B5KTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgZGF0YTogdGhpcy5nZXRUYWJsZURhdGEoKSxcbiAgICAgIGN1cnJQYWdlOiB0aGlzLnByb3BzLm9wdGlvbnMucGFnZSB8fCAxLFxuICAgICAgc2l6ZVBlclBhZ2U6IHRoaXMucHJvcHMub3B0aW9ucy5zaXplUGVyUGFnZSB8fCBDb25zdC5TSVpFX1BFUl9QQUdFX0xJU1RbMF0sXG4gICAgICBzZWxlY3RlZFJvd0tleXM6IHRoaXMuc3RvcmUuZ2V0U2VsZWN0ZWRSb3dLZXlzKClcbiAgICB9O1xuICB9XG5cbiAgaW5pdFRhYmxlKHByb3BzKSB7XG4gICAgbGV0IHsga2V5RmllbGQgfSA9IHByb3BzO1xuXG4gICAgY29uc3QgaXNLZXlGaWVsZERlZmluZWQgPSB0eXBlb2Yga2V5RmllbGQgPT09ICdzdHJpbmcnICYmIGtleUZpZWxkLmxlbmd0aDtcbiAgICBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKHByb3BzLmNoaWxkcmVuLCBjb2x1bW4gPT4ge1xuICAgICAgaWYgKGNvbHVtbi5wcm9wcy5pc0tleSkge1xuICAgICAgICBpZiAoa2V5RmllbGQpIHtcbiAgICAgICAgICB0aHJvdyAnRXJyb3IuIE11bHRpcGxlIGtleSBjb2x1bW4gYmUgZGV0ZWN0ZWQgaW4gVGFibGVIZWFkZXJDb2x1bW4uJztcbiAgICAgICAgfVxuICAgICAgICBrZXlGaWVsZCA9IGNvbHVtbi5wcm9wcy5kYXRhRmllbGQ7XG4gICAgICB9XG4gICAgICBpZiAoY29sdW1uLnByb3BzLmZpbHRlcikge1xuICAgICAgICAvLyBhIGNvbHVtbiBjb250YWlucyBhIGZpbHRlclxuICAgICAgICBpZiAoIXRoaXMuZmlsdGVyKSB7XG4gICAgICAgICAgLy8gZmlyc3QgdGltZSBjcmVhdGUgdGhlIGZpbHRlciBvbiB0aGUgQm9vdHN0cmFwVGFibGVcbiAgICAgICAgICB0aGlzLmZpbHRlciA9IG5ldyBGaWx0ZXIoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBwYXNzIHRoZSBmaWx0ZXIgdG8gY29sdW1uIHdpdGggZmlsdGVyXG4gICAgICAgIGNvbHVtbi5wcm9wcy5maWx0ZXIuZW1pdHRlciA9IHRoaXMuZmlsdGVyO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgY29sSW5mb3MgPSB0aGlzLmdldENvbHVtbnNEZXNjcmlwdGlvbihwcm9wcykucmVkdWNlKCggcHJldiwgY3VyciApID0+IHtcbiAgICAgIHByZXZbY3Vyci5uYW1lXSA9IGN1cnI7XG4gICAgICByZXR1cm4gcHJldjtcbiAgICB9LCB7fSk7XG5cbiAgICBpZiAoIWlzS2V5RmllbGREZWZpbmVkICYmICFrZXlGaWVsZCkge1xuICAgICAgdGhyb3cgYEVycm9yLiBObyBhbnkga2V5IGNvbHVtbiBkZWZpbmVkIGluIFRhYmxlSGVhZGVyQ29sdW1uLlxuICAgICAgICAgICAgVXNlICdpc0tleT17dHJ1ZX0nIHRvIHNwZWNpZnkgYSB1bmlxdWUgY29sdW1uIGFmdGVyIHZlcnNpb24gMC41LjQuYDtcbiAgICB9XG5cbiAgICB0aGlzLnN0b3JlLnNldFByb3BzKHtcbiAgICAgIGlzUGFnaW5hdGlvbjogcHJvcHMucGFnaW5hdGlvbixcbiAgICAgIGtleUZpZWxkOiBrZXlGaWVsZCxcbiAgICAgIGNvbEluZm9zOiBjb2xJbmZvcyxcbiAgICAgIG11bHRpQ29sdW1uU2VhcmNoOiBwcm9wcy5tdWx0aUNvbHVtblNlYXJjaCxcbiAgICAgIHJlbW90ZTogdGhpcy5pc1JlbW90ZURhdGFTb3VyY2UoKVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0VGFibGVEYXRhKCkge1xuICAgIGNvbnN0IHsgb3B0aW9ucywgcGFnaW5hdGlvbiB9ID0gdGhpcy5wcm9wcztcbiAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgaWYgKG9wdGlvbnMuc29ydE5hbWUgJiYgb3B0aW9ucy5zb3J0T3JkZXIpIHtcbiAgICAgIHRoaXMuc3RvcmUuc29ydChvcHRpb25zLnNvcnRPcmRlciwgb3B0aW9ucy5zb3J0TmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhZ2luYXRpb24pIHtcbiAgICAgIGxldCBwYWdlO1xuICAgICAgbGV0IHNpemVQZXJQYWdlO1xuICAgICAgaWYgKHRoaXMuc3RvcmUuaXNDaGFuZ2VkUGFnZSgpKSB7XG4gICAgICAgIHNpemVQZXJQYWdlID0gdGhpcy5zdGF0ZS5zaXplUGVyUGFnZTtcbiAgICAgICAgcGFnZSA9IHRoaXMuc3RhdGUuY3VyclBhZ2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaXplUGVyUGFnZSA9IG9wdGlvbnMuc2l6ZVBlclBhZ2UgfHwgQ29uc3QuU0laRV9QRVJfUEFHRV9MSVNUWzBdO1xuICAgICAgICBwYWdlID0gb3B0aW9ucy5wYWdlIHx8IDE7XG4gICAgICB9XG4gICAgICByZXN1bHQgPSB0aGlzLnN0b3JlLnBhZ2UocGFnZSwgc2l6ZVBlclBhZ2UpLmdldCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSB0aGlzLnN0b3JlLmdldCgpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZ2V0Q29sdW1uc0Rlc2NyaXB0aW9uKHsgY2hpbGRyZW4gfSkge1xuICAgIHJldHVybiBSZWFjdC5DaGlsZHJlbi5tYXAoY2hpbGRyZW4sIChjb2x1bW4sIGkpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGNvbHVtbi5wcm9wcy5kYXRhRmllbGQsXG4gICAgICAgIGFsaWduOiBjb2x1bW4ucHJvcHMuZGF0YUFsaWduLFxuICAgICAgICBzb3J0OiBjb2x1bW4ucHJvcHMuZGF0YVNvcnQsXG4gICAgICAgIGZvcm1hdDogY29sdW1uLnByb3BzLmRhdGFGb3JtYXQsXG4gICAgICAgIGZvcm1hdEV4dHJhRGF0YTogY29sdW1uLnByb3BzLmZvcm1hdEV4dHJhRGF0YSxcbiAgICAgICAgZmlsdGVyRm9ybWF0dGVkOiBjb2x1bW4ucHJvcHMuZmlsdGVyRm9ybWF0dGVkLFxuICAgICAgICBlZGl0YWJsZTogY29sdW1uLnByb3BzLmVkaXRhYmxlLFxuICAgICAgICBoaWRkZW46IGNvbHVtbi5wcm9wcy5oaWRkZW4sXG4gICAgICAgIHNlYXJjaGFibGU6IGNvbHVtbi5wcm9wcy5zZWFyY2hhYmxlLFxuICAgICAgICBjbGFzc05hbWU6IGNvbHVtbi5wcm9wcy5jb2x1bW5DbGFzc05hbWUsXG4gICAgICAgIHdpZHRoOiBjb2x1bW4ucHJvcHMud2lkdGgsXG4gICAgICAgIHRleHQ6IGNvbHVtbi5wcm9wcy5jaGlsZHJlbixcbiAgICAgICAgc29ydEZ1bmM6IGNvbHVtbi5wcm9wcy5zb3J0RnVuYyxcbiAgICAgICAgaW5kZXg6IGlcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xuICAgIHRoaXMuaW5pdFRhYmxlKG5leHRQcm9wcyk7XG4gICAgY29uc3QgeyBvcHRpb25zLCBzZWxlY3RSb3cgfSA9IG5leHRQcm9wcztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShuZXh0UHJvcHMuZGF0YSkpIHtcbiAgICAgIHRoaXMuc3RvcmUuc2V0RGF0YShuZXh0UHJvcHMuZGF0YS5zbGljZSgpKTtcbiAgICAgIGxldCBwYWdlID0gb3B0aW9ucy5wYWdlIHx8IHRoaXMuc3RhdGUuY3VyclBhZ2U7XG4gICAgICBjb25zdCBzaXplUGVyUGFnZSA9IG9wdGlvbnMuc2l6ZVBlclBhZ2UgfHwgdGhpcy5zdGF0ZS5zaXplUGVyUGFnZTtcblxuICAgICAgLy8gIzEyNVxuICAgICAgaWYgKCFvcHRpb25zLnBhZ2UgJiZcbiAgICAgICAgcGFnZSA+PSBNYXRoLmNlaWwobmV4dFByb3BzLmRhdGEubGVuZ3RoIC8gc2l6ZVBlclBhZ2UpKSB7XG4gICAgICAgIHBhZ2UgPSAxO1xuICAgICAgfVxuICAgICAgY29uc3Qgc29ydEluZm8gPSB0aGlzLnN0b3JlLmdldFNvcnRJbmZvKCk7XG4gICAgICBjb25zdCBzb3J0RmllbGQgPSBvcHRpb25zLnNvcnROYW1lIHx8IChzb3J0SW5mbyA/IHNvcnRJbmZvLnNvcnRGaWVsZCA6IHVuZGVmaW5lZCk7XG4gICAgICBjb25zdCBzb3J0T3JkZXIgPSBvcHRpb25zLnNvcnRPcmRlciB8fCAoc29ydEluZm8gPyBzb3J0SW5mby5vcmRlciA6IHVuZGVmaW5lZCk7XG4gICAgICBpZiAoc29ydEZpZWxkICYmIHNvcnRPcmRlcikgdGhpcy5zdG9yZS5zb3J0KHNvcnRPcmRlciwgc29ydEZpZWxkKTtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLnN0b3JlLnBhZ2UocGFnZSwgc2l6ZVBlclBhZ2UpLmdldCgpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGRhdGEsXG4gICAgICAgIGN1cnJQYWdlOiBwYWdlLFxuICAgICAgICBzaXplUGVyUGFnZVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChzZWxlY3RSb3cgJiYgc2VsZWN0Um93LnNlbGVjdGVkKSB7XG4gICAgICAvLyBzZXQgZGVmYXVsdCBzZWxlY3Qgcm93cyB0byBzdG9yZS5cbiAgICAgIGNvbnN0IGNvcHkgPSBzZWxlY3RSb3cuc2VsZWN0ZWQuc2xpY2UoKTtcbiAgICAgIHRoaXMuc3RvcmUuc2V0U2VsZWN0ZWRSb3dLZXkoY29weSk7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc2VsZWN0ZWRSb3dLZXlzOiBjb3B5XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLl9hZGp1c3RUYWJsZSgpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl9hZGp1c3RUYWJsZSk7XG4gICAgdGhpcy5yZWZzLmJvZHkucmVmcy5jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5fc2Nyb2xsSGVhZGVyKTtcbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl9hZGp1c3RUYWJsZSk7XG4gICAgdGhpcy5yZWZzLmJvZHkucmVmcy5jb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5fc2Nyb2xsSGVhZGVyKTtcbiAgICBpZiAodGhpcy5maWx0ZXIpIHtcbiAgICAgIHRoaXMuZmlsdGVyLnJlbW92ZUFsbExpc3RlbmVycygnb25GaWx0ZXJDaGFuZ2UnKTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgdGhpcy5fYWRqdXN0VGFibGUoKTtcbiAgICB0aGlzLl9hdHRhY2hDZWxsRWRpdEZ1bmMoKTtcbiAgICBpZiAodGhpcy5wcm9wcy5vcHRpb25zLmFmdGVyVGFibGVDb21wbGV0ZSkge1xuICAgICAgdGhpcy5wcm9wcy5vcHRpb25zLmFmdGVyVGFibGVDb21wbGV0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIF9hdHRhY2hDZWxsRWRpdEZ1bmMoKSB7XG4gICAgY29uc3QgeyBjZWxsRWRpdCB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoY2VsbEVkaXQpIHtcbiAgICAgIHRoaXMucHJvcHMuY2VsbEVkaXQuX19vbkNvbXBsZXRlRWRpdF9fID0gdGhpcy5oYW5kbGVFZGl0Q2VsbC5iaW5kKHRoaXMpO1xuICAgICAgaWYgKGNlbGxFZGl0Lm1vZGUgIT09IENvbnN0LkNFTExfRURJVF9OT05FKSB7XG4gICAgICAgIHRoaXMucHJvcHMuc2VsZWN0Um93LmNsaWNrVG9TZWxlY3QgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24sXG4gICAqIHRoZSBkYXRhZ3JpZCBzaG91bGQgbG9hZCBpdHMgZGF0YSByZW1vdGVseS5cbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSAgW3Byb3BzXSBPcHRpb25hbC4gSWYgbm90IGdpdmVuLCB0aGlzLnByb3BzIHdpbGwgYmUgdXNlZFxuICAgKiBAcmV0dXJuIHtCb29sZWFufVxuICAgKi9cbiAgaXNSZW1vdGVEYXRhU291cmNlKHByb3BzKSB7XG4gICAgcmV0dXJuIChwcm9wcyB8fCB0aGlzLnByb3BzKS5yZW1vdGU7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qgc3R5bGUgPSB7XG4gICAgICBoZWlnaHQ6IHRoaXMucHJvcHMuaGVpZ2h0LFxuICAgICAgbWF4SGVpZ2h0OiB0aGlzLnByb3BzLm1heEhlaWdodFxuICAgIH07XG5cbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRDb2x1bW5zRGVzY3JpcHRpb24odGhpcy5wcm9wcyk7XG4gICAgY29uc3Qgc29ydEluZm8gPSB0aGlzLnN0b3JlLmdldFNvcnRJbmZvKCk7XG4gICAgY29uc3QgcGFnaW5hdGlvbiA9IHRoaXMucmVuZGVyUGFnaW5hdGlvbigpO1xuICAgIGNvbnN0IHRvb2xCYXIgPSB0aGlzLnJlbmRlclRvb2xCYXIoKTtcbiAgICBjb25zdCB0YWJsZUZpbHRlciA9IHRoaXMucmVuZGVyVGFibGVGaWx0ZXIoY29sdW1ucyk7XG4gICAgY29uc3QgaXNTZWxlY3RBbGwgPSB0aGlzLmlzU2VsZWN0QWxsKCk7XG4gICAgbGV0IHNvcnRJbmRpY2F0b3IgPSB0aGlzLnByb3BzLm9wdGlvbnMuc29ydEluZGljYXRvcjtcbiAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMub3B0aW9ucy5zb3J0SW5kaWNhdG9yID09PSAndW5kZWZpbmVkJykgc29ydEluZGljYXRvciA9IHRydWU7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPSdyZWFjdC1icy10YWJsZS1jb250YWluZXInPlxuICAgICAgICB7IHRvb2xCYXIgfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncmVhY3QtYnMtdGFibGUnIHJlZj0ndGFibGUnIHN0eWxlPXsgc3R5bGUgfVxuICAgICAgICAgICAgb25Nb3VzZUVudGVyPXsgdGhpcy5oYW5kbGVNb3VzZUVudGVyIH1cbiAgICAgICAgICAgIG9uTW91c2VMZWF2ZT17IHRoaXMuaGFuZGxlTW91c2VMZWF2ZSB9PlxuICAgICAgICAgIDxUYWJsZUhlYWRlclxuICAgICAgICAgICAgcmVmPSdoZWFkZXInXG4gICAgICAgICAgICByb3dTZWxlY3RUeXBlPXsgdGhpcy5wcm9wcy5zZWxlY3RSb3cubW9kZSB9XG4gICAgICAgICAgICBoaWRlU2VsZWN0Q29sdW1uPXsgdGhpcy5wcm9wcy5zZWxlY3RSb3cuaGlkZVNlbGVjdENvbHVtbiB9XG4gICAgICAgICAgICBzb3J0TmFtZT17IHNvcnRJbmZvID8gc29ydEluZm8uc29ydEZpZWxkIDogdW5kZWZpbmVkIH1cbiAgICAgICAgICAgIHNvcnRPcmRlcj17IHNvcnRJbmZvID8gc29ydEluZm8ub3JkZXIgOiB1bmRlZmluZWQgfVxuICAgICAgICAgICAgc29ydEluZGljYXRvcj17IHNvcnRJbmRpY2F0b3IgfVxuICAgICAgICAgICAgb25Tb3J0PXsgdGhpcy5oYW5kbGVTb3J0IH1cbiAgICAgICAgICAgIG9uU2VsZWN0QWxsUm93PXsgdGhpcy5oYW5kbGVTZWxlY3RBbGxSb3cgfVxuICAgICAgICAgICAgYm9yZGVyZWQ9eyB0aGlzLnByb3BzLmJvcmRlcmVkIH1cbiAgICAgICAgICAgIGNvbmRlbnNlZD17IHRoaXMucHJvcHMuY29uZGVuc2VkIH1cbiAgICAgICAgICAgIGlzRmlsdGVyZWQ9eyB0aGlzLmZpbHRlciA/IHRydWUgOiBmYWxzZSB9XG4gICAgICAgICAgICBpc1NlbGVjdEFsbD17IGlzU2VsZWN0QWxsIH0+XG4gICAgICAgICAgICB7IHRoaXMucHJvcHMuY2hpbGRyZW4gfVxuICAgICAgICAgIDwvVGFibGVIZWFkZXI+XG4gICAgICAgICAgPFRhYmxlQm9keSByZWY9J2JvZHknXG4gICAgICAgICAgICBzdHlsZT17IHN0eWxlIH1cbiAgICAgICAgICAgIGRhdGE9eyB0aGlzLnN0YXRlLmRhdGEgfVxuICAgICAgICAgICAgY29sdW1ucz17IGNvbHVtbnMgfVxuICAgICAgICAgICAgdHJDbGFzc05hbWU9eyB0aGlzLnByb3BzLnRyQ2xhc3NOYW1lIH1cbiAgICAgICAgICAgIHN0cmlwZWQ9eyB0aGlzLnByb3BzLnN0cmlwZWQgfVxuICAgICAgICAgICAgYm9yZGVyZWQ9eyB0aGlzLnByb3BzLmJvcmRlcmVkIH1cbiAgICAgICAgICAgIGhvdmVyPXsgdGhpcy5wcm9wcy5ob3ZlciB9XG4gICAgICAgICAgICBrZXlGaWVsZD17IHRoaXMuc3RvcmUuZ2V0S2V5RmllbGQoKSB9XG4gICAgICAgICAgICBjb25kZW5zZWQ9eyB0aGlzLnByb3BzLmNvbmRlbnNlZCB9XG4gICAgICAgICAgICBzZWxlY3RSb3c9eyB0aGlzLnByb3BzLnNlbGVjdFJvdyB9XG4gICAgICAgICAgICBjZWxsRWRpdD17IHRoaXMucHJvcHMuY2VsbEVkaXQgfVxuICAgICAgICAgICAgc2VsZWN0ZWRSb3dLZXlzPXsgdGhpcy5zdGF0ZS5zZWxlY3RlZFJvd0tleXMgfVxuICAgICAgICAgICAgb25Sb3dDbGljaz17IHRoaXMuaGFuZGxlUm93Q2xpY2sgfVxuICAgICAgICAgICAgb25Sb3dNb3VzZU92ZXI9eyB0aGlzLmhhbmRsZVJvd01vdXNlT3ZlciB9XG4gICAgICAgICAgICBvblJvd01vdXNlT3V0PXsgdGhpcy5oYW5kbGVSb3dNb3VzZU91dCB9XG4gICAgICAgICAgICBvblNlbGVjdFJvdz17IHRoaXMuaGFuZGxlU2VsZWN0Um93IH1cbiAgICAgICAgICAgIG5vRGF0YVRleHQ9eyB0aGlzLnByb3BzLm9wdGlvbnMubm9EYXRhVGV4dCB9IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7IHRhYmxlRmlsdGVyIH1cbiAgICAgICAgeyBwYWdpbmF0aW9uIH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBpc1NlbGVjdEFsbCgpIHtcbiAgICBjb25zdCBkZWZhdWx0U2VsZWN0Um93S2V5cyA9IHRoaXMuc3RvcmUuZ2V0U2VsZWN0ZWRSb3dLZXlzKCk7XG4gICAgY29uc3QgYWxsUm93S2V5cyA9IHRoaXMuc3RvcmUuZ2V0QWxsUm93a2V5KCk7XG4gICAgaWYgKGRlZmF1bHRTZWxlY3RSb3dLZXlzLmxlbmd0aCAhPT0gYWxsUm93S2V5cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0U2VsZWN0Um93S2V5cy5sZW5ndGggPT09IDAgPyBmYWxzZSA6ICdpbmRldGVybWluYXRlJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgY2xlYW5TZWxlY3RlZCgpIHtcbiAgICB0aGlzLnN0b3JlLnNldFNlbGVjdGVkUm93S2V5KFtdKTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHNlbGVjdGVkUm93S2V5czogW11cbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVNvcnQgPSAob3JkZXIsIHNvcnRGaWVsZCkgPT4ge1xuICAgIGlmICh0aGlzLnByb3BzLm9wdGlvbnMub25Tb3J0Q2hhbmdlKSB7XG4gICAgICB0aGlzLnByb3BzLm9wdGlvbnMub25Tb3J0Q2hhbmdlKHNvcnRGaWVsZCwgb3JkZXIsIHRoaXMucHJvcHMpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc3RvcmUuc29ydChvcmRlciwgc29ydEZpZWxkKS5nZXQoKTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGRhdGE6IHJlc3VsdFxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlUGFnaW5hdGlvbkRhdGEgPSAocGFnZSwgc2l6ZVBlclBhZ2UpID0+IHtcbiAgICBjb25zdCB7IG9uUGFnZUNoYW5nZSB9ID0gdGhpcy5wcm9wcy5vcHRpb25zO1xuICAgIGlmIChvblBhZ2VDaGFuZ2UpIHtcbiAgICAgIG9uUGFnZUNoYW5nZShwYWdlLCBzaXplUGVyUGFnZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNSZW1vdGVEYXRhU291cmNlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnN0b3JlLnBhZ2UocGFnZSwgc2l6ZVBlclBhZ2UpLmdldCgpO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZGF0YTogcmVzdWx0LFxuICAgICAgY3VyclBhZ2U6IHBhZ2UsXG4gICAgICBzaXplUGVyUGFnZVxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlTW91c2VMZWF2ZSA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5wcm9wcy5vcHRpb25zLm9uTW91c2VMZWF2ZSkge1xuICAgICAgdGhpcy5wcm9wcy5vcHRpb25zLm9uTW91c2VMZWF2ZSgpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZU1vdXNlRW50ZXIgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMub3B0aW9ucy5vbk1vdXNlRW50ZXIpIHtcbiAgICAgIHRoaXMucHJvcHMub3B0aW9ucy5vbk1vdXNlRW50ZXIoKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVSb3dNb3VzZU91dCA9IHJvdyA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMub3B0aW9ucy5vblJvd01vdXNlT3V0KSB7XG4gICAgICB0aGlzLnByb3BzLm9wdGlvbnMub25Sb3dNb3VzZU91dChyb3cpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVJvd01vdXNlT3ZlciA9IHJvdyA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMub3B0aW9ucy5vblJvd01vdXNlT3Zlcikge1xuICAgICAgdGhpcy5wcm9wcy5vcHRpb25zLm9uUm93TW91c2VPdmVyKHJvdyk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlUm93Q2xpY2sgPSByb3cgPT4ge1xuICAgIGlmICh0aGlzLnByb3BzLm9wdGlvbnMub25Sb3dDbGljaykge1xuICAgICAgdGhpcy5wcm9wcy5vcHRpb25zLm9uUm93Q2xpY2socm93KTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVTZWxlY3RBbGxSb3cgPSBlID0+IHtcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gZS5jdXJyZW50VGFyZ2V0LmNoZWNrZWQ7XG4gICAgbGV0IHNlbGVjdGVkUm93S2V5cyA9IFtdO1xuICAgIGxldCByZXN1bHQgPSB0cnVlO1xuICAgIGlmICh0aGlzLnByb3BzLnNlbGVjdFJvdy5vblNlbGVjdEFsbCkge1xuICAgICAgcmVzdWx0ID0gdGhpcy5wcm9wcy5zZWxlY3RSb3cub25TZWxlY3RBbGwoaXNTZWxlY3RlZCxcbiAgICAgICAgaXNTZWxlY3RlZCA/IHRoaXMuc3RvcmUuZ2V0KCkgOiBbXSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICd1bmRlZmluZWQnIHx8IHJlc3VsdCAhPT0gZmFsc2UpIHtcbiAgICAgIGlmIChpc1NlbGVjdGVkKSB7XG4gICAgICAgIHNlbGVjdGVkUm93S2V5cyA9IHRoaXMuc3RvcmUuZ2V0QWxsUm93a2V5KCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3RvcmUuc2V0U2VsZWN0ZWRSb3dLZXkoc2VsZWN0ZWRSb3dLZXlzKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBzZWxlY3RlZFJvd0tleXMgfSk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlU2hvd09ubHlTZWxlY3RlZCA9ICgpID0+IHtcbiAgICB0aGlzLnN0b3JlLmlnbm9yZU5vblNlbGVjdGVkKCk7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAodGhpcy5wcm9wcy5wYWdpbmF0aW9uKSB7XG4gICAgICByZXN1bHQgPSB0aGlzLnN0b3JlLnBhZ2UoMSwgdGhpcy5zdGF0ZS5zaXplUGVyUGFnZSkuZ2V0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMuc3RvcmUuZ2V0KCk7XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZGF0YTogcmVzdWx0LFxuICAgICAgY3VyclBhZ2U6IDFcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVNlbGVjdFJvdyA9IChyb3csIGlzU2VsZWN0ZWQpID0+IHtcbiAgICBsZXQgcmVzdWx0ID0gdHJ1ZTtcbiAgICBsZXQgY3VyclNlbGVjdGVkID0gdGhpcy5zdG9yZS5nZXRTZWxlY3RlZFJvd0tleXMoKTtcbiAgICBjb25zdCByb3dLZXkgPSByb3dbIHRoaXMuc3RvcmUuZ2V0S2V5RmllbGQoKSBdO1xuICAgIGNvbnN0IHsgc2VsZWN0Um93IH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChzZWxlY3RSb3cub25TZWxlY3QpIHtcbiAgICAgIHJlc3VsdCA9IHNlbGVjdFJvdy5vblNlbGVjdChyb3csIGlzU2VsZWN0ZWQpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAndW5kZWZpbmVkJyB8fCByZXN1bHQgIT09IGZhbHNlKSB7XG4gICAgICBpZiAoc2VsZWN0Um93Lm1vZGUgPT09IENvbnN0LlJPV19TRUxFQ1RfU0lOR0xFKSB7XG4gICAgICAgIGN1cnJTZWxlY3RlZCA9IGlzU2VsZWN0ZWQgPyBbIHJvd0tleSBdIDogW107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNTZWxlY3RlZCkge1xuICAgICAgICAgIGN1cnJTZWxlY3RlZC5wdXNoKHJvd0tleSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VyclNlbGVjdGVkID0gY3VyclNlbGVjdGVkLmZpbHRlcihrZXkgPT4gcm93S2V5ICE9PSBrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3RvcmUuc2V0U2VsZWN0ZWRSb3dLZXkoY3VyclNlbGVjdGVkKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzZWxlY3RlZFJvd0tleXM6IGN1cnJTZWxlY3RlZFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlRWRpdENlbGwobmV3VmFsLCByb3dJbmRleCwgY29sSW5kZXgpIHtcbiAgICBjb25zdCB7IGJlZm9yZVNhdmVDZWxsLCBhZnRlclNhdmVDZWxsIH0gPSB0aGlzLnByb3BzLmNlbGxFZGl0O1xuICAgIGxldCBmaWVsZE5hbWU7XG4gICAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaCh0aGlzLnByb3BzLmNoaWxkcmVuLCBmdW5jdGlvbihjb2x1bW4sIGkpIHtcbiAgICAgIGlmIChpID09PSBjb2xJbmRleCkge1xuICAgICAgICBmaWVsZE5hbWUgPSBjb2x1bW4ucHJvcHMuZGF0YUZpZWxkO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoYmVmb3JlU2F2ZUNlbGwpIHtcbiAgICAgIGNvbnN0IGlzVmFsaWQgPSBiZWZvcmVTYXZlQ2VsbCh0aGlzLnN0YXRlLmRhdGFbcm93SW5kZXhdLCBmaWVsZE5hbWUsIG5ld1ZhbCk7XG4gICAgICBpZiAoIWlzVmFsaWQgJiYgdHlwZW9mIGlzVmFsaWQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGRhdGE6IHRoaXMuc3RvcmUuZ2V0KClcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnN0b3JlLmVkaXQobmV3VmFsLCByb3dJbmRleCwgZmllbGROYW1lKS5nZXQoKTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGRhdGE6IHJlc3VsdFxuICAgIH0pO1xuXG4gICAgaWYgKGFmdGVyU2F2ZUNlbGwpIHtcbiAgICAgIGFmdGVyU2F2ZUNlbGwodGhpcy5zdGF0ZS5kYXRhW3Jvd0luZGV4XSwgZmllbGROYW1lLCBuZXdWYWwpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUFkZFJvd0F0QmVnaW4obmV3T2JqKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuc3RvcmUuYWRkQXRCZWdpbihuZXdPYmopO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBlO1xuICAgIH1cbiAgICB0aGlzLl9oYW5kbGVBZnRlckFkZGluZ1JvdyhuZXdPYmopO1xuICB9XG5cbiAgaGFuZGxlQWRkUm93ID0gbmV3T2JqID0+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5zdG9yZS5hZGQobmV3T2JqKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZTtcbiAgICB9XG4gICAgdGhpcy5faGFuZGxlQWZ0ZXJBZGRpbmdSb3cobmV3T2JqKTtcbiAgfVxuXG4gIGdldFNpemVQZXJQYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLnNpemVQZXJQYWdlO1xuICB9XG5cbiAgZ2V0Q3VycmVudFBhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuY3VyclBhZ2U7XG4gIH1cblxuICBoYW5kbGVEcm9wUm93ID0gcm93S2V5cyA9PiB7XG4gICAgY29uc3QgZHJvcFJvd0tleXMgPSByb3dLZXlzID8gcm93S2V5cyA6IHRoaXMuc3RvcmUuZ2V0U2VsZWN0ZWRSb3dLZXlzKCk7XG4gICAgLy8gYWRkIGNvbmZpcm0gYmVmb3JlIHRoZSBkZWxldGUgYWN0aW9uIGlmIHRoYXQgb3B0aW9uIGlzIHNldC5cbiAgICBpZiAoZHJvcFJvd0tleXMgJiYgZHJvcFJvd0tleXMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHRoaXMucHJvcHMub3B0aW9ucy5oYW5kbGVDb25maXJtRGVsZXRlUm93KSB7XG4gICAgICAgIHRoaXMucHJvcHMub3B0aW9ucy5oYW5kbGVDb25maXJtRGVsZXRlUm93KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmRlbGV0ZVJvdyhkcm9wUm93S2V5cyk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChjb25maXJtKCdBcmUgeW91IHN1cmUgd2FudCBkZWxldGU/JykpIHtcbiAgICAgICAgdGhpcy5kZWxldGVSb3coZHJvcFJvd0tleXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRlbGV0ZVJvdyhkcm9wUm93S2V5cykge1xuICAgIGxldCByZXN1bHQ7XG4gICAgdGhpcy5zdG9yZS5yZW1vdmUoZHJvcFJvd0tleXMpOyAgLy8gcmVtb3ZlIHNlbGVjdGVkIFJvd1xuICAgIHRoaXMuc3RvcmUuc2V0U2VsZWN0ZWRSb3dLZXkoW10pOyAgLy8gY2xlYXIgc2VsZWN0ZWQgcm93IGtleVxuXG4gICAgaWYgKHRoaXMucHJvcHMucGFnaW5hdGlvbikge1xuICAgICAgY29uc3QgeyBzaXplUGVyUGFnZSB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgIGNvbnN0IGN1cnJMYXN0UGFnZSA9IE1hdGguY2VpbCh0aGlzLnN0b3JlLmdldERhdGFOdW0oKSAvIHNpemVQZXJQYWdlKTtcbiAgICAgIGxldCB7IGN1cnJQYWdlIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgaWYgKGN1cnJQYWdlID4gY3Vyckxhc3RQYWdlKSBjdXJyUGFnZSA9IGN1cnJMYXN0UGFnZTtcbiAgICAgIHJlc3VsdCA9IHRoaXMuc3RvcmUucGFnZShjdXJyUGFnZSwgc2l6ZVBlclBhZ2UpLmdldCgpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGRhdGE6IHJlc3VsdCxcbiAgICAgICAgc2VsZWN0ZWRSb3dLZXlzOiB0aGlzLnN0b3JlLmdldFNlbGVjdGVkUm93S2V5cygpLFxuICAgICAgICBjdXJyUGFnZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMuc3RvcmUuZ2V0KCk7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZGF0YTogcmVzdWx0LFxuICAgICAgICBzZWxlY3RlZFJvd0tleXM6IHRoaXMuc3RvcmUuZ2V0U2VsZWN0ZWRSb3dLZXlzKClcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5wcm9wcy5vcHRpb25zLmFmdGVyRGVsZXRlUm93KSB7XG4gICAgICB0aGlzLnByb3BzLm9wdGlvbnMuYWZ0ZXJEZWxldGVSb3coZHJvcFJvd0tleXMpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUZpbHRlckRhdGEgPSBmaWx0ZXJPYmogPT4ge1xuICAgIHRoaXMuc3RvcmUuZmlsdGVyKGZpbHRlck9iaik7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAodGhpcy5wcm9wcy5wYWdpbmF0aW9uKSB7XG4gICAgICBjb25zdCB7IHNpemVQZXJQYWdlIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgcmVzdWx0ID0gdGhpcy5zdG9yZS5wYWdlKDEsIHNpemVQZXJQYWdlKS5nZXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gdGhpcy5zdG9yZS5nZXQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvcHMub3B0aW9ucy5hZnRlckNvbHVtbkZpbHRlcikge1xuICAgICAgdGhpcy5wcm9wcy5vcHRpb25zLmFmdGVyQ29sdW1uRmlsdGVyKGZpbHRlck9iaixcbiAgICAgICAgdGhpcy5zdG9yZS5nZXREYXRhSWdub3JpbmdQYWdpbmF0aW9uKCkpO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGRhdGE6IHJlc3VsdCxcbiAgICAgIGN1cnJQYWdlOiAxXG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVFeHBvcnRDU1YgPSAoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5zdG9yZS5nZXREYXRhSWdub3JpbmdQYWdpbmF0aW9uKCk7XG4gICAgY29uc3Qga2V5cyA9IFtdO1xuICAgIHRoaXMucHJvcHMuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKGNvbHVtbikge1xuICAgICAgaWYgKGNvbHVtbi5wcm9wcy5oaWRkZW4gPT09IGZhbHNlKSB7XG4gICAgICAgIGtleXMucHVzaChjb2x1bW4ucHJvcHMuZGF0YUZpZWxkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBleHBvcnRDU1YocmVzdWx0LCBrZXlzLCB0aGlzLnByb3BzLmNzdkZpbGVOYW1lKTtcbiAgfVxuXG4gIGhhbmRsZVNlYXJjaCA9IHNlYXJjaFRleHQgPT4ge1xuICAgIHRoaXMuc3RvcmUuc2VhcmNoKHNlYXJjaFRleHQpO1xuICAgIGxldCByZXN1bHQ7XG4gICAgaWYgKHRoaXMucHJvcHMucGFnaW5hdGlvbikge1xuICAgICAgY29uc3QgeyBzaXplUGVyUGFnZSB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgIHJlc3VsdCA9IHRoaXMuc3RvcmUucGFnZSgxLCBzaXplUGVyUGFnZSkuZ2V0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMuc3RvcmUuZ2V0KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzLm9wdGlvbnMuYWZ0ZXJTZWFyY2gpIHtcbiAgICAgIHRoaXMucHJvcHMub3B0aW9ucy5hZnRlclNlYXJjaChzZWFyY2hUZXh0LFxuICAgICAgICB0aGlzLnN0b3JlLmdldERhdGFJZ25vcmluZ1BhZ2luYXRpb24oKSk7XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZGF0YTogcmVzdWx0LFxuICAgICAgY3VyclBhZ2U6IDFcbiAgICB9KTtcbiAgfVxuXG4gIHJlbmRlclBhZ2luYXRpb24oKSB7XG4gICAgaWYgKHRoaXMucHJvcHMucGFnaW5hdGlvbikge1xuICAgICAgbGV0IGRhdGFTaXplO1xuICAgICAgaWYgKHRoaXMuaXNSZW1vdGVEYXRhU291cmNlKCkpIHtcbiAgICAgICAgZGF0YVNpemUgPSB0aGlzLnByb3BzLmZldGNoSW5mby5kYXRhVG90YWxTaXplO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YVNpemUgPSB0aGlzLnN0b3JlLmdldERhdGFOdW0oKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgb3B0aW9ucyB9ID0gdGhpcy5wcm9wcztcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdyZWFjdC1icy10YWJsZS1wYWdpbmF0aW9uJz5cbiAgICAgICAgICA8UGFnaW5hdGlvbkxpc3RcbiAgICAgICAgICAgIHJlZj0ncGFnaW5hdGlvbidcbiAgICAgICAgICAgIGN1cnJQYWdlPXsgdGhpcy5zdGF0ZS5jdXJyUGFnZSB9XG4gICAgICAgICAgICBjaGFuZ2VQYWdlPXsgdGhpcy5oYW5kbGVQYWdpbmF0aW9uRGF0YSB9XG4gICAgICAgICAgICBzaXplUGVyUGFnZT17IHRoaXMuc3RhdGUuc2l6ZVBlclBhZ2UgfVxuICAgICAgICAgICAgc2l6ZVBlclBhZ2VMaXN0PXsgb3B0aW9ucy5zaXplUGVyUGFnZUxpc3QgfHwgQ29uc3QuU0laRV9QRVJfUEFHRV9MSVNUIH1cbiAgICAgICAgICAgIHBhZ2luYXRpb25TaXplPXsgb3B0aW9ucy5wYWdpbmF0aW9uU2l6ZSB8fCBDb25zdC5QQUdJTkFUSU9OX1NJWkUgfVxuICAgICAgICAgICAgcmVtb3RlPXsgdGhpcy5pc1JlbW90ZURhdGFTb3VyY2UoKSB9XG4gICAgICAgICAgICBkYXRhU2l6ZT17IGRhdGFTaXplIH1cbiAgICAgICAgICAgIG9uU2l6ZVBlclBhZ2VMaXN0PXsgb3B0aW9ucy5vblNpemVQZXJQYWdlTGlzdCB9XG4gICAgICAgICAgICBwcmVQYWdlPXsgb3B0aW9ucy5wcmVQYWdlIHx8IENvbnN0LlBSRV9QQUdFIH1cbiAgICAgICAgICAgIG5leHRQYWdlPXsgb3B0aW9ucy5uZXh0UGFnZSB8fCBDb25zdC5ORVhUX1BBR0UgfVxuICAgICAgICAgICAgZmlyc3RQYWdlPXsgb3B0aW9ucy5maXJzdFBhZ2UgfHwgQ29uc3QuRklSU1RfUEFHRSB9XG4gICAgICAgICAgICBsYXN0UGFnZT17IG9wdGlvbnMubGFzdFBhZ2UgfHwgQ29uc3QuTEFTVF9QQUdFIH0gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJlbmRlclRvb2xCYXIoKSB7XG4gICAgY29uc3QgeyBzZWxlY3RSb3csIGluc2VydFJvdywgZGVsZXRlUm93LCBzZWFyY2gsIGNoaWxkcmVuIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGVuYWJsZVNob3dPbmx5U2VsZWN0ZWQgPSBzZWxlY3RSb3cgJiYgc2VsZWN0Um93LnNob3dPbmx5U2VsZWN0ZWQ7XG4gICAgaWYgKGVuYWJsZVNob3dPbmx5U2VsZWN0ZWRcbiAgICAgICAgfHwgaW5zZXJ0Um93XG4gICAgICAgIHx8IGRlbGV0ZVJvd1xuICAgICAgICB8fCBzZWFyY2hcbiAgICAgICAgfHwgdGhpcy5wcm9wcy5leHBvcnRDU1YpIHtcbiAgICAgIGxldCBjb2x1bW5zO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgIGNvbHVtbnMgPSBjaGlsZHJlbi5tYXAoZnVuY3Rpb24oY29sdW1uKSB7XG4gICAgICAgICAgY29uc3QgeyBwcm9wcyB9ID0gY29sdW1uO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICAgIGZpZWxkOiBwcm9wcy5kYXRhRmllbGQsXG4gICAgICAgICAgICAvLyB3aGVuIHlvdSB3YW50IHNhbWUgYXV0byBnZW5lcmF0ZSB2YWx1ZSBhbmQgbm90IGFsbG93IGVkaXQsIGV4YW1wbGUgSUQgZmllbGRcbiAgICAgICAgICAgIGF1dG9WYWx1ZTogcHJvcHMuYXV0b1ZhbHVlIHx8IGZhbHNlLFxuICAgICAgICAgICAgLy8gZm9yIGNyZWF0ZSBlZGl0b3IsIG5vIHBhcmFtcyBmb3IgY29sdW1uLmVkaXRhYmxlKCkgaW5kaWNhdGUgdGhhdCBlZGl0b3IgZm9yIG5ldyByb3dcbiAgICAgICAgICAgIGVkaXRhYmxlOiBwcm9wcy5lZGl0YWJsZSAmJiAodHlwZW9mIHByb3BzLmVkaXRhYmxlID09PSAnZnVuY3Rpb24nKSA/IHByb3BzLmVkaXRhYmxlKCkgOiBwcm9wcy5lZGl0YWJsZSxcbiAgICAgICAgICAgIGZvcm1hdDogcHJvcHMuZGF0YUZvcm1hdCA/IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBwcm9wcy5kYXRhRm9ybWF0KHZhbHVlLCBudWxsLCBwcm9wcy5mb3JtYXRFeHRyYURhdGEpLnJlcGxhY2UoLzwuKj8+L2csICcnKTtcbiAgICAgICAgICAgIH0gOiBmYWxzZVxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29sdW1ucyA9IFsge1xuICAgICAgICAgIG5hbWU6IGNoaWxkcmVuLnByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgIGZpZWxkOiBjaGlsZHJlbi5wcm9wcy5kYXRhRmllbGQsXG4gICAgICAgICAgZWRpdGFibGU6IGNoaWxkcmVuLnByb3BzLmVkaXRhYmxlXG4gICAgICAgIH0gXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdyZWFjdC1icy10YWJsZS10b29sLWJhcic+XG4gICAgICAgICAgPFRvb2xCYXJcbiAgICAgICAgICAgIGNsZWFyU2VhcmNoPXsgdGhpcy5wcm9wcy5vcHRpb25zLmNsZWFyU2VhcmNoIH1cbiAgICAgICAgICAgIGVuYWJsZUluc2VydD17IGluc2VydFJvdyB9XG4gICAgICAgICAgICBlbmFibGVEZWxldGU9eyBkZWxldGVSb3cgfVxuICAgICAgICAgICAgZW5hYmxlU2VhcmNoPXsgc2VhcmNoIH1cbiAgICAgICAgICAgIGVuYWJsZUV4cG9ydENTVj17IHRoaXMucHJvcHMuZXhwb3J0Q1NWIH1cbiAgICAgICAgICAgIGVuYWJsZVNob3dPbmx5U2VsZWN0ZWQ9eyBlbmFibGVTaG93T25seVNlbGVjdGVkIH1cbiAgICAgICAgICAgIGNvbHVtbnM9eyBjb2x1bW5zIH1cbiAgICAgICAgICAgIHNlYXJjaFBsYWNlaG9sZGVyPXsgdGhpcy5wcm9wcy5zZWFyY2hQbGFjZWhvbGRlciB9XG4gICAgICAgICAgICBvbkFkZFJvdz17IHRoaXMuaGFuZGxlQWRkUm93IH1cbiAgICAgICAgICAgIG9uRHJvcFJvdz17IHRoaXMuaGFuZGxlRHJvcFJvdyB9XG4gICAgICAgICAgICBvblNlYXJjaD17IHRoaXMuaGFuZGxlU2VhcmNoIH1cbiAgICAgICAgICAgIG9uRXhwb3J0Q1NWPXsgdGhpcy5oYW5kbGVFeHBvcnRDU1YgfVxuICAgICAgICAgICAgb25TaG93T25seVNlbGVjdGVkPXsgdGhpcy5oYW5kbGVTaG93T25seVNlbGVjdGVkIH0vPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlclRhYmxlRmlsdGVyKGNvbHVtbnMpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5jb2x1bW5GaWx0ZXIpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUYWJsZUZpbHRlciBjb2x1bW5zPXsgY29sdW1ucyB9XG4gICAgICAgICAgcm93U2VsZWN0VHlwZT17IHRoaXMucHJvcHMuc2VsZWN0Um93Lm1vZGUgfVxuICAgICAgICAgIG9uRmlsdGVyPXsgdGhpcy5oYW5kbGVGaWx0ZXJEYXRhIH0vPlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgX3Njcm9sbEhlYWRlciA9IChlKSA9PiB7XG4gICAgdGhpcy5yZWZzLmhlYWRlci5yZWZzLmNvbnRhaW5lci5zY3JvbGxMZWZ0ID0gZS5jdXJyZW50VGFyZ2V0LnNjcm9sbExlZnQ7XG4gIH1cblxuICBfYWRqdXN0VGFibGUgPSAoKSA9PiB7XG4gICAgdGhpcy5fYWRqdXN0SGVhZGVyV2lkdGgoKTtcbiAgICB0aGlzLl9hZGp1c3RIZWlnaHQoKTtcbiAgfVxuXG4gIF9hZGp1c3RIZWFkZXJXaWR0aCA9ICgpID0+IHtcbiAgICBjb25zdCBoZWFkZXIgPSB0aGlzLnJlZnMuaGVhZGVyLnJlZnMuaGVhZGVyO1xuICAgIGNvbnN0IGhlYWRlckNvbnRhaW5lciA9IHRoaXMucmVmcy5oZWFkZXIucmVmcy5jb250YWluZXI7XG4gICAgY29uc3QgdGJvZHkgPSB0aGlzLnJlZnMuYm9keS5yZWZzLnRib2R5O1xuICAgIGNvbnN0IGZpcnN0Um93ID0gdGJvZHkuY2hpbGROb2Rlc1swXTtcbiAgICBjb25zdCBpc1Njcm9sbCA9IGhlYWRlckNvbnRhaW5lci5vZmZzZXRXaWR0aCAhPT0gdGJvZHkucGFyZW50Tm9kZS5vZmZzZXRXaWR0aDtcbiAgICBjb25zdCBzY3JvbGxCYXJXaWR0aCA9IGlzU2Nyb2xsID8gVXRpbC5nZXRTY3JvbGxCYXJXaWR0aCgpIDogMDtcbiAgICBpZiAoZmlyc3RSb3cgJiYgdGhpcy5zdG9yZS5nZXREYXRhTnVtKCkpIHtcbiAgICAgIGNvbnN0IGNlbGxzID0gZmlyc3RSb3cuY2hpbGROb2RlcztcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2VsbCA9IGNlbGxzW2ldO1xuICAgICAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShjZWxsKTtcbiAgICAgICAgbGV0IHdpZHRoID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLndpZHRoLnJlcGxhY2UoJ3B4JywgJycpKTtcbiAgICAgICAgaWYgKHRoaXMuaXNJRSkge1xuICAgICAgICAgIGNvbnN0IHBhZGRpbmdMZWZ0V2lkdGggPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUucGFkZGluZ0xlZnQucmVwbGFjZSgncHgnLCAnJykpO1xuICAgICAgICAgIGNvbnN0IHBhZGRpbmdSaWdodFdpZHRoID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLnBhZGRpbmdSaWdodC5yZXBsYWNlKCdweCcsICcnKSk7XG4gICAgICAgICAgY29uc3QgYm9yZGVyUmlnaHRXaWR0aCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5ib3JkZXJSaWdodFdpZHRoLnJlcGxhY2UoJ3B4JywgJycpKTtcbiAgICAgICAgICBjb25zdCBib3JkZXJMZWZ0V2lkdGggPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUuYm9yZGVyTGVmdFdpZHRoLnJlcGxhY2UoJ3B4JywgJycpKTtcbiAgICAgICAgICB3aWR0aCA9IHdpZHRoICsgcGFkZGluZ0xlZnRXaWR0aCArIHBhZGRpbmdSaWdodFdpZHRoICsgYm9yZGVyUmlnaHRXaWR0aCArIGJvcmRlckxlZnRXaWR0aDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYXN0UGFkZGluZyA9IChjZWxscy5sZW5ndGggLSAxID09PSBpID8gc2Nyb2xsQmFyV2lkdGggOiAwKTtcbiAgICAgICAgaWYgKHdpZHRoIDw9IDApIHtcbiAgICAgICAgICB3aWR0aCA9IDEyMDtcbiAgICAgICAgICBjZWxsLndpZHRoID0gd2lkdGggKyBsYXN0UGFkZGluZyArICdweCc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gd2lkdGggKyBsYXN0UGFkZGluZyArICdweCc7XG4gICAgICAgIGhlYWRlci5jaGlsZE5vZGVzW2ldLnN0eWxlLndpZHRoID0gcmVzdWx0O1xuICAgICAgICBoZWFkZXIuY2hpbGROb2Rlc1tpXS5zdHlsZS5taW5XaWR0aCA9IHJlc3VsdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfYWRqdXN0SGVpZ2h0ID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnByb3BzLmhlaWdodC5pbmRleE9mKCclJykgPT09IC0xKSB7XG4gICAgICB0aGlzLnJlZnMuYm9keS5yZWZzLmNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPVxuICAgICAgICBwYXJzZUZsb2F0KHRoaXMucHJvcHMuaGVpZ2h0LCAxMCkgLSB0aGlzLnJlZnMuaGVhZGVyLnJlZnMuY29udGFpbmVyLm9mZnNldEhlaWdodCArICdweCc7XG4gICAgfVxuICB9XG5cbiAgX2hhbmRsZUFmdGVyQWRkaW5nUm93KG5ld09iaikge1xuICAgIGxldCByZXN1bHQ7XG4gICAgaWYgKHRoaXMucHJvcHMucGFnaW5hdGlvbikge1xuICAgICAgLy8gaWYgcGFnaW5hdGlvbiBpcyBlbmFibGVkIGFuZCBpbnNlcnQgcm93IGJlIHRyaWdnZXIsIGNoYW5nZSB0byBsYXN0IHBhZ2VcbiAgICAgIGNvbnN0IHsgc2l6ZVBlclBhZ2UgfSA9IHRoaXMuc3RhdGU7XG4gICAgICBjb25zdCBjdXJyTGFzdFBhZ2UgPSBNYXRoLmNlaWwodGhpcy5zdG9yZS5nZXREYXRhTnVtKCkgLyBzaXplUGVyUGFnZSk7XG4gICAgICByZXN1bHQgPSB0aGlzLnN0b3JlLnBhZ2UoY3Vyckxhc3RQYWdlLCBzaXplUGVyUGFnZSkuZ2V0KCk7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZGF0YTogcmVzdWx0LFxuICAgICAgICBjdXJyUGFnZTogY3Vyckxhc3RQYWdlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gdGhpcy5zdG9yZS5nZXQoKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBkYXRhOiByZXN1bHRcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLm9wdGlvbnMuYWZ0ZXJJbnNlcnRSb3cpIHtcbiAgICAgIHRoaXMucHJvcHMub3B0aW9ucy5hZnRlckluc2VydFJvdyhuZXdPYmopO1xuICAgIH1cbiAgfVxufVxuXG5Cb290c3RyYXBUYWJsZS5wcm9wVHlwZXMgPSB7XG4gIGtleUZpZWxkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBoZWlnaHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG1heEhlaWdodDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGF0YTogUHJvcFR5cGVzLm9uZU9mVHlwZShbIFByb3BUeXBlcy5hcnJheSwgUHJvcFR5cGVzLm9iamVjdCBdKSxcbiAgcmVtb3RlOiBQcm9wVHlwZXMuYm9vbCwgLy8gcmVtb3RlIGRhdGEsIGRlZmF1bHQgaXMgZmFsc2VcbiAgc3RyaXBlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGJvcmRlcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgaG92ZXI6IFByb3BUeXBlcy5ib29sLFxuICBjb25kZW5zZWQ6IFByb3BUeXBlcy5ib29sLFxuICBwYWdpbmF0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgc2VhcmNoUGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNlbGVjdFJvdzogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBtb2RlOiBQcm9wVHlwZXMub25lT2YoW1xuICAgICAgQ29uc3QuUk9XX1NFTEVDVF9OT05FLFxuICAgICAgQ29uc3QuUk9XX1NFTEVDVF9TSU5HTEUsXG4gICAgICBDb25zdC5ST1dfU0VMRUNUX01VTFRJXG4gICAgXSksXG4gICAgYmdDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzZWxlY3RlZDogUHJvcFR5cGVzLmFycmF5LFxuICAgIG9uU2VsZWN0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvblNlbGVjdEFsbDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgY2xpY2tUb1NlbGVjdDogUHJvcFR5cGVzLmJvb2wsXG4gICAgaGlkZVNlbGVjdENvbHVtbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgY2xpY2tUb1NlbGVjdEFuZEVkaXRDZWxsOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBzaG93T25seVNlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbFxuICB9KSxcbiAgY2VsbEVkaXQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgbW9kZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBibHVyVG9TYXZlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBiZWZvcmVTYXZlQ2VsbDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgYWZ0ZXJTYXZlQ2VsbDogUHJvcFR5cGVzLmZ1bmNcbiAgfSksXG4gIGluc2VydFJvdzogUHJvcFR5cGVzLmJvb2wsXG4gIGRlbGV0ZVJvdzogUHJvcFR5cGVzLmJvb2wsXG4gIHNlYXJjaDogUHJvcFR5cGVzLmJvb2wsXG4gIGNvbHVtbkZpbHRlcjogUHJvcFR5cGVzLmJvb2wsXG4gIHRyQ2xhc3NOYW1lOiBQcm9wVHlwZXMuYW55LFxuICBvcHRpb25zOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsZWFyU2VhcmNoOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBzb3J0TmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzb3J0T3JkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc29ydEluZGljYXRvcjogUHJvcFR5cGVzLmJvb2wsXG4gICAgYWZ0ZXJUYWJsZUNvbXBsZXRlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBhZnRlckRlbGV0ZVJvdzogUHJvcFR5cGVzLmZ1bmMsXG4gICAgYWZ0ZXJJbnNlcnRSb3c6IFByb3BUeXBlcy5mdW5jLFxuICAgIGFmdGVyU2VhcmNoOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBhZnRlckNvbHVtbkZpbHRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25Sb3dDbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gICAgcGFnZTogUHJvcFR5cGVzLm51bWJlcixcbiAgICBzaXplUGVyUGFnZUxpc3Q6IFByb3BUeXBlcy5hcnJheSxcbiAgICBzaXplUGVyUGFnZTogUHJvcFR5cGVzLm51bWJlcixcbiAgICBwYWdpbmF0aW9uU2l6ZTogUHJvcFR5cGVzLm51bWJlcixcbiAgICBvblNvcnRDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uUGFnZUNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25TaXplUGVyUGFnZUxpc3Q6IFByb3BUeXBlcy5mdW5jLFxuICAgIG5vRGF0YVRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgaGFuZGxlQ29uZmlybURlbGV0ZVJvdzogUHJvcFR5cGVzLmZ1bmMsXG4gICAgcHJlUGFnZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBuZXh0UGFnZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBmaXJzdFBhZ2U6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgbGFzdFBhZ2U6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSksXG4gIGZldGNoSW5mbzogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBkYXRhVG90YWxTaXplOiBQcm9wVHlwZXMubnVtYmVyXG4gIH0pLFxuICBleHBvcnRDU1Y6IFByb3BUeXBlcy5ib29sLFxuICBjc3ZGaWxlTmFtZTogUHJvcFR5cGVzLnN0cmluZ1xufTtcbkJvb3RzdHJhcFRhYmxlLmRlZmF1bHRQcm9wcyA9IHtcbiAgaGVpZ2h0OiAnMTAwJScsXG4gIG1heEhlaWdodDogdW5kZWZpbmVkLFxuICBzdHJpcGVkOiBmYWxzZSxcbiAgYm9yZGVyZWQ6IHRydWUsXG4gIGhvdmVyOiBmYWxzZSxcbiAgY29uZGVuc2VkOiBmYWxzZSxcbiAgcGFnaW5hdGlvbjogZmFsc2UsXG4gIHNlYXJjaFBsYWNlaG9sZGVyOiB1bmRlZmluZWQsXG4gIHNlbGVjdFJvdzoge1xuICAgIG1vZGU6IENvbnN0LlJPV19TRUxFQ1RfTk9ORSxcbiAgICBiZ0NvbG9yOiBDb25zdC5ST1dfU0VMRUNUX0JHX0NPTE9SLFxuICAgIHNlbGVjdGVkOiBbXSxcbiAgICBvblNlbGVjdDogdW5kZWZpbmVkLFxuICAgIG9uU2VsZWN0QWxsOiB1bmRlZmluZWQsXG4gICAgY2xpY2tUb1NlbGVjdDogZmFsc2UsXG4gICAgaGlkZVNlbGVjdENvbHVtbjogZmFsc2UsXG4gICAgY2xpY2tUb1NlbGVjdEFuZEVkaXRDZWxsOiBmYWxzZSxcbiAgICBzaG93T25seVNlbGVjdGVkOiBmYWxzZVxuICB9LFxuICBjZWxsRWRpdDoge1xuICAgIG1vZGU6IENvbnN0LkNFTExfRURJVF9OT05FLFxuICAgIGJsdXJUb1NhdmU6IGZhbHNlLFxuICAgIGJlZm9yZVNhdmVDZWxsOiB1bmRlZmluZWQsXG4gICAgYWZ0ZXJTYXZlQ2VsbDogdW5kZWZpbmVkXG4gIH0sXG4gIGluc2VydFJvdzogZmFsc2UsXG4gIGRlbGV0ZVJvdzogZmFsc2UsXG4gIHNlYXJjaDogZmFsc2UsXG4gIG11bHRpQ29sdW1uU2VhcmNoOiBmYWxzZSxcbiAgY29sdW1uRmlsdGVyOiBmYWxzZSxcbiAgdHJDbGFzc05hbWU6ICcnLFxuICBvcHRpb25zOiB7XG4gICAgY2xlYXJTZWFyY2g6IGZhbHNlLFxuICAgIHNvcnROYW1lOiB1bmRlZmluZWQsXG4gICAgc29ydE9yZGVyOiB1bmRlZmluZWQsXG4gICAgc29ydEluZGljYXRvcjogdHJ1ZSxcbiAgICBhZnRlclRhYmxlQ29tcGxldGU6IHVuZGVmaW5lZCxcbiAgICBhZnRlckRlbGV0ZVJvdzogdW5kZWZpbmVkLFxuICAgIGFmdGVySW5zZXJ0Um93OiB1bmRlZmluZWQsXG4gICAgYWZ0ZXJTZWFyY2g6IHVuZGVmaW5lZCxcbiAgICBhZnRlckNvbHVtbkZpbHRlcjogdW5kZWZpbmVkLFxuICAgIG9uUm93Q2xpY2s6IHVuZGVmaW5lZCxcbiAgICBvbk1vdXNlTGVhdmU6IHVuZGVmaW5lZCxcbiAgICBvbk1vdXNlRW50ZXI6IHVuZGVmaW5lZCxcbiAgICBvblJvd01vdXNlT3V0OiB1bmRlZmluZWQsXG4gICAgb25Sb3dNb3VzZU92ZXI6IHVuZGVmaW5lZCxcbiAgICBwYWdlOiB1bmRlZmluZWQsXG4gICAgc2l6ZVBlclBhZ2VMaXN0OiBDb25zdC5TSVpFX1BFUl9QQUdFX0xJU1QsXG4gICAgc2l6ZVBlclBhZ2U6IHVuZGVmaW5lZCxcbiAgICBwYWdpbmF0aW9uU2l6ZTogQ29uc3QuUEFHSU5BVElPTl9TSVpFLFxuICAgIG9uU2l6ZVBlclBhZ2VMaXN0OiB1bmRlZmluZWQsXG4gICAgbm9EYXRhVGV4dDogdW5kZWZpbmVkLFxuICAgIGhhbmRsZUNvbmZpcm1EZWxldGVSb3c6IHVuZGVmaW5lZCxcbiAgICBwcmVQYWdlOiBDb25zdC5QUkVfUEFHRSxcbiAgICBuZXh0UGFnZTogQ29uc3QuTkVYVF9QQUdFLFxuICAgIGZpcnN0UGFnZTogQ29uc3QuRklSU1RfUEFHRSxcbiAgICBsYXN0UGFnZTogQ29uc3QuTEFTVF9QQUdFXG4gIH0sXG4gIGZldGNoSW5mbzoge1xuICAgIGRhdGFUb3RhbFNpemU6IDBcbiAgfSxcbiAgZXhwb3J0Q1NWOiBmYWxzZSxcbiAgY3N2RmlsZU5hbWU6IHVuZGVmaW5lZFxufTtcblxuZXhwb3J0IGRlZmF1bHQgQm9vdHN0cmFwVGFibGU7XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9Cb290c3RyYXBUYWJsZS5qc1xuICoqLyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8yX187XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiBleHRlcm5hbCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9XG4gKiogbW9kdWxlIGlkID0gMlxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiZXhwb3J0IGRlZmF1bHQge1xuICBTT1JUX0RFU0M6ICdkZXNjJyxcbiAgU09SVF9BU0M6ICdhc2MnLFxuICBTSVpFX1BFUl9QQUdFOiAxMCxcbiAgTkVYVF9QQUdFOiAnPicsXG4gIExBU1RfUEFHRTogJz4+JyxcbiAgUFJFX1BBR0U6ICc8JyxcbiAgRklSU1RfUEFHRTogJzw8JyxcbiAgUk9XX1NFTEVDVF9CR19DT0xPUjogJycsXG4gIFJPV19TRUxFQ1RfTk9ORTogJ25vbmUnLFxuICBST1dfU0VMRUNUX1NJTkdMRTogJ3JhZGlvJyxcbiAgUk9XX1NFTEVDVF9NVUxUSTogJ2NoZWNrYm94JyxcbiAgQ0VMTF9FRElUX05PTkU6ICdub25lJyxcbiAgQ0VMTF9FRElUX0NMSUNLOiAnY2xpY2snLFxuICBDRUxMX0VESVRfREJDTElDSzogJ2RiY2xpY2snLFxuICBTSVpFX1BFUl9QQUdFX0xJU1Q6IFsgMTAsIDI1LCAzMCwgNTAgXSxcbiAgUEFHSU5BVElPTl9TSVpFOiA1LFxuICBOT19EQVRBX1RFWFQ6ICdUaGVyZSBpcyBubyBkYXRhIHRvIGRpc3BsYXknLFxuICBTSE9XX09OTFlfU0VMRUNUOiAnU2hvdyBTZWxlY3RlZCBPbmx5JyxcbiAgU0hPV19BTEw6ICdTaG93IEFsbCcsXG4gIEZJTFRFUl9ERUxBWTogNTAwLFxuICBGSUxURVJfVFlQRToge1xuICAgIFRFWFQ6ICdUZXh0RmlsdGVyJyxcbiAgICBSRUdFWDogJ1JlZ2V4RmlsdGVyJyxcbiAgICBTRUxFQ1Q6ICdTZWxlY3RGaWx0ZXInLFxuICAgIE5VTUJFUjogJ051bWJlckZpbHRlcicsXG4gICAgREFURTogJ0RhdGVGaWx0ZXInLFxuICAgIENVU1RPTTogJ0N1c3RvbUZpbHRlcidcbiAgfVxufTtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL0NvbnN0LmpzXG4gKiovIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgUHJvcFR5cGVzIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi9Db25zdCc7XG5pbXBvcnQgY2xhc3NTZXQgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgU2VsZWN0Um93SGVhZGVyQ29sdW1uIGZyb20gJy4vU2VsZWN0Um93SGVhZGVyQ29sdW1uJztcblxuY2xhc3MgQ2hlY2tib3ggZXh0ZW5kcyBDb21wb25lbnQge1xuICBjb21wb25lbnREaWRNb3VudCgpIHsgdGhpcy51cGRhdGUodGhpcy5wcm9wcy5jaGVja2VkKTsgfVxuICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKHByb3BzKSB7IHRoaXMudXBkYXRlKHByb3BzLmNoZWNrZWQpOyB9XG4gIHVwZGF0ZShjaGVja2VkKSB7XG4gICAgUmVhY3RET00uZmluZERPTU5vZGUodGhpcykuaW5kZXRlcm1pbmF0ZSA9IGNoZWNrZWQgPT09ICdpbmRldGVybWluYXRlJztcbiAgfVxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxpbnB1dCBjbGFzc05hbWU9J3JlYWN0LWJzLXNlbGVjdC1hbGwnXG4gICAgICAgIHR5cGU9J2NoZWNrYm94J1xuICAgICAgICBjaGVja2VkPXsgdGhpcy5wcm9wcy5jaGVja2VkIH1cbiAgICAgICAgb25DaGFuZ2U9eyB0aGlzLnByb3BzLm9uQ2hhbmdlIH0gLz5cbiAgICApO1xuICB9XG59XG5cbmNsYXNzIFRhYmxlSGVhZGVyIGV4dGVuZHMgQ29tcG9uZW50IHtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgY29udGFpbmVyQ2xhc3NlcyA9IGNsYXNzU2V0KCdyZWFjdC1icy1jb250YWluZXItaGVhZGVyJywgJ3RhYmxlLWhlYWRlci13cmFwcGVyJyk7XG4gICAgY29uc3QgdGFibGVDbGFzc2VzID0gY2xhc3NTZXQoJ3RhYmxlJywgJ3RhYmxlLWhvdmVyJywge1xuICAgICAgJ3RhYmxlLWJvcmRlcmVkJzogdGhpcy5wcm9wcy5ib3JkZXJlZCxcbiAgICAgICd0YWJsZS1jb25kZW5zZWQnOiB0aGlzLnByb3BzLmNvbmRlbnNlZFxuICAgIH0pO1xuICAgIGxldCBzZWxlY3RSb3dIZWFkZXJDb2wgPSBudWxsO1xuICAgIGlmICghdGhpcy5wcm9wcy5oaWRlU2VsZWN0Q29sdW1uKSBzZWxlY3RSb3dIZWFkZXJDb2wgPSB0aGlzLnJlbmRlclNlbGVjdFJvd0hlYWRlcigpO1xuICAgIHRoaXMuX2F0dGFjaENsZWFyU29ydENhcmV0RnVuYygpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgcmVmPSdjb250YWluZXInIGNsYXNzTmFtZT17IGNvbnRhaW5lckNsYXNzZXMgfT5cbiAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT17IHRhYmxlQ2xhc3NlcyB9PlxuICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgIDx0ciByZWY9J2hlYWRlcic+XG4gICAgICAgICAgICAgIHsgc2VsZWN0Um93SGVhZGVyQ29sIH1cbiAgICAgICAgICAgICAgeyB0aGlzLnByb3BzLmNoaWxkcmVuIH1cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgPC90YWJsZT5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZW5kZXJTZWxlY3RSb3dIZWFkZXIoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMucm93U2VsZWN0VHlwZSA9PT0gQ29uc3QuUk9XX1NFTEVDVF9TSU5HTEUpIHtcbiAgICAgIHJldHVybiAoPFNlbGVjdFJvd0hlYWRlckNvbHVtbiAvPik7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnJvd1NlbGVjdFR5cGUgPT09IENvbnN0LlJPV19TRUxFQ1RfTVVMVEkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTZWxlY3RSb3dIZWFkZXJDb2x1bW4+XG4gICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICBvbkNoYW5nZT17IHRoaXMucHJvcHMub25TZWxlY3RBbGxSb3cgfVxuICAgICAgICAgICAgY2hlY2tlZD17IHRoaXMucHJvcHMuaXNTZWxlY3RBbGwgfS8+XG4gICAgICAgIDwvU2VsZWN0Um93SGVhZGVyQ29sdW1uPlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgX2F0dGFjaENsZWFyU29ydENhcmV0RnVuYygpIHtcbiAgICBjb25zdCB7IHNvcnRJbmRpY2F0b3IsIGNoaWxkcmVuLCBzb3J0TmFtZSwgc29ydE9yZGVyLCBvblNvcnQgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gY2hpbGRyZW5baV0ucHJvcHMuZGF0YUZpZWxkO1xuICAgICAgICBjb25zdCBzb3J0ID0gZmllbGQgPT09IHNvcnROYW1lID8gc29ydE9yZGVyIDogdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnByb3BzLmNoaWxkcmVuW2ldID1cbiAgICAgICAgICBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW5baV0sXG4gICAgICAgICAgICB7IGtleTogaSwgb25Tb3J0LCBzb3J0LCBzb3J0SW5kaWNhdG9yIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmaWVsZCA9IGNoaWxkcmVuLnByb3BzLmRhdGFGaWVsZDtcbiAgICAgIGNvbnN0IHNvcnQgPSBmaWVsZCA9PT0gc29ydE5hbWUgPyBzb3J0T3JkZXIgOiB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnByb3BzLmNoaWxkcmVuID1cbiAgICAgICAgUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLFxuICAgICAgICAgIHsga2V5OiAwLCBvblNvcnQsIHNvcnQsIHNvcnRJbmRpY2F0b3IgfSk7XG4gICAgfVxuICB9XG59XG5UYWJsZUhlYWRlci5wcm9wVHlwZXMgPSB7XG4gIHJvd1NlbGVjdFR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uU29ydDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uU2VsZWN0QWxsUm93OiBQcm9wVHlwZXMuZnVuYyxcbiAgc29ydE5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNvcnRPcmRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgaGlkZVNlbGVjdENvbHVtbjogUHJvcFR5cGVzLmJvb2wsXG4gIGJvcmRlcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgY29uZGVuc2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNGaWx0ZXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGlzU2VsZWN0QWxsOiBQcm9wVHlwZXMub25lT2YoWyB0cnVlLCAnaW5kZXRlcm1pbmF0ZScsIGZhbHNlIF0pLFxuICBzb3J0SW5kaWNhdG9yOiBQcm9wVHlwZXMuYm9vbFxufTtcblxuZXhwb3J0IGRlZmF1bHQgVGFibGVIZWFkZXI7XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9UYWJsZUhlYWRlci5qc1xuICoqLyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV81X187XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiBleHRlcm5hbCB7XCJyb290XCI6XCJSZWFjdERPTVwiLFwiY29tbW9uanMyXCI6XCJyZWFjdC1kb21cIixcImNvbW1vbmpzXCI6XCJyZWFjdC1kb21cIixcImFtZFwiOlwicmVhY3QtZG9tXCJ9XG4gKiogbW9kdWxlIGlkID0gNVxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiLyohXG4gIENvcHlyaWdodCAoYykgMjAxNiBKZWQgV2F0c29uLlxuICBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZVxuICBodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXG4qL1xuLyogZ2xvYmFsIGRlZmluZSAqL1xuXG4oZnVuY3Rpb24gKCkge1xuXHQndXNlIHN0cmljdCc7XG5cblx0dmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG5cdGZ1bmN0aW9uIGNsYXNzTmFtZXMgKCkge1xuXHRcdHZhciBjbGFzc2VzID0gW107XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGlmICghYXJnKSBjb250aW51ZTtcblxuXHRcdFx0dmFyIGFyZ1R5cGUgPSB0eXBlb2YgYXJnO1xuXG5cdFx0XHRpZiAoYXJnVHlwZSA9PT0gJ3N0cmluZycgfHwgYXJnVHlwZSA9PT0gJ251bWJlcicpIHtcblx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGFyZyk7XG5cdFx0XHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuXHRcdFx0XHRjbGFzc2VzLnB1c2goY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpKTtcblx0XHRcdH0gZWxzZSBpZiAoYXJnVHlwZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0Zm9yICh2YXIga2V5IGluIGFyZykge1xuXHRcdFx0XHRcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcblx0XHRcdFx0XHRcdGNsYXNzZXMucHVzaChrZXkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcblx0fVxuXG5cdGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuXHRcdG1vZHVsZS5leHBvcnRzID0gY2xhc3NOYW1lcztcblx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09PSAnb2JqZWN0JyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxuXHRcdGRlZmluZSgnY2xhc3NuYW1lcycsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcztcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7XG5cdH1cbn0oKSk7XG5cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vfi9jbGFzc25hbWVzL2luZGV4LmpzXG4gKiogbW9kdWxlIGlkID0gNlxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgUHJvcFR5cGVzIH0gZnJvbSAncmVhY3QnO1xuXG5jbGFzcyBTZWxlY3RSb3dIZWFkZXJDb2x1bW4gZXh0ZW5kcyBDb21wb25lbnQge1xuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPHRoIHN0eWxlPXsgeyB0ZXh0QWxpZ246ICdjZW50ZXInIH0gfT5cbiAgICAgICAgeyB0aGlzLnByb3BzLmNoaWxkcmVuIH1cbiAgICAgIDwvdGg+XG4gICAgKTtcbiAgfVxufVxuU2VsZWN0Um93SGVhZGVyQ29sdW1uLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlXG59O1xuZXhwb3J0IGRlZmF1bHQgU2VsZWN0Um93SGVhZGVyQ29sdW1uO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvU2VsZWN0Um93SGVhZGVyQ29sdW1uLmpzXG4gKiovIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgUHJvcFR5cGVzIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4vQ29uc3QnO1xuaW1wb3J0IFRhYmxlUm93IGZyb20gJy4vVGFibGVSb3cnO1xuaW1wb3J0IFRhYmxlQ29sdW1uIGZyb20gJy4vVGFibGVDb2x1bW4nO1xuaW1wb3J0IFRhYmxlRWRpdENvbHVtbiBmcm9tICcuL1RhYmxlRWRpdENvbHVtbic7XG5pbXBvcnQgY2xhc3NTZXQgZnJvbSAnY2xhc3NuYW1lcyc7XG5cbmNvbnN0IGlzRnVuID0gZnVuY3Rpb24ob2JqKSB7XG4gIHJldHVybiBvYmogJiYgKHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpO1xufTtcblxuY2xhc3MgVGFibGVCb2R5IGV4dGVuZHMgQ29tcG9uZW50IHtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgY3VyckVkaXRDZWxsOiBudWxsXG4gICAgfTtcbiAgICB0aGlzLmVkaXRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB0YWJsZUNsYXNzZXMgPSBjbGFzc1NldCgndGFibGUnLCB7XG4gICAgICAndGFibGUtc3RyaXBlZCc6IHRoaXMucHJvcHMuc3RyaXBlZCxcbiAgICAgICd0YWJsZS1ib3JkZXJlZCc6IHRoaXMucHJvcHMuYm9yZGVyZWQsXG4gICAgICAndGFibGUtaG92ZXInOiB0aGlzLnByb3BzLmhvdmVyLFxuICAgICAgJ3RhYmxlLWNvbmRlbnNlZCc6IHRoaXMucHJvcHMuY29uZGVuc2VkXG4gICAgfSk7XG5cbiAgICBjb25zdCBpc1NlbGVjdFJvd0RlZmluZWQgPSB0aGlzLl9pc1NlbGVjdFJvd0RlZmluZWQoKTtcbiAgICBjb25zdCB0YWJsZUhlYWRlciA9IHRoaXMucmVuZGVyVGFibGVIZWFkZXIoaXNTZWxlY3RSb3dEZWZpbmVkKTtcblxuICAgIGNvbnN0IHRhYmxlUm93cyA9IHRoaXMucHJvcHMuZGF0YS5tYXAoZnVuY3Rpb24oZGF0YSwgcikge1xuICAgICAgY29uc3QgdGFibGVDb2x1bW5zID0gdGhpcy5wcm9wcy5jb2x1bW5zLm1hcChmdW5jdGlvbihjb2x1bW4sIGkpIHtcbiAgICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IGRhdGFbY29sdW1uLm5hbWVdO1xuICAgICAgICBpZiAodGhpcy5lZGl0aW5nICYmXG4gICAgICAgICAgY29sdW1uLm5hbWUgIT09IHRoaXMucHJvcHMua2V5RmllbGQgJiYgLy8gS2V5IGZpZWxkIGNhbid0IGJlIGVkaXRcbiAgICAgICAgICBjb2x1bW4uZWRpdGFibGUgJiYgLy8gY29sdW1uIGlzIGVkaXRhYmxlPyBkZWZhdWx0IGlzIHRydWUsIHVzZXIgY2FuIHNldCBpdCBmYWxzZVxuICAgICAgICAgIHRoaXMuc3RhdGUuY3VyckVkaXRDZWxsICE9PSBudWxsICYmXG4gICAgICAgICAgdGhpcy5zdGF0ZS5jdXJyRWRpdENlbGwucmlkID09PSByICYmXG4gICAgICAgICAgdGhpcy5zdGF0ZS5jdXJyRWRpdENlbGwuY2lkID09PSBpKSB7XG4gICAgICAgICAgbGV0IGVkaXRhYmxlID0gY29sdW1uLmVkaXRhYmxlO1xuICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IGNvbHVtbi5mb3JtYXQgPyBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5mb3JtYXQodmFsdWUsIGRhdGEsIGNvbHVtbi5mb3JtYXRFeHRyYURhdGEpLnJlcGxhY2UoLzwuKj8+L2csICcnKTtcbiAgICAgICAgICB9IDogZmFsc2U7XG5cbiAgICAgICAgICBpZiAoaXNGdW4oY29sdW1uLmVkaXRhYmxlKSkge1xuICAgICAgICAgICAgZWRpdGFibGUgPSBjb2x1bW4uZWRpdGFibGUoZmllbGRWYWx1ZSwgZGF0YSwgciwgaSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPFRhYmxlRWRpdENvbHVtblxuICAgICAgICAgICAgICAgIGNvbXBsZXRlRWRpdD17IHRoaXMuaGFuZGxlQ29tcGxldGVFZGl0Q2VsbCB9XG4gICAgICAgICAgICAgICAgLy8gYWRkIGJ5IGJsdWVzcHJpbmcgZm9yIGNvbHVtbiBlZGl0b3IgY3VzdG9taXplXG4gICAgICAgICAgICAgICAgZWRpdGFibGU9eyBlZGl0YWJsZSB9XG4gICAgICAgICAgICAgICAgZm9ybWF0PXsgY29sdW1uLmZvcm1hdCA/IGZvcm1hdCA6IGZhbHNlIH1cbiAgICAgICAgICAgICAgICBrZXk9eyBpIH1cbiAgICAgICAgICAgICAgICBibHVyVG9TYXZlPXsgdGhpcy5wcm9wcy5jZWxsRWRpdC5ibHVyVG9TYXZlIH1cbiAgICAgICAgICAgICAgICByb3dJbmRleD17IHIgfVxuICAgICAgICAgICAgICAgIGNvbEluZGV4PXsgaSB9PlxuICAgICAgICAgICAgICAgIHsgZmllbGRWYWx1ZSB9XG4gICAgICAgICAgICAgIDwvVGFibGVFZGl0Q29sdW1uPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBhZGQgYnkgYmx1ZXNwcmluZyBmb3IgY2xhc3NOYW1lIGN1c3RvbWl6ZVxuICAgICAgICAgIGxldCBjb2x1bW5DaGlsZCA9IGZpZWxkVmFsdWU7XG4gICAgICAgICAgbGV0IHRkQ2xhc3NOYW1lID0gY29sdW1uLmNsYXNzTmFtZTtcbiAgICAgICAgICBpZiAoaXNGdW4oY29sdW1uLmNsYXNzTmFtZSkpIHtcbiAgICAgICAgICAgIHRkQ2xhc3NOYW1lID0gY29sdW1uLmNsYXNzTmFtZShmaWVsZFZhbHVlLCBkYXRhLCByLCBpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGNvbHVtbi5mb3JtYXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IGNvbHVtbi5mb3JtYXQoZmllbGRWYWx1ZSwgZGF0YSwgY29sdW1uLmZvcm1hdEV4dHJhRGF0YSk7XG4gICAgICAgICAgICBpZiAoIVJlYWN0LmlzVmFsaWRFbGVtZW50KGZvcm1hdHRlZFZhbHVlKSkge1xuICAgICAgICAgICAgICBjb2x1bW5DaGlsZCA9IChcbiAgICAgICAgICAgICAgICA8ZGl2IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXsgeyBfX2h0bWw6IGZvcm1hdHRlZFZhbHVlIH0gfT48L2Rpdj5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbHVtbkNoaWxkID0gZm9ybWF0dGVkVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8VGFibGVDb2x1bW4ga2V5PXsgaSB9XG4gICAgICAgICAgICAgIGRhdGFBbGlnbj17IGNvbHVtbi5hbGlnbiB9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17IHRkQ2xhc3NOYW1lIH1cbiAgICAgICAgICAgICAgY2VsbEVkaXQ9eyB0aGlzLnByb3BzLmNlbGxFZGl0IH1cbiAgICAgICAgICAgICAgaGlkZGVuPXsgY29sdW1uLmhpZGRlbiB9XG4gICAgICAgICAgICAgIG9uRWRpdD17IHRoaXMuaGFuZGxlRWRpdENlbGwgfVxuICAgICAgICAgICAgICB3aWR0aD17IGNvbHVtbi53aWR0aCB9PlxuICAgICAgICAgICAgICB7IGNvbHVtbkNoaWxkIH1cbiAgICAgICAgICAgIDwvVGFibGVDb2x1bW4+XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSwgdGhpcyk7XG5cbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5wcm9wcy5zZWxlY3RlZFJvd0tleXMuaW5kZXhPZihkYXRhW3RoaXMucHJvcHMua2V5RmllbGRdKSAhPT0gLTE7XG4gICAgICBjb25zdCBzZWxlY3RSb3dDb2x1bW4gPSBpc1NlbGVjdFJvd0RlZmluZWQgJiYgIXRoaXMucHJvcHMuc2VsZWN0Um93LmhpZGVTZWxlY3RDb2x1bW4gP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJTZWxlY3RSb3dDb2x1bW4oc2VsZWN0ZWQpIDogbnVsbDtcbiAgICAgIC8vIGFkZCBieSBibHVlc3ByaW5nIGZvciBjbGFzc05hbWUgY3VzdG9taXplXG4gICAgICBsZXQgdHJDbGFzc05hbWUgPSB0aGlzLnByb3BzLnRyQ2xhc3NOYW1lO1xuICAgICAgaWYgKGlzRnVuKHRoaXMucHJvcHMudHJDbGFzc05hbWUpKSB7XG4gICAgICAgIHRyQ2xhc3NOYW1lID0gdGhpcy5wcm9wcy50ckNsYXNzTmFtZShkYXRhLCByKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUYWJsZVJvdyBpc1NlbGVjdGVkPXsgc2VsZWN0ZWQgfSBrZXk9eyByIH0gY2xhc3NOYW1lPXsgdHJDbGFzc05hbWUgfVxuICAgICAgICAgIHNlbGVjdFJvdz17IGlzU2VsZWN0Um93RGVmaW5lZCA/IHRoaXMucHJvcHMuc2VsZWN0Um93IDogdW5kZWZpbmVkIH1cbiAgICAgICAgICBlbmFibGVDZWxsRWRpdD17IHRoaXMucHJvcHMuY2VsbEVkaXQubW9kZSAhPT0gQ29uc3QuQ0VMTF9FRElUX05PTkUgfVxuICAgICAgICAgIG9uUm93Q2xpY2s9eyB0aGlzLmhhbmRsZVJvd0NsaWNrIH1cbiAgICAgICAgICBvblJvd01vdXNlT3Zlcj17IHRoaXMuaGFuZGxlUm93TW91c2VPdmVyIH1cbiAgICAgICAgICBvblJvd01vdXNlT3V0PXsgdGhpcy5oYW5kbGVSb3dNb3VzZU91dCB9XG4gICAgICAgICAgb25TZWxlY3RSb3c9eyB0aGlzLmhhbmRsZVNlbGVjdFJvdyB9PlxuICAgICAgICAgIHsgc2VsZWN0Um93Q29sdW1uIH1cbiAgICAgICAgICB7IHRhYmxlQ29sdW1ucyB9XG4gICAgICAgIDwvVGFibGVSb3c+XG4gICAgICApO1xuICAgIH0sIHRoaXMpO1xuXG4gICAgaWYgKHRhYmxlUm93cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRhYmxlUm93cy5wdXNoKFxuICAgICAgICA8VGFibGVSb3cga2V5PScjI3RhYmxlLWVtcHR5IyMnPlxuICAgICAgICAgIDx0ZCBjb2xTcGFuPXsgdGhpcy5wcm9wcy5jb2x1bW5zLmxlbmd0aCArIChpc1NlbGVjdFJvd0RlZmluZWQgPyAxIDogMCkgfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9J3JlYWN0LWJzLXRhYmxlLW5vLWRhdGEnPlxuICAgICAgICAgICAgICB7IHRoaXMucHJvcHMubm9EYXRhVGV4dCB8fCBDb25zdC5OT19EQVRBX1RFWFQgfVxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvVGFibGVSb3c+XG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuZWRpdGluZyA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgcmVmPSdjb250YWluZXInIGNsYXNzTmFtZT0ncmVhY3QtYnMtY29udGFpbmVyLWJvZHknIHN0eWxlPXsgdGhpcy5wcm9wcy5zdHlsZSB9PlxuICAgICAgICA8dGFibGUgY2xhc3NOYW1lPXsgdGFibGVDbGFzc2VzIH0+XG4gICAgICAgICAgeyB0YWJsZUhlYWRlciB9XG4gICAgICAgICAgPHRib2R5IHJlZj0ndGJvZHknPlxuICAgICAgICAgICAgeyB0YWJsZVJvd3MgfVxuICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyVGFibGVIZWFkZXIoaXNTZWxlY3RSb3dEZWZpbmVkKSB7XG4gICAgbGV0IHNlbGVjdFJvd0hlYWRlciA9IG51bGw7XG5cbiAgICBpZiAoaXNTZWxlY3RSb3dEZWZpbmVkKSB7XG4gICAgICBjb25zdCBzdHlsZSA9IHtcbiAgICAgICAgd2lkdGg6IDMwLFxuICAgICAgICBtaW5XaWR0aDogMzBcbiAgICAgIH07XG4gICAgICBpZiAoIXRoaXMucHJvcHMuc2VsZWN0Um93LmhpZGVTZWxlY3RDb2x1bW4pIHtcbiAgICAgICAgc2VsZWN0Um93SGVhZGVyID0gKDxjb2wgc3R5bGU9eyBzdHlsZSB9IGtleT17IC0xIH0+PC9jb2w+KTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgdGhlYWRlciA9IHRoaXMucHJvcHMuY29sdW1ucy5tYXAoZnVuY3Rpb24oY29sdW1uLCBpKSB7XG4gICAgICBjb25zdCB3aWR0aCA9IGNvbHVtbi53aWR0aCA9PT0gbnVsbCA/IGNvbHVtbi53aWR0aCA6IHBhcnNlSW50KGNvbHVtbi53aWR0aCwgMTApO1xuICAgICAgY29uc3Qgc3R5bGUgPSB7XG4gICAgICAgIGRpc3BsYXk6IGNvbHVtbi5oaWRkZW4gPyAnbm9uZScgOiBudWxsLFxuICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgIG1pbldpZHRoOiB3aWR0aFxuICAgICAgICAvKiogYWRkIG1pbi13ZHRoIHRvIGZpeCB1c2VyIGFzc2lnbiBjb2x1bW4gd2lkdGhcbiAgICAgICAgbm90IGVxIG9mZnNldFdpZHRoIGluIGxhcmdlIGNvbHVtbiB0YWJsZSAqKi9cbiAgICAgIH07XG4gICAgICByZXR1cm4gKDxjb2wgc3R5bGU9eyBzdHlsZSB9IGtleT17IGkgfSBjbGFzc05hbWU9eyBjb2x1bW4uY2xhc3NOYW1lIH0+PC9jb2w+KTtcbiAgICB9KTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Y29sZ3JvdXAgcmVmPSdoZWFkZXInPlxuICAgICAgICB7IHNlbGVjdFJvd0hlYWRlciB9eyB0aGVhZGVyIH1cbiAgICAgIDwvY29sZ3JvdXA+XG4gICAgKTtcbiAgfVxuXG4gIGhhbmRsZVJvd01vdXNlT3V0ID0gcm93SW5kZXggPT4ge1xuICAgIGNvbnN0IHRhcmdldFJvdyA9IHRoaXMucHJvcHMuZGF0YVtyb3dJbmRleF07XG4gICAgdGhpcy5wcm9wcy5vblJvd01vdXNlT3V0KHRhcmdldFJvdyk7XG4gIH1cblxuICBoYW5kbGVSb3dNb3VzZU92ZXIgPSByb3dJbmRleCA9PiB7XG4gICAgY29uc3QgdGFyZ2V0Um93ID0gdGhpcy5wcm9wcy5kYXRhW3Jvd0luZGV4XTtcbiAgICB0aGlzLnByb3BzLm9uUm93TW91c2VPdmVyKHRhcmdldFJvdyk7XG4gIH1cblxuICBoYW5kbGVSb3dDbGljayA9IHJvd0luZGV4ID0+IHtcbiAgICBsZXQgc2VsZWN0ZWRSb3c7XG4gICAgY29uc3QgeyBkYXRhLCBvblJvd0NsaWNrIH0gPSB0aGlzLnByb3BzO1xuICAgIGRhdGEuZm9yRWFjaCgocm93LCBpKSA9PiB7XG4gICAgICBpZiAoaSA9PT0gcm93SW5kZXggLSAxKSB7XG4gICAgICAgIHNlbGVjdGVkUm93ID0gcm93O1xuICAgICAgfVxuICAgIH0pO1xuICAgIG9uUm93Q2xpY2soc2VsZWN0ZWRSb3cpO1xuICB9XG5cbiAgaGFuZGxlU2VsZWN0Um93ID0gKHJvd0luZGV4LCBpc1NlbGVjdGVkKSA9PiB7XG4gICAgbGV0IHNlbGVjdGVkUm93O1xuICAgIGNvbnN0IHsgZGF0YSwgb25TZWxlY3RSb3cgfSA9IHRoaXMucHJvcHM7XG4gICAgZGF0YS5mb3JFYWNoKChyb3csIGkpID0+IHtcbiAgICAgIGlmIChpID09PSByb3dJbmRleCAtIDEpIHtcbiAgICAgICAgc2VsZWN0ZWRSb3cgPSByb3c7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBvblNlbGVjdFJvdyhzZWxlY3RlZFJvdywgaXNTZWxlY3RlZCk7XG4gIH1cblxuICBoYW5kbGVTZWxlY3RSb3dDb2x1bUNoYW5nZSA9IGUgPT4ge1xuICAgIGlmICghdGhpcy5wcm9wcy5zZWxlY3RSb3cuY2xpY2tUb1NlbGVjdCB8fFxuICAgICAgIXRoaXMucHJvcHMuc2VsZWN0Um93LmNsaWNrVG9TZWxlY3RBbmRFZGl0Q2VsbCkge1xuICAgICAgdGhpcy5oYW5kbGVTZWxlY3RSb3coXG4gICAgICAgIGUuY3VycmVudFRhcmdldC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQucm93SW5kZXggKyAxLFxuICAgICAgICBlLmN1cnJlbnRUYXJnZXQuY2hlY2tlZCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlRWRpdENlbGwgPSAocm93SW5kZXgsIGNvbHVtbkluZGV4KSA9PiB7XG4gICAgdGhpcy5lZGl0aW5nID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5faXNTZWxlY3RSb3dEZWZpbmVkKCkpIHtcbiAgICAgIGNvbHVtbkluZGV4LS07XG4gICAgICBpZiAodGhpcy5wcm9wcy5zZWxlY3RSb3cuaGlkZVNlbGVjdENvbHVtbikgY29sdW1uSW5kZXgrKztcbiAgICB9XG4gICAgcm93SW5kZXgtLTtcbiAgICBjb25zdCBzdGF0ZU9iaiA9IHtcbiAgICAgIGN1cnJFZGl0Q2VsbDoge1xuICAgICAgICByaWQ6IHJvd0luZGV4LFxuICAgICAgICBjaWQ6IGNvbHVtbkluZGV4XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICh0aGlzLnByb3BzLnNlbGVjdFJvdy5jbGlja1RvU2VsZWN0QW5kRWRpdENlbGwpIHtcbiAgICAgIHRoaXMuaGFuZGxlU2VsZWN0Um93KHJvd0luZGV4ICsgMSwgdHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoc3RhdGVPYmopO1xuICB9XG5cbiAgaGFuZGxlQ29tcGxldGVFZGl0Q2VsbCA9IChuZXdWYWwsIHJvd0luZGV4LCBjb2x1bW5JbmRleCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoeyBjdXJyRWRpdENlbGw6IG51bGwgfSk7XG4gICAgaWYgKG5ld1ZhbCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5wcm9wcy5jZWxsRWRpdC5fX29uQ29tcGxldGVFZGl0X18obmV3VmFsLCByb3dJbmRleCwgY29sdW1uSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlclNlbGVjdFJvd0NvbHVtbihzZWxlY3RlZCkge1xuICAgIGlmICh0aGlzLnByb3BzLnNlbGVjdFJvdy5tb2RlID09PSBDb25zdC5ST1dfU0VMRUNUX1NJTkdMRSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFRhYmxlQ29sdW1uIGRhdGFBbGlnbj0nY2VudGVyJz5cbiAgICAgICAgICA8aW5wdXQgdHlwZT0ncmFkaW8nIGNoZWNrZWQ9eyBzZWxlY3RlZCB9XG4gICAgICAgICAgICBvbkNoYW5nZT17IHRoaXMuaGFuZGxlU2VsZWN0Um93Q29sdW1DaGFuZ2UgfS8+XG4gICAgICAgIDwvVGFibGVDb2x1bW4+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGFibGVDb2x1bW4gZGF0YUFsaWduPSdjZW50ZXInPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPSdjaGVja2JveCcgY2hlY2tlZD17IHNlbGVjdGVkIH1cbiAgICAgICAgICBvbkNoYW5nZT17IHRoaXMuaGFuZGxlU2VsZWN0Um93Q29sdW1DaGFuZ2UgfS8+XG4gICAgICAgIDwvVGFibGVDb2x1bW4+XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIF9pc1NlbGVjdFJvd0RlZmluZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc2VsZWN0Um93Lm1vZGUgPT09IENvbnN0LlJPV19TRUxFQ1RfU0lOR0xFIHx8XG4gICAgICAgICAgdGhpcy5wcm9wcy5zZWxlY3RSb3cubW9kZSA9PT0gQ29uc3QuUk9XX1NFTEVDVF9NVUxUSTtcbiAgfVxufVxuVGFibGVCb2R5LnByb3BUeXBlcyA9IHtcbiAgZGF0YTogUHJvcFR5cGVzLmFycmF5LFxuICBjb2x1bW5zOiBQcm9wVHlwZXMuYXJyYXksXG4gIHN0cmlwZWQ6IFByb3BUeXBlcy5ib29sLFxuICBib3JkZXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGhvdmVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgY29uZGVuc2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAga2V5RmllbGQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNlbGVjdGVkUm93S2V5czogUHJvcFR5cGVzLmFycmF5LFxuICBvblJvd0NsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25TZWxlY3RSb3c6IFByb3BUeXBlcy5mdW5jLFxuICBub0RhdGFUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdFxufTtcbmV4cG9ydCBkZWZhdWx0IFRhYmxlQm9keTtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL1RhYmxlQm9keS5qc1xuICoqLyIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFByb3BUeXBlcyB9IGZyb20gJ3JlYWN0JztcblxuY2xhc3MgVGFibGVSb3cgZXh0ZW5kcyBDb21wb25lbnQge1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuY2xpY2tOdW0gPSAwO1xuICB9XG5cbiAgcm93Q2xpY2sgPSBlID0+IHtcbiAgICBpZiAoZS50YXJnZXQudGFnTmFtZSAhPT0gJ0lOUFVUJyAmJlxuICAgICAgICBlLnRhcmdldC50YWdOYW1lICE9PSAnU0VMRUNUJyAmJlxuICAgICAgICBlLnRhcmdldC50YWdOYW1lICE9PSAnVEVYVEFSRUEnKSB7XG4gICAgICBjb25zdCByb3dJbmRleCA9IGUuY3VycmVudFRhcmdldC5yb3dJbmRleCArIDE7XG4gICAgICBpZiAodGhpcy5wcm9wcy5zZWxlY3RSb3cpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0Um93LmNsaWNrVG9TZWxlY3QpIHtcbiAgICAgICAgICB0aGlzLnByb3BzLm9uU2VsZWN0Um93KHJvd0luZGV4LCAhdGhpcy5wcm9wcy5pc1NlbGVjdGVkKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnNlbGVjdFJvdy5jbGlja1RvU2VsZWN0QW5kRWRpdENlbGwpIHtcbiAgICAgICAgICB0aGlzLmNsaWNrTnVtKys7XG4gICAgICAgICAgLyoqIGlmIGNsaWNrVG9TZWxlY3RBbmRFZGl0Q2VsbCBpcyBlbmFibGVkLFxuICAgICAgICAgICAqICB0aGVyZSBzaG91bGQgYmUgYSBkZWxheSB0byBwcmV2ZW50IGEgc2VsZWN0aW9uIGNoYW5nZWQgd2hlblxuICAgICAgICAgICAqICB1c2VyIGRibGljayB0byBlZGl0IGNlbGwgb24gc2FtZSByb3cgYnV0IGRpZmZlcmVudCBjZWxsXG4gICAgICAgICAgKiovXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5jbGlja051bSA9PT0gMSkge1xuICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uU2VsZWN0Um93KHJvd0luZGV4LCAhdGhpcy5wcm9wcy5pc1NlbGVjdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2xpY2tOdW0gPSAwO1xuICAgICAgICAgIH0sIDIwMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnByb3BzLm9uUm93Q2xpY2spIHRoaXMucHJvcHMub25Sb3dDbGljayhyb3dJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgcm93TW91c2VPdXQgPSBlID0+IHtcbiAgICBpZiAodGhpcy5wcm9wcy5vblJvd01vdXNlT3V0KSB7XG4gICAgICB0aGlzLnByb3BzLm9uUm93TW91c2VPdXQoZS5jdXJyZW50VGFyZ2V0LnJvd0luZGV4KTtcbiAgICB9XG4gIH1cblxuICByb3dNb3VzZU92ZXIgPSBlID0+IHtcbiAgICBpZiAodGhpcy5wcm9wcy5vblJvd01vdXNlT3Zlcikge1xuICAgICAgdGhpcy5wcm9wcy5vblJvd01vdXNlT3ZlcihlLmN1cnJlbnRUYXJnZXQucm93SW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICB0aGlzLmNsaWNrTnVtID0gMDtcbiAgICBjb25zdCB0ckNzcyA9IHtcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5wcm9wcy5pc1NlbGVjdGVkID8gdGhpcy5wcm9wcy5zZWxlY3RSb3cuYmdDb2xvciA6IG51bGxcbiAgICAgIH0sXG4gICAgICBjbGFzc05hbWU6IChcbiAgICAgICAgdGhpcy5wcm9wcy5pc1NlbGVjdGVkICYmIHRoaXMucHJvcHMuc2VsZWN0Um93LmNsYXNzTmFtZSA/XG4gICAgICAgIHRoaXMucHJvcHMuc2VsZWN0Um93LmNsYXNzTmFtZSA6ICcnKSArICh0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCAnJylcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0Um93ICYmICh0aGlzLnByb3BzLnNlbGVjdFJvdy5jbGlja1RvU2VsZWN0IHx8XG4gICAgICB0aGlzLnByb3BzLnNlbGVjdFJvdy5jbGlja1RvU2VsZWN0QW5kRWRpdENlbGwpIHx8IHRoaXMucHJvcHMub25Sb3dDbGljaykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHRyIHsgLi4udHJDc3MgfVxuICAgICAgICAgICAgb25Nb3VzZU92ZXI9eyB0aGlzLnJvd01vdXNlT3ZlciB9XG4gICAgICAgICAgICBvbk1vdXNlT3V0PXsgdGhpcy5yb3dNb3VzZU91dCB9XG4gICAgICAgICAgICBvbkNsaWNrPXsgdGhpcy5yb3dDbGljayB9PnsgdGhpcy5wcm9wcy5jaGlsZHJlbiB9PC90cj5cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDx0ciB7IC4uLnRyQ3NzIH0+eyB0aGlzLnByb3BzLmNoaWxkcmVuIH08L3RyPlxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblRhYmxlUm93LnByb3BUeXBlcyA9IHtcbiAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGVuYWJsZUNlbGxFZGl0OiBQcm9wVHlwZXMuYm9vbCxcbiAgb25Sb3dDbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uU2VsZWN0Um93OiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Sb3dNb3VzZU91dDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uUm93TW91c2VPdmVyOiBQcm9wVHlwZXMuZnVuY1xufTtcblRhYmxlUm93LmRlZmF1bHRQcm9wcyA9IHtcbiAgb25Sb3dDbGljazogdW5kZWZpbmVkXG59O1xuZXhwb3J0IGRlZmF1bHQgVGFibGVSb3c7XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9UYWJsZVJvdy5qc1xuICoqLyIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFByb3BUeXBlcyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBDb25zdCBmcm9tICcuL0NvbnN0JztcblxuY2xhc3MgVGFibGVDb2x1bW4gZXh0ZW5kcyBDb21wb25lbnQge1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIC8qIGVzbGludCBuby11bnVzZWQtdmFyczogWzAsIHsgXCJhcmdzXCI6IFwiYWZ0ZXItdXNlZFwiIH1dICovXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkge1xuICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IHRoaXMucHJvcHM7XG4gICAgbGV0IHNob3VsZFVwZGF0ZWQgPSB0aGlzLnByb3BzLndpZHRoICE9PSBuZXh0UHJvcHMud2lkdGhcbiAgICAgIHx8IHRoaXMucHJvcHMuY2xhc3NOYW1lICE9PSBuZXh0UHJvcHMuY2xhc3NOYW1lXG4gICAgICB8fCB0aGlzLnByb3BzLmhpZGRlbiAhPT0gbmV4dFByb3BzLmhpZGRlblxuICAgICAgfHwgdGhpcy5wcm9wcy5kYXRhQWxpZ24gIT09IG5leHRQcm9wcy5kYXRhQWxpZ25cbiAgICAgIHx8IHR5cGVvZiBjaGlsZHJlbiAhPT0gdHlwZW9mIG5leHRQcm9wcy5jaGlsZHJlblxuICAgICAgfHwgKCcnICsgdGhpcy5wcm9wcy5vbkVkaXQpLnRvU3RyaW5nKCkgIT09ICgnJyArIG5leHRQcm9wcy5vbkVkaXQpLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAoc2hvdWxkVXBkYXRlZCkge1xuICAgICAgcmV0dXJuIHNob3VsZFVwZGF0ZWQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjaGlsZHJlbiA9PT0gJ29iamVjdCcgJiYgY2hpbGRyZW4gIT09IG51bGwgJiYgY2hpbGRyZW4ucHJvcHMgIT09IG51bGwpIHtcbiAgICAgIGlmIChjaGlsZHJlbi5wcm9wcy50eXBlID09PSAnY2hlY2tib3gnIHx8IGNoaWxkcmVuLnByb3BzLnR5cGUgPT09ICdyYWRpbycpIHtcbiAgICAgICAgc2hvdWxkVXBkYXRlZCA9IHNob3VsZFVwZGF0ZWQgfHxcbiAgICAgICAgICBjaGlsZHJlbi5wcm9wcy50eXBlICE9PSBuZXh0UHJvcHMuY2hpbGRyZW4ucHJvcHMudHlwZSB8fFxuICAgICAgICAgIGNoaWxkcmVuLnByb3BzLmNoZWNrZWQgIT09IG5leHRQcm9wcy5jaGlsZHJlbi5wcm9wcy5jaGVja2VkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2hvdWxkVXBkYXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNob3VsZFVwZGF0ZWQgPSBzaG91bGRVcGRhdGVkIHx8IGNoaWxkcmVuICE9PSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gICAgfVxuXG4gICAgaWYgKHNob3VsZFVwZGF0ZWQpIHtcbiAgICAgIHJldHVybiBzaG91bGRVcGRhdGVkO1xuICAgIH1cblxuICAgIGlmICghKHRoaXMucHJvcHMuY2VsbEVkaXQgJiYgbmV4dFByb3BzLmNlbGxFZGl0KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc2hvdWxkVXBkYXRlZFxuICAgICAgICB8fCB0aGlzLnByb3BzLmNlbGxFZGl0Lm1vZGUgIT09IG5leHRQcm9wcy5jZWxsRWRpdC5tb2RlO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUNlbGxFZGl0ID0gZSA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMuY2VsbEVkaXQubW9kZSA9PT0gQ29uc3QuQ0VMTF9FRElUX0RCQ0xJQ0spIHtcbiAgICAgIGlmIChkb2N1bWVudC5zZWxlY3Rpb24gJiYgZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KSB7XG4gICAgICAgIGRvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSgpO1xuICAgICAgfSBlbHNlIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnByb3BzLm9uRWRpdChcbiAgICAgIGUuY3VycmVudFRhcmdldC5wYXJlbnRFbGVtZW50LnJvd0luZGV4ICsgMSxcbiAgICAgIGUuY3VycmVudFRhcmdldC5jZWxsSW5kZXgpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHRkU3R5bGUgPSB7XG4gICAgICB0ZXh0QWxpZ246IHRoaXMucHJvcHMuZGF0YUFsaWduLFxuICAgICAgZGlzcGxheTogdGhpcy5wcm9wcy5oaWRkZW4gPyAnbm9uZScgOiBudWxsXG4gICAgfTtcblxuICAgIGNvbnN0IG9wdHMgPSB7fTtcbiAgICBpZiAodGhpcy5wcm9wcy5jZWxsRWRpdCkge1xuICAgICAgaWYgKHRoaXMucHJvcHMuY2VsbEVkaXQubW9kZSA9PT0gQ29uc3QuQ0VMTF9FRElUX0NMSUNLKSB7XG4gICAgICAgIG9wdHMub25DbGljayA9IHRoaXMuaGFuZGxlQ2VsbEVkaXQ7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuY2VsbEVkaXQubW9kZSA9PT0gQ29uc3QuQ0VMTF9FRElUX0RCQ0xJQ0spIHtcbiAgICAgICAgb3B0cy5vbkRvdWJsZUNsaWNrID0gdGhpcy5oYW5kbGVDZWxsRWRpdDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDx0ZCBzdHlsZT17IHRkU3R5bGUgfSBjbGFzc05hbWU9eyB0aGlzLnByb3BzLmNsYXNzTmFtZSB9IHsgLi4ub3B0cyB9PlxuICAgICAgICB7IHRoaXMucHJvcHMuY2hpbGRyZW4gfVxuICAgICAgPC90ZD5cbiAgICApO1xuICB9XG59XG5UYWJsZUNvbHVtbi5wcm9wVHlwZXMgPSB7XG4gIGRhdGFBbGlnbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgaGlkZGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGVcbn07XG5cblRhYmxlQ29sdW1uLmRlZmF1bHRQcm9wcyA9IHtcbiAgZGF0YUFsaWduOiAnbGVmdCcsXG4gIGhpZGRlbjogZmFsc2UsXG4gIGNsYXNzTmFtZTogJydcbn07XG5leHBvcnQgZGVmYXVsdCBUYWJsZUNvbHVtbjtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL1RhYmxlQ29sdW1uLmpzXG4gKiovIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgUHJvcFR5cGVzIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGVkaXRvciBmcm9tICcuL0VkaXRvcic7XG5pbXBvcnQgTm90aWZpZXIgZnJvbSAnLi9Ob3RpZmljYXRpb24uanMnO1xuaW1wb3J0IGNsYXNzU2V0IGZyb20gJ2NsYXNzbmFtZXMnO1xuXG5jbGFzcyBUYWJsZUVkaXRDb2x1bW4gZXh0ZW5kcyBDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnRpbWVvdXRlQ2xlYXIgPSAwO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBzaGFrZUVkaXRvcjogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgaGFuZGxlS2V5UHJlc3MgPSBlID0+IHtcbiAgICBpZiAoZS5rZXlDb2RlID09PSAxMykge1xuICAgICAgLy8gUHJlc3NlZCBFTlRFUlxuICAgICAgY29uc3QgdmFsdWUgPSBlLmN1cnJlbnRUYXJnZXQudHlwZSA9PT0gJ2NoZWNrYm94JyA/XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2V0Q2hlY2tCb3hWYWx1ZShlKSA6IGUuY3VycmVudFRhcmdldC52YWx1ZTtcblxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRvcih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5wcm9wcy5jb21wbGV0ZUVkaXQodmFsdWUsIHRoaXMucHJvcHMucm93SW5kZXgsIHRoaXMucHJvcHMuY29sSW5kZXgpO1xuICAgIH0gZWxzZSBpZiAoZS5rZXlDb2RlID09PSAyNykge1xuICAgICAgdGhpcy5wcm9wcy5jb21wbGV0ZUVkaXQoXG4gICAgICAgIG51bGwsIHRoaXMucHJvcHMucm93SW5kZXgsIHRoaXMucHJvcHMuY29sSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUJsdXIgPSBlID0+IHtcbiAgICBpZiAodGhpcy5wcm9wcy5ibHVyVG9TYXZlKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGUuY3VycmVudFRhcmdldC50eXBlID09PSAnY2hlY2tib3gnID9cbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZXRDaGVja0JveFZhbHVlKGUpIDogZS5jdXJyZW50VGFyZ2V0LnZhbHVlO1xuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRvcih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5wcm9wcy5jb21wbGV0ZUVkaXQoXG4gICAgICAgICAgdmFsdWUsIHRoaXMucHJvcHMucm93SW5kZXgsIHRoaXMucHJvcHMuY29sSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRvcih2YWx1ZSkge1xuICAgIGNvbnN0IHRzID0gdGhpcztcbiAgICBpZiAodHMucHJvcHMuZWRpdGFibGUudmFsaWRhdG9yKSB7XG4gICAgICBjb25zdCB2YWxpZCA9IHRzLnByb3BzLmVkaXRhYmxlLnZhbGlkYXRvcih2YWx1ZSk7XG4gICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgIHRzLnJlZnMubm90aWZpZXIubm90aWNlKCdlcnJvcicsIHZhbGlkLCAnUHJlc3NlZCBFU0MgY2FuIGNhbmNlbCcpO1xuICAgICAgICBjb25zdCBpbnB1dCA9IHRzLnJlZnMuaW5wdXRSZWY7XG4gICAgICAgIC8vIGFuaW1hdGUgaW5wdXRcbiAgICAgICAgdHMuY2xlYXJUaW1lb3V0KCk7XG4gICAgICAgIHRzLnNldFN0YXRlKHsgc2hha2VFZGl0b3I6IHRydWUgfSk7XG4gICAgICAgIHRzLnRpbWVvdXRlQ2xlYXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0cy5zZXRTdGF0ZSh7IHNoYWtlRWRpdG9yOiBmYWxzZSB9KTtcbiAgICAgICAgfSwgMzAwKTtcbiAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjbGVhclRpbWVvdXQoKSB7XG4gICAgaWYgKHRoaXMudGltZW91dGVDbGVhciAhPT0gMCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dGVDbGVhcik7XG4gICAgICB0aGlzLnRpbWVvdXRlQ2xlYXIgPSAwO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLnJlZnMuaW5wdXRSZWYuZm9jdXMoKTtcbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMuY2xlYXJUaW1lb3V0KCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBlZGl0YWJsZSwgZm9ybWF0LCBjaGlsZHJlbiB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHNoYWtlRWRpdG9yIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IGF0dHIgPSB7XG4gICAgICByZWY6ICdpbnB1dFJlZicsXG4gICAgICBvbktleURvd246IHRoaXMuaGFuZGxlS2V5UHJlc3MsXG4gICAgICBvbkJsdXI6IHRoaXMuaGFuZGxlQmx1clxuICAgIH07XG4gICAgLy8gcHV0IHBsYWNlaG9sZGVyIGlmIGV4aXN0XG4gICAgZWRpdGFibGUucGxhY2Vob2xkZXIgJiYgKGF0dHIucGxhY2Vob2xkZXIgPSBlZGl0YWJsZS5wbGFjZWhvbGRlcik7XG5cbiAgICBjb25zdCBlZGl0b3JDbGFzcyA9IGNsYXNzU2V0KHsgJ2FuaW1hdGVkJzogc2hha2VFZGl0b3IsICdzaGFrZSc6IHNoYWtlRWRpdG9yIH0pO1xuICAgIHJldHVybiAoXG4gICAgICA8dGQgcmVmPSd0ZCcgc3R5bGU9eyB7IHBvc2l0aW9uOiAncmVsYXRpdmUnIH0gfT5cbiAgICAgICAgeyBlZGl0b3IoZWRpdGFibGUsIGF0dHIsIGZvcm1hdCwgZWRpdG9yQ2xhc3MsIGNoaWxkcmVuIHx8ICcnKSB9XG4gICAgICAgIDxOb3RpZmllciByZWY9J25vdGlmaWVyJy8+XG4gICAgICA8L3RkPlxuICAgICk7XG4gIH1cblxuICBfZ2V0Q2hlY2tCb3hWYWx1ZShlKSB7XG4gICAgbGV0IHZhbHVlID0gJyc7XG4gICAgY29uc3QgdmFsdWVzID0gZS5jdXJyZW50VGFyZ2V0LnZhbHVlLnNwbGl0KCc6Jyk7XG4gICAgdmFsdWUgPSBlLmN1cnJlbnRUYXJnZXQuY2hlY2tlZCA/IHZhbHVlc1swXSA6IHZhbHVlc1sxXTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuVGFibGVFZGl0Q29sdW1uLnByb3BUeXBlcyA9IHtcbiAgY29tcGxldGVFZGl0OiBQcm9wVHlwZXMuZnVuYyxcbiAgcm93SW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gIGNvbEluZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuICBibHVyVG9TYXZlOiBQcm9wVHlwZXMuYm9vbCxcbiAgZWRpdGFibGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoWyBQcm9wVHlwZXMuYm9vbCwgUHJvcFR5cGVzLm9iamVjdCBdKSxcbiAgZm9ybWF0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFsgUHJvcFR5cGVzLmJvb2wsIFByb3BUeXBlcy5mdW5jIF0pLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGVcbn07XG5cblxuZXhwb3J0IGRlZmF1bHQgVGFibGVFZGl0Q29sdW1uO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvVGFibGVFZGl0Q29sdW1uLmpzXG4gKiovIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuY29uc3QgZWRpdG9yID0gZnVuY3Rpb24oZWRpdGFibGUsIGF0dHIsIGZvcm1hdCwgZWRpdG9yQ2xhc3MsIGRlZmF1bHRWYWx1ZSkge1xuICBpZiAoZWRpdGFibGUgPT09IHRydWUgfHwgdHlwZW9mIGVkaXRhYmxlID09PSAnc3RyaW5nJykgeyAvLyBzaW1wbGUgZGVjbGFyZVxuICAgIGNvbnN0IHR5cGUgPSBlZGl0YWJsZSA/ICd0ZXh0JyA6IGVkaXRhYmxlO1xuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXQgeyAuLi5hdHRyIH0gdHlwZT17IHR5cGUgfSBkZWZhdWx0VmFsdWU9eyBkZWZhdWx0VmFsdWUgfVxuICAgICAgICAgIGNsYXNzTmFtZT17ICggZWRpdG9yQ2xhc3MgfHwgJycpICsgJyBmb3JtLWNvbnRyb2wgZWRpdG9yIGVkaXQtdGV4dCcgfSAvPlxuICAgICk7XG4gIH0gZWxzZSBpZiAoIWVkaXRhYmxlKSB7XG4gICAgY29uc3QgdHlwZSA9IGVkaXRhYmxlID8gJ3RleHQnIDogZWRpdGFibGU7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPGlucHV0IHsgLi4uYXR0ciB9IHR5cGU9eyB0eXBlIH0gZGVmYXVsdFZhbHVlPXsgZGVmYXVsdFZhbHVlIH1cbiAgICAgICAgICBkaXNhYmxlZD0nZGlzYWJsZWQnXG4gICAgICAgICAgY2xhc3NOYW1lPXsgKCBlZGl0b3JDbGFzcyB8fCAnJykgKyAnIGZvcm0tY29udHJvbCBlZGl0b3IgZWRpdC10ZXh0JyB9IC8+XG4gICAgKTtcbiAgfSBlbHNlIGlmIChlZGl0YWJsZS50eXBlKSB7Ly8gc3RhbmRhcmQgZGVjbGFyZVxuICAgIC8vIHB1dCBzdHlsZSBpZiBleGlzdFxuICAgIGVkaXRhYmxlLnN0eWxlICYmIChhdHRyLnN0eWxlID0gZWRpdGFibGUuc3R5bGUpO1xuICAgIC8vIHB1dCBjbGFzcyBpZiBleGlzdFxuICAgIGF0dHIuY2xhc3NOYW1lID0gKGVkaXRvckNsYXNzIHx8ICcnKSArXG4gICAgICAgICAgICAgICAgICAgICAnIGZvcm0tY29udHJvbCBlZGl0b3IgZWRpdC0nICtcbiAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlLnR5cGUgK1xuICAgICAgICAgICAgICAgICAgICAgKGVkaXRhYmxlLmNsYXNzTmFtZSA/ICgnICcgKyBlZGl0YWJsZS5jbGFzc05hbWUpIDogJycpO1xuXG4gICAgaWYgKGVkaXRhYmxlLnR5cGUgPT09ICdzZWxlY3QnKSB7Ly8gcHJvY2VzcyBzZWxlY3QgaW5wdXRcbiAgICAgIGxldCBvcHRpb25zID0gW107XG4gICAgICBjb25zdCB2YWx1ZXMgPSBlZGl0YWJsZS5vcHRpb25zLnZhbHVlcztcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlcykpIHsvLyBvbmx5IGNhbiB1c2UgYXJycmF5IGRhdGEgZm9yIG9wdGlvbnNcbiAgICAgICAgbGV0IHJvd1ZhbHVlO1xuICAgICAgICBvcHRpb25zID0gdmFsdWVzLm1hcCgoZCwgaSkgPT4ge1xuICAgICAgICAgIHJvd1ZhbHVlID0gZm9ybWF0ID8gZm9ybWF0KGQpIDogZDtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPG9wdGlvbiBrZXk9eyAnb3B0aW9uJyArIGkgfSB2YWx1ZT17IGQgfT57IHJvd1ZhbHVlIH08L29wdGlvbj5cbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxzZWxlY3QgeyAuLi5hdHRyIH0gZGVmYXVsdFZhbHVlPXsgZGVmYXVsdFZhbHVlIH0+XG4gICAgICAgICAgeyBvcHRpb25zIH1cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoZWRpdGFibGUudHlwZSA9PT0gJ3RleHRhcmVhJykgey8vIHByb2Nlc3MgdGV4dGFyZWEgaW5wdXRcbiAgICAgIC8vIHB1dCBvdGhlciBpZiBleGlzdFxuICAgICAgZWRpdGFibGUuY29scyAmJiAoYXR0ci5jb2xzID0gZWRpdGFibGUuY29scyk7XG4gICAgICBlZGl0YWJsZS5yb3dzICYmIChhdHRyLnJvd3MgPSBlZGl0YWJsZS5yb3dzKTtcbiAgICAgIGxldCBzYXZlQnRuO1xuICAgICAgY29uc3Qga2V5VXBIYW5kbGVyID0gYXR0ci5vbktleURvd247XG4gICAgICBpZiAoa2V5VXBIYW5kbGVyKSB7XG4gICAgICAgIGF0dHIub25LZXlEb3duID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgIGlmIChlLmtleUNvZGUgIT09IDEzKSB7IC8vIG5vdCBQcmVzc2VkIEVOVEVSXG4gICAgICAgICAgICBrZXlVcEhhbmRsZXIoZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBzYXZlQnRuID0gKFxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzTmFtZT0nYnRuIGJ0bi1pbmZvIGJ0bi14cyB0ZXh0YXJlYS1zYXZlLWJ0bidcbiAgICAgICAgICAgIG9uQ2xpY2s9eyBrZXlVcEhhbmRsZXIgfT5cbiAgICAgICAgICAgIHNhdmVcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPHRleHRhcmVhIHsgLi4uYXR0ciB9IGRlZmF1bHRWYWx1ZT17IGRlZmF1bHRWYWx1ZSB9PjwvdGV4dGFyZWE+XG4gICAgICAgICAgeyBzYXZlQnRuIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoZWRpdGFibGUudHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgbGV0IHZhbHVlcyA9ICd0cnVlOmZhbHNlJztcbiAgICAgIGlmIChlZGl0YWJsZS5vcHRpb25zICYmIGVkaXRhYmxlLm9wdGlvbnMudmFsdWVzKSB7XG4gICAgICAgIC8vIHZhbHVlcyA9IGVkaXRhYmxlLm9wdGlvbnMudmFsdWVzLnNwbGl0KCc6Jyk7XG4gICAgICAgIHZhbHVlcyA9IGVkaXRhYmxlLm9wdGlvbnMudmFsdWVzO1xuICAgICAgfVxuICAgICAgYXR0ci5jbGFzc05hbWUgPSBhdHRyLmNsYXNzTmFtZS5yZXBsYWNlKCdmb3JtLWNvbnRyb2wnLCAnJyk7XG4gICAgICBhdHRyLmNsYXNzTmFtZSArPSAnIGNoZWNrYm94IHB1bGwtcmlnaHQnO1xuXG4gICAgICBjb25zdCBjaGVja2VkID0gZGVmYXVsdFZhbHVlICYmXG4gICAgICAgIGRlZmF1bHRWYWx1ZS50b1N0cmluZygpID09PSB2YWx1ZXMuc3BsaXQoJzonKVswXSA/IHRydWUgOiBmYWxzZTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGlucHV0IHsgLi4uYXR0ciB9IHR5cGU9J2NoZWNrYm94J1xuICAgICAgICAgIHZhbHVlPXsgdmFsdWVzIH0gZGVmYXVsdENoZWNrZWQ9eyBjaGVja2VkIH0vPlxuICAgICAgKTtcbiAgICB9IGVsc2Ugey8vIHByb2Nlc3Mgb3RoZXIgaW5wdXQgdHlwZS4gYXMgcGFzc3dvcmQsdXJsLGVtYWlsLi4uXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8aW5wdXQgeyAuLi5hdHRyIH0gdHlwZT0ndGV4dCcgZGVmYXVsdFZhbHVlPXsgZGVmYXVsdFZhbHVlIH0vPlxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgLy8gZGVmYXVsdCByZXR1cm4gZm9yIG90aGVyIGNhc2Ugb2YgZWRpdGFibGVcbiAgcmV0dXJuIChcbiAgICA8aW5wdXQgey4uLmF0dHJ9IHR5cGU9J3RleHQnXG4gICAgICBjbGFzc05hbWU9eyAoZWRpdG9yQ2xhc3MgfHwgJycpICsgJyBmb3JtLWNvbnRyb2wgZWRpdG9yIGVkaXQtdGV4dCcgfS8+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBlZGl0b3I7XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9FZGl0b3IuanNcbiAqKi8iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgeyBUb2FzdENvbnRhaW5lciwgVG9hc3RNZXNzYWdlIH0gZnJvbSAncmVhY3QtdG9hc3RyJztcblxuXG5jb25zdCBUb2FzdHJNZXNzYWdlRmFjdG9yeSA9IFJlYWN0LmNyZWF0ZUZhY3RvcnkoVG9hc3RNZXNzYWdlLmFuaW1hdGlvbik7XG5cbmNsYXNzIE5vdGlmaWNhdGlvbiBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8vIGFsbG93IHR5cGUgaXMgc3VjY2VzcyxpbmZvLHdhcm5pbmcsZXJyb3JcbiAgbm90aWNlKHR5cGUsIG1zZywgdGl0bGUpIHtcbiAgICB0aGlzLnJlZnMudG9hc3RyW3R5cGVdKFxuICAgICAgbXNnLCB0aXRsZSwge1xuICAgICAgICBtb2RlOiAnc2luZ2xlJyxcbiAgICAgICAgdGltZU91dDogNTAwMCxcbiAgICAgICAgZXh0ZW5kZWRUaW1lT3V0OiAxMDAwLFxuICAgICAgICBzaG93QW5pbWF0aW9uOiAnYW5pbWF0ZWQgIGJvdW5jZUluJyxcbiAgICAgICAgaGlkZUFuaW1hdGlvbjogJ2FuaW1hdGVkIGJvdW5jZU91dCdcbiAgICAgIH0pO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8VG9hc3RDb250YWluZXIgcmVmPSd0b2FzdHInXG4gICAgICAgIHRvYXN0TWVzc2FnZUZhY3Rvcnk9eyBUb2FzdHJNZXNzYWdlRmFjdG9yeSB9XG4gICAgICAgIGlkPSd0b2FzdC1jb250YWluZXInXG4gICAgICAgIGNsYXNzTmFtZT0ndG9hc3QtdG9wLXJpZ2h0Jy8+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBOb3RpZmljYXRpb247XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9Ob3RpZmljYXRpb24uanNcbiAqKi8iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuVG9hc3RNZXNzYWdlID0gZXhwb3J0cy5Ub2FzdENvbnRhaW5lciA9IHVuZGVmaW5lZDtcblxudmFyIF9Ub2FzdENvbnRhaW5lciA9IHJlcXVpcmUoXCIuL1RvYXN0Q29udGFpbmVyXCIpO1xuXG52YXIgX1RvYXN0Q29udGFpbmVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX1RvYXN0Q29udGFpbmVyKTtcblxudmFyIF9Ub2FzdE1lc3NhZ2UgPSByZXF1aXJlKFwiLi9Ub2FzdE1lc3NhZ2VcIik7XG5cbnZhciBfVG9hc3RNZXNzYWdlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX1RvYXN0TWVzc2FnZSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuVG9hc3RDb250YWluZXIgPSBfVG9hc3RDb250YWluZXIyLmRlZmF1bHQ7XG5leHBvcnRzLlRvYXN0TWVzc2FnZSA9IF9Ub2FzdE1lc3NhZ2UyLmRlZmF1bHQ7XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34vcmVhY3QtdG9hc3RyL2xpYi9pbmRleC5qc1xuICoqIG1vZHVsZSBpZCA9IDE0XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcblxudmFyIF9yZWFjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdCk7XG5cbnZhciBfcmVhY3RBZGRvbnNVcGRhdGUgPSByZXF1aXJlKFwicmVhY3QtYWRkb25zLXVwZGF0ZVwiKTtcblxudmFyIF9yZWFjdEFkZG9uc1VwZGF0ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdEFkZG9uc1VwZGF0ZSk7XG5cbnZhciBfVG9hc3RNZXNzYWdlID0gcmVxdWlyZShcIi4vVG9hc3RNZXNzYWdlXCIpO1xuXG52YXIgX1RvYXN0TWVzc2FnZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9Ub2FzdE1lc3NhZ2UpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbnZhciBUb2FzdENvbnRhaW5lciA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhUb2FzdENvbnRhaW5lciwgX0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gVG9hc3RDb250YWluZXIoKSB7XG4gICAgdmFyIF9PYmplY3QkZ2V0UHJvdG90eXBlTztcblxuICAgIHZhciBfdGVtcCwgX3RoaXMsIF9yZXQ7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVG9hc3RDb250YWluZXIpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIF9yZXQgPSAoX3RlbXAgPSAoX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoX09iamVjdCRnZXRQcm90b3R5cGVPID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKFRvYXN0Q29udGFpbmVyKSkuY2FsbC5hcHBseShfT2JqZWN0JGdldFByb3RvdHlwZU8sIFt0aGlzXS5jb25jYXQoYXJncykpKSwgX3RoaXMpLCBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHRvYXN0czogW10sXG4gICAgICB0b2FzdElkOiAwLFxuICAgICAgcHJldmlvdXNNZXNzYWdlOiBudWxsXG4gICAgfSwgX3RlbXApLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihfdGhpcywgX3JldCk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoVG9hc3RDb250YWluZXIsIFt7XG4gICAga2V5OiBcImVycm9yXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGVycm9yKG1lc3NhZ2UsIHRpdGxlLCBvcHRpb25zT3ZlcnJpZGUpIHtcbiAgICAgIHRoaXMuX25vdGlmeSh0aGlzLnByb3BzLnRvYXN0VHlwZS5lcnJvciwgbWVzc2FnZSwgdGl0bGUsIG9wdGlvbnNPdmVycmlkZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImluZm9cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW5mbyhtZXNzYWdlLCB0aXRsZSwgb3B0aW9uc092ZXJyaWRlKSB7XG4gICAgICB0aGlzLl9ub3RpZnkodGhpcy5wcm9wcy50b2FzdFR5cGUuaW5mbywgbWVzc2FnZSwgdGl0bGUsIG9wdGlvbnNPdmVycmlkZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInN1Y2Nlc3NcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc3VjY2VzcyhtZXNzYWdlLCB0aXRsZSwgb3B0aW9uc092ZXJyaWRlKSB7XG4gICAgICB0aGlzLl9ub3RpZnkodGhpcy5wcm9wcy50b2FzdFR5cGUuc3VjY2VzcywgbWVzc2FnZSwgdGl0bGUsIG9wdGlvbnNPdmVycmlkZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIndhcm5pbmdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gd2FybmluZyhtZXNzYWdlLCB0aXRsZSwgb3B0aW9uc092ZXJyaWRlKSB7XG4gICAgICB0aGlzLl9ub3RpZnkodGhpcy5wcm9wcy50b2FzdFR5cGUud2FybmluZywgbWVzc2FnZSwgdGl0bGUsIG9wdGlvbnNPdmVycmlkZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNsZWFyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIE9iamVjdC5rZXlzKHRoaXMucmVmcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIF90aGlzMi5yZWZzW2tleV0uaGlkZVRvYXN0KGZhbHNlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHJldHVybiBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAgX2V4dGVuZHMoe30sIHRoaXMucHJvcHMsIHsgXCJhcmlhLWxpdmVcIjogXCJwb2xpdGVcIiwgcm9sZTogXCJhbGVydFwiIH0pLFxuICAgICAgICB0aGlzLnN0YXRlLnRvYXN0cy5tYXAoZnVuY3Rpb24gKHRvYXN0KSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzMy5wcm9wcy50b2FzdE1lc3NhZ2VGYWN0b3J5KHRvYXN0KTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9ub3RpZnlcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX25vdGlmeSh0eXBlLCBtZXNzYWdlLCB0aXRsZSkge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgIHZhciBvcHRpb25zT3ZlcnJpZGUgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDMgfHwgYXJndW1lbnRzWzNdID09PSB1bmRlZmluZWQgPyB7fSA6IGFyZ3VtZW50c1szXTtcblxuICAgICAgaWYgKHRoaXMucHJvcHMucHJldmVudER1cGxpY2F0ZXMpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUucHJldmlvdXNNZXNzYWdlID09PSBtZXNzYWdlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIga2V5ID0gdGhpcy5zdGF0ZS50b2FzdElkKys7XG4gICAgICB2YXIgdG9hc3RJZCA9IGtleTtcbiAgICAgIHZhciBuZXdUb2FzdCA9ICgwLCBfcmVhY3RBZGRvbnNVcGRhdGUyLmRlZmF1bHQpKG9wdGlvbnNPdmVycmlkZSwge1xuICAgICAgICAkbWVyZ2U6IHtcbiAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICAgIHRvYXN0SWQ6IHRvYXN0SWQsXG4gICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgcmVmOiBcInRvYXN0c19fXCIgKyBrZXksXG4gICAgICAgICAgaGFuZGxlT25DbGljazogZnVuY3Rpb24gaGFuZGxlT25DbGljayhlKSB7XG4gICAgICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2Ygb3B0aW9uc092ZXJyaWRlLmhhbmRsZU9uQ2xpY2spIHtcbiAgICAgICAgICAgICAgb3B0aW9uc092ZXJyaWRlLmhhbmRsZU9uQ2xpY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfdGhpczQuX2hhbmRsZV90b2FzdF9vbl9jbGljayhlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhhbmRsZVJlbW92ZTogdGhpcy5faGFuZGxlX3RvYXN0X3JlbW92ZS5iaW5kKHRoaXMpXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdmFyIHRvYXN0T3BlcmF0aW9uID0gX2RlZmluZVByb3BlcnR5KHt9LCBcIlwiICsgKHRoaXMucHJvcHMubmV3ZXN0T25Ub3AgPyBcIiR1bnNoaWZ0XCIgOiBcIiRwdXNoXCIpLCBbbmV3VG9hc3RdKTtcblxuICAgICAgdmFyIG5leHRTdGF0ZSA9ICgwLCBfcmVhY3RBZGRvbnNVcGRhdGUyLmRlZmF1bHQpKHRoaXMuc3RhdGUsIHtcbiAgICAgICAgdG9hc3RzOiB0b2FzdE9wZXJhdGlvbixcbiAgICAgICAgcHJldmlvdXNNZXNzYWdlOiB7ICRzZXQ6IG1lc3NhZ2UgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLnNldFN0YXRlKG5leHRTdGF0ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9oYW5kbGVfdG9hc3Rfb25fY2xpY2tcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2hhbmRsZV90b2FzdF9vbl9jbGljayhldmVudCkge1xuICAgICAgdGhpcy5wcm9wcy5vbkNsaWNrKGV2ZW50KTtcbiAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX2hhbmRsZV90b2FzdF9yZW1vdmVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2hhbmRsZV90b2FzdF9yZW1vdmUodG9hc3RJZCkge1xuICAgICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICAgIHZhciBvcGVyYXRpb25OYW1lID0gXCJcIiArICh0aGlzLnByb3BzLm5ld2VzdE9uVG9wID8gXCJyZWR1Y2VSaWdodFwiIDogXCJyZWR1Y2VcIik7XG4gICAgICB0aGlzLnN0YXRlLnRvYXN0c1tvcGVyYXRpb25OYW1lXShmdW5jdGlvbiAoZm91bmQsIHRvYXN0LCBpbmRleCkge1xuICAgICAgICBpZiAoZm91bmQgfHwgdG9hc3QudG9hc3RJZCAhPT0gdG9hc3RJZCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBfdGhpczUuc2V0U3RhdGUoKDAsIF9yZWFjdEFkZG9uc1VwZGF0ZTIuZGVmYXVsdCkoX3RoaXM1LnN0YXRlLCB7XG4gICAgICAgICAgdG9hc3RzOiB7ICRzcGxpY2U6IFtbaW5kZXgsIDFdXSB9XG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9LCBmYWxzZSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFRvYXN0Q29udGFpbmVyO1xufShfcmVhY3QuQ29tcG9uZW50KTtcblxuVG9hc3RDb250YWluZXIuZGVmYXVsdFByb3BzID0ge1xuICB0b2FzdFR5cGU6IHtcbiAgICBlcnJvcjogXCJlcnJvclwiLFxuICAgIGluZm86IFwiaW5mb1wiLFxuICAgIHN1Y2Nlc3M6IFwic3VjY2Vzc1wiLFxuICAgIHdhcm5pbmc6IFwid2FybmluZ1wiXG4gIH0sXG4gIGlkOiBcInRvYXN0LWNvbnRhaW5lclwiLFxuICB0b2FzdE1lc3NhZ2VGYWN0b3J5OiBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRmFjdG9yeShfVG9hc3RNZXNzYWdlMi5kZWZhdWx0KSxcbiAgcHJldmVudER1cGxpY2F0ZXM6IGZhbHNlLFxuICBuZXdlc3RPblRvcDogdHJ1ZSxcbiAgb25DbGljazogZnVuY3Rpb24gb25DbGljaygpIHt9XG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gVG9hc3RDb250YWluZXI7XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34vcmVhY3QtdG9hc3RyL2xpYi9Ub2FzdENvbnRhaW5lci5qc1xuICoqIG1vZHVsZSBpZCA9IDE1XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ3JlYWN0L2xpYi91cGRhdGUnKTtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vfi9yZWFjdC10b2FzdHIvfi9yZWFjdC1hZGRvbnMtdXBkYXRlL2luZGV4LmpzXG4gKiogbW9kdWxlIGlkID0gMTZcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSB1cGRhdGVcbiAqL1xuXG4vKiBnbG9iYWwgaGFzT3duUHJvcGVydHk6dHJ1ZSAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuL09iamVjdC5hc3NpZ24nKTtcbnZhciBrZXlPZiA9IHJlcXVpcmUoJ2ZianMvbGliL2tleU9mJyk7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG52YXIgaGFzT3duUHJvcGVydHkgPSAoe30pLmhhc093blByb3BlcnR5O1xuXG5mdW5jdGlvbiBzaGFsbG93Q29weSh4KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgcmV0dXJuIHguY29uY2F0KCk7XG4gIH0gZWxzZSBpZiAoeCAmJiB0eXBlb2YgeCA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gYXNzaWduKG5ldyB4LmNvbnN0cnVjdG9yKCksIHgpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB4O1xuICB9XG59XG5cbnZhciBDT01NQU5EX1BVU0ggPSBrZXlPZih7ICRwdXNoOiBudWxsIH0pO1xudmFyIENPTU1BTkRfVU5TSElGVCA9IGtleU9mKHsgJHVuc2hpZnQ6IG51bGwgfSk7XG52YXIgQ09NTUFORF9TUExJQ0UgPSBrZXlPZih7ICRzcGxpY2U6IG51bGwgfSk7XG52YXIgQ09NTUFORF9TRVQgPSBrZXlPZih7ICRzZXQ6IG51bGwgfSk7XG52YXIgQ09NTUFORF9NRVJHRSA9IGtleU9mKHsgJG1lcmdlOiBudWxsIH0pO1xudmFyIENPTU1BTkRfQVBQTFkgPSBrZXlPZih7ICRhcHBseTogbnVsbCB9KTtcblxudmFyIEFMTF9DT01NQU5EU19MSVNUID0gW0NPTU1BTkRfUFVTSCwgQ09NTUFORF9VTlNISUZULCBDT01NQU5EX1NQTElDRSwgQ09NTUFORF9TRVQsIENPTU1BTkRfTUVSR0UsIENPTU1BTkRfQVBQTFldO1xuXG52YXIgQUxMX0NPTU1BTkRTX1NFVCA9IHt9O1xuXG5BTExfQ09NTUFORFNfTElTVC5mb3JFYWNoKGZ1bmN0aW9uIChjb21tYW5kKSB7XG4gIEFMTF9DT01NQU5EU19TRVRbY29tbWFuZF0gPSB0cnVlO1xufSk7XG5cbmZ1bmN0aW9uIGludmFyaWFudEFycmF5Q2FzZSh2YWx1ZSwgc3BlYywgY29tbWFuZCkge1xuICAhQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAndXBkYXRlKCk6IGV4cGVjdGVkIHRhcmdldCBvZiAlcyB0byBiZSBhbiBhcnJheTsgZ290ICVzLicsIGNvbW1hbmQsIHZhbHVlKSA6IGludmFyaWFudChmYWxzZSkgOiB1bmRlZmluZWQ7XG4gIHZhciBzcGVjVmFsdWUgPSBzcGVjW2NvbW1hbmRdO1xuICAhQXJyYXkuaXNBcnJheShzcGVjVmFsdWUpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ3VwZGF0ZSgpOiBleHBlY3RlZCBzcGVjIG9mICVzIHRvIGJlIGFuIGFycmF5OyBnb3QgJXMuICcgKyAnRGlkIHlvdSBmb3JnZXQgdG8gd3JhcCB5b3VyIHBhcmFtZXRlciBpbiBhbiBhcnJheT8nLCBjb21tYW5kLCBzcGVjVmFsdWUpIDogaW52YXJpYW50KGZhbHNlKSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlKHZhbHVlLCBzcGVjKSB7XG4gICEodHlwZW9mIHNwZWMgPT09ICdvYmplY3QnKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICd1cGRhdGUoKTogWW91IHByb3ZpZGVkIGEga2V5IHBhdGggdG8gdXBkYXRlKCkgdGhhdCBkaWQgbm90IGNvbnRhaW4gb25lICcgKyAnb2YgJXMuIERpZCB5b3UgZm9yZ2V0IHRvIGluY2x1ZGUgeyVzOiAuLi59PycsIEFMTF9DT01NQU5EU19MSVNULmpvaW4oJywgJyksIENPTU1BTkRfU0VUKSA6IGludmFyaWFudChmYWxzZSkgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc3BlYywgQ09NTUFORF9TRVQpKSB7XG4gICAgIShPYmplY3Qua2V5cyhzcGVjKS5sZW5ndGggPT09IDEpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ0Nhbm5vdCBoYXZlIG1vcmUgdGhhbiBvbmUga2V5IGluIGFuIG9iamVjdCB3aXRoICVzJywgQ09NTUFORF9TRVQpIDogaW52YXJpYW50KGZhbHNlKSA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiBzcGVjW0NPTU1BTkRfU0VUXTtcbiAgfVxuXG4gIHZhciBuZXh0VmFsdWUgPSBzaGFsbG93Q29weSh2YWx1ZSk7XG5cbiAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc3BlYywgQ09NTUFORF9NRVJHRSkpIHtcbiAgICB2YXIgbWVyZ2VPYmogPSBzcGVjW0NPTU1BTkRfTUVSR0VdO1xuICAgICEobWVyZ2VPYmogJiYgdHlwZW9mIG1lcmdlT2JqID09PSAnb2JqZWN0JykgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAndXBkYXRlKCk6ICVzIGV4cGVjdHMgYSBzcGVjIG9mIHR5cGUgXFwnb2JqZWN0XFwnOyBnb3QgJXMnLCBDT01NQU5EX01FUkdFLCBtZXJnZU9iaikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdW5kZWZpbmVkO1xuICAgICEobmV4dFZhbHVlICYmIHR5cGVvZiBuZXh0VmFsdWUgPT09ICdvYmplY3QnKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICd1cGRhdGUoKTogJXMgZXhwZWN0cyBhIHRhcmdldCBvZiB0eXBlIFxcJ29iamVjdFxcJzsgZ290ICVzJywgQ09NTUFORF9NRVJHRSwgbmV4dFZhbHVlKSA6IGludmFyaWFudChmYWxzZSkgOiB1bmRlZmluZWQ7XG4gICAgYXNzaWduKG5leHRWYWx1ZSwgc3BlY1tDT01NQU5EX01FUkdFXSk7XG4gIH1cblxuICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChzcGVjLCBDT01NQU5EX1BVU0gpKSB7XG4gICAgaW52YXJpYW50QXJyYXlDYXNlKHZhbHVlLCBzcGVjLCBDT01NQU5EX1BVU0gpO1xuICAgIHNwZWNbQ09NTUFORF9QVVNIXS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICBuZXh0VmFsdWUucHVzaChpdGVtKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHNwZWMsIENPTU1BTkRfVU5TSElGVCkpIHtcbiAgICBpbnZhcmlhbnRBcnJheUNhc2UodmFsdWUsIHNwZWMsIENPTU1BTkRfVU5TSElGVCk7XG4gICAgc3BlY1tDT01NQU5EX1VOU0hJRlRdLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIG5leHRWYWx1ZS51bnNoaWZ0KGl0ZW0pO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc3BlYywgQ09NTUFORF9TUExJQ0UpKSB7XG4gICAgIUFycmF5LmlzQXJyYXkodmFsdWUpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ0V4cGVjdGVkICVzIHRhcmdldCB0byBiZSBhbiBhcnJheTsgZ290ICVzJywgQ09NTUFORF9TUExJQ0UsIHZhbHVlKSA6IGludmFyaWFudChmYWxzZSkgOiB1bmRlZmluZWQ7XG4gICAgIUFycmF5LmlzQXJyYXkoc3BlY1tDT01NQU5EX1NQTElDRV0pID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ3VwZGF0ZSgpOiBleHBlY3RlZCBzcGVjIG9mICVzIHRvIGJlIGFuIGFycmF5IG9mIGFycmF5czsgZ290ICVzLiAnICsgJ0RpZCB5b3UgZm9yZ2V0IHRvIHdyYXAgeW91ciBwYXJhbWV0ZXJzIGluIGFuIGFycmF5PycsIENPTU1BTkRfU1BMSUNFLCBzcGVjW0NPTU1BTkRfU1BMSUNFXSkgOiBpbnZhcmlhbnQoZmFsc2UpIDogdW5kZWZpbmVkO1xuICAgIHNwZWNbQ09NTUFORF9TUExJQ0VdLmZvckVhY2goZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICFBcnJheS5pc0FycmF5KGFyZ3MpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ3VwZGF0ZSgpOiBleHBlY3RlZCBzcGVjIG9mICVzIHRvIGJlIGFuIGFycmF5IG9mIGFycmF5czsgZ290ICVzLiAnICsgJ0RpZCB5b3UgZm9yZ2V0IHRvIHdyYXAgeW91ciBwYXJhbWV0ZXJzIGluIGFuIGFycmF5PycsIENPTU1BTkRfU1BMSUNFLCBzcGVjW0NPTU1BTkRfU1BMSUNFXSkgOiBpbnZhcmlhbnQoZmFsc2UpIDogdW5kZWZpbmVkO1xuICAgICAgbmV4dFZhbHVlLnNwbGljZS5hcHBseShuZXh0VmFsdWUsIGFyZ3MpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc3BlYywgQ09NTUFORF9BUFBMWSkpIHtcbiAgICAhKHR5cGVvZiBzcGVjW0NPTU1BTkRfQVBQTFldID09PSAnZnVuY3Rpb24nKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICd1cGRhdGUoKTogZXhwZWN0ZWQgc3BlYyBvZiAlcyB0byBiZSBhIGZ1bmN0aW9uOyBnb3QgJXMuJywgQ09NTUFORF9BUFBMWSwgc3BlY1tDT01NQU5EX0FQUExZXSkgOiBpbnZhcmlhbnQoZmFsc2UpIDogdW5kZWZpbmVkO1xuICAgIG5leHRWYWx1ZSA9IHNwZWNbQ09NTUFORF9BUFBMWV0obmV4dFZhbHVlKTtcbiAgfVxuXG4gIGZvciAodmFyIGsgaW4gc3BlYykge1xuICAgIGlmICghKEFMTF9DT01NQU5EU19TRVQuaGFzT3duUHJvcGVydHkoaykgJiYgQUxMX0NPTU1BTkRTX1NFVFtrXSkpIHtcbiAgICAgIG5leHRWYWx1ZVtrXSA9IHVwZGF0ZSh2YWx1ZVtrXSwgc3BlY1trXSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5leHRWYWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1cGRhdGU7XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34vcmVhY3QvbGliL3VwZGF0ZS5qc1xuICoqIG1vZHVsZSBpZCA9IDE3XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgc2V0VGltZW91dChkcmFpblF1ZXVlLCAwKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcblxuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogKHdlYnBhY2spL34vbm9kZS1saWJzLWJyb3dzZXIvfi9wcm9jZXNzL2Jyb3dzZXIuanNcbiAqKiBtb2R1bGUgaWQgPSAxOFxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIE9iamVjdC5hc3NpZ25cbiAqL1xuXG4vLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtb2JqZWN0LmFzc2lnblxuXG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZXMpIHtcbiAgaWYgKHRhcmdldCA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiB0YXJnZXQgY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkJyk7XG4gIH1cblxuICB2YXIgdG8gPSBPYmplY3QodGFyZ2V0KTtcbiAgdmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuICBmb3IgKHZhciBuZXh0SW5kZXggPSAxOyBuZXh0SW5kZXggPCBhcmd1bWVudHMubGVuZ3RoOyBuZXh0SW5kZXgrKykge1xuICAgIHZhciBuZXh0U291cmNlID0gYXJndW1lbnRzW25leHRJbmRleF07XG4gICAgaWYgKG5leHRTb3VyY2UgPT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIGZyb20gPSBPYmplY3QobmV4dFNvdXJjZSk7XG5cbiAgICAvLyBXZSBkb24ndCBjdXJyZW50bHkgc3VwcG9ydCBhY2Nlc3NvcnMgbm9yIHByb3hpZXMuIFRoZXJlZm9yZSB0aGlzXG4gICAgLy8gY29weSBjYW5ub3QgdGhyb3cuIElmIHdlIGV2ZXIgc3VwcG9ydGVkIHRoaXMgdGhlbiB3ZSBtdXN0IGhhbmRsZVxuICAgIC8vIGV4Y2VwdGlvbnMgYW5kIHNpZGUtZWZmZWN0cy4gV2UgZG9uJ3Qgc3VwcG9ydCBzeW1ib2xzIHNvIHRoZXkgd29uJ3RcbiAgICAvLyBiZSB0cmFuc2ZlcnJlZC5cblxuICAgIGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XG4gICAgICAgIHRvW2tleV0gPSBmcm9tW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2lnbjtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vfi9yZWFjdC9saWIvT2JqZWN0LmFzc2lnbi5qc1xuICoqIG1vZHVsZSBpZCA9IDE5XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUga2V5T2ZcbiAqL1xuXG4vKipcbiAqIEFsbG93cyBleHRyYWN0aW9uIG9mIGEgbWluaWZpZWQga2V5LiBMZXQncyB0aGUgYnVpbGQgc3lzdGVtIG1pbmlmeSBrZXlzXG4gKiB3aXRob3V0IGxvc2luZyB0aGUgYWJpbGl0eSB0byBkeW5hbWljYWxseSB1c2Uga2V5IHN0cmluZ3MgYXMgdmFsdWVzXG4gKiB0aGVtc2VsdmVzLiBQYXNzIGluIGFuIG9iamVjdCB3aXRoIGEgc2luZ2xlIGtleS92YWwgcGFpciBhbmQgaXQgd2lsbCByZXR1cm5cbiAqIHlvdSB0aGUgc3RyaW5nIGtleSBvZiB0aGF0IHNpbmdsZSByZWNvcmQuIFN1cHBvc2UgeW91IHdhbnQgdG8gZ3JhYiB0aGVcbiAqIHZhbHVlIGZvciBhIGtleSAnY2xhc3NOYW1lJyBpbnNpZGUgb2YgYW4gb2JqZWN0LiBLZXkvdmFsIG1pbmlmaWNhdGlvbiBtYXlcbiAqIGhhdmUgYWxpYXNlZCB0aGF0IGtleSB0byBiZSAneGExMicuIGtleU9mKHtjbGFzc05hbWU6IG51bGx9KSB3aWxsIHJldHVyblxuICogJ3hhMTInIGluIHRoYXQgY2FzZS4gUmVzb2x2ZSBrZXlzIHlvdSB3YW50IHRvIHVzZSBvbmNlIGF0IHN0YXJ0dXAgdGltZSwgdGhlblxuICogcmV1c2UgdGhvc2UgcmVzb2x1dGlvbnMuXG4gKi9cblwidXNlIHN0cmljdFwiO1xuXG52YXIga2V5T2YgPSBmdW5jdGlvbiAob25lS2V5T2JqKSB7XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIG9uZUtleU9iaikge1xuICAgIGlmICghb25lS2V5T2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBrZXlPZjtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vfi9yZWFjdC9+L2ZianMvbGliL2tleU9mLmpzXG4gKiogbW9kdWxlIGlkID0gMjBcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBpbnZhcmlhbnRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVXNlIGludmFyaWFudCgpIHRvIGFzc2VydCBzdGF0ZSB3aGljaCB5b3VyIHByb2dyYW0gYXNzdW1lcyB0byBiZSB0cnVlLlxuICpcbiAqIFByb3ZpZGUgc3ByaW50Zi1zdHlsZSBmb3JtYXQgKG9ubHkgJXMgaXMgc3VwcG9ydGVkKSBhbmQgYXJndW1lbnRzXG4gKiB0byBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgYnJva2UgYW5kIHdoYXQgeW91IHdlcmVcbiAqIGV4cGVjdGluZy5cbiAqXG4gKiBUaGUgaW52YXJpYW50IG1lc3NhZ2Ugd2lsbCBiZSBzdHJpcHBlZCBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGludmFyaWFudFxuICogd2lsbCByZW1haW4gdG8gZW5zdXJlIGxvZ2ljIGRvZXMgbm90IGRpZmZlciBpbiBwcm9kdWN0aW9uLlxuICovXG5cbmZ1bmN0aW9uIGludmFyaWFudChjb25kaXRpb24sIGZvcm1hdCwgYSwgYiwgYywgZCwgZSwgZikge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhcmlhbnQgcmVxdWlyZXMgYW4gZXJyb3IgbWVzc2FnZSBhcmd1bWVudCcpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29uZGl0aW9uKSB7XG4gICAgdmFyIGVycm9yO1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoJ01pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50ICcgKyAnZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGFyZ3MgPSBbYSwgYiwgYywgZCwgZSwgZl07XG4gICAgICB2YXIgYXJnSW5kZXggPSAwO1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107XG4gICAgICB9KSk7XG4gICAgICBlcnJvci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgIH1cblxuICAgIGVycm9yLmZyYW1lc1RvUG9wID0gMTsgLy8gd2UgZG9uJ3QgY2FyZSBhYm91dCBpbnZhcmlhbnQncyBvd24gZnJhbWVcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGludmFyaWFudDtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vfi9yZWFjdC9+L2ZianMvbGliL2ludmFyaWFudC5qc1xuICoqIG1vZHVsZSBpZCA9IDIxXG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMualF1ZXJ5ID0gZXhwb3J0cy5hbmltYXRpb24gPSB1bmRlZmluZWQ7XG5cbnZhciBfcmVhY3QgPSByZXF1aXJlKFwicmVhY3RcIik7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX3JlYWN0QWRkb25zVXBkYXRlID0gcmVxdWlyZShcInJlYWN0LWFkZG9ucy11cGRhdGVcIik7XG5cbnZhciBfcmVhY3RBZGRvbnNVcGRhdGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3RBZGRvbnNVcGRhdGUpO1xuXG52YXIgX2NsYXNzbmFtZXMgPSByZXF1aXJlKFwiY2xhc3NuYW1lc1wiKTtcblxudmFyIF9jbGFzc25hbWVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NsYXNzbmFtZXMpO1xuXG52YXIgX2FuaW1hdGlvbk1peGluID0gcmVxdWlyZShcIi4vYW5pbWF0aW9uTWl4aW5cIik7XG5cbnZhciBfYW5pbWF0aW9uTWl4aW4yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYW5pbWF0aW9uTWl4aW4pO1xuXG52YXIgX2pRdWVyeU1peGluID0gcmVxdWlyZShcIi4valF1ZXJ5TWl4aW5cIik7XG5cbnZhciBfalF1ZXJ5TWl4aW4yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfalF1ZXJ5TWl4aW4pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBub29wKCkge31cblxudmFyIFRvYXN0TWVzc2FnZVNwZWMgPSB7XG4gIGRpc3BsYXlOYW1lOiBcIlRvYXN0TWVzc2FnZVwiLFxuXG4gIGdldERlZmF1bHRQcm9wczogZnVuY3Rpb24gZ2V0RGVmYXVsdFByb3BzKCkge1xuICAgIHZhciBpY29uQ2xhc3NOYW1lcyA9IHtcbiAgICAgIGVycm9yOiBcInRvYXN0LWVycm9yXCIsXG4gICAgICBpbmZvOiBcInRvYXN0LWluZm9cIixcbiAgICAgIHN1Y2Nlc3M6IFwidG9hc3Qtc3VjY2Vzc1wiLFxuICAgICAgd2FybmluZzogXCJ0b2FzdC13YXJuaW5nXCJcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNsYXNzTmFtZTogXCJ0b2FzdFwiLFxuICAgICAgaWNvbkNsYXNzTmFtZXM6IGljb25DbGFzc05hbWVzLFxuICAgICAgdGl0bGVDbGFzc05hbWU6IFwidG9hc3QtdGl0bGVcIixcbiAgICAgIG1lc3NhZ2VDbGFzc05hbWU6IFwidG9hc3QtbWVzc2FnZVwiLFxuICAgICAgdGFwVG9EaXNtaXNzOiB0cnVlLFxuICAgICAgY2xvc2VCdXR0b246IGZhbHNlXG4gICAgfTtcbiAgfSxcbiAgaGFuZGxlT25DbGljazogZnVuY3Rpb24gaGFuZGxlT25DbGljayhldmVudCkge1xuICAgIHRoaXMucHJvcHMuaGFuZGxlT25DbGljayhldmVudCk7XG4gICAgaWYgKHRoaXMucHJvcHMudGFwVG9EaXNtaXNzKSB7XG4gICAgICB0aGlzLmhpZGVUb2FzdCh0cnVlKTtcbiAgICB9XG4gIH0sXG4gIF9oYW5kbGVfY2xvc2VfYnV0dG9uX2NsaWNrOiBmdW5jdGlvbiBfaGFuZGxlX2Nsb3NlX2J1dHRvbl9jbGljayhldmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaGlkZVRvYXN0KHRydWUpO1xuICB9LFxuICBfaGFuZGxlX3JlbW92ZTogZnVuY3Rpb24gX2hhbmRsZV9yZW1vdmUoKSB7XG4gICAgdGhpcy5wcm9wcy5oYW5kbGVSZW1vdmUodGhpcy5wcm9wcy50b2FzdElkKTtcbiAgfSxcbiAgX3JlbmRlcl9jbG9zZV9idXR0b246IGZ1bmN0aW9uIF9yZW5kZXJfY2xvc2VfYnV0dG9uKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNsb3NlQnV0dG9uID8gX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwge1xuICAgICAgY2xhc3NOYW1lOiBcInRvYXN0LWNsb3NlLWJ1dHRvblwiLCByb2xlOiBcImJ1dHRvblwiLFxuICAgICAgb25DbGljazogdGhpcy5faGFuZGxlX2Nsb3NlX2J1dHRvbl9jbGljayxcbiAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOiB7IF9faHRtbDogXCImdGltZXM7XCIgfVxuICAgIH0pIDogZmFsc2U7XG4gIH0sXG4gIF9yZW5kZXJfdGl0bGVfZWxlbWVudDogZnVuY3Rpb24gX3JlbmRlcl90aXRsZV9lbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnRpdGxlID8gX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICBcImRpdlwiLFxuICAgICAgeyBjbGFzc05hbWU6IHRoaXMucHJvcHMudGl0bGVDbGFzc05hbWUgfSxcbiAgICAgIHRoaXMucHJvcHMudGl0bGVcbiAgICApIDogZmFsc2U7XG4gIH0sXG4gIF9yZW5kZXJfbWVzc2FnZV9lbGVtZW50OiBmdW5jdGlvbiBfcmVuZGVyX21lc3NhZ2VfZWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tZXNzYWdlID8gX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICBcImRpdlwiLFxuICAgICAgeyBjbGFzc05hbWU6IHRoaXMucHJvcHMubWVzc2FnZUNsYXNzTmFtZSB9LFxuICAgICAgdGhpcy5wcm9wcy5tZXNzYWdlXG4gICAgKSA6IGZhbHNlO1xuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgaWNvbkNsYXNzTmFtZSA9IHRoaXMucHJvcHMuaWNvbkNsYXNzTmFtZSB8fCB0aGlzLnByb3BzLmljb25DbGFzc05hbWVzW3RoaXMucHJvcHMudHlwZV07XG5cbiAgICByZXR1cm4gX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICBcImRpdlwiLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICgwLCBfY2xhc3NuYW1lczIuZGVmYXVsdCkodGhpcy5wcm9wcy5jbGFzc05hbWUsIGljb25DbGFzc05hbWUpLFxuICAgICAgICBzdHlsZTogdGhpcy5wcm9wcy5zdHlsZSxcbiAgICAgICAgb25DbGljazogdGhpcy5oYW5kbGVPbkNsaWNrLFxuICAgICAgICBvbk1vdXNlRW50ZXI6IHRoaXMuaGFuZGxlTW91c2VFbnRlcixcbiAgICAgICAgb25Nb3VzZUxlYXZlOiB0aGlzLmhhbmRsZU1vdXNlTGVhdmVcbiAgICAgIH0sXG4gICAgICB0aGlzLl9yZW5kZXJfY2xvc2VfYnV0dG9uKCksXG4gICAgICB0aGlzLl9yZW5kZXJfdGl0bGVfZWxlbWVudCgpLFxuICAgICAgdGhpcy5fcmVuZGVyX21lc3NhZ2VfZWxlbWVudCgpXG4gICAgKTtcbiAgfVxufTtcblxudmFyIGFuaW1hdGlvbiA9IGV4cG9ydHMuYW5pbWF0aW9uID0gX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUNsYXNzKCgwLCBfcmVhY3RBZGRvbnNVcGRhdGUyLmRlZmF1bHQpKFRvYXN0TWVzc2FnZVNwZWMsIHtcbiAgZGlzcGxheU5hbWU6IHsgJHNldDogXCJUb2FzdE1lc3NhZ2UuYW5pbWF0aW9uXCIgfSxcbiAgbWl4aW5zOiB7ICRzZXQ6IFtfYW5pbWF0aW9uTWl4aW4yLmRlZmF1bHRdIH1cbn0pKTtcblxudmFyIGpRdWVyeSA9IGV4cG9ydHMualF1ZXJ5ID0gX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUNsYXNzKCgwLCBfcmVhY3RBZGRvbnNVcGRhdGUyLmRlZmF1bHQpKFRvYXN0TWVzc2FnZVNwZWMsIHtcbiAgZGlzcGxheU5hbWU6IHsgJHNldDogXCJUb2FzdE1lc3NhZ2UualF1ZXJ5XCIgfSxcbiAgbWl4aW5zOiB7ICRzZXQ6IFtfalF1ZXJ5TWl4aW4yLmRlZmF1bHRdIH1cbn0pKTtcblxuLypcbiAqIGFzc2lnbiBkZWZhdWx0IG5vb3AgZnVuY3Rpb25zXG4gKi9cblRvYXN0TWVzc2FnZVNwZWMuaGFuZGxlTW91c2VFbnRlciA9IG5vb3A7XG5Ub2FzdE1lc3NhZ2VTcGVjLmhhbmRsZU1vdXNlTGVhdmUgPSBub29wO1xuVG9hc3RNZXNzYWdlU3BlYy5oaWRlVG9hc3QgPSBub29wO1xuXG52YXIgVG9hc3RNZXNzYWdlID0gX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUNsYXNzKFRvYXN0TWVzc2FnZVNwZWMpO1xuXG5Ub2FzdE1lc3NhZ2UuYW5pbWF0aW9uID0gYW5pbWF0aW9uO1xuVG9hc3RNZXNzYWdlLmpRdWVyeSA9IGpRdWVyeTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gVG9hc3RNZXNzYWdlO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L3JlYWN0LXRvYXN0ci9saWIvVG9hc3RNZXNzYWdlL2luZGV4LmpzXG4gKiogbW9kdWxlIGlkID0gMjJcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX0NTU0NvcmUgPSByZXF1aXJlKFwiZmJqcy9saWIvQ1NTQ29yZVwiKTtcblxudmFyIF9DU1NDb3JlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX0NTU0NvcmUpO1xuXG52YXIgX1JlYWN0VHJhbnNpdGlvbkV2ZW50cyA9IHJlcXVpcmUoXCJyZWFjdC9saWIvUmVhY3RUcmFuc2l0aW9uRXZlbnRzXCIpO1xuXG52YXIgX1JlYWN0VHJhbnNpdGlvbkV2ZW50czIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9SZWFjdFRyYW5zaXRpb25FdmVudHMpO1xuXG52YXIgX3JlYWN0RG9tID0gcmVxdWlyZShcInJlYWN0LWRvbVwiKTtcblxudmFyIF9yZWFjdERvbTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdERvbSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBUSUNLID0gMTc7XG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICBnZXREZWZhdWx0UHJvcHM6IGZ1bmN0aW9uIGdldERlZmF1bHRQcm9wcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHJhbnNpdGlvbjogbnVsbCwgLy8gc29tZSBleGFtcGxlcyBkZWZpbmVkIGluIGluZGV4LnNjc3MgKHNjYWxlLCBmYWRlSW5PdXQsIHJvdGF0ZSlcbiAgICAgIHNob3dBbmltYXRpb246IFwiYW5pbWF0ZWQgYm91bmNlSW5cIiwgLy8gb3Igb3RoZXIgYW5pbWF0aW9ucyBmcm9tIGFuaW1hdGUuY3NzXG4gICAgICBoaWRlQW5pbWF0aW9uOiBcImFuaW1hdGVkIGJvdW5jZU91dFwiLFxuICAgICAgdGltZU91dDogNTAwMCxcbiAgICAgIGV4dGVuZGVkVGltZU91dDogMTAwMFxuICAgIH07XG4gIH0sXG4gIGNvbXBvbmVudFdpbGxNb3VudDogZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkge1xuICAgIHRoaXMuY2xhc3NOYW1lUXVldWUgPSBbXTtcbiAgICB0aGlzLmlzSGlkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5pbnRlcnZhbElkID0gbnVsbDtcbiAgfSxcbiAgY29tcG9uZW50RGlkTW91bnQ6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLl9pc19tb3VudGVkID0gdHJ1ZTtcbiAgICB0aGlzLl9zaG93KCk7XG4gICAgdmFyIG5vZGUgPSBfcmVhY3REb20yLmRlZmF1bHQuZmluZERPTU5vZGUodGhpcyk7XG5cbiAgICB2YXIgb25IaWRlQ29tcGxldGUgPSBmdW5jdGlvbiBvbkhpZGVDb21wbGV0ZSgpIHtcbiAgICAgIGlmIChfdGhpcy5pc0hpZGluZykge1xuICAgICAgICBfdGhpcy5fc2V0X2lzX2hpZGluZyhmYWxzZSk7XG4gICAgICAgIF9SZWFjdFRyYW5zaXRpb25FdmVudHMyLmRlZmF1bHQucmVtb3ZlRW5kRXZlbnRMaXN0ZW5lcihub2RlLCBvbkhpZGVDb21wbGV0ZSk7XG4gICAgICAgIF90aGlzLl9oYW5kbGVfcmVtb3ZlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBfUmVhY3RUcmFuc2l0aW9uRXZlbnRzMi5kZWZhdWx0LmFkZEVuZEV2ZW50TGlzdGVuZXIobm9kZSwgb25IaWRlQ29tcGxldGUpO1xuXG4gICAgaWYgKHRoaXMucHJvcHMudGltZU91dCA+IDApIHtcbiAgICAgIHRoaXMuX3NldF9pbnRlcnZhbF9pZChzZXRUaW1lb3V0KHRoaXMuaGlkZVRvYXN0LCB0aGlzLnByb3BzLnRpbWVPdXQpKTtcbiAgICB9XG4gIH0sXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50OiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLl9pc19tb3VudGVkID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuaW50ZXJ2YWxJZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuaW50ZXJ2YWxJZCk7XG4gICAgfVxuICB9LFxuICBfc2V0X3RyYW5zaXRpb246IGZ1bmN0aW9uIF9zZXRfdHJhbnNpdGlvbihoaWRlKSB7XG4gICAgdmFyIGFuaW1hdGlvblR5cGUgPSBoaWRlID8gXCJsZWF2ZVwiIDogXCJlbnRlclwiO1xuICAgIHZhciBub2RlID0gX3JlYWN0RG9tMi5kZWZhdWx0LmZpbmRET01Ob2RlKHRoaXMpO1xuICAgIHZhciBjbGFzc05hbWUgPSB0aGlzLnByb3BzLnRyYW5zaXRpb24gKyBcIi1cIiArIGFuaW1hdGlvblR5cGU7XG4gICAgdmFyIGFjdGl2ZUNsYXNzTmFtZSA9IGNsYXNzTmFtZSArIFwiLWFjdGl2ZVwiO1xuXG4gICAgdmFyIGVuZExpc3RlbmVyID0gZnVuY3Rpb24gZW5kTGlzdGVuZXIoZSkge1xuICAgICAgaWYgKGUgJiYgZS50YXJnZXQgIT09IG5vZGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfQ1NTQ29yZTIuZGVmYXVsdC5yZW1vdmVDbGFzcyhub2RlLCBjbGFzc05hbWUpO1xuICAgICAgX0NTU0NvcmUyLmRlZmF1bHQucmVtb3ZlQ2xhc3Mobm9kZSwgYWN0aXZlQ2xhc3NOYW1lKTtcblxuICAgICAgX1JlYWN0VHJhbnNpdGlvbkV2ZW50czIuZGVmYXVsdC5yZW1vdmVFbmRFdmVudExpc3RlbmVyKG5vZGUsIGVuZExpc3RlbmVyKTtcbiAgICB9O1xuXG4gICAgX1JlYWN0VHJhbnNpdGlvbkV2ZW50czIuZGVmYXVsdC5hZGRFbmRFdmVudExpc3RlbmVyKG5vZGUsIGVuZExpc3RlbmVyKTtcblxuICAgIF9DU1NDb3JlMi5kZWZhdWx0LmFkZENsYXNzKG5vZGUsIGNsYXNzTmFtZSk7XG5cbiAgICAvLyBOZWVkIHRvIGRvIHRoaXMgdG8gYWN0dWFsbHkgdHJpZ2dlciBhIHRyYW5zaXRpb24uXG4gICAgdGhpcy5fcXVldWVfY2xhc3MoYWN0aXZlQ2xhc3NOYW1lKTtcbiAgfSxcbiAgX2NsZWFyX3RyYW5zaXRpb246IGZ1bmN0aW9uIF9jbGVhcl90cmFuc2l0aW9uKGhpZGUpIHtcbiAgICB2YXIgbm9kZSA9IF9yZWFjdERvbTIuZGVmYXVsdC5maW5kRE9NTm9kZSh0aGlzKTtcbiAgICB2YXIgYW5pbWF0aW9uVHlwZSA9IGhpZGUgPyBcImxlYXZlXCIgOiBcImVudGVyXCI7XG4gICAgdmFyIGNsYXNzTmFtZSA9IHRoaXMucHJvcHMudHJhbnNpdGlvbiArIFwiLVwiICsgYW5pbWF0aW9uVHlwZTtcbiAgICB2YXIgYWN0aXZlQ2xhc3NOYW1lID0gY2xhc3NOYW1lICsgXCItYWN0aXZlXCI7XG5cbiAgICBfQ1NTQ29yZTIuZGVmYXVsdC5yZW1vdmVDbGFzcyhub2RlLCBjbGFzc05hbWUpO1xuICAgIF9DU1NDb3JlMi5kZWZhdWx0LnJlbW92ZUNsYXNzKG5vZGUsIGFjdGl2ZUNsYXNzTmFtZSk7XG4gIH0sXG4gIF9zZXRfYW5pbWF0aW9uOiBmdW5jdGlvbiBfc2V0X2FuaW1hdGlvbihoaWRlKSB7XG4gICAgdmFyIG5vZGUgPSBfcmVhY3REb20yLmRlZmF1bHQuZmluZERPTU5vZGUodGhpcyk7XG4gICAgdmFyIGFuaW1hdGlvbnMgPSB0aGlzLl9nZXRfYW5pbWF0aW9uX2NsYXNzZXMoaGlkZSk7XG4gICAgdmFyIGVuZExpc3RlbmVyID0gZnVuY3Rpb24gZW5kTGlzdGVuZXIoZSkge1xuICAgICAgaWYgKGUgJiYgZS50YXJnZXQgIT09IG5vZGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBhbmltYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKGFuaW0pIHtcbiAgICAgICAgX0NTU0NvcmUyLmRlZmF1bHQucmVtb3ZlQ2xhc3Mobm9kZSwgYW5pbSk7XG4gICAgICB9KTtcblxuICAgICAgX1JlYWN0VHJhbnNpdGlvbkV2ZW50czIuZGVmYXVsdC5yZW1vdmVFbmRFdmVudExpc3RlbmVyKG5vZGUsIGVuZExpc3RlbmVyKTtcbiAgICB9O1xuXG4gICAgX1JlYWN0VHJhbnNpdGlvbkV2ZW50czIuZGVmYXVsdC5hZGRFbmRFdmVudExpc3RlbmVyKG5vZGUsIGVuZExpc3RlbmVyKTtcblxuICAgIGFuaW1hdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoYW5pbSkge1xuICAgICAgX0NTU0NvcmUyLmRlZmF1bHQuYWRkQ2xhc3Mobm9kZSwgYW5pbSk7XG4gICAgfSk7XG4gIH0sXG4gIF9nZXRfYW5pbWF0aW9uX2NsYXNzZXM6IGZ1bmN0aW9uIF9nZXRfYW5pbWF0aW9uX2NsYXNzZXMoaGlkZSkge1xuICAgIHZhciBhbmltYXRpb25zID0gaGlkZSA/IHRoaXMucHJvcHMuaGlkZUFuaW1hdGlvbiA6IHRoaXMucHJvcHMuc2hvd0FuaW1hdGlvbjtcbiAgICBpZiAoXCJbb2JqZWN0IEFycmF5XVwiID09PSB0b1N0cmluZy5jYWxsKGFuaW1hdGlvbnMpKSB7XG4gICAgICByZXR1cm4gYW5pbWF0aW9ucztcbiAgICB9IGVsc2UgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBhbmltYXRpb25zKSB7XG4gICAgICByZXR1cm4gYW5pbWF0aW9ucy5zcGxpdChcIiBcIik7XG4gICAgfVxuICB9LFxuICBfY2xlYXJfYW5pbWF0aW9uOiBmdW5jdGlvbiBfY2xlYXJfYW5pbWF0aW9uKGhpZGUpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHZhciBhbmltYXRpb25zID0gdGhpcy5fZ2V0X2FuaW1hdGlvbl9jbGFzc2VzKGhpZGUpO1xuICAgIGFuaW1hdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoYW5pbWF0aW9uKSB7XG4gICAgICBfQ1NTQ29yZTIuZGVmYXVsdC5yZW1vdmVDbGFzcyhfcmVhY3REb20yLmRlZmF1bHQuZmluZERPTU5vZGUoX3RoaXMyKSwgYW5pbWF0aW9uKTtcbiAgICB9KTtcbiAgfSxcbiAgX3F1ZXVlX2NsYXNzOiBmdW5jdGlvbiBfcXVldWVfY2xhc3MoY2xhc3NOYW1lKSB7XG4gICAgdGhpcy5jbGFzc05hbWVRdWV1ZS5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgICBpZiAoIXRoaXMudGltZW91dCkge1xuICAgICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dCh0aGlzLl9mbHVzaF9jbGFzc19uYW1lX3F1ZXVlLCBUSUNLKTtcbiAgICB9XG4gIH0sXG4gIF9mbHVzaF9jbGFzc19uYW1lX3F1ZXVlOiBmdW5jdGlvbiBfZmx1c2hfY2xhc3NfbmFtZV9xdWV1ZSgpIHtcbiAgICBpZiAodGhpcy5faXNfbW91bnRlZCkge1xuICAgICAgdGhpcy5jbGFzc05hbWVRdWV1ZS5mb3JFYWNoKF9DU1NDb3JlMi5kZWZhdWx0LmFkZENsYXNzLmJpbmQoX0NTU0NvcmUyLmRlZmF1bHQsIF9yZWFjdERvbTIuZGVmYXVsdC5maW5kRE9NTm9kZSh0aGlzKSkpO1xuICAgIH1cbiAgICB0aGlzLmNsYXNzTmFtZVF1ZXVlLmxlbmd0aCA9IDA7XG4gICAgdGhpcy50aW1lb3V0ID0gbnVsbDtcbiAgfSxcbiAgX3Nob3c6IGZ1bmN0aW9uIF9zaG93KCkge1xuICAgIGlmICh0aGlzLnByb3BzLnRyYW5zaXRpb24pIHtcbiAgICAgIHRoaXMuX3NldF90cmFuc2l0aW9uKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnNob3dBbmltYXRpb24pIHtcbiAgICAgIHRoaXMuX3NldF9hbmltYXRpb24oKTtcbiAgICB9XG4gIH0sXG4gIGhhbmRsZU1vdXNlRW50ZXI6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlRW50ZXIoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuaW50ZXJ2YWxJZCk7XG4gICAgdGhpcy5fc2V0X2ludGVydmFsX2lkKG51bGwpO1xuICAgIGlmICh0aGlzLmlzSGlkaW5nKSB7XG4gICAgICB0aGlzLl9zZXRfaXNfaGlkaW5nKGZhbHNlKTtcblxuICAgICAgaWYgKHRoaXMucHJvcHMuaGlkZUFuaW1hdGlvbikge1xuICAgICAgICB0aGlzLl9jbGVhcl9hbmltYXRpb24odHJ1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMudHJhbnNpdGlvbikge1xuICAgICAgICB0aGlzLl9jbGVhcl90cmFuc2l0aW9uKHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgaGFuZGxlTW91c2VMZWF2ZTogZnVuY3Rpb24gaGFuZGxlTW91c2VMZWF2ZSgpIHtcbiAgICBpZiAoIXRoaXMuaXNIaWRpbmcgJiYgKHRoaXMucHJvcHMudGltZU91dCA+IDAgfHwgdGhpcy5wcm9wcy5leHRlbmRlZFRpbWVPdXQgPiAwKSkge1xuICAgICAgdGhpcy5fc2V0X2ludGVydmFsX2lkKHNldFRpbWVvdXQodGhpcy5oaWRlVG9hc3QsIHRoaXMucHJvcHMuZXh0ZW5kZWRUaW1lT3V0KSk7XG4gICAgfVxuICB9LFxuICBoaWRlVG9hc3Q6IGZ1bmN0aW9uIGhpZGVUb2FzdChvdmVycmlkZSkge1xuICAgIGlmICh0aGlzLmlzSGlkaW5nIHx8IHRoaXMuaW50ZXJ2YWxJZCA9PT0gbnVsbCAmJiAhb3ZlcnJpZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9zZXRfaXNfaGlkaW5nKHRydWUpO1xuICAgIGlmICh0aGlzLnByb3BzLnRyYW5zaXRpb24pIHtcbiAgICAgIHRoaXMuX3NldF90cmFuc2l0aW9uKHRydWUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5oaWRlQW5pbWF0aW9uKSB7XG4gICAgICB0aGlzLl9zZXRfYW5pbWF0aW9uKHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9oYW5kbGVfcmVtb3ZlKCk7XG4gICAgfVxuICB9LFxuICBfc2V0X2ludGVydmFsX2lkOiBmdW5jdGlvbiBfc2V0X2ludGVydmFsX2lkKGludGVydmFsSWQpIHtcbiAgICB0aGlzLmludGVydmFsSWQgPSBpbnRlcnZhbElkO1xuICB9LFxuICBfc2V0X2lzX2hpZGluZzogZnVuY3Rpb24gX3NldF9pc19oaWRpbmcoaXNIaWRpbmcpIHtcbiAgICB0aGlzLmlzSGlkaW5nID0gaXNIaWRpbmc7XG4gIH1cbn07XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34vcmVhY3QtdG9hc3RyL2xpYi9Ub2FzdE1lc3NhZ2UvYW5pbWF0aW9uTWl4aW4uanNcbiAqKiBtb2R1bGUgaWQgPSAyM1xuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIENTU0NvcmVcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnLi9pbnZhcmlhbnQnKTtcblxuLyoqXG4gKiBUaGUgQ1NTQ29yZSBtb2R1bGUgc3BlY2lmaWVzIHRoZSBBUEkgKGFuZCBpbXBsZW1lbnRzIG1vc3Qgb2YgdGhlIG1ldGhvZHMpXG4gKiB0aGF0IHNob3VsZCBiZSB1c2VkIHdoZW4gZGVhbGluZyB3aXRoIHRoZSBkaXNwbGF5IG9mIGVsZW1lbnRzICh2aWEgdGhlaXJcbiAqIENTUyBjbGFzc2VzIGFuZCB2aXNpYmlsaXR5IG9uIHNjcmVlbi4gSXQgaXMgYW4gQVBJIGZvY3VzZWQgb24gbXV0YXRpbmcgdGhlXG4gKiBkaXNwbGF5IGFuZCBub3QgcmVhZGluZyBpdCBhcyBubyBsb2dpY2FsIHN0YXRlIHNob3VsZCBiZSBlbmNvZGVkIGluIHRoZVxuICogZGlzcGxheSBvZiBlbGVtZW50cy5cbiAqL1xuXG52YXIgQ1NTQ29yZSA9IHtcblxuICAvKipcbiAgICogQWRkcyB0aGUgY2xhc3MgcGFzc2VkIGluIHRvIHRoZSBlbGVtZW50IGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBoYXZlIGl0LlxuICAgKlxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGVsZW1lbnQgdGhlIGVsZW1lbnQgdG8gc2V0IHRoZSBjbGFzcyBvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lIHRoZSBDU1MgY2xhc3NOYW1lXG4gICAqIEByZXR1cm4ge0RPTUVsZW1lbnR9IHRoZSBlbGVtZW50IHBhc3NlZCBpblxuICAgKi9cbiAgYWRkQ2xhc3M6IGZ1bmN0aW9uIChlbGVtZW50LCBjbGFzc05hbWUpIHtcbiAgICAhIS9cXHMvLnRlc3QoY2xhc3NOYW1lKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdDU1NDb3JlLmFkZENsYXNzIHRha2VzIG9ubHkgYSBzaW5nbGUgY2xhc3MgbmFtZS4gXCIlc1wiIGNvbnRhaW5zICcgKyAnbXVsdGlwbGUgY2xhc3Nlcy4nLCBjbGFzc05hbWUpIDogaW52YXJpYW50KGZhbHNlKSA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChjbGFzc05hbWUpIHtcbiAgICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdCkge1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAoIUNTU0NvcmUuaGFzQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSkge1xuICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NOYW1lICsgJyAnICsgY2xhc3NOYW1lO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfSxcblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgY2xhc3MgcGFzc2VkIGluIGZyb20gdGhlIGVsZW1lbnRcbiAgICpcbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBlbGVtZW50IHRoZSBlbGVtZW50IHRvIHNldCB0aGUgY2xhc3Mgb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSB0aGUgQ1NTIGNsYXNzTmFtZVxuICAgKiBAcmV0dXJuIHtET01FbGVtZW50fSB0aGUgZWxlbWVudCBwYXNzZWQgaW5cbiAgICovXG4gIHJlbW92ZUNsYXNzOiBmdW5jdGlvbiAoZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gICAgISEvXFxzLy50ZXN0KGNsYXNzTmFtZSkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnQ1NTQ29yZS5yZW1vdmVDbGFzcyB0YWtlcyBvbmx5IGEgc2luZ2xlIGNsYXNzIG5hbWUuIFwiJXNcIiBjb250YWlucyAnICsgJ211bHRpcGxlIGNsYXNzZXMuJywgY2xhc3NOYW1lKSA6IGludmFyaWFudChmYWxzZSkgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoY2xhc3NOYW1lKSB7XG4gICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7XG4gICAgICB9IGVsc2UgaWYgKENTU0NvcmUuaGFzQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSkge1xuICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NOYW1lLnJlcGxhY2UobmV3IFJlZ0V4cCgnKF58XFxcXHMpJyArIGNsYXNzTmFtZSArICcoPzpcXFxcc3wkKScsICdnJyksICckMScpLnJlcGxhY2UoL1xccysvZywgJyAnKSAvLyBtdWx0aXBsZSBzcGFjZXMgdG8gb25lXG4gICAgICAgIC5yZXBsYWNlKC9eXFxzKnxcXHMqJC9nLCAnJyk7IC8vIHRyaW0gdGhlIGVuZHNcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEhlbHBlciB0byBhZGQgb3IgcmVtb3ZlIGEgY2xhc3MgZnJvbSBhbiBlbGVtZW50IGJhc2VkIG9uIGEgY29uZGl0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGVsZW1lbnQgdGhlIGVsZW1lbnQgdG8gc2V0IHRoZSBjbGFzcyBvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lIHRoZSBDU1MgY2xhc3NOYW1lXG4gICAqIEBwYXJhbSB7Kn0gYm9vbCBjb25kaXRpb24gdG8gd2hldGhlciB0byBhZGQgb3IgcmVtb3ZlIHRoZSBjbGFzc1xuICAgKiBAcmV0dXJuIHtET01FbGVtZW50fSB0aGUgZWxlbWVudCBwYXNzZWQgaW5cbiAgICovXG4gIGNvbmRpdGlvbkNsYXNzOiBmdW5jdGlvbiAoZWxlbWVudCwgY2xhc3NOYW1lLCBib29sKSB7XG4gICAgcmV0dXJuIChib29sID8gQ1NTQ29yZS5hZGRDbGFzcyA6IENTU0NvcmUucmVtb3ZlQ2xhc3MpKGVsZW1lbnQsIGNsYXNzTmFtZSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFRlc3RzIHdoZXRoZXIgdGhlIGVsZW1lbnQgaGFzIHRoZSBjbGFzcyBzcGVjaWZpZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NTm9kZXxET01XaW5kb3d9IGVsZW1lbnQgdGhlIGVsZW1lbnQgdG8gc2V0IHRoZSBjbGFzcyBvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lIHRoZSBDU1MgY2xhc3NOYW1lXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgdGhlIGVsZW1lbnQgaGFzIHRoZSBjbGFzcywgZmFsc2UgaWYgbm90XG4gICAqL1xuICBoYXNDbGFzczogZnVuY3Rpb24gKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xuICAgICEhL1xccy8udGVzdChjbGFzc05hbWUpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ0NTUy5oYXNDbGFzcyB0YWtlcyBvbmx5IGEgc2luZ2xlIGNsYXNzIG5hbWUuJykgOiBpbnZhcmlhbnQoZmFsc2UpIDogdW5kZWZpbmVkO1xuICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdCkge1xuICAgICAgcmV0dXJuICEhY2xhc3NOYW1lICYmIGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSk7XG4gICAgfVxuICAgIHJldHVybiAoJyAnICsgZWxlbWVudC5jbGFzc05hbWUgKyAnICcpLmluZGV4T2YoJyAnICsgY2xhc3NOYW1lICsgJyAnKSA+IC0xO1xuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ1NTQ29yZTtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vfi9mYmpzL2xpYi9DU1NDb3JlLmpzXG4gKiogbW9kdWxlIGlkID0gMjRcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBpbnZhcmlhbnRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVXNlIGludmFyaWFudCgpIHRvIGFzc2VydCBzdGF0ZSB3aGljaCB5b3VyIHByb2dyYW0gYXNzdW1lcyB0byBiZSB0cnVlLlxuICpcbiAqIFByb3ZpZGUgc3ByaW50Zi1zdHlsZSBmb3JtYXQgKG9ubHkgJXMgaXMgc3VwcG9ydGVkKSBhbmQgYXJndW1lbnRzXG4gKiB0byBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgYnJva2UgYW5kIHdoYXQgeW91IHdlcmVcbiAqIGV4cGVjdGluZy5cbiAqXG4gKiBUaGUgaW52YXJpYW50IG1lc3NhZ2Ugd2lsbCBiZSBzdHJpcHBlZCBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGludmFyaWFudFxuICogd2lsbCByZW1haW4gdG8gZW5zdXJlIGxvZ2ljIGRvZXMgbm90IGRpZmZlciBpbiBwcm9kdWN0aW9uLlxuICovXG5cbmZ1bmN0aW9uIGludmFyaWFudChjb25kaXRpb24sIGZvcm1hdCwgYSwgYiwgYywgZCwgZSwgZikge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhcmlhbnQgcmVxdWlyZXMgYW4gZXJyb3IgbWVzc2FnZSBhcmd1bWVudCcpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29uZGl0aW9uKSB7XG4gICAgdmFyIGVycm9yO1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoJ01pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50ICcgKyAnZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGFyZ3MgPSBbYSwgYiwgYywgZCwgZSwgZl07XG4gICAgICB2YXIgYXJnSW5kZXggPSAwO1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107XG4gICAgICB9KSk7XG4gICAgICBlcnJvci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgIH1cblxuICAgIGVycm9yLmZyYW1lc1RvUG9wID0gMTsgLy8gd2UgZG9uJ3QgY2FyZSBhYm91dCBpbnZhcmlhbnQncyBvd24gZnJhbWVcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGludmFyaWFudDtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vfi9mYmpzL2xpYi9pbnZhcmlhbnQuanNcbiAqKiBtb2R1bGUgaWQgPSAyNVxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0VHJhbnNpdGlvbkV2ZW50c1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZSgnZmJqcy9saWIvRXhlY3V0aW9uRW52aXJvbm1lbnQnKTtcblxuLyoqXG4gKiBFVkVOVF9OQU1FX01BUCBpcyB1c2VkIHRvIGRldGVybWluZSB3aGljaCBldmVudCBmaXJlZCB3aGVuIGFcbiAqIHRyYW5zaXRpb24vYW5pbWF0aW9uIGVuZHMsIGJhc2VkIG9uIHRoZSBzdHlsZSBwcm9wZXJ0eSB1c2VkIHRvXG4gKiBkZWZpbmUgdGhhdCBldmVudC5cbiAqL1xudmFyIEVWRU5UX05BTUVfTUFQID0ge1xuICB0cmFuc2l0aW9uZW5kOiB7XG4gICAgJ3RyYW5zaXRpb24nOiAndHJhbnNpdGlvbmVuZCcsXG4gICAgJ1dlYmtpdFRyYW5zaXRpb24nOiAnd2Via2l0VHJhbnNpdGlvbkVuZCcsXG4gICAgJ01velRyYW5zaXRpb24nOiAnbW96VHJhbnNpdGlvbkVuZCcsXG4gICAgJ09UcmFuc2l0aW9uJzogJ29UcmFuc2l0aW9uRW5kJyxcbiAgICAnbXNUcmFuc2l0aW9uJzogJ01TVHJhbnNpdGlvbkVuZCdcbiAgfSxcblxuICBhbmltYXRpb25lbmQ6IHtcbiAgICAnYW5pbWF0aW9uJzogJ2FuaW1hdGlvbmVuZCcsXG4gICAgJ1dlYmtpdEFuaW1hdGlvbic6ICd3ZWJraXRBbmltYXRpb25FbmQnLFxuICAgICdNb3pBbmltYXRpb24nOiAnbW96QW5pbWF0aW9uRW5kJyxcbiAgICAnT0FuaW1hdGlvbic6ICdvQW5pbWF0aW9uRW5kJyxcbiAgICAnbXNBbmltYXRpb24nOiAnTVNBbmltYXRpb25FbmQnXG4gIH1cbn07XG5cbnZhciBlbmRFdmVudHMgPSBbXTtcblxuZnVuY3Rpb24gZGV0ZWN0RXZlbnRzKCkge1xuICB2YXIgdGVzdEVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHZhciBzdHlsZSA9IHRlc3RFbC5zdHlsZTtcblxuICAvLyBPbiBzb21lIHBsYXRmb3JtcywgaW4gcGFydGljdWxhciBzb21lIHJlbGVhc2VzIG9mIEFuZHJvaWQgNC54LFxuICAvLyB0aGUgdW4tcHJlZml4ZWQgXCJhbmltYXRpb25cIiBhbmQgXCJ0cmFuc2l0aW9uXCIgcHJvcGVydGllcyBhcmUgZGVmaW5lZCBvbiB0aGVcbiAgLy8gc3R5bGUgb2JqZWN0IGJ1dCB0aGUgZXZlbnRzIHRoYXQgZmlyZSB3aWxsIHN0aWxsIGJlIHByZWZpeGVkLCBzbyB3ZSBuZWVkXG4gIC8vIHRvIGNoZWNrIGlmIHRoZSB1bi1wcmVmaXhlZCBldmVudHMgYXJlIHVzZWFibGUsIGFuZCBpZiBub3QgcmVtb3ZlIHRoZW1cbiAgLy8gZnJvbSB0aGUgbWFwXG4gIGlmICghKCdBbmltYXRpb25FdmVudCcgaW4gd2luZG93KSkge1xuICAgIGRlbGV0ZSBFVkVOVF9OQU1FX01BUC5hbmltYXRpb25lbmQuYW5pbWF0aW9uO1xuICB9XG5cbiAgaWYgKCEoJ1RyYW5zaXRpb25FdmVudCcgaW4gd2luZG93KSkge1xuICAgIGRlbGV0ZSBFVkVOVF9OQU1FX01BUC50cmFuc2l0aW9uZW5kLnRyYW5zaXRpb247XG4gIH1cblxuICBmb3IgKHZhciBiYXNlRXZlbnROYW1lIGluIEVWRU5UX05BTUVfTUFQKSB7XG4gICAgdmFyIGJhc2VFdmVudHMgPSBFVkVOVF9OQU1FX01BUFtiYXNlRXZlbnROYW1lXTtcbiAgICBmb3IgKHZhciBzdHlsZU5hbWUgaW4gYmFzZUV2ZW50cykge1xuICAgICAgaWYgKHN0eWxlTmFtZSBpbiBzdHlsZSkge1xuICAgICAgICBlbmRFdmVudHMucHVzaChiYXNlRXZlbnRzW3N0eWxlTmFtZV0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuaWYgKEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSkge1xuICBkZXRlY3RFdmVudHMoKTtcbn1cblxuLy8gV2UgdXNlIHRoZSByYXcge2FkZHxyZW1vdmV9RXZlbnRMaXN0ZW5lcigpIGNhbGwgYmVjYXVzZSBFdmVudExpc3RlbmVyXG4vLyBkb2VzIG5vdCBrbm93IGhvdyB0byByZW1vdmUgZXZlbnQgbGlzdGVuZXJzIGFuZCB3ZSByZWFsbHkgc2hvdWxkXG4vLyBjbGVhbiB1cC4gQWxzbywgdGhlc2UgZXZlbnRzIGFyZSBub3QgdHJpZ2dlcmVkIGluIG9sZGVyIGJyb3dzZXJzXG4vLyBzbyB3ZSBzaG91bGQgYmUgQS1PSyBoZXJlLlxuXG5mdW5jdGlvbiBhZGRFdmVudExpc3RlbmVyKG5vZGUsIGV2ZW50TmFtZSwgZXZlbnRMaXN0ZW5lcikge1xuICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBldmVudExpc3RlbmVyLCBmYWxzZSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXIobm9kZSwgZXZlbnROYW1lLCBldmVudExpc3RlbmVyKSB7XG4gIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGV2ZW50TGlzdGVuZXIsIGZhbHNlKTtcbn1cblxudmFyIFJlYWN0VHJhbnNpdGlvbkV2ZW50cyA9IHtcbiAgYWRkRW5kRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gKG5vZGUsIGV2ZW50TGlzdGVuZXIpIHtcbiAgICBpZiAoZW5kRXZlbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gSWYgQ1NTIHRyYW5zaXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkLCB0cmlnZ2VyIGFuIFwiZW5kIGFuaW1hdGlvblwiXG4gICAgICAvLyBldmVudCBpbW1lZGlhdGVseS5cbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGV2ZW50TGlzdGVuZXIsIDApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbmRFdmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZW5kRXZlbnQpIHtcbiAgICAgIGFkZEV2ZW50TGlzdGVuZXIobm9kZSwgZW5kRXZlbnQsIGV2ZW50TGlzdGVuZXIpO1xuICAgIH0pO1xuICB9LFxuXG4gIHJlbW92ZUVuZEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uIChub2RlLCBldmVudExpc3RlbmVyKSB7XG4gICAgaWYgKGVuZEV2ZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZW5kRXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGVuZEV2ZW50KSB7XG4gICAgICByZW1vdmVFdmVudExpc3RlbmVyKG5vZGUsIGVuZEV2ZW50LCBldmVudExpc3RlbmVyKTtcbiAgICB9KTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFRyYW5zaXRpb25FdmVudHM7XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34vcmVhY3QvbGliL1JlYWN0VHJhbnNpdGlvbkV2ZW50cy5qc1xuICoqIG1vZHVsZSBpZCA9IDI2XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgRXhlY3V0aW9uRW52aXJvbm1lbnRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBjYW5Vc2VET00gPSAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG4vKipcbiAqIFNpbXBsZSwgbGlnaHR3ZWlnaHQgbW9kdWxlIGFzc2lzdGluZyB3aXRoIHRoZSBkZXRlY3Rpb24gYW5kIGNvbnRleHQgb2ZcbiAqIFdvcmtlci4gSGVscHMgYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGFuZCBhbGxvd3MgY29kZSB0byByZWFzb24gYWJvdXRcbiAqIHdoZXRoZXIgb3Igbm90IHRoZXkgYXJlIGluIGEgV29ya2VyLCBldmVuIGlmIHRoZXkgbmV2ZXIgaW5jbHVkZSB0aGUgbWFpblxuICogYFJlYWN0V29ya2VyYCBkZXBlbmRlbmN5LlxuICovXG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSB7XG5cbiAgY2FuVXNlRE9NOiBjYW5Vc2VET00sXG5cbiAgY2FuVXNlV29ya2VyczogdHlwZW9mIFdvcmtlciAhPT0gJ3VuZGVmaW5lZCcsXG5cbiAgY2FuVXNlRXZlbnRMaXN0ZW5lcnM6IGNhblVzZURPTSAmJiAhISh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciB8fCB3aW5kb3cuYXR0YWNoRXZlbnQpLFxuXG4gIGNhblVzZVZpZXdwb3J0OiBjYW5Vc2VET00gJiYgISF3aW5kb3cuc2NyZWVuLFxuXG4gIGlzSW5Xb3JrZXI6ICFjYW5Vc2VET00gLy8gRm9yIG5vdywgdGhpcyBpcyB0cnVlIC0gbWlnaHQgY2hhbmdlIGluIHRoZSBmdXR1cmUuXG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRXhlY3V0aW9uRW52aXJvbm1lbnQ7XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34vcmVhY3Qvfi9mYmpzL2xpYi9FeGVjdXRpb25FbnZpcm9ubWVudC5qc1xuICoqIG1vZHVsZSBpZCA9IDI3XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9yZWFjdERvbSA9IHJlcXVpcmUoXCJyZWFjdC1kb21cIik7XG5cbnZhciBfcmVhY3REb20yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3REb20pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBjYWxsX3Nob3dfbWV0aG9kKCRub2RlLCBwcm9wcykge1xuICAkbm9kZVtwcm9wcy5zaG93TWV0aG9kXSh7XG4gICAgZHVyYXRpb246IHByb3BzLnNob3dEdXJhdGlvbixcbiAgICBlYXNpbmc6IHByb3BzLnNob3dFYXNpbmdcbiAgfSk7XG59XG5cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgZ2V0RGVmYXVsdFByb3BzOiBmdW5jdGlvbiBnZXREZWZhdWx0UHJvcHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIGRpc3BsYXk6IFwibm9uZVwiIH0sXG4gICAgICAvLyBlZmZlY3RpdmUgJC5oaWRlKClcbiAgICAgIHNob3dNZXRob2Q6IFwiZmFkZUluXCIsIC8vIHNsaWRlRG93biwgYW5kIHNob3cgYXJlIGJ1aWx0IGludG8galF1ZXJ5XG4gICAgICBzaG93RHVyYXRpb246IDMwMCxcbiAgICAgIHNob3dFYXNpbmc6IFwic3dpbmdcIiwgLy8gYW5kIGxpbmVhciBhcmUgYnVpbHQgaW50byBqUXVlcnlcbiAgICAgIGhpZGVNZXRob2Q6IFwiZmFkZU91dFwiLFxuICAgICAgaGlkZUR1cmF0aW9uOiAxMDAwLFxuICAgICAgaGlkZUVhc2luZzogXCJzd2luZ1wiLFxuICAgICAgLy9cbiAgICAgIHRpbWVPdXQ6IDUwMDAsXG4gICAgICBleHRlbmRlZFRpbWVPdXQ6IDEwMDBcbiAgICB9O1xuICB9LFxuICBnZXRJbml0aWFsU3RhdGU6IGZ1bmN0aW9uIGdldEluaXRpYWxTdGF0ZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaW50ZXJ2YWxJZDogbnVsbCxcbiAgICAgIGlzSGlkaW5nOiBmYWxzZVxuICAgIH07XG4gIH0sXG4gIGNvbXBvbmVudERpZE1vdW50OiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjYWxsX3Nob3dfbWV0aG9kKHRoaXMuX2dldF8kX25vZGUoKSwgdGhpcy5wcm9wcyk7XG4gICAgaWYgKHRoaXMucHJvcHMudGltZU91dCA+IDApIHtcbiAgICAgIHRoaXMuX3NldF9pbnRlcnZhbF9pZChzZXRUaW1lb3V0KHRoaXMuaGlkZVRvYXN0LCB0aGlzLnByb3BzLnRpbWVPdXQpKTtcbiAgICB9XG4gIH0sXG4gIGhhbmRsZU1vdXNlRW50ZXI6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlRW50ZXIoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuc3RhdGUuaW50ZXJ2YWxJZCk7XG4gICAgdGhpcy5fc2V0X2ludGVydmFsX2lkKG51bGwpO1xuICAgIHRoaXMuX3NldF9pc19oaWRpbmcoZmFsc2UpO1xuXG4gICAgY2FsbF9zaG93X21ldGhvZCh0aGlzLl9nZXRfJF9ub2RlKCkuc3RvcCh0cnVlLCB0cnVlKSwgdGhpcy5wcm9wcyk7XG4gIH0sXG4gIGhhbmRsZU1vdXNlTGVhdmU6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlTGVhdmUoKSB7XG4gICAgaWYgKCF0aGlzLnN0YXRlLmlzSGlkaW5nICYmICh0aGlzLnByb3BzLnRpbWVPdXQgPiAwIHx8IHRoaXMucHJvcHMuZXh0ZW5kZWRUaW1lT3V0ID4gMCkpIHtcbiAgICAgIHRoaXMuX3NldF9pbnRlcnZhbF9pZChzZXRUaW1lb3V0KHRoaXMuaGlkZVRvYXN0LCB0aGlzLnByb3BzLmV4dGVuZGVkVGltZU91dCkpO1xuICAgIH1cbiAgfSxcbiAgaGlkZVRvYXN0OiBmdW5jdGlvbiBoaWRlVG9hc3Qob3ZlcnJpZGUpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5pc0hpZGluZyB8fCB0aGlzLnN0YXRlLmludGVydmFsSWQgPT09IG51bGwgJiYgIW92ZXJyaWRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoeyBpc0hpZGluZzogdHJ1ZSB9KTtcblxuICAgIHRoaXMuX2dldF8kX25vZGUoKVt0aGlzLnByb3BzLmhpZGVNZXRob2RdKHtcbiAgICAgIGR1cmF0aW9uOiB0aGlzLnByb3BzLmhpZGVEdXJhdGlvbixcbiAgICAgIGVhc2luZzogdGhpcy5wcm9wcy5oaWRlRWFzaW5nLFxuICAgICAgY29tcGxldGU6IHRoaXMuX2hhbmRsZV9yZW1vdmVcbiAgICB9KTtcbiAgfSxcbiAgX2dldF8kX25vZGU6IGZ1bmN0aW9uIF9nZXRfJF9ub2RlKCkge1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG4gICAgcmV0dXJuIGpRdWVyeShfcmVhY3REb20yLmRlZmF1bHQuZmluZERPTU5vZGUodGhpcykpO1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW5kZWYgKi9cbiAgfSxcbiAgX3NldF9pbnRlcnZhbF9pZDogZnVuY3Rpb24gX3NldF9pbnRlcnZhbF9pZChpbnRlcnZhbElkKSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpbnRlcnZhbElkOiBpbnRlcnZhbElkXG4gICAgfSk7XG4gIH0sXG4gIF9zZXRfaXNfaGlkaW5nOiBmdW5jdGlvbiBfc2V0X2lzX2hpZGluZyhpc0hpZGluZykge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXNIaWRpbmc6IGlzSGlkaW5nXG4gICAgfSk7XG4gIH1cbn07XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34vcmVhY3QtdG9hc3RyL2xpYi9Ub2FzdE1lc3NhZ2UvalF1ZXJ5TWl4aW4uanNcbiAqKiBtb2R1bGUgaWQgPSAyOFxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgUHJvcFR5cGVzIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFBhZ2VCdXR0b24gZnJvbSAnLi9QYWdlQnV0dG9uLmpzJztcbmltcG9ydCBDb25zdCBmcm9tICcuLi9Db25zdCc7XG5cbmNsYXNzIFBhZ2luYXRpb25MaXN0IGV4dGVuZHMgQ29tcG9uZW50IHtcblxuICBjaGFuZ2VQYWdlID0gcGFnZSA9PiB7XG4gICAgY29uc3QgeyBwcmVQYWdlLCBjdXJyUGFnZSwgbmV4dFBhZ2UsIGxhc3RQYWdlLCBmaXJzdFBhZ2UsIHNpemVQZXJQYWdlIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChwYWdlID09PSBwcmVQYWdlKSB7XG4gICAgICBwYWdlID0gY3VyclBhZ2UgLSAxIDwgMSA/IDEgOiBjdXJyUGFnZSAtIDE7XG4gICAgfSBlbHNlIGlmIChwYWdlID09PSBuZXh0UGFnZSkge1xuICAgICAgcGFnZSA9IGN1cnJQYWdlICsgMSA+IHRoaXMudG90YWxQYWdlcyA/IHRoaXMudG90YWxQYWdlcyA6IGN1cnJQYWdlICsgMTtcbiAgICB9IGVsc2UgaWYgKHBhZ2UgPT09IGxhc3RQYWdlKSB7XG4gICAgICBwYWdlID0gdGhpcy50b3RhbFBhZ2VzO1xuICAgIH0gZWxzZSBpZiAocGFnZSA9PT0gZmlyc3RQYWdlKSB7XG4gICAgICBwYWdlID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFnZSA9IHBhcnNlSW50KHBhZ2UsIDEwKTtcbiAgICB9XG5cbiAgICBpZiAocGFnZSAhPT0gY3VyclBhZ2UpIHtcbiAgICAgIHRoaXMucHJvcHMuY2hhbmdlUGFnZShwYWdlLCBzaXplUGVyUGFnZSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlU2l6ZVBlclBhZ2UgPSBlID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCBzZWxlY3RTaXplID0gcGFyc2VJbnQoZS5jdXJyZW50VGFyZ2V0LnRleHQsIDEwKTtcbiAgICBsZXQgeyBjdXJyUGFnZSB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoc2VsZWN0U2l6ZSAhPT0gdGhpcy5wcm9wcy5zaXplUGVyUGFnZSkge1xuICAgICAgdGhpcy50b3RhbFBhZ2VzID0gTWF0aC5jZWlsKHRoaXMucHJvcHMuZGF0YVNpemUgLyBzZWxlY3RTaXplKTtcbiAgICAgIGlmIChjdXJyUGFnZSA+IHRoaXMudG90YWxQYWdlcykgY3VyclBhZ2UgPSB0aGlzLnRvdGFsUGFnZXM7XG5cbiAgICAgIHRoaXMucHJvcHMuY2hhbmdlUGFnZShjdXJyUGFnZSwgc2VsZWN0U2l6ZSk7XG4gICAgICBpZiAodGhpcy5wcm9wcy5vblNpemVQZXJQYWdlTGlzdCkge1xuICAgICAgICB0aGlzLnByb3BzLm9uU2l6ZVBlclBhZ2VMaXN0KHNlbGVjdFNpemUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGRhdGFTaXplLCBzaXplUGVyUGFnZSwgc2l6ZVBlclBhZ2VMaXN0IH0gPSB0aGlzLnByb3BzO1xuICAgIHRoaXMudG90YWxQYWdlcyA9IE1hdGguY2VpbChkYXRhU2l6ZSAvIHNpemVQZXJQYWdlKTtcbiAgICBjb25zdCBwYWdlQnRucyA9IHRoaXMubWFrZVBhZ2UoKTtcbiAgICBjb25zdCBwYWdlTGlzdFN0eWxlID0ge1xuICAgICAgZmxvYXQ6ICdyaWdodCcsXG4gICAgICAvLyBvdmVycmlkZSB0aGUgbWFyZ2luLXRvcCBkZWZpbmVkIGluIC5wYWdpbmF0aW9uIGNsYXNzIGluIGJvb3RzdHJhcC5cbiAgICAgIG1hcmdpblRvcDogJzBweCdcbiAgICB9O1xuXG4gICAgY29uc3Qgc2l6ZVBlclBhZ2VPcHRpb25zID0gc2l6ZVBlclBhZ2VMaXN0Lm1hcCgoX3NpemVQZXJQYWdlKSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8bGkga2V5PXsgX3NpemVQZXJQYWdlIH0gcm9sZT0ncHJlc2VudGF0aW9uJz5cbiAgICAgICAgICA8YSByb2xlPSdtZW51aXRlbSdcbiAgICAgICAgICAgIHRhYkluZGV4PSctMScgaHJlZj0nIydcbiAgICAgICAgICAgIG9uQ2xpY2s9eyB0aGlzLmNoYW5nZVNpemVQZXJQYWdlIH0+eyBfc2l6ZVBlclBhZ2UgfTwvYT5cbiAgICAgICAgPC9saT5cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9J3Jvdycgc3R5bGU9eyB7IG1hcmdpblRvcDogMTUgfSB9PlxuICAgICAgICB7XG4gICAgICAgICAgc2l6ZVBlclBhZ2VMaXN0Lmxlbmd0aCA+IDFcbiAgICAgICAgICA/IDxkaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2wtbWQtNic+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2Ryb3Bkb3duJz5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPSdidG4gYnRuLWRlZmF1bHQgZHJvcGRvd24tdG9nZ2xlJ1xuICAgICAgICAgICAgICAgICAgICB0eXBlPSdidXR0b24nIGlkPSdwYWdlRHJvcERvd24nIGRhdGEtdG9nZ2xlPSdkcm9wZG93bidcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD0ndHJ1ZSc+XG4gICAgICAgICAgICAgICAgICAgIHsgc2l6ZVBlclBhZ2UgfVxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB7ICcgJyB9XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSdjYXJldCcvPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDx1bCBjbGFzc05hbWU9J2Ryb3Bkb3duLW1lbnUnIHJvbGU9J21lbnUnIGFyaWEtbGFiZWxsZWRieT0ncGFnZURyb3BEb3duJz5cbiAgICAgICAgICAgICAgICAgICAgeyBzaXplUGVyUGFnZU9wdGlvbnMgfVxuICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2wtbWQtNic+XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzTmFtZT0ncGFnaW5hdGlvbicgc3R5bGU9eyBwYWdlTGlzdFN0eWxlIH0+XG4gICAgICAgICAgICAgICAgICB7IHBhZ2VCdG5zIH1cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDogPGRpdiBjbGFzc05hbWU9J2NvbC1tZC0xMic+XG4gICAgICAgICAgICAgIDx1bCBjbGFzc05hbWU9J3BhZ2luYXRpb24nIHN0eWxlPXsgcGFnZUxpc3RTdHlsZSB9PlxuICAgICAgICAgICAgICAgIHsgcGFnZUJ0bnMgfVxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBtYWtlUGFnZSgpIHtcbiAgICBjb25zdCBwYWdlcyA9IHRoaXMuZ2V0UGFnZXMoKTtcbiAgICByZXR1cm4gcGFnZXMubWFwKGZ1bmN0aW9uKHBhZ2UpIHtcbiAgICAgIGNvbnN0IGlzQWN0aXZlID0gcGFnZSA9PT0gdGhpcy5wcm9wcy5jdXJyUGFnZTtcbiAgICAgIGxldCBkaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgbGV0IGhpZGRlbiA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMucHJvcHMuY3VyclBhZ2UgPT09IDEgJiZcbiAgICAgICAgKHBhZ2UgPT09IHRoaXMucHJvcHMuZmlyc3RQYWdlIHx8IHBhZ2UgPT09IHRoaXMucHJvcHMucHJlUGFnZSkpIHtcbiAgICAgICAgZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICBoaWRkZW4gPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucHJvcHMuY3VyclBhZ2UgPT09IHRoaXMudG90YWxQYWdlcyAmJlxuICAgICAgICAocGFnZSA9PT0gdGhpcy5wcm9wcy5uZXh0UGFnZSB8fCBwYWdlID09PSB0aGlzLnByb3BzLmxhc3RQYWdlKSkge1xuICAgICAgICBkaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIGhpZGRlbiA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8UGFnZUJ1dHRvbiBrZXk9eyBwYWdlIH1cbiAgICAgICAgICBjaGFuZ2VQYWdlPXsgdGhpcy5jaGFuZ2VQYWdlIH1cbiAgICAgICAgICBhY3RpdmU9eyBpc0FjdGl2ZSB9XG4gICAgICAgICAgZGlzYWJsZT17IGRpc2FibGVkIH1cbiAgICAgICAgICBoaWRkZW49eyBoaWRkZW4gfT5cbiAgICAgICAgICB7IHBhZ2UgfVxuICAgICAgICA8L1BhZ2VCdXR0b24+XG4gICAgICApO1xuICAgIH0sIHRoaXMpO1xuICB9XG5cbiAgZ2V0UGFnZXMoKSB7XG4gICAgbGV0IHBhZ2VzO1xuICAgIGxldCBzdGFydFBhZ2UgPSAxO1xuICAgIGxldCBlbmRQYWdlID0gdGhpcy50b3RhbFBhZ2VzO1xuXG4gICAgc3RhcnRQYWdlID0gTWF0aC5tYXgodGhpcy5wcm9wcy5jdXJyUGFnZSAtIE1hdGguZmxvb3IodGhpcy5wcm9wcy5wYWdpbmF0aW9uU2l6ZSAvIDIpLCAxKTtcbiAgICBlbmRQYWdlID0gc3RhcnRQYWdlICsgdGhpcy5wcm9wcy5wYWdpbmF0aW9uU2l6ZSAtIDE7XG5cbiAgICBpZiAoZW5kUGFnZSA+IHRoaXMudG90YWxQYWdlcykge1xuICAgICAgZW5kUGFnZSA9IHRoaXMudG90YWxQYWdlcztcbiAgICAgIHN0YXJ0UGFnZSA9IGVuZFBhZ2UgLSB0aGlzLnByb3BzLnBhZ2luYXRpb25TaXplICsgMTtcbiAgICB9XG5cbiAgICBpZiAoc3RhcnRQYWdlICE9PSAxICYmIHRoaXMudG90YWxQYWdlcyA+IHRoaXMucHJvcHMucGFnaW5hdGlvblNpemUpIHtcbiAgICAgIHBhZ2VzID0gWyB0aGlzLnByb3BzLmZpcnN0UGFnZSwgdGhpcy5wcm9wcy5wcmVQYWdlIF07XG4gICAgfSBlbHNlIGlmICh0aGlzLnRvdGFsUGFnZXMgPiAxKSB7XG4gICAgICBwYWdlcyA9IFsgdGhpcy5wcm9wcy5wcmVQYWdlIF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhZ2VzID0gW107XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0UGFnZTsgaSA8PSBlbmRQYWdlOyBpKyspIHtcbiAgICAgIGlmIChpID4gMCkgcGFnZXMucHVzaChpKTtcbiAgICB9XG5cbiAgICBpZiAoZW5kUGFnZSAhPT0gdGhpcy50b3RhbFBhZ2VzKSB7XG4gICAgICBwYWdlcy5wdXNoKHRoaXMucHJvcHMubmV4dFBhZ2UpO1xuICAgICAgcGFnZXMucHVzaCh0aGlzLnByb3BzLmxhc3RQYWdlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudG90YWxQYWdlcyA+IDEpIHtcbiAgICAgIHBhZ2VzLnB1c2godGhpcy5wcm9wcy5uZXh0UGFnZSk7XG4gICAgfVxuICAgIHJldHVybiBwYWdlcztcbiAgfVxufVxuUGFnaW5hdGlvbkxpc3QucHJvcFR5cGVzID0ge1xuICBjdXJyUGFnZTogUHJvcFR5cGVzLm51bWJlcixcbiAgc2l6ZVBlclBhZ2U6IFByb3BUeXBlcy5udW1iZXIsXG4gIGRhdGFTaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuICBjaGFuZ2VQYWdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgc2l6ZVBlclBhZ2VMaXN0OiBQcm9wVHlwZXMuYXJyYXksXG4gIHBhZ2luYXRpb25TaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuICByZW1vdGU6IFByb3BUeXBlcy5ib29sLFxuICBvblNpemVQZXJQYWdlTGlzdDogUHJvcFR5cGVzLmZ1bmMsXG4gIHByZVBhZ2U6IFByb3BUeXBlcy5zdHJpbmdcbn07XG5cblBhZ2luYXRpb25MaXN0LmRlZmF1bHRQcm9wcyA9IHtcbiAgc2l6ZVBlclBhZ2U6IENvbnN0LlNJWkVfUEVSX1BBR0Vcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFBhZ2luYXRpb25MaXN0O1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvcGFnaW5hdGlvbi9QYWdpbmF0aW9uTGlzdC5qc1xuICoqLyIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFByb3BUeXBlcyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc1NldCBmcm9tICdjbGFzc25hbWVzJztcblxuY2xhc3MgUGFnZUJ1dHRvbiBleHRlbmRzIENvbXBvbmVudCB7XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICBwYWdlQnRuQ2xpY2sgPSBlID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5wcm9wcy5jaGFuZ2VQYWdlKGUuY3VycmVudFRhcmdldC50ZXh0Q29udGVudCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgY2xhc3NlcyA9IGNsYXNzU2V0KHtcbiAgICAgICdhY3RpdmUnOiB0aGlzLnByb3BzLmFjdGl2ZSxcbiAgICAgICdkaXNhYmxlZCc6IHRoaXMucHJvcHMuZGlzYWJsZSxcbiAgICAgICdoaWRkZW4nOiB0aGlzLnByb3BzLmhpZGRlblxuICAgIH0pO1xuICAgIHJldHVybiAoXG4gICAgICA8bGkgY2xhc3NOYW1lPXsgY2xhc3NlcyB9PlxuICAgICAgICA8YSBocmVmPScjJyBvbkNsaWNrPXsgdGhpcy5wYWdlQnRuQ2xpY2sgfT57IHRoaXMucHJvcHMuY2hpbGRyZW4gfTwvYT5cbiAgICAgIDwvbGk+XG4gICAgKTtcbiAgfVxufVxuUGFnZUJ1dHRvbi5wcm9wVHlwZXMgPSB7XG4gIGNoYW5nZVBhZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBhY3RpdmU6IFByb3BUeXBlcy5ib29sLFxuICBkaXNhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgaGlkZGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlXG59O1xuXG5leHBvcnQgZGVmYXVsdCBQYWdlQnV0dG9uO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvcGFnaW5hdGlvbi9QYWdlQnV0dG9uLmpzXG4gKiovIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgUHJvcFR5cGVzIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzU2V0IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4uL0NvbnN0JztcbmltcG9ydCBlZGl0b3IgZnJvbSAnLi4vRWRpdG9yJztcbmltcG9ydCBOb3RpZmllciBmcm9tICcuLi9Ob3RpZmljYXRpb24uanMnO1xuXG5jbGFzcyBUb29sQmFyIGV4dGVuZHMgQ29tcG9uZW50IHtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnRpbWVvdXRlQ2xlYXIgPSAwO1xuICAgIHRoaXMubW9kYWxDbGFzc05hbWU7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGlzSW5zZXJ0Um93VHJpZ2dlcjogdHJ1ZSxcbiAgICAgIHZhbGlkYXRlU3RhdGU6IG51bGwsXG4gICAgICBzaGFrZUVkaXRvcjogZmFsc2UsXG4gICAgICBzaG93U2VsZWN0ZWQ6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMuY2xlYXJUaW1lb3V0KCk7XG4gIH1cblxuICBjbGVhclRpbWVvdXQoKSB7XG4gICAgaWYgKHRoaXMudGltZW91dGVDbGVhcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dGVDbGVhcik7XG4gICAgICB0aGlzLnRpbWVvdXRlQ2xlYXIgPSAwO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrQW5kUGFyc2VGb3JtKCkge1xuICAgIGNvbnN0IG5ld09iaiA9IHt9O1xuICAgIGNvbnN0IHZhbGlkYXRlU3RhdGUgPSB7fTtcbiAgICBsZXQgaXNWYWxpZCA9IHRydWU7XG4gICAgbGV0IHRlbXBWYWx1ZTtcbiAgICBsZXQgdGVtcE1zZztcblxuICAgIHRoaXMucHJvcHMuY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uKGNvbHVtbiwgaSkge1xuICAgICAgaWYgKGNvbHVtbi5hdXRvVmFsdWUpIHtcbiAgICAgICAgLy8gd2hlbiB5b3Ugd2FudCBzYW1lIGF1dG8gZ2VuZXJhdGUgdmFsdWUgYW5kIG5vdCBhbGxvdyBlZGl0LCBleGFtcGxlIElEIGZpZWxkXG4gICAgICAgIGNvbnN0IHRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgdGVtcFZhbHVlID0gdHlwZW9mIGNvbHVtbi5hdXRvVmFsdWUgPT09ICdmdW5jdGlvbicgP1xuICAgICAgICAgIGNvbHVtbi5hdXRvVmFsdWUoKSA6XG4gICAgICAgICAgKGBhdXRvdmFsdWUtJHt0aW1lfWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZG9tID0gdGhpcy5yZWZzW2NvbHVtbi5maWVsZCArIGldO1xuICAgICAgICB0ZW1wVmFsdWUgPSBkb20udmFsdWU7XG5cbiAgICAgICAgaWYgKGNvbHVtbi5lZGl0YWJsZSAmJiBjb2x1bW4uZWRpdGFibGUudHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHRlbXBWYWx1ZS5zcGxpdCgnOicpO1xuICAgICAgICAgIHRlbXBWYWx1ZSA9IGRvbS5jaGVja2VkID8gdmFsdWVzWzBdIDogdmFsdWVzWzFdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbHVtbi5lZGl0YWJsZSAmJiBjb2x1bW4uZWRpdGFibGUudmFsaWRhdG9yKSB7IC8vIHByb2Nlc3MgdmFsaWRhdGVcbiAgICAgICAgICB0ZW1wTXNnID0gY29sdW1uLmVkaXRhYmxlLnZhbGlkYXRvcih0ZW1wVmFsdWUpO1xuICAgICAgICAgIGlmICh0ZW1wTXNnICE9PSB0cnVlKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICB2YWxpZGF0ZVN0YXRlW2NvbHVtbi5maWVsZF0gPSB0ZW1wTXNnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBuZXdPYmpbY29sdW1uLmZpZWxkXSA9IHRlbXBWYWx1ZTtcbiAgICB9LCB0aGlzKTtcblxuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gbmV3T2JqO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsZWFyVGltZW91dCgpO1xuICAgICAgLy8gc2hvdyBlcnJvciBpbiBmb3JtIGFuZCBzaGFrZSBpdFxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHZhbGlkYXRlU3RhdGUsIHNoYWtlRWRpdG9yOiB0cnVlIH0pO1xuICAgICAgLy8gbm90aWZpZXIgZXJyb3JcbiAgICAgIHRoaXMucmVmcy5ub3RpZmllci5ub3RpY2UoXG4gICAgICAgICdlcnJvcicsXG4gICAgICAgICdGb3JtIHZhbGlkYXRlIGVycm9ycywgcGxlYXNlIGNoZWNraW5nIScsXG4gICAgICAgICdQcmVzc2VkIEVTQyBjYW4gY2FuY2VsJyk7XG4gICAgICAvLyBjbGVhciBhbmltYXRlIGNsYXNzXG4gICAgICB0aGlzLnRpbWVvdXRlQ2xlYXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHNoYWtlRWRpdG9yOiBmYWxzZSB9KTtcbiAgICAgIH0sIDMwMCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVTYXZlQnRuQ2xpY2sgPSAoKSA9PiB7XG4gICAgY29uc3QgbmV3T2JqID0gdGhpcy5jaGVja0FuZFBhcnNlRm9ybSgpO1xuICAgIGlmICghbmV3T2JqKSB7IC8vIHZhbGlkYXRlIGVycm9yc1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtc2cgPSB0aGlzLnByb3BzLm9uQWRkUm93KG5ld09iaik7XG4gICAgaWYgKG1zZykge1xuICAgICAgdGhpcy5yZWZzLm5vdGlmaWVyLm5vdGljZSgnZXJyb3InLCBtc2csICdQcmVzc2VkIEVTQyBjYW4gY2FuY2VsJyk7XG4gICAgICB0aGlzLmNsZWFyVGltZW91dCgpO1xuICAgICAgLy8gc2hha2UgZm9ybSBhbmQgaGFjayBwcmV2ZW50IG1vZGFsIGhpZGVcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzaGFrZUVkaXRvcjogdHJ1ZSxcbiAgICAgICAgdmFsaWRhdGVTdGF0ZTogJ3RoaXMgaXMgaGFjayBmb3IgcHJldmVudCBib290c3RyYXAgbW9kYWwgaGlkZSdcbiAgICAgIH0pO1xuICAgICAgLy8gY2xlYXIgYW5pbWF0ZSBjbGFzc1xuICAgICAgdGhpcy50aW1lb3V0ZUNsZWFyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBzaGFrZUVkaXRvcjogZmFsc2UgfSk7XG4gICAgICB9LCAzMDApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyByZXNldCBzdGF0ZSBhbmQgaGlkZSBtb2RhbCBoaWRlXG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdmFsaWRhdGVTdGF0ZTogbnVsbCxcbiAgICAgICAgc2hha2VFZGl0b3I6IGZhbHNlXG4gICAgICB9LCAoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tb2RhbC1iYWNrZHJvcCcpLmNsaWNrKCk7XG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy4nICsgdGhpcy5tb2RhbENsYXNzTmFtZSkuY2xpY2soKTtcbiAgICAgIH0pO1xuICAgICAgLy8gcmVzZXQgZm9ybVxuICAgICAgdGhpcy5yZWZzLmZvcm0ucmVzZXQoKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVTaG93T25seVRvZ2dsZSA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHNob3dTZWxlY3RlZDogIXRoaXMuc3RhdGUuc2hvd1NlbGVjdGVkXG4gICAgfSk7XG4gICAgdGhpcy5wcm9wcy5vblNob3dPbmx5U2VsZWN0ZWQoKTtcbiAgfVxuXG4gIGhhbmRsZURyb3BSb3dCdG5DbGljayA9ICgpID0+IHtcbiAgICB0aGlzLnByb3BzLm9uRHJvcFJvdygpO1xuICB9XG5cbiAgaGFuZGxlQ2xvc2VCdG4oKSB7XG4gICAgdGhpcy5yZWZzLndhcm5pbmcuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgfVxuXG4gIGhhbmRsZUtleVVwID0gZSA9PiB7XG4gICAgdGhpcy5wcm9wcy5vblNlYXJjaChlLmN1cnJlbnRUYXJnZXQudmFsdWUpO1xuICB9XG5cbiAgaGFuZGxlRXhwb3J0Q1NWID0gKCkgPT4ge1xuICAgIHRoaXMucHJvcHMub25FeHBvcnRDU1YoKTtcbiAgfVxuXG4gIGhhbmRsZUNsZWFyQnRuQ2xpY2sgPSAoKSA9PiB7XG4gICAgdGhpcy5yZWZzLnNlYWNoSW5wdXQudmFsdWUgPSAnJztcbiAgICB0aGlzLnByb3BzLm9uU2VhcmNoKCcnKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICB0aGlzLm1vZGFsQ2xhc3NOYW1lID0gJ2JzLXRhYmxlLW1vZGFsLXNtJyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIGxldCBpbnNlcnRCdG4gPSBudWxsO1xuICAgIGxldCBkZWxldGVCdG4gPSBudWxsO1xuICAgIGxldCBleHBvcnRDU1YgPSBudWxsO1xuICAgIGxldCBzaG93U2VsZWN0ZWRPbmx5QnRuID0gbnVsbDtcblxuICAgIGlmICh0aGlzLnByb3BzLmVuYWJsZUluc2VydCkge1xuICAgICAgaW5zZXJ0QnRuID0gKFxuICAgICAgICA8YnV0dG9uIHR5cGU9J2J1dHRvbidcbiAgICAgICAgICBjbGFzc05hbWU9J2J0biBidG4taW5mbyByZWFjdC1icy10YWJsZS1hZGQtYnRuJ1xuICAgICAgICAgIGRhdGEtdG9nZ2xlPSdtb2RhbCdcbiAgICAgICAgICBkYXRhLXRhcmdldD17ICcuJyArIHRoaXMubW9kYWxDbGFzc05hbWUgfT5cbiAgICAgICAgICA8aSBjbGFzc05hbWU9J2dseXBoaWNvbiBnbHlwaGljb24tcGx1cyc+PC9pPiBOZXdcbiAgICAgICAgPC9idXR0b24+XG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLmVuYWJsZURlbGV0ZSkge1xuICAgICAgZGVsZXRlQnRuID0gKFxuICAgICAgICA8YnV0dG9uIHR5cGU9J2J1dHRvbidcbiAgICAgICAgICBjbGFzc05hbWU9J2J0biBidG4td2FybmluZyByZWFjdC1icy10YWJsZS1kZWwtYnRuJ1xuICAgICAgICAgIGRhdGEtdG9nZ2xlPSd0b29sdGlwJ1xuICAgICAgICAgIGRhdGEtcGxhY2VtZW50PSdyaWdodCdcbiAgICAgICAgICB0aXRsZT0nRHJvcCBzZWxlY3RlZCByb3cnXG4gICAgICAgICAgb25DbGljaz17IHRoaXMuaGFuZGxlRHJvcFJvd0J0bkNsaWNrIH0+XG4gICAgICAgICAgPGkgY2xhc3NOYW1lPSdnbHlwaGljb24gZ2x5cGhpY29uLXRyYXNoJz48L2k+IERlbGV0ZVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMuZW5hYmxlU2hvd09ubHlTZWxlY3RlZCkge1xuICAgICAgc2hvd1NlbGVjdGVkT25seUJ0biA9IChcbiAgICAgICAgPGJ1dHRvbiB0eXBlPSdidXR0b24nXG4gICAgICAgICAgb25DbGljaz17IHRoaXMuaGFuZGxlU2hvd09ubHlUb2dnbGUgfVxuICAgICAgICAgIGNsYXNzTmFtZT0nYnRuIGJ0bi1wcmltYXJ5J1xuICAgICAgICAgIGRhdGEtdG9nZ2xlPSdidXR0b24nXG4gICAgICAgICAgYXJpYS1wcmVzc2VkPSdmYWxzZSc+XG4gICAgICAgICAgeyB0aGlzLnN0YXRlLnNob3dTZWxlY3RlZCA/IENvbnN0LlNIT1dfQUxMIDogQ29uc3QuU0hPV19PTkxZX1NFTEVDVCB9XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9wcy5lbmFibGVFeHBvcnRDU1YpIHtcbiAgICAgIGV4cG9ydENTViA9IChcbiAgICAgICAgPGJ1dHRvbiB0eXBlPSdidXR0b24nXG4gICAgICAgICAgY2xhc3NOYW1lPSdidG4gYnRuLXN1Y2Nlc3MnXG4gICAgICAgICAgb25DbGljaz17IHRoaXMuaGFuZGxlRXhwb3J0Q1NWIH0+XG4gICAgICAgICAgICA8aSBjbGFzc05hbWU9J2dseXBoaWNvbiBnbHlwaGljb24tZXhwb3J0Jz48L2k+IEV4cG9ydCB0byBDU1ZcbiAgICAgICAgPC9idXR0b24+XG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHNlYXJjaFRleHRJbnB1dCA9IHRoaXMucmVuZGVyU2VhcmNoUGFuZWwoKTtcbiAgICBjb25zdCBtb2RhbCA9IHRoaXMucHJvcHMuZW5hYmxlSW5zZXJ0ID8gdGhpcy5yZW5kZXJJbnNlcnRSb3dNb2RhbCgpIDogbnVsbDtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93Jz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9J2NvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtNiBjb2wtbGctOCc+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2J0bi1ncm91cCBidG4tZ3JvdXAtc20nIHJvbGU9J2dyb3VwJz5cbiAgICAgICAgICAgIHsgZXhwb3J0Q1NWIH1cbiAgICAgICAgICAgIHsgaW5zZXJ0QnRuIH1cbiAgICAgICAgICAgIHsgZGVsZXRlQnRuIH1cbiAgICAgICAgICAgIHsgc2hvd1NlbGVjdGVkT25seUJ0biB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC02IGNvbC1sZy00Jz5cbiAgICAgICAgICB7IHNlYXJjaFRleHRJbnB1dCB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8Tm90aWZpZXIgcmVmPSdub3RpZmllcicgLz5cbiAgICAgICAgeyBtb2RhbCB9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyU2VhcmNoUGFuZWwoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuZW5hYmxlU2VhcmNoKSB7XG4gICAgICBsZXQgY2xhc3NOYW1lcyA9ICdmb3JtLWdyb3VwIGZvcm0tZ3JvdXAtc20gcmVhY3QtYnMtdGFibGUtc2VhcmNoLWZvcm0nO1xuICAgICAgbGV0IGNsZWFyQnRuID0gbnVsbDtcbiAgICAgIGlmICh0aGlzLnByb3BzLmNsZWFyU2VhcmNoKSB7XG4gICAgICAgIGNsZWFyQnRuID0gKFxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0naW5wdXQtZ3JvdXAtYnRuJz5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPSdidG4gYnRuLWRlZmF1bHQnXG4gICAgICAgICAgICAgIHR5cGU9J2J1dHRvbidcbiAgICAgICAgICAgICAgb25DbGljaz17IHRoaXMuaGFuZGxlQ2xlYXJCdG5DbGljayB9PlxuICAgICAgICAgICAgICBDbGVhclxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICApO1xuICAgICAgICBjbGFzc05hbWVzICs9ICcgaW5wdXQtZ3JvdXAgaW5wdXQtZ3JvdXAtc20nO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17IGNsYXNzTmFtZXMgfT5cbiAgICAgICAgICA8aW5wdXQgcmVmPSdzZWFjaElucHV0J1xuICAgICAgICAgICAgY2xhc3NOYW1lPSdmb3JtLWNvbnRyb2wnXG4gICAgICAgICAgICB0eXBlPSd0ZXh0J1xuICAgICAgICAgICAgcGxhY2Vob2xkZXI9eyB0aGlzLnByb3BzLnNlYXJjaFBsYWNlaG9sZGVyID8gdGhpcy5wcm9wcy5zZWFyY2hQbGFjZWhvbGRlciA6ICdTZWFyY2gnIH1cbiAgICAgICAgICAgIG9uS2V5VXA9eyB0aGlzLmhhbmRsZUtleVVwIH0vPlxuICAgICAgICAgICAgeyBjbGVhckJ0biB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVySW5zZXJ0Um93TW9kYWwoKSB7XG4gICAgY29uc3QgdmFsaWRhdGVTdGF0ZSA9IHRoaXMuc3RhdGUudmFsaWRhdGVTdGF0ZSB8fCB7fTtcbiAgICBjb25zdCBzaGFrZUVkaXRvciA9IHRoaXMuc3RhdGUuc2hha2VFZGl0b3I7XG4gICAgY29uc3QgaW5wdXRGaWVsZCA9IHRoaXMucHJvcHMuY29sdW1ucy5tYXAoZnVuY3Rpb24oY29sdW1uLCBpKSB7XG4gICAgICBjb25zdCB7IGVkaXRhYmxlLCBmb3JtYXQsIGZpZWxkLCBuYW1lLCBhdXRvVmFsdWUgfSA9IGNvbHVtbjtcbiAgICAgIGNvbnN0IGF0dHIgPSB7XG4gICAgICAgIHJlZjogZmllbGQgKyBpLFxuICAgICAgICBwbGFjZWhvbGRlcjogZWRpdGFibGUucGxhY2Vob2xkZXIgPyBlZGl0YWJsZS5wbGFjZWhvbGRlciA6IG5hbWVcbiAgICAgIH07XG5cbiAgICAgIGlmIChhdXRvVmFsdWUpIHtcbiAgICAgICAgLy8gd2hlbiB5b3Ugd2FudCBzYW1lIGF1dG8gZ2VuZXJhdGUgdmFsdWVcbiAgICAgICAgLy8gYW5kIG5vdCBhbGxvdyBlZGl0LCBmb3IgZXhhbXBsZSBJRCBmaWVsZFxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVycm9yID0gdmFsaWRhdGVTdGF0ZVtmaWVsZF0gP1xuICAgICAgICAoPHNwYW4gY2xhc3NOYW1lPSdoZWxwLWJsb2NrIGJnLWRhbmdlcic+eyB2YWxpZGF0ZVN0YXRlW2ZpZWxkXSB9PC9zcGFuPikgOlxuICAgICAgICBudWxsO1xuXG4gICAgICAvLyBsZXQgZWRpdG9yID0gRWRpdG9yKGVkaXRhYmxlLGF0dHIsZm9ybWF0KTtcbiAgICAgIC8vIGlmKGVkaXRvci5wcm9wcy50eXBlICYmIGVkaXRvci5wcm9wcy50eXBlID09ICdjaGVja2JveCcpe1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9J2Zvcm0tZ3JvdXAnIGtleT17IGZpZWxkIH0+XG4gICAgICAgICAgPGxhYmVsPnsgbmFtZSB9PC9sYWJlbD5cbiAgICAgICAgICB7IGVkaXRvcihlZGl0YWJsZSwgYXR0ciwgZm9ybWF0LCAnJykgfVxuICAgICAgICAgIHsgZXJyb3IgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfSk7XG4gICAgY29uc3QgbW9kYWxDbGFzcyA9IGNsYXNzU2V0KCdtb2RhbCcsICdmYWRlJywgdGhpcy5tb2RhbENsYXNzTmFtZSwge1xuICAgICAgLy8gaGFjayBwcmV2ZW50IGJvb3RzdHJhcCBtb2RhbCBoaWRlIGJ5IHJlUmVuZGVyXG4gICAgICAnaW4nOiBzaGFrZUVkaXRvciB8fCB0aGlzLnN0YXRlLnZhbGlkYXRlU3RhdGVcbiAgICB9KTtcbiAgICBjb25zdCBkaWFsb2dDbGFzcyA9IGNsYXNzU2V0KCdtb2RhbC1kaWFsb2cnLCAnbW9kYWwtc20nLCB7XG4gICAgICAnYW5pbWF0ZWQnOiBzaGFrZUVkaXRvcixcbiAgICAgICdzaGFrZSc6IHNoYWtlRWRpdG9yXG4gICAgfSk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgcmVmPSdtb2RhbCcgY2xhc3NOYW1lPXsgbW9kYWxDbGFzcyB9IHRhYkluZGV4PSctMScgcm9sZT0nZGlhbG9nJz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9eyBkaWFsb2dDbGFzcyB9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtb2RhbC1jb250ZW50Jz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtb2RhbC1oZWFkZXInPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9J2J1dHRvbidcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9J2Nsb3NlJ1xuICAgICAgICAgICAgICAgIGRhdGEtZGlzbWlzcz0nbW9kYWwnXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0nQ2xvc2UnPlxuICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPSd0cnVlJz4mdGltZXM7PC9zcGFuPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGg0IGNsYXNzTmFtZT0nbW9kYWwtdGl0bGUnPk5ldyBSZWNvcmQ8L2g0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbW9kYWwtYm9keSc+XG4gICAgICAgICAgICAgIDxmb3JtIHJlZj0nZm9ybSc+XG4gICAgICAgICAgICAgIHsgaW5wdXRGaWVsZCB9XG4gICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J21vZGFsLWZvb3Rlcic+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT0nYnRuIGJ0bi1kZWZhdWx0J1xuICAgICAgICAgICAgICAgIGRhdGEtZGlzbWlzcz0nbW9kYWwnPlxuICAgICAgICAgICAgICAgIENsb3NlXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9J2J1dHRvbidcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9J2J0biBidG4taW5mbydcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsgdGhpcy5oYW5kbGVTYXZlQnRuQ2xpY2sgfT5cbiAgICAgICAgICAgICAgICBTYXZlXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5Ub29sQmFyLnByb3BUeXBlcyA9IHtcbiAgb25BZGRSb3c6IFByb3BUeXBlcy5mdW5jLFxuICBvbkRyb3BSb3c6IFByb3BUeXBlcy5mdW5jLFxuICBvblNob3dPbmx5U2VsZWN0ZWQ6IFByb3BUeXBlcy5mdW5jLFxuICBlbmFibGVJbnNlcnQ6IFByb3BUeXBlcy5ib29sLFxuICBlbmFibGVEZWxldGU6IFByb3BUeXBlcy5ib29sLFxuICBlbmFibGVTZWFyY2g6IFByb3BUeXBlcy5ib29sLFxuICBlbmFibGVTaG93T25seVNlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgY29sdW1uczogUHJvcFR5cGVzLmFycmF5LFxuICBzZWFyY2hQbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2xlYXJTZWFyY2g6IFByb3BUeXBlcy5ib29sXG59O1xuXG5Ub29sQmFyLmRlZmF1bHRQcm9wcyA9IHtcbiAgZW5hYmxlSW5zZXJ0OiBmYWxzZSxcbiAgZW5hYmxlRGVsZXRlOiBmYWxzZSxcbiAgZW5hYmxlU2VhcmNoOiBmYWxzZSxcbiAgZW5hYmxlU2hvd09ubHlTZWxlY3RlZDogZmFsc2UsXG4gIGNsZWFyU2VhcmNoOiBmYWxzZVxufTtcblxuZXhwb3J0IGRlZmF1bHQgVG9vbEJhcjtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL3Rvb2xiYXIvVG9vbEJhci5qc1xuICoqLyIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFByb3BUeXBlcyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBDb25zdCBmcm9tICcuL0NvbnN0JztcbmltcG9ydCBjbGFzc1NldCBmcm9tICdjbGFzc25hbWVzJztcblxuY2xhc3MgVGFibGVGaWx0ZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuZmlsdGVyT2JqID0ge307XG4gIH1cblxuICBoYW5kbGVLZXlVcCA9IGUgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUsIG5hbWUgfSA9IGUuY3VycmVudFRhcmdldDtcbiAgICBpZiAodmFsdWUudHJpbSgpID09PSAnJykge1xuICAgICAgZGVsZXRlIHRoaXMuZmlsdGVyT2JqW25hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlck9ialtuYW1lXSA9IHZhbHVlO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLm9uRmlsdGVyKHRoaXMuZmlsdGVyT2JqKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IHN0cmlwZWQsIGNvbmRlbnNlZCwgcm93U2VsZWN0VHlwZSwgY29sdW1ucyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB0YWJsZUNsYXNzZXMgPSBjbGFzc1NldCgndGFibGUnLCB7XG4gICAgICAndGFibGUtc3RyaXBlZCc6IHN0cmlwZWQsXG4gICAgICAndGFibGUtY29uZGVuc2VkJzogY29uZGVuc2VkXG4gICAgfSk7XG4gICAgbGV0IHNlbGVjdFJvd0hlYWRlciA9IG51bGw7XG5cbiAgICBpZiAocm93U2VsZWN0VHlwZSA9PT0gQ29uc3QuUk9XX1NFTEVDVF9TSU5HTEUgfHxcbiAgICAgICAgcm93U2VsZWN0VHlwZSA9PT0gQ29uc3QuUk9XX1NFTEVDVF9NVUxUSSkge1xuICAgICAgY29uc3Qgc3R5bGUgPSB7XG4gICAgICAgIHdpZHRoOiAzNSxcbiAgICAgICAgcGFkZGluZ0xlZnQ6IDAsXG4gICAgICAgIHBhZGRpbmdSaWdodDogMFxuICAgICAgfTtcbiAgICAgIHNlbGVjdFJvd0hlYWRlciA9ICg8dGggc3R5bGU9eyBzdHlsZSB9IGtleT17IC0xIH0+RmlsdGVyPC90aD4pO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlckZpZWxkID0gY29sdW1ucy5tYXAoZnVuY3Rpb24oY29sdW1uKSB7XG4gICAgICBjb25zdCB7IGhpZGRlbiwgd2lkdGgsIG5hbWUgfSA9IGNvbHVtbjtcbiAgICAgIGNvbnN0IHRoU3R5bGUgPSB7XG4gICAgICAgIGRpc3BsYXk6IGhpZGRlbiA/ICdub25lJyA6IG51bGwsXG4gICAgICAgIHdpZHRoXG4gICAgICB9O1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHRoIGtleT17IG5hbWUgfSBzdHlsZT17IHRoU3R5bGUgfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ndGgtaW5uZXIgdGFibGUtaGVhZGVyLWNvbHVtbic+XG4gICAgICAgICAgICA8aW5wdXQgc2l6ZT0nMTAnIHR5cGU9J3RleHQnXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXsgbmFtZSB9IG5hbWU9eyBuYW1lIH0gb25LZXlVcD17IHRoaXMuaGFuZGxlS2V5VXAgfS8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGg+XG4gICAgICApO1xuICAgIH0sIHRoaXMpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDx0YWJsZSBjbGFzc05hbWU9eyB0YWJsZUNsYXNzZXMgfSBzdHlsZT17IHsgbWFyZ2luVG9wOiA1IH0gfT5cbiAgICAgICAgPHRoZWFkPlxuICAgICAgICAgIDx0ciBzdHlsZT17IHsgYm9yZGVyQm90dG9tU3R5bGU6ICdoaWRkZW4nIH0gfT5cbiAgICAgICAgICAgIHsgc2VsZWN0Um93SGVhZGVyIH17IGZpbHRlckZpZWxkIH1cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgPC90YWJsZT5cbiAgICApO1xuICB9XG59XG5UYWJsZUZpbHRlci5wcm9wVHlwZXMgPSB7XG4gIGNvbHVtbnM6IFByb3BUeXBlcy5hcnJheSxcbiAgcm93U2VsZWN0VHlwZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25GaWx0ZXI6IFByb3BUeXBlcy5mdW5jXG59O1xuZXhwb3J0IGRlZmF1bHQgVGFibGVGaWx0ZXI7XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9UYWJsZUZpbHRlci5qc1xuICoqLyIsIi8qIGVzbGludCBuby1uZXN0ZWQtdGVybmFyeTogMCAqL1xuLyogZXNsaW50IGd1YXJkLWZvci1pbjogMCAqL1xuLyogZXNsaW50IG5vLWNvbnNvbGU6IDAgKi9cbi8qIGVzbGludCBlcWVxZXE6IDAgKi9cbmltcG9ydCBDb25zdCBmcm9tICcuLi9Db25zdCc7XG5jb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG5cbmZ1bmN0aW9uIF9zb3J0KGFyciwgc29ydEZpZWxkLCBvcmRlciwgc29ydEZ1bmMpIHtcbiAgb3JkZXIgPSBvcmRlci50b0xvd2VyQ2FzZSgpO1xuICBhcnIuc29ydCgoYSwgYikgPT4ge1xuICAgIGlmIChzb3J0RnVuYykge1xuICAgICAgcmV0dXJuIHNvcnRGdW5jKGEsIGIsIG9yZGVyLCBzb3J0RmllbGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3JkZXIgPT09IENvbnN0LlNPUlRfREVTQykge1xuICAgICAgICByZXR1cm4gYVtzb3J0RmllbGRdID4gYltzb3J0RmllbGRdID8gLTEgOiAoKGFbc29ydEZpZWxkXSA8IGJbc29ydEZpZWxkXSkgPyAxIDogMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYVtzb3J0RmllbGRdIDwgYltzb3J0RmllbGRdID8gLTEgOiAoKGFbc29ydEZpZWxkXSA+IGJbc29ydEZpZWxkXSkgPyAxIDogMCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gYXJyO1xufVxuXG5leHBvcnQgY2xhc3MgVGFibGVEYXRhU2V0IGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IoZGF0YSkge1xuICAgIHN1cGVyKGRhdGEpO1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gIH1cblxuICBzZXREYXRhKGRhdGEpIHtcbiAgICB0aGlzLmVtaXQoJ2NoYW5nZScsIGRhdGEpO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5kYXRhID0gbnVsbDtcbiAgfVxuXG4gIGdldERhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGFibGVEYXRhU3RvcmUge1xuXG4gIGNvbnN0cnVjdG9yKGRhdGEpIHtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMuY29sSW5mb3MgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyZWREYXRhID0gbnVsbDtcbiAgICB0aGlzLmlzT25GaWx0ZXIgPSBmYWxzZTtcbiAgICB0aGlzLmZpbHRlck9iaiA9IG51bGw7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gbnVsbDtcbiAgICB0aGlzLnNvcnRPYmogPSBudWxsO1xuICAgIHRoaXMucGFnZU9iaiA9IHt9O1xuICAgIHRoaXMuc2VsZWN0ZWQgPSBbXTtcbiAgICB0aGlzLm11bHRpQ29sdW1uU2VhcmNoID0gZmFsc2U7XG4gICAgdGhpcy5zaG93T25seVNlbGVjdGVkID0gZmFsc2U7XG4gICAgdGhpcy5yZW1vdGUgPSBmYWxzZTsgLy8gcmVtb3RlIGRhdGFcbiAgfVxuXG4gIHNldFByb3BzKHByb3BzKSB7XG4gICAgdGhpcy5rZXlGaWVsZCA9IHByb3BzLmtleUZpZWxkO1xuICAgIHRoaXMuZW5hYmxlUGFnaW5hdGlvbiA9IHByb3BzLmlzUGFnaW5hdGlvbjtcbiAgICB0aGlzLmNvbEluZm9zID0gcHJvcHMuY29sSW5mb3M7XG4gICAgdGhpcy5yZW1vdGUgPSBwcm9wcy5yZW1vdGU7XG4gICAgdGhpcy5tdWx0aUNvbHVtblNlYXJjaCA9IHByb3BzLm11bHRpQ29sdW1uU2VhcmNoO1xuICB9XG5cbiAgc2V0RGF0YShkYXRhKSB7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICBpZiAodGhpcy5pc09uRmlsdGVyKSB7XG4gICAgICBpZiAodGhpcy5maWx0ZXJPYmogIT09IG51bGwpIHRoaXMuZmlsdGVyKHRoaXMuZmlsdGVyT2JqKTtcbiAgICAgIGlmICh0aGlzLnNlYXJjaFRleHQgIT09IG51bGwpIHRoaXMuc2VhcmNoKHRoaXMuc2VhcmNoVGV4dCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNvcnRPYmopIHtcbiAgICAgIHRoaXMuc29ydCh0aGlzLnNvcnRPYmoub3JkZXIsIHRoaXMuc29ydE9iai5zb3J0RmllbGQpO1xuICAgIH1cbiAgfVxuXG4gIGdldFNvcnRJbmZvKCkge1xuICAgIHJldHVybiB0aGlzLnNvcnRPYmo7XG4gIH1cblxuICBzZXRTZWxlY3RlZFJvd0tleShzZWxlY3RlZFJvd0tleXMpIHtcbiAgICB0aGlzLnNlbGVjdGVkID0gc2VsZWN0ZWRSb3dLZXlzO1xuICB9XG5cbiAgZ2V0U2VsZWN0ZWRSb3dLZXlzKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkO1xuICB9XG5cbiAgZ2V0Q3VycmVudERpc3BsYXlEYXRhKCkge1xuICAgIGlmICh0aGlzLmlzT25GaWx0ZXIpIHJldHVybiB0aGlzLmZpbHRlcmVkRGF0YTtcbiAgICBlbHNlIHJldHVybiB0aGlzLmRhdGE7XG4gIH1cblxuICBpZ25vcmVOb25TZWxlY3RlZCgpIHtcbiAgICB0aGlzLnNob3dPbmx5U2VsZWN0ZWQgPSAhdGhpcy5zaG93T25seVNlbGVjdGVkO1xuICAgIGlmICh0aGlzLnNob3dPbmx5U2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuaXNPbkZpbHRlciA9IHRydWU7XG4gICAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IHRoaXMuZGF0YS5maWx0ZXIoIHJvdyA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc2VsZWN0ZWQuZmluZCh4ID0+IHJvd1t0aGlzLmtleUZpZWxkXSA9PT0geCk7XG4gICAgICAgIHJldHVybiB0eXBlb2YgcmVzdWx0ICE9PSAndW5kZWZpbmVkJyA/IHRydWUgOiBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzT25GaWx0ZXIgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBzb3J0KG9yZGVyLCBzb3J0RmllbGQpIHtcbiAgICB0aGlzLnNvcnRPYmogPSB7IG9yZGVyLCBzb3J0RmllbGQgfTtcblxuICAgIGxldCBjdXJyZW50RGlzcGxheURhdGEgPSB0aGlzLmdldEN1cnJlbnREaXNwbGF5RGF0YSgpO1xuICAgIGlmICghdGhpcy5jb2xJbmZvc1tzb3J0RmllbGRdKSByZXR1cm4gdGhpcztcblxuICAgIGNvbnN0IHsgc29ydEZ1bmMgfSA9IHRoaXMuY29sSW5mb3Nbc29ydEZpZWxkXTtcbiAgICBjdXJyZW50RGlzcGxheURhdGEgPSBfc29ydChjdXJyZW50RGlzcGxheURhdGEsIHNvcnRGaWVsZCwgb3JkZXIsIHNvcnRGdW5jKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcGFnZShwYWdlLCBzaXplUGVyUGFnZSkge1xuICAgIHRoaXMucGFnZU9iai5lbmQgPSBwYWdlICogc2l6ZVBlclBhZ2UgLSAxO1xuICAgIHRoaXMucGFnZU9iai5zdGFydCA9IHRoaXMucGFnZU9iai5lbmQgLSAoc2l6ZVBlclBhZ2UgLSAxKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGVkaXQobmV3VmFsLCByb3dJbmRleCwgZmllbGROYW1lKSB7XG4gICAgY29uc3QgY3VycmVudERpc3BsYXlEYXRhID0gdGhpcy5nZXRDdXJyZW50RGlzcGxheURhdGEoKTtcbiAgICBsZXQgcm93S2V5Q2FjaGU7XG4gICAgaWYgKCF0aGlzLmVuYWJsZVBhZ2luYXRpb24pIHtcbiAgICAgIGN1cnJlbnREaXNwbGF5RGF0YVtyb3dJbmRleF1bZmllbGROYW1lXSA9IG5ld1ZhbDtcbiAgICAgIHJvd0tleUNhY2hlID0gY3VycmVudERpc3BsYXlEYXRhW3Jvd0luZGV4XVt0aGlzLmtleUZpZWxkXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudERpc3BsYXlEYXRhW3RoaXMucGFnZU9iai5zdGFydCArIHJvd0luZGV4XVtmaWVsZE5hbWVdID0gbmV3VmFsO1xuICAgICAgcm93S2V5Q2FjaGUgPSBjdXJyZW50RGlzcGxheURhdGFbdGhpcy5wYWdlT2JqLnN0YXJ0ICsgcm93SW5kZXhdW3RoaXMua2V5RmllbGRdO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc09uRmlsdGVyKSB7XG4gICAgICB0aGlzLmRhdGEuZm9yRWFjaChmdW5jdGlvbihyb3cpIHtcbiAgICAgICAgaWYgKHJvd1t0aGlzLmtleUZpZWxkXSA9PT0gcm93S2V5Q2FjaGUpIHtcbiAgICAgICAgICByb3dbZmllbGROYW1lXSA9IG5ld1ZhbDtcbiAgICAgICAgfVxuICAgICAgfSwgdGhpcyk7XG4gICAgICBpZiAodGhpcy5maWx0ZXJPYmogIT09IG51bGwpIHRoaXMuZmlsdGVyKHRoaXMuZmlsdGVyT2JqKTtcbiAgICAgIGlmICh0aGlzLnNlYXJjaFRleHQgIT09IG51bGwpIHRoaXMuc2VhcmNoKHRoaXMuc2VhcmNoVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYWRkQXRCZWdpbihuZXdPYmopIHtcbiAgICBpZiAoIW5ld09ialt0aGlzLmtleUZpZWxkXSB8fCBuZXdPYmpbdGhpcy5rZXlGaWVsZF0udG9TdHJpbmcoKSA9PT0gJycpIHtcbiAgICAgIHRocm93IGAke3RoaXMua2V5RmllbGR9IGNhbid0IGJlIGVtcHR5IHZhbHVlLmA7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnREaXNwbGF5RGF0YSA9IHRoaXMuZ2V0Q3VycmVudERpc3BsYXlEYXRhKCk7XG4gICAgY3VycmVudERpc3BsYXlEYXRhLmZvckVhY2goZnVuY3Rpb24ocm93KSB7XG4gICAgICBpZiAocm93W3RoaXMua2V5RmllbGRdLnRvU3RyaW5nKCkgPT09IG5ld09ialt0aGlzLmtleUZpZWxkXS50b1N0cmluZygpKSB7XG4gICAgICAgIHRocm93IGAke3RoaXMua2V5RmllbGR9ICR7bmV3T2JqW3RoaXMua2V5RmllbGRdfSBhbHJlYWR5IGV4aXN0c2A7XG4gICAgICB9XG4gICAgfSwgdGhpcyk7XG4gICAgY3VycmVudERpc3BsYXlEYXRhLnVuc2hpZnQobmV3T2JqKTtcbiAgICBpZiAodGhpcy5pc09uRmlsdGVyKSB7XG4gICAgICB0aGlzLmRhdGEudW5zaGlmdChuZXdPYmopO1xuICAgIH1cbiAgfVxuXG4gIGFkZChuZXdPYmopIHtcbiAgICBpZiAoIW5ld09ialt0aGlzLmtleUZpZWxkXSB8fCBuZXdPYmpbdGhpcy5rZXlGaWVsZF0udG9TdHJpbmcoKSA9PT0gJycpIHtcbiAgICAgIHRocm93IGAke3RoaXMua2V5RmllbGR9IGNhbid0IGJlIGVtcHR5IHZhbHVlLmA7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnREaXNwbGF5RGF0YSA9IHRoaXMuZ2V0Q3VycmVudERpc3BsYXlEYXRhKCk7XG4gICAgY3VycmVudERpc3BsYXlEYXRhLmZvckVhY2goZnVuY3Rpb24ocm93KSB7XG4gICAgICBpZiAocm93W3RoaXMua2V5RmllbGRdLnRvU3RyaW5nKCkgPT09IG5ld09ialt0aGlzLmtleUZpZWxkXS50b1N0cmluZygpKSB7XG4gICAgICAgIHRocm93IGAke3RoaXMua2V5RmllbGR9ICR7bmV3T2JqW3RoaXMua2V5RmllbGRdfSBhbHJlYWR5IGV4aXN0c2A7XG4gICAgICB9XG4gICAgfSwgdGhpcyk7XG5cbiAgICBjdXJyZW50RGlzcGxheURhdGEucHVzaChuZXdPYmopO1xuICAgIGlmICh0aGlzLmlzT25GaWx0ZXIpIHtcbiAgICAgIHRoaXMuZGF0YS5wdXNoKG5ld09iaik7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlKHJvd0tleSkge1xuICAgIGNvbnN0IGN1cnJlbnREaXNwbGF5RGF0YSA9IHRoaXMuZ2V0Q3VycmVudERpc3BsYXlEYXRhKCk7XG4gICAgY29uc3QgcmVzdWx0ID0gY3VycmVudERpc3BsYXlEYXRhLmZpbHRlcihyb3cgPT4ge1xuICAgICAgcmV0dXJuIHJvd0tleS5pbmRleE9mKHJvd1t0aGlzLmtleUZpZWxkXSkgPT09IC0xO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuaXNPbkZpbHRlcikge1xuICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLmZpbHRlcihyb3cgPT4ge1xuICAgICAgICByZXR1cm4gcm93S2V5LmluZGV4T2Yocm93W3RoaXMua2V5RmllbGRdKSA9PT0gLTE7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGEgPSByZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgZmlsdGVyKGZpbHRlck9iaikge1xuICAgIGlmIChPYmplY3Qua2V5cyhmaWx0ZXJPYmopLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSBudWxsO1xuICAgICAgdGhpcy5pc09uRmlsdGVyID0gZmFsc2U7XG4gICAgICB0aGlzLmZpbHRlck9iaiA9IG51bGw7XG4gICAgICBpZiAodGhpcy5zZWFyY2hUZXh0ICE9PSBudWxsKSB0aGlzLnNlYXJjaCh0aGlzLnNlYXJjaFRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlck9iaiA9IGZpbHRlck9iajtcbiAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gdGhpcy5kYXRhLmZpbHRlciggcm93ID0+IHtcbiAgICAgICAgbGV0IHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgbGV0IGZpbHRlclZhbDtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZmlsdGVyT2JqKSB7XG4gICAgICAgICAgbGV0IHRhcmdldFZhbCA9IHJvd1trZXldO1xuXG4gICAgICAgICAgc3dpdGNoIChmaWx0ZXJPYmpba2V5XS50eXBlKSB7XG4gICAgICAgICAgY2FzZSBDb25zdC5GSUxURVJfVFlQRS5OVU1CRVI6IHtcbiAgICAgICAgICAgIGZpbHRlclZhbCA9IGZpbHRlck9ialtrZXldLnZhbHVlLm51bWJlcjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIENvbnN0LkZJTFRFUl9UWVBFLkNVU1RPTToge1xuICAgICAgICAgICAgZmlsdGVyVmFsID0gKHR5cGVvZiBmaWx0ZXJPYmpba2V5XS52YWx1ZSA9PT0gJ29iamVjdCcpID9cbiAgICAgICAgICAgICAgdW5kZWZpbmVkIDpcbiAgICAgICAgICAgICAgKHR5cGVvZiBmaWx0ZXJPYmpba2V5XS52YWx1ZSA9PT0gJ3N0cmluZycpID9cbiAgICAgICAgICAgICAgICBmaWx0ZXJPYmpba2V5XS52YWx1ZS50b0xvd2VyQ2FzZSgpIDpcbiAgICAgICAgICAgICAgICBmaWx0ZXJPYmpba2V5XS52YWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIENvbnN0LkZJTFRFUl9UWVBFLlJFR0VYOiB7XG4gICAgICAgICAgICBmaWx0ZXJWYWwgPSBmaWx0ZXJPYmpba2V5XS52YWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBmaWx0ZXJWYWwgPSAodHlwZW9mIGZpbHRlck9ialtrZXldLnZhbHVlID09PSAnc3RyaW5nJykgP1xuICAgICAgICAgICAgICBmaWx0ZXJPYmpba2V5XS52YWx1ZS50b0xvd2VyQ2FzZSgpIDpcbiAgICAgICAgICAgICAgZmlsdGVyT2JqW2tleV0udmFsdWU7XG4gICAgICAgICAgICBpZiAoZmlsdGVyVmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgLy8gU3VwcG9ydCBvbGQgZmlsdGVyXG4gICAgICAgICAgICAgIGZpbHRlclZhbCA9IGZpbHRlck9ialtrZXldLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMuY29sSW5mb3Nba2V5XSkge1xuICAgICAgICAgICAgY29uc3QgeyBmb3JtYXQsIGZpbHRlckZvcm1hdHRlZCwgZm9ybWF0RXh0cmFEYXRhIH0gPSB0aGlzLmNvbEluZm9zW2tleV07XG4gICAgICAgICAgICBpZiAoZmlsdGVyRm9ybWF0dGVkICYmIGZvcm1hdCkge1xuICAgICAgICAgICAgICB0YXJnZXRWYWwgPSBmb3JtYXQocm93W2tleV0sIHJvdywgZm9ybWF0RXh0cmFEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzd2l0Y2ggKGZpbHRlck9ialtrZXldLnR5cGUpIHtcbiAgICAgICAgICBjYXNlIENvbnN0LkZJTFRFUl9UWVBFLk5VTUJFUjoge1xuICAgICAgICAgICAgdmFsaWQgPSB0aGlzLmZpbHRlck51bWJlcih0YXJnZXRWYWwsIGZpbHRlclZhbCwgZmlsdGVyT2JqW2tleV0udmFsdWUuY29tcGFyYXRvcik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBDb25zdC5GSUxURVJfVFlQRS5EQVRFOiB7XG4gICAgICAgICAgICB2YWxpZCA9IHRoaXMuZmlsdGVyRGF0ZSh0YXJnZXRWYWwsIGZpbHRlclZhbCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBDb25zdC5GSUxURVJfVFlQRS5SRUdFWDoge1xuICAgICAgICAgICAgdmFsaWQgPSB0aGlzLmZpbHRlclJlZ2V4KHRhcmdldFZhbCwgZmlsdGVyVmFsKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIENvbnN0LkZJTFRFUl9UWVBFLkNVU1RPTToge1xuICAgICAgICAgICAgdmFsaWQgPSB0aGlzLmZpbHRlckN1c3RvbSh0YXJnZXRWYWwsIGZpbHRlclZhbCwgZmlsdGVyT2JqW2tleV0udmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIHZhbGlkID0gdGhpcy5maWx0ZXJUZXh0KHRhcmdldFZhbCwgZmlsdGVyVmFsKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWxpZDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5pc09uRmlsdGVyID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBmaWx0ZXJOdW1iZXIodGFyZ2V0VmFsLCBmaWx0ZXJWYWwsIGNvbXBhcmF0b3IpIHtcbiAgICBsZXQgdmFsaWQgPSB0cnVlO1xuICAgIHN3aXRjaCAoY29tcGFyYXRvcikge1xuICAgIGNhc2UgJz0nOiB7XG4gICAgICBpZiAodGFyZ2V0VmFsICE9IGZpbHRlclZhbCkge1xuICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgJz4nOiB7XG4gICAgICBpZiAodGFyZ2V0VmFsIDw9IGZpbHRlclZhbCkge1xuICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgJz49Jzoge1xuICAgICAgaWYgKHRhcmdldFZhbCA8IGZpbHRlclZhbCkge1xuICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgJzwnOiB7XG4gICAgICBpZiAodGFyZ2V0VmFsID49IGZpbHRlclZhbCkge1xuICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgJzw9Jzoge1xuICAgICAgaWYgKHRhcmdldFZhbCA+IGZpbHRlclZhbCkge1xuICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgJyE9Jzoge1xuICAgICAgaWYgKHRhcmdldFZhbCA9PSBmaWx0ZXJWYWwpIHtcbiAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICBjb25zb2xlLmVycm9yKCdOdW1iZXIgY29tcGFyYXRvciBwcm92aWRlZCBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWxpZDtcbiAgfVxuXG4gIGZpbHRlckRhdGUodGFyZ2V0VmFsLCBmaWx0ZXJWYWwpIHtcbiAgICByZXR1cm4gKHRhcmdldFZhbC5nZXREYXRlKCkgPT09IGZpbHRlclZhbC5nZXREYXRlKCkgJiZcbiAgICAgICAgdGFyZ2V0VmFsLmdldE1vbnRoKCkgPT09IGZpbHRlclZhbC5nZXRNb250aCgpICYmXG4gICAgICAgIHRhcmdldFZhbC5nZXRGdWxsWWVhcigpID09PSBmaWx0ZXJWYWwuZ2V0RnVsbFllYXIoKSk7XG4gIH1cblxuICBmaWx0ZXJSZWdleCh0YXJnZXRWYWwsIGZpbHRlclZhbCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gbmV3IFJlZ0V4cChmaWx0ZXJWYWwsICdpJykudGVzdCh0YXJnZXRWYWwpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ludmFsaWQgcmVndWxhciBleHByZXNzaW9uJyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBmaWx0ZXJDdXN0b20odGFyZ2V0VmFsLCBmaWx0ZXJWYWwsIGNhbGxiYWNrSW5mbykge1xuICAgIGlmIChjYWxsYmFja0luZm8gIT09IG51bGwgJiYgdHlwZW9mIGNhbGxiYWNrSW5mbyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBjYWxsYmFja0luZm8uY2FsbGJhY2sodGFyZ2V0VmFsLCBjYWxsYmFja0luZm8uY2FsbGJhY2tQYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5maWx0ZXJUZXh0KHRhcmdldFZhbCwgZmlsdGVyVmFsKTtcbiAgfVxuXG4gIGZpbHRlclRleHQodGFyZ2V0VmFsLCBmaWx0ZXJWYWwpIHtcbiAgICBpZiAodGFyZ2V0VmFsLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKGZpbHRlclZhbCkgPT09IC0xKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyogR2VuZXJhbCBzZWFyY2ggZnVuY3Rpb25cbiAgICogSXQgd2lsbCBzZWFyY2ggZm9yIHRoZSB0ZXh0IGlmIHRoZSBpbnB1dCBpbmNsdWRlcyB0aGF0IHRleHQ7XG4gICAqL1xuICBzZWFyY2goc2VhcmNoVGV4dCkge1xuICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gbnVsbDtcbiAgICAgIHRoaXMuaXNPbkZpbHRlciA9IGZhbHNlO1xuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gbnVsbDtcbiAgICAgIGlmICh0aGlzLmZpbHRlck9iaiAhPT0gbnVsbCkgdGhpcy5maWx0ZXIodGhpcy5maWx0ZXJPYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlYXJjaFRleHQgPSBzZWFyY2hUZXh0O1xuICAgICAgbGV0IHNlYXJjaFRleHRBcnJheSA9IFtdO1xuXG4gICAgICBpZiAodGhpcy5tdWx0aUNvbHVtblNlYXJjaCkge1xuICAgICAgICBzZWFyY2hUZXh0QXJyYXkgPSBzZWFyY2hUZXh0LnNwbGl0KCcgJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWFyY2hUZXh0QXJyYXkucHVzaChzZWFyY2hUZXh0KTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc291cmNlID0gdGhpcy5pc09uRmlsdGVyID8gdGhpcy5maWx0ZXJlZERhdGEgOiB0aGlzLmRhdGE7XG5cbiAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gc291cmNlLmZpbHRlciggcm93ID0+IHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJvdyk7XG4gICAgICAgIGxldCB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAvLyBmb3IgbG9vcHMgYXJlIHVnbHksIGJ1dCBwZXJmb3JtYW5jZSBtYXR0ZXJzIGhlcmUuXG4gICAgICAgIC8vIEFuZCB5b3UgY2FudCBicmVhayBmcm9tIGEgZm9yRWFjaC5cbiAgICAgICAgLy8gaHR0cDovL2pzcGVyZi5jb20vZm9yLXZzLWZvcmVhY2gvNjZcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGtleXNMZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGtleXNMZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICAgICAgaWYgKHRoaXMuY29sSW5mb3Nba2V5XSAmJiByb3dba2V5XSkge1xuICAgICAgICAgICAgY29uc3QgeyBmb3JtYXQsIGZpbHRlckZvcm1hdHRlZCwgZm9ybWF0RXh0cmFEYXRhLCBzZWFyY2hhYmxlIH0gPSB0aGlzLmNvbEluZm9zW2tleV07XG4gICAgICAgICAgICBsZXQgdGFyZ2V0VmFsID0gcm93W2tleV07XG4gICAgICAgICAgICBpZiAoc2VhcmNoYWJsZSkge1xuICAgICAgICAgICAgICBpZiAoZmlsdGVyRm9ybWF0dGVkICYmIGZvcm1hdCkge1xuICAgICAgICAgICAgICAgIHRhcmdldFZhbCA9IGZvcm1hdCh0YXJnZXRWYWwsIHJvdywgZm9ybWF0RXh0cmFEYXRhKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMCwgdGV4dExlbmd0aCA9IHNlYXJjaFRleHRBcnJheS5sZW5ndGg7IGogPCB0ZXh0TGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJWYWwgPSBzZWFyY2hUZXh0QXJyYXlbal0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0VmFsLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKGZpbHRlclZhbCkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICB2YWxpZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmlzT25GaWx0ZXIgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGdldERhdGFJZ25vcmluZ1BhZ2luYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q3VycmVudERpc3BsYXlEYXRhKCk7XG4gIH1cblxuICBnZXQoKSB7XG4gICAgY29uc3QgX2RhdGEgPSB0aGlzLmdldEN1cnJlbnREaXNwbGF5RGF0YSgpO1xuXG4gICAgaWYgKF9kYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuIF9kYXRhO1xuXG4gICAgaWYgKHRoaXMucmVtb3RlIHx8ICF0aGlzLmVuYWJsZVBhZ2luYXRpb24pIHtcbiAgICAgIHJldHVybiBfZGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICBmb3IgKGxldCBpID0gdGhpcy5wYWdlT2JqLnN0YXJ0OyBpIDw9IHRoaXMucGFnZU9iai5lbmQ7IGkrKykge1xuICAgICAgICByZXN1bHQucHVzaChfZGF0YVtpXSk7XG4gICAgICAgIGlmIChpICsgMSA9PT0gX2RhdGEubGVuZ3RoKSBicmVhaztcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0S2V5RmllbGQoKSB7XG4gICAgcmV0dXJuIHRoaXMua2V5RmllbGQ7XG4gIH1cblxuICBnZXREYXRhTnVtKCkge1xuICAgIHJldHVybiB0aGlzLmdldEN1cnJlbnREaXNwbGF5RGF0YSgpLmxlbmd0aDtcbiAgfVxuXG4gIGlzQ2hhbmdlZFBhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFnZU9iai5zdGFydCAmJiB0aGlzLnBhZ2VPYmouZW5kID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG5cbiAgZ2V0QWxsUm93a2V5KCkge1xuICAgIHJldHVybiB0aGlzLmRhdGEubWFwKHJvdyA9PiB7XG4gICAgICByZXR1cm4gcm93W3RoaXMua2V5RmllbGRdO1xuICAgIH0pO1xuICB9XG59XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9zdG9yZS9UYWJsZURhdGFTdG9yZS5qc1xuICoqLyIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gIHRoaXMuX2V2ZW50cyA9IHRoaXMuX2V2ZW50cyB8fCB7fTtcbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gdGhpcy5fbWF4TGlzdGVuZXJzIHx8IHVuZGVmaW5lZDtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLnhcbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDtcblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG4vLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxuRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcblxuLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMgZnVuY3Rpb24gYWxsb3dzXG4vLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9yIHVubGltaXRlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24obikge1xuICBpZiAoIWlzTnVtYmVyKG4pIHx8IG4gPCAwIHx8IGlzTmFOKG4pKVxuICAgIHRocm93IFR5cGVFcnJvcignbiBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7XG4gIHRoaXMuX21heExpc3RlbmVycyA9IG47XG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24odHlwZSkge1xuICB2YXIgZXIsIGhhbmRsZXIsIGxlbiwgYXJncywgaSwgbGlzdGVuZXJzO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKVxuICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuXG4gIC8vIElmIHRoZXJlIGlzIG5vICdlcnJvcicgZXZlbnQgbGlzdGVuZXIgdGhlbiB0aHJvdy5cbiAgaWYgKHR5cGUgPT09ICdlcnJvcicpIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50cy5lcnJvciB8fFxuICAgICAgICAoaXNPYmplY3QodGhpcy5fZXZlbnRzLmVycm9yKSAmJiAhdGhpcy5fZXZlbnRzLmVycm9yLmxlbmd0aCkpIHtcbiAgICAgIGVyID0gYXJndW1lbnRzWzFdO1xuICAgICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gICAgICB9XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ1VuY2F1Z2h0LCB1bnNwZWNpZmllZCBcImVycm9yXCIgZXZlbnQuJyk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlciA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcblxuICBpZiAoaXNVbmRlZmluZWQoaGFuZGxlcikpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChpc0Z1bmN0aW9uKGhhbmRsZXIpKSB7XG4gICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAvLyBmYXN0IGNhc2VzXG4gICAgICBjYXNlIDE6XG4gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzLCBhcmd1bWVudHNbMV0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgaGFuZGxlci5jYWxsKHRoaXMsIGFyZ3VtZW50c1sxXSwgYXJndW1lbnRzWzJdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICAvLyBzbG93ZXJcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICBoYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc09iamVjdChoYW5kbGVyKSkge1xuICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgIGxpc3RlbmVycyA9IGhhbmRsZXIuc2xpY2UoKTtcbiAgICBsZW4gPSBsaXN0ZW5lcnMubGVuZ3RoO1xuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICAgIGxpc3RlbmVyc1tpXS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBtO1xuXG4gIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpXG4gICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblxuICBpZiAoIXRoaXMuX2V2ZW50cylcbiAgICB0aGlzLl9ldmVudHMgPSB7fTtcblxuICAvLyBUbyBhdm9pZCByZWN1cnNpb24gaW4gdGhlIGNhc2UgdGhhdCB0eXBlID09PSBcIm5ld0xpc3RlbmVyXCIhIEJlZm9yZVxuICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3QgZW1pdCBcIm5ld0xpc3RlbmVyXCIuXG4gIGlmICh0aGlzLl9ldmVudHMubmV3TGlzdGVuZXIpXG4gICAgdGhpcy5lbWl0KCduZXdMaXN0ZW5lcicsIHR5cGUsXG4gICAgICAgICAgICAgIGlzRnVuY3Rpb24obGlzdGVuZXIubGlzdGVuZXIpID9cbiAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgOiBsaXN0ZW5lcik7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgLy8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBEb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXG4gICAgdGhpcy5fZXZlbnRzW3R5cGVdID0gbGlzdGVuZXI7XG4gIGVsc2UgaWYgKGlzT2JqZWN0KHRoaXMuX2V2ZW50c1t0eXBlXSkpXG4gICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gYXJyYXksIGp1c3QgYXBwZW5kLlxuICAgIHRoaXMuX2V2ZW50c1t0eXBlXS5wdXNoKGxpc3RlbmVyKTtcbiAgZWxzZVxuICAgIC8vIEFkZGluZyB0aGUgc2Vjb25kIGVsZW1lbnQsIG5lZWQgdG8gY2hhbmdlIHRvIGFycmF5LlxuICAgIHRoaXMuX2V2ZW50c1t0eXBlXSA9IFt0aGlzLl9ldmVudHNbdHlwZV0sIGxpc3RlbmVyXTtcblxuICAvLyBDaGVjayBmb3IgbGlzdGVuZXIgbGVha1xuICBpZiAoaXNPYmplY3QodGhpcy5fZXZlbnRzW3R5cGVdKSAmJiAhdGhpcy5fZXZlbnRzW3R5cGVdLndhcm5lZCkge1xuICAgIGlmICghaXNVbmRlZmluZWQodGhpcy5fbWF4TGlzdGVuZXJzKSkge1xuICAgICAgbSA9IHRoaXMuX21heExpc3RlbmVycztcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IEV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzO1xuICAgIH1cblxuICAgIGlmIChtICYmIG0gPiAwICYmIHRoaXMuX2V2ZW50c1t0eXBlXS5sZW5ndGggPiBtKSB7XG4gICAgICB0aGlzLl9ldmVudHNbdHlwZV0ud2FybmVkID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJyhub2RlKSB3YXJuaW5nOiBwb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5ICcgK1xuICAgICAgICAgICAgICAgICAgICAnbGVhayBkZXRlY3RlZC4gJWQgbGlzdGVuZXJzIGFkZGVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ1VzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0LicsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50c1t0eXBlXS5sZW5ndGgpO1xuICAgICAgaWYgKHR5cGVvZiBjb25zb2xlLnRyYWNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIG5vdCBzdXBwb3J0ZWQgaW4gSUUgMTBcbiAgICAgICAgY29uc29sZS50cmFjZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpXG4gICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblxuICB2YXIgZmlyZWQgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBnKCkge1xuICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgZyk7XG5cbiAgICBpZiAoIWZpcmVkKSB7XG4gICAgICBmaXJlZCA9IHRydWU7XG4gICAgICBsaXN0ZW5lci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfVxuXG4gIGcubGlzdGVuZXIgPSBsaXN0ZW5lcjtcbiAgdGhpcy5vbih0eXBlLCBnKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIGVtaXRzIGEgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZmYgdGhlIGxpc3RlbmVyIHdhcyByZW1vdmVkXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIpIHtcbiAgdmFyIGxpc3QsIHBvc2l0aW9uLCBsZW5ndGgsIGk7XG5cbiAgaWYgKCFpc0Z1bmN0aW9uKGxpc3RlbmVyKSlcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ2xpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgbGlzdCA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcbiAgbGVuZ3RoID0gbGlzdC5sZW5ndGg7XG4gIHBvc2l0aW9uID0gLTE7XG5cbiAgaWYgKGxpc3QgPT09IGxpc3RlbmVyIHx8XG4gICAgICAoaXNGdW5jdGlvbihsaXN0Lmxpc3RlbmVyKSAmJiBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikpIHtcbiAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuICAgIGlmICh0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdGVuZXIpO1xuXG4gIH0gZWxzZSBpZiAoaXNPYmplY3QobGlzdCkpIHtcbiAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSA+IDA7KSB7XG4gICAgICBpZiAobGlzdFtpXSA9PT0gbGlzdGVuZXIgfHxcbiAgICAgICAgICAobGlzdFtpXS5saXN0ZW5lciAmJiBsaXN0W2ldLmxpc3RlbmVyID09PSBsaXN0ZW5lcikpIHtcbiAgICAgICAgcG9zaXRpb24gPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocG9zaXRpb24gPCAwKVxuICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICAgIGxpc3QubGVuZ3RoID0gMDtcbiAgICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpc3Quc3BsaWNlKHBvc2l0aW9uLCAxKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3RlbmVyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbih0eXBlKSB7XG4gIHZhciBrZXksIGxpc3RlbmVycztcblxuICBpZiAoIXRoaXMuX2V2ZW50cylcbiAgICByZXR1cm4gdGhpcztcblxuICAvLyBub3QgbGlzdGVuaW5nIGZvciByZW1vdmVMaXN0ZW5lciwgbm8gbmVlZCB0byBlbWl0XG4gIGlmICghdGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLl9ldmVudHMgPSB7fTtcbiAgICBlbHNlIGlmICh0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gZW1pdCByZW1vdmVMaXN0ZW5lciBmb3IgYWxsIGxpc3RlbmVycyBvbiBhbGwgZXZlbnRzXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgZm9yIChrZXkgaW4gdGhpcy5fZXZlbnRzKSB7XG4gICAgICBpZiAoa2V5ID09PSAncmVtb3ZlTGlzdGVuZXInKSBjb250aW51ZTtcbiAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7XG4gICAgfVxuICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdyZW1vdmVMaXN0ZW5lcicpO1xuICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW3R5cGVdO1xuXG4gIGlmIChpc0Z1bmN0aW9uKGxpc3RlbmVycykpIHtcbiAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7XG4gIH0gZWxzZSBpZiAobGlzdGVuZXJzKSB7XG4gICAgLy8gTElGTyBvcmRlclxuICAgIHdoaWxlIChsaXN0ZW5lcnMubGVuZ3RoKVxuICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbbGlzdGVuZXJzLmxlbmd0aCAtIDFdKTtcbiAgfVxuICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbih0eXBlKSB7XG4gIHZhciByZXQ7XG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgcmV0ID0gW107XG4gIGVsc2UgaWYgKGlzRnVuY3Rpb24odGhpcy5fZXZlbnRzW3R5cGVdKSlcbiAgICByZXQgPSBbdGhpcy5fZXZlbnRzW3R5cGVdXTtcbiAgZWxzZVxuICAgIHJldCA9IHRoaXMuX2V2ZW50c1t0eXBlXS5zbGljZSgpO1xuICByZXR1cm4gcmV0O1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24odHlwZSkge1xuICBpZiAodGhpcy5fZXZlbnRzKSB7XG4gICAgdmFyIGV2bGlzdGVuZXIgPSB0aGlzLl9ldmVudHNbdHlwZV07XG5cbiAgICBpZiAoaXNGdW5jdGlvbihldmxpc3RlbmVyKSlcbiAgICAgIHJldHVybiAxO1xuICAgIGVsc2UgaWYgKGV2bGlzdGVuZXIpXG4gICAgICByZXR1cm4gZXZsaXN0ZW5lci5sZW5ndGg7XG4gIH1cbiAgcmV0dXJuIDA7XG59O1xuXG5FdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgcmV0dXJuIGVtaXR0ZXIubGlzdGVuZXJDb3VudCh0eXBlKTtcbn07XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBpc051bWJlcihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IHZvaWQgMDtcbn1cblxuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogKHdlYnBhY2spL34vbm9kZS1saWJzLWJyb3dzZXIvfi9ldmVudHMvZXZlbnRzLmpzXG4gKiogbW9kdWxlIGlkID0gMzRcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi9Db25zdCc7XG5pbXBvcnQgY2xhc3NTZXQgZnJvbSAnY2xhc3NuYW1lcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcmVuZGVyUmVhY3RTb3J0Q2FyZXQob3JkZXIpIHtcbiAgICBjb25zdCBvcmRlckNsYXNzID0gY2xhc3NTZXQoJ29yZGVyJywge1xuICAgICAgJ2Ryb3B1cCc6IG9yZGVyID09PSBDb25zdC5TT1JUX0FTQ1xuICAgIH0pO1xuICAgIHJldHVybiAoXG4gICAgICA8c3BhbiBjbGFzc05hbWU9eyBvcmRlckNsYXNzIH0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT0nY2FyZXQnIHN0eWxlPXsgeyBtYXJnaW46ICcwcHggNXB4JyB9IH0+PC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgICk7XG4gIH0sXG5cbiAgZ2V0U2Nyb2xsQmFyV2lkdGgoKSB7XG4gICAgY29uc3QgaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7XG4gICAgaW5uZXIuc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgaW5uZXIuc3R5bGUuaGVpZ2h0ID0gJzIwMHB4JztcblxuICAgIGNvbnN0IG91dGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgb3V0ZXIuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIG91dGVyLnN0eWxlLnRvcCA9ICcwcHgnO1xuICAgIG91dGVyLnN0eWxlLmxlZnQgPSAnMHB4JztcbiAgICBvdXRlci5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgb3V0ZXIuc3R5bGUud2lkdGggPSAnMjAwcHgnO1xuICAgIG91dGVyLnN0eWxlLmhlaWdodCA9ICcxNTBweCc7XG4gICAgb3V0ZXIuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICBvdXRlci5hcHBlbmRDaGlsZChpbm5lcik7XG5cbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG91dGVyKTtcbiAgICBjb25zdCB3MSA9IGlubmVyLm9mZnNldFdpZHRoO1xuICAgIG91dGVyLnN0eWxlLm92ZXJmbG93ID0gJ3Njcm9sbCc7XG4gICAgbGV0IHcyID0gaW5uZXIub2Zmc2V0V2lkdGg7XG4gICAgaWYgKHcxID09PSB3MikgdzIgPSBvdXRlci5jbGllbnRXaWR0aDtcblxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQob3V0ZXIpO1xuXG4gICAgcmV0dXJuICh3MSAtIHcyKTtcbiAgfSxcblxuICBjYW5Vc2VET00oKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xuICB9XG59O1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvdXRpbC5qc1xuICoqLyIsIi8qIGVzbGludCBibG9jay1zY29wZWQtdmFyOiAwICovXG4vKiBlc2xpbnQgdmFycy1vbi10b3A6IDAgKi9cbi8qIGVzbGludCBuby12YXI6IDAgKi9cbi8qIGVzbGludCBuby11bnVzZWQtdmFyczogMCAqL1xuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gIGNvbnN0IGZpbGVzYXZlciA9IHJlcXVpcmUoJy4vZmlsZXNhdmVyJyk7XG4gIHZhciBzYXZlQXMgPSBmaWxlc2F2ZXIuc2F2ZUFzO1xufVxuXG5mdW5jdGlvbiB0b1N0cmluZyhkYXRhLCBrZXlzKSB7XG4gIGxldCBkYXRhU3RyaW5nID0gJyc7XG4gIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGRhdGFTdHJpbmc7XG5cbiAgZGF0YVN0cmluZyArPSBrZXlzLmpvaW4oJywnKSArICdcXG4nO1xuXG4gIGRhdGEubWFwKGZ1bmN0aW9uKHJvdykge1xuICAgIGtleXMubWFwKGZ1bmN0aW9uKGNvbCwgaSkge1xuICAgICAgY29uc3QgY2VsbCA9IHR5cGVvZiByb3dbY29sXSAhPT0gJ3VuZGVmaW5lZCcgPyAoJ1wiJyArIHJvd1tjb2xdICsgJ1wiJykgOiAnJztcbiAgICAgIGRhdGFTdHJpbmcgKz0gY2VsbDtcbiAgICAgIGlmIChpICsgMSA8IGtleXMubGVuZ3RoKSBkYXRhU3RyaW5nICs9ICcsJztcbiAgICB9KTtcblxuICAgIGRhdGFTdHJpbmcgKz0gJ1xcbic7XG4gIH0pO1xuXG4gIHJldHVybiBkYXRhU3RyaW5nO1xufVxuXG5jb25zdCBleHBvcnRDU1YgPSBmdW5jdGlvbihkYXRhLCBrZXlzLCBmaWxlbmFtZSkge1xuICBjb25zdCBkYXRhU3RyaW5nID0gdG9TdHJpbmcoZGF0YSwga2V5cyk7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgIHNhdmVBcyhuZXcgQmxvYihbIGRhdGFTdHJpbmcgXSxcbiAgICAgICAgeyB0eXBlOiAndGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04JyB9KSxcbiAgICAgICAgZmlsZW5hbWUgfHwgJ3NwcmVhZHNoZWV0LmNzdicpO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBleHBvcnRDU1Y7XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9jc3ZfZXhwb3J0X3V0aWwuanNcbiAqKi8iLCIvKiBGaWxlU2F2ZXIuanNcbiAqIEEgc2F2ZUFzKCkgRmlsZVNhdmVyIGltcGxlbWVudGF0aW9uLlxuICogMS4xLjIwMTUxMDAzXG4gKlxuICogQnkgRWxpIEdyZXksIGh0dHA6Ly9lbGlncmV5LmNvbVxuICogTGljZW5zZTogTUlUXG4gKiAgIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZWxpZ3JleS9GaWxlU2F2ZXIuanMvYmxvYi9tYXN0ZXIvTElDRU5TRS5tZFxuICovXG5cbi8qZ2xvYmFsIHNlbGYgKi9cbi8qanNsaW50IGJpdHdpc2U6IHRydWUsIGluZGVudDogNCwgbGF4YnJlYWs6IHRydWUsIGxheGNvbW1hOiB0cnVlLCBzbWFydHRhYnM6IHRydWUsIHBsdXNwbHVzOiB0cnVlICovXG5cbi8qISBAc291cmNlIGh0dHA6Ly9wdXJsLmVsaWdyZXkuY29tL2dpdGh1Yi9GaWxlU2F2ZXIuanMvYmxvYi9tYXN0ZXIvRmlsZVNhdmVyLmpzICovXG5cbnZhciBzYXZlQXMgPSBzYXZlQXMgfHwgKGZ1bmN0aW9uKHZpZXcpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdC8vIElFIDwxMCBpcyBleHBsaWNpdGx5IHVuc3VwcG9ydGVkXG5cdGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiICYmIC9NU0lFIFsxLTldXFwuLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdHZhclxuXHRcdCAgZG9jID0gdmlldy5kb2N1bWVudFxuXHRcdCAgLy8gb25seSBnZXQgVVJMIHdoZW4gbmVjZXNzYXJ5IGluIGNhc2UgQmxvYi5qcyBoYXNuJ3Qgb3ZlcnJpZGRlbiBpdCB5ZXRcblx0XHQsIGdldF9VUkwgPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB2aWV3LlVSTCB8fCB2aWV3LndlYmtpdFVSTCB8fCB2aWV3O1xuXHRcdH1cblx0XHQsIHNhdmVfbGluayA9IGRvYy5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsIFwiYVwiKVxuXHRcdCwgY2FuX3VzZV9zYXZlX2xpbmsgPSBcImRvd25sb2FkXCIgaW4gc2F2ZV9saW5rXG5cdFx0LCBjbGljayA9IGZ1bmN0aW9uKG5vZGUpIHtcblx0XHRcdHZhciBldmVudCA9IG5ldyBNb3VzZUV2ZW50KFwiY2xpY2tcIik7XG5cdFx0XHRub2RlLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuXHRcdH1cblx0XHQsIGlzX3NhZmFyaSA9IC9WZXJzaW9uXFwvW1xcZFxcLl0rLipTYWZhcmkvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudClcblx0XHQsIHdlYmtpdF9yZXFfZnMgPSB2aWV3LndlYmtpdFJlcXVlc3RGaWxlU3lzdGVtXG5cdFx0LCByZXFfZnMgPSB2aWV3LnJlcXVlc3RGaWxlU3lzdGVtIHx8IHdlYmtpdF9yZXFfZnMgfHwgdmlldy5tb3pSZXF1ZXN0RmlsZVN5c3RlbVxuXHRcdCwgdGhyb3dfb3V0c2lkZSA9IGZ1bmN0aW9uKGV4KSB7XG5cdFx0XHQodmlldy5zZXRJbW1lZGlhdGUgfHwgdmlldy5zZXRUaW1lb3V0KShmdW5jdGlvbigpIHtcblx0XHRcdFx0dGhyb3cgZXg7XG5cdFx0XHR9LCAwKTtcblx0XHR9XG5cdFx0LCBmb3JjZV9zYXZlYWJsZV90eXBlID0gXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIlxuXHRcdCwgZnNfbWluX3NpemUgPSAwXG5cdFx0Ly8gU2VlIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zNzUyOTcjYzcgYW5kXG5cdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL2VsaWdyZXkvRmlsZVNhdmVyLmpzL2NvbW1pdC80ODU5MzBhI2NvbW1pdGNvbW1lbnQtODc2ODA0N1xuXHRcdC8vIGZvciB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGUgdGltZW91dCBhbmQgcmV2b2NhdGlvbiBmbG93XG5cdFx0LCBhcmJpdHJhcnlfcmV2b2tlX3RpbWVvdXQgPSA1MDAgLy8gaW4gbXNcblx0XHQsIHJldm9rZSA9IGZ1bmN0aW9uKGZpbGUpIHtcblx0XHRcdHZhciByZXZva2VyID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgZmlsZSA9PT0gXCJzdHJpbmdcIikgeyAvLyBmaWxlIGlzIGFuIG9iamVjdCBVUkxcblx0XHRcdFx0XHRnZXRfVVJMKCkucmV2b2tlT2JqZWN0VVJMKGZpbGUpO1xuXHRcdFx0XHR9IGVsc2UgeyAvLyBmaWxlIGlzIGEgRmlsZVxuXHRcdFx0XHRcdGZpbGUucmVtb3ZlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRpZiAodmlldy5jaHJvbWUpIHtcblx0XHRcdFx0cmV2b2tlcigpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2V0VGltZW91dChyZXZva2VyLCBhcmJpdHJhcnlfcmV2b2tlX3RpbWVvdXQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQsIGRpc3BhdGNoID0gZnVuY3Rpb24oZmlsZXNhdmVyLCBldmVudF90eXBlcywgZXZlbnQpIHtcblx0XHRcdGV2ZW50X3R5cGVzID0gW10uY29uY2F0KGV2ZW50X3R5cGVzKTtcblx0XHRcdHZhciBpID0gZXZlbnRfdHlwZXMubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKGktLSkge1xuXHRcdFx0XHR2YXIgbGlzdGVuZXIgPSBmaWxlc2F2ZXJbXCJvblwiICsgZXZlbnRfdHlwZXNbaV1dO1xuXHRcdFx0XHRpZiAodHlwZW9mIGxpc3RlbmVyID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0bGlzdGVuZXIuY2FsbChmaWxlc2F2ZXIsIGV2ZW50IHx8IGZpbGVzYXZlcik7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZXgpIHtcblx0XHRcdFx0XHRcdHRocm93X291dHNpZGUoZXgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHQsIGF1dG9fYm9tID0gZnVuY3Rpb24oYmxvYikge1xuXHRcdFx0Ly8gcHJlcGVuZCBCT00gZm9yIFVURi04IFhNTCBhbmQgdGV4dC8qIHR5cGVzIChpbmNsdWRpbmcgSFRNTClcblx0XHRcdGlmICgvXlxccyooPzp0ZXh0XFwvXFxTKnxhcHBsaWNhdGlvblxcL3htbHxcXFMqXFwvXFxTKlxcK3htbClcXHMqOy4qY2hhcnNldFxccyo9XFxzKnV0Zi04L2kudGVzdChibG9iLnR5cGUpKSB7XG5cdFx0XHRcdHJldHVybiBuZXcgQmxvYihbXCJcXHVmZWZmXCIsIGJsb2JdLCB7dHlwZTogYmxvYi50eXBlfSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gYmxvYjtcblx0XHR9XG5cdFx0LCBGaWxlU2F2ZXIgPSBmdW5jdGlvbihibG9iLCBuYW1lLCBub19hdXRvX2JvbSkge1xuXHRcdFx0aWYgKCFub19hdXRvX2JvbSkge1xuXHRcdFx0XHRibG9iID0gYXV0b19ib20oYmxvYik7XG5cdFx0XHR9XG5cdFx0XHQvLyBGaXJzdCB0cnkgYS5kb3dubG9hZCwgdGhlbiB3ZWIgZmlsZXN5c3RlbSwgdGhlbiBvYmplY3QgVVJMc1xuXHRcdFx0dmFyXG5cdFx0XHRcdCAgZmlsZXNhdmVyID0gdGhpc1xuXHRcdFx0XHQsIHR5cGUgPSBibG9iLnR5cGVcblx0XHRcdFx0LCBibG9iX2NoYW5nZWQgPSBmYWxzZVxuXHRcdFx0XHQsIG9iamVjdF91cmxcblx0XHRcdFx0LCB0YXJnZXRfdmlld1xuXHRcdFx0XHQsIGRpc3BhdGNoX2FsbCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGRpc3BhdGNoKGZpbGVzYXZlciwgXCJ3cml0ZXN0YXJ0IHByb2dyZXNzIHdyaXRlIHdyaXRlZW5kXCIuc3BsaXQoXCIgXCIpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBvbiBhbnkgZmlsZXN5cyBlcnJvcnMgcmV2ZXJ0IHRvIHNhdmluZyB3aXRoIG9iamVjdCBVUkxzXG5cdFx0XHRcdCwgZnNfZXJyb3IgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAodGFyZ2V0X3ZpZXcgJiYgaXNfc2FmYXJpICYmIHR5cGVvZiBGaWxlUmVhZGVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRcdFx0XHQvLyBTYWZhcmkgZG9lc24ndCBhbGxvdyBkb3dubG9hZGluZyBvZiBibG9iIHVybHNcblx0XHRcdFx0XHRcdHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXHRcdFx0XHRcdFx0cmVhZGVyLm9ubG9hZGVuZCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgYmFzZTY0RGF0YSA9IHJlYWRlci5yZXN1bHQ7XG5cdFx0XHRcdFx0XHRcdHRhcmdldF92aWV3LmxvY2F0aW9uLmhyZWYgPSBcImRhdGE6YXR0YWNobWVudC9maWxlXCIgKyBiYXNlNjREYXRhLnNsaWNlKGJhc2U2NERhdGEuc2VhcmNoKC9bLDtdLykpO1xuXHRcdFx0XHRcdFx0XHRmaWxlc2F2ZXIucmVhZHlTdGF0ZSA9IGZpbGVzYXZlci5ET05FO1xuXHRcdFx0XHRcdFx0XHRkaXNwYXRjaF9hbGwoKTtcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRyZWFkZXIucmVhZEFzRGF0YVVSTChibG9iKTtcblx0XHRcdFx0XHRcdGZpbGVzYXZlci5yZWFkeVN0YXRlID0gZmlsZXNhdmVyLklOSVQ7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIGRvbid0IGNyZWF0ZSBtb3JlIG9iamVjdCBVUkxzIHRoYW4gbmVlZGVkXG5cdFx0XHRcdFx0aWYgKGJsb2JfY2hhbmdlZCB8fCAhb2JqZWN0X3VybCkge1xuXHRcdFx0XHRcdFx0b2JqZWN0X3VybCA9IGdldF9VUkwoKS5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICh0YXJnZXRfdmlldykge1xuXHRcdFx0XHRcdFx0dGFyZ2V0X3ZpZXcubG9jYXRpb24uaHJlZiA9IG9iamVjdF91cmw7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHZhciBuZXdfdGFiID0gdmlldy5vcGVuKG9iamVjdF91cmwsIFwiX2JsYW5rXCIpO1xuXHRcdFx0XHRcdFx0aWYgKG5ld190YWIgPT0gdW5kZWZpbmVkICYmIGlzX3NhZmFyaSkge1xuXHRcdFx0XHRcdFx0XHQvL0FwcGxlIGRvIG5vdCBhbGxvdyB3aW5kb3cub3Blbiwgc2VlIGh0dHA6Ly9iaXQubHkvMWtaZmZSSVxuXHRcdFx0XHRcdFx0XHR2aWV3LmxvY2F0aW9uLmhyZWYgPSBvYmplY3RfdXJsXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGZpbGVzYXZlci5yZWFkeVN0YXRlID0gZmlsZXNhdmVyLkRPTkU7XG5cdFx0XHRcdFx0ZGlzcGF0Y2hfYWxsKCk7XG5cdFx0XHRcdFx0cmV2b2tlKG9iamVjdF91cmwpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCwgYWJvcnRhYmxlID0gZnVuY3Rpb24oZnVuYykge1xuXHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGlmIChmaWxlc2F2ZXIucmVhZHlTdGF0ZSAhPT0gZmlsZXNhdmVyLkRPTkUpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdCwgY3JlYXRlX2lmX25vdF9mb3VuZCA9IHtjcmVhdGU6IHRydWUsIGV4Y2x1c2l2ZTogZmFsc2V9XG5cdFx0XHRcdCwgc2xpY2Vcblx0XHRcdDtcblx0XHRcdGZpbGVzYXZlci5yZWFkeVN0YXRlID0gZmlsZXNhdmVyLklOSVQ7XG5cdFx0XHRpZiAoIW5hbWUpIHtcblx0XHRcdFx0bmFtZSA9IFwiZG93bmxvYWRcIjtcblx0XHRcdH1cblx0XHRcdGlmIChjYW5fdXNlX3NhdmVfbGluaykge1xuXHRcdFx0XHRvYmplY3RfdXJsID0gZ2V0X1VSTCgpLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblx0XHRcdFx0c2F2ZV9saW5rLmhyZWYgPSBvYmplY3RfdXJsO1xuXHRcdFx0XHRzYXZlX2xpbmsuZG93bmxvYWQgPSBuYW1lO1xuXHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGNsaWNrKHNhdmVfbGluayk7XG5cdFx0XHRcdFx0ZGlzcGF0Y2hfYWxsKCk7XG5cdFx0XHRcdFx0cmV2b2tlKG9iamVjdF91cmwpO1xuXHRcdFx0XHRcdGZpbGVzYXZlci5yZWFkeVN0YXRlID0gZmlsZXNhdmVyLkRPTkU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHQvLyBPYmplY3QgYW5kIHdlYiBmaWxlc3lzdGVtIFVSTHMgaGF2ZSBhIHByb2JsZW0gc2F2aW5nIGluIEdvb2dsZSBDaHJvbWUgd2hlblxuXHRcdFx0Ly8gdmlld2VkIGluIGEgdGFiLCBzbyBJIGZvcmNlIHNhdmUgd2l0aCBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cblx0XHRcdC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTkxMTU4XG5cdFx0XHQvLyBVcGRhdGU6IEdvb2dsZSBlcnJhbnRseSBjbG9zZWQgOTExNTgsIEkgc3VibWl0dGVkIGl0IGFnYWluOlxuXHRcdFx0Ly8gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTM4OTY0MlxuXHRcdFx0aWYgKHZpZXcuY2hyb21lICYmIHR5cGUgJiYgdHlwZSAhPT0gZm9yY2Vfc2F2ZWFibGVfdHlwZSkge1xuXHRcdFx0XHRzbGljZSA9IGJsb2Iuc2xpY2UgfHwgYmxvYi53ZWJraXRTbGljZTtcblx0XHRcdFx0YmxvYiA9IHNsaWNlLmNhbGwoYmxvYiwgMCwgYmxvYi5zaXplLCBmb3JjZV9zYXZlYWJsZV90eXBlKTtcblx0XHRcdFx0YmxvYl9jaGFuZ2VkID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdC8vIFNpbmNlIEkgY2FuJ3QgYmUgc3VyZSB0aGF0IHRoZSBndWVzc2VkIG1lZGlhIHR5cGUgd2lsbCB0cmlnZ2VyIGEgZG93bmxvYWRcblx0XHRcdC8vIGluIFdlYktpdCwgSSBhcHBlbmQgLmRvd25sb2FkIHRvIHRoZSBmaWxlbmFtZS5cblx0XHRcdC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTQ0MFxuXHRcdFx0aWYgKHdlYmtpdF9yZXFfZnMgJiYgbmFtZSAhPT0gXCJkb3dubG9hZFwiKSB7XG5cdFx0XHRcdG5hbWUgKz0gXCIuZG93bmxvYWRcIjtcblx0XHRcdH1cblx0XHRcdGlmICh0eXBlID09PSBmb3JjZV9zYXZlYWJsZV90eXBlIHx8IHdlYmtpdF9yZXFfZnMpIHtcblx0XHRcdFx0dGFyZ2V0X3ZpZXcgPSB2aWV3O1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFyZXFfZnMpIHtcblx0XHRcdFx0ZnNfZXJyb3IoKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0ZnNfbWluX3NpemUgKz0gYmxvYi5zaXplO1xuXHRcdFx0cmVxX2ZzKHZpZXcuVEVNUE9SQVJZLCBmc19taW5fc2l6ZSwgYWJvcnRhYmxlKGZ1bmN0aW9uKGZzKSB7XG5cdFx0XHRcdGZzLnJvb3QuZ2V0RGlyZWN0b3J5KFwic2F2ZWRcIiwgY3JlYXRlX2lmX25vdF9mb3VuZCwgYWJvcnRhYmxlKGZ1bmN0aW9uKGRpcikge1xuXHRcdFx0XHRcdHZhciBzYXZlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRkaXIuZ2V0RmlsZShuYW1lLCBjcmVhdGVfaWZfbm90X2ZvdW5kLCBhYm9ydGFibGUoZnVuY3Rpb24oZmlsZSkge1xuXHRcdFx0XHRcdFx0XHRmaWxlLmNyZWF0ZVdyaXRlcihhYm9ydGFibGUoZnVuY3Rpb24od3JpdGVyKSB7XG5cdFx0XHRcdFx0XHRcdFx0d3JpdGVyLm9ud3JpdGVlbmQgPSBmdW5jdGlvbihldmVudCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGFyZ2V0X3ZpZXcubG9jYXRpb24uaHJlZiA9IGZpbGUudG9VUkwoKTtcblx0XHRcdFx0XHRcdFx0XHRcdGZpbGVzYXZlci5yZWFkeVN0YXRlID0gZmlsZXNhdmVyLkRPTkU7XG5cdFx0XHRcdFx0XHRcdFx0XHRkaXNwYXRjaChmaWxlc2F2ZXIsIFwid3JpdGVlbmRcIiwgZXZlbnQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV2b2tlKGZpbGUpO1xuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0d3JpdGVyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBlcnJvciA9IHdyaXRlci5lcnJvcjtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChlcnJvci5jb2RlICE9PSBlcnJvci5BQk9SVF9FUlIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZnNfZXJyb3IoKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdFwid3JpdGVzdGFydCBwcm9ncmVzcyB3cml0ZSBhYm9ydFwiLnNwbGl0KFwiIFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR3cml0ZXJbXCJvblwiICsgZXZlbnRdID0gZmlsZXNhdmVyW1wib25cIiArIGV2ZW50XTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR3cml0ZXIud3JpdGUoYmxvYik7XG5cdFx0XHRcdFx0XHRcdFx0ZmlsZXNhdmVyLmFib3J0ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR3cml0ZXIuYWJvcnQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdGZpbGVzYXZlci5yZWFkeVN0YXRlID0gZmlsZXNhdmVyLkRPTkU7XG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRmaWxlc2F2ZXIucmVhZHlTdGF0ZSA9IGZpbGVzYXZlci5XUklUSU5HO1xuXHRcdFx0XHRcdFx0XHR9KSwgZnNfZXJyb3IpO1xuXHRcdFx0XHRcdFx0fSksIGZzX2Vycm9yKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGRpci5nZXRGaWxlKG5hbWUsIHtjcmVhdGU6IGZhbHNlfSwgYWJvcnRhYmxlKGZ1bmN0aW9uKGZpbGUpIHtcblx0XHRcdFx0XHRcdC8vIGRlbGV0ZSBmaWxlIGlmIGl0IGFscmVhZHkgZXhpc3RzXG5cdFx0XHRcdFx0XHRmaWxlLnJlbW92ZSgpO1xuXHRcdFx0XHRcdFx0c2F2ZSgpO1xuXHRcdFx0XHRcdH0pLCBhYm9ydGFibGUoZnVuY3Rpb24oZXgpIHtcblx0XHRcdFx0XHRcdGlmIChleC5jb2RlID09PSBleC5OT1RfRk9VTkRfRVJSKSB7XG5cdFx0XHRcdFx0XHRcdHNhdmUoKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGZzX2Vycm9yKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSkpO1xuXHRcdFx0XHR9KSwgZnNfZXJyb3IpO1xuXHRcdFx0fSksIGZzX2Vycm9yKTtcblx0XHR9XG5cdFx0LCBGU19wcm90byA9IEZpbGVTYXZlci5wcm90b3R5cGVcblx0XHQsIHNhdmVBcyA9IGZ1bmN0aW9uKGJsb2IsIG5hbWUsIG5vX2F1dG9fYm9tKSB7XG5cdFx0XHRyZXR1cm4gbmV3IEZpbGVTYXZlcihibG9iLCBuYW1lLCBub19hdXRvX2JvbSk7XG5cdFx0fVxuXHQ7XG5cdC8vIElFIDEwKyAobmF0aXZlIHNhdmVBcylcblx0aWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCIgJiYgbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IpIHtcblx0XHRyZXR1cm4gZnVuY3Rpb24oYmxvYiwgbmFtZSwgbm9fYXV0b19ib20pIHtcblx0XHRcdGlmICghbm9fYXV0b19ib20pIHtcblx0XHRcdFx0YmxvYiA9IGF1dG9fYm9tKGJsb2IpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iKGJsb2IsIG5hbWUgfHwgXCJkb3dubG9hZFwiKTtcblx0XHR9O1xuXHR9XG5cblx0RlNfcHJvdG8uYWJvcnQgPSBmdW5jdGlvbigpIHtcblx0XHR2YXIgZmlsZXNhdmVyID0gdGhpcztcblx0XHRmaWxlc2F2ZXIucmVhZHlTdGF0ZSA9IGZpbGVzYXZlci5ET05FO1xuXHRcdGRpc3BhdGNoKGZpbGVzYXZlciwgXCJhYm9ydFwiKTtcblx0fTtcblx0RlNfcHJvdG8ucmVhZHlTdGF0ZSA9IEZTX3Byb3RvLklOSVQgPSAwO1xuXHRGU19wcm90by5XUklUSU5HID0gMTtcblx0RlNfcHJvdG8uRE9ORSA9IDI7XG5cblx0RlNfcHJvdG8uZXJyb3IgPVxuXHRGU19wcm90by5vbndyaXRlc3RhcnQgPVxuXHRGU19wcm90by5vbnByb2dyZXNzID1cblx0RlNfcHJvdG8ub253cml0ZSA9XG5cdEZTX3Byb3RvLm9uYWJvcnQgPVxuXHRGU19wcm90by5vbmVycm9yID1cblx0RlNfcHJvdG8ub253cml0ZWVuZCA9XG5cdFx0bnVsbDtcblxuXHRyZXR1cm4gc2F2ZUFzO1xufShcblx0ICAgdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZlxuXHR8fCB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvd1xuXHR8fCB0aGlzLmNvbnRlbnRcbikpO1xuLy8gYHNlbGZgIGlzIHVuZGVmaW5lZCBpbiBGaXJlZm94IGZvciBBbmRyb2lkIGNvbnRlbnQgc2NyaXB0IGNvbnRleHRcbi8vIHdoaWxlIGB0aGlzYCBpcyBuc0lDb250ZW50RnJhbWVNZXNzYWdlTWFuYWdlclxuLy8gd2l0aCBhbiBhdHRyaWJ1dGUgYGNvbnRlbnRgIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHdpbmRvd1xuXG5pZiAodHlwZW9mIG1vZHVsZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBtb2R1bGUuZXhwb3J0cykge1xuICBtb2R1bGUuZXhwb3J0cy5zYXZlQXMgPSBzYXZlQXM7XG59IGVsc2UgaWYgKCh0eXBlb2YgZGVmaW5lICE9PSBcInVuZGVmaW5lZFwiICYmIGRlZmluZSAhPT0gbnVsbCkgJiYgKGRlZmluZS5hbWQgIT0gbnVsbCkpIHtcbiAgZGVmaW5lKFtdLCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gc2F2ZUFzO1xuICB9KTtcbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2ZpbGVzYXZlci5qc1xuICoqLyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHRocm93IG5ldyBFcnJvcihcImRlZmluZSBjYW5ub3QgYmUgdXNlZCBpbmRpcmVjdFwiKTsgfTtcclxuXG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAod2VicGFjaykvYnVpbGRpbi9hbWQtZGVmaW5lLmpzXG4gKiogbW9kdWxlIGlkID0gMzhcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX2FtZF9vcHRpb25zX187XHJcblxuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogKHdlYnBhY2spL2J1aWxkaW4vYW1kLW9wdGlvbnMuanNcbiAqKiBtb2R1bGUgaWQgPSAzOVxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiaW1wb3J0IENvbnN0IGZyb20gJy4vQ29uc3QnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcblxuZXhwb3J0IGNsYXNzIEZpbHRlciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yKGRhdGEpIHtcbiAgICBzdXBlcihkYXRhKTtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIgPSB7fTtcbiAgfVxuXG4gIGhhbmRsZUZpbHRlcihkYXRhRmllbGQsIHZhbHVlLCB0eXBlKSB7XG4gICAgY29uc3QgZmlsdGVyVHlwZSA9IHR5cGUgfHwgQ29uc3QuRklMVEVSX1RZUEUuQ1VTVE9NO1xuXG4gICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIC8vIHZhbHVlIG9mIHRoZSBmaWx0ZXIgaXMgYW4gb2JqZWN0XG4gICAgICBsZXQgaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgZm9yIChjb25zdCBwcm9wIGluIHZhbHVlKSB7XG4gICAgICAgIGlmICghdmFsdWVbcHJvcF0gfHwgdmFsdWVbcHJvcF0gPT09ICcnKSB7XG4gICAgICAgICAgaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gaWYgb25lIG9mIHRoZSBvYmplY3QgcHJvcGVydGllcyBpcyB1bmRlZmluZWQgb3IgZW1wdHksIHdlIHJlbW92ZSB0aGUgZmlsdGVyXG4gICAgICBpZiAoaGFzVmFsdWUpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50RmlsdGVyW2RhdGFGaWVsZF0gPSB7IHZhbHVlOiB2YWx1ZSwgdHlwZTogZmlsdGVyVHlwZSB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuY3VycmVudEZpbHRlcltkYXRhRmllbGRdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXZhbHVlIHx8IHZhbHVlLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmN1cnJlbnRGaWx0ZXJbZGF0YUZpZWxkXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyW2RhdGFGaWVsZF0gPSB7IHZhbHVlOiB2YWx1ZS50cmltKCksIHR5cGU6IGZpbHRlclR5cGUgfTtcbiAgICB9XG4gICAgdGhpcy5lbWl0KCdvbkZpbHRlckNoYW5nZScsIHRoaXMuY3VycmVudEZpbHRlcik7XG4gIH1cbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL0ZpbHRlci5qc1xuICoqLyIsIi8qIGVzbGludCBkZWZhdWx0LWNhc2U6IDAgKi9cbi8qIGVzbGludCBndWFyZC1mb3ItaW46IDAgKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFByb3BUeXBlcyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBDb25zdCBmcm9tICcuL0NvbnN0JztcbmltcG9ydCBVdGlsIGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgRGF0ZUZpbHRlciBmcm9tICcuL2ZpbHRlcnMvRGF0ZSc7XG5pbXBvcnQgVGV4dEZpbHRlciBmcm9tICcuL2ZpbHRlcnMvVGV4dCc7XG5pbXBvcnQgUmVnZXhGaWx0ZXIgZnJvbSAnLi9maWx0ZXJzL1JlZ2V4JztcbmltcG9ydCBTZWxlY3RGaWx0ZXIgZnJvbSAnLi9maWx0ZXJzL1NlbGVjdCc7XG5pbXBvcnQgTnVtYmVyRmlsdGVyIGZyb20gJy4vZmlsdGVycy9OdW1iZXInO1xuXG5jbGFzcyBUYWJsZUhlYWRlckNvbHVtbiBleHRlbmRzIENvbXBvbmVudCB7XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVGaWx0ZXIgPSB0aGlzLmhhbmRsZUZpbHRlci5iaW5kKHRoaXMpO1xuICB9XG5cbiAgaGFuZGxlQ29sdW1uQ2xpY2sgPSAoKSA9PiB7XG4gICAgaWYgKCF0aGlzLnByb3BzLmRhdGFTb3J0KSByZXR1cm47XG4gICAgY29uc3Qgb3JkZXIgPSB0aGlzLnByb3BzLnNvcnQgPT09IENvbnN0LlNPUlRfREVTQyA/IENvbnN0LlNPUlRfQVNDIDogQ29uc3QuU09SVF9ERVNDO1xuICAgIHRoaXMucHJvcHMub25Tb3J0KG9yZGVyLCB0aGlzLnByb3BzLmRhdGFGaWVsZCk7XG4gIH1cblxuICBoYW5kbGVGaWx0ZXIodmFsdWUsIHR5cGUpIHtcbiAgICB0aGlzLnByb3BzLmZpbHRlci5lbWl0dGVyLmhhbmRsZUZpbHRlcih0aGlzLnByb3BzLmRhdGFGaWVsZCwgdmFsdWUsIHR5cGUpO1xuICB9XG5cbiAgZ2V0RmlsdGVycygpIHtcbiAgICBzd2l0Y2ggKHRoaXMucHJvcHMuZmlsdGVyLnR5cGUpIHtcbiAgICBjYXNlIENvbnN0LkZJTFRFUl9UWVBFLlRFWFQ6IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUZXh0RmlsdGVyIHsgLi4udGhpcy5wcm9wcy5maWx0ZXIgfVxuICAgICAgICAgIGNvbHVtbk5hbWU9eyB0aGlzLnByb3BzLmNoaWxkcmVuIH0gZmlsdGVySGFuZGxlcj17IHRoaXMuaGFuZGxlRmlsdGVyIH0gLz5cbiAgICAgICk7XG4gICAgfVxuICAgIGNhc2UgQ29uc3QuRklMVEVSX1RZUEUuUkVHRVg6IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxSZWdleEZpbHRlciB7IC4uLnRoaXMucHJvcHMuZmlsdGVyIH1cbiAgICAgICAgICBjb2x1bW5OYW1lPXsgdGhpcy5wcm9wcy5jaGlsZHJlbiB9IGZpbHRlckhhbmRsZXI9eyB0aGlzLmhhbmRsZUZpbHRlciB9IC8+XG4gICAgICApO1xuICAgIH1cbiAgICBjYXNlIENvbnN0LkZJTFRFUl9UWVBFLlNFTEVDVDoge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFNlbGVjdEZpbHRlciB7IC4uLnRoaXMucHJvcHMuZmlsdGVyIH1cbiAgICAgICAgICBjb2x1bW5OYW1lPXsgdGhpcy5wcm9wcy5jaGlsZHJlbiB9IGZpbHRlckhhbmRsZXI9eyB0aGlzLmhhbmRsZUZpbHRlciB9IC8+XG4gICAgICApO1xuICAgIH1cbiAgICBjYXNlIENvbnN0LkZJTFRFUl9UWVBFLk5VTUJFUjoge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPE51bWJlckZpbHRlciB7IC4uLnRoaXMucHJvcHMuZmlsdGVyIH1cbiAgICAgICAgICBjb2x1bW5OYW1lPXsgdGhpcy5wcm9wcy5jaGlsZHJlbiB9IGZpbHRlckhhbmRsZXI9eyB0aGlzLmhhbmRsZUZpbHRlciB9IC8+XG4gICAgICApO1xuICAgIH1cbiAgICBjYXNlIENvbnN0LkZJTFRFUl9UWVBFLkRBVEU6IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxEYXRlRmlsdGVyIHsgLi4udGhpcy5wcm9wcy5maWx0ZXIgfVxuICAgICAgICAgIGNvbHVtbk5hbWU9eyB0aGlzLnByb3BzLmNoaWxkcmVuIH0gZmlsdGVySGFuZGxlcj17IHRoaXMuaGFuZGxlRmlsdGVyIH0gLz5cbiAgICAgICk7XG4gICAgfVxuICAgIGNhc2UgQ29uc3QuRklMVEVSX1RZUEUuQ1VTVE9NOiB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5maWx0ZXIuZ2V0RWxlbWVudCh0aGlzLmhhbmRsZUZpbHRlcixcbiAgICAgICAgICB0aGlzLnByb3BzLmZpbHRlci5jdXN0b21GaWx0ZXJQYXJhbWV0ZXJzKTtcbiAgICB9XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5yZWZzWydoZWFkZXItY29sJ10uc2V0QXR0cmlidXRlKCdkYXRhLWZpZWxkJywgdGhpcy5wcm9wcy5kYXRhRmllbGQpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGxldCBkZWZhdWx0Q2FyZXQ7XG4gICAgY29uc3QgdGhTdHlsZSA9IHtcbiAgICAgIHRleHRBbGlnbjogdGhpcy5wcm9wcy5kYXRhQWxpZ24sXG4gICAgICBkaXNwbGF5OiB0aGlzLnByb3BzLmhpZGRlbiA/ICdub25lJyA6IG51bGxcbiAgICB9O1xuICAgIGlmICh0aGlzLnByb3BzLnNvcnRJbmRpY2F0b3IpIHtcbiAgICAgIGRlZmF1bHRDYXJldCA9ICghdGhpcy5wcm9wcy5kYXRhU29ydCkgPyBudWxsIDogKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9J29yZGVyJz5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9J2Ryb3Bkb3duJz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0nY2FyZXQnIHN0eWxlPXsgeyBtYXJnaW46ICcxMHB4IDAgMTBweCA1cHgnLCBjb2xvcjogJyNjY2MnIH0gfT48L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0nZHJvcHVwJz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0nY2FyZXQnIHN0eWxlPXsgeyBtYXJnaW46ICcxMHB4IDAnLCBjb2xvcjogJyNjY2MnIH0gfT48L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBzb3J0Q2FyZXQgPSB0aGlzLnByb3BzLnNvcnQgPyBVdGlsLnJlbmRlclJlYWN0U29ydENhcmV0KHRoaXMucHJvcHMuc29ydCkgOiBkZWZhdWx0Q2FyZXQ7XG4gICAgY29uc3QgY2xhc3NlcyA9IHRoaXMucHJvcHMuY2xhc3NOYW1lICsgJyAnICsgKHRoaXMucHJvcHMuZGF0YVNvcnQgPyAnc29ydC1jb2x1bW4nIDogJycpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDx0aCByZWY9J2hlYWRlci1jb2wnXG4gICAgICAgICAgY2xhc3NOYW1lPXsgY2xhc3NlcyB9XG4gICAgICAgICAgc3R5bGU9eyB0aFN0eWxlIH1cbiAgICAgICAgICB0aXRsZT17IHRoaXMucHJvcHMuY2hpbGRyZW4gfVxuICAgICAgICAgIG9uQ2xpY2s9eyB0aGlzLmhhbmRsZUNvbHVtbkNsaWNrIH0+XG4gICAgICAgIHsgdGhpcy5wcm9wcy5jaGlsZHJlbiB9eyBzb3J0Q2FyZXQgfVxuICAgICAgICA8ZGl2IG9uQ2xpY2s9eyBlID0+IGUuc3RvcFByb3BhZ2F0aW9uKCkgfT5cbiAgICAgICAgICB7IHRoaXMucHJvcHMuZmlsdGVyID8gdGhpcy5nZXRGaWx0ZXJzKCkgOiBudWxsIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3RoPlxuICAgICk7XG4gIH1cbn1cblxuY29uc3QgZmlsdGVyVHlwZUFycmF5ID0gW107XG5mb3IgKGNvbnN0IGtleSBpbiBDb25zdC5GSUxURVJfVFlQRSkge1xuICBmaWx0ZXJUeXBlQXJyYXkucHVzaChDb25zdC5GSUxURVJfVFlQRVtrZXldKTtcbn1cblxuVGFibGVIZWFkZXJDb2x1bW4ucHJvcFR5cGVzID0ge1xuICBkYXRhRmllbGQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGRhdGFBbGlnbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGF0YVNvcnQ6IFByb3BUeXBlcy5ib29sLFxuICBvblNvcnQ6IFByb3BUeXBlcy5mdW5jLFxuICBkYXRhRm9ybWF0OiBQcm9wVHlwZXMuZnVuYyxcbiAgaXNLZXk6IFByb3BUeXBlcy5ib29sLFxuICBlZGl0YWJsZTogUHJvcFR5cGVzLmFueSxcbiAgaGlkZGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgc2VhcmNoYWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgd2lkdGg6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNvcnRGdW5jOiBQcm9wVHlwZXMuZnVuYyxcbiAgY29sdW1uQ2xhc3NOYW1lOiBQcm9wVHlwZXMuYW55LFxuICBmaWx0ZXJGb3JtYXR0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICBzb3J0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBmb3JtYXRFeHRyYURhdGE6IFByb3BUeXBlcy5hbnksXG4gIGZpbHRlcjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICB0eXBlOiBQcm9wVHlwZXMub25lT2YoZmlsdGVyVHlwZUFycmF5KSxcbiAgICBkZWxheTogUHJvcFR5cGVzLm51bWJlcixcbiAgICBvcHRpb25zOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbiAgICAgIFByb3BUeXBlcy5vYmplY3QsIC8vIGZvciBTZWxlY3RGaWx0ZXJcbiAgICAgIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5udW1iZXIpIC8vIGZvciBOdW1iZXJGaWx0ZXJcbiAgICBdKSxcbiAgICBudW1iZXJDb21wYXJhdG9yczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgZW1pdHRlcjogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBnZXRFbGVtZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBjdXN0b21GaWx0ZXJQYXJhbWV0ZXJzOiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICBzb3J0SW5kaWNhdG9yOiBQcm9wVHlwZXMuYm9vbFxufTtcblxuVGFibGVIZWFkZXJDb2x1bW4uZGVmYXVsdFByb3BzID0ge1xuICBkYXRhQWxpZ246ICdsZWZ0JyxcbiAgZGF0YVNvcnQ6IGZhbHNlLFxuICBkYXRhRm9ybWF0OiB1bmRlZmluZWQsXG4gIGlzS2V5OiBmYWxzZSxcbiAgZWRpdGFibGU6IHRydWUsXG4gIG9uU29ydDogdW5kZWZpbmVkLFxuICBoaWRkZW46IGZhbHNlLFxuICBzZWFyY2hhYmxlOiB0cnVlLFxuICBjbGFzc05hbWU6ICcnLFxuICB3aWR0aDogbnVsbCxcbiAgc29ydEZ1bmM6IHVuZGVmaW5lZCxcbiAgY29sdW1uQ2xhc3NOYW1lOiAnJyxcbiAgZmlsdGVyRm9ybWF0dGVkOiBmYWxzZSxcbiAgc29ydDogdW5kZWZpbmVkLFxuICBmb3JtYXRFeHRyYURhdGE6IHVuZGVmaW5lZCxcbiAgZmlsdGVyOiB1bmRlZmluZWQsXG4gIHNvcnRJbmRpY2F0b3I6IHRydWVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlSGVhZGVyQ29sdW1uO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvVGFibGVIZWFkZXJDb2x1bW4uanNcbiAqKi8iLCIvKiBlc2xpbnQgcXVvdGVzOiAwICovXG4vKiBlc2xpbnQgbWF4LWxlbjogMCAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgUHJvcFR5cGVzIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4uL0NvbnN0JztcblxuY2xhc3MgRGF0ZUZpbHRlciBleHRlbmRzIENvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuZmlsdGVyID0gdGhpcy5maWx0ZXIuYmluZCh0aGlzKTtcbiAgfVxuXG4gIHNldERlZmF1bHREYXRlKCkge1xuICAgIGxldCBkZWZhdWx0RGF0ZSA9ICcnO1xuICAgIGlmICh0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSkge1xuICAgICAgICAvLyBTZXQgdGhlIGFwcHJvcHJpYXRlIGZvcm1hdCBmb3IgdGhlIGlucHV0IHR5cGU9ZGF0ZSwgaS5lLiBcIllZWVktTU0tRERcIlxuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gbmV3IERhdGUodGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUpO1xuICAgICAgZGVmYXVsdERhdGUgPSBgJHtkZWZhdWx0VmFsdWUuZ2V0RnVsbFllYXIoKX0tJHsoXCIwXCIgKyAoZGVmYXVsdFZhbHVlLmdldE1vbnRoKCkgKyAxKSkuc2xpY2UoLTIpfS0keyhcIjBcIiArIGRlZmF1bHRWYWx1ZS5nZXREYXRlKCkpLnNsaWNlKC0yKX1gO1xuICAgIH1cbiAgICByZXR1cm4gZGVmYXVsdERhdGU7XG4gIH1cblxuICBmaWx0ZXIoZXZlbnQpIHtcbiAgICBjb25zdCBkYXRlVmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgaWYgKGRhdGVWYWx1ZSkge1xuICAgICAgdGhpcy5wcm9wcy5maWx0ZXJIYW5kbGVyKG5ldyBEYXRlKGRhdGVWYWx1ZSksIENvbnN0LkZJTFRFUl9UWVBFLkRBVEUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByb3BzLmZpbHRlckhhbmRsZXIobnVsbCwgQ29uc3QuRklMVEVSX1RZUEUuREFURSk7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgZGF0ZVZhbHVlID0gdGhpcy5yZWZzLmlucHV0RGF0ZS5kZWZhdWx0VmFsdWU7XG4gICAgaWYgKGRhdGVWYWx1ZSkge1xuICAgICAgdGhpcy5wcm9wcy5maWx0ZXJIYW5kbGVyKG5ldyBEYXRlKGRhdGVWYWx1ZSksIENvbnN0LkZJTFRFUl9UWVBFLkRBVEUpO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8aW5wdXQgcmVmPSdpbnB1dERhdGUnXG4gICAgICAgICAgIGNsYXNzTmFtZT0nZmlsdGVyIGRhdGUtZmlsdGVyIGZvcm0tY29udHJvbCdcbiAgICAgICAgICAgdHlwZT0nZGF0ZSdcbiAgICAgICAgICAgb25DaGFuZ2U9eyB0aGlzLmZpbHRlciB9XG4gICAgICAgICAgIGRlZmF1bHRWYWx1ZT17IHRoaXMuc2V0RGVmYXVsdERhdGUoKSB9IC8+XG4gICAgKTtcbiAgfVxufVxuXG5EYXRlRmlsdGVyLnByb3BUeXBlcyA9IHtcbiAgZmlsdGVySGFuZGxlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMub2JqZWN0LFxuICBjb2x1bW5OYW1lOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG5leHBvcnQgZGVmYXVsdCBEYXRlRmlsdGVyO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvZmlsdGVycy9EYXRlLmpzXG4gKiovIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgUHJvcFR5cGVzIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4uL0NvbnN0JztcblxuY2xhc3MgVGV4dEZpbHRlciBleHRlbmRzIENvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuZmlsdGVyID0gdGhpcy5maWx0ZXIuYmluZCh0aGlzKTtcbiAgICB0aGlzLnRpbWVvdXQgPSBudWxsO1xuICB9XG5cbiAgZmlsdGVyKGV2ZW50KSB7XG4gICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlclZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy5maWx0ZXJIYW5kbGVyKGZpbHRlclZhbHVlLCBDb25zdC5GSUxURVJfVFlQRS5URVhUKTtcbiAgICB9LCB0aGlzLnByb3BzLmRlbGF5KTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHRoaXMucmVmcy5pbnB1dFRleHQuZGVmYXVsdFZhbHVlO1xuICAgIGlmIChkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHRoaXMucHJvcHMuZmlsdGVySGFuZGxlcihkZWZhdWx0VmFsdWUsIENvbnN0LkZJTFRFUl9UWVBFLlRFWFQpO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgcGxhY2Vob2xkZXIsIGNvbHVtbk5hbWUsIGRlZmF1bHRWYWx1ZSB9ID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4gKFxuICAgICAgPGlucHV0IHJlZj0naW5wdXRUZXh0J1xuICAgICAgICBjbGFzc05hbWU9J2ZpbHRlciB0ZXh0LWZpbHRlciBmb3JtLWNvbnRyb2wnXG4gICAgICAgIHR5cGU9J3RleHQnXG4gICAgICAgIG9uQ2hhbmdlPXsgdGhpcy5maWx0ZXIgfVxuICAgICAgICBwbGFjZWhvbGRlcj17IHBsYWNlaG9sZGVyIHx8IGBFbnRlciAke2NvbHVtbk5hbWV9Li4uYCB9XG4gICAgICAgIGRlZmF1bHRWYWx1ZT17IGRlZmF1bHRWYWx1ZSA/IGRlZmF1bHRWYWx1ZSA6ICcnIH0gLz5cbiAgICApO1xuICB9XG59XG5cblRleHRGaWx0ZXIucHJvcFR5cGVzID0ge1xuICBmaWx0ZXJIYW5kbGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGRlbGF5OiBQcm9wVHlwZXMubnVtYmVyLFxuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY29sdW1uTmFtZTogUHJvcFR5cGVzLnN0cmluZ1xufTtcblxuVGV4dEZpbHRlci5kZWZhdWx0UHJvcHMgPSB7XG4gIGRlbGF5OiBDb25zdC5GSUxURVJfREVMQVlcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRleHRGaWx0ZXI7XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9maWx0ZXJzL1RleHQuanNcbiAqKi8iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBQcm9wVHlwZXMgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi4vQ29uc3QnO1xuXG5jbGFzcyBSZWdleEZpbHRlciBleHRlbmRzIENvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuZmlsdGVyID0gdGhpcy5maWx0ZXIuYmluZCh0aGlzKTtcbiAgICB0aGlzLnRpbWVvdXQgPSBudWxsO1xuICB9XG5cbiAgZmlsdGVyKGV2ZW50KSB7XG4gICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlclZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy5maWx0ZXJIYW5kbGVyKGZpbHRlclZhbHVlLCBDb25zdC5GSUxURVJfVFlQRS5SRUdFWCk7XG4gICAgfSwgdGhpcy5wcm9wcy5kZWxheSk7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMucmVmcy5pbnB1dFRleHQuZGVmYXVsdFZhbHVlO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9wcy5maWx0ZXJIYW5kbGVyKHZhbHVlLCBDb25zdC5GSUxURVJfVFlQRS5SRUdFWCk7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBkZWZhdWx0VmFsdWUsIHBsYWNlaG9sZGVyLCBjb2x1bW5OYW1lIH0gPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXQgcmVmPSdpbnB1dFRleHQnXG4gICAgICAgICAgY2xhc3NOYW1lPSdmaWx0ZXIgdGV4dC1maWx0ZXIgZm9ybS1jb250cm9sJ1xuICAgICAgICAgIHR5cGU9J3RleHQnXG4gICAgICAgICAgb25DaGFuZ2U9eyB0aGlzLmZpbHRlciB9XG4gICAgICAgICAgcGxhY2Vob2xkZXI9eyBwbGFjZWhvbGRlciB8fCBgRW50ZXIgUmVnZXggZm9yICR7Y29sdW1uTmFtZX0uLi5gIH1cbiAgICAgICAgICBkZWZhdWx0VmFsdWU9eyAoZGVmYXVsdFZhbHVlKSA/IGRlZmF1bHRWYWx1ZSA6ICcnIH0gLz5cbiAgICApO1xuICB9XG59XG5cblJlZ2V4RmlsdGVyLnByb3BUeXBlcyA9IHtcbiAgZmlsdGVySGFuZGxlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBkZWxheTogUHJvcFR5cGVzLm51bWJlcixcbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNvbHVtbk5hbWU6IFByb3BUeXBlcy5zdHJpbmdcbn07XG5cblJlZ2V4RmlsdGVyLmRlZmF1bHRQcm9wcyA9IHtcbiAgZGVsYXk6IENvbnN0LkZJTFRFUl9ERUxBWVxufTtcblxuZXhwb3J0IGRlZmF1bHQgUmVnZXhGaWx0ZXI7XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9maWx0ZXJzL1JlZ2V4LmpzXG4gKiovIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgUHJvcFR5cGVzIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzU2V0IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4uL0NvbnN0JztcblxuY2xhc3MgU2VsZWN0RmlsdGVyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5maWx0ZXIgPSB0aGlzLmZpbHRlci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBpc1BsYWNlaG9sZGVyU2VsZWN0ZWQ6ICh0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICF0aGlzLnByb3BzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkodGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUpKVxuICAgIH07XG4gIH1cblxuICBmaWx0ZXIoZXZlbnQpIHtcbiAgICBjb25zdCB7IHZhbHVlIH0gPSBldmVudC50YXJnZXQ7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGlzUGxhY2Vob2xkZXJTZWxlY3RlZDogKHZhbHVlID09PSAnJykgfSk7XG4gICAgdGhpcy5wcm9wcy5maWx0ZXJIYW5kbGVyKHZhbHVlLCBDb25zdC5GSUxURVJfVFlQRS5TRUxFQ1QpO1xuICB9XG5cbiAgZ2V0T3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25UYWdzID0gW107XG4gICAgY29uc3QgeyBvcHRpb25zLCBwbGFjZWhvbGRlciwgY29sdW1uTmFtZSB9ID0gdGhpcy5wcm9wcztcbiAgICBvcHRpb25UYWdzLnB1c2goKFxuICAgICAgPG9wdGlvbiBrZXk9Jy0xJyB2YWx1ZT0nJz57IHBsYWNlaG9sZGVyIHx8IGBTZWxlY3QgJHtjb2x1bW5OYW1lfS4uLmAgfTwvb3B0aW9uPlxuICAgICkpO1xuICAgIE9iamVjdC5rZXlzKG9wdGlvbnMpLm1hcChrZXkgPT4ge1xuICAgICAgb3B0aW9uVGFncy5wdXNoKDxvcHRpb24ga2V5PXsga2V5IH0gdmFsdWU9eyBrZXkgfT57IG9wdGlvbnNba2V5XSB9PC9vcHRpb24+KTtcbiAgICB9KTtcbiAgICByZXR1cm4gb3B0aW9uVGFncztcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5yZWZzLnNlbGVjdElucHV0LnZhbHVlO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9wcy5maWx0ZXJIYW5kbGVyKHZhbHVlLCBDb25zdC5GSUxURVJfVFlQRS5TRUxFQ1QpO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBzZWxlY3RDbGFzcyA9IGNsYXNzU2V0KCdmaWx0ZXInLCAnc2VsZWN0LWZpbHRlcicsICdmb3JtLWNvbnRyb2wnLFxuICAgICAgICAgICAgICB7ICdwbGFjZWhvbGRlci1zZWxlY3RlZCc6IHRoaXMuc3RhdGUuaXNQbGFjZWhvbGRlclNlbGVjdGVkIH0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxzZWxlY3QgcmVmPSdzZWxlY3RJbnB1dCdcbiAgICAgICAgICBjbGFzc05hbWU9eyBzZWxlY3RDbGFzcyB9XG4gICAgICAgICAgb25DaGFuZ2U9eyB0aGlzLmZpbHRlciB9XG4gICAgICAgICAgZGVmYXVsdFZhbHVlPXsgKHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpID8gdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUgOiAnJyB9ID5cbiAgICAgICAgeyB0aGlzLmdldE9wdGlvbnMoKSB9XG4gICAgICA8L3NlbGVjdD5cbiAgICApO1xuICB9XG59XG5cblNlbGVjdEZpbHRlci5wcm9wVHlwZXMgPSB7XG4gIGZpbHRlckhhbmRsZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9wdGlvbnM6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNvbHVtbk5hbWU6IFByb3BUeXBlcy5zdHJpbmdcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNlbGVjdEZpbHRlcjtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2ZpbHRlcnMvU2VsZWN0LmpzXG4gKiovIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgUHJvcFR5cGVzIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzU2V0IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4uL0NvbnN0JztcblxuY29uc3QgbGVnYWxDb21wYXJhdG9ycyA9IFsgJz0nLCAnPicsICc+PScsICc8JywgJzw9JywgJyE9JyBdO1xuXG5jbGFzcyBOdW1iZXJGaWx0ZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLm51bWJlckNvbXBhcmF0b3JzID0gdGhpcy5wcm9wcy5udW1iZXJDb21wYXJhdG9ycyB8fCBsZWdhbENvbXBhcmF0b3JzO1xuICAgIHRoaXMudGltZW91dCA9IG51bGw7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGlzUGxhY2Vob2xkZXJTZWxlY3RlZDogKHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUubnVtYmVyID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgKHRoaXMucHJvcHMub3B0aW9ucyAmJlxuICAgICAgICAgIHRoaXMucHJvcHMub3B0aW9ucy5pbmRleE9mKHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlLm51bWJlcikgPT09IC0xKSlcbiAgICB9O1xuICAgIHRoaXMub25DaGFuZ2VOdW1iZXIgPSB0aGlzLm9uQ2hhbmdlTnVtYmVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5vbkNoYW5nZU51bWJlclNldCA9IHRoaXMub25DaGFuZ2VOdW1iZXJTZXQuYmluZCh0aGlzKTtcbiAgICB0aGlzLm9uQ2hhbmdlQ29tcGFyYXRvciA9IHRoaXMub25DaGFuZ2VDb21wYXJhdG9yLmJpbmQodGhpcyk7XG4gIH1cblxuICBvbkNoYW5nZU51bWJlcihldmVudCkge1xuICAgIGNvbnN0IGNvbXBhcmF0b3IgPSB0aGlzLnJlZnMubnVtYmVyRmlsdGVyQ29tcGFyYXRvci52YWx1ZTtcbiAgICBpZiAoY29tcGFyYXRvciA9PT0gJycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlclZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy5maWx0ZXJIYW5kbGVyKHsgbnVtYmVyOiBmaWx0ZXJWYWx1ZSwgY29tcGFyYXRvciB9LCBDb25zdC5GSUxURVJfVFlQRS5OVU1CRVIpO1xuICAgIH0sIHRoaXMucHJvcHMuZGVsYXkpO1xuICB9XG5cbiAgb25DaGFuZ2VOdW1iZXJTZXQoZXZlbnQpIHtcbiAgICBjb25zdCBjb21wYXJhdG9yID0gdGhpcy5yZWZzLm51bWJlckZpbHRlckNvbXBhcmF0b3IudmFsdWU7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gZXZlbnQudGFyZ2V0O1xuICAgIHRoaXMuc2V0U3RhdGUoeyBpc1BsYWNlaG9sZGVyU2VsZWN0ZWQ6ICh2YWx1ZSA9PT0gJycpIH0pO1xuICAgIGlmIChjb21wYXJhdG9yID09PSAnJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLmZpbHRlckhhbmRsZXIoeyBudW1iZXI6IHZhbHVlLCBjb21wYXJhdG9yIH0sIENvbnN0LkZJTFRFUl9UWVBFLk5VTUJFUik7XG4gIH1cblxuICBvbkNoYW5nZUNvbXBhcmF0b3IoZXZlbnQpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMucmVmcy5udW1iZXJGaWx0ZXIudmFsdWU7XG4gICAgY29uc3QgY29tcGFyYXRvciA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucHJvcHMuZmlsdGVySGFuZGxlcih7IG51bWJlcjogdmFsdWUsIGNvbXBhcmF0b3IgfSwgQ29uc3QuRklMVEVSX1RZUEUuTlVNQkVSKTtcbiAgfVxuXG4gIGdldENvbXBhcmF0b3JPcHRpb25zKCkge1xuICAgIGNvbnN0IG9wdGlvblRhZ3MgPSBbXTtcbiAgICBvcHRpb25UYWdzLnB1c2goPG9wdGlvbiBrZXk9Jy0xJz48L29wdGlvbj4pO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5udW1iZXJDb21wYXJhdG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgb3B0aW9uVGFncy5wdXNoKFxuICAgICAgICA8b3B0aW9uIGtleT17IGkgfSB2YWx1ZT17IHRoaXMubnVtYmVyQ29tcGFyYXRvcnNbaV0gfT5cbiAgICAgICAgICB7IHRoaXMubnVtYmVyQ29tcGFyYXRvcnNbaV0gfVxuICAgICAgICA8L29wdGlvbj5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25UYWdzO1xuICB9XG5cbiAgZ2V0TnVtYmVyT3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25UYWdzID0gW107XG4gICAgY29uc3QgeyBvcHRpb25zIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgb3B0aW9uVGFncy5wdXNoKFxuICAgICAgPG9wdGlvbiBrZXk9Jy0xJyB2YWx1ZT0nJz5cbiAgICAgICAgeyB0aGlzLnByb3BzLnBsYWNlaG9sZGVyIHx8IGBTZWxlY3QgJHt0aGlzLnByb3BzLmNvbHVtbk5hbWV9Li4uYCB9XG4gICAgICA8L29wdGlvbj5cbiAgICApO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgb3B0aW9uVGFncy5wdXNoKDxvcHRpb24ga2V5PXsgaSB9IHZhbHVlPXsgb3B0aW9uc1tpXSB9Pnsgb3B0aW9uc1tpXSB9PC9vcHRpb24+KTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvblRhZ3M7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCBjb21wYXJhdG9yID0gdGhpcy5yZWZzLm51bWJlckZpbHRlckNvbXBhcmF0b3IudmFsdWU7XG4gICAgY29uc3QgbnVtYmVyID0gdGhpcy5yZWZzLm51bWJlckZpbHRlci52YWx1ZTtcbiAgICBpZiAoY29tcGFyYXRvciAmJiBudW1iZXIpIHtcbiAgICAgIHRoaXMucHJvcHMuZmlsdGVySGFuZGxlcih7IG51bWJlciwgY29tcGFyYXRvciB9LCBDb25zdC5GSUxURVJfVFlQRS5OVU1CRVIpO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHNlbGVjdENsYXNzID0gY2xhc3NTZXQoXG4gICAgICAnc2VsZWN0LWZpbHRlcicsICdudW1iZXItZmlsdGVyLWlucHV0JywgJ2Zvcm0tY29udHJvbCcsXG4gICAgICB7ICdwbGFjZWhvbGRlci1zZWxlY3RlZCc6IHRoaXMuc3RhdGUuaXNQbGFjZWhvbGRlclNlbGVjdGVkIH0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPSdmaWx0ZXIgbnVtYmVyLWZpbHRlcic+XG4gICAgICAgIDxzZWxlY3QgcmVmPSdudW1iZXJGaWx0ZXJDb21wYXJhdG9yJ1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT0nbnVtYmVyLWZpbHRlci1jb21wYXJhdG9yIGZvcm0tY29udHJvbCdcbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17IHRoaXMub25DaGFuZ2VDb21wYXJhdG9yIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e1xuICAgICAgICAgICAgICAgICAgKHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlKSA/IHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlLmNvbXBhcmF0b3IgOiAnJ1xuICAgICAgICAgICAgICAgIH0+XG4gICAgICAgICAgeyB0aGlzLmdldENvbXBhcmF0b3JPcHRpb25zKCkgfVxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAge1xuICAgICAgICAgICh0aGlzLnByb3BzLm9wdGlvbnMpID9cbiAgICAgICAgICAgIDxzZWxlY3QgcmVmPSdudW1iZXJGaWx0ZXInXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17IHNlbGVjdENsYXNzIH1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9eyB0aGlzLm9uQ2hhbmdlTnVtYmVyU2V0IH1cbiAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlPXtcbiAgICAgICAgICAgICAgICAodGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUpID8gdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUubnVtYmVyIDogJydcbiAgICAgICAgICAgICAgfT5cbiAgICAgICAgICAgICAgeyB0aGlzLmdldE51bWJlck9wdGlvbnMoKSB9XG4gICAgICAgICAgICA8L3NlbGVjdD4gOlxuICAgICAgICAgICAgPGlucHV0IHJlZj0nbnVtYmVyRmlsdGVyJ1xuICAgICAgICAgICAgICAgICAgIHR5cGU9J251bWJlcidcbiAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9J251bWJlci1maWx0ZXItaW5wdXQgZm9ybS1jb250cm9sJ1xuICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXsgdGhpcy5wcm9wcy5wbGFjZWhvbGRlciB8fCBgRW50ZXIgJHt0aGlzLnByb3BzLmNvbHVtbk5hbWV9Li4uYCB9XG4gICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyB0aGlzLm9uQ2hhbmdlTnVtYmVyIH1cbiAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e1xuICAgICAgICAgICAgICAgICAgICAgKHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlKSA/IHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlLm51bWJlciA6ICcnXG4gICAgICAgICAgICAgICAgICAgfSAvPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbk51bWJlckZpbHRlci5wcm9wVHlwZXMgPSB7XG4gIGZpbHRlckhhbmRsZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5udW1iZXIpLFxuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgbnVtYmVyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGNvbXBhcmF0b3I6IFByb3BUeXBlcy5vbmVPZihsZWdhbENvbXBhcmF0b3JzKVxuICB9KSxcbiAgZGVsYXk6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qIGVzbGludCBjb25zaXN0ZW50LXJldHVybjogMCAqL1xuICBudW1iZXJDb21wYXJhdG9yczogZnVuY3Rpb24ocHJvcHMsIHByb3BOYW1lKSB7XG4gICAgaWYgKCFwcm9wc1twcm9wTmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wc1twcm9wTmFtZV0ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBjb21wYXJhdG9ySXNWYWxpZCA9IGZhbHNlO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsZWdhbENvbXBhcmF0b3JzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChsZWdhbENvbXBhcmF0b3JzW2pdID09PSBwcm9wc1twcm9wTmFtZV1baV0pIHtcbiAgICAgICAgICBjb21wYXJhdG9ySXNWYWxpZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghY29tcGFyYXRvcklzVmFsaWQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihgTnVtYmVyIGNvbXBhcmF0b3IgcHJvdmlkZWQgaXMgbm90IHN1cHBvcnRlZC5cbiAgICAgICAgICBVc2Ugb25seSAke2xlZ2FsQ29tcGFyYXRvcnN9YCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY29sdW1uTmFtZTogUHJvcFR5cGVzLnN0cmluZ1xufTtcblxuTnVtYmVyRmlsdGVyLmRlZmF1bHRQcm9wcyA9IHtcbiAgZGVsYXk6IENvbnN0LkZJTFRFUl9ERUxBWVxufTtcblxuZXhwb3J0IGRlZmF1bHQgTnVtYmVyRmlsdGVyO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvZmlsdGVycy9OdW1iZXIuanNcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCBmOGNjYjM0OWJjM2I5MTMzNTU2YSIsIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jvb3RzdHJhcFRhYmxlLmpzIiwid2VicGFjazovLy9leHRlcm5hbCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovLy8uL3NyYy9Db25zdC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvVGFibGVIZWFkZXIuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcInJvb3RcIjpcIlJlYWN0RE9NXCIsXCJjb21tb25qczJcIjpcInJlYWN0LWRvbVwiLFwiY29tbW9uanNcIjpcInJlYWN0LWRvbVwiLFwiYW1kXCI6XCJyZWFjdC1kb21cIn0iLCJ3ZWJwYWNrOi8vLy4vfi9jbGFzc25hbWVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9TZWxlY3RSb3dIZWFkZXJDb2x1bW4uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL1RhYmxlQm9keS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvVGFibGVSb3cuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL1RhYmxlQ29sdW1uLmpzIiwid2VicGFjazovLy8uL3NyYy9UYWJsZUVkaXRDb2x1bW4uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL0VkaXRvci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvTm90aWZpY2F0aW9uLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtdG9hc3RyL2xpYi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXRvYXN0ci9saWIvVG9hc3RDb250YWluZXIuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1hZGRvbnMtdXBkYXRlL2luZGV4LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QvbGliL3VwZGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9+L3Byb2Nlc3MvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0L2xpYi9PYmplY3QuYXNzaWduLmpzIiwid2VicGFjazovLy8uL34vZmJqcy9saWIva2V5T2YuanMiLCJ3ZWJwYWNrOi8vLy4vfi9mYmpzL2xpYi9pbnZhcmlhbnQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC10b2FzdHIvbGliL1RvYXN0TWVzc2FnZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXRvYXN0ci9saWIvVG9hc3RNZXNzYWdlL2FuaW1hdGlvbk1peGluLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QvbGliL1JlYWN0VHJhbnNpdGlvbkV2ZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9+L2ZianMvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50LmpzIiwid2VicGFjazovLy8uL34vZWxlbWVudC1jbGFzcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXRvYXN0ci9saWIvVG9hc3RNZXNzYWdlL2pRdWVyeU1peGluLmpzIiwid2VicGFjazovLy8uL3NyYy9wYWdpbmF0aW9uL1BhZ2luYXRpb25MaXN0LmpzIiwid2VicGFjazovLy8uL3NyYy9wYWdpbmF0aW9uL1BhZ2VCdXR0b24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xiYXIvVG9vbEJhci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvVGFibGVGaWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3N0b3JlL1RhYmxlRGF0YVN0b3JlLmpzIiwid2VicGFjazovLy8uL34vZXZlbnRzL2V2ZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdXRpbC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY3N2X2V4cG9ydF91dGlsLmpzIiwid2VicGFjazovLy8uL3NyYy9maWxlc2F2ZXIuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2FtZC1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2FtZC1vcHRpb25zLmpzIiwid2VicGFjazovLy8uL3NyYy9GaWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL1RhYmxlSGVhZGVyQ29sdW1uLmpzIiwid2VicGFjazovLy8uL3NyYy9maWx0ZXJzL0RhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2ZpbHRlcnMvVGV4dC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZmlsdGVycy9SZWdleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZmlsdGVycy9TZWxlY3QuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2ZpbHRlcnMvTnVtYmVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPO0FDVkE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQWU7QUFDZjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7OzJDQ3RDMkIsQ0FBa0I7Ozs7OENBQ2YsRUFBcUI7Ozs7Z0RBQ3RCLEVBQXdCOztBQUVyRCxLQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsRUFBRTtBQUNqQyxTQUFNLENBQUMsY0FBYyw4QkFBaUIsQ0FBQztBQUN2QyxTQUFNLENBQUMsaUJBQWlCLGlDQUFvQixDQUFDO0FBQzdDLFNBQU0sQ0FBQyxZQUFZLG9DQUFlLENBQUM7RUFDcEM7c0JBQ2M7QUFDYixpQkFBYztBQUNkLG9CQUFpQjtBQUNqQixlQUFZO0VBQ2I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0NDWDJDLENBQU87Ozs7a0NBQ2pDLENBQVM7Ozs7d0NBQ0gsQ0FBZTs7OztzQ0FDakIsQ0FBYTs7OztxREFDUixFQUE2Qjs7OzsyQ0FDcEMsRUFBbUI7Ozs7d0NBQ2YsRUFBZTs7OztnREFDUixFQUF3Qjs7aUNBQ3RDLEVBQVE7Ozs7NENBQ0gsRUFBbUI7Ozs7bUNBQ2xCLEVBQVU7O0tBRTNCLGNBQWM7YUFBZCxjQUFjOztBQUVQLFlBRlAsY0FBYyxDQUVOLEtBQUssRUFBRTs7OzJCQUZmLGNBQWM7O0FBR2hCLGdDQUhFLGNBQWMsNkNBR1YsS0FBSyxFQUFFOztVQXlSZixVQUFVLEdBQUcsVUFBQyxLQUFLLEVBQUUsU0FBUyxFQUFLO0FBQ2pDLFdBQUksTUFBSyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtBQUNuQyxlQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBSyxLQUFLLENBQUMsQ0FBQztRQUMvRDs7QUFFRCxXQUFNLE1BQU0sR0FBRyxNQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3ZELGFBQUssUUFBUSxDQUFDO0FBQ1osYUFBSSxFQUFFLE1BQU07UUFDYixDQUFDLENBQUM7TUFDSjs7VUFFRCxvQkFBb0IsR0FBRyxVQUFDLElBQUksRUFBRSxXQUFXLEVBQUs7V0FDcEMsWUFBWSxHQUFLLE1BQUssS0FBSyxDQUFDLE9BQU8sQ0FBbkMsWUFBWTs7QUFDcEIsV0FBSSxZQUFZLEVBQUU7QUFDaEIscUJBQVksQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDakM7O0FBRUQsV0FBSSxNQUFLLGtCQUFrQixFQUFFLEVBQUU7QUFDN0IsZ0JBQU87UUFDUjs7QUFFRCxXQUFNLE1BQU0sR0FBRyxNQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3hELGFBQUssUUFBUSxDQUFDO0FBQ1osYUFBSSxFQUFFLE1BQU07QUFDWixpQkFBUSxFQUFFLElBQUk7QUFDZCxvQkFBVyxFQUFYLFdBQVc7UUFDWixDQUFDLENBQUM7TUFDSjs7VUFFRCxnQkFBZ0IsR0FBRyxZQUFNO0FBQ3ZCLFdBQUksTUFBSyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtBQUNuQyxlQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbkM7TUFDRjs7VUFFRCxnQkFBZ0IsR0FBRyxZQUFNO0FBQ3ZCLFdBQUksTUFBSyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtBQUNuQyxlQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbkM7TUFDRjs7VUFFRCxpQkFBaUIsR0FBRyxVQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUs7QUFDbEMsV0FBSSxNQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFO0FBQ3BDLGVBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlDO01BQ0Y7O1VBRUQsa0JBQWtCLEdBQUcsVUFBQyxHQUFHLEVBQUUsS0FBSyxFQUFLO0FBQ25DLFdBQUksTUFBSyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRTtBQUNyQyxlQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvQztNQUNGOztVQUVELGNBQWMsR0FBRyxhQUFHLEVBQUk7QUFDdEIsV0FBSSxNQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFO0FBQ2pDLGVBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEM7TUFDRjs7VUFFRCxrQkFBa0IsR0FBRyxXQUFDLEVBQUk7QUFDeEIsV0FBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7QUFDM0MsV0FBSSxlQUFlLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLFdBQUksTUFBTSxHQUFHLElBQUksQ0FBQztBQUNsQixXQUFJLE1BQUssS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUU7QUFDcEMsZUFBTSxHQUFHLE1BQUssS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUNsRCxVQUFVLEdBQUcsTUFBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDdkM7O0FBRUQsV0FBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksTUFBTSxLQUFLLEtBQUssRUFBRTtBQUNyRCxhQUFJLFVBQVUsRUFBRTtBQUNkLDBCQUFlLEdBQUcsTUFBSyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7VUFDN0M7O0FBRUQsZUFBSyxLQUFLLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDOUMsZUFBSyxRQUFRLENBQUMsRUFBRSxlQUFlLEVBQWYsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUNwQztNQUNGOztVQUVELHNCQUFzQixHQUFHLFlBQU07QUFDN0IsYUFBSyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztBQUMvQixXQUFJLE1BQU0sYUFBQztBQUNYLFdBQUksTUFBSyxLQUFLLENBQUMsVUFBVSxFQUFFO0FBQ3pCLGVBQU0sR0FBRyxNQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQUssS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzNELE1BQU07QUFDTCxlQUFNLEdBQUcsTUFBSyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDM0I7QUFDRCxhQUFLLFFBQVEsQ0FBQztBQUNaLGFBQUksRUFBRSxNQUFNO0FBQ1osaUJBQVEsRUFBRSxDQUFDO1FBQ1osQ0FBQyxDQUFDO01BQ0o7O1VBRUQsZUFBZSxHQUFHLFVBQUMsR0FBRyxFQUFFLFVBQVUsRUFBSztBQUNyQyxXQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDbEIsV0FBSSxZQUFZLEdBQUcsTUFBSyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztBQUNuRCxXQUFNLE1BQU0sR0FBRyxHQUFHLENBQUUsTUFBSyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUUsQ0FBQztXQUN2QyxTQUFTLEdBQUssTUFBSyxLQUFLLENBQXhCLFNBQVM7O0FBQ2pCLFdBQUksU0FBUyxDQUFDLFFBQVEsRUFBRTtBQUN0QixlQUFNLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDOUM7O0FBRUQsV0FBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksTUFBTSxLQUFLLEtBQUssRUFBRTtBQUNyRCxhQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssbUJBQU0saUJBQWlCLEVBQUU7QUFDOUMsdUJBQVksR0FBRyxVQUFVLEdBQUcsQ0FBRSxNQUFNLENBQUUsR0FBRyxFQUFFLENBQUM7VUFDN0MsTUFBTTtBQUNMLGVBQUksVUFBVSxFQUFFO0FBQ2QseUJBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDM0IsTUFBTTtBQUNMLHlCQUFZLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxhQUFHO3NCQUFJLE1BQU0sS0FBSyxHQUFHO2NBQUEsQ0FBQyxDQUFDO1lBQzNEO1VBQ0Y7O0FBRUQsZUFBSyxLQUFLLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDM0MsZUFBSyxRQUFRLENBQUM7QUFDWiwwQkFBZSxFQUFFLFlBQVk7VUFDOUIsQ0FBQyxDQUFDO1FBQ0o7TUFDRjs7VUF5Q0QsWUFBWSxHQUFHLGdCQUFNLEVBQUk7QUFDdkIsV0FBSTtBQUNGLGVBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ1YsZ0JBQU8sQ0FBQyxDQUFDO1FBQ1Y7QUFDRCxhQUFLLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ3BDOztVQVVELGFBQWEsR0FBRyxpQkFBTyxFQUFJO0FBQ3pCLFdBQU0sV0FBVyxHQUFHLE9BQU8sR0FBRyxPQUFPLEdBQUcsTUFBSyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzs7QUFFeEUsV0FBSSxXQUFXLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDekMsYUFBSSxNQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsc0JBQXNCLEVBQUU7QUFDN0MsaUJBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxZQUFNO0FBQzlDLG1CQUFLLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM3QixDQUFDLENBQUM7VUFDSixNQUFNLElBQUksT0FBTyxDQUFDLDJCQUEyQixDQUFDLEVBQUU7QUFDL0MsaUJBQUssU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1VBQzdCO1FBQ0Y7TUFDRjs7VUE4QkQsZ0JBQWdCLEdBQUcsbUJBQVMsRUFBSTtBQUM5QixhQUFLLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDN0IsV0FBSSxNQUFNLGFBQUM7QUFDWCxXQUFJLE1BQUssS0FBSyxDQUFDLFVBQVUsRUFBRTthQUNqQixXQUFXLEdBQUssTUFBSyxLQUFLLENBQTFCLFdBQVc7O0FBQ25CLGVBQU0sR0FBRyxNQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2hELE1BQU07QUFDTCxlQUFNLEdBQUcsTUFBSyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDM0I7QUFDRCxXQUFJLE1BQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRTtBQUN4QyxlQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUM1QyxNQUFLLEtBQUssQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUM7UUFDM0M7QUFDRCxhQUFLLFFBQVEsQ0FBQztBQUNaLGFBQUksRUFBRSxNQUFNO0FBQ1osaUJBQVEsRUFBRSxDQUFDO1FBQ1osQ0FBQyxDQUFDO01BQ0o7O1VBRUQsZUFBZSxHQUFHLFlBQU07QUFDdEIsV0FBTSxNQUFNLEdBQUcsTUFBSyxLQUFLLENBQUMseUJBQXlCLEVBQUUsQ0FBQztBQUN0RCxXQUFNLElBQUksR0FBRyxFQUFFLENBQUM7QUFDaEIsYUFBSyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFTLE1BQU0sRUFBRTtBQUN2QyxhQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLEtBQUssRUFBRTtBQUNqQyxlQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7VUFDbkM7UUFDRixDQUFDLENBQUM7QUFDSCx5Q0FBVSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQUssS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO01BQ2pEOztVQUVELFlBQVksR0FBRyxvQkFBVSxFQUFJO0FBQzNCLGFBQUssS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM5QixXQUFJLE1BQU0sYUFBQztBQUNYLFdBQUksTUFBSyxLQUFLLENBQUMsVUFBVSxFQUFFO2FBQ2pCLFdBQVcsR0FBSyxNQUFLLEtBQUssQ0FBMUIsV0FBVzs7QUFDbkIsZUFBTSxHQUFHLE1BQUssS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDaEQsTUFBTTtBQUNMLGVBQU0sR0FBRyxNQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMzQjtBQUNELFdBQUksTUFBSyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRTtBQUNsQyxlQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFDdkMsTUFBSyxLQUFLLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDO1FBQzNDO0FBQ0QsYUFBSyxRQUFRLENBQUM7QUFDWixhQUFJLEVBQUUsTUFBTTtBQUNaLGlCQUFRLEVBQUUsQ0FBQztRQUNaLENBQUMsQ0FBQztNQUNKOztVQW1HRCxhQUFhLEdBQUcsVUFBQyxDQUFDLEVBQUs7QUFDckIsYUFBSyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDO01BQ3pFOztVQUVELFlBQVksR0FBRyxZQUFNO0FBQ25CLGFBQUssa0JBQWtCLEVBQUUsQ0FBQztBQUMxQixhQUFLLGFBQWEsRUFBRSxDQUFDO01BQ3RCOztVQUVELGtCQUFrQixHQUFHLFlBQU07QUFDekIsV0FBTSxNQUFNLEdBQUcsTUFBSyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDNUMsV0FBTSxlQUFlLEdBQUcsTUFBSyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDeEQsV0FBTSxLQUFLLEdBQUcsTUFBSyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDeEMsV0FBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQyxXQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsV0FBVyxLQUFLLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO0FBQzlFLFdBQU0sY0FBYyxHQUFHLFFBQVEsR0FBRyxrQkFBSyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMvRCxXQUFJLFFBQVEsSUFBSSxNQUFLLEtBQUssQ0FBQyxVQUFVLEVBQUUsRUFBRTtBQUN2QyxhQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDO0FBQ2xDLGNBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3JDLGVBQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixlQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QyxlQUFJLEtBQUssR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUQsZUFBSSxNQUFLLElBQUksRUFBRTtBQUNiLGlCQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqRixpQkFBTSxpQkFBaUIsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbkYsaUJBQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEYsaUJBQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwRixrQkFBSyxHQUFHLEtBQUssR0FBRyxnQkFBZ0IsR0FBRyxpQkFBaUIsR0FBRyxnQkFBZ0IsR0FBRyxlQUFlLENBQUM7WUFDM0Y7QUFDRCxlQUFNLFdBQVcsR0FBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsY0FBYyxHQUFHLENBQUUsQ0FBQztBQUNsRSxlQUFJLEtBQUssSUFBSSxDQUFDLEVBQUU7QUFDZCxrQkFBSyxHQUFHLEdBQUcsQ0FBQztBQUNaLGlCQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQ3pDO0FBQ0QsZUFBTSxNQUFNLEdBQUcsS0FBSyxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDMUMsaUJBQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDMUMsaUJBQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7VUFDOUM7UUFDRjtNQUNGOztVQUVELGFBQWEsR0FBRyxZQUFNO0FBQ3BCLFdBQUksTUFBSyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtBQUN6QyxlQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUN4QyxVQUFVLENBQUMsTUFBSyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxHQUFHLE1BQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDM0Y7TUFDRjs7QUFqckJDLFNBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ2xCLFNBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0FBQzNCLFNBQUksa0JBQUssU0FBUyxFQUFFLEVBQUU7QUFDcEIsV0FBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDO01BQ25DO0FBQ0QsU0FBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNuQyxXQUFJLENBQUMsS0FBSyxHQUFHLHdDQUFtQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQzNELFdBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3hCLFdBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsVUFBQyxJQUFJLEVBQUs7QUFDckMsZUFBSyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pCLGVBQUssUUFBUSxDQUFDO0FBQ1osZUFBSSxFQUFFLE1BQUssWUFBWSxFQUFFO1VBQzFCLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQztNQUNKLE1BQU07QUFDTCxXQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyQyxXQUFJLENBQUMsS0FBSyxHQUFHLHdDQUFtQixJQUFJLENBQUMsQ0FBQztNQUN2Qzs7QUFFRCxTQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzs7QUFFM0IsU0FBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2YsV0FBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsVUFBQyxhQUFhLEVBQUs7QUFDbEQsZUFBSyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUM7TUFDSjs7QUFFRCxTQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRTtBQUN6RCxXQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkQsV0FBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUNwQzs7QUFFRCxTQUFJLENBQUMsS0FBSyxHQUFHO0FBQ1gsV0FBSSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUU7QUFDekIsZUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ3RDLGtCQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLG1CQUFNLGtCQUFrQixDQUFDLENBQUMsQ0FBQztBQUMxRSxzQkFBZSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUU7TUFDakQsQ0FBQztJQUNIOztnQkExQ0csY0FBYzs7WUE0Q1QsbUJBQUMsS0FBSyxFQUFFOzs7V0FDVCxRQUFRLEdBQUssS0FBSyxDQUFsQixRQUFROztBQUVkLFdBQU0saUJBQWlCLEdBQUcsT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFDMUUsMEJBQU0sUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLGdCQUFNLEVBQUk7QUFDL0MsYUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRTtBQUN0QixlQUFJLFFBQVEsRUFBRTtBQUNaLG1CQUFNLDhEQUE4RCxDQUFDO1lBQ3RFO0FBQ0QsbUJBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztVQUNuQztBQUNELGFBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7O0FBRXZCLGVBQUksQ0FBQyxPQUFLLE1BQU0sRUFBRTs7QUFFaEIsb0JBQUssTUFBTSxHQUFHLG9CQUFZLENBQUM7WUFDNUI7O0FBRUQsaUJBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxPQUFLLE1BQU0sQ0FBQztVQUMzQztRQUNGLENBQUMsQ0FBQzs7QUFFSCxXQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQUUsSUFBSSxFQUFFLElBQUksRUFBTTtBQUMxRSxhQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QixnQkFBTyxJQUFJLENBQUM7UUFDYixFQUFFLEVBQUUsQ0FBQyxDQUFDOztBQUVQLFdBQUksQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUNuQywwSkFDMEU7UUFDM0U7O0FBRUQsV0FBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7QUFDbEIscUJBQVksRUFBRSxLQUFLLENBQUMsVUFBVTtBQUM5QixpQkFBUSxFQUFFLFFBQVE7QUFDbEIsaUJBQVEsRUFBRSxRQUFRO0FBQ2xCLDBCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUI7QUFDMUMsZUFBTSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtRQUNsQyxDQUFDLENBQUM7TUFDSjs7O1lBRVcsd0JBQUc7b0JBQ21CLElBQUksQ0FBQyxLQUFLO1dBQWxDLE9BQU8sVUFBUCxPQUFPO1dBQUUsVUFBVSxVQUFWLFVBQVU7O0FBQzNCLFdBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNoQixXQUFJLE9BQU8sQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRTtBQUN6QyxhQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0RDs7QUFFRCxXQUFJLFVBQVUsRUFBRTtBQUNkLGFBQUksSUFBSSxhQUFDO0FBQ1QsYUFBSSxXQUFXLGFBQUM7QUFDaEIsYUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxFQUFFO0FBQzlCLHNCQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7QUFDckMsZUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO1VBQzVCLE1BQU07QUFDTCxzQkFBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLElBQUksbUJBQU0sa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakUsZUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO1VBQzFCO0FBQ0QsZUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNuRCxNQUFNO0FBQ0wsZUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDM0I7QUFDRCxjQUFPLE1BQU0sQ0FBQztNQUNmOzs7WUFFb0IsK0JBQUMsSUFBWSxFQUFFO1dBQVosUUFBUSxHQUFWLElBQVksQ0FBVixRQUFROztBQUM5QixjQUFPLG1CQUFNLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFVBQUMsTUFBTSxFQUFFLENBQUMsRUFBSztBQUNqRCxnQkFBTztBQUNMLGVBQUksRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVM7QUFDNUIsZ0JBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVM7QUFDN0IsZUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUTtBQUMzQixpQkFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVTtBQUMvQiwwQkFBZSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZTtBQUM3QywwQkFBZSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZTtBQUM3QyxtQkFBUSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUTtBQUMvQixpQkFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTTtBQUMzQixxQkFBVSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVTtBQUNuQyxvQkFBUyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZTtBQUN2QyxnQkFBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSztBQUN6QixlQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRO0FBQzNCLG1CQUFRLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRO0FBQy9CLGdCQUFLLEVBQUUsQ0FBQztVQUNULENBQUM7UUFDSCxDQUFDLENBQUM7TUFDSjs7O1lBRXdCLG1DQUFDLFNBQVMsRUFBRTtBQUNuQyxXQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1dBQ2xCLE9BQU8sR0FBZ0IsU0FBUyxDQUFoQyxPQUFPO1dBQUUsU0FBUyxHQUFLLFNBQVMsQ0FBdkIsU0FBUzs7QUFDMUIsV0FBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNqQyxhQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDM0MsYUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztBQUMvQyxhQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDOzs7QUFHbEUsYUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQ2YsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLEVBQUU7QUFDeEQsZUFBSSxHQUFHLENBQUMsQ0FBQztVQUNWO0FBQ0QsYUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUMxQyxhQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsUUFBUSxLQUFLLFFBQVEsR0FBRyxRQUFRLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUFDO0FBQ2xGLGFBQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLEtBQUssUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLENBQUM7QUFDL0UsYUFBSSxTQUFTLElBQUksU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNsRSxhQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDdEQsYUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNaLGVBQUksRUFBSixJQUFJO0FBQ0osbUJBQVEsRUFBRSxJQUFJO0FBQ2Qsc0JBQVcsRUFBWCxXQUFXO1VBQ1osQ0FBQyxDQUFDO1FBQ0o7QUFDRCxXQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsUUFBUSxFQUFFOztBQUVuQyxhQUFNLElBQUksR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3hDLGFBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkMsYUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNaLDBCQUFlLEVBQUUsSUFBSTtVQUN0QixDQUFDLENBQUM7UUFDSjtNQUNGOzs7WUFFZ0IsNkJBQUc7QUFDbEIsV0FBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BCLGFBQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3JELFdBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztNQUM5RTs7O1lBRW1CLGdDQUFHO0FBQ3JCLGFBQU0sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3hELFdBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNoRixXQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDZixhQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDbEQ7TUFDRjs7O1lBRWlCLDhCQUFHO0FBQ25CLFdBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNwQixXQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztBQUMzQixXQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFO0FBQ3pDLGFBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDekM7TUFDRjs7O1lBRWtCLCtCQUFHO1dBQ1osUUFBUSxHQUFLLElBQUksQ0FBQyxLQUFLLENBQXZCLFFBQVE7O0FBQ2hCLFdBQUksUUFBUSxFQUFFO0FBQ1osYUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEUsYUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLG1CQUFNLGNBQWMsRUFBRTtBQUMxQyxlQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1VBQzVDO1FBQ0Y7TUFDRjs7Ozs7Ozs7Ozs7WUFTaUIsNEJBQUMsS0FBSyxFQUFFO0FBQ3hCLGNBQU8sQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUM7TUFDckM7OztZQUVLLGtCQUFHO0FBQ1AsV0FBTSxLQUFLLEdBQUc7QUFDWixlQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO0FBQ3pCLGtCQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTO1FBQ2hDLENBQUM7O0FBRUYsV0FBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN2RCxXQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQzFDLFdBQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0FBQzNDLFdBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUNyQyxXQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDcEQsV0FBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3ZDLFdBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQztBQUNyRCxXQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxLQUFLLFdBQVcsRUFBRSxhQUFhLEdBQUcsSUFBSSxDQUFDO0FBQ2xGLGNBQ0U7O1dBQUssU0FBUyxFQUFDLDBCQUEwQjtTQUNyQyxPQUFPO1NBQ1Q7O2FBQUssU0FBUyxFQUFDLGdCQUFnQixFQUFDLEdBQUcsRUFBQyxPQUFPLEVBQUMsS0FBSyxFQUFHLEtBQU87QUFDdkQseUJBQVksRUFBRyxJQUFJLENBQUMsZ0JBQWtCO0FBQ3RDLHlCQUFZLEVBQUcsSUFBSSxDQUFDLGdCQUFrQjtXQUN4Qzs7O0FBQ0Usa0JBQUcsRUFBQyxRQUFRO0FBQ1osNEJBQWEsRUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFNO0FBQzNDLCtCQUFnQixFQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLGdCQUFrQjtBQUMxRCx1QkFBUSxFQUFHLFFBQVEsR0FBRyxRQUFRLENBQUMsU0FBUyxHQUFHLFNBQVc7QUFDdEQsd0JBQVMsRUFBRyxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssR0FBRyxTQUFXO0FBQ25ELDRCQUFhLEVBQUcsYUFBZTtBQUMvQixxQkFBTSxFQUFHLElBQUksQ0FBQyxVQUFZO0FBQzFCLDZCQUFjLEVBQUcsSUFBSSxDQUFDLGtCQUFvQjtBQUMxQyx1QkFBUSxFQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBVTtBQUNoQyx3QkFBUyxFQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBVztBQUNsQyx5QkFBVSxFQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLEtBQU87QUFDekMsMEJBQVcsRUFBRyxXQUFhO2FBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTtZQUNUO1dBQ2QsMkRBQVcsR0FBRyxFQUFDLE1BQU07QUFDbkIsa0JBQUssRUFBRyxLQUFPO0FBQ2YsaUJBQUksRUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQU07QUFDeEIsb0JBQU8sRUFBRyxPQUFTO0FBQ25CLHdCQUFXLEVBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFhO0FBQ3RDLG9CQUFPLEVBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFTO0FBQzlCLHFCQUFRLEVBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFVO0FBQ2hDLGtCQUFLLEVBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFPO0FBQzFCLHFCQUFRLEVBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUk7QUFDckMsc0JBQVMsRUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVc7QUFDbEMsc0JBQVMsRUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVc7QUFDbEMscUJBQVEsRUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVU7QUFDaEMsNEJBQWUsRUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWlCO0FBQzlDLHVCQUFVLEVBQUcsSUFBSSxDQUFDLGNBQWdCO0FBQ2xDLDJCQUFjLEVBQUcsSUFBSSxDQUFDLGtCQUFvQjtBQUMxQywwQkFBYSxFQUFHLElBQUksQ0FBQyxpQkFBbUI7QUFDeEMsd0JBQVcsRUFBRyxJQUFJLENBQUMsZUFBaUI7QUFDcEMsdUJBQVUsRUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFZLEdBQUc7VUFDN0M7U0FDSixXQUFXO1NBQ1gsVUFBVTtRQUNSLENBQ047TUFDSDs7O1lBRVUsdUJBQUc7QUFDWixXQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztBQUM3RCxXQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQzdDLFdBQUksb0JBQW9CLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDckQsZ0JBQU8sb0JBQW9CLENBQUMsTUFBTSxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsZUFBZSxDQUFDO1FBQ3BFLE1BQU07QUFDTCxnQkFBTyxJQUFJLENBQUM7UUFDYjtNQUNGOzs7WUFFWSx5QkFBRztBQUNkLFdBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakMsV0FBSSxDQUFDLFFBQVEsQ0FBQztBQUNaLHdCQUFlLEVBQUUsRUFBRTtRQUNwQixDQUFDLENBQUM7TUFDSjs7O1lBeUhhLHdCQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFOzZCQUNDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTtXQUFyRCxjQUFjLG1CQUFkLGNBQWM7V0FBRSxhQUFhLG1CQUFiLGFBQWE7O0FBQ3JDLFdBQUksU0FBUyxhQUFDO0FBQ2QsMEJBQU0sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxVQUFTLE1BQU0sRUFBRSxDQUFDLEVBQUU7QUFDOUQsYUFBSSxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQ2xCLG9CQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7QUFDbkMsa0JBQU8sS0FBSyxDQUFDO1VBQ2Q7UUFDRixDQUFDLENBQUM7O0FBRUgsV0FBSSxjQUFjLEVBQUU7QUFDbEIsYUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM3RSxhQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsRUFBRTtBQUM5QyxlQUFJLENBQUMsUUFBUSxDQUFDO0FBQ1osaUJBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUN2QixDQUFDLENBQUM7QUFDSCxrQkFBTztVQUNSO1FBQ0Y7O0FBRUQsV0FBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsRSxXQUFJLENBQUMsUUFBUSxDQUFDO0FBQ1osYUFBSSxFQUFFLE1BQU07UUFDYixDQUFDLENBQUM7O0FBRUgsV0FBSSxhQUFhLEVBQUU7QUFDakIsc0JBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0Q7TUFDRjs7O1lBRWtCLDZCQUFDLE1BQU0sRUFBRTtBQUMxQixXQUFJO0FBQ0YsYUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0IsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNWLGdCQUFPLENBQUMsQ0FBQztRQUNWO0FBQ0QsV0FBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO01BQ3BDOzs7WUFXYSwwQkFBRztBQUNmLGNBQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7TUFDL0I7OztZQUVhLDBCQUFHO0FBQ2YsY0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztNQUM1Qjs7O1lBZ0JRLG1CQUFDLFdBQVcsRUFBRTtBQUNyQixXQUFJLE1BQU0sYUFBQztBQUNYLFdBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQy9CLFdBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUM7O0FBRWpDLFdBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUU7YUFDakIsV0FBVyxHQUFLLElBQUksQ0FBQyxLQUFLLENBQTFCLFdBQVc7O0FBQ25CLGFBQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsR0FBRyxXQUFXLENBQUMsQ0FBQzthQUNoRSxRQUFRLEdBQUssSUFBSSxDQUFDLEtBQUssQ0FBdkIsUUFBUTs7QUFDZCxhQUFJLFFBQVEsR0FBRyxZQUFZLEVBQUUsUUFBUSxHQUFHLFlBQVksQ0FBQztBQUNyRCxlQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3RELGFBQUksQ0FBQyxRQUFRLENBQUM7QUFDWixlQUFJLEVBQUUsTUFBTTtBQUNaLDBCQUFlLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRTtBQUNoRCxtQkFBUSxFQUFSLFFBQVE7VUFDVCxDQUFDLENBQUM7UUFDSixNQUFNO0FBQ0wsZUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDMUIsYUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNaLGVBQUksRUFBRSxNQUFNO0FBQ1osMEJBQWUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFO1VBQ2pELENBQUMsQ0FBQztRQUNKO0FBQ0QsV0FBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUU7QUFDckMsYUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hEO01BQ0Y7OztZQW1EZSw0QkFBRztBQUNqQixXQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFO0FBQ3pCLGFBQUksUUFBUSxhQUFDO0FBQ2IsYUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRTtBQUM3QixtQkFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQztVQUMvQyxNQUFNO0FBQ0wsbUJBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1VBQ3BDO2FBQ08sT0FBTyxHQUFLLElBQUksQ0FBQyxLQUFLLENBQXRCLE9BQU87O0FBQ2YsZ0JBQ0U7O2FBQUssU0FBUyxFQUFDLDJCQUEyQjtXQUN4QztBQUNFLGdCQUFHLEVBQUMsWUFBWTtBQUNoQixxQkFBUSxFQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBVTtBQUNoQyx1QkFBVSxFQUFHLElBQUksQ0FBQyxvQkFBc0I7QUFDeEMsd0JBQVcsRUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQWE7QUFDdEMsNEJBQWUsRUFBRyxPQUFPLENBQUMsZUFBZSxJQUFJLG1CQUFNLGtCQUFvQjtBQUN2RSwyQkFBYyxFQUFHLE9BQU8sQ0FBQyxjQUFjLElBQUksbUJBQU0sZUFBaUI7QUFDbEUsbUJBQU0sRUFBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUk7QUFDcEMscUJBQVEsRUFBRyxRQUFVO0FBQ3JCLDhCQUFpQixFQUFHLE9BQU8sQ0FBQyxpQkFBbUI7QUFDL0Msb0JBQU8sRUFBRyxPQUFPLENBQUMsT0FBTyxJQUFJLG1CQUFNLFFBQVU7QUFDN0MscUJBQVEsRUFBRyxPQUFPLENBQUMsUUFBUSxJQUFJLG1CQUFNLFNBQVc7QUFDaEQsc0JBQVMsRUFBRyxPQUFPLENBQUMsU0FBUyxJQUFJLG1CQUFNLFVBQVk7QUFDbkQscUJBQVEsRUFBRyxPQUFPLENBQUMsUUFBUSxJQUFJLG1CQUFNLFNBQVcsR0FBRztVQUNqRCxDQUNOO1FBQ0g7QUFDRCxjQUFPLElBQUksQ0FBQztNQUNiOzs7WUFFWSx5QkFBRztxQkFDZ0QsSUFBSSxDQUFDLEtBQUs7V0FBaEUsU0FBUyxXQUFULFNBQVM7V0FBRSxTQUFTLFdBQVQsU0FBUztXQUFFLFNBQVMsV0FBVCxTQUFTO1dBQUUsTUFBTSxXQUFOLE1BQU07V0FBRSxRQUFRLFdBQVIsUUFBUTs7QUFDekQsV0FBTSxzQkFBc0IsR0FBRyxTQUFTLElBQUksU0FBUyxDQUFDLGdCQUFnQixDQUFDO0FBQ3ZFLFdBQUksc0JBQXNCLElBQ25CLFNBQVMsSUFDVCxTQUFTLElBQ1QsTUFBTSxJQUNOLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFO0FBQzNCLGFBQUksT0FBTyxhQUFDO0FBQ1osYUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQzNCLGtCQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFTLE1BQU0sRUFBRTtpQkFDOUIsS0FBSyxHQUFLLE1BQU0sQ0FBaEIsS0FBSzs7QUFDYixvQkFBTztBQUNMLG1CQUFJLEVBQUUsS0FBSyxDQUFDLFFBQVE7QUFDcEIsb0JBQUssRUFBRSxLQUFLLENBQUMsU0FBUzs7QUFFdEIsd0JBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxJQUFJLEtBQUs7O0FBRW5DLHVCQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsSUFBSyxPQUFPLEtBQUssQ0FBQyxRQUFRLEtBQUssVUFBVyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUMsUUFBUTtBQUN0RyxxQkFBTSxFQUFFLEtBQUssQ0FBQyxVQUFVLEdBQUcsVUFBUyxLQUFLLEVBQUU7QUFDekMsd0JBQU8sS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNuRixHQUFHLEtBQUs7Y0FDVixDQUFDO1lBQ0gsQ0FBQyxDQUFDO1VBQ0osTUFBTTtBQUNMLGtCQUFPLEdBQUcsQ0FBRTtBQUNWLGlCQUFJLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRO0FBQzdCLGtCQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxTQUFTO0FBQy9CLHFCQUFRLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRO1lBQ2xDLENBQUUsQ0FBQztVQUNMO0FBQ0QsZ0JBQ0U7O2FBQUssU0FBUyxFQUFDLHlCQUF5QjtXQUN0QztBQUNFLHdCQUFXLEVBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBYTtBQUM5Qyx5QkFBWSxFQUFHLFNBQVc7QUFDMUIseUJBQVksRUFBRyxTQUFXO0FBQzFCLHlCQUFZLEVBQUcsTUFBUTtBQUN2Qiw0QkFBZSxFQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBVztBQUN4QyxtQ0FBc0IsRUFBRyxzQkFBd0I7QUFDakQsb0JBQU8sRUFBRyxPQUFTO0FBQ25CLDhCQUFpQixFQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQW1CO0FBQ2xELHFCQUFRLEVBQUcsSUFBSSxDQUFDLFlBQWM7QUFDOUIsc0JBQVMsRUFBRyxJQUFJLENBQUMsYUFBZTtBQUNoQyxxQkFBUSxFQUFHLElBQUksQ0FBQyxZQUFjO0FBQzlCLHdCQUFXLEVBQUcsSUFBSSxDQUFDLGVBQWlCO0FBQ3BDLCtCQUFrQixFQUFHLElBQUksQ0FBQyxzQkFBd0IsR0FBRTtVQUNsRCxDQUNOO1FBQ0gsTUFBTTtBQUNMLGdCQUFPLElBQUksQ0FBQztRQUNiO01BQ0Y7OztZQUVnQiwyQkFBQyxPQUFPLEVBQUU7QUFDekIsV0FBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRTtBQUMzQixnQkFDRSw2REFBYSxPQUFPLEVBQUcsT0FBUztBQUM5Qix3QkFBYSxFQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQU07QUFDM0MsbUJBQVEsRUFBRyxJQUFJLENBQUMsZ0JBQWtCLEdBQUUsQ0FDdEM7UUFDSCxNQUFNO0FBQ0wsZ0JBQU8sSUFBSSxDQUFDO1FBQ2I7TUFDRjs7O1lBa0RvQiwrQkFBQyxNQUFNLEVBQUU7QUFDNUIsV0FBSSxNQUFNLGFBQUM7QUFDWCxXQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFOzthQUVqQixXQUFXLEdBQUssSUFBSSxDQUFDLEtBQUssQ0FBMUIsV0FBVzs7QUFDbkIsYUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxHQUFHLFdBQVcsQ0FBQyxDQUFDO0FBQ3RFLGVBQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDMUQsYUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNaLGVBQUksRUFBRSxNQUFNO0FBQ1osbUJBQVEsRUFBRSxZQUFZO1VBQ3ZCLENBQUMsQ0FBQztRQUNKLE1BQU07QUFDTCxlQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQixhQUFJLENBQUMsUUFBUSxDQUFDO0FBQ1osZUFBSSxFQUFFLE1BQU07VUFDYixDQUFDLENBQUM7UUFDSjs7QUFFRCxXQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRTtBQUNyQyxhQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0M7TUFDRjs7O1VBNXNCRyxjQUFjOzs7QUErc0JwQixlQUFjLENBQUMsU0FBUyxHQUFHO0FBQ3pCLFdBQVEsRUFBRSxpQkFBVSxNQUFNO0FBQzFCLFNBQU0sRUFBRSxpQkFBVSxNQUFNO0FBQ3hCLFlBQVMsRUFBRSxpQkFBVSxNQUFNO0FBQzNCLE9BQUksRUFBRSxpQkFBVSxTQUFTLENBQUMsQ0FBRSxpQkFBVSxLQUFLLEVBQUUsaUJBQVUsTUFBTSxDQUFFLENBQUM7QUFDaEUsU0FBTSxFQUFFLGlCQUFVLElBQUk7QUFDdEIsVUFBTyxFQUFFLGlCQUFVLElBQUk7QUFDdkIsV0FBUSxFQUFFLGlCQUFVLElBQUk7QUFDeEIsUUFBSyxFQUFFLGlCQUFVLElBQUk7QUFDckIsWUFBUyxFQUFFLGlCQUFVLElBQUk7QUFDekIsYUFBVSxFQUFFLGlCQUFVLElBQUk7QUFDMUIsb0JBQWlCLEVBQUUsaUJBQVUsTUFBTTtBQUNuQyxZQUFTLEVBQUUsaUJBQVUsS0FBSyxDQUFDO0FBQ3pCLFNBQUksRUFBRSxpQkFBVSxLQUFLLENBQUMsQ0FDcEIsbUJBQU0sZUFBZSxFQUNyQixtQkFBTSxpQkFBaUIsRUFDdkIsbUJBQU0sZ0JBQWdCLENBQ3ZCLENBQUM7QUFDRixZQUFPLEVBQUUsaUJBQVUsTUFBTTtBQUN6QixhQUFRLEVBQUUsaUJBQVUsS0FBSztBQUN6QixhQUFRLEVBQUUsaUJBQVUsSUFBSTtBQUN4QixnQkFBVyxFQUFFLGlCQUFVLElBQUk7QUFDM0Isa0JBQWEsRUFBRSxpQkFBVSxJQUFJO0FBQzdCLHFCQUFnQixFQUFFLGlCQUFVLElBQUk7QUFDaEMsNkJBQXdCLEVBQUUsaUJBQVUsSUFBSTtBQUN4QyxxQkFBZ0IsRUFBRSxpQkFBVSxJQUFJO0lBQ2pDLENBQUM7QUFDRixXQUFRLEVBQUUsaUJBQVUsS0FBSyxDQUFDO0FBQ3hCLFNBQUksRUFBRSxpQkFBVSxNQUFNO0FBQ3RCLGVBQVUsRUFBRSxpQkFBVSxJQUFJO0FBQzFCLG1CQUFjLEVBQUUsaUJBQVUsSUFBSTtBQUM5QixrQkFBYSxFQUFFLGlCQUFVLElBQUk7SUFDOUIsQ0FBQztBQUNGLFlBQVMsRUFBRSxpQkFBVSxJQUFJO0FBQ3pCLFlBQVMsRUFBRSxpQkFBVSxJQUFJO0FBQ3pCLFNBQU0sRUFBRSxpQkFBVSxJQUFJO0FBQ3RCLGVBQVksRUFBRSxpQkFBVSxJQUFJO0FBQzVCLGNBQVcsRUFBRSxpQkFBVSxHQUFHO0FBQzFCLFVBQU8sRUFBRSxpQkFBVSxLQUFLLENBQUM7QUFDdkIsZ0JBQVcsRUFBRSxpQkFBVSxJQUFJO0FBQzNCLGFBQVEsRUFBRSxpQkFBVSxNQUFNO0FBQzFCLGNBQVMsRUFBRSxpQkFBVSxNQUFNO0FBQzNCLGtCQUFhLEVBQUUsaUJBQVUsSUFBSTtBQUM3Qix1QkFBa0IsRUFBRSxpQkFBVSxJQUFJO0FBQ2xDLG1CQUFjLEVBQUUsaUJBQVUsSUFBSTtBQUM5QixtQkFBYyxFQUFFLGlCQUFVLElBQUk7QUFDOUIsZ0JBQVcsRUFBRSxpQkFBVSxJQUFJO0FBQzNCLHNCQUFpQixFQUFFLGlCQUFVLElBQUk7QUFDakMsZUFBVSxFQUFFLGlCQUFVLElBQUk7QUFDMUIsU0FBSSxFQUFFLGlCQUFVLE1BQU07QUFDdEIsb0JBQWUsRUFBRSxpQkFBVSxLQUFLO0FBQ2hDLGdCQUFXLEVBQUUsaUJBQVUsTUFBTTtBQUM3QixtQkFBYyxFQUFFLGlCQUFVLE1BQU07QUFDaEMsaUJBQVksRUFBRSxpQkFBVSxJQUFJO0FBQzVCLGlCQUFZLEVBQUUsaUJBQVUsSUFBSTtBQUM1QixzQkFBaUIsRUFBRSxpQkFBVSxJQUFJO0FBQ2pDLGVBQVUsRUFBRSxpQkFBVSxNQUFNO0FBQzVCLDJCQUFzQixFQUFFLGlCQUFVLElBQUk7QUFDdEMsWUFBTyxFQUFFLGlCQUFVLE1BQU07QUFDekIsYUFBUSxFQUFFLGlCQUFVLE1BQU07QUFDMUIsY0FBUyxFQUFFLGlCQUFVLE1BQU07QUFDM0IsYUFBUSxFQUFFLGlCQUFVLE1BQU07SUFDM0IsQ0FBQztBQUNGLFlBQVMsRUFBRSxpQkFBVSxLQUFLLENBQUM7QUFDekIsa0JBQWEsRUFBRSxpQkFBVSxNQUFNO0lBQ2hDLENBQUM7QUFDRixZQUFTLEVBQUUsaUJBQVUsSUFBSTtBQUN6QixjQUFXLEVBQUUsaUJBQVUsTUFBTTtFQUM5QixDQUFDO0FBQ0YsZUFBYyxDQUFDLFlBQVksR0FBRztBQUM1QixTQUFNLEVBQUUsTUFBTTtBQUNkLFlBQVMsRUFBRSxTQUFTO0FBQ3BCLFVBQU8sRUFBRSxLQUFLO0FBQ2QsV0FBUSxFQUFFLElBQUk7QUFDZCxRQUFLLEVBQUUsS0FBSztBQUNaLFlBQVMsRUFBRSxLQUFLO0FBQ2hCLGFBQVUsRUFBRSxLQUFLO0FBQ2pCLG9CQUFpQixFQUFFLFNBQVM7QUFDNUIsWUFBUyxFQUFFO0FBQ1QsU0FBSSxFQUFFLG1CQUFNLGVBQWU7QUFDM0IsWUFBTyxFQUFFLG1CQUFNLG1CQUFtQjtBQUNsQyxhQUFRLEVBQUUsRUFBRTtBQUNaLGFBQVEsRUFBRSxTQUFTO0FBQ25CLGdCQUFXLEVBQUUsU0FBUztBQUN0QixrQkFBYSxFQUFFLEtBQUs7QUFDcEIscUJBQWdCLEVBQUUsS0FBSztBQUN2Qiw2QkFBd0IsRUFBRSxLQUFLO0FBQy9CLHFCQUFnQixFQUFFLEtBQUs7SUFDeEI7QUFDRCxXQUFRLEVBQUU7QUFDUixTQUFJLEVBQUUsbUJBQU0sY0FBYztBQUMxQixlQUFVLEVBQUUsS0FBSztBQUNqQixtQkFBYyxFQUFFLFNBQVM7QUFDekIsa0JBQWEsRUFBRSxTQUFTO0lBQ3pCO0FBQ0QsWUFBUyxFQUFFLEtBQUs7QUFDaEIsWUFBUyxFQUFFLEtBQUs7QUFDaEIsU0FBTSxFQUFFLEtBQUs7QUFDYixvQkFBaUIsRUFBRSxLQUFLO0FBQ3hCLGVBQVksRUFBRSxLQUFLO0FBQ25CLGNBQVcsRUFBRSxFQUFFO0FBQ2YsVUFBTyxFQUFFO0FBQ1AsZ0JBQVcsRUFBRSxLQUFLO0FBQ2xCLGFBQVEsRUFBRSxTQUFTO0FBQ25CLGNBQVMsRUFBRSxTQUFTO0FBQ3BCLGtCQUFhLEVBQUUsSUFBSTtBQUNuQix1QkFBa0IsRUFBRSxTQUFTO0FBQzdCLG1CQUFjLEVBQUUsU0FBUztBQUN6QixtQkFBYyxFQUFFLFNBQVM7QUFDekIsZ0JBQVcsRUFBRSxTQUFTO0FBQ3RCLHNCQUFpQixFQUFFLFNBQVM7QUFDNUIsZUFBVSxFQUFFLFNBQVM7QUFDckIsaUJBQVksRUFBRSxTQUFTO0FBQ3ZCLGlCQUFZLEVBQUUsU0FBUztBQUN2QixrQkFBYSxFQUFFLFNBQVM7QUFDeEIsbUJBQWMsRUFBRSxTQUFTO0FBQ3pCLFNBQUksRUFBRSxTQUFTO0FBQ2Ysb0JBQWUsRUFBRSxtQkFBTSxrQkFBa0I7QUFDekMsZ0JBQVcsRUFBRSxTQUFTO0FBQ3RCLG1CQUFjLEVBQUUsbUJBQU0sZUFBZTtBQUNyQyxzQkFBaUIsRUFBRSxTQUFTO0FBQzVCLGVBQVUsRUFBRSxTQUFTO0FBQ3JCLDJCQUFzQixFQUFFLFNBQVM7QUFDakMsWUFBTyxFQUFFLG1CQUFNLFFBQVE7QUFDdkIsYUFBUSxFQUFFLG1CQUFNLFNBQVM7QUFDekIsY0FBUyxFQUFFLG1CQUFNLFVBQVU7QUFDM0IsYUFBUSxFQUFFLG1CQUFNLFNBQVM7SUFDMUI7QUFDRCxZQUFTLEVBQUU7QUFDVCxrQkFBYSxFQUFFLENBQUM7SUFDakI7QUFDRCxZQUFTLEVBQUUsS0FBSztBQUNoQixjQUFXLEVBQUUsU0FBUztFQUN2QixDQUFDOztzQkFFYSxjQUFjOzs7Ozs7O0FDcDJCN0IsZ0Q7Ozs7Ozs7Ozs7O3NCQ0FlO0FBQ2IsWUFBUyxFQUFFLE1BQU07QUFDakIsV0FBUSxFQUFFLEtBQUs7QUFDZixnQkFBYSxFQUFFLEVBQUU7QUFDakIsWUFBUyxFQUFFLEdBQUc7QUFDZCxZQUFTLEVBQUUsSUFBSTtBQUNmLFdBQVEsRUFBRSxHQUFHO0FBQ2IsYUFBVSxFQUFFLElBQUk7QUFDaEIsc0JBQW1CLEVBQUUsRUFBRTtBQUN2QixrQkFBZSxFQUFFLE1BQU07QUFDdkIsb0JBQWlCLEVBQUUsT0FBTztBQUMxQixtQkFBZ0IsRUFBRSxVQUFVO0FBQzVCLGlCQUFjLEVBQUUsTUFBTTtBQUN0QixrQkFBZSxFQUFFLE9BQU87QUFDeEIsb0JBQWlCLEVBQUUsU0FBUztBQUM1QixxQkFBa0IsRUFBRSxDQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBRTtBQUN0QyxrQkFBZSxFQUFFLENBQUM7QUFDbEIsZUFBWSxFQUFFLDZCQUE2QjtBQUMzQyxtQkFBZ0IsRUFBRSxvQkFBb0I7QUFDdEMsV0FBUSxFQUFFLFVBQVU7QUFDcEIsZUFBWSxFQUFFLEdBQUc7QUFDakIsY0FBVyxFQUFFO0FBQ1gsU0FBSSxFQUFFLFlBQVk7QUFDbEIsVUFBSyxFQUFFLGFBQWE7QUFDcEIsV0FBTSxFQUFFLGNBQWM7QUFDdEIsV0FBTSxFQUFFLGNBQWM7QUFDdEIsU0FBSSxFQUFFLFlBQVk7QUFDbEIsV0FBTSxFQUFFLGNBQWM7SUFDdkI7RUFDRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0NDN0IyQyxDQUFPOzs7O3FDQUM5QixDQUFXOzs7O2tDQUNkLENBQVM7Ozs7dUNBQ04sQ0FBWTs7OztrREFDQyxDQUF5Qjs7OztLQUVyRCxRQUFRO2FBQVIsUUFBUTs7WUFBUixRQUFROzJCQUFSLFFBQVE7O2dDQUFSLFFBQVE7OztnQkFBUixRQUFROztZQUNLLDZCQUFHO0FBQUUsV0FBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQUU7OztZQUMvQixtQ0FBQyxLQUFLLEVBQUU7QUFBRSxXQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUFFOzs7WUFDMUQsZ0JBQUMsT0FBTyxFQUFFO0FBQ2QsNkJBQVMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLGFBQWEsR0FBRyxPQUFPLEtBQUssZUFBZSxDQUFDO01BQ3hFOzs7WUFDSyxrQkFBRztBQUNQLGNBQ0UsNENBQU8sU0FBUyxFQUFDLHFCQUFxQjtBQUNwQyxhQUFJLEVBQUMsVUFBVTtBQUNmLGdCQUFPLEVBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFTO0FBQzlCLGlCQUFRLEVBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFVLEdBQUcsQ0FDckM7TUFDSDs7O1VBYkcsUUFBUTs7O0tBZ0JSLFdBQVc7YUFBWCxXQUFXOztZQUFYLFdBQVc7MkJBQVgsV0FBVzs7Z0NBQVgsV0FBVzs7O2dCQUFYLFdBQVc7O1lBRVQsa0JBQUc7QUFDUCxXQUFNLGdCQUFnQixHQUFHLDZCQUFTLDJCQUEyQixFQUFFLHNCQUFzQixDQUFDLENBQUM7QUFDdkYsV0FBTSxZQUFZLEdBQUcsNkJBQVMsT0FBTyxFQUFFLGFBQWEsRUFBRTtBQUNwRCx5QkFBZ0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7QUFDckMsMEJBQWlCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTO1FBQ3hDLENBQUMsQ0FBQztBQUNILFdBQUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDO0FBQzlCLFdBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLGtCQUFrQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0FBQ3BGLFdBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDOztBQUVqQyxjQUNFOztXQUFLLEdBQUcsRUFBQyxXQUFXLEVBQUMsU0FBUyxFQUFHLGdCQUFrQjtTQUNqRDs7YUFBTyxTQUFTLEVBQUcsWUFBYztXQUMvQjs7O2FBQ0U7O2lCQUFJLEdBQUcsRUFBQyxRQUFRO2VBQ1osa0JBQWtCO2VBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTtjQUNsQjtZQUNDO1VBQ0Y7UUFDSixDQUNOO01BQ0g7OztZQUVvQixpQ0FBRztBQUN0QixXQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxLQUFLLG1CQUFNLGlCQUFpQixFQUFFO0FBQ3hELGdCQUFRLDBFQUF5QixDQUFFO1FBQ3BDLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsS0FBSyxtQkFBTSxnQkFBZ0IsRUFBRTtBQUM5RCxnQkFDRTs7O1dBQ0UsaUNBQUMsUUFBUTtBQUNQLHFCQUFRLEVBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFnQjtBQUN0QyxvQkFBTyxFQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBYSxHQUFFO1VBQ2hCLENBQ3hCO1FBQ0gsTUFBTTtBQUNMLGdCQUFPLElBQUksQ0FBQztRQUNiO01BQ0Y7OztZQUV3QixxQ0FBRztvQkFDdUMsSUFBSSxDQUFDLEtBQUs7V0FBbkUsYUFBYSxVQUFiLGFBQWE7V0FBRSxRQUFRLFVBQVIsUUFBUTtXQUFFLFFBQVEsVUFBUixRQUFRO1dBQUUsU0FBUyxVQUFULFNBQVM7V0FBRSxNQUFNLFVBQU4sTUFBTTs7QUFDNUQsV0FBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQzNCLGNBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3hDLGVBQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO0FBQzFDLGVBQU0sSUFBSSxHQUFHLEtBQUssS0FBSyxRQUFRLEdBQUcsU0FBUyxHQUFHLFNBQVMsQ0FBQztBQUN4RCxlQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FDcEIsbUJBQU0sWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFDNUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBTixNQUFNLEVBQUUsSUFBSSxFQUFKLElBQUksRUFBRSxhQUFhLEVBQWIsYUFBYSxFQUFFLENBQUMsQ0FBQztVQUM5QztRQUNGLE1BQU07QUFDTCxhQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztBQUN2QyxhQUFNLElBQUksR0FBRyxLQUFLLEtBQUssUUFBUSxHQUFHLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDeEQsYUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQ2pCLG1CQUFNLFlBQVksQ0FBQyxRQUFRLEVBQ3pCLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQU4sTUFBTSxFQUFFLElBQUksRUFBSixJQUFJLEVBQUUsYUFBYSxFQUFiLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDOUM7TUFDRjs7O1VBM0RHLFdBQVc7OztBQTZEakIsWUFBVyxDQUFDLFNBQVMsR0FBRztBQUN0QixnQkFBYSxFQUFFLGlCQUFVLE1BQU07QUFDL0IsU0FBTSxFQUFFLGlCQUFVLElBQUk7QUFDdEIsaUJBQWMsRUFBRSxpQkFBVSxJQUFJO0FBQzlCLFdBQVEsRUFBRSxpQkFBVSxNQUFNO0FBQzFCLFlBQVMsRUFBRSxpQkFBVSxNQUFNO0FBQzNCLG1CQUFnQixFQUFFLGlCQUFVLElBQUk7QUFDaEMsV0FBUSxFQUFFLGlCQUFVLElBQUk7QUFDeEIsWUFBUyxFQUFFLGlCQUFVLElBQUk7QUFDekIsYUFBVSxFQUFFLGlCQUFVLElBQUk7QUFDMUIsY0FBVyxFQUFFLGlCQUFVLEtBQUssQ0FBQyxDQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsS0FBSyxDQUFFLENBQUM7QUFDOUQsZ0JBQWEsRUFBRSxpQkFBVSxJQUFJO0VBQzlCLENBQUM7O3NCQUVhLFdBQVc7Ozs7Ozs7QUNqRzFCLGdEOzs7Ozs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxpQkFBZ0I7O0FBRWhCO0FBQ0E7O0FBRUEsa0JBQWlCLHNCQUFzQjtBQUN2QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFJO0FBQ0o7QUFDQSxLQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBLElBQUc7QUFDSCxHQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tDQy9DMkMsQ0FBTzs7OztLQUU3QyxxQkFBcUI7YUFBckIscUJBQXFCOztZQUFyQixxQkFBcUI7MkJBQXJCLHFCQUFxQjs7Z0NBQXJCLHFCQUFxQjs7O2dCQUFyQixxQkFBcUI7O1lBRW5CLGtCQUFHO0FBQ1AsY0FDRTs7V0FBSSxLQUFLLEVBQUcsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFJO1NBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTtRQUNsQixDQUNMO01BQ0g7OztVQVJHLHFCQUFxQjs7O0FBVTNCLHNCQUFxQixDQUFDLFNBQVMsR0FBRztBQUNoQyxXQUFRLEVBQUUsaUJBQVUsSUFBSTtFQUN6QixDQUFDO3NCQUNhLHFCQUFxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0NDZlEsQ0FBTzs7OztrQ0FDakMsQ0FBUzs7OztxQ0FDTixDQUFZOzs7O3dDQUNULEVBQWU7Ozs7NENBQ1gsRUFBbUI7Ozs7dUNBQzFCLENBQVk7Ozs7QUFFakMsS0FBTSxLQUFLLEdBQUcsU0FBUixLQUFLLENBQVksR0FBRyxFQUFFO0FBQzFCLFVBQU8sR0FBRyxJQUFLLE9BQU8sR0FBRyxLQUFLLFVBQVcsQ0FBQztFQUMzQyxDQUFDOztLQUVJLFNBQVM7YUFBVCxTQUFTOztBQUVGLFlBRlAsU0FBUyxDQUVELEtBQUssRUFBRTs7OzJCQUZmLFNBQVM7O0FBR1gsZ0NBSEUsU0FBUyw2Q0FHTCxLQUFLLEVBQUU7O1VBK0pmLGlCQUFpQixHQUFHLFVBQUMsUUFBUSxFQUFFLEtBQUssRUFBSztBQUN2QyxXQUFNLFNBQVMsR0FBRyxNQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDNUMsYUFBSyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztNQUM1Qzs7VUFFRCxrQkFBa0IsR0FBRyxVQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUs7QUFDeEMsV0FBTSxTQUFTLEdBQUcsTUFBSyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzVDLGFBQUssS0FBSyxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7TUFDN0M7O1VBRUQsY0FBYyxHQUFHLGtCQUFRLEVBQUk7QUFDM0IsV0FBSSxXQUFXLGFBQUM7b0JBQ2EsTUFBSyxLQUFLO1dBQS9CLElBQUksVUFBSixJQUFJO1dBQUUsVUFBVSxVQUFWLFVBQVU7O0FBQ3hCLFdBQUksQ0FBQyxPQUFPLENBQUMsVUFBQyxHQUFHLEVBQUUsQ0FBQyxFQUFLO0FBQ3ZCLGFBQUksQ0FBQyxLQUFLLFFBQVEsR0FBRyxDQUFDLEVBQUU7QUFDdEIsc0JBQVcsR0FBRyxHQUFHLENBQUM7VUFDbkI7UUFDRixDQUFDLENBQUM7QUFDSCxpQkFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO01BQ3pCOztVQUVELGVBQWUsR0FBRyxVQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUs7QUFDMUMsV0FBSSxXQUFXLGFBQUM7cUJBQ2MsTUFBSyxLQUFLO1dBQWhDLElBQUksV0FBSixJQUFJO1dBQUUsV0FBVyxXQUFYLFdBQVc7O0FBQ3pCLFdBQUksQ0FBQyxPQUFPLENBQUMsVUFBQyxHQUFHLEVBQUUsQ0FBQyxFQUFLO0FBQ3ZCLGFBQUksQ0FBQyxLQUFLLFFBQVEsR0FBRyxDQUFDLEVBQUU7QUFDdEIsc0JBQVcsR0FBRyxHQUFHLENBQUM7QUFDbEIsa0JBQU8sS0FBSyxDQUFDO1VBQ2Q7UUFDRixDQUFDLENBQUM7QUFDSCxrQkFBVyxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztNQUN0Qzs7VUFFRCwwQkFBMEIsR0FBRyxXQUFDLEVBQUk7QUFDaEMsV0FBSSxDQUFDLE1BQUssS0FBSyxDQUFDLFNBQVMsQ0FBQyxhQUFhLElBQ3JDLENBQUMsTUFBSyxLQUFLLENBQUMsU0FBUyxDQUFDLHdCQUF3QixFQUFFO0FBQ2hELGVBQUssZUFBZSxDQUNsQixDQUFDLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLENBQUMsRUFDeEQsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QjtNQUNGOztVQUVELGNBQWMsR0FBRyxVQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUs7QUFDMUMsYUFBSyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3BCLFdBQUksTUFBSyxtQkFBbUIsRUFBRSxFQUFFO0FBQzlCLG9CQUFXLEVBQUUsQ0FBQztBQUNkLGFBQUksTUFBSyxLQUFLLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQzFEO0FBQ0QsZUFBUSxFQUFFLENBQUM7QUFDWCxXQUFNLFFBQVEsR0FBRztBQUNmLHFCQUFZLEVBQUU7QUFDWixjQUFHLEVBQUUsUUFBUTtBQUNiLGNBQUcsRUFBRSxXQUFXO1VBQ2pCO1FBQ0YsQ0FBQzs7QUFFRixXQUFJLE1BQUssS0FBSyxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsRUFBRTtBQUNqRCxlQUFLLGVBQWUsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFDO0FBQ0QsYUFBSyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDekI7O1VBRUQsc0JBQXNCLEdBQUcsVUFBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBSztBQUMxRCxhQUFLLFFBQVEsQ0FBQyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3RDLFdBQUksTUFBTSxLQUFLLElBQUksRUFBRTtBQUNuQixlQUFLLEtBQUssQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN2RTtNQUNGOztBQWpPQyxTQUFJLENBQUMsS0FBSyxHQUFHO0FBQ1gsbUJBQVksRUFBRSxJQUFJO01BQ25CLENBQUM7QUFDRixTQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN0Qjs7Z0JBUkcsU0FBUzs7WUFVUCxrQkFBRztBQUNQLFdBQU0sWUFBWSxHQUFHLDZCQUFTLE9BQU8sRUFBRTtBQUNyQyx3QkFBZSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTztBQUNuQyx5QkFBZ0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7QUFDckMsc0JBQWEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUs7QUFDL0IsMEJBQWlCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTO1FBQ3hDLENBQUMsQ0FBQzs7QUFFSCxXQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0FBQ3RELFdBQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDOztBQUUvRCxXQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBUyxJQUFJLEVBQUUsQ0FBQyxFQUFFO0FBQ3RELGFBQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFTLE1BQU0sRUFBRSxDQUFDLEVBQUU7QUFDOUQsZUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQyxlQUFJLElBQUksQ0FBQyxPQUFPLElBQ2QsTUFBTSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7QUFDbkMsaUJBQU0sQ0FBQyxRQUFRO0FBQ2YsZUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEtBQUssSUFBSSxJQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFO0FBQ25DLGlCQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQy9CLGlCQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLFVBQVMsS0FBSyxFQUFFO0FBQzdDLHNCQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztjQUNqRixHQUFHLEtBQUssQ0FBQzs7QUFFVixpQkFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQzFCLHVCQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztjQUNwRDs7QUFFRCxvQkFDSTs7O0FBQ0UsNkJBQVksRUFBRyxJQUFJLENBQUMsc0JBQXdCOztBQUU1Qyx5QkFBUSxFQUFHLFFBQVU7QUFDckIsdUJBQU0sRUFBRyxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxLQUFPO0FBQ3pDLG9CQUFHLEVBQUcsQ0FBRztBQUNULDJCQUFVLEVBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBWTtBQUM3Qyx5QkFBUSxFQUFHLENBQUc7QUFDZCx5QkFBUSxFQUFHLENBQUc7ZUFDWixVQUFVO2NBQ0ksQ0FDbEI7WUFDTCxNQUFNOztBQUVMLGlCQUFJLFdBQVcsR0FBRyxVQUFVLENBQUM7QUFDN0IsaUJBQUksV0FBVyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7QUFDbkMsaUJBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRTtBQUMzQiwwQkFBVyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Y0FDeEQ7O0FBRUQsaUJBQUksT0FBTyxNQUFNLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRTtBQUN4QyxtQkFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUMvRSxtQkFBSSxDQUFDLG1CQUFNLGNBQWMsQ0FBQyxjQUFjLENBQUMsRUFBRTtBQUN6Qyw0QkFBVyxHQUNULDBDQUFLLHVCQUF1QixFQUFHLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBSSxHQUM1RCxDQUFDO2dCQUNILE1BQU07QUFDTCw0QkFBVyxHQUFHLGNBQWMsQ0FBQztnQkFDOUI7Y0FDRjtBQUNELG9CQUNFOztpQkFBYSxHQUFHLEVBQUcsQ0FBRztBQUNwQiwwQkFBUyxFQUFHLE1BQU0sQ0FBQyxLQUFPO0FBQzFCLDBCQUFTLEVBQUcsV0FBYTtBQUN6Qix5QkFBUSxFQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBVTtBQUNoQyx1QkFBTSxFQUFHLE1BQU0sQ0FBQyxNQUFRO0FBQ3hCLHVCQUFNLEVBQUcsSUFBSSxDQUFDLGNBQWdCO0FBQzlCLHNCQUFLLEVBQUcsTUFBTSxDQUFDLEtBQU87ZUFDcEIsV0FBVztjQUNELENBQ2Q7WUFDSDtVQUNGLEVBQUUsSUFBSSxDQUFDLENBQUM7O0FBRVQsYUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDdEYsYUFBTSxlQUFlLEdBQUcsa0JBQWtCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsR0FDNUQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQzs7QUFFcEUsYUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7QUFDekMsYUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRTtBQUNqQyxzQkFBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztVQUMvQztBQUNELGdCQUNFOzthQUFVLFVBQVUsRUFBRyxRQUFVLEVBQUMsR0FBRyxFQUFHLENBQUcsRUFBQyxTQUFTLEVBQUcsV0FBYTtBQUNuRSxzQkFBUyxFQUFHLGtCQUFrQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLFNBQVc7QUFDbkUsMkJBQWMsRUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssbUJBQU0sY0FBZ0I7QUFDcEUsdUJBQVUsRUFBRyxJQUFJLENBQUMsY0FBZ0I7QUFDbEMsMkJBQWMsRUFBRyxJQUFJLENBQUMsa0JBQW9CO0FBQzFDLDBCQUFhLEVBQUcsSUFBSSxDQUFDLGlCQUFtQjtBQUN4Qyx3QkFBVyxFQUFHLElBQUksQ0FBQyxlQUFpQjtXQUNsQyxlQUFlO1dBQ2YsWUFBWTtVQUNMLENBQ1g7UUFDSCxFQUFFLElBQUksQ0FBQyxDQUFDOztBQUVULFdBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDMUIsa0JBQVMsQ0FBQyxJQUFJLENBQ1o7O2FBQVUsR0FBRyxFQUFDLGlCQUFpQjtXQUM3Qjs7ZUFBSSxPQUFPLEVBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLGtCQUFrQixHQUFHLENBQUMsR0FBRyxDQUFDLENBQUc7QUFDcEUsd0JBQVMsRUFBQyx3QkFBd0I7YUFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLElBQUksbUJBQU0sWUFBWTtZQUM1QztVQUNJLENBQ1osQ0FBQztRQUNIOztBQUVELFdBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDOztBQUVyQixjQUNFOztXQUFLLEdBQUcsRUFBQyxXQUFXLEVBQUMsU0FBUyxFQUFDLHlCQUF5QixFQUFDLEtBQUssRUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQU87U0FDakY7O2FBQU8sU0FBUyxFQUFHLFlBQWM7V0FDN0IsV0FBVztXQUNiOztlQUFPLEdBQUcsRUFBQyxPQUFPO2FBQ2QsU0FBUztZQUNMO1VBQ0Y7UUFDSixDQUNOO01BQ0g7OztZQUVnQiwyQkFBQyxrQkFBa0IsRUFBRTtBQUNwQyxXQUFJLGVBQWUsR0FBRyxJQUFJLENBQUM7O0FBRTNCLFdBQUksa0JBQWtCLEVBQUU7QUFDdEIsYUFBTSxLQUFLLEdBQUc7QUFDWixnQkFBSyxFQUFFLEVBQUU7QUFDVCxtQkFBUSxFQUFFLEVBQUU7VUFDYixDQUFDO0FBQ0YsYUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFO0FBQzFDLDBCQUFlLEdBQUksMENBQUssS0FBSyxFQUFHLEtBQU8sRUFBQyxHQUFHLEVBQUcsQ0FBQyxDQUFHLEdBQVEsQ0FBQztVQUM1RDtRQUNGO0FBQ0QsV0FBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVMsTUFBTSxFQUFFLENBQUMsRUFBRTtBQUN6RCxhQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2hGLGFBQU0sS0FBSyxHQUFHO0FBQ1osa0JBQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxJQUFJO0FBQ3RDLGdCQUFLLEVBQUUsS0FBSztBQUNaLG1CQUFRLEVBQUUsS0FBSzs7O1VBR2hCLENBQUM7QUFDRixnQkFBUSwwQ0FBSyxLQUFLLEVBQUcsS0FBTyxFQUFDLEdBQUcsRUFBRyxDQUFHLEVBQUMsU0FBUyxFQUFHLE1BQU0sQ0FBQyxTQUFXLEdBQU8sQ0FBRTtRQUMvRSxDQUFDLENBQUM7O0FBRUgsY0FDRTs7V0FBVSxHQUFHLEVBQUMsUUFBUTtTQUNsQixlQUFlO1NBQUksT0FBTztRQUNuQixDQUNYO01BQ0g7OztZQXVFb0IsK0JBQUMsUUFBUSxFQUFFO0FBQzlCLFdBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLG1CQUFNLGlCQUFpQixFQUFFO0FBQ3pELGdCQUNFOzthQUFhLFNBQVMsRUFBQyxRQUFRO1dBQzdCLDRDQUFPLElBQUksRUFBQyxPQUFPLEVBQUMsT0FBTyxFQUFHLFFBQVU7QUFDdEMscUJBQVEsRUFBRyxJQUFJLENBQUMsMEJBQTRCLEdBQUU7VUFDcEMsQ0FDZDtRQUNILE1BQU07QUFDTCxnQkFDRTs7YUFBYSxTQUFTLEVBQUMsUUFBUTtXQUM3Qiw0Q0FBTyxJQUFJLEVBQUMsVUFBVSxFQUFDLE9BQU8sRUFBRyxRQUFVO0FBQzNDLHFCQUFRLEVBQUcsSUFBSSxDQUFDLDBCQUE0QixHQUFFO1VBQ2xDLENBQ2Q7UUFDSDtNQUNGOzs7WUFFa0IsK0JBQUc7QUFDcEIsY0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEtBQUssbUJBQU0saUJBQWlCLElBQ3RELElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxtQkFBTSxnQkFBZ0IsQ0FBQztNQUM1RDs7O1VBNVBHLFNBQVM7OztBQThQZixVQUFTLENBQUMsU0FBUyxHQUFHO0FBQ3BCLE9BQUksRUFBRSxpQkFBVSxLQUFLO0FBQ3JCLFVBQU8sRUFBRSxpQkFBVSxLQUFLO0FBQ3hCLFVBQU8sRUFBRSxpQkFBVSxJQUFJO0FBQ3ZCLFdBQVEsRUFBRSxpQkFBVSxJQUFJO0FBQ3hCLFFBQUssRUFBRSxpQkFBVSxJQUFJO0FBQ3JCLFlBQVMsRUFBRSxpQkFBVSxJQUFJO0FBQ3pCLFdBQVEsRUFBRSxpQkFBVSxNQUFNO0FBQzFCLGtCQUFlLEVBQUUsaUJBQVUsS0FBSztBQUNoQyxhQUFVLEVBQUUsaUJBQVUsSUFBSTtBQUMxQixjQUFXLEVBQUUsaUJBQVUsSUFBSTtBQUMzQixhQUFVLEVBQUUsaUJBQVUsTUFBTTtBQUM1QixRQUFLLEVBQUUsaUJBQVUsTUFBTTtFQUN4QixDQUFDO3NCQUNhLFNBQVM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0NDdlJvQixDQUFPOzs7O0tBRTdDLFFBQVE7YUFBUixRQUFROztBQUVELFlBRlAsUUFBUSxDQUVBLEtBQUssRUFBRTs7OzJCQUZmLFFBQVE7O0FBR1YsZ0NBSEUsUUFBUSw2Q0FHSixLQUFLLEVBQUU7O1VBSWYsUUFBUSxHQUFHLFdBQUMsRUFBSTtBQUNkLFdBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssT0FBTyxJQUM1QixDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxRQUFRLElBQzdCLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxLQUFLLFVBQVUsRUFBRTs7QUFDbkMsZUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQzlDLGVBQUksTUFBSyxLQUFLLENBQUMsU0FBUyxFQUFFO0FBQ3hCLGlCQUFJLE1BQUssS0FBSyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUU7QUFDdEMscUJBQUssS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFLLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztjQUMxRCxNQUFNLElBQUksTUFBSyxLQUFLLENBQUMsU0FBUyxDQUFDLHdCQUF3QixFQUFFO0FBQ3hELHFCQUFLLFFBQVEsRUFBRSxDQUFDOzs7OztBQUtoQix5QkFBVSxDQUFDLFlBQU07QUFDZixxQkFBSSxNQUFLLFFBQVEsS0FBSyxDQUFDLEVBQUU7QUFDdkIseUJBQUssS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFLLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztrQkFDMUQ7QUFDRCx1QkFBSyxRQUFRLEdBQUcsQ0FBQyxDQUFDO2dCQUNuQixFQUFFLEdBQUcsQ0FBQyxDQUFDO2NBQ1Q7WUFDRjtBQUNELGVBQUksTUFBSyxLQUFLLENBQUMsVUFBVSxFQUFFLE1BQUssS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQzs7UUFDNUQ7TUFDRjs7VUFFRCxXQUFXLEdBQUcsV0FBQyxFQUFJO0FBQ2pCLFdBQUksTUFBSyxLQUFLLENBQUMsYUFBYSxFQUFFO0FBQzVCLGVBQUssS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2RDtNQUNGOztVQUVELFlBQVksR0FBRyxXQUFDLEVBQUk7QUFDbEIsV0FBSSxNQUFLLEtBQUssQ0FBQyxjQUFjLEVBQUU7QUFDN0IsZUFBSyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hEO01BQ0Y7O0FBdkNDLFNBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQ25COztnQkFMRyxRQUFROztZQTZDTixrQkFBRztBQUNQLFdBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLFdBQU0sS0FBSyxHQUFHO0FBQ1osY0FBSyxFQUFFO0FBQ0wsMEJBQWUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsSUFBSTtVQUM3RTtBQUNELGtCQUFTLEVBQUUsQ0FDVCxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQ3ZELElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxFQUFFLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDO1FBQ3RFLENBQUM7O0FBRUYsV0FBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxhQUFhLElBQzdELElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLHdCQUF3QixDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUU7QUFDekUsZ0JBQ0U7O3dCQUFTLEtBQUs7QUFDVix3QkFBVyxFQUFHLElBQUksQ0FBQyxZQUFjO0FBQ2pDLHVCQUFVLEVBQUcsSUFBSSxDQUFDLFdBQWE7QUFDL0Isb0JBQU8sRUFBRyxJQUFJLENBQUMsUUFBVTtXQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTtVQUFPLENBQzFEO1FBQ0gsTUFBTTtBQUNMLGdCQUNFOztXQUFTLEtBQUs7V0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7VUFBTyxDQUM3QztRQUNIO01BQ0Y7OztVQXJFRyxRQUFROzs7QUF1RWQsU0FBUSxDQUFDLFNBQVMsR0FBRztBQUNuQixhQUFVLEVBQUUsaUJBQVUsSUFBSTtBQUMxQixpQkFBYyxFQUFFLGlCQUFVLElBQUk7QUFDOUIsYUFBVSxFQUFFLGlCQUFVLElBQUk7QUFDMUIsY0FBVyxFQUFFLGlCQUFVLElBQUk7QUFDM0IsZ0JBQWEsRUFBRSxpQkFBVSxJQUFJO0FBQzdCLGlCQUFjLEVBQUUsaUJBQVUsSUFBSTtFQUMvQixDQUFDO0FBQ0YsU0FBUSxDQUFDLFlBQVksR0FBRztBQUN0QixhQUFVLEVBQUUsU0FBUztFQUN0QixDQUFDO3NCQUNhLFFBQVE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0NDcEZxQixDQUFPOzs7O2tDQUNqQyxDQUFTOzs7O0tBRXJCLFdBQVc7YUFBWCxXQUFXOztBQUVKLFlBRlAsV0FBVyxDQUVILEtBQUssRUFBRTs7OzJCQUZmLFdBQVc7O0FBR2IsZ0NBSEUsV0FBVyw2Q0FHUCxLQUFLLEVBQUU7O1VBd0NmLGNBQWMsR0FBRyxXQUFDLEVBQUk7QUFDcEIsV0FBSSxNQUFLLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLG1CQUFNLGlCQUFpQixFQUFFO0FBQ3hELGFBQUksUUFBUSxDQUFDLFNBQVMsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRTtBQUNsRCxtQkFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztVQUM1QixNQUFNLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRTtBQUM5QixlQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDbEMsY0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO1VBQ3ZCO1FBQ0Y7QUFDRCxhQUFLLEtBQUssQ0FBQyxNQUFNLENBQ2YsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLENBQUMsRUFDMUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztNQUM5QjtJQW5EQTs7OztnQkFKRyxXQUFXOztZQU1NLCtCQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUU7V0FDbEMsUUFBUSxHQUFLLElBQUksQ0FBQyxLQUFLLENBQXZCLFFBQVE7O0FBQ2hCLFdBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxLQUFLLElBQ25ELElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxTQUFTLElBQzVDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxNQUFNLElBQ3RDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxTQUFTLElBQzVDLE9BQU8sUUFBUSxLQUFLLE9BQU8sU0FBUyxDQUFDLFFBQVEsSUFDN0MsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQzs7QUFFaEYsV0FBSSxhQUFhLEVBQUU7QUFDakIsZ0JBQU8sYUFBYSxDQUFDO1FBQ3RCOztBQUVELFdBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLFFBQVEsS0FBSyxJQUFJLElBQUksUUFBUSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUU7QUFDaEYsYUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxVQUFVLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO0FBQ3pFLHdCQUFhLEdBQUcsYUFBYSxJQUMzQixRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQ3JELFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztVQUMvRCxNQUFNO0FBQ0wsd0JBQWEsR0FBRyxJQUFJLENBQUM7VUFDdEI7UUFDRixNQUFNO0FBQ0wsc0JBQWEsR0FBRyxhQUFhLElBQUksUUFBUSxLQUFLLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFDbEU7O0FBRUQsV0FBSSxhQUFhLEVBQUU7QUFDakIsZ0JBQU8sYUFBYSxDQUFDO1FBQ3RCOztBQUVELFdBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDaEQsZ0JBQU8sS0FBSyxDQUFDO1FBQ2QsTUFBTTtBQUNMLGdCQUFPLGFBQWEsSUFDZixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDM0Q7TUFDRjs7O1lBZ0JLLGtCQUFHO0FBQ1AsV0FBTSxPQUFPLEdBQUc7QUFDZCxrQkFBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUztBQUMvQixnQkFBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxJQUFJO1FBQzNDLENBQUM7O0FBRUYsV0FBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ2hCLFdBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUU7QUFDdkIsYUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssbUJBQU0sZUFBZSxFQUFFO0FBQ3RELGVBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztVQUNwQyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLG1CQUFNLGlCQUFpQixFQUFFO0FBQy9ELGVBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztVQUMxQztRQUNGO0FBQ0QsY0FDRTs7b0JBQUksS0FBSyxFQUFHLE9BQVMsRUFBQyxTQUFTLEVBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFXLElBQU0sSUFBSTtTQUM5RCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7UUFDbEIsQ0FDTDtNQUNIOzs7VUE1RUcsV0FBVzs7O0FBOEVqQixZQUFXLENBQUMsU0FBUyxHQUFHO0FBQ3RCLFlBQVMsRUFBRSxpQkFBVSxNQUFNO0FBQzNCLFNBQU0sRUFBRSxpQkFBVSxJQUFJO0FBQ3RCLFlBQVMsRUFBRSxpQkFBVSxNQUFNO0FBQzNCLFdBQVEsRUFBRSxpQkFBVSxJQUFJO0VBQ3pCLENBQUM7O0FBRUYsWUFBVyxDQUFDLFlBQVksR0FBRztBQUN6QixZQUFTLEVBQUUsTUFBTTtBQUNqQixTQUFNLEVBQUUsS0FBSztBQUNiLFlBQVMsRUFBRSxFQUFFO0VBQ2QsQ0FBQztzQkFDYSxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrQ0M3RmtCLENBQU87Ozs7bUNBQ2hDLEVBQVU7Ozs7MkNBQ1IsRUFBbUI7Ozs7dUNBQ25CLENBQVk7Ozs7S0FFM0IsZUFBZTthQUFmLGVBQWU7O0FBQ1IsWUFEUCxlQUFlLENBQ1AsS0FBSyxFQUFFOzs7MkJBRGYsZUFBZTs7QUFFakIsZ0NBRkUsZUFBZSw2Q0FFWCxLQUFLLEVBQUU7O1VBT2YsY0FBYyxHQUFHLFdBQUMsRUFBSTtBQUNwQixXQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUssRUFBRSxFQUFFOztBQUVwQixhQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksS0FBSyxVQUFVLEdBQ2pDLE1BQUssaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7O0FBRWxFLGFBQUksQ0FBQyxNQUFLLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUMxQixrQkFBTztVQUNSO0FBQ0QsZUFBSyxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxNQUFLLEtBQUssQ0FBQyxRQUFRLEVBQUUsTUFBSyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUssRUFBRSxFQUFFO0FBQzNCLGVBQUssS0FBSyxDQUFDLFlBQVksQ0FDckIsSUFBSSxFQUFFLE1BQUssS0FBSyxDQUFDLFFBQVEsRUFBRSxNQUFLLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRDtNQUNGOztVQUVELFVBQVUsR0FBRyxXQUFDLEVBQUk7QUFDaEIsV0FBSSxNQUFLLEtBQUssQ0FBQyxVQUFVLEVBQUU7QUFDekIsYUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEtBQUssVUFBVSxHQUNqQyxNQUFLLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO0FBQ2xFLGFBQUksQ0FBQyxNQUFLLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUMxQixrQkFBTztVQUNSO0FBQ0QsZUFBSyxLQUFLLENBQUMsWUFBWSxDQUNuQixLQUFLLEVBQUUsTUFBSyxLQUFLLENBQUMsUUFBUSxFQUFFLE1BQUssS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3REO01BQ0Y7O0FBaENDLFNBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLFNBQUksQ0FBQyxLQUFLLEdBQUc7QUFDWCxrQkFBVyxFQUFFLEtBQUs7TUFDbkIsQ0FBQztJQUNIOztnQkFQRyxlQUFlOztZQXFDVixtQkFBQyxLQUFLLEVBQUU7QUFDZixXQUFNLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEIsV0FBSSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUU7QUFDL0IsYUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2pELGFBQUksQ0FBQyxLQUFLLEVBQUU7QUFDVixhQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0FBQ2xFLGVBQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDOztBQUUvQixhQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDbEIsYUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ25DLGFBQUUsQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLFlBQU07QUFDbEMsZUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ3JDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDUixnQkFBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2Qsa0JBQU8sS0FBSyxDQUFDO1VBQ2Q7UUFDRjtBQUNELGNBQU8sSUFBSSxDQUFDO01BQ2I7Ozs7Ozs7Ozs7Ozs7UUFDVyxZQUFHO0FBQ2IsV0FBSSxJQUFJLENBQUMsYUFBYSxLQUFLLENBQUMsRUFBRTtBQUM1QixxQkFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNqQyxhQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQztRQUN4QjtNQUNGOzs7WUFDZ0IsNkJBQUc7QUFDbEIsV0FBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7TUFDNUI7OztZQUVtQixnQ0FBRztBQUNyQixXQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7TUFDckI7OztZQUVLLGtCQUFHO29CQUNnQyxJQUFJLENBQUMsS0FBSztXQUF6QyxRQUFRLFVBQVIsUUFBUTtXQUFFLE1BQU0sVUFBTixNQUFNO1dBQUUsUUFBUSxVQUFSLFFBQVE7V0FDMUIsV0FBVyxHQUFLLElBQUksQ0FBQyxLQUFLLENBQTFCLFdBQVc7O0FBQ25CLFdBQU0sSUFBSSxHQUFHO0FBQ1gsWUFBRyxFQUFFLFVBQVU7QUFDZixrQkFBUyxFQUFFLElBQUksQ0FBQyxjQUFjO0FBQzlCLGVBQU0sRUFBRSxJQUFJLENBQUMsVUFBVTtRQUN4QixDQUFDOztBQUVGLGVBQVEsQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7O0FBRWxFLFdBQU0sV0FBVyxHQUFHLDZCQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUNoRixjQUNFOztXQUFJLEdBQUcsRUFBQyxJQUFJLEVBQUMsS0FBSyxFQUFHLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBSTtTQUMzQyx5QkFBTyxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQztTQUM3RCxnRUFBVSxHQUFHLEVBQUMsVUFBVSxHQUFFO1FBQ3ZCLENBQ0w7TUFDSDs7O1lBRWdCLDJCQUFDLENBQUMsRUFBRTtBQUNuQixXQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDZixXQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEQsWUFBSyxHQUFHLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsY0FBTyxLQUFLLENBQUM7TUFDZDs7O1VBL0ZHLGVBQWU7OztBQWtHckIsZ0JBQWUsQ0FBQyxTQUFTLEdBQUc7QUFDMUIsZUFBWSxFQUFFLGlCQUFVLElBQUk7QUFDNUIsV0FBUSxFQUFFLGlCQUFVLE1BQU07QUFDMUIsV0FBUSxFQUFFLGlCQUFVLE1BQU07QUFDMUIsYUFBVSxFQUFFLGlCQUFVLElBQUk7QUFDMUIsV0FBUSxFQUFFLGlCQUFVLFNBQVMsQ0FBQyxDQUFFLGlCQUFVLElBQUksRUFBRSxpQkFBVSxNQUFNLENBQUUsQ0FBQztBQUNuRSxTQUFNLEVBQUUsaUJBQVUsU0FBUyxDQUFDLENBQUUsaUJBQVUsSUFBSSxFQUFFLGlCQUFVLElBQUksQ0FBRSxDQUFDO0FBQy9ELFdBQVEsRUFBRSxpQkFBVSxJQUFJO0VBQ3pCLENBQUM7O3NCQUdhLGVBQWU7Ozs7Ozs7Ozs7Ozs7Ozs7O2tDQ2xIWixDQUFPOzs7O0FBRXpCLEtBQU0sTUFBTSxHQUFHLFNBQVQsTUFBTSxDQUFZLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUU7QUFDekUsT0FBSSxRQUFRLEtBQUssSUFBSSxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRTs7QUFDckQsU0FBTSxJQUFJLEdBQUcsUUFBUSxHQUFHLE1BQU0sR0FBRyxRQUFRLENBQUM7QUFDMUMsWUFDRSx1REFBWSxJQUFJLElBQUcsSUFBSSxFQUFHLElBQU0sRUFBQyxZQUFZLEVBQUcsWUFBYztBQUMxRCxnQkFBUyxFQUFHLENBQUUsV0FBVyxJQUFJLEVBQUUsSUFBSSxnQ0FBa0MsSUFBRyxDQUM1RTtJQUNILE1BQU0sSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUNwQixTQUFNLElBQUksR0FBRyxRQUFRLEdBQUcsTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUMxQyxZQUNJLHVEQUFZLElBQUksSUFBRyxJQUFJLEVBQUcsSUFBTSxFQUFDLFlBQVksRUFBRyxZQUFjO0FBQzVELGVBQVEsRUFBQyxVQUFVO0FBQ25CLGdCQUFTLEVBQUcsQ0FBRSxXQUFXLElBQUksRUFBRSxJQUFJLGdDQUFrQyxJQUFHLENBQzVFO0lBQ0gsTUFBTSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUU7OztBQUV4QixhQUFRLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDOztBQUVoRCxTQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsV0FBVyxJQUFJLEVBQUUsSUFDbEIsNEJBQTRCLEdBQzVCLFFBQVEsQ0FBQyxJQUFJLElBQ1osUUFBUSxDQUFDLFNBQVMsR0FBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLFNBQVMsR0FBSSxFQUFFLENBQUMsQ0FBQzs7QUFFeEUsU0FBSSxRQUFRLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTs7QUFDOUIsV0FBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQ2pCLFdBQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ3ZDLFdBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTs7O0FBQ3pCLGVBQUksUUFBUSxhQUFDO0FBQ2Isa0JBQU8sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBSztBQUM3QixxQkFBUSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLG9CQUNFOztpQkFBUSxHQUFHLEVBQUcsUUFBUSxHQUFHLENBQUcsRUFBQyxLQUFLLEVBQUcsQ0FBRztlQUFHLFFBQVE7Y0FBVyxDQUM5RDtZQUNILENBQUMsQ0FBQzs7UUFDSjtBQUNELGNBQ0U7O3NCQUFhLElBQUksSUFBRyxZQUFZLEVBQUcsWUFBYztTQUM3QyxPQUFPO1FBQ0YsQ0FDVDtNQUNILE1BQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRTs7OztBQUV2QyxpQkFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QyxpQkFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QyxhQUFJLE9BQU8sYUFBQztBQUNaLGFBQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDcEMsYUFBSSxZQUFZLEVBQUU7QUFDaEIsZUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFTLENBQUMsRUFBRTtBQUMzQixpQkFBSSxDQUFDLENBQUMsT0FBTyxLQUFLLEVBQUUsRUFBRTs7QUFDcEIsMkJBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUNqQjtZQUNGLENBQUM7QUFDRixrQkFBTyxHQUNMOzs7QUFDRSx3QkFBUyxFQUFDLHVDQUF1QztBQUNqRCxzQkFBTyxFQUFHLFlBQWM7O1lBRzNCLENBQUM7VUFDSDtBQUNEO2NBQ0U7OzthQUNFLDBEQUFlLElBQUksSUFBRyxZQUFZLEVBQUcsWUFBYyxJQUFZO2FBQzdELE9BQU87WUFDTDtXQUNOOzs7O01BQ0gsTUFBTSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFO0FBQ3ZDLFdBQUksTUFBTSxHQUFHLFlBQVksQ0FBQztBQUMxQixXQUFJLFFBQVEsQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7O0FBRS9DLGVBQU0sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUNsQztBQUNELFdBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVELFdBQUksQ0FBQyxTQUFTLElBQUksc0JBQXNCLENBQUM7O0FBRXpDLFdBQU0sT0FBTyxHQUFHLFlBQVksSUFDMUIsWUFBWSxDQUFDLFFBQVEsRUFBRSxLQUFLLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQzs7QUFFbEUsY0FDRSx1REFBWSxJQUFJLElBQUcsSUFBSSxFQUFDLFVBQVU7QUFDaEMsY0FBSyxFQUFHLE1BQVEsRUFBQyxjQUFjLEVBQUcsT0FBUyxJQUFFLENBQy9DO01BQ0gsTUFBTTs7QUFDTCxjQUNFLHVEQUFZLElBQUksSUFBRyxJQUFJLEVBQUMsTUFBTSxFQUFDLFlBQVksRUFBRyxZQUFjLElBQUUsQ0FDOUQ7TUFDSDtJQUNGOztBQUVELFVBQ0UsdURBQVcsSUFBSSxJQUFFLElBQUksRUFBQyxNQUFNO0FBQzFCLGNBQVMsRUFBRyxDQUFDLFdBQVcsSUFBSSxFQUFFLElBQUksZ0NBQWtDLElBQUUsQ0FDeEU7RUFDSCxDQUFDOztzQkFFYSxNQUFNOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrQ0NqR1ksQ0FBTzs7Ozt3Q0FFSyxFQUFjOztBQUczRCxLQUFNLG9CQUFvQixHQUFHLG1CQUFNLGFBQWEsQ0FBQywwQkFBYSxTQUFTLENBQUMsQ0FBQzs7S0FFbkUsWUFBWTthQUFaLFlBQVk7O1lBQVosWUFBWTsyQkFBWixZQUFZOztnQ0FBWixZQUFZOzs7Z0JBQVosWUFBWTs7OztZQUVWLGdCQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO0FBQ3ZCLFdBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUNwQixHQUFHLEVBQUUsS0FBSyxFQUFFO0FBQ1YsYUFBSSxFQUFFLFFBQVE7QUFDZCxnQkFBTyxFQUFFLElBQUk7QUFDYix3QkFBZSxFQUFFLElBQUk7QUFDckIsc0JBQWEsRUFBRSxvQkFBb0I7QUFDbkMsc0JBQWEsRUFBRSxvQkFBb0I7UUFDcEMsQ0FBQyxDQUFDO01BQ047OztZQUVLLGtCQUFHO0FBQ1AsY0FDRSxnRUFBZ0IsR0FBRyxFQUFDLFFBQVE7QUFDMUIsNEJBQW1CLEVBQUcsb0JBQXNCO0FBQzVDLFdBQUUsRUFBQyxpQkFBaUI7QUFDcEIsa0JBQVMsRUFBQyxpQkFBaUIsR0FBRSxDQUMvQjtNQUNIOzs7VUFwQkcsWUFBWTs7O3NCQXVCSCxZQUFZOzs7Ozs7O0FDOUIzQjs7QUFFQTtBQUNBO0FBQ0EsRUFBQztBQUNEOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHVDQUFzQyx1Q0FBdUMsZ0JBQWdCOztBQUU3RjtBQUNBLCtDOzs7Ozs7QUNsQkE7O0FBRUEsb0RBQW1ELGdCQUFnQixzQkFBc0IsT0FBTywyQkFBMkIsMEJBQTBCLHlEQUF5RCwyQkFBMkIsRUFBRSxFQUFFLEVBQUUsZUFBZTs7QUFFOVAsaUNBQWdDLDJDQUEyQyxnQkFBZ0Isa0JBQWtCLE9BQU8sMkJBQTJCLHdEQUF3RCxnQ0FBZ0MsdURBQXVELDJEQUEyRCxFQUFFLEVBQUUseURBQXlELHFFQUFxRSw2REFBNkQsb0JBQW9CLEdBQUcsRUFBRTs7QUFFampCO0FBQ0E7QUFDQSxFQUFDOztBQUVEOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHVDQUFzQyx1Q0FBdUMsZ0JBQWdCOztBQUU3Riw0Q0FBMkMsa0JBQWtCLGtDQUFrQyxxRUFBcUUsRUFBRSxFQUFFLE9BQU8sa0JBQWtCLEVBQUUsWUFBWTs7QUFFL00sa0RBQWlELDBDQUEwQywwREFBMEQsRUFBRTs7QUFFdkosa0RBQWlELGFBQWEsdUZBQXVGLEVBQUUsdUZBQXVGOztBQUU5TywyQ0FBMEMsK0RBQStELHFHQUFxRyxFQUFFLHlFQUF5RSxlQUFlLHlFQUF5RSxFQUFFLEVBQUUsdUhBQXVIOztBQUU1ZTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsb0VBQW1FLGFBQWE7QUFDaEY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBTztBQUNQO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQSxxRkFBb0Y7O0FBRXBGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFXO0FBQ1g7QUFDQTtBQUNBLFFBQU87QUFDUCw4Q0FBNkM7O0FBRTdDO0FBQ0E7QUFDQSwyQkFBMEI7QUFDMUIsUUFBTztBQUNQO0FBQ0E7QUFDQSxJQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBbUI7QUFDbkIsVUFBUztBQUNUO0FBQ0EsUUFBTztBQUNQO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0JBQW1CLGVBQWUsdUNBQXVDO0FBQ3pFO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBLElBQUc7O0FBRUg7QUFDQSxFQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0M7Ozs7OztBQy9MQSwwQzs7Ozs7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EseUJBQXdCOztBQUV4QjtBQUNBO0FBQ0E7QUFDQSxJQUFHO0FBQ0g7QUFDQSxJQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBLDJCQUEwQixjQUFjO0FBQ3hDLDhCQUE2QixpQkFBaUI7QUFDOUMsNkJBQTRCLGdCQUFnQjtBQUM1QywwQkFBeUIsYUFBYTtBQUN0Qyw0QkFBMkIsZUFBZTtBQUMxQyw0QkFBMkIsZUFBZTs7QUFFMUM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEVBQUM7O0FBRUQ7QUFDQSxvSUFBbUk7QUFDbkk7QUFDQSxzSUFBcUk7QUFDckk7O0FBRUE7QUFDQSx5TUFBd00sUUFBUTs7QUFFaE47QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSw0SkFBMko7QUFDM0osZ0tBQStKO0FBQy9KO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7O0FBRUE7QUFDQSx5SEFBd0g7QUFDeEgsNkpBQTRKO0FBQzVKO0FBQ0EsK0lBQThJO0FBQzlJO0FBQ0EsTUFBSztBQUNMOztBQUVBO0FBQ0EsNkpBQTRKO0FBQzVKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHlCOzs7Ozs7O0FDMUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3QkFBdUIsc0JBQXNCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXFCO0FBQ3JCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSw0QkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsNkJBQTRCLFVBQVU7Ozs7Ozs7QUMxRnRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsMEJBQXlCLDhCQUE4QjtBQUN2RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx5Qjs7Ozs7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUE4QyxnQkFBZ0I7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0I7Ozs7OztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esc0RBQXFEO0FBQ3JELE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQU87QUFDUDtBQUNBOztBQUVBLDJCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7O0FBRUEsNEI7Ozs7Ozs7QUNqREE7O0FBRUE7QUFDQTtBQUNBLEVBQUM7QUFDRDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1Q0FBc0MsdUNBQXVDLGdCQUFnQjs7QUFFN0Y7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQSxJQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBZ0MsaUJBQWlCO0FBQ2pELE1BQUs7QUFDTCxJQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsUUFBTyx1Q0FBdUM7QUFDOUM7QUFDQTtBQUNBLElBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxRQUFPLHlDQUF5QztBQUNoRDtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBZ0IsaUNBQWlDO0FBQ2pELFlBQVc7QUFDWCxFQUFDOztBQUVEO0FBQ0EsaUJBQWdCLDhCQUE4QjtBQUM5QyxZQUFXO0FBQ1gsRUFBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxnQzs7Ozs7O0FDOUhBOztBQUVBO0FBQ0E7QUFDQSxFQUFDOztBQUVEOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHVDQUFzQyx1Q0FBdUMsZ0JBQWdCOztBQUU3RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFPOztBQUVQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE1BQUs7QUFDTCxJQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBLElBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMLElBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1QsUUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLElBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBLElBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBLE1BQUs7QUFDTDtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQSxJQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsRzs7Ozs7O0FDeE1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG9CQUFtQixXQUFXO0FBQzlCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMLElBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7O0FBRUEsd0M7Ozs7OztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1Qzs7Ozs7O0FDbkNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0NBQW1DLFNBQVM7QUFDNUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOEJBQTZCOztBQUU3QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FDMURBOztBQUVBO0FBQ0E7QUFDQSxFQUFDOztBQUVEOztBQUVBOztBQUVBLHVDQUFzQyx1Q0FBdUMsZ0JBQWdCOztBQUU3RjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFtQixpQkFBaUI7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMLElBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0wsSUFBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBLEc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0NDdkY0QyxDQUFPOzs7O3lDQUM1QixFQUFpQjs7OztrQ0FDdEIsQ0FBVTs7OztLQUV0QixjQUFjO2FBQWQsY0FBYzs7WUFBZCxjQUFjOzs7MkJBQWQsY0FBYzs7Z0NBQWQsY0FBYzs7VUFFbEIsVUFBVSxHQUFHLGNBQUksRUFBSTtvQkFDdUQsTUFBSyxLQUFLO1dBQTVFLE9BQU8sVUFBUCxPQUFPO1dBQUUsUUFBUSxVQUFSLFFBQVE7V0FBRSxRQUFRLFVBQVIsUUFBUTtXQUFFLFFBQVEsVUFBUixRQUFRO1dBQUUsU0FBUyxVQUFULFNBQVM7V0FBRSxXQUFXLFVBQVgsV0FBVzs7QUFDckUsV0FBSSxJQUFJLEtBQUssT0FBTyxFQUFFO0FBQ3BCLGFBQUksR0FBRyxRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUM1QyxNQUFNLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRTtBQUM1QixhQUFJLEdBQUcsUUFBUSxHQUFHLENBQUMsR0FBRyxNQUFLLFVBQVUsR0FBRyxNQUFLLFVBQVUsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFO0FBQzVCLGFBQUksR0FBRyxNQUFLLFVBQVUsQ0FBQztRQUN4QixNQUFNLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRTtBQUM3QixhQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsTUFBTTtBQUNMLGFBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzNCOztBQUVELFdBQUksSUFBSSxLQUFLLFFBQVEsRUFBRTtBQUNyQixlQUFLLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzFDO01BQ0Y7O1VBRUQsaUJBQWlCLEdBQUcsV0FBQyxFQUFJO0FBQ3ZCLFFBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQzs7QUFFbkIsV0FBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1dBQ2hELFFBQVEsR0FBSyxNQUFLLEtBQUssQ0FBdkIsUUFBUTs7QUFDZCxXQUFJLFVBQVUsS0FBSyxNQUFLLEtBQUssQ0FBQyxXQUFXLEVBQUU7QUFDekMsZUFBSyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFLLEtBQUssQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLENBQUM7QUFDOUQsYUFBSSxRQUFRLEdBQUcsTUFBSyxVQUFVLEVBQUUsUUFBUSxHQUFHLE1BQUssVUFBVSxDQUFDOztBQUUzRCxlQUFLLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzVDLGFBQUksTUFBSyxLQUFLLENBQUMsaUJBQWlCLEVBQUU7QUFDaEMsaUJBQUssS0FBSyxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1VBQzFDO1FBQ0Y7TUFDRjs7O2dCQW5DRyxjQUFjOztZQXFDWixrQkFBRzs7O3FCQUM0QyxJQUFJLENBQUMsS0FBSztXQUFyRCxRQUFRLFdBQVIsUUFBUTtXQUFFLFdBQVcsV0FBWCxXQUFXO1dBQUUsZUFBZSxXQUFmLGVBQWU7O0FBQzlDLFdBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLENBQUM7QUFDcEQsV0FBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2pDLFdBQU0sYUFBYSxHQUFHO0FBQ3BCLGNBQUssRUFBRSxPQUFPOztBQUVkLGtCQUFTLEVBQUUsS0FBSztRQUNqQixDQUFDOztBQUVGLFdBQU0sa0JBQWtCLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxVQUFDLFlBQVksRUFBSztBQUMvRCxnQkFDRTs7YUFBSSxHQUFHLEVBQUcsWUFBYyxFQUFDLElBQUksRUFBQyxjQUFjO1dBQzFDOztlQUFHLElBQUksRUFBQyxVQUFVO0FBQ2hCLHVCQUFRLEVBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxHQUFHO0FBQ3RCLHNCQUFPLEVBQUcsT0FBSyxpQkFBbUI7YUFBRyxZQUFZO1lBQU07VUFDdEQsQ0FDTDtRQUNILENBQUMsQ0FBQzs7QUFFSCxjQUNFOztXQUFLLFNBQVMsRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBSTtTQUU1QyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsR0FDeEI7OztXQUNFOztlQUFLLFNBQVMsRUFBQyxVQUFVO2FBQ3ZCOztpQkFBSyxTQUFTLEVBQUMsVUFBVTtlQUN2Qjs7bUJBQVEsU0FBUyxFQUFDLGlDQUFpQztBQUNqRCx1QkFBSSxFQUFDLFFBQVEsRUFBQyxFQUFFLEVBQUMsY0FBYyxFQUFDLGVBQVksVUFBVTtBQUN0RCxvQ0FBYyxNQUFNO2lCQUNsQixXQUFXO2lCQUNiOzs7bUJBQ0ksR0FBRzttQkFDTCwyQ0FBTSxTQUFTLEVBQUMsT0FBTyxHQUFFO2tCQUNwQjtnQkFDQTtlQUNUOzttQkFBSSxTQUFTLEVBQUMsZUFBZSxFQUFDLElBQUksRUFBQyxNQUFNLEVBQUMsbUJBQWdCLGNBQWM7aUJBQ3BFLGtCQUFrQjtnQkFDakI7Y0FDRDtZQUNGO1dBQ047O2VBQUssU0FBUyxFQUFDLFVBQVU7YUFDdkI7O2lCQUFJLFNBQVMsRUFBQyxZQUFZLEVBQUMsS0FBSyxFQUFHLGFBQWU7ZUFDOUMsUUFBUTtjQUNQO1lBQ0Q7VUFDRixHQUNOOzthQUFLLFNBQVMsRUFBQyxXQUFXO1dBQ3hCOztlQUFJLFNBQVMsRUFBQyxZQUFZLEVBQUMsS0FBSyxFQUFHLGFBQWU7YUFDOUMsUUFBUTtZQUNQO1VBQ0Q7UUFFTixDQUNOO01BQ0g7OztZQUVPLG9CQUFHO0FBQ1QsV0FBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzlCLGNBQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFTLElBQUksRUFBRTtBQUM5QixhQUFNLFFBQVEsR0FBRyxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7QUFDOUMsYUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQ3JCLGFBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztBQUNuQixhQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxLQUFLLENBQUMsS0FDMUIsSUFBSSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ2hFLG1CQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLGlCQUFNLEdBQUcsSUFBSSxDQUFDO1VBQ2Y7QUFDRCxhQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxVQUFVLEtBQ3hDLElBQUksS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUNoRSxtQkFBUSxHQUFHLElBQUksQ0FBQztBQUNoQixpQkFBTSxHQUFHLElBQUksQ0FBQztVQUNmO0FBQ0QsZ0JBQ0U7O2FBQVksR0FBRyxFQUFHLElBQU07QUFDdEIsdUJBQVUsRUFBRyxJQUFJLENBQUMsVUFBWTtBQUM5QixtQkFBTSxFQUFHLFFBQVU7QUFDbkIsb0JBQU8sRUFBRyxRQUFVO0FBQ3BCLG1CQUFNLEVBQUcsTUFBUTtXQUNmLElBQUk7VUFDSyxDQUNiO1FBQ0gsRUFBRSxJQUFJLENBQUMsQ0FBQztNQUNWOzs7WUFFTyxvQkFBRztBQUNULFdBQUksS0FBSyxhQUFDO0FBQ1YsV0FBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLFdBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7O0FBRTlCLGdCQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pGLGNBQU8sR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDOztBQUVwRCxXQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQzdCLGdCQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUMxQixrQkFBUyxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7UUFDckQ7O0FBRUQsV0FBSSxTQUFTLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUU7QUFDbEUsY0FBSyxHQUFHLENBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUUsQ0FBQztRQUN0RCxNQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUU7QUFDOUIsY0FBSyxHQUFHLENBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUUsQ0FBQztRQUNoQyxNQUFNO0FBQ0wsY0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNaOztBQUVELFlBQUssSUFBSSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDekMsYUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUI7O0FBRUQsV0FBSSxPQUFPLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUMvQixjQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDaEMsY0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRTtBQUM5QixjQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakM7QUFDRCxjQUFPLEtBQUssQ0FBQztNQUNkOzs7VUExSkcsY0FBYzs7O0FBNEpwQixlQUFjLENBQUMsU0FBUyxHQUFHO0FBQ3pCLFdBQVEsRUFBRSxpQkFBVSxNQUFNO0FBQzFCLGNBQVcsRUFBRSxpQkFBVSxNQUFNO0FBQzdCLFdBQVEsRUFBRSxpQkFBVSxNQUFNO0FBQzFCLGFBQVUsRUFBRSxpQkFBVSxJQUFJO0FBQzFCLGtCQUFlLEVBQUUsaUJBQVUsS0FBSztBQUNoQyxpQkFBYyxFQUFFLGlCQUFVLE1BQU07QUFDaEMsU0FBTSxFQUFFLGlCQUFVLElBQUk7QUFDdEIsb0JBQWlCLEVBQUUsaUJBQVUsSUFBSTtBQUNqQyxVQUFPLEVBQUUsaUJBQVUsTUFBTTtFQUMxQixDQUFDOztBQUVGLGVBQWMsQ0FBQyxZQUFZLEdBQUc7QUFDNUIsY0FBVyxFQUFFLG1CQUFNLGFBQWE7RUFDakMsQ0FBQzs7c0JBRWEsY0FBYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0NDaExlLENBQU87Ozs7dUNBQzlCLENBQVk7Ozs7S0FFM0IsVUFBVTthQUFWLFVBQVU7O0FBRUgsWUFGUCxVQUFVLENBRUYsS0FBSyxFQUFFOzs7MkJBRmYsVUFBVTs7QUFHWixnQ0FIRSxVQUFVLDZDQUdOLEtBQUssRUFBRTs7VUFHZixZQUFZLEdBQUcsV0FBQyxFQUFJO0FBQ2xCLFFBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNuQixhQUFLLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztNQUNwRDtJQUxBOztnQkFKRyxVQUFVOztZQVdSLGtCQUFHO0FBQ1AsV0FBTSxPQUFPLEdBQUcsNkJBQVM7QUFDdkIsaUJBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07QUFDM0IsbUJBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU87QUFDOUIsaUJBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07UUFDNUIsQ0FBQyxDQUFDO0FBQ0gsY0FDRTs7V0FBSSxTQUFTLEVBQUcsT0FBUztTQUN2Qjs7YUFBRyxJQUFJLEVBQUMsR0FBRyxFQUFDLE9BQU8sRUFBRyxJQUFJLENBQUMsWUFBYztXQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTtVQUFNO1FBQ2xFLENBQ0w7TUFDSDs7O1VBdEJHLFVBQVU7OztBQXdCaEIsV0FBVSxDQUFDLFNBQVMsR0FBRztBQUNyQixhQUFVLEVBQUUsaUJBQVUsSUFBSTtBQUMxQixTQUFNLEVBQUUsaUJBQVUsSUFBSTtBQUN0QixVQUFPLEVBQUUsaUJBQVUsSUFBSTtBQUN2QixTQUFNLEVBQUUsaUJBQVUsSUFBSTtBQUN0QixXQUFRLEVBQUUsaUJBQVUsSUFBSTtFQUN6QixDQUFDOztzQkFFYSxVQUFVOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrQ0NuQ21CLENBQU87Ozs7dUNBQzlCLENBQVk7Ozs7a0NBQ2YsQ0FBVTs7OzttQ0FDVCxFQUFXOzs7OzJDQUNULEVBQW9COzs7O0tBRW5DLE9BQU87YUFBUCxPQUFPOztBQUVBLFlBRlAsT0FBTyxDQUVDLEtBQUssRUFBRTs7OzJCQUZmLE9BQU87O0FBR1QsZ0NBSEUsT0FBTyw2Q0FHSCxLQUFLLEVBQUU7O1VBNEVmLGtCQUFrQixHQUFHLFlBQU07QUFDekIsV0FBTSxNQUFNLEdBQUcsTUFBSyxpQkFBaUIsRUFBRSxDQUFDO0FBQ3hDLFdBQUksQ0FBQyxNQUFNLEVBQUU7O0FBQ1gsZ0JBQU87UUFDUjtBQUNELFdBQU0sR0FBRyxHQUFHLE1BQUssS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN4QyxXQUFJLEdBQUcsRUFBRTtBQUNQLGVBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0FBQ2xFLGVBQUssWUFBWSxFQUFFLENBQUM7O0FBRXBCLGVBQUssUUFBUSxDQUFDO0FBQ1osc0JBQVcsRUFBRSxJQUFJO0FBQ2pCLHdCQUFhLEVBQUUsK0NBQStDO1VBQy9ELENBQUMsQ0FBQzs7QUFFSCxlQUFLLGFBQWEsR0FBRyxVQUFVLENBQUMsWUFBTTtBQUNwQyxpQkFBSyxRQUFRLENBQUMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztVQUN2QyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ1QsTUFBTTs7QUFFTCxlQUFLLFFBQVEsQ0FBQztBQUNaLHdCQUFhLEVBQUUsSUFBSTtBQUNuQixzQkFBVyxFQUFFLEtBQUs7VUFDbkIsRUFBRSxZQUFNO0FBQ1AsbUJBQVEsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsRCxtQkFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsTUFBSyxjQUFjLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztVQUMzRCxDQUFDLENBQUM7O0FBRUgsZUFBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3hCO01BQ0Y7O1VBRUQsb0JBQW9CLEdBQUcsWUFBTTtBQUMzQixhQUFLLFFBQVEsQ0FBQztBQUNaLHFCQUFZLEVBQUUsQ0FBQyxNQUFLLEtBQUssQ0FBQyxZQUFZO1FBQ3ZDLENBQUMsQ0FBQztBQUNILGFBQUssS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7TUFDakM7O1VBRUQscUJBQXFCLEdBQUcsWUFBTTtBQUM1QixhQUFLLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztNQUN4Qjs7VUFNRCxXQUFXLEdBQUcsV0FBQyxFQUFJO0FBQ2pCLGFBQUssS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO01BQzVDOztVQUVELGVBQWUsR0FBRyxZQUFNO0FBQ3RCLGFBQUssS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO01BQzFCOztVQUVELG1CQUFtQixHQUFHLFlBQU07QUFDMUIsYUFBSyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDaEMsYUFBSyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQ3pCOztBQXJJQyxTQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQztBQUN2QixTQUFJLENBQUMsY0FBYyxDQUFDO0FBQ3BCLFNBQUksQ0FBQyxLQUFLLEdBQUc7QUFDWCx5QkFBa0IsRUFBRSxJQUFJO0FBQ3hCLG9CQUFhLEVBQUUsSUFBSTtBQUNuQixrQkFBVyxFQUFFLEtBQUs7QUFDbEIsbUJBQVksRUFBRSxLQUFLO01BQ3BCLENBQUM7SUFDSDs7Z0JBWkcsT0FBTzs7WUFjUyxnQ0FBRztBQUNyQixXQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7TUFDckI7Ozs7Ozs7Ozs7Ozs7UUFFVyxZQUFHO0FBQ2IsV0FBSSxJQUFJLENBQUMsYUFBYSxFQUFFO0FBQ3RCLHFCQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ2pDLGFBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCO01BQ0Y7OztZQUVnQiw2QkFBRzs7O0FBQ2xCLFdBQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNsQixXQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDekIsV0FBSSxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ25CLFdBQUksU0FBUyxhQUFDO0FBQ2QsV0FBSSxPQUFPLGFBQUM7O0FBRVosV0FBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVMsTUFBTSxFQUFFLENBQUMsRUFBRTtBQUM3QyxhQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUU7O0FBRXBCLGVBQU0sSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDbEMsb0JBQVMsR0FBRyxPQUFPLE1BQU0sQ0FBQyxTQUFTLEtBQUssVUFBVSxHQUNoRCxNQUFNLENBQUMsU0FBUyxFQUFFLGtCQUNKLElBQU8sQ0FBQztVQUN6QixNQUFNO0FBQ0wsZUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLG9CQUFTLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQzs7QUFFdEIsZUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRTtBQUMxRCxpQkFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQyxzQkFBUyxHQUFHLEdBQUcsQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRDs7QUFFRCxlQUFJLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUU7O0FBQ2hELG9CQUFPLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0MsaUJBQUksT0FBTyxLQUFLLElBQUksRUFBRTtBQUNwQixzQkFBTyxHQUFHLEtBQUssQ0FBQztBQUNoQiw0QkFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLENBQUM7Y0FDdkM7WUFDRjtVQUNGOztBQUVELGVBQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDO1FBQ2xDLEVBQUUsSUFBSSxDQUFDLENBQUM7O0FBRVQsV0FBSSxPQUFPLEVBQUU7QUFDWCxnQkFBTyxNQUFNLENBQUM7UUFDZixNQUFNO0FBQ0wsYUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDOztBQUVwQixhQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsYUFBYSxFQUFiLGFBQWEsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzs7QUFFcEQsYUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUN2QixPQUFPLEVBQ1Asd0NBQXdDLEVBQ3hDLHdCQUF3QixDQUFDLENBQUM7O0FBRTVCLGFBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLFlBQU07QUFDcEMsa0JBQUssUUFBUSxDQUFDLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7VUFDdkMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNSLGdCQUFPLElBQUksQ0FBQztRQUNiO01BQ0Y7OztZQTZDYSwwQkFBRztBQUNmLFdBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO01BQzFDOzs7WUFlSyxrQkFBRztBQUNQLFdBQUksQ0FBQyxjQUFjLEdBQUcsbUJBQW1CLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNqRSxXQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDckIsV0FBSSxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLFdBQUksU0FBUyxHQUFHLElBQUksQ0FBQztBQUNyQixXQUFJLG1CQUFtQixHQUFHLElBQUksQ0FBQzs7QUFFL0IsV0FBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRTtBQUMzQixrQkFBUyxHQUNQOzthQUFRLElBQUksRUFBQyxRQUFRO0FBQ25CLHNCQUFTLEVBQUMscUNBQXFDO0FBQy9DLDRCQUFZLE9BQU87QUFDbkIsNEJBQWMsR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFnQjtXQUN6Qyx3Q0FBRyxTQUFTLEVBQUMsMEJBQTBCLEdBQUs7O1VBRS9DLENBQUM7UUFDSDs7QUFFRCxXQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFO0FBQzNCLGtCQUFTLEdBQ1A7O2FBQVEsSUFBSSxFQUFDLFFBQVE7QUFDbkIsc0JBQVMsRUFBQyx3Q0FBd0M7QUFDbEQsNEJBQVksU0FBUztBQUNyQiwrQkFBZSxPQUFPO0FBQ3RCLGtCQUFLLEVBQUMsbUJBQW1CO0FBQ3pCLG9CQUFPLEVBQUcsSUFBSSxDQUFDLHFCQUF1QjtXQUN0Qyx3Q0FBRyxTQUFTLEVBQUMsMkJBQTJCLEdBQUs7O1VBRWhELENBQUM7UUFDSDs7QUFFRCxXQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsc0JBQXNCLEVBQUU7QUFDckMsNEJBQW1CLEdBQ2pCOzthQUFRLElBQUksRUFBQyxRQUFRO0FBQ25CLG9CQUFPLEVBQUcsSUFBSSxDQUFDLG9CQUFzQjtBQUNyQyxzQkFBUyxFQUFDLGlCQUFpQjtBQUMzQiw0QkFBWSxRQUFRO0FBQ3BCLDZCQUFhLE9BQU87V0FDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsbUJBQU0sUUFBUSxHQUFHLG1CQUFNLGdCQUFnQjtVQUV0RSxDQUFDO1FBQ0g7O0FBRUQsV0FBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRTtBQUM5QixrQkFBUyxHQUNQOzthQUFRLElBQUksRUFBQyxRQUFRO0FBQ25CLHNCQUFTLEVBQUMsaUJBQWlCO0FBQzNCLG9CQUFPLEVBQUcsSUFBSSxDQUFDLGVBQWlCO1dBQzlCLHdDQUFHLFNBQVMsRUFBQyw0QkFBNEIsR0FBSzs7VUFFbkQsQ0FBQztRQUNIOztBQUVELFdBQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0FBQ2pELFdBQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLElBQUksQ0FBQzs7QUFFM0UsY0FDRTs7V0FBSyxTQUFTLEVBQUMsS0FBSztTQUNsQjs7YUFBSyxTQUFTLEVBQUMsc0NBQXNDO1dBQ25EOztlQUFLLFNBQVMsRUFBQyx3QkFBd0IsRUFBQyxJQUFJLEVBQUMsT0FBTzthQUNoRCxTQUFTO2FBQ1QsU0FBUzthQUNULFNBQVM7YUFDVCxtQkFBbUI7WUFDakI7VUFDRjtTQUNOOzthQUFLLFNBQVMsRUFBQyxzQ0FBc0M7V0FDakQsZUFBZTtVQUNiO1NBQ04sZ0VBQVUsR0FBRyxFQUFDLFVBQVUsR0FBRztTQUN6QixLQUFLO1FBQ0gsQ0FDTjtNQUNIOzs7WUFFZ0IsNkJBQUc7QUFDbEIsV0FBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRTtBQUMzQixhQUFJLFVBQVUsR0FBRyxxREFBcUQsQ0FBQztBQUN2RSxhQUFJLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDcEIsYUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRTtBQUMxQixtQkFBUSxHQUNOOztlQUFNLFNBQVMsRUFBQyxpQkFBaUI7YUFDL0I7OztBQUNFLDBCQUFTLEVBQUMsaUJBQWlCO0FBQzNCLHFCQUFJLEVBQUMsUUFBUTtBQUNiLHdCQUFPLEVBQUcsSUFBSSxDQUFDLG1CQUFxQjs7Y0FFN0I7WUFFWixDQUFDO0FBQ0YscUJBQVUsSUFBSSw2QkFBNkIsQ0FBQztVQUM3Qzs7QUFFRCxnQkFDRTs7YUFBSyxTQUFTLEVBQUcsVUFBWTtXQUMzQiw0Q0FBTyxHQUFHLEVBQUMsWUFBWTtBQUNyQixzQkFBUyxFQUFDLGNBQWM7QUFDeEIsaUJBQUksRUFBQyxNQUFNO0FBQ1gsd0JBQVcsRUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEdBQUcsUUFBVTtBQUN0RixvQkFBTyxFQUFHLElBQUksQ0FBQyxXQUFhLEdBQUU7V0FDNUIsUUFBUTtVQUNSLENBQ047UUFDSCxNQUFNO0FBQ0wsZ0JBQU8sSUFBSSxDQUFDO1FBQ2I7TUFDRjs7O1lBRW1CLGdDQUFHO0FBQ3JCLFdBQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztBQUNyRCxXQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztBQUMzQyxXQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBUyxNQUFNLEVBQUUsQ0FBQyxFQUFFO2FBQ3BELFFBQVEsR0FBcUMsTUFBTSxDQUFuRCxRQUFRO2FBQUUsTUFBTSxHQUE2QixNQUFNLENBQXpDLE1BQU07YUFBRSxLQUFLLEdBQXNCLE1BQU0sQ0FBakMsS0FBSzthQUFFLElBQUksR0FBZ0IsTUFBTSxDQUExQixJQUFJO2FBQUUsU0FBUyxHQUFLLE1BQU0sQ0FBcEIsU0FBUzs7QUFDaEQsYUFBTSxJQUFJLEdBQUc7QUFDWCxjQUFHLEVBQUUsS0FBSyxHQUFHLENBQUM7QUFDZCxzQkFBVyxFQUFFLFFBQVEsQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsR0FBRyxJQUFJO1VBQ2hFLENBQUM7O0FBRUYsYUFBSSxTQUFTLEVBQUU7OztBQUdiLGtCQUFPLElBQUksQ0FBQztVQUNiO0FBQ0QsYUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUMvQjs7YUFBTSxTQUFTLEVBQUMsc0JBQXNCO1dBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQztVQUFTLEdBQ3ZFLElBQUksQ0FBQzs7OztBQUlQLGdCQUNFOzthQUFLLFNBQVMsRUFBQyxZQUFZLEVBQUMsR0FBRyxFQUFHLEtBQU87V0FDdkM7OzthQUFTLElBQUk7WUFBVTtXQUNyQix5QkFBTyxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUM7V0FDbEMsS0FBSztVQUNILENBQ047UUFDSCxDQUFDLENBQUM7QUFDSCxXQUFNLFVBQVUsR0FBRyw2QkFBUyxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUU7O0FBRWhFLGFBQUksRUFBRSxXQUFXLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhO1FBQzlDLENBQUMsQ0FBQztBQUNILFdBQU0sV0FBVyxHQUFHLDZCQUFTLGNBQWMsRUFBRSxVQUFVLEVBQUU7QUFDdkQsbUJBQVUsRUFBRSxXQUFXO0FBQ3ZCLGdCQUFPLEVBQUUsV0FBVztRQUNyQixDQUFDLENBQUM7QUFDSCxjQUNFOztXQUFLLEdBQUcsRUFBQyxPQUFPLEVBQUMsU0FBUyxFQUFHLFVBQVksRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxRQUFRO1NBQ25FOzthQUFLLFNBQVMsRUFBRyxXQUFhO1dBQzVCOztlQUFLLFNBQVMsRUFBQyxlQUFlO2FBQzVCOztpQkFBSyxTQUFTLEVBQUMsY0FBYztlQUMzQjs7bUJBQVEsSUFBSSxFQUFDLFFBQVE7QUFDbkIsNEJBQVMsRUFBQyxPQUFPO0FBQ2pCLG1DQUFhLE9BQU87QUFDcEIsaUNBQVcsT0FBTztpQkFDbEI7O3FCQUFNLGVBQVksTUFBTTs7a0JBQWU7Z0JBQ2hDO2VBQ1Q7O21CQUFJLFNBQVMsRUFBQyxhQUFhOztnQkFBZ0I7Y0FDdkM7YUFDTjs7aUJBQUssU0FBUyxFQUFDLFlBQVk7ZUFDekI7O21CQUFNLEdBQUcsRUFBQyxNQUFNO2lCQUNkLFVBQVU7Z0JBQ0w7Y0FDSDthQUNOOztpQkFBSyxTQUFTLEVBQUMsY0FBYztlQUMzQjs7bUJBQVEsSUFBSSxFQUFDLFFBQVE7QUFDbkIsNEJBQVMsRUFBQyxpQkFBaUI7QUFDM0IsbUNBQWEsT0FBTzs7Z0JBRWI7ZUFDVDs7bUJBQVEsSUFBSSxFQUFDLFFBQVE7QUFDbkIsNEJBQVMsRUFBQyxjQUFjO0FBQ3hCLDBCQUFPLEVBQUcsSUFBSSxDQUFDLGtCQUFvQjs7Z0JBRTVCO2NBQ0w7WUFDRjtVQUNGO1FBQ0YsQ0FDTjtNQUNIOzs7VUE5VEcsT0FBTzs7O0FBaVViLFFBQU8sQ0FBQyxTQUFTLEdBQUc7QUFDbEIsV0FBUSxFQUFFLGlCQUFVLElBQUk7QUFDeEIsWUFBUyxFQUFFLGlCQUFVLElBQUk7QUFDekIscUJBQWtCLEVBQUUsaUJBQVUsSUFBSTtBQUNsQyxlQUFZLEVBQUUsaUJBQVUsSUFBSTtBQUM1QixlQUFZLEVBQUUsaUJBQVUsSUFBSTtBQUM1QixlQUFZLEVBQUUsaUJBQVUsSUFBSTtBQUM1Qix5QkFBc0IsRUFBRSxpQkFBVSxJQUFJO0FBQ3RDLFVBQU8sRUFBRSxpQkFBVSxLQUFLO0FBQ3hCLG9CQUFpQixFQUFFLGlCQUFVLE1BQU07QUFDbkMsY0FBVyxFQUFFLGlCQUFVLElBQUk7RUFDNUIsQ0FBQzs7QUFFRixRQUFPLENBQUMsWUFBWSxHQUFHO0FBQ3JCLGVBQVksRUFBRSxLQUFLO0FBQ25CLGVBQVksRUFBRSxLQUFLO0FBQ25CLGVBQVksRUFBRSxLQUFLO0FBQ25CLHlCQUFzQixFQUFFLEtBQUs7QUFDN0IsY0FBVyxFQUFFLEtBQUs7RUFDbkIsQ0FBQzs7c0JBRWEsT0FBTzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0NDNVZzQixDQUFPOzs7O2tDQUNqQyxDQUFTOzs7O3VDQUNOLENBQVk7Ozs7S0FFM0IsV0FBVzthQUFYLFdBQVc7O0FBRUosWUFGUCxXQUFXLENBRUgsS0FBSyxFQUFFOzs7MkJBRmYsV0FBVzs7QUFHYixnQ0FIRSxXQUFXLDZDQUdQLEtBQUssRUFBRTs7VUFJZixXQUFXLEdBQUcsV0FBQyxFQUFJOzhCQUNPLENBQUMsQ0FBQyxhQUFhO1dBQS9CLEtBQUssb0JBQUwsS0FBSztXQUFFLElBQUksb0JBQUosSUFBSTs7QUFDbkIsV0FBSSxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO0FBQ3ZCLGdCQUFPLE1BQUssU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLE1BQU07QUFDTCxlQUFLLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDOUI7QUFDRCxhQUFLLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBSyxTQUFTLENBQUMsQ0FBQztNQUNyQzs7QUFYQyxTQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUNyQjs7Z0JBTEcsV0FBVzs7WUFpQlQsa0JBQUc7b0JBQ2dELElBQUksQ0FBQyxLQUFLO1dBQXpELE9BQU8sVUFBUCxPQUFPO1dBQUUsU0FBUyxVQUFULFNBQVM7V0FBRSxhQUFhLFVBQWIsYUFBYTtXQUFFLE9BQU8sVUFBUCxPQUFPOztBQUNsRCxXQUFNLFlBQVksR0FBRyw2QkFBUyxPQUFPLEVBQUU7QUFDckMsd0JBQWUsRUFBRSxPQUFPO0FBQ3hCLDBCQUFpQixFQUFFLFNBQVM7UUFDN0IsQ0FBQyxDQUFDO0FBQ0gsV0FBSSxlQUFlLEdBQUcsSUFBSSxDQUFDOztBQUUzQixXQUFJLGFBQWEsS0FBSyxtQkFBTSxpQkFBaUIsSUFDekMsYUFBYSxLQUFLLG1CQUFNLGdCQUFnQixFQUFFO0FBQzVDLGFBQU0sS0FBSyxHQUFHO0FBQ1osZ0JBQUssRUFBRSxFQUFFO0FBQ1Qsc0JBQVcsRUFBRSxDQUFDO0FBQ2QsdUJBQVksRUFBRSxDQUFDO1VBQ2hCLENBQUM7QUFDRix3QkFBZSxHQUFJOzthQUFJLEtBQUssRUFBRyxLQUFPLEVBQUMsR0FBRyxFQUFHLENBQUMsQ0FBRzs7VUFBYSxDQUFDO1FBQ2hFOztBQUVELFdBQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBUyxNQUFNLEVBQUU7YUFDdkMsTUFBTSxHQUFrQixNQUFNLENBQTlCLE1BQU07YUFBRSxLQUFLLEdBQVcsTUFBTSxDQUF0QixLQUFLO2FBQUUsSUFBSSxHQUFLLE1BQU0sQ0FBZixJQUFJOztBQUMzQixhQUFNLE9BQU8sR0FBRztBQUNkLGtCQUFPLEVBQUUsTUFBTSxHQUFHLE1BQU0sR0FBRyxJQUFJO0FBQy9CLGdCQUFLLEVBQUwsS0FBSztVQUNOLENBQUM7QUFDRixnQkFDRTs7YUFBSSxHQUFHLEVBQUcsSUFBTSxFQUFDLEtBQUssRUFBRyxPQUFTO1dBQ2hDOztlQUFLLFNBQVMsRUFBQyw4QkFBOEI7YUFDM0MsNENBQU8sSUFBSSxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsTUFBTTtBQUMxQiwwQkFBVyxFQUFHLElBQU0sRUFBQyxJQUFJLEVBQUcsSUFBTSxFQUFDLE9BQU8sRUFBRyxJQUFJLENBQUMsV0FBYSxHQUFFO1lBQy9EO1VBQ0gsQ0FDTDtRQUNILEVBQUUsSUFBSSxDQUFDLENBQUM7O0FBRVQsY0FDRTs7V0FBTyxTQUFTLEVBQUcsWUFBYyxFQUFDLEtBQUssRUFBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUk7U0FDMUQ7OztXQUNFOztlQUFJLEtBQUssRUFBRyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBSTthQUN6QyxlQUFlO2FBQUksV0FBVztZQUM3QjtVQUNDO1FBQ0YsQ0FDUjtNQUNIOzs7VUE1REcsV0FBVzs7O0FBOERqQixZQUFXLENBQUMsU0FBUyxHQUFHO0FBQ3RCLFVBQU8sRUFBRSxpQkFBVSxLQUFLO0FBQ3hCLGdCQUFhLEVBQUUsaUJBQVUsTUFBTTtBQUMvQixXQUFRLEVBQUUsaUJBQVUsSUFBSTtFQUN6QixDQUFDO3NCQUNhLFdBQVc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrQ0NuRVIsQ0FBVTs7OztBQUM1QixLQUFNLFlBQVksR0FBRyxtQkFBTyxDQUFDLEVBQVEsQ0FBQyxDQUFDLFlBQVksQ0FBQzs7QUFFcEQsVUFBUyxLQUFLLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO0FBQzlDLFFBQUssR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDNUIsTUFBRyxDQUFDLElBQUksQ0FBQyxVQUFDLENBQUMsRUFBRSxDQUFDLEVBQUs7QUFDakIsU0FBSSxRQUFRLEVBQUU7QUFDWixjQUFPLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztNQUN6QyxNQUFNO0FBQ0wsV0FBSSxLQUFLLEtBQUssbUJBQU0sU0FBUyxFQUFFO0FBQzdCLGdCQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBSSxDQUFDLEdBQUcsQ0FBRSxDQUFDO1FBQ25GLE1BQU07QUFDTCxnQkFBTyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUksQ0FBQyxHQUFHLENBQUUsQ0FBQztRQUNuRjtNQUNGO0lBQ0YsQ0FBQyxDQUFDOztBQUVILFVBQU8sR0FBRyxDQUFDO0VBQ1o7O0tBRVksWUFBWTthQUFaLFlBQVk7O0FBQ1osWUFEQSxZQUFZLENBQ1gsSUFBSSxFQUFFOzJCQURQLFlBQVk7O0FBRXJCLGdDQUZTLFlBQVksNkNBRWYsSUFBSSxFQUFFO0FBQ1osU0FBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbEI7O2dCQUpVLFlBQVk7O1lBTWhCLGlCQUFDLElBQUksRUFBRTtBQUNaLFdBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQzNCOzs7WUFFSSxpQkFBRztBQUNOLFdBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO01BQ2xCOzs7WUFFTSxtQkFBRztBQUNSLGNBQU8sSUFBSSxDQUFDLElBQUksQ0FBQztNQUNsQjs7O1VBaEJVLFlBQVk7SUFBUyxZQUFZOzs7O0tBbUJqQyxjQUFjO0FBRWQsWUFGQSxjQUFjLENBRWIsSUFBSSxFQUFFOzJCQUZQLGNBQWM7O0FBR3ZCLFNBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLFNBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLFNBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLFNBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0FBQ3hCLFNBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLFNBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFNBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3BCLFNBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLFNBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ25CLFNBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7QUFDL0IsU0FBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztBQUM5QixTQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUNyQjs7Z0JBZlUsY0FBYzs7WUFpQmpCLGtCQUFDLEtBQUssRUFBRTtBQUNkLFdBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztBQUMvQixXQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztBQUMzQyxXQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7QUFDL0IsV0FBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQzNCLFdBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUM7TUFDbEQ7OztZQUVNLGlCQUFDLElBQUksRUFBRTtBQUNaLFdBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLFdBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUNuQixhQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3pELGFBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDNUQ7QUFDRCxXQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDaEIsYUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZEO01BQ0Y7OztZQUVVLHVCQUFHO0FBQ1osY0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO01BQ3JCOzs7WUFFZ0IsMkJBQUMsZUFBZSxFQUFFO0FBQ2pDLFdBQUksQ0FBQyxRQUFRLEdBQUcsZUFBZSxDQUFDO01BQ2pDOzs7WUFFaUIsOEJBQUc7QUFDbkIsY0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO01BQ3RCOzs7WUFFb0IsaUNBQUc7QUFDdEIsV0FBSSxJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUN6QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7TUFDdkI7OztZQUVnQiw2QkFBRzs7O0FBQ2xCLFdBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztBQUMvQyxXQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtBQUN6QixhQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUN2QixhQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFFLGFBQUcsRUFBSTtBQUMzQyxlQUFNLE1BQU0sR0FBRyxNQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBQztvQkFBSSxHQUFHLENBQUMsTUFBSyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQUEsQ0FBQyxDQUFDO0FBQ2pFLGtCQUFPLE9BQU8sTUFBTSxLQUFLLFdBQVcsR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDO1VBQ3JELENBQUMsQ0FBQztRQUNKLE1BQU07QUFDTCxhQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN6QjtNQUNGOzs7WUFFRyxjQUFDLEtBQUssRUFBRSxTQUFTLEVBQUU7QUFDckIsV0FBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLEtBQUssRUFBTCxLQUFLLEVBQUUsU0FBUyxFQUFULFNBQVMsRUFBRSxDQUFDOztBQUVwQyxXQUFJLGtCQUFrQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0FBQ3RELFdBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE9BQU8sSUFBSSxDQUFDOztXQUVuQyxRQUFRLEdBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBckMsUUFBUTs7QUFDaEIseUJBQWtCLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7O0FBRTNFLGNBQU8sSUFBSSxDQUFDO01BQ2I7OztZQUVHLGNBQUMsS0FBSSxFQUFFLFdBQVcsRUFBRTtBQUN0QixXQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxLQUFJLEdBQUcsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUMxQyxXQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUQsY0FBTyxJQUFJLENBQUM7TUFDYjs7O1lBRUcsY0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRTtBQUNoQyxXQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0FBQ3hELFdBQUksV0FBVyxhQUFDO0FBQ2hCLFdBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7QUFDMUIsMkJBQWtCLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELG9CQUFXLEdBQUcsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNELE1BQU07QUFDTCwyQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEUsb0JBQVcsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEY7QUFDRCxXQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDbkIsYUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBUyxHQUFHLEVBQUU7QUFDOUIsZUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLFdBQVcsRUFBRTtBQUN0QyxnQkFBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztZQUN6QjtVQUNGLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDVCxhQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3pELGFBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDNUQ7QUFDRCxjQUFPLElBQUksQ0FBQztNQUNiOzs7WUFFUyxvQkFBQyxNQUFNLEVBQUU7QUFDakIsV0FBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUU7QUFDckUsZUFBUyxJQUFJLENBQUMsUUFBUSw2QkFBeUI7UUFDaEQ7QUFDRCxXQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0FBQ3hELHlCQUFrQixDQUFDLE9BQU8sQ0FBQyxVQUFTLEdBQUcsRUFBRTtBQUN2QyxhQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtBQUN0RSxpQkFBUyxJQUFJLENBQUMsUUFBUSxTQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFrQjtVQUNsRTtRQUNGLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDVCx5QkFBa0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbkMsV0FBSSxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ25CLGFBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNCO01BQ0Y7OztZQUVFLGFBQUMsTUFBTSxFQUFFO0FBQ1YsV0FBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUU7QUFDckUsZUFBUyxJQUFJLENBQUMsUUFBUSw2QkFBeUI7UUFDaEQ7QUFDRCxXQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0FBQ3hELHlCQUFrQixDQUFDLE9BQU8sQ0FBQyxVQUFTLEdBQUcsRUFBRTtBQUN2QyxhQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtBQUN0RSxpQkFBUyxJQUFJLENBQUMsUUFBUSxTQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFrQjtVQUNsRTtRQUNGLEVBQUUsSUFBSSxDQUFDLENBQUM7O0FBRVQseUJBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hDLFdBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUNuQixhQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QjtNQUNGOzs7WUFFSyxnQkFBQyxNQUFNLEVBQUU7OztBQUNiLFdBQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7QUFDeEQsV0FBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLGFBQUcsRUFBSTtBQUM5QyxnQkFBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFLLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDOztBQUVILFdBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUNuQixhQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQUcsRUFBSTtBQUNsQyxrQkFBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFLLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7VUFDbEQsQ0FBQyxDQUFDO0FBQ0gsYUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7UUFDNUIsTUFBTTtBQUNMLGFBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO1FBQ3BCO01BQ0Y7OztZQUVLLGdCQUFDLFNBQVMsRUFBRTs7O0FBQ2hCLFdBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3ZDLGFBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLGFBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0FBQ3hCLGFBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLGFBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDNUQsTUFBTTtBQUNMLGFBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQzNCLGFBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUUsYUFBRyxFQUFJO0FBQzNDLGVBQUksS0FBSyxHQUFHLElBQUksQ0FBQztBQUNqQixlQUFJLFNBQVMsYUFBQztBQUNkLGdCQUFLLElBQU0sR0FBRyxJQUFJLFNBQVMsRUFBRTtBQUMzQixpQkFBSSxTQUFTLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztBQUV6QixxQkFBUSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSTtBQUMzQixvQkFBSyxtQkFBTSxXQUFXLENBQUMsTUFBTTtBQUFFO0FBQzdCLDRCQUFTLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDeEMseUJBQU07a0JBQ1A7QUFDRCxvQkFBSyxtQkFBTSxXQUFXLENBQUMsTUFBTTtBQUFFO0FBQzdCLDRCQUFTLEdBQUksT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLFFBQVEsR0FDbkQsU0FBUyxHQUNSLE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxRQUFRLEdBQ3ZDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEdBQ2xDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDekIseUJBQU07a0JBQ1A7QUFDRCxvQkFBSyxtQkFBTSxXQUFXLENBQUMsS0FBSztBQUFFO0FBQzVCLDRCQUFTLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNqQyx5QkFBTTtrQkFDUDtBQUNEO0FBQVM7QUFDUCw0QkFBUyxHQUFJLE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxRQUFRLEdBQ25ELFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEdBQ2xDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDdkIsdUJBQUksU0FBUyxLQUFLLFNBQVMsRUFBRTs7QUFFM0IsOEJBQVMsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQzFDO0FBQ0QseUJBQU07a0JBQ1A7QUFBQSxjQUNBOztBQUVELGlCQUFJLE9BQUssUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO21DQUMrQixPQUFLLFFBQVEsQ0FBQyxHQUFHLENBQUM7bUJBQS9ELE1BQU0saUJBQU4sTUFBTTttQkFBRSxlQUFlLGlCQUFmLGVBQWU7bUJBQUUsZUFBZSxpQkFBZixlQUFlOztBQUNoRCxtQkFBSSxlQUFlLElBQUksTUFBTSxFQUFFO0FBQzdCLDBCQUFTLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQUM7Z0JBQ3BEO2NBQ0Y7O0FBRUQscUJBQVEsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUk7QUFDM0Isb0JBQUssbUJBQU0sV0FBVyxDQUFDLE1BQU07QUFBRTtBQUM3Qix3QkFBSyxHQUFHLE9BQUssWUFBWSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNqRix5QkFBTTtrQkFDUDtBQUNELG9CQUFLLG1CQUFNLFdBQVcsQ0FBQyxJQUFJO0FBQUU7QUFDM0Isd0JBQUssR0FBRyxPQUFLLFVBQVUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDOUMseUJBQU07a0JBQ1A7QUFDRCxvQkFBSyxtQkFBTSxXQUFXLENBQUMsS0FBSztBQUFFO0FBQzVCLHdCQUFLLEdBQUcsT0FBSyxXQUFXLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQy9DLHlCQUFNO2tCQUNQO0FBQ0Qsb0JBQUssbUJBQU0sV0FBVyxDQUFDLE1BQU07QUFBRTtBQUM3Qix3QkFBSyxHQUFHLE9BQUssWUFBWSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RFLHlCQUFNO2tCQUNQO0FBQ0Q7QUFBUztBQUNQLHdCQUFLLEdBQUcsT0FBSyxVQUFVLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzlDLHlCQUFNO2tCQUNQO0FBQUEsY0FDQTtBQUNELGlCQUFJLENBQUMsS0FBSyxFQUFFO0FBQ1YscUJBQU07Y0FDUDtZQUNGO0FBQ0Qsa0JBQU8sS0FBSyxDQUFDO1VBQ2QsQ0FBQyxDQUFDO0FBQ0gsYUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDeEI7TUFDRjs7O1lBRVcsc0JBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUU7QUFDN0MsV0FBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLGVBQVEsVUFBVTtBQUNsQixjQUFLLEdBQUc7QUFBRTtBQUNSLGlCQUFJLFNBQVMsSUFBSSxTQUFTLEVBQUU7QUFDMUIsb0JBQUssR0FBRyxLQUFLLENBQUM7Y0FDZjtBQUNELG1CQUFNO1lBQ1A7QUFDRCxjQUFLLEdBQUc7QUFBRTtBQUNSLGlCQUFJLFNBQVMsSUFBSSxTQUFTLEVBQUU7QUFDMUIsb0JBQUssR0FBRyxLQUFLLENBQUM7Y0FDZjtBQUNELG1CQUFNO1lBQ1A7QUFDRCxjQUFLLElBQUk7QUFBRTtBQUNULGlCQUFJLFNBQVMsR0FBRyxTQUFTLEVBQUU7QUFDekIsb0JBQUssR0FBRyxLQUFLLENBQUM7Y0FDZjtBQUNELG1CQUFNO1lBQ1A7QUFDRCxjQUFLLEdBQUc7QUFBRTtBQUNSLGlCQUFJLFNBQVMsSUFBSSxTQUFTLEVBQUU7QUFDMUIsb0JBQUssR0FBRyxLQUFLLENBQUM7Y0FDZjtBQUNELG1CQUFNO1lBQ1A7QUFDRCxjQUFLLElBQUk7QUFBRTtBQUNULGlCQUFJLFNBQVMsR0FBRyxTQUFTLEVBQUU7QUFDekIsb0JBQUssR0FBRyxLQUFLLENBQUM7Y0FDZjtBQUNELG1CQUFNO1lBQ1A7QUFDRCxjQUFLLElBQUk7QUFBRTtBQUNULGlCQUFJLFNBQVMsSUFBSSxTQUFTLEVBQUU7QUFDMUIsb0JBQUssR0FBRyxLQUFLLENBQUM7Y0FDZjtBQUNELG1CQUFNO1lBQ1A7QUFDRDtBQUFTO0FBQ1Asb0JBQU8sQ0FBQyxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztBQUM3RCxtQkFBTTtZQUNQO0FBQUEsUUFDQTtBQUNELGNBQU8sS0FBSyxDQUFDO01BQ2Q7OztZQUVTLG9CQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDL0IsY0FBUSxTQUFTLENBQUMsT0FBTyxFQUFFLEtBQUssU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUMvQyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUM3QyxTQUFTLENBQUMsV0FBVyxFQUFFLEtBQUssU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFFO01BQzFEOzs7WUFFVSxxQkFBQyxTQUFTLEVBQUUsU0FBUyxFQUFFO0FBQ2hDLFdBQUk7QUFDRixnQkFBTyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ25ELENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDVixnQkFBTyxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0FBQzVDLGdCQUFPLElBQUksQ0FBQztRQUNiO01BQ0Y7OztZQUVXLHNCQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFO0FBQy9DLFdBQUksWUFBWSxLQUFLLElBQUksSUFBSSxPQUFPLFlBQVksS0FBSyxRQUFRLEVBQUU7QUFDN0QsZ0JBQU8sWUFBWSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDMUU7O0FBRUQsY0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztNQUM5Qzs7O1lBRVMsb0JBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRTtBQUMvQixXQUFJLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDaEUsZ0JBQU8sS0FBSyxDQUFDO1FBQ2Q7QUFDRCxjQUFPLElBQUksQ0FBQztNQUNiOzs7Ozs7O1lBS0ssZ0JBQUMsVUFBVSxFQUFFOzs7QUFDakIsV0FBSSxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO0FBQzVCLGFBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLGFBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0FBQ3hCLGFBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLGFBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUQsTUFBTTs7QUFDTCxrQkFBSyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQzdCLGVBQUksZUFBZSxHQUFHLEVBQUUsQ0FBQzs7QUFFekIsZUFBSSxPQUFLLGlCQUFpQixFQUFFO0FBQzFCLDRCQUFlLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6QyxNQUFNO0FBQ0wsNEJBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbEM7O0FBRUQsZUFBTSxNQUFNLEdBQUcsT0FBSyxVQUFVLEdBQUcsT0FBSyxZQUFZLEdBQUcsT0FBSyxJQUFJLENBQUM7O0FBRS9ELGtCQUFLLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFFLGFBQUcsRUFBSTtBQUN4QyxpQkFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QixpQkFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDOzs7O0FBSWxCLGtCQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzdELG1CQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsbUJBQUksT0FBSyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO3NDQUMrQixPQUFLLFFBQVEsQ0FBQyxHQUFHLENBQUM7cUJBQTNFLE1BQU0sa0JBQU4sTUFBTTtxQkFBRSxlQUFlLGtCQUFmLGVBQWU7cUJBQUUsZUFBZSxrQkFBZixlQUFlO3FCQUFFLFVBQVUsa0JBQVYsVUFBVTs7QUFDNUQscUJBQUksU0FBUyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QixxQkFBSSxVQUFVLEVBQUU7QUFDZCx1QkFBSSxlQUFlLElBQUksTUFBTSxFQUFFO0FBQzdCLDhCQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQUM7b0JBQ3JEO0FBQ0Qsd0JBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFVBQVUsR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEUseUJBQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNuRCx5QkFBSSxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ2hFLDRCQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2IsNkJBQU07c0JBQ1A7b0JBQ0Y7a0JBQ0Y7Z0JBQ0Y7Y0FDRjtBQUNELG9CQUFPLEtBQUssQ0FBQztZQUNkLENBQUMsQ0FBQztBQUNILGtCQUFLLFVBQVUsR0FBRyxJQUFJLENBQUM7O1FBQ3hCO01BQ0Y7OztZQUV3QixxQ0FBRztBQUMxQixjQUFPLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO01BQ3JDOzs7WUFFRSxlQUFHO0FBQ0osV0FBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7O0FBRTNDLFdBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsT0FBTyxLQUFLLENBQUM7O0FBRXJDLFdBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtBQUN6QyxnQkFBTyxLQUFLLENBQUM7UUFDZCxNQUFNO0FBQ0wsYUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLGNBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNELGlCQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLGVBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU07VUFDbkM7QUFDRCxnQkFBTyxNQUFNLENBQUM7UUFDZjtNQUNGOzs7WUFFVSx1QkFBRztBQUNaLGNBQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztNQUN0Qjs7O1lBRVMsc0JBQUc7QUFDWCxjQUFPLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLE1BQU0sQ0FBQztNQUM1Qzs7O1lBRVkseUJBQUc7QUFDZCxjQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxLQUFLLENBQUM7TUFDOUQ7OztZQUVXLHdCQUFHOzs7QUFDYixjQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQUcsRUFBSTtBQUMxQixnQkFBTyxHQUFHLENBQUMsT0FBSyxRQUFRLENBQUMsQ0FBQztRQUMzQixDQUFDLENBQUM7TUFDSjs7O1VBblpVLGNBQWM7Ozs7Ozs7OztBQzNDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBbUIsU0FBUztBQUM1QjtBQUNBO0FBQ0E7QUFDQSxJQUFHO0FBQ0g7QUFDQTtBQUNBLGdCQUFlLFNBQVM7QUFDeEI7O0FBRUE7QUFDQTtBQUNBLGdCQUFlLFNBQVM7QUFDeEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBRztBQUNILHFCQUFvQixTQUFTO0FBQzdCO0FB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LElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQyxXQUFJLGlCQUFpQixHQUFHLEtBQUssQ0FBQztBQUM5QixZQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2hELGFBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzlDLDRCQUFpQixHQUFHLElBQUksQ0FBQztBQUN6QixpQkFBTTtVQUNQO1FBQ0Y7QUFDRCxXQUFJLENBQUMsaUJBQWlCLEVBQUU7QUFDdEIsZ0JBQU8sSUFBSSxLQUFLLHVFQUNILGdCQUFnQixDQUFHLENBQUM7UUFDbEM7TUFDRjtJQUNGO0FBQ0QsY0FBVyxFQUFFLGlCQUFVLE1BQU07QUFDN0IsYUFBVSxFQUFFLGlCQUFVLE1BQU07RUFDN0IsQ0FBQzs7QUFFRixhQUFZLENBQUMsWUFBWSxHQUFHO0FBQzFCLFFBQUssRUFBRSxtQkFBTSxZQUFZO0VBQzFCLENBQUM7O3NCQUVhLFlBQVkiLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIiksIHJlcXVpcmUoXCJyZWFjdC1kb21cIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wicmVhY3RcIiwgXCJyZWFjdC1kb21cIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiUmVhY3RCb290c3RyYXBUYWJsZVwiXSA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpLCByZXF1aXJlKFwicmVhY3QtZG9tXCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJSZWFjdEJvb3RzdHJhcFRhYmxlXCJdID0gZmFjdG9yeShyb290W1wiUmVhY3RcIl0sIHJvb3RbXCJSZWFjdERPTVwiXSk7XG59KSh0aGlzLCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzJfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV81X18pIHtcbnJldHVybiBcblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiB3ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb25cbiAqKi8iLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcblxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0ZXhwb3J0czoge30sXG4gXHRcdFx0aWQ6IG1vZHVsZUlkLFxuIFx0XHRcdGxvYWRlZDogZmFsc2VcbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubG9hZGVkID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIHdlYnBhY2svYm9vdHN0cmFwIGY4Y2NiMzQ5YmMzYjkxMzM1NTZhXG4gKiovIiwiaW1wb3J0IEJvb3RzdHJhcFRhYmxlIGZyb20gJy4vQm9vdHN0cmFwVGFibGUnO1xuaW1wb3J0IFRhYmxlSGVhZGVyQ29sdW1uIGZyb20gJy4vVGFibGVIZWFkZXJDb2x1bW4nO1xuaW1wb3J0IHsgVGFibGVEYXRhU2V0IH0gZnJvbSAnLi9zdG9yZS9UYWJsZURhdGFTdG9yZSc7XG5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICB3aW5kb3cuQm9vdHN0cmFwVGFibGUgPSBCb290c3RyYXBUYWJsZTtcbiAgd2luZG93LlRhYmxlSGVhZGVyQ29sdW1uID0gVGFibGVIZWFkZXJDb2x1bW47XG4gIHdpbmRvdy5UYWJsZURhdGFTZXQgPSBUYWJsZURhdGFTZXQ7XG59XG5leHBvcnQgZGVmYXVsdCB7XG4gIEJvb3RzdHJhcFRhYmxlLFxuICBUYWJsZUhlYWRlckNvbHVtbixcbiAgVGFibGVEYXRhU2V0XG59O1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvaW5kZXguanNcbiAqKi8iLCIvKiBlc2xpbnQgbm8tYWxlcnQ6IDAgKi9cbi8qIGVzbGludCBtYXgtbGVuOiAwICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBQcm9wVHlwZXMgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi9Db25zdCc7XG5pbXBvcnQgVGFibGVIZWFkZXIgZnJvbSAnLi9UYWJsZUhlYWRlcic7XG5pbXBvcnQgVGFibGVCb2R5IGZyb20gJy4vVGFibGVCb2R5JztcbmltcG9ydCBQYWdpbmF0aW9uTGlzdCBmcm9tICcuL3BhZ2luYXRpb24vUGFnaW5hdGlvbkxpc3QnO1xuaW1wb3J0IFRvb2xCYXIgZnJvbSAnLi90b29sYmFyL1Rvb2xCYXInO1xuaW1wb3J0IFRhYmxlRmlsdGVyIGZyb20gJy4vVGFibGVGaWx0ZXInO1xuaW1wb3J0IHsgVGFibGVEYXRhU3RvcmUgfSBmcm9tICcuL3N0b3JlL1RhYmxlRGF0YVN0b3JlJztcbmltcG9ydCBVdGlsIGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgZXhwb3J0Q1NWIGZyb20gJy4vY3N2X2V4cG9ydF91dGlsJztcbmltcG9ydCB7IEZpbHRlciB9IGZyb20gJy4vRmlsdGVyJztcblxuY2xhc3MgQm9vdHN0cmFwVGFibGUgZXh0ZW5kcyBDb21wb25lbnQge1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaXNJRSA9IGZhbHNlO1xuICAgIHRoaXMuX2F0dGFjaENlbGxFZGl0RnVuYygpO1xuICAgIGlmIChVdGlsLmNhblVzZURPTSgpKSB7XG4gICAgICB0aGlzLmlzSUUgPSBkb2N1bWVudC5kb2N1bWVudE1vZGU7XG4gICAgfVxuICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnByb3BzLmRhdGEpKSB7XG4gICAgICB0aGlzLnN0b3JlID0gbmV3IFRhYmxlRGF0YVN0b3JlKHRoaXMucHJvcHMuZGF0YS5nZXREYXRhKCkpO1xuICAgICAgdGhpcy5wcm9wcy5kYXRhLmNsZWFyKCk7XG4gICAgICB0aGlzLnByb3BzLmRhdGEub24oJ2NoYW5nZScsIChkYXRhKSA9PiB7XG4gICAgICAgIHRoaXMuc3RvcmUuc2V0RGF0YShkYXRhKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgZGF0YTogdGhpcy5nZXRUYWJsZURhdGEoKVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb3B5ID0gdGhpcy5wcm9wcy5kYXRhLnNsaWNlKCk7XG4gICAgICB0aGlzLnN0b3JlID0gbmV3IFRhYmxlRGF0YVN0b3JlKGNvcHkpO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdFRhYmxlKHRoaXMucHJvcHMpO1xuXG4gICAgaWYgKHRoaXMuZmlsdGVyKSB7XG4gICAgICB0aGlzLmZpbHRlci5vbignb25GaWx0ZXJDaGFuZ2UnLCAoY3VycmVudEZpbHRlcikgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZUZpbHRlckRhdGEoY3VycmVudEZpbHRlcik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9wcy5zZWxlY3RSb3cgJiYgdGhpcy5wcm9wcy5zZWxlY3RSb3cuc2VsZWN0ZWQpIHtcbiAgICAgIGNvbnN0IGNvcHkgPSB0aGlzLnByb3BzLnNlbGVjdFJvdy5zZWxlY3RlZC5zbGljZSgpO1xuICAgICAgdGhpcy5zdG9yZS5zZXRTZWxlY3RlZFJvd0tleShjb3B5KTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgZGF0YTogdGhpcy5nZXRUYWJsZURhdGEoKSxcbiAgICAgIGN1cnJQYWdlOiB0aGlzLnByb3BzLm9wdGlvbnMucGFnZSB8fCAxLFxuICAgICAgc2l6ZVBlclBhZ2U6IHRoaXMucHJvcHMub3B0aW9ucy5zaXplUGVyUGFnZSB8fCBDb25zdC5TSVpFX1BFUl9QQUdFX0xJU1RbMF0sXG4gICAgICBzZWxlY3RlZFJvd0tleXM6IHRoaXMuc3RvcmUuZ2V0U2VsZWN0ZWRSb3dLZXlzKClcbiAgICB9O1xuICB9XG5cbiAgaW5pdFRhYmxlKHByb3BzKSB7XG4gICAgbGV0IHsga2V5RmllbGQgfSA9IHByb3BzO1xuXG4gICAgY29uc3QgaXNLZXlGaWVsZERlZmluZWQgPSB0eXBlb2Yga2V5RmllbGQgPT09ICdzdHJpbmcnICYmIGtleUZpZWxkLmxlbmd0aDtcbiAgICBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKHByb3BzLmNoaWxkcmVuLCBjb2x1bW4gPT4ge1xuICAgICAgaWYgKGNvbHVtbi5wcm9wcy5pc0tleSkge1xuICAgICAgICBpZiAoa2V5RmllbGQpIHtcbiAgICAgICAgICB0aHJvdyAnRXJyb3IuIE11bHRpcGxlIGtleSBjb2x1bW4gYmUgZGV0ZWN0ZWQgaW4gVGFibGVIZWFkZXJDb2x1bW4uJztcbiAgICAgICAgfVxuICAgICAgICBrZXlGaWVsZCA9IGNvbHVtbi5wcm9wcy5kYXRhRmllbGQ7XG4gICAgICB9XG4gICAgICBpZiAoY29sdW1uLnByb3BzLmZpbHRlcikge1xuICAgICAgICAvLyBhIGNvbHVtbiBjb250YWlucyBhIGZpbHRlclxuICAgICAgICBpZiAoIXRoaXMuZmlsdGVyKSB7XG4gICAgICAgICAgLy8gZmlyc3QgdGltZSBjcmVhdGUgdGhlIGZpbHRlciBvbiB0aGUgQm9vdHN0cmFwVGFibGVcbiAgICAgICAgICB0aGlzLmZpbHRlciA9IG5ldyBGaWx0ZXIoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBwYXNzIHRoZSBmaWx0ZXIgdG8gY29sdW1uIHdpdGggZmlsdGVyXG4gICAgICAgIGNvbHVtbi5wcm9wcy5maWx0ZXIuZW1pdHRlciA9IHRoaXMuZmlsdGVyO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgY29sSW5mb3MgPSB0aGlzLmdldENvbHVtbnNEZXNjcmlwdGlvbihwcm9wcykucmVkdWNlKCggcHJldiwgY3VyciApID0+IHtcbiAgICAgIHByZXZbY3Vyci5uYW1lXSA9IGN1cnI7XG4gICAgICByZXR1cm4gcHJldjtcbiAgICB9LCB7fSk7XG5cbiAgICBpZiAoIWlzS2V5RmllbGREZWZpbmVkICYmICFrZXlGaWVsZCkge1xuICAgICAgdGhyb3cgYEVycm9yLiBObyBhbnkga2V5IGNvbHVtbiBkZWZpbmVkIGluIFRhYmxlSGVhZGVyQ29sdW1uLlxuICAgICAgICAgICAgVXNlICdpc0tleT17dHJ1ZX0nIHRvIHNwZWNpZnkgYSB1bmlxdWUgY29sdW1uIGFmdGVyIHZlcnNpb24gMC41LjQuYDtcbiAgICB9XG5cbiAgICB0aGlzLnN0b3JlLnNldFByb3BzKHtcbiAgICAgIGlzUGFnaW5hdGlvbjogcHJvcHMucGFnaW5hdGlvbixcbiAgICAgIGtleUZpZWxkOiBrZXlGaWVsZCxcbiAgICAgIGNvbEluZm9zOiBjb2xJbmZvcyxcbiAgICAgIG11bHRpQ29sdW1uU2VhcmNoOiBwcm9wcy5tdWx0aUNvbHVtblNlYXJjaCxcbiAgICAgIHJlbW90ZTogdGhpcy5pc1JlbW90ZURhdGFTb3VyY2UoKVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0VGFibGVEYXRhKCkge1xuICAgIGNvbnN0IHsgb3B0aW9ucywgcGFnaW5hdGlvbiB9ID0gdGhpcy5wcm9wcztcbiAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgaWYgKG9wdGlvbnMuc29ydE5hbWUgJiYgb3B0aW9ucy5zb3J0T3JkZXIpIHtcbiAgICAgIHRoaXMuc3RvcmUuc29ydChvcHRpb25zLnNvcnRPcmRlciwgb3B0aW9ucy5zb3J0TmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhZ2luYXRpb24pIHtcbiAgICAgIGxldCBwYWdlO1xuICAgICAgbGV0IHNpemVQZXJQYWdlO1xuICAgICAgaWYgKHRoaXMuc3RvcmUuaXNDaGFuZ2VkUGFnZSgpKSB7XG4gICAgICAgIHNpemVQZXJQYWdlID0gdGhpcy5zdGF0ZS5zaXplUGVyUGFnZTtcbiAgICAgICAgcGFnZSA9IHRoaXMuc3RhdGUuY3VyclBhZ2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaXplUGVyUGFnZSA9IG9wdGlvbnMuc2l6ZVBlclBhZ2UgfHwgQ29uc3QuU0laRV9QRVJfUEFHRV9MSVNUWzBdO1xuICAgICAgICBwYWdlID0gb3B0aW9ucy5wYWdlIHx8IDE7XG4gICAgICB9XG4gICAgICByZXN1bHQgPSB0aGlzLnN0b3JlLnBhZ2UocGFnZSwgc2l6ZVBlclBhZ2UpLmdldCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSB0aGlzLnN0b3JlLmdldCgpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZ2V0Q29sdW1uc0Rlc2NyaXB0aW9uKHsgY2hpbGRyZW4gfSkge1xuICAgIHJldHVybiBSZWFjdC5DaGlsZHJlbi5tYXAoY2hpbGRyZW4sIChjb2x1bW4sIGkpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGNvbHVtbi5wcm9wcy5kYXRhRmllbGQsXG4gICAgICAgIGFsaWduOiBjb2x1bW4ucHJvcHMuZGF0YUFsaWduLFxuICAgICAgICBzb3J0OiBjb2x1bW4ucHJvcHMuZGF0YVNvcnQsXG4gICAgICAgIGZvcm1hdDogY29sdW1uLnByb3BzLmRhdGFGb3JtYXQsXG4gICAgICAgIGZvcm1hdEV4dHJhRGF0YTogY29sdW1uLnByb3BzLmZvcm1hdEV4dHJhRGF0YSxcbiAgICAgICAgZmlsdGVyRm9ybWF0dGVkOiBjb2x1bW4ucHJvcHMuZmlsdGVyRm9ybWF0dGVkLFxuICAgICAgICBlZGl0YWJsZTogY29sdW1uLnByb3BzLmVkaXRhYmxlLFxuICAgICAgICBoaWRkZW46IGNvbHVtbi5wcm9wcy5oaWRkZW4sXG4gICAgICAgIHNlYXJjaGFibGU6IGNvbHVtbi5wcm9wcy5zZWFyY2hhYmxlLFxuICAgICAgICBjbGFzc05hbWU6IGNvbHVtbi5wcm9wcy5jb2x1bW5DbGFzc05hbWUsXG4gICAgICAgIHdpZHRoOiBjb2x1bW4ucHJvcHMud2lkdGgsXG4gICAgICAgIHRleHQ6IGNvbHVtbi5wcm9wcy5jaGlsZHJlbixcbiAgICAgICAgc29ydEZ1bmM6IGNvbHVtbi5wcm9wcy5zb3J0RnVuYyxcbiAgICAgICAgaW5kZXg6IGlcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xuICAgIHRoaXMuaW5pdFRhYmxlKG5leHRQcm9wcyk7XG4gICAgY29uc3QgeyBvcHRpb25zLCBzZWxlY3RSb3cgfSA9IG5leHRQcm9wcztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShuZXh0UHJvcHMuZGF0YSkpIHtcbiAgICAgIHRoaXMuc3RvcmUuc2V0RGF0YShuZXh0UHJvcHMuZGF0YS5zbGljZSgpKTtcbiAgICAgIGxldCBwYWdlID0gb3B0aW9ucy5wYWdlIHx8IHRoaXMuc3RhdGUuY3VyclBhZ2U7XG4gICAgICBjb25zdCBzaXplUGVyUGFnZSA9IG9wdGlvbnMuc2l6ZVBlclBhZ2UgfHwgdGhpcy5zdGF0ZS5zaXplUGVyUGFnZTtcblxuICAgICAgLy8gIzEyNVxuICAgICAgaWYgKCFvcHRpb25zLnBhZ2UgJiZcbiAgICAgICAgcGFnZSA+PSBNYXRoLmNlaWwobmV4dFByb3BzLmRhdGEubGVuZ3RoIC8gc2l6ZVBlclBhZ2UpKSB7XG4gICAgICAgIHBhZ2UgPSAxO1xuICAgICAgfVxuICAgICAgY29uc3Qgc29ydEluZm8gPSB0aGlzLnN0b3JlLmdldFNvcnRJbmZvKCk7XG4gICAgICBjb25zdCBzb3J0RmllbGQgPSBvcHRpb25zLnNvcnROYW1lIHx8IChzb3J0SW5mbyA/IHNvcnRJbmZvLnNvcnRGaWVsZCA6IHVuZGVmaW5lZCk7XG4gICAgICBjb25zdCBzb3J0T3JkZXIgPSBvcHRpb25zLnNvcnRPcmRlciB8fCAoc29ydEluZm8gPyBzb3J0SW5mby5vcmRlciA6IHVuZGVmaW5lZCk7XG4gICAgICBpZiAoc29ydEZpZWxkICYmIHNvcnRPcmRlcikgdGhpcy5zdG9yZS5zb3J0KHNvcnRPcmRlciwgc29ydEZpZWxkKTtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLnN0b3JlLnBhZ2UocGFnZSwgc2l6ZVBlclBhZ2UpLmdldCgpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGRhdGEsXG4gICAgICAgIGN1cnJQYWdlOiBwYWdlLFxuICAgICAgICBzaXplUGVyUGFnZVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChzZWxlY3RSb3cgJiYgc2VsZWN0Um93LnNlbGVjdGVkKSB7XG4gICAgICAvLyBzZXQgZGVmYXVsdCBzZWxlY3Qgcm93cyB0byBzdG9yZS5cbiAgICAgIGNvbnN0IGNvcHkgPSBzZWxlY3RSb3cuc2VsZWN0ZWQuc2xpY2UoKTtcbiAgICAgIHRoaXMuc3RvcmUuc2V0U2VsZWN0ZWRSb3dLZXkoY29weSk7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc2VsZWN0ZWRSb3dLZXlzOiBjb3B5XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLl9hZGp1c3RUYWJsZSgpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl9hZGp1c3RUYWJsZSk7XG4gICAgdGhpcy5yZWZzLmJvZHkucmVmcy5jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5fc2Nyb2xsSGVhZGVyKTtcbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl9hZGp1c3RUYWJsZSk7XG4gICAgdGhpcy5yZWZzLmJvZHkucmVmcy5jb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5fc2Nyb2xsSGVhZGVyKTtcbiAgICBpZiAodGhpcy5maWx0ZXIpIHtcbiAgICAgIHRoaXMuZmlsdGVyLnJlbW92ZUFsbExpc3RlbmVycygnb25GaWx0ZXJDaGFuZ2UnKTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgdGhpcy5fYWRqdXN0VGFibGUoKTtcbiAgICB0aGlzLl9hdHRhY2hDZWxsRWRpdEZ1bmMoKTtcbiAgICBpZiAodGhpcy5wcm9wcy5vcHRpb25zLmFmdGVyVGFibGVDb21wbGV0ZSkge1xuICAgICAgdGhpcy5wcm9wcy5vcHRpb25zLmFmdGVyVGFibGVDb21wbGV0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIF9hdHRhY2hDZWxsRWRpdEZ1bmMoKSB7XG4gICAgY29uc3QgeyBjZWxsRWRpdCB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoY2VsbEVkaXQpIHtcbiAgICAgIHRoaXMucHJvcHMuY2VsbEVkaXQuX19vbkNvbXBsZXRlRWRpdF9fID0gdGhpcy5oYW5kbGVFZGl0Q2VsbC5iaW5kKHRoaXMpO1xuICAgICAgaWYgKGNlbGxFZGl0Lm1vZGUgIT09IENvbnN0LkNFTExfRURJVF9OT05FKSB7XG4gICAgICAgIHRoaXMucHJvcHMuc2VsZWN0Um93LmNsaWNrVG9TZWxlY3QgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24sXG4gICAqIHRoZSBkYXRhZ3JpZCBzaG91bGQgbG9hZCBpdHMgZGF0YSByZW1vdGVseS5cbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSAgW3Byb3BzXSBPcHRpb25hbC4gSWYgbm90IGdpdmVuLCB0aGlzLnByb3BzIHdpbGwgYmUgdXNlZFxuICAgKiBAcmV0dXJuIHtCb29sZWFufVxuICAgKi9cbiAgaXNSZW1vdGVEYXRhU291cmNlKHByb3BzKSB7XG4gICAgcmV0dXJuIChwcm9wcyB8fCB0aGlzLnByb3BzKS5yZW1vdGU7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qgc3R5bGUgPSB7XG4gICAgICBoZWlnaHQ6IHRoaXMucHJvcHMuaGVpZ2h0LFxuICAgICAgbWF4SGVpZ2h0OiB0aGlzLnByb3BzLm1heEhlaWdodFxuICAgIH07XG5cbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRDb2x1bW5zRGVzY3JpcHRpb24odGhpcy5wcm9wcyk7XG4gICAgY29uc3Qgc29ydEluZm8gPSB0aGlzLnN0b3JlLmdldFNvcnRJbmZvKCk7XG4gICAgY29uc3QgcGFnaW5hdGlvbiA9IHRoaXMucmVuZGVyUGFnaW5hdGlvbigpO1xuICAgIGNvbnN0IHRvb2xCYXIgPSB0aGlzLnJlbmRlclRvb2xCYXIoKTtcbiAgICBjb25zdCB0YWJsZUZpbHRlciA9IHRoaXMucmVuZGVyVGFibGVGaWx0ZXIoY29sdW1ucyk7XG4gICAgY29uc3QgaXNTZWxlY3RBbGwgPSB0aGlzLmlzU2VsZWN0QWxsKCk7XG4gICAgbGV0IHNvcnRJbmRpY2F0b3IgPSB0aGlzLnByb3BzLm9wdGlvbnMuc29ydEluZGljYXRvcjtcbiAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMub3B0aW9ucy5zb3J0SW5kaWNhdG9yID09PSAndW5kZWZpbmVkJykgc29ydEluZGljYXRvciA9IHRydWU7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPSdyZWFjdC1icy10YWJsZS1jb250YWluZXInPlxuICAgICAgICB7IHRvb2xCYXIgfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncmVhY3QtYnMtdGFibGUnIHJlZj0ndGFibGUnIHN0eWxlPXsgc3R5bGUgfVxuICAgICAgICAgICAgb25Nb3VzZUVudGVyPXsgdGhpcy5oYW5kbGVNb3VzZUVudGVyIH1cbiAgICAgICAgICAgIG9uTW91c2VMZWF2ZT17IHRoaXMuaGFuZGxlTW91c2VMZWF2ZSB9PlxuICAgICAgICAgIDxUYWJsZUhlYWRlclxuICAgICAgICAgICAgcmVmPSdoZWFkZXInXG4gICAgICAgICAgICByb3dTZWxlY3RUeXBlPXsgdGhpcy5wcm9wcy5zZWxlY3RSb3cubW9kZSB9XG4gICAgICAgICAgICBoaWRlU2VsZWN0Q29sdW1uPXsgdGhpcy5wcm9wcy5zZWxlY3RSb3cuaGlkZVNlbGVjdENvbHVtbiB9XG4gICAgICAgICAgICBzb3J0TmFtZT17IHNvcnRJbmZvID8gc29ydEluZm8uc29ydEZpZWxkIDogdW5kZWZpbmVkIH1cbiAgICAgICAgICAgIHNvcnRPcmRlcj17IHNvcnRJbmZvID8gc29ydEluZm8ub3JkZXIgOiB1bmRlZmluZWQgfVxuICAgICAgICAgICAgc29ydEluZGljYXRvcj17IHNvcnRJbmRpY2F0b3IgfVxuICAgICAgICAgICAgb25Tb3J0PXsgdGhpcy5oYW5kbGVTb3J0IH1cbiAgICAgICAgICAgIG9uU2VsZWN0QWxsUm93PXsgdGhpcy5oYW5kbGVTZWxlY3RBbGxSb3cgfVxuICAgICAgICAgICAgYm9yZGVyZWQ9eyB0aGlzLnByb3BzLmJvcmRlcmVkIH1cbiAgICAgICAgICAgIGNvbmRlbnNlZD17IHRoaXMucHJvcHMuY29uZGVuc2VkIH1cbiAgICAgICAgICAgIGlzRmlsdGVyZWQ9eyB0aGlzLmZpbHRlciA/IHRydWUgOiBmYWxzZSB9XG4gICAgICAgICAgICBpc1NlbGVjdEFsbD17IGlzU2VsZWN0QWxsIH0+XG4gICAgICAgICAgICB7IHRoaXMucHJvcHMuY2hpbGRyZW4gfVxuICAgICAgICAgIDwvVGFibGVIZWFkZXI+XG4gICAgICAgICAgPFRhYmxlQm9keSByZWY9J2JvZHknXG4gICAgICAgICAgICBzdHlsZT17IHN0eWxlIH1cbiAgICAgICAgICAgIGRhdGE9eyB0aGlzLnN0YXRlLmRhdGEgfVxuICAgICAgICAgICAgY29sdW1ucz17IGNvbHVtbnMgfVxuICAgICAgICAgICAgdHJDbGFzc05hbWU9eyB0aGlzLnByb3BzLnRyQ2xhc3NOYW1lIH1cbiAgICAgICAgICAgIHN0cmlwZWQ9eyB0aGlzLnByb3BzLnN0cmlwZWQgfVxuICAgICAgICAgICAgYm9yZGVyZWQ9eyB0aGlzLnByb3BzLmJvcmRlcmVkIH1cbiAgICAgICAgICAgIGhvdmVyPXsgdGhpcy5wcm9wcy5ob3ZlciB9XG4gICAgICAgICAgICBrZXlGaWVsZD17IHRoaXMuc3RvcmUuZ2V0S2V5RmllbGQoKSB9XG4gICAgICAgICAgICBjb25kZW5zZWQ9eyB0aGlzLnByb3BzLmNvbmRlbnNlZCB9XG4gICAgICAgICAgICBzZWxlY3RSb3c9eyB0aGlzLnByb3BzLnNlbGVjdFJvdyB9XG4gICAgICAgICAgICBjZWxsRWRpdD17IHRoaXMucHJvcHMuY2VsbEVkaXQgfVxuICAgICAgICAgICAgc2VsZWN0ZWRSb3dLZXlzPXsgdGhpcy5zdGF0ZS5zZWxlY3RlZFJvd0tleXMgfVxuICAgICAgICAgICAgb25Sb3dDbGljaz17IHRoaXMuaGFuZGxlUm93Q2xpY2sgfVxuICAgICAgICAgICAgb25Sb3dNb3VzZU92ZXI9eyB0aGlzLmhhbmRsZVJvd01vdXNlT3ZlciB9XG4gICAgICAgICAgICBvblJvd01vdXNlT3V0PXsgdGhpcy5oYW5kbGVSb3dNb3VzZU91dCB9XG4gICAgICAgICAgICBvblNlbGVjdFJvdz17IHRoaXMuaGFuZGxlU2VsZWN0Um93IH1cbiAgICAgICAgICAgIG5vRGF0YVRleHQ9eyB0aGlzLnByb3BzLm9wdGlvbnMubm9EYXRhVGV4dCB9IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7IHRhYmxlRmlsdGVyIH1cbiAgICAgICAgeyBwYWdpbmF0aW9uIH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBpc1NlbGVjdEFsbCgpIHtcbiAgICBjb25zdCBkZWZhdWx0U2VsZWN0Um93S2V5cyA9IHRoaXMuc3RvcmUuZ2V0U2VsZWN0ZWRSb3dLZXlzKCk7XG4gICAgY29uc3QgYWxsUm93S2V5cyA9IHRoaXMuc3RvcmUuZ2V0QWxsUm93a2V5KCk7XG4gICAgaWYgKGRlZmF1bHRTZWxlY3RSb3dLZXlzLmxlbmd0aCAhPT0gYWxsUm93S2V5cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0U2VsZWN0Um93S2V5cy5sZW5ndGggPT09IDAgPyBmYWxzZSA6ICdpbmRldGVybWluYXRlJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgY2xlYW5TZWxlY3RlZCgpIHtcbiAgICB0aGlzLnN0b3JlLnNldFNlbGVjdGVkUm93S2V5KFtdKTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHNlbGVjdGVkUm93S2V5czogW11cbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVNvcnQgPSAob3JkZXIsIHNvcnRGaWVsZCkgPT4ge1xuICAgIGlmICh0aGlzLnByb3BzLm9wdGlvbnMub25Tb3J0Q2hhbmdlKSB7XG4gICAgICB0aGlzLnByb3BzLm9wdGlvbnMub25Tb3J0Q2hhbmdlKHNvcnRGaWVsZCwgb3JkZXIsIHRoaXMucHJvcHMpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc3RvcmUuc29ydChvcmRlciwgc29ydEZpZWxkKS5nZXQoKTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGRhdGE6IHJlc3VsdFxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlUGFnaW5hdGlvbkRhdGEgPSAocGFnZSwgc2l6ZVBlclBhZ2UpID0+IHtcbiAgICBjb25zdCB7IG9uUGFnZUNoYW5nZSB9ID0gdGhpcy5wcm9wcy5vcHRpb25zO1xuICAgIGlmIChvblBhZ2VDaGFuZ2UpIHtcbiAgICAgIG9uUGFnZUNoYW5nZShwYWdlLCBzaXplUGVyUGFnZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNSZW1vdGVEYXRhU291cmNlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnN0b3JlLnBhZ2UocGFnZSwgc2l6ZVBlclBhZ2UpLmdldCgpO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZGF0YTogcmVzdWx0LFxuICAgICAgY3VyclBhZ2U6IHBhZ2UsXG4gICAgICBzaXplUGVyUGFnZVxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlTW91c2VMZWF2ZSA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5wcm9wcy5vcHRpb25zLm9uTW91c2VMZWF2ZSkge1xuICAgICAgdGhpcy5wcm9wcy5vcHRpb25zLm9uTW91c2VMZWF2ZSgpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZU1vdXNlRW50ZXIgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMub3B0aW9ucy5vbk1vdXNlRW50ZXIpIHtcbiAgICAgIHRoaXMucHJvcHMub3B0aW9ucy5vbk1vdXNlRW50ZXIoKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVSb3dNb3VzZU91dCA9IChyb3csIGV2ZW50KSA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMub3B0aW9ucy5vblJvd01vdXNlT3V0KSB7XG4gICAgICB0aGlzLnByb3BzLm9wdGlvbnMub25Sb3dNb3VzZU91dChyb3csIGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVSb3dNb3VzZU92ZXIgPSAocm93LCBldmVudCkgPT4ge1xuICAgIGlmICh0aGlzLnByb3BzLm9wdGlvbnMub25Sb3dNb3VzZU92ZXIpIHtcbiAgICAgIHRoaXMucHJvcHMub3B0aW9ucy5vblJvd01vdXNlT3Zlcihyb3csIGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVSb3dDbGljayA9IHJvdyA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMub3B0aW9ucy5vblJvd0NsaWNrKSB7XG4gICAgICB0aGlzLnByb3BzLm9wdGlvbnMub25Sb3dDbGljayhyb3cpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVNlbGVjdEFsbFJvdyA9IGUgPT4ge1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBlLmN1cnJlbnRUYXJnZXQuY2hlY2tlZDtcbiAgICBsZXQgc2VsZWN0ZWRSb3dLZXlzID0gW107XG4gICAgbGV0IHJlc3VsdCA9IHRydWU7XG4gICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0Um93Lm9uU2VsZWN0QWxsKSB7XG4gICAgICByZXN1bHQgPSB0aGlzLnByb3BzLnNlbGVjdFJvdy5vblNlbGVjdEFsbChpc1NlbGVjdGVkLFxuICAgICAgICBpc1NlbGVjdGVkID8gdGhpcy5zdG9yZS5nZXQoKSA6IFtdKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ3VuZGVmaW5lZCcgfHwgcmVzdWx0ICE9PSBmYWxzZSkge1xuICAgICAgaWYgKGlzU2VsZWN0ZWQpIHtcbiAgICAgICAgc2VsZWN0ZWRSb3dLZXlzID0gdGhpcy5zdG9yZS5nZXRBbGxSb3drZXkoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdG9yZS5zZXRTZWxlY3RlZFJvd0tleShzZWxlY3RlZFJvd0tleXMpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHNlbGVjdGVkUm93S2V5cyB9KTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVTaG93T25seVNlbGVjdGVkID0gKCkgPT4ge1xuICAgIHRoaXMuc3RvcmUuaWdub3JlTm9uU2VsZWN0ZWQoKTtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGlmICh0aGlzLnByb3BzLnBhZ2luYXRpb24pIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMuc3RvcmUucGFnZSgxLCB0aGlzLnN0YXRlLnNpemVQZXJQYWdlKS5nZXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gdGhpcy5zdG9yZS5nZXQoKTtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBkYXRhOiByZXN1bHQsXG4gICAgICBjdXJyUGFnZTogMVxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlU2VsZWN0Um93ID0gKHJvdywgaXNTZWxlY3RlZCkgPT4ge1xuICAgIGxldCByZXN1bHQgPSB0cnVlO1xuICAgIGxldCBjdXJyU2VsZWN0ZWQgPSB0aGlzLnN0b3JlLmdldFNlbGVjdGVkUm93S2V5cygpO1xuICAgIGNvbnN0IHJvd0tleSA9IHJvd1sgdGhpcy5zdG9yZS5nZXRLZXlGaWVsZCgpIF07XG4gICAgY29uc3QgeyBzZWxlY3RSb3cgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKHNlbGVjdFJvdy5vblNlbGVjdCkge1xuICAgICAgcmVzdWx0ID0gc2VsZWN0Um93Lm9uU2VsZWN0KHJvdywgaXNTZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICd1bmRlZmluZWQnIHx8IHJlc3VsdCAhPT0gZmFsc2UpIHtcbiAgICAgIGlmIChzZWxlY3RSb3cubW9kZSA9PT0gQ29uc3QuUk9XX1NFTEVDVF9TSU5HTEUpIHtcbiAgICAgICAgY3VyclNlbGVjdGVkID0gaXNTZWxlY3RlZCA/IFsgcm93S2V5IF0gOiBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc1NlbGVjdGVkKSB7XG4gICAgICAgICAgY3VyclNlbGVjdGVkLnB1c2gocm93S2V5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdXJyU2VsZWN0ZWQgPSBjdXJyU2VsZWN0ZWQuZmlsdGVyKGtleSA9PiByb3dLZXkgIT09IGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5zdG9yZS5zZXRTZWxlY3RlZFJvd0tleShjdXJyU2VsZWN0ZWQpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHNlbGVjdGVkUm93S2V5czogY3VyclNlbGVjdGVkXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVFZGl0Q2VsbChuZXdWYWwsIHJvd0luZGV4LCBjb2xJbmRleCkge1xuICAgIGNvbnN0IHsgYmVmb3JlU2F2ZUNlbGwsIGFmdGVyU2F2ZUNlbGwgfSA9IHRoaXMucHJvcHMuY2VsbEVkaXQ7XG4gICAgbGV0IGZpZWxkTmFtZTtcbiAgICBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKHRoaXMucHJvcHMuY2hpbGRyZW4sIGZ1bmN0aW9uKGNvbHVtbiwgaSkge1xuICAgICAgaWYgKGkgPT09IGNvbEluZGV4KSB7XG4gICAgICAgIGZpZWxkTmFtZSA9IGNvbHVtbi5wcm9wcy5kYXRhRmllbGQ7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChiZWZvcmVTYXZlQ2VsbCkge1xuICAgICAgY29uc3QgaXNWYWxpZCA9IGJlZm9yZVNhdmVDZWxsKHRoaXMuc3RhdGUuZGF0YVtyb3dJbmRleF0sIGZpZWxkTmFtZSwgbmV3VmFsKTtcbiAgICAgIGlmICghaXNWYWxpZCAmJiB0eXBlb2YgaXNWYWxpZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgZGF0YTogdGhpcy5zdG9yZS5nZXQoKVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc3RvcmUuZWRpdChuZXdWYWwsIHJvd0luZGV4LCBmaWVsZE5hbWUpLmdldCgpO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZGF0YTogcmVzdWx0XG4gICAgfSk7XG5cbiAgICBpZiAoYWZ0ZXJTYXZlQ2VsbCkge1xuICAgICAgYWZ0ZXJTYXZlQ2VsbCh0aGlzLnN0YXRlLmRhdGFbcm93SW5kZXhdLCBmaWVsZE5hbWUsIG5ld1ZhbCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlQWRkUm93QXRCZWdpbihuZXdPYmopIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5zdG9yZS5hZGRBdEJlZ2luKG5ld09iaik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGU7XG4gICAgfVxuICAgIHRoaXMuX2hhbmRsZUFmdGVyQWRkaW5nUm93KG5ld09iaik7XG4gIH1cblxuICBoYW5kbGVBZGRSb3cgPSBuZXdPYmogPT4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnN0b3JlLmFkZChuZXdPYmopO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBlO1xuICAgIH1cbiAgICB0aGlzLl9oYW5kbGVBZnRlckFkZGluZ1JvdyhuZXdPYmopO1xuICB9XG5cbiAgZ2V0U2l6ZVBlclBhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuc2l6ZVBlclBhZ2U7XG4gIH1cblxuICBnZXRDdXJyZW50UGFnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5jdXJyUGFnZTtcbiAgfVxuXG4gIGhhbmRsZURyb3BSb3cgPSByb3dLZXlzID0+IHtcbiAgICBjb25zdCBkcm9wUm93S2V5cyA9IHJvd0tleXMgPyByb3dLZXlzIDogdGhpcy5zdG9yZS5nZXRTZWxlY3RlZFJvd0tleXMoKTtcbiAgICAvLyBhZGQgY29uZmlybSBiZWZvcmUgdGhlIGRlbGV0ZSBhY3Rpb24gaWYgdGhhdCBvcHRpb24gaXMgc2V0LlxuICAgIGlmIChkcm9wUm93S2V5cyAmJiBkcm9wUm93S2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy5vcHRpb25zLmhhbmRsZUNvbmZpcm1EZWxldGVSb3cpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vcHRpb25zLmhhbmRsZUNvbmZpcm1EZWxldGVSb3coKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGVsZXRlUm93KGRyb3BSb3dLZXlzKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGNvbmZpcm0oJ0FyZSB5b3Ugc3VyZSB3YW50IGRlbGV0ZT8nKSkge1xuICAgICAgICB0aGlzLmRlbGV0ZVJvdyhkcm9wUm93S2V5cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZGVsZXRlUm93KGRyb3BSb3dLZXlzKSB7XG4gICAgbGV0IHJlc3VsdDtcbiAgICB0aGlzLnN0b3JlLnJlbW92ZShkcm9wUm93S2V5cyk7ICAvLyByZW1vdmUgc2VsZWN0ZWQgUm93XG4gICAgdGhpcy5zdG9yZS5zZXRTZWxlY3RlZFJvd0tleShbXSk7ICAvLyBjbGVhciBzZWxlY3RlZCByb3cga2V5XG5cbiAgICBpZiAodGhpcy5wcm9wcy5wYWdpbmF0aW9uKSB7XG4gICAgICBjb25zdCB7IHNpemVQZXJQYWdlIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgY29uc3QgY3Vyckxhc3RQYWdlID0gTWF0aC5jZWlsKHRoaXMuc3RvcmUuZ2V0RGF0YU51bSgpIC8gc2l6ZVBlclBhZ2UpO1xuICAgICAgbGV0IHsgY3VyclBhZ2UgfSA9IHRoaXMuc3RhdGU7XG4gICAgICBpZiAoY3VyclBhZ2UgPiBjdXJyTGFzdFBhZ2UpIGN1cnJQYWdlID0gY3Vyckxhc3RQYWdlO1xuICAgICAgcmVzdWx0ID0gdGhpcy5zdG9yZS5wYWdlKGN1cnJQYWdlLCBzaXplUGVyUGFnZSkuZ2V0KCk7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZGF0YTogcmVzdWx0LFxuICAgICAgICBzZWxlY3RlZFJvd0tleXM6IHRoaXMuc3RvcmUuZ2V0U2VsZWN0ZWRSb3dLZXlzKCksXG4gICAgICAgIGN1cnJQYWdlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gdGhpcy5zdG9yZS5nZXQoKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBkYXRhOiByZXN1bHQsXG4gICAgICAgIHNlbGVjdGVkUm93S2V5czogdGhpcy5zdG9yZS5nZXRTZWxlY3RlZFJvd0tleXMoKVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzLm9wdGlvbnMuYWZ0ZXJEZWxldGVSb3cpIHtcbiAgICAgIHRoaXMucHJvcHMub3B0aW9ucy5hZnRlckRlbGV0ZVJvdyhkcm9wUm93S2V5cyk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlRmlsdGVyRGF0YSA9IGZpbHRlck9iaiA9PiB7XG4gICAgdGhpcy5zdG9yZS5maWx0ZXIoZmlsdGVyT2JqKTtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGlmICh0aGlzLnByb3BzLnBhZ2luYXRpb24pIHtcbiAgICAgIGNvbnN0IHsgc2l6ZVBlclBhZ2UgfSA9IHRoaXMuc3RhdGU7XG4gICAgICByZXN1bHQgPSB0aGlzLnN0b3JlLnBhZ2UoMSwgc2l6ZVBlclBhZ2UpLmdldCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSB0aGlzLnN0b3JlLmdldCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5wcm9wcy5vcHRpb25zLmFmdGVyQ29sdW1uRmlsdGVyKSB7XG4gICAgICB0aGlzLnByb3BzLm9wdGlvbnMuYWZ0ZXJDb2x1bW5GaWx0ZXIoZmlsdGVyT2JqLFxuICAgICAgICB0aGlzLnN0b3JlLmdldERhdGFJZ25vcmluZ1BhZ2luYXRpb24oKSk7XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZGF0YTogcmVzdWx0LFxuICAgICAgY3VyclBhZ2U6IDFcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZUV4cG9ydENTViA9ICgpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnN0b3JlLmdldERhdGFJZ25vcmluZ1BhZ2luYXRpb24oKTtcbiAgICBjb25zdCBrZXlzID0gW107XG4gICAgdGhpcy5wcm9wcy5jaGlsZHJlbi5tYXAoZnVuY3Rpb24oY29sdW1uKSB7XG4gICAgICBpZiAoY29sdW1uLnByb3BzLmhpZGRlbiA9PT0gZmFsc2UpIHtcbiAgICAgICAga2V5cy5wdXNoKGNvbHVtbi5wcm9wcy5kYXRhRmllbGQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGV4cG9ydENTVihyZXN1bHQsIGtleXMsIHRoaXMucHJvcHMuY3N2RmlsZU5hbWUpO1xuICB9XG5cbiAgaGFuZGxlU2VhcmNoID0gc2VhcmNoVGV4dCA9PiB7XG4gICAgdGhpcy5zdG9yZS5zZWFyY2goc2VhcmNoVGV4dCk7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAodGhpcy5wcm9wcy5wYWdpbmF0aW9uKSB7XG4gICAgICBjb25zdCB7IHNpemVQZXJQYWdlIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgcmVzdWx0ID0gdGhpcy5zdG9yZS5wYWdlKDEsIHNpemVQZXJQYWdlKS5nZXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gdGhpcy5zdG9yZS5nZXQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvcHMub3B0aW9ucy5hZnRlclNlYXJjaCkge1xuICAgICAgdGhpcy5wcm9wcy5vcHRpb25zLmFmdGVyU2VhcmNoKHNlYXJjaFRleHQsXG4gICAgICAgIHRoaXMuc3RvcmUuZ2V0RGF0YUlnbm9yaW5nUGFnaW5hdGlvbigpKTtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBkYXRhOiByZXN1bHQsXG4gICAgICBjdXJyUGFnZTogMVxuICAgIH0pO1xuICB9XG5cbiAgcmVuZGVyUGFnaW5hdGlvbigpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5wYWdpbmF0aW9uKSB7XG4gICAgICBsZXQgZGF0YVNpemU7XG4gICAgICBpZiAodGhpcy5pc1JlbW90ZURhdGFTb3VyY2UoKSkge1xuICAgICAgICBkYXRhU2l6ZSA9IHRoaXMucHJvcHMuZmV0Y2hJbmZvLmRhdGFUb3RhbFNpemU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhU2l6ZSA9IHRoaXMuc3RvcmUuZ2V0RGF0YU51bSgpO1xuICAgICAgfVxuICAgICAgY29uc3QgeyBvcHRpb25zIH0gPSB0aGlzLnByb3BzO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9J3JlYWN0LWJzLXRhYmxlLXBhZ2luYXRpb24nPlxuICAgICAgICAgIDxQYWdpbmF0aW9uTGlzdFxuICAgICAgICAgICAgcmVmPSdwYWdpbmF0aW9uJ1xuICAgICAgICAgICAgY3VyclBhZ2U9eyB0aGlzLnN0YXRlLmN1cnJQYWdlIH1cbiAgICAgICAgICAgIGNoYW5nZVBhZ2U9eyB0aGlzLmhhbmRsZVBhZ2luYXRpb25EYXRhIH1cbiAgICAgICAgICAgIHNpemVQZXJQYWdlPXsgdGhpcy5zdGF0ZS5zaXplUGVyUGFnZSB9XG4gICAgICAgICAgICBzaXplUGVyUGFnZUxpc3Q9eyBvcHRpb25zLnNpemVQZXJQYWdlTGlzdCB8fCBDb25zdC5TSVpFX1BFUl9QQUdFX0xJU1QgfVxuICAgICAgICAgICAgcGFnaW5hdGlvblNpemU9eyBvcHRpb25zLnBhZ2luYXRpb25TaXplIHx8IENvbnN0LlBBR0lOQVRJT05fU0laRSB9XG4gICAgICAgICAgICByZW1vdGU9eyB0aGlzLmlzUmVtb3RlRGF0YVNvdXJjZSgpIH1cbiAgICAgICAgICAgIGRhdGFTaXplPXsgZGF0YVNpemUgfVxuICAgICAgICAgICAgb25TaXplUGVyUGFnZUxpc3Q9eyBvcHRpb25zLm9uU2l6ZVBlclBhZ2VMaXN0IH1cbiAgICAgICAgICAgIHByZVBhZ2U9eyBvcHRpb25zLnByZVBhZ2UgfHwgQ29uc3QuUFJFX1BBR0UgfVxuICAgICAgICAgICAgbmV4dFBhZ2U9eyBvcHRpb25zLm5leHRQYWdlIHx8IENvbnN0Lk5FWFRfUEFHRSB9XG4gICAgICAgICAgICBmaXJzdFBhZ2U9eyBvcHRpb25zLmZpcnN0UGFnZSB8fCBDb25zdC5GSVJTVF9QQUdFIH1cbiAgICAgICAgICAgIGxhc3RQYWdlPXsgb3B0aW9ucy5sYXN0UGFnZSB8fCBDb25zdC5MQVNUX1BBR0UgfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmVuZGVyVG9vbEJhcigpIHtcbiAgICBjb25zdCB7IHNlbGVjdFJvdywgaW5zZXJ0Um93LCBkZWxldGVSb3csIHNlYXJjaCwgY2hpbGRyZW4gfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgZW5hYmxlU2hvd09ubHlTZWxlY3RlZCA9IHNlbGVjdFJvdyAmJiBzZWxlY3RSb3cuc2hvd09ubHlTZWxlY3RlZDtcbiAgICBpZiAoZW5hYmxlU2hvd09ubHlTZWxlY3RlZFxuICAgICAgICB8fCBpbnNlcnRSb3dcbiAgICAgICAgfHwgZGVsZXRlUm93XG4gICAgICAgIHx8IHNlYXJjaFxuICAgICAgICB8fCB0aGlzLnByb3BzLmV4cG9ydENTVikge1xuICAgICAgbGV0IGNvbHVtbnM7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgY29sdW1ucyA9IGNoaWxkcmVuLm1hcChmdW5jdGlvbihjb2x1bW4pIHtcbiAgICAgICAgICBjb25zdCB7IHByb3BzIH0gPSBjb2x1bW47XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IHByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgICAgZmllbGQ6IHByb3BzLmRhdGFGaWVsZCxcbiAgICAgICAgICAgIC8vIHdoZW4geW91IHdhbnQgc2FtZSBhdXRvIGdlbmVyYXRlIHZhbHVlIGFuZCBub3QgYWxsb3cgZWRpdCwgZXhhbXBsZSBJRCBmaWVsZFxuICAgICAgICAgICAgYXV0b1ZhbHVlOiBwcm9wcy5hdXRvVmFsdWUgfHwgZmFsc2UsXG4gICAgICAgICAgICAvLyBmb3IgY3JlYXRlIGVkaXRvciwgbm8gcGFyYW1zIGZvciBjb2x1bW4uZWRpdGFibGUoKSBpbmRpY2F0ZSB0aGF0IGVkaXRvciBmb3IgbmV3IHJvd1xuICAgICAgICAgICAgZWRpdGFibGU6IHByb3BzLmVkaXRhYmxlICYmICh0eXBlb2YgcHJvcHMuZWRpdGFibGUgPT09ICdmdW5jdGlvbicpID8gcHJvcHMuZWRpdGFibGUoKSA6IHByb3BzLmVkaXRhYmxlLFxuICAgICAgICAgICAgZm9ybWF0OiBwcm9wcy5kYXRhRm9ybWF0ID8gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLmRhdGFGb3JtYXQodmFsdWUsIG51bGwsIHByb3BzLmZvcm1hdEV4dHJhRGF0YSkucmVwbGFjZSgvPC4qPz4vZywgJycpO1xuICAgICAgICAgICAgfSA6IGZhbHNlXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2x1bW5zID0gWyB7XG4gICAgICAgICAgbmFtZTogY2hpbGRyZW4ucHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgZmllbGQ6IGNoaWxkcmVuLnByb3BzLmRhdGFGaWVsZCxcbiAgICAgICAgICBlZGl0YWJsZTogY2hpbGRyZW4ucHJvcHMuZWRpdGFibGVcbiAgICAgICAgfSBdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9J3JlYWN0LWJzLXRhYmxlLXRvb2wtYmFyJz5cbiAgICAgICAgICA8VG9vbEJhclxuICAgICAgICAgICAgY2xlYXJTZWFyY2g9eyB0aGlzLnByb3BzLm9wdGlvbnMuY2xlYXJTZWFyY2ggfVxuICAgICAgICAgICAgZW5hYmxlSW5zZXJ0PXsgaW5zZXJ0Um93IH1cbiAgICAgICAgICAgIGVuYWJsZURlbGV0ZT17IGRlbGV0ZVJvdyB9XG4gICAgICAgICAgICBlbmFibGVTZWFyY2g9eyBzZWFyY2ggfVxuICAgICAgICAgICAgZW5hYmxlRXhwb3J0Q1NWPXsgdGhpcy5wcm9wcy5leHBvcnRDU1YgfVxuICAgICAgICAgICAgZW5hYmxlU2hvd09ubHlTZWxlY3RlZD17IGVuYWJsZVNob3dPbmx5U2VsZWN0ZWQgfVxuICAgICAgICAgICAgY29sdW1ucz17IGNvbHVtbnMgfVxuICAgICAgICAgICAgc2VhcmNoUGxhY2Vob2xkZXI9eyB0aGlzLnByb3BzLnNlYXJjaFBsYWNlaG9sZGVyIH1cbiAgICAgICAgICAgIG9uQWRkUm93PXsgdGhpcy5oYW5kbGVBZGRSb3cgfVxuICAgICAgICAgICAgb25Ecm9wUm93PXsgdGhpcy5oYW5kbGVEcm9wUm93IH1cbiAgICAgICAgICAgIG9uU2VhcmNoPXsgdGhpcy5oYW5kbGVTZWFyY2ggfVxuICAgICAgICAgICAgb25FeHBvcnRDU1Y9eyB0aGlzLmhhbmRsZUV4cG9ydENTViB9XG4gICAgICAgICAgICBvblNob3dPbmx5U2VsZWN0ZWQ9eyB0aGlzLmhhbmRsZVNob3dPbmx5U2VsZWN0ZWQgfS8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyVGFibGVGaWx0ZXIoY29sdW1ucykge1xuICAgIGlmICh0aGlzLnByb3BzLmNvbHVtbkZpbHRlcikge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFRhYmxlRmlsdGVyIGNvbHVtbnM9eyBjb2x1bW5zIH1cbiAgICAgICAgICByb3dTZWxlY3RUeXBlPXsgdGhpcy5wcm9wcy5zZWxlY3RSb3cubW9kZSB9XG4gICAgICAgICAgb25GaWx0ZXI9eyB0aGlzLmhhbmRsZUZpbHRlckRhdGEgfS8+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBfc2Nyb2xsSGVhZGVyID0gKGUpID0+IHtcbiAgICB0aGlzLnJlZnMuaGVhZGVyLnJlZnMuY29udGFpbmVyLnNjcm9sbExlZnQgPSBlLmN1cnJlbnRUYXJnZXQuc2Nyb2xsTGVmdDtcbiAgfVxuXG4gIF9hZGp1c3RUYWJsZSA9ICgpID0+IHtcbiAgICB0aGlzLl9hZGp1c3RIZWFkZXJXaWR0aCgpO1xuICAgIHRoaXMuX2FkanVzdEhlaWdodCgpO1xuICB9XG5cbiAgX2FkanVzdEhlYWRlcldpZHRoID0gKCkgPT4ge1xuICAgIGNvbnN0IGhlYWRlciA9IHRoaXMucmVmcy5oZWFkZXIucmVmcy5oZWFkZXI7XG4gICAgY29uc3QgaGVhZGVyQ29udGFpbmVyID0gdGhpcy5yZWZzLmhlYWRlci5yZWZzLmNvbnRhaW5lcjtcbiAgICBjb25zdCB0Ym9keSA9IHRoaXMucmVmcy5ib2R5LnJlZnMudGJvZHk7XG4gICAgY29uc3QgZmlyc3RSb3cgPSB0Ym9keS5jaGlsZE5vZGVzWzBdO1xuICAgIGNvbnN0IGlzU2Nyb2xsID0gaGVhZGVyQ29udGFpbmVyLm9mZnNldFdpZHRoICE9PSB0Ym9keS5wYXJlbnROb2RlLm9mZnNldFdpZHRoO1xuICAgIGNvbnN0IHNjcm9sbEJhcldpZHRoID0gaXNTY3JvbGwgPyBVdGlsLmdldFNjcm9sbEJhcldpZHRoKCkgOiAwO1xuICAgIGlmIChmaXJzdFJvdyAmJiB0aGlzLnN0b3JlLmdldERhdGFOdW0oKSkge1xuICAgICAgY29uc3QgY2VsbHMgPSBmaXJzdFJvdy5jaGlsZE5vZGVzO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjZWxsID0gY2VsbHNbaV07XG4gICAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGNlbGwpO1xuICAgICAgICBsZXQgd2lkdGggPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUud2lkdGgucmVwbGFjZSgncHgnLCAnJykpO1xuICAgICAgICBpZiAodGhpcy5pc0lFKSB7XG4gICAgICAgICAgY29uc3QgcGFkZGluZ0xlZnRXaWR0aCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5wYWRkaW5nTGVmdC5yZXBsYWNlKCdweCcsICcnKSk7XG4gICAgICAgICAgY29uc3QgcGFkZGluZ1JpZ2h0V2lkdGggPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUucGFkZGluZ1JpZ2h0LnJlcGxhY2UoJ3B4JywgJycpKTtcbiAgICAgICAgICBjb25zdCBib3JkZXJSaWdodFdpZHRoID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmJvcmRlclJpZ2h0V2lkdGgucmVwbGFjZSgncHgnLCAnJykpO1xuICAgICAgICAgIGNvbnN0IGJvcmRlckxlZnRXaWR0aCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5ib3JkZXJMZWZ0V2lkdGgucmVwbGFjZSgncHgnLCAnJykpO1xuICAgICAgICAgIHdpZHRoID0gd2lkdGggKyBwYWRkaW5nTGVmdFdpZHRoICsgcGFkZGluZ1JpZ2h0V2lkdGggKyBib3JkZXJSaWdodFdpZHRoICsgYm9yZGVyTGVmdFdpZHRoO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhc3RQYWRkaW5nID0gKGNlbGxzLmxlbmd0aCAtIDEgPT09IGkgPyBzY3JvbGxCYXJXaWR0aCA6IDApO1xuICAgICAgICBpZiAod2lkdGggPD0gMCkge1xuICAgICAgICAgIHdpZHRoID0gMTIwO1xuICAgICAgICAgIGNlbGwud2lkdGggPSB3aWR0aCArIGxhc3RQYWRkaW5nICsgJ3B4JztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSB3aWR0aCArIGxhc3RQYWRkaW5nICsgJ3B4JztcbiAgICAgICAgaGVhZGVyLmNoaWxkTm9kZXNbaV0uc3R5bGUud2lkdGggPSByZXN1bHQ7XG4gICAgICAgIGhlYWRlci5jaGlsZE5vZGVzW2ldLnN0eWxlLm1pbldpZHRoID0gcmVzdWx0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9hZGp1c3RIZWlnaHQgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMuaGVpZ2h0LmluZGV4T2YoJyUnKSA9PT0gLTEpIHtcbiAgICAgIHRoaXMucmVmcy5ib2R5LnJlZnMuY29udGFpbmVyLnN0eWxlLmhlaWdodCA9XG4gICAgICAgIHBhcnNlRmxvYXQodGhpcy5wcm9wcy5oZWlnaHQsIDEwKSAtIHRoaXMucmVmcy5oZWFkZXIucmVmcy5jb250YWluZXIub2Zmc2V0SGVpZ2h0ICsgJ3B4JztcbiAgICB9XG4gIH1cblxuICBfaGFuZGxlQWZ0ZXJBZGRpbmdSb3cobmV3T2JqKSB7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAodGhpcy5wcm9wcy5wYWdpbmF0aW9uKSB7XG4gICAgICAvLyBpZiBwYWdpbmF0aW9uIGlzIGVuYWJsZWQgYW5kIGluc2VydCByb3cgYmUgdHJpZ2dlciwgY2hhbmdlIHRvIGxhc3QgcGFnZVxuICAgICAgY29uc3QgeyBzaXplUGVyUGFnZSB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgIGNvbnN0IGN1cnJMYXN0UGFnZSA9IE1hdGguY2VpbCh0aGlzLnN0b3JlLmdldERhdGFOdW0oKSAvIHNpemVQZXJQYWdlKTtcbiAgICAgIHJlc3VsdCA9IHRoaXMuc3RvcmUucGFnZShjdXJyTGFzdFBhZ2UsIHNpemVQZXJQYWdlKS5nZXQoKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBkYXRhOiByZXN1bHQsXG4gICAgICAgIGN1cnJQYWdlOiBjdXJyTGFzdFBhZ2VcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSB0aGlzLnN0b3JlLmdldCgpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGRhdGE6IHJlc3VsdFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMub3B0aW9ucy5hZnRlckluc2VydFJvdykge1xuICAgICAgdGhpcy5wcm9wcy5vcHRpb25zLmFmdGVySW5zZXJ0Um93KG5ld09iaik7XG4gICAgfVxuICB9XG59XG5cbkJvb3RzdHJhcFRhYmxlLnByb3BUeXBlcyA9IHtcbiAga2V5RmllbGQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGhlaWdodDogUHJvcFR5cGVzLnN0cmluZyxcbiAgbWF4SGVpZ2h0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBkYXRhOiBQcm9wVHlwZXMub25lT2ZUeXBlKFsgUHJvcFR5cGVzLmFycmF5LCBQcm9wVHlwZXMub2JqZWN0IF0pLFxuICByZW1vdGU6IFByb3BUeXBlcy5ib29sLCAvLyByZW1vdGUgZGF0YSwgZGVmYXVsdCBpcyBmYWxzZVxuICBzdHJpcGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgYm9yZGVyZWQ6IFByb3BUeXBlcy5ib29sLFxuICBob3ZlcjogUHJvcFR5cGVzLmJvb2wsXG4gIGNvbmRlbnNlZDogUHJvcFR5cGVzLmJvb2wsXG4gIHBhZ2luYXRpb246IFByb3BUeXBlcy5ib29sLFxuICBzZWFyY2hQbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2VsZWN0Um93OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIG1vZGU6IFByb3BUeXBlcy5vbmVPZihbXG4gICAgICBDb25zdC5ST1dfU0VMRUNUX05PTkUsXG4gICAgICBDb25zdC5ST1dfU0VMRUNUX1NJTkdMRSxcbiAgICAgIENvbnN0LlJPV19TRUxFQ1RfTVVMVElcbiAgICBdKSxcbiAgICBiZ0NvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNlbGVjdGVkOiBQcm9wVHlwZXMuYXJyYXksXG4gICAgb25TZWxlY3Q6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uU2VsZWN0QWxsOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBjbGlja1RvU2VsZWN0OiBQcm9wVHlwZXMuYm9vbCxcbiAgICBoaWRlU2VsZWN0Q29sdW1uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBjbGlja1RvU2VsZWN0QW5kRWRpdENlbGw6IFByb3BUeXBlcy5ib29sLFxuICAgIHNob3dPbmx5U2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sXG4gIH0pLFxuICBjZWxsRWRpdDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBtb2RlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGJsdXJUb1NhdmU6IFByb3BUeXBlcy5ib29sLFxuICAgIGJlZm9yZVNhdmVDZWxsOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBhZnRlclNhdmVDZWxsOiBQcm9wVHlwZXMuZnVuY1xuICB9KSxcbiAgaW5zZXJ0Um93OiBQcm9wVHlwZXMuYm9vbCxcbiAgZGVsZXRlUm93OiBQcm9wVHlwZXMuYm9vbCxcbiAgc2VhcmNoOiBQcm9wVHlwZXMuYm9vbCxcbiAgY29sdW1uRmlsdGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgdHJDbGFzc05hbWU6IFByb3BUeXBlcy5hbnksXG4gIG9wdGlvbnM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xlYXJTZWFyY2g6IFByb3BUeXBlcy5ib29sLFxuICAgIHNvcnROYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNvcnRPcmRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzb3J0SW5kaWNhdG9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBhZnRlclRhYmxlQ29tcGxldGU6IFByb3BUeXBlcy5mdW5jLFxuICAgIGFmdGVyRGVsZXRlUm93OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBhZnRlckluc2VydFJvdzogUHJvcFR5cGVzLmZ1bmMsXG4gICAgYWZ0ZXJTZWFyY2g6IFByb3BUeXBlcy5mdW5jLFxuICAgIGFmdGVyQ29sdW1uRmlsdGVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvblJvd0NsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBwYWdlOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIHNpemVQZXJQYWdlTGlzdDogUHJvcFR5cGVzLmFycmF5LFxuICAgIHNpemVQZXJQYWdlOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIHBhZ2luYXRpb25TaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIG9uU29ydENoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25QYWdlQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvblNpemVQZXJQYWdlTGlzdDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgbm9EYXRhVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBoYW5kbGVDb25maXJtRGVsZXRlUm93OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBwcmVQYWdlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG5leHRQYWdlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGZpcnN0UGFnZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBsYXN0UGFnZTogUHJvcFR5cGVzLnN0cmluZ1xuICB9KSxcbiAgZmV0Y2hJbmZvOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGRhdGFUb3RhbFNpemU6IFByb3BUeXBlcy5udW1iZXJcbiAgfSksXG4gIGV4cG9ydENTVjogUHJvcFR5cGVzLmJvb2wsXG4gIGNzdkZpbGVOYW1lOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuQm9vdHN0cmFwVGFibGUuZGVmYXVsdFByb3BzID0ge1xuICBoZWlnaHQ6ICcxMDAlJyxcbiAgbWF4SGVpZ2h0OiB1bmRlZmluZWQsXG4gIHN0cmlwZWQ6IGZhbHNlLFxuICBib3JkZXJlZDogdHJ1ZSxcbiAgaG92ZXI6IGZhbHNlLFxuICBjb25kZW5zZWQ6IGZhbHNlLFxuICBwYWdpbmF0aW9uOiBmYWxzZSxcbiAgc2VhcmNoUGxhY2Vob2xkZXI6IHVuZGVmaW5lZCxcbiAgc2VsZWN0Um93OiB7XG4gICAgbW9kZTogQ29uc3QuUk9XX1NFTEVDVF9OT05FLFxuICAgIGJnQ29sb3I6IENvbnN0LlJPV19TRUxFQ1RfQkdfQ09MT1IsXG4gICAgc2VsZWN0ZWQ6IFtdLFxuICAgIG9uU2VsZWN0OiB1bmRlZmluZWQsXG4gICAgb25TZWxlY3RBbGw6IHVuZGVmaW5lZCxcbiAgICBjbGlja1RvU2VsZWN0OiBmYWxzZSxcbiAgICBoaWRlU2VsZWN0Q29sdW1uOiBmYWxzZSxcbiAgICBjbGlja1RvU2VsZWN0QW5kRWRpdENlbGw6IGZhbHNlLFxuICAgIHNob3dPbmx5U2VsZWN0ZWQ6IGZhbHNlXG4gIH0sXG4gIGNlbGxFZGl0OiB7XG4gICAgbW9kZTogQ29uc3QuQ0VMTF9FRElUX05PTkUsXG4gICAgYmx1clRvU2F2ZTogZmFsc2UsXG4gICAgYmVmb3JlU2F2ZUNlbGw6IHVuZGVmaW5lZCxcbiAgICBhZnRlclNhdmVDZWxsOiB1bmRlZmluZWRcbiAgfSxcbiAgaW5zZXJ0Um93OiBmYWxzZSxcbiAgZGVsZXRlUm93OiBmYWxzZSxcbiAgc2VhcmNoOiBmYWxzZSxcbiAgbXVsdGlDb2x1bW5TZWFyY2g6IGZhbHNlLFxuICBjb2x1bW5GaWx0ZXI6IGZhbHNlLFxuICB0ckNsYXNzTmFtZTogJycsXG4gIG9wdGlvbnM6IHtcbiAgICBjbGVhclNlYXJjaDogZmFsc2UsXG4gICAgc29ydE5hbWU6IHVuZGVmaW5lZCxcbiAgICBzb3J0T3JkZXI6IHVuZGVmaW5lZCxcbiAgICBzb3J0SW5kaWNhdG9yOiB0cnVlLFxuICAgIGFmdGVyVGFibGVDb21wbGV0ZTogdW5kZWZpbmVkLFxuICAgIGFmdGVyRGVsZXRlUm93OiB1bmRlZmluZWQsXG4gICAgYWZ0ZXJJbnNlcnRSb3c6IHVuZGVmaW5lZCxcbiAgICBhZnRlclNlYXJjaDogdW5kZWZpbmVkLFxuICAgIGFmdGVyQ29sdW1uRmlsdGVyOiB1bmRlZmluZWQsXG4gICAgb25Sb3dDbGljazogdW5kZWZpbmVkLFxuICAgIG9uTW91c2VMZWF2ZTogdW5kZWZpbmVkLFxuICAgIG9uTW91c2VFbnRlcjogdW5kZWZpbmVkLFxuICAgIG9uUm93TW91c2VPdXQ6IHVuZGVmaW5lZCxcbiAgICBvblJvd01vdXNlT3ZlcjogdW5kZWZpbmVkLFxuICAgIHBhZ2U6IHVuZGVmaW5lZCxcbiAgICBzaXplUGVyUGFnZUxpc3Q6IENvbnN0LlNJWkVfUEVSX1BBR0VfTElTVCxcbiAgICBzaXplUGVyUGFnZTogdW5kZWZpbmVkLFxuICAgIHBhZ2luYXRpb25TaXplOiBDb25zdC5QQUdJTkFUSU9OX1NJWkUsXG4gICAgb25TaXplUGVyUGFnZUxpc3Q6IHVuZGVmaW5lZCxcbiAgICBub0RhdGFUZXh0OiB1bmRlZmluZWQsXG4gICAgaGFuZGxlQ29uZmlybURlbGV0ZVJvdzogdW5kZWZpbmVkLFxuICAgIHByZVBhZ2U6IENvbnN0LlBSRV9QQUdFLFxuICAgIG5leHRQYWdlOiBDb25zdC5ORVhUX1BBR0UsXG4gICAgZmlyc3RQYWdlOiBDb25zdC5GSVJTVF9QQUdFLFxuICAgIGxhc3RQYWdlOiBDb25zdC5MQVNUX1BBR0VcbiAgfSxcbiAgZmV0Y2hJbmZvOiB7XG4gICAgZGF0YVRvdGFsU2l6ZTogMFxuICB9LFxuICBleHBvcnRDU1Y6IGZhbHNlLFxuICBjc3ZGaWxlTmFtZTogdW5kZWZpbmVkXG59O1xuXG5leHBvcnQgZGVmYXVsdCBCb290c3RyYXBUYWJsZTtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL0Jvb3RzdHJhcFRhYmxlLmpzXG4gKiovIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzJfXztcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIGV4dGVybmFsIHtcInJvb3RcIjpcIlJlYWN0XCIsXCJjb21tb25qczJcIjpcInJlYWN0XCIsXCJjb21tb25qc1wiOlwicmVhY3RcIixcImFtZFwiOlwicmVhY3RcIn1cbiAqKiBtb2R1bGUgaWQgPSAyXG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCJleHBvcnQgZGVmYXVsdCB7XG4gIFNPUlRfREVTQzogJ2Rlc2MnLFxuICBTT1JUX0FTQzogJ2FzYycsXG4gIFNJWkVfUEVSX1BBR0U6IDEwLFxuICBORVhUX1BBR0U6ICc+JyxcbiAgTEFTVF9QQUdFOiAnPj4nLFxuICBQUkVfUEFHRTogJzwnLFxuICBGSVJTVF9QQUdFOiAnPDwnLFxuICBST1dfU0VMRUNUX0JHX0NPTE9SOiAnJyxcbiAgUk9XX1NFTEVDVF9OT05FOiAnbm9uZScsXG4gIFJPV19TRUxFQ1RfU0lOR0xFOiAncmFkaW8nLFxuICBST1dfU0VMRUNUX01VTFRJOiAnY2hlY2tib3gnLFxuICBDRUxMX0VESVRfTk9ORTogJ25vbmUnLFxuICBDRUxMX0VESVRfQ0xJQ0s6ICdjbGljaycsXG4gIENFTExfRURJVF9EQkNMSUNLOiAnZGJjbGljaycsXG4gIFNJWkVfUEVSX1BBR0VfTElTVDogWyAxMCwgMjUsIDMwLCA1MCBdLFxuICBQQUdJTkFUSU9OX1NJWkU6IDUsXG4gIE5PX0RBVEFfVEVYVDogJ1RoZXJlIGlzIG5vIGRhdGEgdG8gZGlzcGxheScsXG4gIFNIT1dfT05MWV9TRUxFQ1Q6ICdTaG93IFNlbGVjdGVkIE9ubHknLFxuICBTSE9XX0FMTDogJ1Nob3cgQWxsJyxcbiAgRklMVEVSX0RFTEFZOiA1MDAsXG4gIEZJTFRFUl9UWVBFOiB7XG4gICAgVEVYVDogJ1RleHRGaWx0ZXInLFxuICAgIFJFR0VYOiAnUmVnZXhGaWx0ZXInLFxuICAgIFNFTEVDVDogJ1NlbGVjdEZpbHRlcicsXG4gICAgTlVNQkVSOiAnTnVtYmVyRmlsdGVyJyxcbiAgICBEQVRFOiAnRGF0ZUZpbHRlcicsXG4gICAgQ1VTVE9NOiAnQ3VzdG9tRmlsdGVyJ1xuICB9XG59O1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvQ29uc3QuanNcbiAqKi8iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBQcm9wVHlwZXMgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBDb25zdCBmcm9tICcuL0NvbnN0JztcbmltcG9ydCBjbGFzc1NldCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBTZWxlY3RSb3dIZWFkZXJDb2x1bW4gZnJvbSAnLi9TZWxlY3RSb3dIZWFkZXJDb2x1bW4nO1xuXG5jbGFzcyBDaGVja2JveCBleHRlbmRzIENvbXBvbmVudCB7XG4gIGNvbXBvbmVudERpZE1vdW50KCkgeyB0aGlzLnVwZGF0ZSh0aGlzLnByb3BzLmNoZWNrZWQpOyB9XG4gIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMocHJvcHMpIHsgdGhpcy51cGRhdGUocHJvcHMuY2hlY2tlZCk7IH1cbiAgdXBkYXRlKGNoZWNrZWQpIHtcbiAgICBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKS5pbmRldGVybWluYXRlID0gY2hlY2tlZCA9PT0gJ2luZGV0ZXJtaW5hdGUnO1xuICB9XG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGlucHV0IGNsYXNzTmFtZT0ncmVhY3QtYnMtc2VsZWN0LWFsbCdcbiAgICAgICAgdHlwZT0nY2hlY2tib3gnXG4gICAgICAgIGNoZWNrZWQ9eyB0aGlzLnByb3BzLmNoZWNrZWQgfVxuICAgICAgICBvbkNoYW5nZT17IHRoaXMucHJvcHMub25DaGFuZ2UgfSAvPlxuICAgICk7XG4gIH1cbn1cblxuY2xhc3MgVGFibGVIZWFkZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBjb250YWluZXJDbGFzc2VzID0gY2xhc3NTZXQoJ3JlYWN0LWJzLWNvbnRhaW5lci1oZWFkZXInLCAndGFibGUtaGVhZGVyLXdyYXBwZXInKTtcbiAgICBjb25zdCB0YWJsZUNsYXNzZXMgPSBjbGFzc1NldCgndGFibGUnLCAndGFibGUtaG92ZXInLCB7XG4gICAgICAndGFibGUtYm9yZGVyZWQnOiB0aGlzLnByb3BzLmJvcmRlcmVkLFxuICAgICAgJ3RhYmxlLWNvbmRlbnNlZCc6IHRoaXMucHJvcHMuY29uZGVuc2VkXG4gICAgfSk7XG4gICAgbGV0IHNlbGVjdFJvd0hlYWRlckNvbCA9IG51bGw7XG4gICAgaWYgKCF0aGlzLnByb3BzLmhpZGVTZWxlY3RDb2x1bW4pIHNlbGVjdFJvd0hlYWRlckNvbCA9IHRoaXMucmVuZGVyU2VsZWN0Um93SGVhZGVyKCk7XG4gICAgdGhpcy5fYXR0YWNoQ2xlYXJTb3J0Q2FyZXRGdW5jKCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiByZWY9J2NvbnRhaW5lcicgY2xhc3NOYW1lPXsgY29udGFpbmVyQ2xhc3NlcyB9PlxuICAgICAgICA8dGFibGUgY2xhc3NOYW1lPXsgdGFibGVDbGFzc2VzIH0+XG4gICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgPHRyIHJlZj0naGVhZGVyJz5cbiAgICAgICAgICAgICAgeyBzZWxlY3RSb3dIZWFkZXJDb2wgfVxuICAgICAgICAgICAgICB7IHRoaXMucHJvcHMuY2hpbGRyZW4gfVxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlclNlbGVjdFJvd0hlYWRlcigpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5yb3dTZWxlY3RUeXBlID09PSBDb25zdC5ST1dfU0VMRUNUX1NJTkdMRSkge1xuICAgICAgcmV0dXJuICg8U2VsZWN0Um93SGVhZGVyQ29sdW1uIC8+KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMucm93U2VsZWN0VHlwZSA9PT0gQ29uc3QuUk9XX1NFTEVDVF9NVUxUSSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFNlbGVjdFJvd0hlYWRlckNvbHVtbj5cbiAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgIG9uQ2hhbmdlPXsgdGhpcy5wcm9wcy5vblNlbGVjdEFsbFJvdyB9XG4gICAgICAgICAgICBjaGVja2VkPXsgdGhpcy5wcm9wcy5pc1NlbGVjdEFsbCB9Lz5cbiAgICAgICAgPC9TZWxlY3RSb3dIZWFkZXJDb2x1bW4+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBfYXR0YWNoQ2xlYXJTb3J0Q2FyZXRGdW5jKCkge1xuICAgIGNvbnN0IHsgc29ydEluZGljYXRvciwgY2hpbGRyZW4sIHNvcnROYW1lLCBzb3J0T3JkZXIsIG9uU29ydCB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBjaGlsZHJlbltpXS5wcm9wcy5kYXRhRmllbGQ7XG4gICAgICAgIGNvbnN0IHNvcnQgPSBmaWVsZCA9PT0gc29ydE5hbWUgPyBzb3J0T3JkZXIgOiB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMucHJvcHMuY2hpbGRyZW5baV0gPVxuICAgICAgICAgIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbltpXSxcbiAgICAgICAgICAgIHsga2V5OiBpLCBvblNvcnQsIHNvcnQsIHNvcnRJbmRpY2F0b3IgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gY2hpbGRyZW4ucHJvcHMuZGF0YUZpZWxkO1xuICAgICAgY29uc3Qgc29ydCA9IGZpZWxkID09PSBzb3J0TmFtZSA/IHNvcnRPcmRlciA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMucHJvcHMuY2hpbGRyZW4gPVxuICAgICAgICBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sXG4gICAgICAgICAgeyBrZXk6IDAsIG9uU29ydCwgc29ydCwgc29ydEluZGljYXRvciB9KTtcbiAgICB9XG4gIH1cbn1cblRhYmxlSGVhZGVyLnByb3BUeXBlcyA9IHtcbiAgcm93U2VsZWN0VHlwZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25Tb3J0OiBQcm9wVHlwZXMuZnVuYyxcbiAgb25TZWxlY3RBbGxSb3c6IFByb3BUeXBlcy5mdW5jLFxuICBzb3J0TmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgc29ydE9yZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBoaWRlU2VsZWN0Q29sdW1uOiBQcm9wVHlwZXMuYm9vbCxcbiAgYm9yZGVyZWQ6IFByb3BUeXBlcy5ib29sLFxuICBjb25kZW5zZWQ6IFByb3BUeXBlcy5ib29sLFxuICBpc0ZpbHRlcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNTZWxlY3RBbGw6IFByb3BUeXBlcy5vbmVPZihbIHRydWUsICdpbmRldGVybWluYXRlJywgZmFsc2UgXSksXG4gIHNvcnRJbmRpY2F0b3I6IFByb3BUeXBlcy5ib29sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBUYWJsZUhlYWRlcjtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL1RhYmxlSGVhZGVyLmpzXG4gKiovIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzVfXztcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIGV4dGVybmFsIHtcInJvb3RcIjpcIlJlYWN0RE9NXCIsXCJjb21tb25qczJcIjpcInJlYWN0LWRvbVwiLFwiY29tbW9uanNcIjpcInJlYWN0LWRvbVwiLFwiYW1kXCI6XCJyZWFjdC1kb21cIn1cbiAqKiBtb2R1bGUgaWQgPSA1XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCIvKiFcbiAgQ29weXJpZ2h0IChjKSAyMDE2IEplZCBXYXRzb24uXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXG4gIGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXNcbiovXG4vKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAoKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cblx0ZnVuY3Rpb24gY2xhc3NOYW1lcyAoKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKCFhcmcpIGNvbnRpbnVlO1xuXG5cdFx0XHR2YXIgYXJnVHlwZSA9IHR5cGVvZiBhcmc7XG5cblx0XHRcdGlmIChhcmdUeXBlID09PSAnc3RyaW5nJyB8fCBhcmdUeXBlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRjbGFzc2VzLnB1c2goYXJnKTtcblx0XHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG5cdFx0XHRcdGNsYXNzZXMucHVzaChjbGFzc05hbWVzLmFwcGx5KG51bGwsIGFyZykpO1xuXHRcdFx0fSBlbHNlIGlmIChhcmdUeXBlID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRmb3IgKHZhciBrZXkgaW4gYXJnKSB7XG5cdFx0XHRcdFx0aWYgKGhhc093bi5jYWxsKGFyZywga2V5KSAmJiBhcmdba2V5XSkge1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGtleSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWVzO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyByZWdpc3RlciBhcyAnY2xhc3NuYW1lcycsIGNvbnNpc3RlbnQgd2l0aCBucG0gcGFja2FnZSBuYW1lXG5cdFx0ZGVmaW5lKCdjbGFzc25hbWVzJywgW10sIGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5jbGFzc05hbWVzID0gY2xhc3NOYW1lcztcblx0fVxufSgpKTtcblxuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L2NsYXNzbmFtZXMvaW5kZXguanNcbiAqKiBtb2R1bGUgaWQgPSA2XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBQcm9wVHlwZXMgfSBmcm9tICdyZWFjdCc7XG5cbmNsYXNzIFNlbGVjdFJvd0hlYWRlckNvbHVtbiBleHRlbmRzIENvbXBvbmVudCB7XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8dGggc3R5bGU9eyB7IHRleHRBbGlnbjogJ2NlbnRlcicgfSB9PlxuICAgICAgICB7IHRoaXMucHJvcHMuY2hpbGRyZW4gfVxuICAgICAgPC90aD5cbiAgICApO1xuICB9XG59XG5TZWxlY3RSb3dIZWFkZXJDb2x1bW4ucHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGVcbn07XG5leHBvcnQgZGVmYXVsdCBTZWxlY3RSb3dIZWFkZXJDb2x1bW47XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9TZWxlY3RSb3dIZWFkZXJDb2x1bW4uanNcbiAqKi8iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBQcm9wVHlwZXMgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi9Db25zdCc7XG5pbXBvcnQgVGFibGVSb3cgZnJvbSAnLi9UYWJsZVJvdyc7XG5pbXBvcnQgVGFibGVDb2x1bW4gZnJvbSAnLi9UYWJsZUNvbHVtbic7XG5pbXBvcnQgVGFibGVFZGl0Q29sdW1uIGZyb20gJy4vVGFibGVFZGl0Q29sdW1uJztcbmltcG9ydCBjbGFzc1NldCBmcm9tICdjbGFzc25hbWVzJztcblxuY29uc3QgaXNGdW4gPSBmdW5jdGlvbihvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiAodHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJyk7XG59O1xuXG5jbGFzcyBUYWJsZUJvZHkgZXh0ZW5kcyBDb21wb25lbnQge1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBjdXJyRWRpdENlbGw6IG51bGxcbiAgICB9O1xuICAgIHRoaXMuZWRpdGluZyA9IGZhbHNlO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHRhYmxlQ2xhc3NlcyA9IGNsYXNzU2V0KCd0YWJsZScsIHtcbiAgICAgICd0YWJsZS1zdHJpcGVkJzogdGhpcy5wcm9wcy5zdHJpcGVkLFxuICAgICAgJ3RhYmxlLWJvcmRlcmVkJzogdGhpcy5wcm9wcy5ib3JkZXJlZCxcbiAgICAgICd0YWJsZS1ob3Zlcic6IHRoaXMucHJvcHMuaG92ZXIsXG4gICAgICAndGFibGUtY29uZGVuc2VkJzogdGhpcy5wcm9wcy5jb25kZW5zZWRcbiAgICB9KTtcblxuICAgIGNvbnN0IGlzU2VsZWN0Um93RGVmaW5lZCA9IHRoaXMuX2lzU2VsZWN0Um93RGVmaW5lZCgpO1xuICAgIGNvbnN0IHRhYmxlSGVhZGVyID0gdGhpcy5yZW5kZXJUYWJsZUhlYWRlcihpc1NlbGVjdFJvd0RlZmluZWQpO1xuXG4gICAgY29uc3QgdGFibGVSb3dzID0gdGhpcy5wcm9wcy5kYXRhLm1hcChmdW5jdGlvbihkYXRhLCByKSB7XG4gICAgICBjb25zdCB0YWJsZUNvbHVtbnMgPSB0aGlzLnByb3BzLmNvbHVtbnMubWFwKGZ1bmN0aW9uKGNvbHVtbiwgaSkge1xuICAgICAgICBjb25zdCBmaWVsZFZhbHVlID0gZGF0YVtjb2x1bW4ubmFtZV07XG4gICAgICAgIGlmICh0aGlzLmVkaXRpbmcgJiZcbiAgICAgICAgICBjb2x1bW4ubmFtZSAhPT0gdGhpcy5wcm9wcy5rZXlGaWVsZCAmJiAvLyBLZXkgZmllbGQgY2FuJ3QgYmUgZWRpdFxuICAgICAgICAgIGNvbHVtbi5lZGl0YWJsZSAmJiAvLyBjb2x1bW4gaXMgZWRpdGFibGU/IGRlZmF1bHQgaXMgdHJ1ZSwgdXNlciBjYW4gc2V0IGl0IGZhbHNlXG4gICAgICAgICAgdGhpcy5zdGF0ZS5jdXJyRWRpdENlbGwgIT09IG51bGwgJiZcbiAgICAgICAgICB0aGlzLnN0YXRlLmN1cnJFZGl0Q2VsbC5yaWQgPT09IHIgJiZcbiAgICAgICAgICB0aGlzLnN0YXRlLmN1cnJFZGl0Q2VsbC5jaWQgPT09IGkpIHtcbiAgICAgICAgICBsZXQgZWRpdGFibGUgPSBjb2x1bW4uZWRpdGFibGU7XG4gICAgICAgICAgY29uc3QgZm9ybWF0ID0gY29sdW1uLmZvcm1hdCA/IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gY29sdW1uLmZvcm1hdCh2YWx1ZSwgZGF0YSwgY29sdW1uLmZvcm1hdEV4dHJhRGF0YSkucmVwbGFjZSgvPC4qPz4vZywgJycpO1xuICAgICAgICAgIH0gOiBmYWxzZTtcblxuICAgICAgICAgIGlmIChpc0Z1bihjb2x1bW4uZWRpdGFibGUpKSB7XG4gICAgICAgICAgICBlZGl0YWJsZSA9IGNvbHVtbi5lZGl0YWJsZShmaWVsZFZhbHVlLCBkYXRhLCByLCBpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8VGFibGVFZGl0Q29sdW1uXG4gICAgICAgICAgICAgICAgY29tcGxldGVFZGl0PXsgdGhpcy5oYW5kbGVDb21wbGV0ZUVkaXRDZWxsIH1cbiAgICAgICAgICAgICAgICAvLyBhZGQgYnkgYmx1ZXNwcmluZyBmb3IgY29sdW1uIGVkaXRvciBjdXN0b21pemVcbiAgICAgICAgICAgICAgICBlZGl0YWJsZT17IGVkaXRhYmxlIH1cbiAgICAgICAgICAgICAgICBmb3JtYXQ9eyBjb2x1bW4uZm9ybWF0ID8gZm9ybWF0IDogZmFsc2UgfVxuICAgICAgICAgICAgICAgIGtleT17IGkgfVxuICAgICAgICAgICAgICAgIGJsdXJUb1NhdmU9eyB0aGlzLnByb3BzLmNlbGxFZGl0LmJsdXJUb1NhdmUgfVxuICAgICAgICAgICAgICAgIHJvd0luZGV4PXsgciB9XG4gICAgICAgICAgICAgICAgY29sSW5kZXg9eyBpIH0+XG4gICAgICAgICAgICAgICAgeyBmaWVsZFZhbHVlIH1cbiAgICAgICAgICAgICAgPC9UYWJsZUVkaXRDb2x1bW4+XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGFkZCBieSBibHVlc3ByaW5nIGZvciBjbGFzc05hbWUgY3VzdG9taXplXG4gICAgICAgICAgbGV0IGNvbHVtbkNoaWxkID0gZmllbGRWYWx1ZTtcbiAgICAgICAgICBsZXQgdGRDbGFzc05hbWUgPSBjb2x1bW4uY2xhc3NOYW1lO1xuICAgICAgICAgIGlmIChpc0Z1bihjb2x1bW4uY2xhc3NOYW1lKSkge1xuICAgICAgICAgICAgdGRDbGFzc05hbWUgPSBjb2x1bW4uY2xhc3NOYW1lKGZpZWxkVmFsdWUsIGRhdGEsIHIsIGkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgY29sdW1uLmZvcm1hdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlID0gY29sdW1uLmZvcm1hdChmaWVsZFZhbHVlLCBkYXRhLCBjb2x1bW4uZm9ybWF0RXh0cmFEYXRhKTtcbiAgICAgICAgICAgIGlmICghUmVhY3QuaXNWYWxpZEVsZW1lbnQoZm9ybWF0dGVkVmFsdWUpKSB7XG4gICAgICAgICAgICAgIGNvbHVtbkNoaWxkID0gKFxuICAgICAgICAgICAgICAgIDxkaXYgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9eyB7IF9faHRtbDogZm9ybWF0dGVkVmFsdWUgfSB9PjwvZGl2PlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29sdW1uQ2hpbGQgPSBmb3JtYXR0ZWRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxUYWJsZUNvbHVtbiBrZXk9eyBpIH1cbiAgICAgICAgICAgICAgZGF0YUFsaWduPXsgY29sdW1uLmFsaWduIH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXsgdGRDbGFzc05hbWUgfVxuICAgICAgICAgICAgICBjZWxsRWRpdD17IHRoaXMucHJvcHMuY2VsbEVkaXQgfVxuICAgICAgICAgICAgICBoaWRkZW49eyBjb2x1bW4uaGlkZGVuIH1cbiAgICAgICAgICAgICAgb25FZGl0PXsgdGhpcy5oYW5kbGVFZGl0Q2VsbCB9XG4gICAgICAgICAgICAgIHdpZHRoPXsgY29sdW1uLndpZHRoIH0+XG4gICAgICAgICAgICAgIHsgY29sdW1uQ2hpbGQgfVxuICAgICAgICAgICAgPC9UYWJsZUNvbHVtbj5cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9LCB0aGlzKTtcblxuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnByb3BzLnNlbGVjdGVkUm93S2V5cy5pbmRleE9mKGRhdGFbdGhpcy5wcm9wcy5rZXlGaWVsZF0pICE9PSAtMTtcbiAgICAgIGNvbnN0IHNlbGVjdFJvd0NvbHVtbiA9IGlzU2VsZWN0Um93RGVmaW5lZCAmJiAhdGhpcy5wcm9wcy5zZWxlY3RSb3cuaGlkZVNlbGVjdENvbHVtbiA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclNlbGVjdFJvd0NvbHVtbihzZWxlY3RlZCkgOiBudWxsO1xuICAgICAgLy8gYWRkIGJ5IGJsdWVzcHJpbmcgZm9yIGNsYXNzTmFtZSBjdXN0b21pemVcbiAgICAgIGxldCB0ckNsYXNzTmFtZSA9IHRoaXMucHJvcHMudHJDbGFzc05hbWU7XG4gICAgICBpZiAoaXNGdW4odGhpcy5wcm9wcy50ckNsYXNzTmFtZSkpIHtcbiAgICAgICAgdHJDbGFzc05hbWUgPSB0aGlzLnByb3BzLnRyQ2xhc3NOYW1lKGRhdGEsIHIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFRhYmxlUm93IGlzU2VsZWN0ZWQ9eyBzZWxlY3RlZCB9IGtleT17IHIgfSBjbGFzc05hbWU9eyB0ckNsYXNzTmFtZSB9XG4gICAgICAgICAgc2VsZWN0Um93PXsgaXNTZWxlY3RSb3dEZWZpbmVkID8gdGhpcy5wcm9wcy5zZWxlY3RSb3cgOiB1bmRlZmluZWQgfVxuICAgICAgICAgIGVuYWJsZUNlbGxFZGl0PXsgdGhpcy5wcm9wcy5jZWxsRWRpdC5tb2RlICE9PSBDb25zdC5DRUxMX0VESVRfTk9ORSB9XG4gICAgICAgICAgb25Sb3dDbGljaz17IHRoaXMuaGFuZGxlUm93Q2xpY2sgfVxuICAgICAgICAgIG9uUm93TW91c2VPdmVyPXsgdGhpcy5oYW5kbGVSb3dNb3VzZU92ZXIgfVxuICAgICAgICAgIG9uUm93TW91c2VPdXQ9eyB0aGlzLmhhbmRsZVJvd01vdXNlT3V0IH1cbiAgICAgICAgICBvblNlbGVjdFJvdz17IHRoaXMuaGFuZGxlU2VsZWN0Um93IH0+XG4gICAgICAgICAgeyBzZWxlY3RSb3dDb2x1bW4gfVxuICAgICAgICAgIHsgdGFibGVDb2x1bW5zIH1cbiAgICAgICAgPC9UYWJsZVJvdz5cbiAgICAgICk7XG4gICAgfSwgdGhpcyk7XG5cbiAgICBpZiAodGFibGVSb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGFibGVSb3dzLnB1c2goXG4gICAgICAgIDxUYWJsZVJvdyBrZXk9JyMjdGFibGUtZW1wdHkjIyc+XG4gICAgICAgICAgPHRkIGNvbFNwYW49eyB0aGlzLnByb3BzLmNvbHVtbnMubGVuZ3RoICsgKGlzU2VsZWN0Um93RGVmaW5lZCA/IDEgOiAwKSB9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT0ncmVhY3QtYnMtdGFibGUtbm8tZGF0YSc+XG4gICAgICAgICAgICAgIHsgdGhpcy5wcm9wcy5ub0RhdGFUZXh0IHx8IENvbnN0Lk5PX0RBVEFfVEVYVCB9XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9UYWJsZVJvdz5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5lZGl0aW5nID0gZmFsc2U7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiByZWY9J2NvbnRhaW5lcicgY2xhc3NOYW1lPSdyZWFjdC1icy1jb250YWluZXItYm9keScgc3R5bGU9eyB0aGlzLnByb3BzLnN0eWxlIH0+XG4gICAgICAgIDx0YWJsZSBjbGFzc05hbWU9eyB0YWJsZUNsYXNzZXMgfT5cbiAgICAgICAgICB7IHRhYmxlSGVhZGVyIH1cbiAgICAgICAgICA8dGJvZHkgcmVmPSd0Ym9keSc+XG4gICAgICAgICAgICB7IHRhYmxlUm93cyB9XG4gICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgPC90YWJsZT5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZW5kZXJUYWJsZUhlYWRlcihpc1NlbGVjdFJvd0RlZmluZWQpIHtcbiAgICBsZXQgc2VsZWN0Um93SGVhZGVyID0gbnVsbDtcblxuICAgIGlmIChpc1NlbGVjdFJvd0RlZmluZWQpIHtcbiAgICAgIGNvbnN0IHN0eWxlID0ge1xuICAgICAgICB3aWR0aDogMzAsXG4gICAgICAgIG1pbldpZHRoOiAzMFxuICAgICAgfTtcbiAgICAgIGlmICghdGhpcy5wcm9wcy5zZWxlY3RSb3cuaGlkZVNlbGVjdENvbHVtbikge1xuICAgICAgICBzZWxlY3RSb3dIZWFkZXIgPSAoPGNvbCBzdHlsZT17IHN0eWxlIH0ga2V5PXsgLTEgfT48L2NvbD4pO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB0aGVhZGVyID0gdGhpcy5wcm9wcy5jb2x1bW5zLm1hcChmdW5jdGlvbihjb2x1bW4sIGkpIHtcbiAgICAgIGNvbnN0IHdpZHRoID0gY29sdW1uLndpZHRoID09PSBudWxsID8gY29sdW1uLndpZHRoIDogcGFyc2VJbnQoY29sdW1uLndpZHRoLCAxMCk7XG4gICAgICBjb25zdCBzdHlsZSA9IHtcbiAgICAgICAgZGlzcGxheTogY29sdW1uLmhpZGRlbiA/ICdub25lJyA6IG51bGwsXG4gICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgbWluV2lkdGg6IHdpZHRoXG4gICAgICAgIC8qKiBhZGQgbWluLXdkdGggdG8gZml4IHVzZXIgYXNzaWduIGNvbHVtbiB3aWR0aFxuICAgICAgICBub3QgZXEgb2Zmc2V0V2lkdGggaW4gbGFyZ2UgY29sdW1uIHRhYmxlICoqL1xuICAgICAgfTtcbiAgICAgIHJldHVybiAoPGNvbCBzdHlsZT17IHN0eWxlIH0ga2V5PXsgaSB9IGNsYXNzTmFtZT17IGNvbHVtbi5jbGFzc05hbWUgfT48L2NvbD4pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxjb2xncm91cCByZWY9J2hlYWRlcic+XG4gICAgICAgIHsgc2VsZWN0Um93SGVhZGVyIH17IHRoZWFkZXIgfVxuICAgICAgPC9jb2xncm91cD5cbiAgICApO1xuICB9XG5cbiAgaGFuZGxlUm93TW91c2VPdXQgPSAocm93SW5kZXgsIGV2ZW50KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0Um93ID0gdGhpcy5wcm9wcy5kYXRhW3Jvd0luZGV4XTtcbiAgICB0aGlzLnByb3BzLm9uUm93TW91c2VPdXQodGFyZ2V0Um93LCBldmVudCk7XG4gIH1cblxuICBoYW5kbGVSb3dNb3VzZU92ZXIgPSAocm93SW5kZXgsIGV2ZW50KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0Um93ID0gdGhpcy5wcm9wcy5kYXRhW3Jvd0luZGV4XTtcbiAgICB0aGlzLnByb3BzLm9uUm93TW91c2VPdmVyKHRhcmdldFJvdywgZXZlbnQpO1xuICB9XG5cbiAgaGFuZGxlUm93Q2xpY2sgPSByb3dJbmRleCA9PiB7XG4gICAgbGV0IHNlbGVjdGVkUm93O1xuICAgIGNvbnN0IHsgZGF0YSwgb25Sb3dDbGljayB9ID0gdGhpcy5wcm9wcztcbiAgICBkYXRhLmZvckVhY2goKHJvdywgaSkgPT4ge1xuICAgICAgaWYgKGkgPT09IHJvd0luZGV4IC0gMSkge1xuICAgICAgICBzZWxlY3RlZFJvdyA9IHJvdztcbiAgICAgIH1cbiAgICB9KTtcbiAgICBvblJvd0NsaWNrKHNlbGVjdGVkUm93KTtcbiAgfVxuXG4gIGhhbmRsZVNlbGVjdFJvdyA9IChyb3dJbmRleCwgaXNTZWxlY3RlZCkgPT4ge1xuICAgIGxldCBzZWxlY3RlZFJvdztcbiAgICBjb25zdCB7IGRhdGEsIG9uU2VsZWN0Um93IH0gPSB0aGlzLnByb3BzO1xuICAgIGRhdGEuZm9yRWFjaCgocm93LCBpKSA9PiB7XG4gICAgICBpZiAoaSA9PT0gcm93SW5kZXggLSAxKSB7XG4gICAgICAgIHNlbGVjdGVkUm93ID0gcm93O1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgb25TZWxlY3RSb3coc2VsZWN0ZWRSb3csIGlzU2VsZWN0ZWQpO1xuICB9XG5cbiAgaGFuZGxlU2VsZWN0Um93Q29sdW1DaGFuZ2UgPSBlID0+IHtcbiAgICBpZiAoIXRoaXMucHJvcHMuc2VsZWN0Um93LmNsaWNrVG9TZWxlY3QgfHxcbiAgICAgICF0aGlzLnByb3BzLnNlbGVjdFJvdy5jbGlja1RvU2VsZWN0QW5kRWRpdENlbGwpIHtcbiAgICAgIHRoaXMuaGFuZGxlU2VsZWN0Um93KFxuICAgICAgICBlLmN1cnJlbnRUYXJnZXQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnJvd0luZGV4ICsgMSxcbiAgICAgICAgZS5jdXJyZW50VGFyZ2V0LmNoZWNrZWQpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUVkaXRDZWxsID0gKHJvd0luZGV4LCBjb2x1bW5JbmRleCkgPT4ge1xuICAgIHRoaXMuZWRpdGluZyA9IHRydWU7XG4gICAgaWYgKHRoaXMuX2lzU2VsZWN0Um93RGVmaW5lZCgpKSB7XG4gICAgICBjb2x1bW5JbmRleC0tO1xuICAgICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0Um93LmhpZGVTZWxlY3RDb2x1bW4pIGNvbHVtbkluZGV4Kys7XG4gICAgfVxuICAgIHJvd0luZGV4LS07XG4gICAgY29uc3Qgc3RhdGVPYmogPSB7XG4gICAgICBjdXJyRWRpdENlbGw6IHtcbiAgICAgICAgcmlkOiByb3dJbmRleCxcbiAgICAgICAgY2lkOiBjb2x1bW5JbmRleFxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5wcm9wcy5zZWxlY3RSb3cuY2xpY2tUb1NlbGVjdEFuZEVkaXRDZWxsKSB7XG4gICAgICB0aGlzLmhhbmRsZVNlbGVjdFJvdyhyb3dJbmRleCArIDEsIHRydWUpO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKHN0YXRlT2JqKTtcbiAgfVxuXG4gIGhhbmRsZUNvbXBsZXRlRWRpdENlbGwgPSAobmV3VmFsLCByb3dJbmRleCwgY29sdW1uSW5kZXgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHsgY3VyckVkaXRDZWxsOiBudWxsIH0pO1xuICAgIGlmIChuZXdWYWwgIT09IG51bGwpIHtcbiAgICAgIHRoaXMucHJvcHMuY2VsbEVkaXQuX19vbkNvbXBsZXRlRWRpdF9fKG5ld1ZhbCwgcm93SW5kZXgsIGNvbHVtbkluZGV4KTtcbiAgICB9XG4gIH1cblxuICByZW5kZXJTZWxlY3RSb3dDb2x1bW4oc2VsZWN0ZWQpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5zZWxlY3RSb3cubW9kZSA9PT0gQ29uc3QuUk9XX1NFTEVDVF9TSU5HTEUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUYWJsZUNvbHVtbiBkYXRhQWxpZ249J2NlbnRlcic+XG4gICAgICAgICAgPGlucHV0IHR5cGU9J3JhZGlvJyBjaGVja2VkPXsgc2VsZWN0ZWQgfVxuICAgICAgICAgICAgb25DaGFuZ2U9eyB0aGlzLmhhbmRsZVNlbGVjdFJvd0NvbHVtQ2hhbmdlIH0vPlxuICAgICAgICA8L1RhYmxlQ29sdW1uPlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFRhYmxlQ29sdW1uIGRhdGFBbGlnbj0nY2VudGVyJz5cbiAgICAgICAgICA8aW5wdXQgdHlwZT0nY2hlY2tib3gnIGNoZWNrZWQ9eyBzZWxlY3RlZCB9XG4gICAgICAgICAgb25DaGFuZ2U9eyB0aGlzLmhhbmRsZVNlbGVjdFJvd0NvbHVtQ2hhbmdlIH0vPlxuICAgICAgICA8L1RhYmxlQ29sdW1uPlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBfaXNTZWxlY3RSb3dEZWZpbmVkKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnNlbGVjdFJvdy5tb2RlID09PSBDb25zdC5ST1dfU0VMRUNUX1NJTkdMRSB8fFxuICAgICAgICAgIHRoaXMucHJvcHMuc2VsZWN0Um93Lm1vZGUgPT09IENvbnN0LlJPV19TRUxFQ1RfTVVMVEk7XG4gIH1cbn1cblRhYmxlQm9keS5wcm9wVHlwZXMgPSB7XG4gIGRhdGE6IFByb3BUeXBlcy5hcnJheSxcbiAgY29sdW1uczogUHJvcFR5cGVzLmFycmF5LFxuICBzdHJpcGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgYm9yZGVyZWQ6IFByb3BUeXBlcy5ib29sLFxuICBob3ZlcjogUHJvcFR5cGVzLmJvb2wsXG4gIGNvbmRlbnNlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGtleUZpZWxkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzZWxlY3RlZFJvd0tleXM6IFByb3BUeXBlcy5hcnJheSxcbiAgb25Sb3dDbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uU2VsZWN0Um93OiBQcm9wVHlwZXMuZnVuYyxcbiAgbm9EYXRhVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3Rcbn07XG5leHBvcnQgZGVmYXVsdCBUYWJsZUJvZHk7XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9UYWJsZUJvZHkuanNcbiAqKi8iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBQcm9wVHlwZXMgfSBmcm9tICdyZWFjdCc7XG5cbmNsYXNzIFRhYmxlUm93IGV4dGVuZHMgQ29tcG9uZW50IHtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmNsaWNrTnVtID0gMDtcbiAgfVxuXG4gIHJvd0NsaWNrID0gZSA9PiB7XG4gICAgaWYgKGUudGFyZ2V0LnRhZ05hbWUgIT09ICdJTlBVVCcgJiZcbiAgICAgICAgZS50YXJnZXQudGFnTmFtZSAhPT0gJ1NFTEVDVCcgJiZcbiAgICAgICAgZS50YXJnZXQudGFnTmFtZSAhPT0gJ1RFWFRBUkVBJykge1xuICAgICAgY29uc3Qgcm93SW5kZXggPSBlLmN1cnJlbnRUYXJnZXQucm93SW5kZXggKyAxO1xuICAgICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0Um93KSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnNlbGVjdFJvdy5jbGlja1RvU2VsZWN0KSB7XG4gICAgICAgICAgdGhpcy5wcm9wcy5vblNlbGVjdFJvdyhyb3dJbmRleCwgIXRoaXMucHJvcHMuaXNTZWxlY3RlZCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5zZWxlY3RSb3cuY2xpY2tUb1NlbGVjdEFuZEVkaXRDZWxsKSB7XG4gICAgICAgICAgdGhpcy5jbGlja051bSsrO1xuICAgICAgICAgIC8qKiBpZiBjbGlja1RvU2VsZWN0QW5kRWRpdENlbGwgaXMgZW5hYmxlZCxcbiAgICAgICAgICAgKiAgdGhlcmUgc2hvdWxkIGJlIGEgZGVsYXkgdG8gcHJldmVudCBhIHNlbGVjdGlvbiBjaGFuZ2VkIHdoZW5cbiAgICAgICAgICAgKiAgdXNlciBkYmxpY2sgdG8gZWRpdCBjZWxsIG9uIHNhbWUgcm93IGJ1dCBkaWZmZXJlbnQgY2VsbFxuICAgICAgICAgICoqL1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xpY2tOdW0gPT09IDEpIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vblNlbGVjdFJvdyhyb3dJbmRleCwgIXRoaXMucHJvcHMuaXNTZWxlY3RlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNsaWNrTnVtID0gMDtcbiAgICAgICAgICB9LCAyMDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5wcm9wcy5vblJvd0NsaWNrKSB0aGlzLnByb3BzLm9uUm93Q2xpY2socm93SW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHJvd01vdXNlT3V0ID0gZSA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMub25Sb3dNb3VzZU91dCkge1xuICAgICAgdGhpcy5wcm9wcy5vblJvd01vdXNlT3V0KGUuY3VycmVudFRhcmdldC5yb3dJbmRleCwgZSk7XG4gICAgfVxuICB9XG5cbiAgcm93TW91c2VPdmVyID0gZSA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMub25Sb3dNb3VzZU92ZXIpIHtcbiAgICAgIHRoaXMucHJvcHMub25Sb3dNb3VzZU92ZXIoZS5jdXJyZW50VGFyZ2V0LnJvd0luZGV4LCBlKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5jbGlja051bSA9IDA7XG4gICAgY29uc3QgdHJDc3MgPSB7XG4gICAgICBzdHlsZToge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoaXMucHJvcHMuaXNTZWxlY3RlZCA/IHRoaXMucHJvcHMuc2VsZWN0Um93LmJnQ29sb3IgOiBudWxsXG4gICAgICB9LFxuICAgICAgY2xhc3NOYW1lOiAoXG4gICAgICAgIHRoaXMucHJvcHMuaXNTZWxlY3RlZCAmJiB0aGlzLnByb3BzLnNlbGVjdFJvdy5jbGFzc05hbWUgP1xuICAgICAgICB0aGlzLnByb3BzLnNlbGVjdFJvdy5jbGFzc05hbWUgOiAnJykgKyAodGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgJycpXG4gICAgfTtcblxuICAgIGlmICh0aGlzLnByb3BzLnNlbGVjdFJvdyAmJiAodGhpcy5wcm9wcy5zZWxlY3RSb3cuY2xpY2tUb1NlbGVjdCB8fFxuICAgICAgdGhpcy5wcm9wcy5zZWxlY3RSb3cuY2xpY2tUb1NlbGVjdEFuZEVkaXRDZWxsKSB8fCB0aGlzLnByb3BzLm9uUm93Q2xpY2spIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDx0ciB7IC4uLnRyQ3NzIH1cbiAgICAgICAgICAgIG9uTW91c2VPdmVyPXsgdGhpcy5yb3dNb3VzZU92ZXIgfVxuICAgICAgICAgICAgb25Nb3VzZU91dD17IHRoaXMucm93TW91c2VPdXQgfVxuICAgICAgICAgICAgb25DbGljaz17IHRoaXMucm93Q2xpY2sgfT57IHRoaXMucHJvcHMuY2hpbGRyZW4gfTwvdHI+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8dHIgeyAuLi50ckNzcyB9PnsgdGhpcy5wcm9wcy5jaGlsZHJlbiB9PC90cj5cbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5UYWJsZVJvdy5wcm9wVHlwZXMgPSB7XG4gIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICBlbmFibGVDZWxsRWRpdDogUHJvcFR5cGVzLmJvb2wsXG4gIG9uUm93Q2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICBvblNlbGVjdFJvdzogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uUm93TW91c2VPdXQ6IFByb3BUeXBlcy5mdW5jLFxuICBvblJvd01vdXNlT3ZlcjogUHJvcFR5cGVzLmZ1bmNcbn07XG5UYWJsZVJvdy5kZWZhdWx0UHJvcHMgPSB7XG4gIG9uUm93Q2xpY2s6IHVuZGVmaW5lZFxufTtcbmV4cG9ydCBkZWZhdWx0IFRhYmxlUm93O1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvVGFibGVSb3cuanNcbiAqKi8iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBQcm9wVHlwZXMgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi9Db25zdCc7XG5cbmNsYXNzIFRhYmxlQ29sdW1uIGV4dGVuZHMgQ29tcG9uZW50IHtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICAvKiBlc2xpbnQgbm8tdW51c2VkLXZhcnM6IFswLCB7IFwiYXJnc1wiOiBcImFmdGVyLXVzZWRcIiB9XSAqL1xuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcbiAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSB0aGlzLnByb3BzO1xuICAgIGxldCBzaG91bGRVcGRhdGVkID0gdGhpcy5wcm9wcy53aWR0aCAhPT0gbmV4dFByb3BzLndpZHRoXG4gICAgICB8fCB0aGlzLnByb3BzLmNsYXNzTmFtZSAhPT0gbmV4dFByb3BzLmNsYXNzTmFtZVxuICAgICAgfHwgdGhpcy5wcm9wcy5oaWRkZW4gIT09IG5leHRQcm9wcy5oaWRkZW5cbiAgICAgIHx8IHRoaXMucHJvcHMuZGF0YUFsaWduICE9PSBuZXh0UHJvcHMuZGF0YUFsaWduXG4gICAgICB8fCB0eXBlb2YgY2hpbGRyZW4gIT09IHR5cGVvZiBuZXh0UHJvcHMuY2hpbGRyZW5cbiAgICAgIHx8ICgnJyArIHRoaXMucHJvcHMub25FZGl0KS50b1N0cmluZygpICE9PSAoJycgKyBuZXh0UHJvcHMub25FZGl0KS50b1N0cmluZygpO1xuXG4gICAgaWYgKHNob3VsZFVwZGF0ZWQpIHtcbiAgICAgIHJldHVybiBzaG91bGRVcGRhdGVkO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2hpbGRyZW4gPT09ICdvYmplY3QnICYmIGNoaWxkcmVuICE9PSBudWxsICYmIGNoaWxkcmVuLnByb3BzICE9PSBudWxsKSB7XG4gICAgICBpZiAoY2hpbGRyZW4ucHJvcHMudHlwZSA9PT0gJ2NoZWNrYm94JyB8fCBjaGlsZHJlbi5wcm9wcy50eXBlID09PSAncmFkaW8nKSB7XG4gICAgICAgIHNob3VsZFVwZGF0ZWQgPSBzaG91bGRVcGRhdGVkIHx8XG4gICAgICAgICAgY2hpbGRyZW4ucHJvcHMudHlwZSAhPT0gbmV4dFByb3BzLmNoaWxkcmVuLnByb3BzLnR5cGUgfHxcbiAgICAgICAgICBjaGlsZHJlbi5wcm9wcy5jaGVja2VkICE9PSBuZXh0UHJvcHMuY2hpbGRyZW4ucHJvcHMuY2hlY2tlZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNob3VsZFVwZGF0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzaG91bGRVcGRhdGVkID0gc2hvdWxkVXBkYXRlZCB8fCBjaGlsZHJlbiAhPT0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICAgIH1cblxuICAgIGlmIChzaG91bGRVcGRhdGVkKSB7XG4gICAgICByZXR1cm4gc2hvdWxkVXBkYXRlZDtcbiAgICB9XG5cbiAgICBpZiAoISh0aGlzLnByb3BzLmNlbGxFZGl0ICYmIG5leHRQcm9wcy5jZWxsRWRpdCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHNob3VsZFVwZGF0ZWRcbiAgICAgICAgfHwgdGhpcy5wcm9wcy5jZWxsRWRpdC5tb2RlICE9PSBuZXh0UHJvcHMuY2VsbEVkaXQubW9kZTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVDZWxsRWRpdCA9IGUgPT4ge1xuICAgIGlmICh0aGlzLnByb3BzLmNlbGxFZGl0Lm1vZGUgPT09IENvbnN0LkNFTExfRURJVF9EQkNMSUNLKSB7XG4gICAgICBpZiAoZG9jdW1lbnQuc2VsZWN0aW9uICYmIGRvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSkge1xuICAgICAgICBkb2N1bWVudC5zZWxlY3Rpb24uZW1wdHkoKTtcbiAgICAgIH0gZWxzZSBpZiAod2luZG93LmdldFNlbGVjdGlvbikge1xuICAgICAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5wcm9wcy5vbkVkaXQoXG4gICAgICBlLmN1cnJlbnRUYXJnZXQucGFyZW50RWxlbWVudC5yb3dJbmRleCArIDEsXG4gICAgICBlLmN1cnJlbnRUYXJnZXQuY2VsbEluZGV4KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB0ZFN0eWxlID0ge1xuICAgICAgdGV4dEFsaWduOiB0aGlzLnByb3BzLmRhdGFBbGlnbixcbiAgICAgIGRpc3BsYXk6IHRoaXMucHJvcHMuaGlkZGVuID8gJ25vbmUnIDogbnVsbFxuICAgIH07XG5cbiAgICBjb25zdCBvcHRzID0ge307XG4gICAgaWYgKHRoaXMucHJvcHMuY2VsbEVkaXQpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLmNlbGxFZGl0Lm1vZGUgPT09IENvbnN0LkNFTExfRURJVF9DTElDSykge1xuICAgICAgICBvcHRzLm9uQ2xpY2sgPSB0aGlzLmhhbmRsZUNlbGxFZGl0O1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmNlbGxFZGl0Lm1vZGUgPT09IENvbnN0LkNFTExfRURJVF9EQkNMSUNLKSB7XG4gICAgICAgIG9wdHMub25Eb3VibGVDbGljayA9IHRoaXMuaGFuZGxlQ2VsbEVkaXQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8dGQgc3R5bGU9eyB0ZFN0eWxlIH0gY2xhc3NOYW1lPXsgdGhpcy5wcm9wcy5jbGFzc05hbWUgfSB7IC4uLm9wdHMgfT5cbiAgICAgICAgeyB0aGlzLnByb3BzLmNoaWxkcmVuIH1cbiAgICAgIDwvdGQ+XG4gICAgKTtcbiAgfVxufVxuVGFibGVDb2x1bW4ucHJvcFR5cGVzID0ge1xuICBkYXRhQWxpZ246IFByb3BUeXBlcy5zdHJpbmcsXG4gIGhpZGRlbjogUHJvcFR5cGVzLmJvb2wsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlXG59O1xuXG5UYWJsZUNvbHVtbi5kZWZhdWx0UHJvcHMgPSB7XG4gIGRhdGFBbGlnbjogJ2xlZnQnLFxuICBoaWRkZW46IGZhbHNlLFxuICBjbGFzc05hbWU6ICcnXG59O1xuZXhwb3J0IGRlZmF1bHQgVGFibGVDb2x1bW47XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9UYWJsZUNvbHVtbi5qc1xuICoqLyIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFByb3BUeXBlcyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBlZGl0b3IgZnJvbSAnLi9FZGl0b3InO1xuaW1wb3J0IE5vdGlmaWVyIGZyb20gJy4vTm90aWZpY2F0aW9uLmpzJztcbmltcG9ydCBjbGFzc1NldCBmcm9tICdjbGFzc25hbWVzJztcblxuY2xhc3MgVGFibGVFZGl0Q29sdW1uIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy50aW1lb3V0ZUNsZWFyID0gMDtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgc2hha2VFZGl0b3I6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGhhbmRsZUtleVByZXNzID0gZSA9PiB7XG4gICAgaWYgKGUua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgIC8vIFByZXNzZWQgRU5URVJcbiAgICAgIGNvbnN0IHZhbHVlID0gZS5jdXJyZW50VGFyZ2V0LnR5cGUgPT09ICdjaGVja2JveCcgP1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2dldENoZWNrQm94VmFsdWUoZSkgOiBlLmN1cnJlbnRUYXJnZXQudmFsdWU7XG5cbiAgICAgIGlmICghdGhpcy52YWxpZGF0b3IodmFsdWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMucHJvcHMuY29tcGxldGVFZGl0KHZhbHVlLCB0aGlzLnByb3BzLnJvd0luZGV4LCB0aGlzLnByb3BzLmNvbEluZGV4KTtcbiAgICB9IGVsc2UgaWYgKGUua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgIHRoaXMucHJvcHMuY29tcGxldGVFZGl0KFxuICAgICAgICBudWxsLCB0aGlzLnByb3BzLnJvd0luZGV4LCB0aGlzLnByb3BzLmNvbEluZGV4KTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVCbHVyID0gZSA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMuYmx1clRvU2F2ZSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBlLmN1cnJlbnRUYXJnZXQudHlwZSA9PT0gJ2NoZWNrYm94JyA/XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2V0Q2hlY2tCb3hWYWx1ZShlKSA6IGUuY3VycmVudFRhcmdldC52YWx1ZTtcbiAgICAgIGlmICghdGhpcy52YWxpZGF0b3IodmFsdWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMucHJvcHMuY29tcGxldGVFZGl0KFxuICAgICAgICAgIHZhbHVlLCB0aGlzLnByb3BzLnJvd0luZGV4LCB0aGlzLnByb3BzLmNvbEluZGV4KTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0b3IodmFsdWUpIHtcbiAgICBjb25zdCB0cyA9IHRoaXM7XG4gICAgaWYgKHRzLnByb3BzLmVkaXRhYmxlLnZhbGlkYXRvcikge1xuICAgICAgY29uc3QgdmFsaWQgPSB0cy5wcm9wcy5lZGl0YWJsZS52YWxpZGF0b3IodmFsdWUpO1xuICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICB0cy5yZWZzLm5vdGlmaWVyLm5vdGljZSgnZXJyb3InLCB2YWxpZCwgJ1ByZXNzZWQgRVNDIGNhbiBjYW5jZWwnKTtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0cy5yZWZzLmlucHV0UmVmO1xuICAgICAgICAvLyBhbmltYXRlIGlucHV0XG4gICAgICAgIHRzLmNsZWFyVGltZW91dCgpO1xuICAgICAgICB0cy5zZXRTdGF0ZSh7IHNoYWtlRWRpdG9yOiB0cnVlIH0pO1xuICAgICAgICB0cy50aW1lb3V0ZUNsZWFyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdHMuc2V0U3RhdGUoeyBzaGFrZUVkaXRvcjogZmFsc2UgfSk7XG4gICAgICAgIH0sIDMwMCk7XG4gICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY2xlYXJUaW1lb3V0KCkge1xuICAgIGlmICh0aGlzLnRpbWVvdXRlQ2xlYXIgIT09IDApIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRlQ2xlYXIpO1xuICAgICAgdGhpcy50aW1lb3V0ZUNsZWFyID0gMDtcbiAgICB9XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5yZWZzLmlucHV0UmVmLmZvY3VzKCk7XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLmNsZWFyVGltZW91dCgpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgZWRpdGFibGUsIGZvcm1hdCwgY2hpbGRyZW4gfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBzaGFrZUVkaXRvciB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBhdHRyID0ge1xuICAgICAgcmVmOiAnaW5wdXRSZWYnLFxuICAgICAgb25LZXlEb3duOiB0aGlzLmhhbmRsZUtleVByZXNzLFxuICAgICAgb25CbHVyOiB0aGlzLmhhbmRsZUJsdXJcbiAgICB9O1xuICAgIC8vIHB1dCBwbGFjZWhvbGRlciBpZiBleGlzdFxuICAgIGVkaXRhYmxlLnBsYWNlaG9sZGVyICYmIChhdHRyLnBsYWNlaG9sZGVyID0gZWRpdGFibGUucGxhY2Vob2xkZXIpO1xuXG4gICAgY29uc3QgZWRpdG9yQ2xhc3MgPSBjbGFzc1NldCh7ICdhbmltYXRlZCc6IHNoYWtlRWRpdG9yLCAnc2hha2UnOiBzaGFrZUVkaXRvciB9KTtcbiAgICByZXR1cm4gKFxuICAgICAgPHRkIHJlZj0ndGQnIHN0eWxlPXsgeyBwb3NpdGlvbjogJ3JlbGF0aXZlJyB9IH0+XG4gICAgICAgIHsgZWRpdG9yKGVkaXRhYmxlLCBhdHRyLCBmb3JtYXQsIGVkaXRvckNsYXNzLCBjaGlsZHJlbiB8fCAnJykgfVxuICAgICAgICA8Tm90aWZpZXIgcmVmPSdub3RpZmllcicvPlxuICAgICAgPC90ZD5cbiAgICApO1xuICB9XG5cbiAgX2dldENoZWNrQm94VmFsdWUoZSkge1xuICAgIGxldCB2YWx1ZSA9ICcnO1xuICAgIGNvbnN0IHZhbHVlcyA9IGUuY3VycmVudFRhcmdldC52YWx1ZS5zcGxpdCgnOicpO1xuICAgIHZhbHVlID0gZS5jdXJyZW50VGFyZ2V0LmNoZWNrZWQgPyB2YWx1ZXNbMF0gOiB2YWx1ZXNbMV07XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5cblRhYmxlRWRpdENvbHVtbi5wcm9wVHlwZXMgPSB7XG4gIGNvbXBsZXRlRWRpdDogUHJvcFR5cGVzLmZ1bmMsXG4gIHJvd0luZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuICBjb2xJbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgYmx1clRvU2F2ZTogUHJvcFR5cGVzLmJvb2wsXG4gIGVkaXRhYmxlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFsgUHJvcFR5cGVzLmJvb2wsIFByb3BUeXBlcy5vYmplY3QgXSksXG4gIGZvcm1hdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbIFByb3BUeXBlcy5ib29sLCBQcm9wVHlwZXMuZnVuYyBdKSxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlXG59O1xuXG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlRWRpdENvbHVtbjtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL1RhYmxlRWRpdENvbHVtbi5qc1xuICoqLyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmNvbnN0IGVkaXRvciA9IGZ1bmN0aW9uKGVkaXRhYmxlLCBhdHRyLCBmb3JtYXQsIGVkaXRvckNsYXNzLCBkZWZhdWx0VmFsdWUpIHtcbiAgaWYgKGVkaXRhYmxlID09PSB0cnVlIHx8IHR5cGVvZiBlZGl0YWJsZSA9PT0gJ3N0cmluZycpIHsgLy8gc2ltcGxlIGRlY2xhcmVcbiAgICBjb25zdCB0eXBlID0gZWRpdGFibGUgPyAndGV4dCcgOiBlZGl0YWJsZTtcbiAgICByZXR1cm4gKFxuICAgICAgPGlucHV0IHsgLi4uYXR0ciB9IHR5cGU9eyB0eXBlIH0gZGVmYXVsdFZhbHVlPXsgZGVmYXVsdFZhbHVlIH1cbiAgICAgICAgICBjbGFzc05hbWU9eyAoIGVkaXRvckNsYXNzIHx8ICcnKSArICcgZm9ybS1jb250cm9sIGVkaXRvciBlZGl0LXRleHQnIH0gLz5cbiAgICApO1xuICB9IGVsc2UgaWYgKCFlZGl0YWJsZSkge1xuICAgIGNvbnN0IHR5cGUgPSBlZGl0YWJsZSA/ICd0ZXh0JyA6IGVkaXRhYmxlO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxpbnB1dCB7IC4uLmF0dHIgfSB0eXBlPXsgdHlwZSB9IGRlZmF1bHRWYWx1ZT17IGRlZmF1bHRWYWx1ZSB9XG4gICAgICAgICAgZGlzYWJsZWQ9J2Rpc2FibGVkJ1xuICAgICAgICAgIGNsYXNzTmFtZT17ICggZWRpdG9yQ2xhc3MgfHwgJycpICsgJyBmb3JtLWNvbnRyb2wgZWRpdG9yIGVkaXQtdGV4dCcgfSAvPlxuICAgICk7XG4gIH0gZWxzZSBpZiAoZWRpdGFibGUudHlwZSkgey8vIHN0YW5kYXJkIGRlY2xhcmVcbiAgICAvLyBwdXQgc3R5bGUgaWYgZXhpc3RcbiAgICBlZGl0YWJsZS5zdHlsZSAmJiAoYXR0ci5zdHlsZSA9IGVkaXRhYmxlLnN0eWxlKTtcbiAgICAvLyBwdXQgY2xhc3MgaWYgZXhpc3RcbiAgICBhdHRyLmNsYXNzTmFtZSA9IChlZGl0b3JDbGFzcyB8fCAnJykgK1xuICAgICAgICAgICAgICAgICAgICAgJyBmb3JtLWNvbnRyb2wgZWRpdG9yIGVkaXQtJyArXG4gICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZS50eXBlICtcbiAgICAgICAgICAgICAgICAgICAgIChlZGl0YWJsZS5jbGFzc05hbWUgPyAoJyAnICsgZWRpdGFibGUuY2xhc3NOYW1lKSA6ICcnKTtcblxuICAgIGlmIChlZGl0YWJsZS50eXBlID09PSAnc2VsZWN0Jykgey8vIHByb2Nlc3Mgc2VsZWN0IGlucHV0XG4gICAgICBsZXQgb3B0aW9ucyA9IFtdO1xuICAgICAgY29uc3QgdmFsdWVzID0gZWRpdGFibGUub3B0aW9ucy52YWx1ZXM7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7Ly8gb25seSBjYW4gdXNlIGFycnJheSBkYXRhIGZvciBvcHRpb25zXG4gICAgICAgIGxldCByb3dWYWx1ZTtcbiAgICAgICAgb3B0aW9ucyA9IHZhbHVlcy5tYXAoKGQsIGkpID0+IHtcbiAgICAgICAgICByb3dWYWx1ZSA9IGZvcm1hdCA/IGZvcm1hdChkKSA6IGQ7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxvcHRpb24ga2V5PXsgJ29wdGlvbicgKyBpIH0gdmFsdWU9eyBkIH0+eyByb3dWYWx1ZSB9PC9vcHRpb24+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8c2VsZWN0IHsgLi4uYXR0ciB9IGRlZmF1bHRWYWx1ZT17IGRlZmF1bHRWYWx1ZSB9PlxuICAgICAgICAgIHsgb3B0aW9ucyB9XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGVkaXRhYmxlLnR5cGUgPT09ICd0ZXh0YXJlYScpIHsvLyBwcm9jZXNzIHRleHRhcmVhIGlucHV0XG4gICAgICAvLyBwdXQgb3RoZXIgaWYgZXhpc3RcbiAgICAgIGVkaXRhYmxlLmNvbHMgJiYgKGF0dHIuY29scyA9IGVkaXRhYmxlLmNvbHMpO1xuICAgICAgZWRpdGFibGUucm93cyAmJiAoYXR0ci5yb3dzID0gZWRpdGFibGUucm93cyk7XG4gICAgICBsZXQgc2F2ZUJ0bjtcbiAgICAgIGNvbnN0IGtleVVwSGFuZGxlciA9IGF0dHIub25LZXlEb3duO1xuICAgICAgaWYgKGtleVVwSGFuZGxlcikge1xuICAgICAgICBhdHRyLm9uS2V5RG93biA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICBpZiAoZS5rZXlDb2RlICE9PSAxMykgeyAvLyBub3QgUHJlc3NlZCBFTlRFUlxuICAgICAgICAgICAga2V5VXBIYW5kbGVyKGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgc2F2ZUJ0biA9IChcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzc05hbWU9J2J0biBidG4taW5mbyBidG4teHMgdGV4dGFyZWEtc2F2ZS1idG4nXG4gICAgICAgICAgICBvbkNsaWNrPXsga2V5VXBIYW5kbGVyIH0+XG4gICAgICAgICAgICBzYXZlXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDx0ZXh0YXJlYSB7IC4uLmF0dHIgfSBkZWZhdWx0VmFsdWU9eyBkZWZhdWx0VmFsdWUgfT48L3RleHRhcmVhPlxuICAgICAgICAgIHsgc2F2ZUJ0biB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGVkaXRhYmxlLnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgIGxldCB2YWx1ZXMgPSAndHJ1ZTpmYWxzZSc7XG4gICAgICBpZiAoZWRpdGFibGUub3B0aW9ucyAmJiBlZGl0YWJsZS5vcHRpb25zLnZhbHVlcykge1xuICAgICAgICAvLyB2YWx1ZXMgPSBlZGl0YWJsZS5vcHRpb25zLnZhbHVlcy5zcGxpdCgnOicpO1xuICAgICAgICB2YWx1ZXMgPSBlZGl0YWJsZS5vcHRpb25zLnZhbHVlcztcbiAgICAgIH1cbiAgICAgIGF0dHIuY2xhc3NOYW1lID0gYXR0ci5jbGFzc05hbWUucmVwbGFjZSgnZm9ybS1jb250cm9sJywgJycpO1xuICAgICAgYXR0ci5jbGFzc05hbWUgKz0gJyBjaGVja2JveCBwdWxsLXJpZ2h0JztcblxuICAgICAgY29uc3QgY2hlY2tlZCA9IGRlZmF1bHRWYWx1ZSAmJlxuICAgICAgICBkZWZhdWx0VmFsdWUudG9TdHJpbmcoKSA9PT0gdmFsdWVzLnNwbGl0KCc6JylbMF0gPyB0cnVlIDogZmFsc2U7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxpbnB1dCB7IC4uLmF0dHIgfSB0eXBlPSdjaGVja2JveCdcbiAgICAgICAgICB2YWx1ZT17IHZhbHVlcyB9IGRlZmF1bHRDaGVja2VkPXsgY2hlY2tlZCB9Lz5cbiAgICAgICk7XG4gICAgfSBlbHNlIHsvLyBwcm9jZXNzIG90aGVyIGlucHV0IHR5cGUuIGFzIHBhc3N3b3JkLHVybCxlbWFpbC4uLlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGlucHV0IHsgLi4uYXR0ciB9IHR5cGU9J3RleHQnIGRlZmF1bHRWYWx1ZT17IGRlZmF1bHRWYWx1ZSB9Lz5cbiAgICAgICk7XG4gICAgfVxuICB9XG4gIC8vIGRlZmF1bHQgcmV0dXJuIGZvciBvdGhlciBjYXNlIG9mIGVkaXRhYmxlXG4gIHJldHVybiAoXG4gICAgPGlucHV0IHsuLi5hdHRyfSB0eXBlPSd0ZXh0J1xuICAgICAgY2xhc3NOYW1lPXsgKGVkaXRvckNsYXNzIHx8ICcnKSArICcgZm9ybS1jb250cm9sIGVkaXRvciBlZGl0LXRleHQnIH0vPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZWRpdG9yO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvRWRpdG9yLmpzXG4gKiovIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHsgVG9hc3RDb250YWluZXIsIFRvYXN0TWVzc2FnZSB9IGZyb20gJ3JlYWN0LXRvYXN0cic7XG5cblxuY29uc3QgVG9hc3RyTWVzc2FnZUZhY3RvcnkgPSBSZWFjdC5jcmVhdGVGYWN0b3J5KFRvYXN0TWVzc2FnZS5hbmltYXRpb24pO1xuXG5jbGFzcyBOb3RpZmljYXRpb24gZXh0ZW5kcyBDb21wb25lbnQge1xuICAvLyBhbGxvdyB0eXBlIGlzIHN1Y2Nlc3MsaW5mbyx3YXJuaW5nLGVycm9yXG4gIG5vdGljZSh0eXBlLCBtc2csIHRpdGxlKSB7XG4gICAgdGhpcy5yZWZzLnRvYXN0clt0eXBlXShcbiAgICAgIG1zZywgdGl0bGUsIHtcbiAgICAgICAgbW9kZTogJ3NpbmdsZScsXG4gICAgICAgIHRpbWVPdXQ6IDUwMDAsXG4gICAgICAgIGV4dGVuZGVkVGltZU91dDogMTAwMCxcbiAgICAgICAgc2hvd0FuaW1hdGlvbjogJ2FuaW1hdGVkICBib3VuY2VJbicsXG4gICAgICAgIGhpZGVBbmltYXRpb246ICdhbmltYXRlZCBib3VuY2VPdXQnXG4gICAgICB9KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFRvYXN0Q29udGFpbmVyIHJlZj0ndG9hc3RyJ1xuICAgICAgICB0b2FzdE1lc3NhZ2VGYWN0b3J5PXsgVG9hc3RyTWVzc2FnZUZhY3RvcnkgfVxuICAgICAgICBpZD0ndG9hc3QtY29udGFpbmVyJ1xuICAgICAgICBjbGFzc05hbWU9J3RvYXN0LXRvcC1yaWdodCcvPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTm90aWZpY2F0aW9uO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvTm90aWZpY2F0aW9uLmpzXG4gKiovIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlRvYXN0TWVzc2FnZSA9IGV4cG9ydHMuVG9hc3RDb250YWluZXIgPSB1bmRlZmluZWQ7XG5cbnZhciBfVG9hc3RDb250YWluZXIgPSByZXF1aXJlKFwiLi9Ub2FzdENvbnRhaW5lclwiKTtcblxudmFyIF9Ub2FzdENvbnRhaW5lcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9Ub2FzdENvbnRhaW5lcik7XG5cbnZhciBfVG9hc3RNZXNzYWdlID0gcmVxdWlyZShcIi4vVG9hc3RNZXNzYWdlXCIpO1xuXG52YXIgX1RvYXN0TWVzc2FnZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9Ub2FzdE1lc3NhZ2UpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLlRvYXN0Q29udGFpbmVyID0gX1RvYXN0Q29udGFpbmVyMi5kZWZhdWx0O1xuZXhwb3J0cy5Ub2FzdE1lc3NhZ2UgPSBfVG9hc3RNZXNzYWdlMi5kZWZhdWx0O1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L3JlYWN0LXRvYXN0ci9saWIvaW5kZXguanNcbiAqKiBtb2R1bGUgaWQgPSAxNFxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfcmVhY3QgPSByZXF1aXJlKFwicmVhY3RcIik7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX3JlYWN0QWRkb25zVXBkYXRlID0gcmVxdWlyZShcInJlYWN0LWFkZG9ucy11cGRhdGVcIik7XG5cbnZhciBfcmVhY3RBZGRvbnNVcGRhdGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3RBZGRvbnNVcGRhdGUpO1xuXG52YXIgX1RvYXN0TWVzc2FnZSA9IHJlcXVpcmUoXCIuL1RvYXN0TWVzc2FnZVwiKTtcblxudmFyIF9Ub2FzdE1lc3NhZ2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfVG9hc3RNZXNzYWdlKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgVG9hc3RDb250YWluZXIgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoVG9hc3RDb250YWluZXIsIF9Db21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFRvYXN0Q29udGFpbmVyKCkge1xuICAgIHZhciBfT2JqZWN0JGdldFByb3RvdHlwZU87XG5cbiAgICB2YXIgX3RlbXAsIF90aGlzLCBfcmV0O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRvYXN0Q29udGFpbmVyKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBfcmV0ID0gKF90ZW1wID0gKF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKF9PYmplY3QkZ2V0UHJvdG90eXBlTyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihUb2FzdENvbnRhaW5lcikpLmNhbGwuYXBwbHkoX09iamVjdCRnZXRQcm90b3R5cGVPLCBbdGhpc10uY29uY2F0KGFyZ3MpKSksIF90aGlzKSwgX3RoaXMuc3RhdGUgPSB7XG4gICAgICB0b2FzdHM6IFtdLFxuICAgICAgdG9hc3RJZDogMCxcbiAgICAgIHByZXZpb3VzTWVzc2FnZTogbnVsbFxuICAgIH0sIF90ZW1wKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsIF9yZXQpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFRvYXN0Q29udGFpbmVyLCBbe1xuICAgIGtleTogXCJlcnJvclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBlcnJvcihtZXNzYWdlLCB0aXRsZSwgb3B0aW9uc092ZXJyaWRlKSB7XG4gICAgICB0aGlzLl9ub3RpZnkodGhpcy5wcm9wcy50b2FzdFR5cGUuZXJyb3IsIG1lc3NhZ2UsIHRpdGxlLCBvcHRpb25zT3ZlcnJpZGUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpbmZvXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluZm8obWVzc2FnZSwgdGl0bGUsIG9wdGlvbnNPdmVycmlkZSkge1xuICAgICAgdGhpcy5fbm90aWZ5KHRoaXMucHJvcHMudG9hc3RUeXBlLmluZm8sIG1lc3NhZ2UsIHRpdGxlLCBvcHRpb25zT3ZlcnJpZGUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzdWNjZXNzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHN1Y2Nlc3MobWVzc2FnZSwgdGl0bGUsIG9wdGlvbnNPdmVycmlkZSkge1xuICAgICAgdGhpcy5fbm90aWZ5KHRoaXMucHJvcHMudG9hc3RUeXBlLnN1Y2Nlc3MsIG1lc3NhZ2UsIHRpdGxlLCBvcHRpb25zT3ZlcnJpZGUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ3YXJuaW5nXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHdhcm5pbmcobWVzc2FnZSwgdGl0bGUsIG9wdGlvbnNPdmVycmlkZSkge1xuICAgICAgdGhpcy5fbm90aWZ5KHRoaXMucHJvcHMudG9hc3RUeXBlLndhcm5pbmcsIG1lc3NhZ2UsIHRpdGxlLCBvcHRpb25zT3ZlcnJpZGUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjbGVhclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnJlZnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBfdGhpczIucmVmc1trZXldLmhpZGVUb2FzdChmYWxzZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX25vdGlmeVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfbm90aWZ5KHR5cGUsIG1lc3NhZ2UsIHRpdGxlKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIG9wdGlvbnNPdmVycmlkZSA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMyB8fCBhcmd1bWVudHNbM10gPT09IHVuZGVmaW5lZCA/IHt9IDogYXJndW1lbnRzWzNdO1xuXG4gICAgICBpZiAodGhpcy5wcm9wcy5wcmV2ZW50RHVwbGljYXRlcykge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5wcmV2aW91c01lc3NhZ2UgPT09IG1lc3NhZ2UpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBrZXkgPSB0aGlzLnN0YXRlLnRvYXN0SWQrKztcbiAgICAgIHZhciB0b2FzdElkID0ga2V5O1xuICAgICAgdmFyIG5ld1RvYXN0ID0gKDAsIF9yZWFjdEFkZG9uc1VwZGF0ZTIuZGVmYXVsdCkob3B0aW9uc092ZXJyaWRlLCB7XG4gICAgICAgICRtZXJnZToge1xuICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgICAgdG9hc3RJZDogdG9hc3RJZCxcbiAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICByZWY6IFwidG9hc3RzX19cIiArIGtleSxcbiAgICAgICAgICBoYW5kbGVPbkNsaWNrOiBmdW5jdGlvbiBoYW5kbGVPbkNsaWNrKGUpIHtcbiAgICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBvcHRpb25zT3ZlcnJpZGUuaGFuZGxlT25DbGljaykge1xuICAgICAgICAgICAgICBvcHRpb25zT3ZlcnJpZGUuaGFuZGxlT25DbGljaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF90aGlzMy5faGFuZGxlX3RvYXN0X29uX2NsaWNrKGUpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaGFuZGxlUmVtb3ZlOiB0aGlzLl9oYW5kbGVfdG9hc3RfcmVtb3ZlLmJpbmQodGhpcylcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB2YXIgdG9hc3RPcGVyYXRpb24gPSBfZGVmaW5lUHJvcGVydHkoe30sIFwiXCIgKyAodGhpcy5wcm9wcy5uZXdlc3RPblRvcCA/IFwiJHVuc2hpZnRcIiA6IFwiJHB1c2hcIiksIFtuZXdUb2FzdF0pO1xuXG4gICAgICB2YXIgbmV4dFN0YXRlID0gKDAsIF9yZWFjdEFkZG9uc1VwZGF0ZTIuZGVmYXVsdCkodGhpcy5zdGF0ZSwge1xuICAgICAgICB0b2FzdHM6IHRvYXN0T3BlcmF0aW9uLFxuICAgICAgICBwcmV2aW91c01lc3NhZ2U6IHsgJHNldDogbWVzc2FnZSB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2V0U3RhdGUobmV4dFN0YXRlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX2hhbmRsZV90b2FzdF9vbl9jbGlja1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfaGFuZGxlX3RvYXN0X29uX2NsaWNrKGV2ZW50KSB7XG4gICAgICB0aGlzLnByb3BzLm9uQ2xpY2soZXZlbnQpO1xuICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfaGFuZGxlX3RvYXN0X3JlbW92ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfaGFuZGxlX3RvYXN0X3JlbW92ZSh0b2FzdElkKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgdmFyIG9wZXJhdGlvbk5hbWUgPSBcIlwiICsgKHRoaXMucHJvcHMubmV3ZXN0T25Ub3AgPyBcInJlZHVjZVJpZ2h0XCIgOiBcInJlZHVjZVwiKTtcbiAgICAgIHRoaXMuc3RhdGUudG9hc3RzW29wZXJhdGlvbk5hbWVdKGZ1bmN0aW9uIChmb3VuZCwgdG9hc3QsIGluZGV4KSB7XG4gICAgICAgIGlmIChmb3VuZCB8fCB0b2FzdC50b2FzdElkICE9PSB0b2FzdElkKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIF90aGlzNC5zZXRTdGF0ZSgoMCwgX3JlYWN0QWRkb25zVXBkYXRlMi5kZWZhdWx0KShfdGhpczQuc3RhdGUsIHtcbiAgICAgICAgICB0b2FzdHM6IHsgJHNwbGljZTogW1tpbmRleCwgMV1dIH1cbiAgICAgICAgfSkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0sIGZhbHNlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgICByZXR1cm4gX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIF9leHRlbmRzKHt9LCB0aGlzLnByb3BzLCB7IFwiYXJpYS1saXZlXCI6IFwicG9saXRlXCIsIHJvbGU6IFwiYWxlcnRcIiB9KSxcbiAgICAgICAgdGhpcy5zdGF0ZS50b2FzdHMubWFwKGZ1bmN0aW9uICh0b2FzdCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczUucHJvcHMudG9hc3RNZXNzYWdlRmFjdG9yeSh0b2FzdCk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBUb2FzdENvbnRhaW5lcjtcbn0oX3JlYWN0LkNvbXBvbmVudCk7XG5cblRvYXN0Q29udGFpbmVyLnByb3BUeXBlcyA9IHtcbiAgdG9hc3RUeXBlOiBfcmVhY3QuUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBlcnJvcjogX3JlYWN0LlByb3BUeXBlcy5zdHJpbmcsXG4gICAgaW5mbzogX3JlYWN0LlByb3BUeXBlcy5zdHJpbmcsXG4gICAgc3VjY2VzczogX3JlYWN0LlByb3BUeXBlcy5zdHJpbmcsXG4gICAgd2FybmluZzogX3JlYWN0LlByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZCxcbiAgaWQ6IF9yZWFjdC5Qcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHRvYXN0TWVzc2FnZUZhY3Rvcnk6IF9yZWFjdC5Qcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBwcmV2ZW50RHVwbGljYXRlczogX3JlYWN0LlByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIG5ld2VzdE9uVG9wOiBfcmVhY3QuUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgb25DbGljazogX3JlYWN0LlByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRcbn07XG5Ub2FzdENvbnRhaW5lci5kZWZhdWx0UHJvcHMgPSB7XG4gIHRvYXN0VHlwZToge1xuICAgIGVycm9yOiBcImVycm9yXCIsXG4gICAgaW5mbzogXCJpbmZvXCIsXG4gICAgc3VjY2VzczogXCJzdWNjZXNzXCIsXG4gICAgd2FybmluZzogXCJ3YXJuaW5nXCJcbiAgfSxcbiAgaWQ6IFwidG9hc3QtY29udGFpbmVyXCIsXG4gIHRvYXN0TWVzc2FnZUZhY3Rvcnk6IF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVGYWN0b3J5KF9Ub2FzdE1lc3NhZ2UyLmRlZmF1bHQpLFxuICBwcmV2ZW50RHVwbGljYXRlczogZmFsc2UsXG4gIG5ld2VzdE9uVG9wOiB0cnVlLFxuICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge31cbn07XG5leHBvcnRzLmRlZmF1bHQgPSBUb2FzdENvbnRhaW5lcjtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vfi9yZWFjdC10b2FzdHIvbGliL1RvYXN0Q29udGFpbmVyLmpzXG4gKiogbW9kdWxlIGlkID0gMTVcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgncmVhY3QvbGliL3VwZGF0ZScpO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L3JlYWN0LWFkZG9ucy11cGRhdGUvaW5kZXguanNcbiAqKiBtb2R1bGUgaWQgPSAxNlxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIHVwZGF0ZVxuICovXG5cbi8qIGdsb2JhbCBoYXNPd25Qcm9wZXJ0eTp0cnVlICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoJy4vT2JqZWN0LmFzc2lnbicpO1xudmFyIGtleU9mID0gcmVxdWlyZSgnZmJqcy9saWIva2V5T2YnKTtcbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9pbnZhcmlhbnQnKTtcbnZhciBoYXNPd25Qcm9wZXJ0eSA9ICh7fSkuaGFzT3duUHJvcGVydHk7XG5cbmZ1bmN0aW9uIHNoYWxsb3dDb3B5KHgpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoeCkpIHtcbiAgICByZXR1cm4geC5jb25jYXQoKTtcbiAgfSBlbHNlIGlmICh4ICYmIHR5cGVvZiB4ID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBhc3NpZ24obmV3IHguY29uc3RydWN0b3IoKSwgeCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cbn1cblxudmFyIENPTU1BTkRfUFVTSCA9IGtleU9mKHsgJHB1c2g6IG51bGwgfSk7XG52YXIgQ09NTUFORF9VTlNISUZUID0ga2V5T2YoeyAkdW5zaGlmdDogbnVsbCB9KTtcbnZhciBDT01NQU5EX1NQTElDRSA9IGtleU9mKHsgJHNwbGljZTogbnVsbCB9KTtcbnZhciBDT01NQU5EX1NFVCA9IGtleU9mKHsgJHNldDogbnVsbCB9KTtcbnZhciBDT01NQU5EX01FUkdFID0ga2V5T2YoeyAkbWVyZ2U6IG51bGwgfSk7XG52YXIgQ09NTUFORF9BUFBMWSA9IGtleU9mKHsgJGFwcGx5OiBudWxsIH0pO1xuXG52YXIgQUxMX0NPTU1BTkRTX0xJU1QgPSBbQ09NTUFORF9QVVNILCBDT01NQU5EX1VOU0hJRlQsIENPTU1BTkRfU1BMSUNFLCBDT01NQU5EX1NFVCwgQ09NTUFORF9NRVJHRSwgQ09NTUFORF9BUFBMWV07XG5cbnZhciBBTExfQ09NTUFORFNfU0VUID0ge307XG5cbkFMTF9DT01NQU5EU19MSVNULmZvckVhY2goZnVuY3Rpb24gKGNvbW1hbmQpIHtcbiAgQUxMX0NPTU1BTkRTX1NFVFtjb21tYW5kXSA9IHRydWU7XG59KTtcblxuZnVuY3Rpb24gaW52YXJpYW50QXJyYXlDYXNlKHZhbHVlLCBzcGVjLCBjb21tYW5kKSB7XG4gICFBcnJheS5pc0FycmF5KHZhbHVlKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICd1cGRhdGUoKTogZXhwZWN0ZWQgdGFyZ2V0IG9mICVzIHRvIGJlIGFuIGFycmF5OyBnb3QgJXMuJywgY29tbWFuZCwgdmFsdWUpIDogaW52YXJpYW50KGZhbHNlKSA6IHVuZGVmaW5lZDtcbiAgdmFyIHNwZWNWYWx1ZSA9IHNwZWNbY29tbWFuZF07XG4gICFBcnJheS5pc0FycmF5KHNwZWNWYWx1ZSkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAndXBkYXRlKCk6IGV4cGVjdGVkIHNwZWMgb2YgJXMgdG8gYmUgYW4gYXJyYXk7IGdvdCAlcy4gJyArICdEaWQgeW91IGZvcmdldCB0byB3cmFwIHlvdXIgcGFyYW1ldGVyIGluIGFuIGFycmF5PycsIGNvbW1hbmQsIHNwZWNWYWx1ZSkgOiBpbnZhcmlhbnQoZmFsc2UpIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGUodmFsdWUsIHNwZWMpIHtcbiAgISh0eXBlb2Ygc3BlYyA9PT0gJ29iamVjdCcpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ3VwZGF0ZSgpOiBZb3UgcHJvdmlkZWQgYSBrZXkgcGF0aCB0byB1cGRhdGUoKSB0aGF0IGRpZCBub3QgY29udGFpbiBvbmUgJyArICdvZiAlcy4gRGlkIHlvdSBmb3JnZXQgdG8gaW5jbHVkZSB7JXM6IC4uLn0/JywgQUxMX0NPTU1BTkRTX0xJU1Quam9pbignLCAnKSwgQ09NTUFORF9TRVQpIDogaW52YXJpYW50KGZhbHNlKSA6IHVuZGVmaW5lZDtcblxuICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChzcGVjLCBDT01NQU5EX1NFVCkpIHtcbiAgICAhKE9iamVjdC5rZXlzKHNwZWMpLmxlbmd0aCA9PT0gMSkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnQ2Fubm90IGhhdmUgbW9yZSB0aGFuIG9uZSBrZXkgaW4gYW4gb2JqZWN0IHdpdGggJXMnLCBDT01NQU5EX1NFVCkgOiBpbnZhcmlhbnQoZmFsc2UpIDogdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIHNwZWNbQ09NTUFORF9TRVRdO1xuICB9XG5cbiAgdmFyIG5leHRWYWx1ZSA9IHNoYWxsb3dDb3B5KHZhbHVlKTtcblxuICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChzcGVjLCBDT01NQU5EX01FUkdFKSkge1xuICAgIHZhciBtZXJnZU9iaiA9IHNwZWNbQ09NTUFORF9NRVJHRV07XG4gICAgIShtZXJnZU9iaiAmJiB0eXBlb2YgbWVyZ2VPYmogPT09ICdvYmplY3QnKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICd1cGRhdGUoKTogJXMgZXhwZWN0cyBhIHNwZWMgb2YgdHlwZSBcXCdvYmplY3RcXCc7IGdvdCAlcycsIENPTU1BTkRfTUVSR0UsIG1lcmdlT2JqKSA6IGludmFyaWFudChmYWxzZSkgOiB1bmRlZmluZWQ7XG4gICAgIShuZXh0VmFsdWUgJiYgdHlwZW9mIG5leHRWYWx1ZSA9PT0gJ29iamVjdCcpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ3VwZGF0ZSgpOiAlcyBleHBlY3RzIGEgdGFyZ2V0IG9mIHR5cGUgXFwnb2JqZWN0XFwnOyBnb3QgJXMnLCBDT01NQU5EX01FUkdFLCBuZXh0VmFsdWUpIDogaW52YXJpYW50KGZhbHNlKSA6IHVuZGVmaW5lZDtcbiAgICBhc3NpZ24obmV4dFZhbHVlLCBzcGVjW0NPTU1BTkRfTUVSR0VdKTtcbiAgfVxuXG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHNwZWMsIENPTU1BTkRfUFVTSCkpIHtcbiAgICBpbnZhcmlhbnRBcnJheUNhc2UodmFsdWUsIHNwZWMsIENPTU1BTkRfUFVTSCk7XG4gICAgc3BlY1tDT01NQU5EX1BVU0hdLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIG5leHRWYWx1ZS5wdXNoKGl0ZW0pO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc3BlYywgQ09NTUFORF9VTlNISUZUKSkge1xuICAgIGludmFyaWFudEFycmF5Q2FzZSh2YWx1ZSwgc3BlYywgQ09NTUFORF9VTlNISUZUKTtcbiAgICBzcGVjW0NPTU1BTkRfVU5TSElGVF0uZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgbmV4dFZhbHVlLnVuc2hpZnQoaXRlbSk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChzcGVjLCBDT01NQU5EX1NQTElDRSkpIHtcbiAgICAhQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnRXhwZWN0ZWQgJXMgdGFyZ2V0IHRvIGJlIGFuIGFycmF5OyBnb3QgJXMnLCBDT01NQU5EX1NQTElDRSwgdmFsdWUpIDogaW52YXJpYW50KGZhbHNlKSA6IHVuZGVmaW5lZDtcbiAgICAhQXJyYXkuaXNBcnJheShzcGVjW0NPTU1BTkRfU1BMSUNFXSkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAndXBkYXRlKCk6IGV4cGVjdGVkIHNwZWMgb2YgJXMgdG8gYmUgYW4gYXJyYXkgb2YgYXJyYXlzOyBnb3QgJXMuICcgKyAnRGlkIHlvdSBmb3JnZXQgdG8gd3JhcCB5b3VyIHBhcmFtZXRlcnMgaW4gYW4gYXJyYXk/JywgQ09NTUFORF9TUExJQ0UsIHNwZWNbQ09NTUFORF9TUExJQ0VdKSA6IGludmFyaWFudChmYWxzZSkgOiB1bmRlZmluZWQ7XG4gICAgc3BlY1tDT01NQU5EX1NQTElDRV0uZm9yRWFjaChmdW5jdGlvbiAoYXJncykge1xuICAgICAgIUFycmF5LmlzQXJyYXkoYXJncykgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAndXBkYXRlKCk6IGV4cGVjdGVkIHNwZWMgb2YgJXMgdG8gYmUgYW4gYXJyYXkgb2YgYXJyYXlzOyBnb3QgJXMuICcgKyAnRGlkIHlvdSBmb3JnZXQgdG8gd3JhcCB5b3VyIHBhcmFtZXRlcnMgaW4gYW4gYXJyYXk/JywgQ09NTUFORF9TUExJQ0UsIHNwZWNbQ09NTUFORF9TUExJQ0VdKSA6IGludmFyaWFudChmYWxzZSkgOiB1bmRlZmluZWQ7XG4gICAgICBuZXh0VmFsdWUuc3BsaWNlLmFwcGx5KG5leHRWYWx1ZSwgYXJncyk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChzcGVjLCBDT01NQU5EX0FQUExZKSkge1xuICAgICEodHlwZW9mIHNwZWNbQ09NTUFORF9BUFBMWV0gPT09ICdmdW5jdGlvbicpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ3VwZGF0ZSgpOiBleHBlY3RlZCBzcGVjIG9mICVzIHRvIGJlIGEgZnVuY3Rpb247IGdvdCAlcy4nLCBDT01NQU5EX0FQUExZLCBzcGVjW0NPTU1BTkRfQVBQTFldKSA6IGludmFyaWFudChmYWxzZSkgOiB1bmRlZmluZWQ7XG4gICAgbmV4dFZhbHVlID0gc3BlY1tDT01NQU5EX0FQUExZXShuZXh0VmFsdWUpO1xuICB9XG5cbiAgZm9yICh2YXIgayBpbiBzcGVjKSB7XG4gICAgaWYgKCEoQUxMX0NPTU1BTkRTX1NFVC5oYXNPd25Qcm9wZXJ0eShrKSAmJiBBTExfQ09NTUFORFNfU0VUW2tdKSkge1xuICAgICAgbmV4dFZhbHVlW2tdID0gdXBkYXRlKHZhbHVlW2tdLCBzcGVjW2tdKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV4dFZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHVwZGF0ZTtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vfi9yZWFjdC9saWIvdXBkYXRlLmpzXG4gKiogbW9kdWxlIGlkID0gMTdcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxuXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBzZXRUaW1lb3V0KGRyYWluUXVldWUsIDApO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuXG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34vcHJvY2Vzcy9icm93c2VyLmpzXG4gKiogbW9kdWxlIGlkID0gMThcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTQtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBPYmplY3QuYXNzaWduXG4gKi9cblxuLy8gaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLW9iamVjdC5hc3NpZ25cblxuJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2VzKSB7XG4gIGlmICh0YXJnZXQgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gdGFyZ2V0IGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZCcpO1xuICB9XG5cbiAgdmFyIHRvID0gT2JqZWN0KHRhcmdldCk7XG4gIHZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbiAgZm9yICh2YXIgbmV4dEluZGV4ID0gMTsgbmV4dEluZGV4IDwgYXJndW1lbnRzLmxlbmd0aDsgbmV4dEluZGV4KyspIHtcbiAgICB2YXIgbmV4dFNvdXJjZSA9IGFyZ3VtZW50c1tuZXh0SW5kZXhdO1xuICAgIGlmIChuZXh0U291cmNlID09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBmcm9tID0gT2JqZWN0KG5leHRTb3VyY2UpO1xuXG4gICAgLy8gV2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgYWNjZXNzb3JzIG5vciBwcm94aWVzLiBUaGVyZWZvcmUgdGhpc1xuICAgIC8vIGNvcHkgY2Fubm90IHRocm93LiBJZiB3ZSBldmVyIHN1cHBvcnRlZCB0aGlzIHRoZW4gd2UgbXVzdCBoYW5kbGVcbiAgICAvLyBleGNlcHRpb25zIGFuZCBzaWRlLWVmZmVjdHMuIFdlIGRvbid0IHN1cHBvcnQgc3ltYm9scyBzbyB0aGV5IHdvbid0XG4gICAgLy8gYmUgdHJhbnNmZXJyZWQuXG5cbiAgICBmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuICAgICAgICB0b1trZXldID0gZnJvbVtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0bztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NpZ247XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34vcmVhY3QvbGliL09iamVjdC5hc3NpZ24uanNcbiAqKiBtb2R1bGUgaWQgPSAxOVxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGtleU9mXG4gKi9cblxuLyoqXG4gKiBBbGxvd3MgZXh0cmFjdGlvbiBvZiBhIG1pbmlmaWVkIGtleS4gTGV0J3MgdGhlIGJ1aWxkIHN5c3RlbSBtaW5pZnkga2V5c1xuICogd2l0aG91dCBsb3NpbmcgdGhlIGFiaWxpdHkgdG8gZHluYW1pY2FsbHkgdXNlIGtleSBzdHJpbmdzIGFzIHZhbHVlc1xuICogdGhlbXNlbHZlcy4gUGFzcyBpbiBhbiBvYmplY3Qgd2l0aCBhIHNpbmdsZSBrZXkvdmFsIHBhaXIgYW5kIGl0IHdpbGwgcmV0dXJuXG4gKiB5b3UgdGhlIHN0cmluZyBrZXkgb2YgdGhhdCBzaW5nbGUgcmVjb3JkLiBTdXBwb3NlIHlvdSB3YW50IHRvIGdyYWIgdGhlXG4gKiB2YWx1ZSBmb3IgYSBrZXkgJ2NsYXNzTmFtZScgaW5zaWRlIG9mIGFuIG9iamVjdC4gS2V5L3ZhbCBtaW5pZmljYXRpb24gbWF5XG4gKiBoYXZlIGFsaWFzZWQgdGhhdCBrZXkgdG8gYmUgJ3hhMTInLiBrZXlPZih7Y2xhc3NOYW1lOiBudWxsfSkgd2lsbCByZXR1cm5cbiAqICd4YTEyJyBpbiB0aGF0IGNhc2UuIFJlc29sdmUga2V5cyB5b3Ugd2FudCB0byB1c2Ugb25jZSBhdCBzdGFydHVwIHRpbWUsIHRoZW5cbiAqIHJldXNlIHRob3NlIHJlc29sdXRpb25zLlxuICovXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGtleU9mID0gZnVuY3Rpb24gKG9uZUtleU9iaikge1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBvbmVLZXlPYmopIHtcbiAgICBpZiAoIW9uZUtleU9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcmV0dXJuIGtleTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5T2Y7XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34vZmJqcy9saWIva2V5T2YuanNcbiAqKiBtb2R1bGUgaWQgPSAyMFxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGludmFyaWFudFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBVc2UgaW52YXJpYW50KCkgdG8gYXNzZXJ0IHN0YXRlIHdoaWNoIHlvdXIgcHJvZ3JhbSBhc3N1bWVzIHRvIGJlIHRydWUuXG4gKlxuICogUHJvdmlkZSBzcHJpbnRmLXN0eWxlIGZvcm1hdCAob25seSAlcyBpcyBzdXBwb3J0ZWQpIGFuZCBhcmd1bWVudHNcbiAqIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBicm9rZSBhbmQgd2hhdCB5b3Ugd2VyZVxuICogZXhwZWN0aW5nLlxuICpcbiAqIFRoZSBpbnZhcmlhbnQgbWVzc2FnZSB3aWxsIGJlIHN0cmlwcGVkIGluIHByb2R1Y3Rpb24sIGJ1dCB0aGUgaW52YXJpYW50XG4gKiB3aWxsIHJlbWFpbiB0byBlbnN1cmUgbG9naWMgZG9lcyBub3QgZGlmZmVyIGluIHByb2R1Y3Rpb24uXG4gKi9cblxuZnVuY3Rpb24gaW52YXJpYW50KGNvbmRpdGlvbiwgZm9ybWF0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFyaWFudCByZXF1aXJlcyBhbiBlcnJvciBtZXNzYWdlIGFyZ3VtZW50Jyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFjb25kaXRpb24pIHtcbiAgICB2YXIgZXJyb3I7XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlcnJvciA9IG5ldyBFcnJvcignTWluaWZpZWQgZXhjZXB0aW9uIG9jY3VycmVkOyB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgJyArICdmb3IgdGhlIGZ1bGwgZXJyb3IgbWVzc2FnZSBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLicpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgYXJncyA9IFthLCBiLCBjLCBkLCBlLCBmXTtcbiAgICAgIHZhciBhcmdJbmRleCA9IDA7XG4gICAgICBlcnJvciA9IG5ldyBFcnJvcihmb3JtYXQucmVwbGFjZSgvJXMvZywgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gYXJnc1thcmdJbmRleCsrXTtcbiAgICAgIH0pKTtcbiAgICAgIGVycm9yLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgfVxuXG4gICAgZXJyb3IuZnJhbWVzVG9Qb3AgPSAxOyAvLyB3ZSBkb24ndCBjYXJlIGFib3V0IGludmFyaWFudCdzIG93biBmcmFtZVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW52YXJpYW50O1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L2ZianMvbGliL2ludmFyaWFudC5qc1xuICoqIG1vZHVsZSBpZCA9IDIxXG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMualF1ZXJ5ID0gZXhwb3J0cy5hbmltYXRpb24gPSB1bmRlZmluZWQ7XG5cbnZhciBfcmVhY3QgPSByZXF1aXJlKFwicmVhY3RcIik7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX3JlYWN0QWRkb25zVXBkYXRlID0gcmVxdWlyZShcInJlYWN0LWFkZG9ucy11cGRhdGVcIik7XG5cbnZhciBfcmVhY3RBZGRvbnNVcGRhdGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3RBZGRvbnNVcGRhdGUpO1xuXG52YXIgX2NsYXNzbmFtZXMgPSByZXF1aXJlKFwiY2xhc3NuYW1lc1wiKTtcblxudmFyIF9jbGFzc25hbWVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NsYXNzbmFtZXMpO1xuXG52YXIgX2FuaW1hdGlvbk1peGluID0gcmVxdWlyZShcIi4vYW5pbWF0aW9uTWl4aW5cIik7XG5cbnZhciBfYW5pbWF0aW9uTWl4aW4yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYW5pbWF0aW9uTWl4aW4pO1xuXG52YXIgX2pRdWVyeU1peGluID0gcmVxdWlyZShcIi4valF1ZXJ5TWl4aW5cIik7XG5cbnZhciBfalF1ZXJ5TWl4aW4yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfalF1ZXJ5TWl4aW4pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBub29wKCkge31cblxudmFyIFRvYXN0TWVzc2FnZVNwZWMgPSB7XG4gIGRpc3BsYXlOYW1lOiBcIlRvYXN0TWVzc2FnZVwiLFxuXG4gIGdldERlZmF1bHRQcm9wczogZnVuY3Rpb24gZ2V0RGVmYXVsdFByb3BzKCkge1xuICAgIHZhciBpY29uQ2xhc3NOYW1lcyA9IHtcbiAgICAgIGVycm9yOiBcInRvYXN0LWVycm9yXCIsXG4gICAgICBpbmZvOiBcInRvYXN0LWluZm9cIixcbiAgICAgIHN1Y2Nlc3M6IFwidG9hc3Qtc3VjY2Vzc1wiLFxuICAgICAgd2FybmluZzogXCJ0b2FzdC13YXJuaW5nXCJcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNsYXNzTmFtZTogXCJ0b2FzdFwiLFxuICAgICAgaWNvbkNsYXNzTmFtZXM6IGljb25DbGFzc05hbWVzLFxuICAgICAgdGl0bGVDbGFzc05hbWU6IFwidG9hc3QtdGl0bGVcIixcbiAgICAgIG1lc3NhZ2VDbGFzc05hbWU6IFwidG9hc3QtbWVzc2FnZVwiLFxuICAgICAgdGFwVG9EaXNtaXNzOiB0cnVlLFxuICAgICAgY2xvc2VCdXR0b246IGZhbHNlXG4gICAgfTtcbiAgfSxcbiAgaGFuZGxlT25DbGljazogZnVuY3Rpb24gaGFuZGxlT25DbGljayhldmVudCkge1xuICAgIHRoaXMucHJvcHMuaGFuZGxlT25DbGljayhldmVudCk7XG4gICAgaWYgKHRoaXMucHJvcHMudGFwVG9EaXNtaXNzKSB7XG4gICAgICB0aGlzLmhpZGVUb2FzdCh0cnVlKTtcbiAgICB9XG4gIH0sXG4gIF9oYW5kbGVfY2xvc2VfYnV0dG9uX2NsaWNrOiBmdW5jdGlvbiBfaGFuZGxlX2Nsb3NlX2J1dHRvbl9jbGljayhldmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaGlkZVRvYXN0KHRydWUpO1xuICB9LFxuICBfaGFuZGxlX3JlbW92ZTogZnVuY3Rpb24gX2hhbmRsZV9yZW1vdmUoKSB7XG4gICAgdGhpcy5wcm9wcy5oYW5kbGVSZW1vdmUodGhpcy5wcm9wcy50b2FzdElkKTtcbiAgfSxcbiAgX3JlbmRlcl9jbG9zZV9idXR0b246IGZ1bmN0aW9uIF9yZW5kZXJfY2xvc2VfYnV0dG9uKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNsb3NlQnV0dG9uID8gX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwge1xuICAgICAgY2xhc3NOYW1lOiBcInRvYXN0LWNsb3NlLWJ1dHRvblwiLCByb2xlOiBcImJ1dHRvblwiLFxuICAgICAgb25DbGljazogdGhpcy5faGFuZGxlX2Nsb3NlX2J1dHRvbl9jbGljayxcbiAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOiB7IF9faHRtbDogXCImdGltZXM7XCIgfVxuICAgIH0pIDogZmFsc2U7XG4gIH0sXG4gIF9yZW5kZXJfdGl0bGVfZWxlbWVudDogZnVuY3Rpb24gX3JlbmRlcl90aXRsZV9lbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnRpdGxlID8gX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICBcImRpdlwiLFxuICAgICAgeyBjbGFzc05hbWU6IHRoaXMucHJvcHMudGl0bGVDbGFzc05hbWUgfSxcbiAgICAgIHRoaXMucHJvcHMudGl0bGVcbiAgICApIDogZmFsc2U7XG4gIH0sXG4gIF9yZW5kZXJfbWVzc2FnZV9lbGVtZW50OiBmdW5jdGlvbiBfcmVuZGVyX21lc3NhZ2VfZWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tZXNzYWdlID8gX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICBcImRpdlwiLFxuICAgICAgeyBjbGFzc05hbWU6IHRoaXMucHJvcHMubWVzc2FnZUNsYXNzTmFtZSB9LFxuICAgICAgdGhpcy5wcm9wcy5tZXNzYWdlXG4gICAgKSA6IGZhbHNlO1xuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgaWNvbkNsYXNzTmFtZSA9IHRoaXMucHJvcHMuaWNvbkNsYXNzTmFtZSB8fCB0aGlzLnByb3BzLmljb25DbGFzc05hbWVzW3RoaXMucHJvcHMudHlwZV07XG5cbiAgICByZXR1cm4gX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICBcImRpdlwiLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICgwLCBfY2xhc3NuYW1lczIuZGVmYXVsdCkodGhpcy5wcm9wcy5jbGFzc05hbWUsIGljb25DbGFzc05hbWUpLFxuICAgICAgICBzdHlsZTogdGhpcy5wcm9wcy5zdHlsZSxcbiAgICAgICAgb25DbGljazogdGhpcy5oYW5kbGVPbkNsaWNrLFxuICAgICAgICBvbk1vdXNlRW50ZXI6IHRoaXMuaGFuZGxlTW91c2VFbnRlcixcbiAgICAgICAgb25Nb3VzZUxlYXZlOiB0aGlzLmhhbmRsZU1vdXNlTGVhdmVcbiAgICAgIH0sXG4gICAgICB0aGlzLl9yZW5kZXJfY2xvc2VfYnV0dG9uKCksXG4gICAgICB0aGlzLl9yZW5kZXJfdGl0bGVfZWxlbWVudCgpLFxuICAgICAgdGhpcy5fcmVuZGVyX21lc3NhZ2VfZWxlbWVudCgpXG4gICAgKTtcbiAgfVxufTtcblxudmFyIGFuaW1hdGlvbiA9IGV4cG9ydHMuYW5pbWF0aW9uID0gX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUNsYXNzKCgwLCBfcmVhY3RBZGRvbnNVcGRhdGUyLmRlZmF1bHQpKFRvYXN0TWVzc2FnZVNwZWMsIHtcbiAgZGlzcGxheU5hbWU6IHsgJHNldDogXCJUb2FzdE1lc3NhZ2UuYW5pbWF0aW9uXCIgfSxcbiAgbWl4aW5zOiB7ICRzZXQ6IFtfYW5pbWF0aW9uTWl4aW4yLmRlZmF1bHRdIH1cbn0pKTtcblxudmFyIGpRdWVyeSA9IGV4cG9ydHMualF1ZXJ5ID0gX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUNsYXNzKCgwLCBfcmVhY3RBZGRvbnNVcGRhdGUyLmRlZmF1bHQpKFRvYXN0TWVzc2FnZVNwZWMsIHtcbiAgZGlzcGxheU5hbWU6IHsgJHNldDogXCJUb2FzdE1lc3NhZ2UualF1ZXJ5XCIgfSxcbiAgbWl4aW5zOiB7ICRzZXQ6IFtfalF1ZXJ5TWl4aW4yLmRlZmF1bHRdIH1cbn0pKTtcblxuLypcbiAqIGFzc2lnbiBkZWZhdWx0IG5vb3AgZnVuY3Rpb25zXG4gKi9cblRvYXN0TWVzc2FnZVNwZWMuaGFuZGxlTW91c2VFbnRlciA9IG5vb3A7XG5Ub2FzdE1lc3NhZ2VTcGVjLmhhbmRsZU1vdXNlTGVhdmUgPSBub29wO1xuVG9hc3RNZXNzYWdlU3BlYy5oaWRlVG9hc3QgPSBub29wO1xuXG52YXIgVG9hc3RNZXNzYWdlID0gX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUNsYXNzKFRvYXN0TWVzc2FnZVNwZWMpO1xuXG5Ub2FzdE1lc3NhZ2UuYW5pbWF0aW9uID0gYW5pbWF0aW9uO1xuVG9hc3RNZXNzYWdlLmpRdWVyeSA9IGpRdWVyeTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gVG9hc3RNZXNzYWdlO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L3JlYWN0LXRvYXN0ci9saWIvVG9hc3RNZXNzYWdlL2luZGV4LmpzXG4gKiogbW9kdWxlIGlkID0gMjJcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX1JlYWN0VHJhbnNpdGlvbkV2ZW50cyA9IHJlcXVpcmUoXCJyZWFjdC9saWIvUmVhY3RUcmFuc2l0aW9uRXZlbnRzXCIpO1xuXG52YXIgX1JlYWN0VHJhbnNpdGlvbkV2ZW50czIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9SZWFjdFRyYW5zaXRpb25FdmVudHMpO1xuXG52YXIgX3JlYWN0RG9tID0gcmVxdWlyZShcInJlYWN0LWRvbVwiKTtcblxudmFyIF9yZWFjdERvbTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdERvbSk7XG5cbnZhciBfZWxlbWVudENsYXNzID0gcmVxdWlyZShcImVsZW1lbnQtY2xhc3NcIik7XG5cbnZhciBfZWxlbWVudENsYXNzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2VsZW1lbnRDbGFzcyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBUSUNLID0gMTc7XG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICBnZXREZWZhdWx0UHJvcHM6IGZ1bmN0aW9uIGdldERlZmF1bHRQcm9wcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHJhbnNpdGlvbjogbnVsbCwgLy8gc29tZSBleGFtcGxlcyBkZWZpbmVkIGluIGluZGV4LnNjc3MgKHNjYWxlLCBmYWRlSW5PdXQsIHJvdGF0ZSlcbiAgICAgIHNob3dBbmltYXRpb246IFwiYW5pbWF0ZWQgYm91bmNlSW5cIiwgLy8gb3Igb3RoZXIgYW5pbWF0aW9ucyBmcm9tIGFuaW1hdGUuY3NzXG4gICAgICBoaWRlQW5pbWF0aW9uOiBcImFuaW1hdGVkIGJvdW5jZU91dFwiLFxuICAgICAgdGltZU91dDogNTAwMCxcbiAgICAgIGV4dGVuZGVkVGltZU91dDogMTAwMFxuICAgIH07XG4gIH0sXG4gIGNvbXBvbmVudFdpbGxNb3VudDogZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkge1xuICAgIHRoaXMuY2xhc3NOYW1lUXVldWUgPSBbXTtcbiAgICB0aGlzLmlzSGlkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5pbnRlcnZhbElkID0gbnVsbDtcbiAgfSxcbiAgY29tcG9uZW50RGlkTW91bnQ6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLl9pc19tb3VudGVkID0gdHJ1ZTtcbiAgICB0aGlzLl9zaG93KCk7XG4gICAgdmFyIG5vZGUgPSBfcmVhY3REb20yLmRlZmF1bHQuZmluZERPTU5vZGUodGhpcyk7XG5cbiAgICB2YXIgb25IaWRlQ29tcGxldGUgPSBmdW5jdGlvbiBvbkhpZGVDb21wbGV0ZSgpIHtcbiAgICAgIGlmIChfdGhpcy5pc0hpZGluZykge1xuICAgICAgICBfdGhpcy5fc2V0X2lzX2hpZGluZyhmYWxzZSk7XG4gICAgICAgIF9SZWFjdFRyYW5zaXRpb25FdmVudHMyLmRlZmF1bHQucmVtb3ZlRW5kRXZlbnRMaXN0ZW5lcihub2RlLCBvbkhpZGVDb21wbGV0ZSk7XG4gICAgICAgIF90aGlzLl9oYW5kbGVfcmVtb3ZlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBfUmVhY3RUcmFuc2l0aW9uRXZlbnRzMi5kZWZhdWx0LmFkZEVuZEV2ZW50TGlzdGVuZXIobm9kZSwgb25IaWRlQ29tcGxldGUpO1xuXG4gICAgaWYgKHRoaXMucHJvcHMudGltZU91dCA+IDApIHtcbiAgICAgIHRoaXMuX3NldF9pbnRlcnZhbF9pZChzZXRUaW1lb3V0KHRoaXMuaGlkZVRvYXN0LCB0aGlzLnByb3BzLnRpbWVPdXQpKTtcbiAgICB9XG4gIH0sXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50OiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLl9pc19tb3VudGVkID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuaW50ZXJ2YWxJZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuaW50ZXJ2YWxJZCk7XG4gICAgfVxuICB9LFxuICBfc2V0X3RyYW5zaXRpb246IGZ1bmN0aW9uIF9zZXRfdHJhbnNpdGlvbihoaWRlKSB7XG4gICAgdmFyIGFuaW1hdGlvblR5cGUgPSBoaWRlID8gXCJsZWF2ZVwiIDogXCJlbnRlclwiO1xuICAgIHZhciBub2RlID0gX3JlYWN0RG9tMi5kZWZhdWx0LmZpbmRET01Ob2RlKHRoaXMpO1xuICAgIHZhciBjbGFzc05hbWUgPSB0aGlzLnByb3BzLnRyYW5zaXRpb24gKyBcIi1cIiArIGFuaW1hdGlvblR5cGU7XG4gICAgdmFyIGFjdGl2ZUNsYXNzTmFtZSA9IGNsYXNzTmFtZSArIFwiLWFjdGl2ZVwiO1xuXG4gICAgdmFyIGVuZExpc3RlbmVyID0gZnVuY3Rpb24gZW5kTGlzdGVuZXIoZSkge1xuICAgICAgaWYgKGUgJiYgZS50YXJnZXQgIT09IG5vZGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgY2xhc3NMaXN0ID0gKDAsIF9lbGVtZW50Q2xhc3MyLmRlZmF1bHQpKG5vZGUpO1xuICAgICAgY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpO1xuICAgICAgY2xhc3NMaXN0LnJlbW92ZShhY3RpdmVDbGFzc05hbWUpO1xuXG4gICAgICBfUmVhY3RUcmFuc2l0aW9uRXZlbnRzMi5kZWZhdWx0LnJlbW92ZUVuZEV2ZW50TGlzdGVuZXIobm9kZSwgZW5kTGlzdGVuZXIpO1xuICAgIH07XG5cbiAgICBfUmVhY3RUcmFuc2l0aW9uRXZlbnRzMi5kZWZhdWx0LmFkZEVuZEV2ZW50TGlzdGVuZXIobm9kZSwgZW5kTGlzdGVuZXIpO1xuXG4gICAgKDAsIF9lbGVtZW50Q2xhc3MyLmRlZmF1bHQpKG5vZGUpLmFkZChjbGFzc05hbWUpO1xuXG4gICAgLy8gTmVlZCB0byBkbyB0aGlzIHRvIGFjdHVhbGx5IHRyaWdnZXIgYSB0cmFuc2l0aW9uLlxuICAgIHRoaXMuX3F1ZXVlX2NsYXNzKGFjdGl2ZUNsYXNzTmFtZSk7XG4gIH0sXG4gIF9jbGVhcl90cmFuc2l0aW9uOiBmdW5jdGlvbiBfY2xlYXJfdHJhbnNpdGlvbihoaWRlKSB7XG4gICAgdmFyIG5vZGUgPSBfcmVhY3REb20yLmRlZmF1bHQuZmluZERPTU5vZGUodGhpcyk7XG4gICAgdmFyIGFuaW1hdGlvblR5cGUgPSBoaWRlID8gXCJsZWF2ZVwiIDogXCJlbnRlclwiO1xuICAgIHZhciBjbGFzc05hbWUgPSB0aGlzLnByb3BzLnRyYW5zaXRpb24gKyBcIi1cIiArIGFuaW1hdGlvblR5cGU7XG4gICAgdmFyIGFjdGl2ZUNsYXNzTmFtZSA9IGNsYXNzTmFtZSArIFwiLWFjdGl2ZVwiO1xuXG4gICAgdmFyIGNsYXNzTGlzdCA9ICgwLCBfZWxlbWVudENsYXNzMi5kZWZhdWx0KShub2RlKTtcbiAgICBjbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7XG4gICAgY2xhc3NMaXN0LnJlbW92ZShhY3RpdmVDbGFzc05hbWUpO1xuICB9LFxuICBfc2V0X2FuaW1hdGlvbjogZnVuY3Rpb24gX3NldF9hbmltYXRpb24oaGlkZSkge1xuICAgIHZhciBub2RlID0gX3JlYWN0RG9tMi5kZWZhdWx0LmZpbmRET01Ob2RlKHRoaXMpO1xuICAgIHZhciBhbmltYXRpb25zID0gdGhpcy5fZ2V0X2FuaW1hdGlvbl9jbGFzc2VzKGhpZGUpO1xuICAgIHZhciBlbmRMaXN0ZW5lciA9IGZ1bmN0aW9uIGVuZExpc3RlbmVyKGUpIHtcbiAgICAgIGlmIChlICYmIGUudGFyZ2V0ICE9PSBub2RlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYW5pbWF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChhbmltKSB7XG4gICAgICAgIHJldHVybiAoMCwgX2VsZW1lbnRDbGFzczIuZGVmYXVsdCkobm9kZSkucmVtb3ZlKGFuaW0pO1xuICAgICAgfSk7XG5cbiAgICAgIF9SZWFjdFRyYW5zaXRpb25FdmVudHMyLmRlZmF1bHQucmVtb3ZlRW5kRXZlbnRMaXN0ZW5lcihub2RlLCBlbmRMaXN0ZW5lcik7XG4gICAgfTtcblxuICAgIF9SZWFjdFRyYW5zaXRpb25FdmVudHMyLmRlZmF1bHQuYWRkRW5kRXZlbnRMaXN0ZW5lcihub2RlLCBlbmRMaXN0ZW5lcik7XG5cbiAgICBhbmltYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKGFuaW0pIHtcbiAgICAgIHJldHVybiAoMCwgX2VsZW1lbnRDbGFzczIuZGVmYXVsdCkobm9kZSkuYWRkKGFuaW0pO1xuICAgIH0pO1xuICB9LFxuICBfZ2V0X2FuaW1hdGlvbl9jbGFzc2VzOiBmdW5jdGlvbiBfZ2V0X2FuaW1hdGlvbl9jbGFzc2VzKGhpZGUpIHtcbiAgICB2YXIgYW5pbWF0aW9ucyA9IGhpZGUgPyB0aGlzLnByb3BzLmhpZGVBbmltYXRpb24gOiB0aGlzLnByb3BzLnNob3dBbmltYXRpb247XG4gICAgaWYgKFwiW29iamVjdCBBcnJheV1cIiA9PT0gdG9TdHJpbmcuY2FsbChhbmltYXRpb25zKSkge1xuICAgICAgcmV0dXJuIGFuaW1hdGlvbnM7XG4gICAgfSBlbHNlIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgYW5pbWF0aW9ucykge1xuICAgICAgcmV0dXJuIGFuaW1hdGlvbnMuc3BsaXQoXCIgXCIpO1xuICAgIH1cbiAgfSxcbiAgX2NsZWFyX2FuaW1hdGlvbjogZnVuY3Rpb24gX2NsZWFyX2FuaW1hdGlvbihoaWRlKSB7XG4gICAgdmFyIG5vZGUgPSBfcmVhY3REb20yLmRlZmF1bHQuZmluZERPTU5vZGUodGhpcyk7XG4gICAgdmFyIGFuaW1hdGlvbnMgPSB0aGlzLl9nZXRfYW5pbWF0aW9uX2NsYXNzZXMoaGlkZSk7XG4gICAgYW5pbWF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChhbmltYXRpb24pIHtcbiAgICAgIHJldHVybiAoMCwgX2VsZW1lbnRDbGFzczIuZGVmYXVsdCkobm9kZSkucmVtb3ZlKGFuaW1hdGlvbik7XG4gICAgfSk7XG4gIH0sXG4gIF9xdWV1ZV9jbGFzczogZnVuY3Rpb24gX3F1ZXVlX2NsYXNzKGNsYXNzTmFtZSkge1xuICAgIHRoaXMuY2xhc3NOYW1lUXVldWUucHVzaChjbGFzc05hbWUpO1xuXG4gICAgaWYgKCF0aGlzLnRpbWVvdXQpIHtcbiAgICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQodGhpcy5fZmx1c2hfY2xhc3NfbmFtZV9xdWV1ZSwgVElDSyk7XG4gICAgfVxuICB9LFxuICBfZmx1c2hfY2xhc3NfbmFtZV9xdWV1ZTogZnVuY3Rpb24gX2ZsdXNoX2NsYXNzX25hbWVfcXVldWUoKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICBpZiAodGhpcy5faXNfbW91bnRlZCkge1xuICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBfcmVhY3REb20yLmRlZmF1bHQuZmluZERPTU5vZGUoX3RoaXMyKTtcbiAgICAgICAgX3RoaXMyLmNsYXNzTmFtZVF1ZXVlLmZvckVhY2goZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xuICAgICAgICAgIHJldHVybiAoMCwgX2VsZW1lbnRDbGFzczIuZGVmYXVsdCkobm9kZSkuYWRkKGNsYXNzTmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSkoKTtcbiAgICB9XG4gICAgdGhpcy5jbGFzc05hbWVRdWV1ZS5sZW5ndGggPSAwO1xuICAgIHRoaXMudGltZW91dCA9IG51bGw7XG4gIH0sXG4gIF9zaG93OiBmdW5jdGlvbiBfc2hvdygpIHtcbiAgICBpZiAodGhpcy5wcm9wcy50cmFuc2l0aW9uKSB7XG4gICAgICB0aGlzLl9zZXRfdHJhbnNpdGlvbigpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5zaG93QW5pbWF0aW9uKSB7XG4gICAgICB0aGlzLl9zZXRfYW5pbWF0aW9uKCk7XG4gICAgfVxuICB9LFxuICBoYW5kbGVNb3VzZUVudGVyOiBmdW5jdGlvbiBoYW5kbGVNb3VzZUVudGVyKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmludGVydmFsSWQpO1xuICAgIHRoaXMuX3NldF9pbnRlcnZhbF9pZChudWxsKTtcbiAgICBpZiAodGhpcy5pc0hpZGluZykge1xuICAgICAgdGhpcy5fc2V0X2lzX2hpZGluZyhmYWxzZSk7XG5cbiAgICAgIGlmICh0aGlzLnByb3BzLmhpZGVBbmltYXRpb24pIHtcbiAgICAgICAgdGhpcy5fY2xlYXJfYW5pbWF0aW9uKHRydWUpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnRyYW5zaXRpb24pIHtcbiAgICAgICAgdGhpcy5fY2xlYXJfdHJhbnNpdGlvbih0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGhhbmRsZU1vdXNlTGVhdmU6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlTGVhdmUoKSB7XG4gICAgaWYgKCF0aGlzLmlzSGlkaW5nICYmICh0aGlzLnByb3BzLnRpbWVPdXQgPiAwIHx8IHRoaXMucHJvcHMuZXh0ZW5kZWRUaW1lT3V0ID4gMCkpIHtcbiAgICAgIHRoaXMuX3NldF9pbnRlcnZhbF9pZChzZXRUaW1lb3V0KHRoaXMuaGlkZVRvYXN0LCB0aGlzLnByb3BzLmV4dGVuZGVkVGltZU91dCkpO1xuICAgIH1cbiAgfSxcbiAgaGlkZVRvYXN0OiBmdW5jdGlvbiBoaWRlVG9hc3Qob3ZlcnJpZGUpIHtcbiAgICBpZiAodGhpcy5pc0hpZGluZyB8fCB0aGlzLmludGVydmFsSWQgPT09IG51bGwgJiYgIW92ZXJyaWRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fc2V0X2lzX2hpZGluZyh0cnVlKTtcbiAgICBpZiAodGhpcy5wcm9wcy50cmFuc2l0aW9uKSB7XG4gICAgICB0aGlzLl9zZXRfdHJhbnNpdGlvbih0cnVlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuaGlkZUFuaW1hdGlvbikge1xuICAgICAgdGhpcy5fc2V0X2FuaW1hdGlvbih0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faGFuZGxlX3JlbW92ZSgpO1xuICAgIH1cbiAgfSxcbiAgX3NldF9pbnRlcnZhbF9pZDogZnVuY3Rpb24gX3NldF9pbnRlcnZhbF9pZChpbnRlcnZhbElkKSB7XG4gICAgdGhpcy5pbnRlcnZhbElkID0gaW50ZXJ2YWxJZDtcbiAgfSxcbiAgX3NldF9pc19oaWRpbmc6IGZ1bmN0aW9uIF9zZXRfaXNfaGlkaW5nKGlzSGlkaW5nKSB7XG4gICAgdGhpcy5pc0hpZGluZyA9IGlzSGlkaW5nO1xuICB9XG59O1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L3JlYWN0LXRvYXN0ci9saWIvVG9hc3RNZXNzYWdlL2FuaW1hdGlvbk1peGluLmpzXG4gKiogbW9kdWxlIGlkID0gMjNcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFRyYW5zaXRpb25FdmVudHNcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoJ2ZianMvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50Jyk7XG5cbi8qKlxuICogRVZFTlRfTkFNRV9NQVAgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggZXZlbnQgZmlyZWQgd2hlbiBhXG4gKiB0cmFuc2l0aW9uL2FuaW1hdGlvbiBlbmRzLCBiYXNlZCBvbiB0aGUgc3R5bGUgcHJvcGVydHkgdXNlZCB0b1xuICogZGVmaW5lIHRoYXQgZXZlbnQuXG4gKi9cbnZhciBFVkVOVF9OQU1FX01BUCA9IHtcbiAgdHJhbnNpdGlvbmVuZDoge1xuICAgICd0cmFuc2l0aW9uJzogJ3RyYW5zaXRpb25lbmQnLFxuICAgICdXZWJraXRUcmFuc2l0aW9uJzogJ3dlYmtpdFRyYW5zaXRpb25FbmQnLFxuICAgICdNb3pUcmFuc2l0aW9uJzogJ21velRyYW5zaXRpb25FbmQnLFxuICAgICdPVHJhbnNpdGlvbic6ICdvVHJhbnNpdGlvbkVuZCcsXG4gICAgJ21zVHJhbnNpdGlvbic6ICdNU1RyYW5zaXRpb25FbmQnXG4gIH0sXG5cbiAgYW5pbWF0aW9uZW5kOiB7XG4gICAgJ2FuaW1hdGlvbic6ICdhbmltYXRpb25lbmQnLFxuICAgICdXZWJraXRBbmltYXRpb24nOiAnd2Via2l0QW5pbWF0aW9uRW5kJyxcbiAgICAnTW96QW5pbWF0aW9uJzogJ21vekFuaW1hdGlvbkVuZCcsXG4gICAgJ09BbmltYXRpb24nOiAnb0FuaW1hdGlvbkVuZCcsXG4gICAgJ21zQW5pbWF0aW9uJzogJ01TQW5pbWF0aW9uRW5kJ1xuICB9XG59O1xuXG52YXIgZW5kRXZlbnRzID0gW107XG5cbmZ1bmN0aW9uIGRldGVjdEV2ZW50cygpIHtcbiAgdmFyIHRlc3RFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICB2YXIgc3R5bGUgPSB0ZXN0RWwuc3R5bGU7XG5cbiAgLy8gT24gc29tZSBwbGF0Zm9ybXMsIGluIHBhcnRpY3VsYXIgc29tZSByZWxlYXNlcyBvZiBBbmRyb2lkIDQueCxcbiAgLy8gdGhlIHVuLXByZWZpeGVkIFwiYW5pbWF0aW9uXCIgYW5kIFwidHJhbnNpdGlvblwiIHByb3BlcnRpZXMgYXJlIGRlZmluZWQgb24gdGhlXG4gIC8vIHN0eWxlIG9iamVjdCBidXQgdGhlIGV2ZW50cyB0aGF0IGZpcmUgd2lsbCBzdGlsbCBiZSBwcmVmaXhlZCwgc28gd2UgbmVlZFxuICAvLyB0byBjaGVjayBpZiB0aGUgdW4tcHJlZml4ZWQgZXZlbnRzIGFyZSB1c2VhYmxlLCBhbmQgaWYgbm90IHJlbW92ZSB0aGVtXG4gIC8vIGZyb20gdGhlIG1hcFxuICBpZiAoISgnQW5pbWF0aW9uRXZlbnQnIGluIHdpbmRvdykpIHtcbiAgICBkZWxldGUgRVZFTlRfTkFNRV9NQVAuYW5pbWF0aW9uZW5kLmFuaW1hdGlvbjtcbiAgfVxuXG4gIGlmICghKCdUcmFuc2l0aW9uRXZlbnQnIGluIHdpbmRvdykpIHtcbiAgICBkZWxldGUgRVZFTlRfTkFNRV9NQVAudHJhbnNpdGlvbmVuZC50cmFuc2l0aW9uO1xuICB9XG5cbiAgZm9yICh2YXIgYmFzZUV2ZW50TmFtZSBpbiBFVkVOVF9OQU1FX01BUCkge1xuICAgIHZhciBiYXNlRXZlbnRzID0gRVZFTlRfTkFNRV9NQVBbYmFzZUV2ZW50TmFtZV07XG4gICAgZm9yICh2YXIgc3R5bGVOYW1lIGluIGJhc2VFdmVudHMpIHtcbiAgICAgIGlmIChzdHlsZU5hbWUgaW4gc3R5bGUpIHtcbiAgICAgICAgZW5kRXZlbnRzLnB1c2goYmFzZUV2ZW50c1tzdHlsZU5hbWVdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmlmIChFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00pIHtcbiAgZGV0ZWN0RXZlbnRzKCk7XG59XG5cbi8vIFdlIHVzZSB0aGUgcmF3IHthZGR8cmVtb3ZlfUV2ZW50TGlzdGVuZXIoKSBjYWxsIGJlY2F1c2UgRXZlbnRMaXN0ZW5lclxuLy8gZG9lcyBub3Qga25vdyBob3cgdG8gcmVtb3ZlIGV2ZW50IGxpc3RlbmVycyBhbmQgd2UgcmVhbGx5IHNob3VsZFxuLy8gY2xlYW4gdXAuIEFsc28sIHRoZXNlIGV2ZW50cyBhcmUgbm90IHRyaWdnZXJlZCBpbiBvbGRlciBicm93c2Vyc1xuLy8gc28gd2Ugc2hvdWxkIGJlIEEtT0sgaGVyZS5cblxuZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcihub2RlLCBldmVudE5hbWUsIGV2ZW50TGlzdGVuZXIpIHtcbiAgbm9kZS5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZXZlbnRMaXN0ZW5lciwgZmFsc2UpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVyKG5vZGUsIGV2ZW50TmFtZSwgZXZlbnRMaXN0ZW5lcikge1xuICBub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBldmVudExpc3RlbmVyLCBmYWxzZSk7XG59XG5cbnZhciBSZWFjdFRyYW5zaXRpb25FdmVudHMgPSB7XG4gIGFkZEVuZEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uIChub2RlLCBldmVudExpc3RlbmVyKSB7XG4gICAgaWYgKGVuZEV2ZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIElmIENTUyB0cmFuc2l0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCwgdHJpZ2dlciBhbiBcImVuZCBhbmltYXRpb25cIlxuICAgICAgLy8gZXZlbnQgaW1tZWRpYXRlbHkuXG4gICAgICB3aW5kb3cuc2V0VGltZW91dChldmVudExpc3RlbmVyLCAwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZW5kRXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGVuZEV2ZW50KSB7XG4gICAgICBhZGRFdmVudExpc3RlbmVyKG5vZGUsIGVuZEV2ZW50LCBldmVudExpc3RlbmVyKTtcbiAgICB9KTtcbiAgfSxcblxuICByZW1vdmVFbmRFdmVudExpc3RlbmVyOiBmdW5jdGlvbiAobm9kZSwgZXZlbnRMaXN0ZW5lcikge1xuICAgIGlmIChlbmRFdmVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVuZEV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChlbmRFdmVudCkge1xuICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcihub2RlLCBlbmRFdmVudCwgZXZlbnRMaXN0ZW5lcik7XG4gICAgfSk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RUcmFuc2l0aW9uRXZlbnRzO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L3JlYWN0L2xpYi9SZWFjdFRyYW5zaXRpb25FdmVudHMuanNcbiAqKiBtb2R1bGUgaWQgPSAyNFxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIEV4ZWN1dGlvbkVudmlyb25tZW50XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FuVXNlRE9NID0gISEodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxuLyoqXG4gKiBTaW1wbGUsIGxpZ2h0d2VpZ2h0IG1vZHVsZSBhc3Npc3Rpbmcgd2l0aCB0aGUgZGV0ZWN0aW9uIGFuZCBjb250ZXh0IG9mXG4gKiBXb3JrZXIuIEhlbHBzIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcyBhbmQgYWxsb3dzIGNvZGUgdG8gcmVhc29uIGFib3V0XG4gKiB3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSBpbiBhIFdvcmtlciwgZXZlbiBpZiB0aGV5IG5ldmVyIGluY2x1ZGUgdGhlIG1haW5cbiAqIGBSZWFjdFdvcmtlcmAgZGVwZW5kZW5jeS5cbiAqL1xudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0ge1xuXG4gIGNhblVzZURPTTogY2FuVXNlRE9NLFxuXG4gIGNhblVzZVdvcmtlcnM6IHR5cGVvZiBXb3JrZXIgIT09ICd1bmRlZmluZWQnLFxuXG4gIGNhblVzZUV2ZW50TGlzdGVuZXJzOiBjYW5Vc2VET00gJiYgISEod2luZG93LmFkZEV2ZW50TGlzdGVuZXIgfHwgd2luZG93LmF0dGFjaEV2ZW50KSxcblxuICBjYW5Vc2VWaWV3cG9ydDogY2FuVXNlRE9NICYmICEhd2luZG93LnNjcmVlbixcblxuICBpc0luV29ya2VyOiAhY2FuVXNlRE9NIC8vIEZvciBub3csIHRoaXMgaXMgdHJ1ZSAtIG1pZ2h0IGNoYW5nZSBpbiB0aGUgZnV0dXJlLlxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEV4ZWN1dGlvbkVudmlyb25tZW50O1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L2ZianMvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50LmpzXG4gKiogbW9kdWxlIGlkID0gMjVcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob3B0cykge1xuICByZXR1cm4gbmV3IEVsZW1lbnRDbGFzcyhvcHRzKVxufVxuXG5mdW5jdGlvbiBpbmRleE9mKGFyciwgcHJvcCkge1xuICBpZiAoYXJyLmluZGV4T2YpIHJldHVybiBhcnIuaW5kZXhPZihwcm9wKVxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gYXJyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKVxuICAgIGlmIChhcnJbaV0gPT09IHByb3ApIHJldHVybiBpXG4gIHJldHVybiAtMVxufVxuXG5mdW5jdGlvbiBFbGVtZW50Q2xhc3Mob3B0cykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRWxlbWVudENsYXNzKSkgcmV0dXJuIG5ldyBFbGVtZW50Q2xhc3Mob3B0cylcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIGlmICghb3B0cykgb3B0cyA9IHt9XG5cbiAgLy8gc2ltaWxhciBkb2luZyBpbnN0YW5jZW9mIEhUTUxFbGVtZW50IGJ1dCB3b3JrcyBpbiBJRThcbiAgaWYgKG9wdHMubm9kZVR5cGUpIG9wdHMgPSB7ZWw6IG9wdHN9XG5cbiAgdGhpcy5vcHRzID0gb3B0c1xuICB0aGlzLmVsID0gb3B0cy5lbCB8fCBkb2N1bWVudC5ib2R5XG4gIGlmICh0eXBlb2YgdGhpcy5lbCAhPT0gJ29iamVjdCcpIHRoaXMuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZWwpXG59XG5cbkVsZW1lbnRDbGFzcy5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24oY2xhc3NOYW1lKSB7XG4gIHZhciBlbCA9IHRoaXMuZWxcbiAgaWYgKCFlbCkgcmV0dXJuXG4gIGlmIChlbC5jbGFzc05hbWUgPT09IFwiXCIpIHJldHVybiBlbC5jbGFzc05hbWUgPSBjbGFzc05hbWVcbiAgdmFyIGNsYXNzZXMgPSBlbC5jbGFzc05hbWUuc3BsaXQoJyAnKVxuICBpZiAoaW5kZXhPZihjbGFzc2VzLCBjbGFzc05hbWUpID4gLTEpIHJldHVybiBjbGFzc2VzXG4gIGNsYXNzZXMucHVzaChjbGFzc05hbWUpXG4gIGVsLmNsYXNzTmFtZSA9IGNsYXNzZXMuam9pbignICcpXG4gIHJldHVybiBjbGFzc2VzXG59XG5cbkVsZW1lbnRDbGFzcy5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24oY2xhc3NOYW1lKSB7XG4gIHZhciBlbCA9IHRoaXMuZWxcbiAgaWYgKCFlbCkgcmV0dXJuXG4gIGlmIChlbC5jbGFzc05hbWUgPT09IFwiXCIpIHJldHVyblxuICB2YXIgY2xhc3NlcyA9IGVsLmNsYXNzTmFtZS5zcGxpdCgnICcpXG4gIHZhciBpZHggPSBpbmRleE9mKGNsYXNzZXMsIGNsYXNzTmFtZSlcbiAgaWYgKGlkeCA+IC0xKSBjbGFzc2VzLnNwbGljZShpZHgsIDEpXG4gIGVsLmNsYXNzTmFtZSA9IGNsYXNzZXMuam9pbignICcpXG4gIHJldHVybiBjbGFzc2VzXG59XG5cbkVsZW1lbnRDbGFzcy5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24oY2xhc3NOYW1lKSB7XG4gIHZhciBlbCA9IHRoaXMuZWxcbiAgaWYgKCFlbCkgcmV0dXJuXG4gIHZhciBjbGFzc2VzID0gZWwuY2xhc3NOYW1lLnNwbGl0KCcgJylcbiAgcmV0dXJuIGluZGV4T2YoY2xhc3NlcywgY2xhc3NOYW1lKSA+IC0xXG59XG5cbkVsZW1lbnRDbGFzcy5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24oY2xhc3NOYW1lKSB7XG4gIHZhciBlbCA9IHRoaXMuZWxcbiAgaWYgKCFlbCkgcmV0dXJuXG4gIGlmICh0aGlzLmhhcyhjbGFzc05hbWUpKSB0aGlzLnJlbW92ZShjbGFzc05hbWUpXG4gIGVsc2UgdGhpcy5hZGQoY2xhc3NOYW1lKVxufVxuXG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34vZWxlbWVudC1jbGFzcy9pbmRleC5qc1xuICoqIG1vZHVsZSBpZCA9IDI2XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9yZWFjdERvbSA9IHJlcXVpcmUoXCJyZWFjdC1kb21cIik7XG5cbnZhciBfcmVhY3REb20yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3REb20pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBjYWxsX3Nob3dfbWV0aG9kKCRub2RlLCBwcm9wcykge1xuICAkbm9kZVtwcm9wcy5zaG93TWV0aG9kXSh7XG4gICAgZHVyYXRpb246IHByb3BzLnNob3dEdXJhdGlvbixcbiAgICBlYXNpbmc6IHByb3BzLnNob3dFYXNpbmdcbiAgfSk7XG59XG5cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgZ2V0RGVmYXVsdFByb3BzOiBmdW5jdGlvbiBnZXREZWZhdWx0UHJvcHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIGRpc3BsYXk6IFwibm9uZVwiIH0sXG4gICAgICAvLyBlZmZlY3RpdmUgJC5oaWRlKClcbiAgICAgIHNob3dNZXRob2Q6IFwiZmFkZUluXCIsIC8vIHNsaWRlRG93biwgYW5kIHNob3cgYXJlIGJ1aWx0IGludG8galF1ZXJ5XG4gICAgICBzaG93RHVyYXRpb246IDMwMCxcbiAgICAgIHNob3dFYXNpbmc6IFwic3dpbmdcIiwgLy8gYW5kIGxpbmVhciBhcmUgYnVpbHQgaW50byBqUXVlcnlcbiAgICAgIGhpZGVNZXRob2Q6IFwiZmFkZU91dFwiLFxuICAgICAgaGlkZUR1cmF0aW9uOiAxMDAwLFxuICAgICAgaGlkZUVhc2luZzogXCJzd2luZ1wiLFxuICAgICAgLy9cbiAgICAgIHRpbWVPdXQ6IDUwMDAsXG4gICAgICBleHRlbmRlZFRpbWVPdXQ6IDEwMDBcbiAgICB9O1xuICB9LFxuICBnZXRJbml0aWFsU3RhdGU6IGZ1bmN0aW9uIGdldEluaXRpYWxTdGF0ZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaW50ZXJ2YWxJZDogbnVsbCxcbiAgICAgIGlzSGlkaW5nOiBmYWxzZVxuICAgIH07XG4gIH0sXG4gIGNvbXBvbmVudERpZE1vdW50OiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjYWxsX3Nob3dfbWV0aG9kKHRoaXMuX2dldF8kX25vZGUoKSwgdGhpcy5wcm9wcyk7XG4gICAgaWYgKHRoaXMucHJvcHMudGltZU91dCA+IDApIHtcbiAgICAgIHRoaXMuX3NldF9pbnRlcnZhbF9pZChzZXRUaW1lb3V0KHRoaXMuaGlkZVRvYXN0LCB0aGlzLnByb3BzLnRpbWVPdXQpKTtcbiAgICB9XG4gIH0sXG4gIGhhbmRsZU1vdXNlRW50ZXI6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlRW50ZXIoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuc3RhdGUuaW50ZXJ2YWxJZCk7XG4gICAgdGhpcy5fc2V0X2ludGVydmFsX2lkKG51bGwpO1xuICAgIHRoaXMuX3NldF9pc19oaWRpbmcoZmFsc2UpO1xuXG4gICAgY2FsbF9zaG93X21ldGhvZCh0aGlzLl9nZXRfJF9ub2RlKCkuc3RvcCh0cnVlLCB0cnVlKSwgdGhpcy5wcm9wcyk7XG4gIH0sXG4gIGhhbmRsZU1vdXNlTGVhdmU6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlTGVhdmUoKSB7XG4gICAgaWYgKCF0aGlzLnN0YXRlLmlzSGlkaW5nICYmICh0aGlzLnByb3BzLnRpbWVPdXQgPiAwIHx8IHRoaXMucHJvcHMuZXh0ZW5kZWRUaW1lT3V0ID4gMCkpIHtcbiAgICAgIHRoaXMuX3NldF9pbnRlcnZhbF9pZChzZXRUaW1lb3V0KHRoaXMuaGlkZVRvYXN0LCB0aGlzLnByb3BzLmV4dGVuZGVkVGltZU91dCkpO1xuICAgIH1cbiAgfSxcbiAgaGlkZVRvYXN0OiBmdW5jdGlvbiBoaWRlVG9hc3Qob3ZlcnJpZGUpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5pc0hpZGluZyB8fCB0aGlzLnN0YXRlLmludGVydmFsSWQgPT09IG51bGwgJiYgIW92ZXJyaWRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoeyBpc0hpZGluZzogdHJ1ZSB9KTtcblxuICAgIHRoaXMuX2dldF8kX25vZGUoKVt0aGlzLnByb3BzLmhpZGVNZXRob2RdKHtcbiAgICAgIGR1cmF0aW9uOiB0aGlzLnByb3BzLmhpZGVEdXJhdGlvbixcbiAgICAgIGVhc2luZzogdGhpcy5wcm9wcy5oaWRlRWFzaW5nLFxuICAgICAgY29tcGxldGU6IHRoaXMuX2hhbmRsZV9yZW1vdmVcbiAgICB9KTtcbiAgfSxcbiAgX2dldF8kX25vZGU6IGZ1bmN0aW9uIF9nZXRfJF9ub2RlKCkge1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG4gICAgcmV0dXJuIGpRdWVyeShfcmVhY3REb20yLmRlZmF1bHQuZmluZERPTU5vZGUodGhpcykpO1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW5kZWYgKi9cbiAgfSxcbiAgX3NldF9pbnRlcnZhbF9pZDogZnVuY3Rpb24gX3NldF9pbnRlcnZhbF9pZChpbnRlcnZhbElkKSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpbnRlcnZhbElkOiBpbnRlcnZhbElkXG4gICAgfSk7XG4gIH0sXG4gIF9zZXRfaXNfaGlkaW5nOiBmdW5jdGlvbiBfc2V0X2lzX2hpZGluZyhpc0hpZGluZykge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXNIaWRpbmc6IGlzSGlkaW5nXG4gICAgfSk7XG4gIH1cbn07XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34vcmVhY3QtdG9hc3RyL2xpYi9Ub2FzdE1lc3NhZ2UvalF1ZXJ5TWl4aW4uanNcbiAqKiBtb2R1bGUgaWQgPSAyN1xuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgUHJvcFR5cGVzIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFBhZ2VCdXR0b24gZnJvbSAnLi9QYWdlQnV0dG9uLmpzJztcbmltcG9ydCBDb25zdCBmcm9tICcuLi9Db25zdCc7XG5cbmNsYXNzIFBhZ2luYXRpb25MaXN0IGV4dGVuZHMgQ29tcG9uZW50IHtcblxuICBjaGFuZ2VQYWdlID0gcGFnZSA9PiB7XG4gICAgY29uc3QgeyBwcmVQYWdlLCBjdXJyUGFnZSwgbmV4dFBhZ2UsIGxhc3RQYWdlLCBmaXJzdFBhZ2UsIHNpemVQZXJQYWdlIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChwYWdlID09PSBwcmVQYWdlKSB7XG4gICAgICBwYWdlID0gY3VyclBhZ2UgLSAxIDwgMSA/IDEgOiBjdXJyUGFnZSAtIDE7XG4gICAgfSBlbHNlIGlmIChwYWdlID09PSBuZXh0UGFnZSkge1xuICAgICAgcGFnZSA9IGN1cnJQYWdlICsgMSA+IHRoaXMudG90YWxQYWdlcyA/IHRoaXMudG90YWxQYWdlcyA6IGN1cnJQYWdlICsgMTtcbiAgICB9IGVsc2UgaWYgKHBhZ2UgPT09IGxhc3RQYWdlKSB7XG4gICAgICBwYWdlID0gdGhpcy50b3RhbFBhZ2VzO1xuICAgIH0gZWxzZSBpZiAocGFnZSA9PT0gZmlyc3RQYWdlKSB7XG4gICAgICBwYWdlID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFnZSA9IHBhcnNlSW50KHBhZ2UsIDEwKTtcbiAgICB9XG5cbiAgICBpZiAocGFnZSAhPT0gY3VyclBhZ2UpIHtcbiAgICAgIHRoaXMucHJvcHMuY2hhbmdlUGFnZShwYWdlLCBzaXplUGVyUGFnZSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlU2l6ZVBlclBhZ2UgPSBlID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCBzZWxlY3RTaXplID0gcGFyc2VJbnQoZS5jdXJyZW50VGFyZ2V0LnRleHQsIDEwKTtcbiAgICBsZXQgeyBjdXJyUGFnZSB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoc2VsZWN0U2l6ZSAhPT0gdGhpcy5wcm9wcy5zaXplUGVyUGFnZSkge1xuICAgICAgdGhpcy50b3RhbFBhZ2VzID0gTWF0aC5jZWlsKHRoaXMucHJvcHMuZGF0YVNpemUgLyBzZWxlY3RTaXplKTtcbiAgICAgIGlmIChjdXJyUGFnZSA+IHRoaXMudG90YWxQYWdlcykgY3VyclBhZ2UgPSB0aGlzLnRvdGFsUGFnZXM7XG5cbiAgICAgIHRoaXMucHJvcHMuY2hhbmdlUGFnZShjdXJyUGFnZSwgc2VsZWN0U2l6ZSk7XG4gICAgICBpZiAodGhpcy5wcm9wcy5vblNpemVQZXJQYWdlTGlzdCkge1xuICAgICAgICB0aGlzLnByb3BzLm9uU2l6ZVBlclBhZ2VMaXN0KHNlbGVjdFNpemUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGRhdGFTaXplLCBzaXplUGVyUGFnZSwgc2l6ZVBlclBhZ2VMaXN0IH0gPSB0aGlzLnByb3BzO1xuICAgIHRoaXMudG90YWxQYWdlcyA9IE1hdGguY2VpbChkYXRhU2l6ZSAvIHNpemVQZXJQYWdlKTtcbiAgICBjb25zdCBwYWdlQnRucyA9IHRoaXMubWFrZVBhZ2UoKTtcbiAgICBjb25zdCBwYWdlTGlzdFN0eWxlID0ge1xuICAgICAgZmxvYXQ6ICdyaWdodCcsXG4gICAgICAvLyBvdmVycmlkZSB0aGUgbWFyZ2luLXRvcCBkZWZpbmVkIGluIC5wYWdpbmF0aW9uIGNsYXNzIGluIGJvb3RzdHJhcC5cbiAgICAgIG1hcmdpblRvcDogJzBweCdcbiAgICB9O1xuXG4gICAgY29uc3Qgc2l6ZVBlclBhZ2VPcHRpb25zID0gc2l6ZVBlclBhZ2VMaXN0Lm1hcCgoX3NpemVQZXJQYWdlKSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8bGkga2V5PXsgX3NpemVQZXJQYWdlIH0gcm9sZT0ncHJlc2VudGF0aW9uJz5cbiAgICAgICAgICA8YSByb2xlPSdtZW51aXRlbSdcbiAgICAgICAgICAgIHRhYkluZGV4PSctMScgaHJlZj0nIydcbiAgICAgICAgICAgIG9uQ2xpY2s9eyB0aGlzLmNoYW5nZVNpemVQZXJQYWdlIH0+eyBfc2l6ZVBlclBhZ2UgfTwvYT5cbiAgICAgICAgPC9saT5cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9J3Jvdycgc3R5bGU9eyB7IG1hcmdpblRvcDogMTUgfSB9PlxuICAgICAgICB7XG4gICAgICAgICAgc2l6ZVBlclBhZ2VMaXN0Lmxlbmd0aCA+IDFcbiAgICAgICAgICA/IDxkaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2wtbWQtNic+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2Ryb3Bkb3duJz5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPSdidG4gYnRuLWRlZmF1bHQgZHJvcGRvd24tdG9nZ2xlJ1xuICAgICAgICAgICAgICAgICAgICB0eXBlPSdidXR0b24nIGlkPSdwYWdlRHJvcERvd24nIGRhdGEtdG9nZ2xlPSdkcm9wZG93bidcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD0ndHJ1ZSc+XG4gICAgICAgICAgICAgICAgICAgIHsgc2l6ZVBlclBhZ2UgfVxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB7ICcgJyB9XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSdjYXJldCcvPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDx1bCBjbGFzc05hbWU9J2Ryb3Bkb3duLW1lbnUnIHJvbGU9J21lbnUnIGFyaWEtbGFiZWxsZWRieT0ncGFnZURyb3BEb3duJz5cbiAgICAgICAgICAgICAgICAgICAgeyBzaXplUGVyUGFnZU9wdGlvbnMgfVxuICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2wtbWQtNic+XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzTmFtZT0ncGFnaW5hdGlvbicgc3R5bGU9eyBwYWdlTGlzdFN0eWxlIH0+XG4gICAgICAgICAgICAgICAgICB7IHBhZ2VCdG5zIH1cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDogPGRpdiBjbGFzc05hbWU9J2NvbC1tZC0xMic+XG4gICAgICAgICAgICAgIDx1bCBjbGFzc05hbWU9J3BhZ2luYXRpb24nIHN0eWxlPXsgcGFnZUxpc3RTdHlsZSB9PlxuICAgICAgICAgICAgICAgIHsgcGFnZUJ0bnMgfVxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBtYWtlUGFnZSgpIHtcbiAgICBjb25zdCBwYWdlcyA9IHRoaXMuZ2V0UGFnZXMoKTtcbiAgICByZXR1cm4gcGFnZXMubWFwKGZ1bmN0aW9uKHBhZ2UpIHtcbiAgICAgIGNvbnN0IGlzQWN0aXZlID0gcGFnZSA9PT0gdGhpcy5wcm9wcy5jdXJyUGFnZTtcbiAgICAgIGxldCBkaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgbGV0IGhpZGRlbiA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMucHJvcHMuY3VyclBhZ2UgPT09IDEgJiZcbiAgICAgICAgKHBhZ2UgPT09IHRoaXMucHJvcHMuZmlyc3RQYWdlIHx8IHBhZ2UgPT09IHRoaXMucHJvcHMucHJlUGFnZSkpIHtcbiAgICAgICAgZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICBoaWRkZW4gPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucHJvcHMuY3VyclBhZ2UgPT09IHRoaXMudG90YWxQYWdlcyAmJlxuICAgICAgICAocGFnZSA9PT0gdGhpcy5wcm9wcy5uZXh0UGFnZSB8fCBwYWdlID09PSB0aGlzLnByb3BzLmxhc3RQYWdlKSkge1xuICAgICAgICBkaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIGhpZGRlbiA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8UGFnZUJ1dHRvbiBrZXk9eyBwYWdlIH1cbiAgICAgICAgICBjaGFuZ2VQYWdlPXsgdGhpcy5jaGFuZ2VQYWdlIH1cbiAgICAgICAgICBhY3RpdmU9eyBpc0FjdGl2ZSB9XG4gICAgICAgICAgZGlzYWJsZT17IGRpc2FibGVkIH1cbiAgICAgICAgICBoaWRkZW49eyBoaWRkZW4gfT5cbiAgICAgICAgICB7IHBhZ2UgfVxuICAgICAgICA8L1BhZ2VCdXR0b24+XG4gICAgICApO1xuICAgIH0sIHRoaXMpO1xuICB9XG5cbiAgZ2V0UGFnZXMoKSB7XG4gICAgbGV0IHBhZ2VzO1xuICAgIGxldCBzdGFydFBhZ2UgPSAxO1xuICAgIGxldCBlbmRQYWdlID0gdGhpcy50b3RhbFBhZ2VzO1xuXG4gICAgc3RhcnRQYWdlID0gTWF0aC5tYXgodGhpcy5wcm9wcy5jdXJyUGFnZSAtIE1hdGguZmxvb3IodGhpcy5wcm9wcy5wYWdpbmF0aW9uU2l6ZSAvIDIpLCAxKTtcbiAgICBlbmRQYWdlID0gc3RhcnRQYWdlICsgdGhpcy5wcm9wcy5wYWdpbmF0aW9uU2l6ZSAtIDE7XG5cbiAgICBpZiAoZW5kUGFnZSA+IHRoaXMudG90YWxQYWdlcykge1xuICAgICAgZW5kUGFnZSA9IHRoaXMudG90YWxQYWdlcztcbiAgICAgIHN0YXJ0UGFnZSA9IGVuZFBhZ2UgLSB0aGlzLnByb3BzLnBhZ2luYXRpb25TaXplICsgMTtcbiAgICB9XG5cbiAgICBpZiAoc3RhcnRQYWdlICE9PSAxICYmIHRoaXMudG90YWxQYWdlcyA+IHRoaXMucHJvcHMucGFnaW5hdGlvblNpemUpIHtcbiAgICAgIHBhZ2VzID0gWyB0aGlzLnByb3BzLmZpcnN0UGFnZSwgdGhpcy5wcm9wcy5wcmVQYWdlIF07XG4gICAgfSBlbHNlIGlmICh0aGlzLnRvdGFsUGFnZXMgPiAxKSB7XG4gICAgICBwYWdlcyA9IFsgdGhpcy5wcm9wcy5wcmVQYWdlIF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhZ2VzID0gW107XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0UGFnZTsgaSA8PSBlbmRQYWdlOyBpKyspIHtcbiAgICAgIGlmIChpID4gMCkgcGFnZXMucHVzaChpKTtcbiAgICB9XG5cbiAgICBpZiAoZW5kUGFnZSAhPT0gdGhpcy50b3RhbFBhZ2VzKSB7XG4gICAgICBwYWdlcy5wdXNoKHRoaXMucHJvcHMubmV4dFBhZ2UpO1xuICAgICAgcGFnZXMucHVzaCh0aGlzLnByb3BzLmxhc3RQYWdlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudG90YWxQYWdlcyA+IDEpIHtcbiAgICAgIHBhZ2VzLnB1c2godGhpcy5wcm9wcy5uZXh0UGFnZSk7XG4gICAgfVxuICAgIHJldHVybiBwYWdlcztcbiAgfVxufVxuUGFnaW5hdGlvbkxpc3QucHJvcFR5cGVzID0ge1xuICBjdXJyUGFnZTogUHJvcFR5cGVzLm51bWJlcixcbiAgc2l6ZVBlclBhZ2U6IFByb3BUeXBlcy5udW1iZXIsXG4gIGRhdGFTaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuICBjaGFuZ2VQYWdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgc2l6ZVBlclBhZ2VMaXN0OiBQcm9wVHlwZXMuYXJyYXksXG4gIHBhZ2luYXRpb25TaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuICByZW1vdGU6IFByb3BUeXBlcy5ib29sLFxuICBvblNpemVQZXJQYWdlTGlzdDogUHJvcFR5cGVzLmZ1bmMsXG4gIHByZVBhZ2U6IFByb3BUeXBlcy5zdHJpbmdcbn07XG5cblBhZ2luYXRpb25MaXN0LmRlZmF1bHRQcm9wcyA9IHtcbiAgc2l6ZVBlclBhZ2U6IENvbnN0LlNJWkVfUEVSX1BBR0Vcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFBhZ2luYXRpb25MaXN0O1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvcGFnaW5hdGlvbi9QYWdpbmF0aW9uTGlzdC5qc1xuICoqLyIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFByb3BUeXBlcyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc1NldCBmcm9tICdjbGFzc25hbWVzJztcblxuY2xhc3MgUGFnZUJ1dHRvbiBleHRlbmRzIENvbXBvbmVudCB7XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICBwYWdlQnRuQ2xpY2sgPSBlID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5wcm9wcy5jaGFuZ2VQYWdlKGUuY3VycmVudFRhcmdldC50ZXh0Q29udGVudCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgY2xhc3NlcyA9IGNsYXNzU2V0KHtcbiAgICAgICdhY3RpdmUnOiB0aGlzLnByb3BzLmFjdGl2ZSxcbiAgICAgICdkaXNhYmxlZCc6IHRoaXMucHJvcHMuZGlzYWJsZSxcbiAgICAgICdoaWRkZW4nOiB0aGlzLnByb3BzLmhpZGRlblxuICAgIH0pO1xuICAgIHJldHVybiAoXG4gICAgICA8bGkgY2xhc3NOYW1lPXsgY2xhc3NlcyB9PlxuICAgICAgICA8YSBocmVmPScjJyBvbkNsaWNrPXsgdGhpcy5wYWdlQnRuQ2xpY2sgfT57IHRoaXMucHJvcHMuY2hpbGRyZW4gfTwvYT5cbiAgICAgIDwvbGk+XG4gICAgKTtcbiAgfVxufVxuUGFnZUJ1dHRvbi5wcm9wVHlwZXMgPSB7XG4gIGNoYW5nZVBhZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBhY3RpdmU6IFByb3BUeXBlcy5ib29sLFxuICBkaXNhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgaGlkZGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlXG59O1xuXG5leHBvcnQgZGVmYXVsdCBQYWdlQnV0dG9uO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvcGFnaW5hdGlvbi9QYWdlQnV0dG9uLmpzXG4gKiovIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgUHJvcFR5cGVzIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzU2V0IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4uL0NvbnN0JztcbmltcG9ydCBlZGl0b3IgZnJvbSAnLi4vRWRpdG9yJztcbmltcG9ydCBOb3RpZmllciBmcm9tICcuLi9Ob3RpZmljYXRpb24uanMnO1xuXG5jbGFzcyBUb29sQmFyIGV4dGVuZHMgQ29tcG9uZW50IHtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnRpbWVvdXRlQ2xlYXIgPSAwO1xuICAgIHRoaXMubW9kYWxDbGFzc05hbWU7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGlzSW5zZXJ0Um93VHJpZ2dlcjogdHJ1ZSxcbiAgICAgIHZhbGlkYXRlU3RhdGU6IG51bGwsXG4gICAgICBzaGFrZUVkaXRvcjogZmFsc2UsXG4gICAgICBzaG93U2VsZWN0ZWQ6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMuY2xlYXJUaW1lb3V0KCk7XG4gIH1cblxuICBjbGVhclRpbWVvdXQoKSB7XG4gICAgaWYgKHRoaXMudGltZW91dGVDbGVhcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dGVDbGVhcik7XG4gICAgICB0aGlzLnRpbWVvdXRlQ2xlYXIgPSAwO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrQW5kUGFyc2VGb3JtKCkge1xuICAgIGNvbnN0IG5ld09iaiA9IHt9O1xuICAgIGNvbnN0IHZhbGlkYXRlU3RhdGUgPSB7fTtcbiAgICBsZXQgaXNWYWxpZCA9IHRydWU7XG4gICAgbGV0IHRlbXBWYWx1ZTtcbiAgICBsZXQgdGVtcE1zZztcblxuICAgIHRoaXMucHJvcHMuY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uKGNvbHVtbiwgaSkge1xuICAgICAgaWYgKGNvbHVtbi5hdXRvVmFsdWUpIHtcbiAgICAgICAgLy8gd2hlbiB5b3Ugd2FudCBzYW1lIGF1dG8gZ2VuZXJhdGUgdmFsdWUgYW5kIG5vdCBhbGxvdyBlZGl0LCBleGFtcGxlIElEIGZpZWxkXG4gICAgICAgIGNvbnN0IHRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgdGVtcFZhbHVlID0gdHlwZW9mIGNvbHVtbi5hdXRvVmFsdWUgPT09ICdmdW5jdGlvbicgP1xuICAgICAgICAgIGNvbHVtbi5hdXRvVmFsdWUoKSA6XG4gICAgICAgICAgKGBhdXRvdmFsdWUtJHt0aW1lfWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZG9tID0gdGhpcy5yZWZzW2NvbHVtbi5maWVsZCArIGldO1xuICAgICAgICB0ZW1wVmFsdWUgPSBkb20udmFsdWU7XG5cbiAgICAgICAgaWYgKGNvbHVtbi5lZGl0YWJsZSAmJiBjb2x1bW4uZWRpdGFibGUudHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHRlbXBWYWx1ZS5zcGxpdCgnOicpO1xuICAgICAgICAgIHRlbXBWYWx1ZSA9IGRvbS5jaGVja2VkID8gdmFsdWVzWzBdIDogdmFsdWVzWzFdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbHVtbi5lZGl0YWJsZSAmJiBjb2x1bW4uZWRpdGFibGUudmFsaWRhdG9yKSB7IC8vIHByb2Nlc3MgdmFsaWRhdGVcbiAgICAgICAgICB0ZW1wTXNnID0gY29sdW1uLmVkaXRhYmxlLnZhbGlkYXRvcih0ZW1wVmFsdWUpO1xuICAgICAgICAgIGlmICh0ZW1wTXNnICE9PSB0cnVlKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICB2YWxpZGF0ZVN0YXRlW2NvbHVtbi5maWVsZF0gPSB0ZW1wTXNnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBuZXdPYmpbY29sdW1uLmZpZWxkXSA9IHRlbXBWYWx1ZTtcbiAgICB9LCB0aGlzKTtcblxuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gbmV3T2JqO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsZWFyVGltZW91dCgpO1xuICAgICAgLy8gc2hvdyBlcnJvciBpbiBmb3JtIGFuZCBzaGFrZSBpdFxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHZhbGlkYXRlU3RhdGUsIHNoYWtlRWRpdG9yOiB0cnVlIH0pO1xuICAgICAgLy8gbm90aWZpZXIgZXJyb3JcbiAgICAgIHRoaXMucmVmcy5ub3RpZmllci5ub3RpY2UoXG4gICAgICAgICdlcnJvcicsXG4gICAgICAgICdGb3JtIHZhbGlkYXRlIGVycm9ycywgcGxlYXNlIGNoZWNraW5nIScsXG4gICAgICAgICdQcmVzc2VkIEVTQyBjYW4gY2FuY2VsJyk7XG4gICAgICAvLyBjbGVhciBhbmltYXRlIGNsYXNzXG4gICAgICB0aGlzLnRpbWVvdXRlQ2xlYXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHNoYWtlRWRpdG9yOiBmYWxzZSB9KTtcbiAgICAgIH0sIDMwMCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVTYXZlQnRuQ2xpY2sgPSAoKSA9PiB7XG4gICAgY29uc3QgbmV3T2JqID0gdGhpcy5jaGVja0FuZFBhcnNlRm9ybSgpO1xuICAgIGlmICghbmV3T2JqKSB7IC8vIHZhbGlkYXRlIGVycm9yc1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtc2cgPSB0aGlzLnByb3BzLm9uQWRkUm93KG5ld09iaik7XG4gICAgaWYgKG1zZykge1xuICAgICAgdGhpcy5yZWZzLm5vdGlmaWVyLm5vdGljZSgnZXJyb3InLCBtc2csICdQcmVzc2VkIEVTQyBjYW4gY2FuY2VsJyk7XG4gICAgICB0aGlzLmNsZWFyVGltZW91dCgpO1xuICAgICAgLy8gc2hha2UgZm9ybSBhbmQgaGFjayBwcmV2ZW50IG1vZGFsIGhpZGVcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzaGFrZUVkaXRvcjogdHJ1ZSxcbiAgICAgICAgdmFsaWRhdGVTdGF0ZTogJ3RoaXMgaXMgaGFjayBmb3IgcHJldmVudCBib290c3RyYXAgbW9kYWwgaGlkZSdcbiAgICAgIH0pO1xuICAgICAgLy8gY2xlYXIgYW5pbWF0ZSBjbGFzc1xuICAgICAgdGhpcy50aW1lb3V0ZUNsZWFyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBzaGFrZUVkaXRvcjogZmFsc2UgfSk7XG4gICAgICB9LCAzMDApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyByZXNldCBzdGF0ZSBhbmQgaGlkZSBtb2RhbCBoaWRlXG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdmFsaWRhdGVTdGF0ZTogbnVsbCxcbiAgICAgICAgc2hha2VFZGl0b3I6IGZhbHNlXG4gICAgICB9LCAoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tb2RhbC1iYWNrZHJvcCcpLmNsaWNrKCk7XG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy4nICsgdGhpcy5tb2RhbENsYXNzTmFtZSkuY2xpY2soKTtcbiAgICAgIH0pO1xuICAgICAgLy8gcmVzZXQgZm9ybVxuICAgICAgdGhpcy5yZWZzLmZvcm0ucmVzZXQoKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVTaG93T25seVRvZ2dsZSA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHNob3dTZWxlY3RlZDogIXRoaXMuc3RhdGUuc2hvd1NlbGVjdGVkXG4gICAgfSk7XG4gICAgdGhpcy5wcm9wcy5vblNob3dPbmx5U2VsZWN0ZWQoKTtcbiAgfVxuXG4gIGhhbmRsZURyb3BSb3dCdG5DbGljayA9ICgpID0+IHtcbiAgICB0aGlzLnByb3BzLm9uRHJvcFJvdygpO1xuICB9XG5cbiAgaGFuZGxlQ2xvc2VCdG4oKSB7XG4gICAgdGhpcy5yZWZzLndhcm5pbmcuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgfVxuXG4gIGhhbmRsZUtleVVwID0gZSA9PiB7XG4gICAgdGhpcy5wcm9wcy5vblNlYXJjaChlLmN1cnJlbnRUYXJnZXQudmFsdWUpO1xuICB9XG5cbiAgaGFuZGxlRXhwb3J0Q1NWID0gKCkgPT4ge1xuICAgIHRoaXMucHJvcHMub25FeHBvcnRDU1YoKTtcbiAgfVxuXG4gIGhhbmRsZUNsZWFyQnRuQ2xpY2sgPSAoKSA9PiB7XG4gICAgdGhpcy5yZWZzLnNlYWNoSW5wdXQudmFsdWUgPSAnJztcbiAgICB0aGlzLnByb3BzLm9uU2VhcmNoKCcnKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICB0aGlzLm1vZGFsQ2xhc3NOYW1lID0gJ2JzLXRhYmxlLW1vZGFsLXNtJyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIGxldCBpbnNlcnRCdG4gPSBudWxsO1xuICAgIGxldCBkZWxldGVCdG4gPSBudWxsO1xuICAgIGxldCBleHBvcnRDU1YgPSBudWxsO1xuICAgIGxldCBzaG93U2VsZWN0ZWRPbmx5QnRuID0gbnVsbDtcblxuICAgIGlmICh0aGlzLnByb3BzLmVuYWJsZUluc2VydCkge1xuICAgICAgaW5zZXJ0QnRuID0gKFxuICAgICAgICA8YnV0dG9uIHR5cGU9J2J1dHRvbidcbiAgICAgICAgICBjbGFzc05hbWU9J2J0biBidG4taW5mbyByZWFjdC1icy10YWJsZS1hZGQtYnRuJ1xuICAgICAgICAgIGRhdGEtdG9nZ2xlPSdtb2RhbCdcbiAgICAgICAgICBkYXRhLXRhcmdldD17ICcuJyArIHRoaXMubW9kYWxDbGFzc05hbWUgfT5cbiAgICAgICAgICA8aSBjbGFzc05hbWU9J2dseXBoaWNvbiBnbHlwaGljb24tcGx1cyc+PC9pPiBOZXdcbiAgICAgICAgPC9idXR0b24+XG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLmVuYWJsZURlbGV0ZSkge1xuICAgICAgZGVsZXRlQnRuID0gKFxuICAgICAgICA8YnV0dG9uIHR5cGU9J2J1dHRvbidcbiAgICAgICAgICBjbGFzc05hbWU9J2J0biBidG4td2FybmluZyByZWFjdC1icy10YWJsZS1kZWwtYnRuJ1xuICAgICAgICAgIGRhdGEtdG9nZ2xlPSd0b29sdGlwJ1xuICAgICAgICAgIGRhdGEtcGxhY2VtZW50PSdyaWdodCdcbiAgICAgICAgICB0aXRsZT0nRHJvcCBzZWxlY3RlZCByb3cnXG4gICAgICAgICAgb25DbGljaz17IHRoaXMuaGFuZGxlRHJvcFJvd0J0bkNsaWNrIH0+XG4gICAgICAgICAgPGkgY2xhc3NOYW1lPSdnbHlwaGljb24gZ2x5cGhpY29uLXRyYXNoJz48L2k+IERlbGV0ZVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMuZW5hYmxlU2hvd09ubHlTZWxlY3RlZCkge1xuICAgICAgc2hvd1NlbGVjdGVkT25seUJ0biA9IChcbiAgICAgICAgPGJ1dHRvbiB0eXBlPSdidXR0b24nXG4gICAgICAgICAgb25DbGljaz17IHRoaXMuaGFuZGxlU2hvd09ubHlUb2dnbGUgfVxuICAgICAgICAgIGNsYXNzTmFtZT0nYnRuIGJ0bi1wcmltYXJ5J1xuICAgICAgICAgIGRhdGEtdG9nZ2xlPSdidXR0b24nXG4gICAgICAgICAgYXJpYS1wcmVzc2VkPSdmYWxzZSc+XG4gICAgICAgICAgeyB0aGlzLnN0YXRlLnNob3dTZWxlY3RlZCA/IENvbnN0LlNIT1dfQUxMIDogQ29uc3QuU0hPV19PTkxZX1NFTEVDVCB9XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9wcy5lbmFibGVFeHBvcnRDU1YpIHtcbiAgICAgIGV4cG9ydENTViA9IChcbiAgICAgICAgPGJ1dHRvbiB0eXBlPSdidXR0b24nXG4gICAgICAgICAgY2xhc3NOYW1lPSdidG4gYnRuLXN1Y2Nlc3MnXG4gICAgICAgICAgb25DbGljaz17IHRoaXMuaGFuZGxlRXhwb3J0Q1NWIH0+XG4gICAgICAgICAgICA8aSBjbGFzc05hbWU9J2dseXBoaWNvbiBnbHlwaGljb24tZXhwb3J0Jz48L2k+IEV4cG9ydCB0byBDU1ZcbiAgICAgICAgPC9idXR0b24+XG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHNlYXJjaFRleHRJbnB1dCA9IHRoaXMucmVuZGVyU2VhcmNoUGFuZWwoKTtcbiAgICBjb25zdCBtb2RhbCA9IHRoaXMucHJvcHMuZW5hYmxlSW5zZXJ0ID8gdGhpcy5yZW5kZXJJbnNlcnRSb3dNb2RhbCgpIDogbnVsbDtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93Jz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9J2NvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtNiBjb2wtbGctOCc+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2J0bi1ncm91cCBidG4tZ3JvdXAtc20nIHJvbGU9J2dyb3VwJz5cbiAgICAgICAgICAgIHsgZXhwb3J0Q1NWIH1cbiAgICAgICAgICAgIHsgaW5zZXJ0QnRuIH1cbiAgICAgICAgICAgIHsgZGVsZXRlQnRuIH1cbiAgICAgICAgICAgIHsgc2hvd1NlbGVjdGVkT25seUJ0biB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC02IGNvbC1sZy00Jz5cbiAgICAgICAgICB7IHNlYXJjaFRleHRJbnB1dCB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8Tm90aWZpZXIgcmVmPSdub3RpZmllcicgLz5cbiAgICAgICAgeyBtb2RhbCB9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyU2VhcmNoUGFuZWwoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuZW5hYmxlU2VhcmNoKSB7XG4gICAgICBsZXQgY2xhc3NOYW1lcyA9ICdmb3JtLWdyb3VwIGZvcm0tZ3JvdXAtc20gcmVhY3QtYnMtdGFibGUtc2VhcmNoLWZvcm0nO1xuICAgICAgbGV0IGNsZWFyQnRuID0gbnVsbDtcbiAgICAgIGlmICh0aGlzLnByb3BzLmNsZWFyU2VhcmNoKSB7XG4gICAgICAgIGNsZWFyQnRuID0gKFxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0naW5wdXQtZ3JvdXAtYnRuJz5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPSdidG4gYnRuLWRlZmF1bHQnXG4gICAgICAgICAgICAgIHR5cGU9J2J1dHRvbidcbiAgICAgICAgICAgICAgb25DbGljaz17IHRoaXMuaGFuZGxlQ2xlYXJCdG5DbGljayB9PlxuICAgICAgICAgICAgICBDbGVhclxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICApO1xuICAgICAgICBjbGFzc05hbWVzICs9ICcgaW5wdXQtZ3JvdXAgaW5wdXQtZ3JvdXAtc20nO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17IGNsYXNzTmFtZXMgfT5cbiAgICAgICAgICA8aW5wdXQgcmVmPSdzZWFjaElucHV0J1xuICAgICAgICAgICAgY2xhc3NOYW1lPSdmb3JtLWNvbnRyb2wnXG4gICAgICAgICAgICB0eXBlPSd0ZXh0J1xuICAgICAgICAgICAgcGxhY2Vob2xkZXI9eyB0aGlzLnByb3BzLnNlYXJjaFBsYWNlaG9sZGVyID8gdGhpcy5wcm9wcy5zZWFyY2hQbGFjZWhvbGRlciA6ICdTZWFyY2gnIH1cbiAgICAgICAgICAgIG9uS2V5VXA9eyB0aGlzLmhhbmRsZUtleVVwIH0vPlxuICAgICAgICAgICAgeyBjbGVhckJ0biB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVySW5zZXJ0Um93TW9kYWwoKSB7XG4gICAgY29uc3QgdmFsaWRhdGVTdGF0ZSA9IHRoaXMuc3RhdGUudmFsaWRhdGVTdGF0ZSB8fCB7fTtcbiAgICBjb25zdCBzaGFrZUVkaXRvciA9IHRoaXMuc3RhdGUuc2hha2VFZGl0b3I7XG4gICAgY29uc3QgaW5wdXRGaWVsZCA9IHRoaXMucHJvcHMuY29sdW1ucy5tYXAoZnVuY3Rpb24oY29sdW1uLCBpKSB7XG4gICAgICBjb25zdCB7IGVkaXRhYmxlLCBmb3JtYXQsIGZpZWxkLCBuYW1lLCBhdXRvVmFsdWUgfSA9IGNvbHVtbjtcbiAgICAgIGNvbnN0IGF0dHIgPSB7XG4gICAgICAgIHJlZjogZmllbGQgKyBpLFxuICAgICAgICBwbGFjZWhvbGRlcjogZWRpdGFibGUucGxhY2Vob2xkZXIgPyBlZGl0YWJsZS5wbGFjZWhvbGRlciA6IG5hbWVcbiAgICAgIH07XG5cbiAgICAgIGlmIChhdXRvVmFsdWUpIHtcbiAgICAgICAgLy8gd2hlbiB5b3Ugd2FudCBzYW1lIGF1dG8gZ2VuZXJhdGUgdmFsdWVcbiAgICAgICAgLy8gYW5kIG5vdCBhbGxvdyBlZGl0LCBmb3IgZXhhbXBsZSBJRCBmaWVsZFxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVycm9yID0gdmFsaWRhdGVTdGF0ZVtmaWVsZF0gP1xuICAgICAgICAoPHNwYW4gY2xhc3NOYW1lPSdoZWxwLWJsb2NrIGJnLWRhbmdlcic+eyB2YWxpZGF0ZVN0YXRlW2ZpZWxkXSB9PC9zcGFuPikgOlxuICAgICAgICBudWxsO1xuXG4gICAgICAvLyBsZXQgZWRpdG9yID0gRWRpdG9yKGVkaXRhYmxlLGF0dHIsZm9ybWF0KTtcbiAgICAgIC8vIGlmKGVkaXRvci5wcm9wcy50eXBlICYmIGVkaXRvci5wcm9wcy50eXBlID09ICdjaGVja2JveCcpe1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9J2Zvcm0tZ3JvdXAnIGtleT17IGZpZWxkIH0+XG4gICAgICAgICAgPGxhYmVsPnsgbmFtZSB9PC9sYWJlbD5cbiAgICAgICAgICB7IGVkaXRvcihlZGl0YWJsZSwgYXR0ciwgZm9ybWF0LCAnJykgfVxuICAgICAgICAgIHsgZXJyb3IgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfSk7XG4gICAgY29uc3QgbW9kYWxDbGFzcyA9IGNsYXNzU2V0KCdtb2RhbCcsICdmYWRlJywgdGhpcy5tb2RhbENsYXNzTmFtZSwge1xuICAgICAgLy8gaGFjayBwcmV2ZW50IGJvb3RzdHJhcCBtb2RhbCBoaWRlIGJ5IHJlUmVuZGVyXG4gICAgICAnaW4nOiBzaGFrZUVkaXRvciB8fCB0aGlzLnN0YXRlLnZhbGlkYXRlU3RhdGVcbiAgICB9KTtcbiAgICBjb25zdCBkaWFsb2dDbGFzcyA9IGNsYXNzU2V0KCdtb2RhbC1kaWFsb2cnLCAnbW9kYWwtc20nLCB7XG4gICAgICAnYW5pbWF0ZWQnOiBzaGFrZUVkaXRvcixcbiAgICAgICdzaGFrZSc6IHNoYWtlRWRpdG9yXG4gICAgfSk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgcmVmPSdtb2RhbCcgY2xhc3NOYW1lPXsgbW9kYWxDbGFzcyB9IHRhYkluZGV4PSctMScgcm9sZT0nZGlhbG9nJz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9eyBkaWFsb2dDbGFzcyB9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtb2RhbC1jb250ZW50Jz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtb2RhbC1oZWFkZXInPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9J2J1dHRvbidcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9J2Nsb3NlJ1xuICAgICAgICAgICAgICAgIGRhdGEtZGlzbWlzcz0nbW9kYWwnXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0nQ2xvc2UnPlxuICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPSd0cnVlJz4mdGltZXM7PC9zcGFuPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGg0IGNsYXNzTmFtZT0nbW9kYWwtdGl0bGUnPk5ldyBSZWNvcmQ8L2g0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbW9kYWwtYm9keSc+XG4gICAgICAgICAgICAgIDxmb3JtIHJlZj0nZm9ybSc+XG4gICAgICAgICAgICAgIHsgaW5wdXRGaWVsZCB9XG4gICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J21vZGFsLWZvb3Rlcic+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT0nYnRuIGJ0bi1kZWZhdWx0J1xuICAgICAgICAgICAgICAgIGRhdGEtZGlzbWlzcz0nbW9kYWwnPlxuICAgICAgICAgICAgICAgIENsb3NlXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9J2J1dHRvbidcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9J2J0biBidG4taW5mbydcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsgdGhpcy5oYW5kbGVTYXZlQnRuQ2xpY2sgfT5cbiAgICAgICAgICAgICAgICBTYXZlXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5Ub29sQmFyLnByb3BUeXBlcyA9IHtcbiAgb25BZGRSb3c6IFByb3BUeXBlcy5mdW5jLFxuICBvbkRyb3BSb3c6IFByb3BUeXBlcy5mdW5jLFxuICBvblNob3dPbmx5U2VsZWN0ZWQ6IFByb3BUeXBlcy5mdW5jLFxuICBlbmFibGVJbnNlcnQ6IFByb3BUeXBlcy5ib29sLFxuICBlbmFibGVEZWxldGU6IFByb3BUeXBlcy5ib29sLFxuICBlbmFibGVTZWFyY2g6IFByb3BUeXBlcy5ib29sLFxuICBlbmFibGVTaG93T25seVNlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgY29sdW1uczogUHJvcFR5cGVzLmFycmF5LFxuICBzZWFyY2hQbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2xlYXJTZWFyY2g6IFByb3BUeXBlcy5ib29sXG59O1xuXG5Ub29sQmFyLmRlZmF1bHRQcm9wcyA9IHtcbiAgZW5hYmxlSW5zZXJ0OiBmYWxzZSxcbiAgZW5hYmxlRGVsZXRlOiBmYWxzZSxcbiAgZW5hYmxlU2VhcmNoOiBmYWxzZSxcbiAgZW5hYmxlU2hvd09ubHlTZWxlY3RlZDogZmFsc2UsXG4gIGNsZWFyU2VhcmNoOiBmYWxzZVxufTtcblxuZXhwb3J0IGRlZmF1bHQgVG9vbEJhcjtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL3Rvb2xiYXIvVG9vbEJhci5qc1xuICoqLyIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFByb3BUeXBlcyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBDb25zdCBmcm9tICcuL0NvbnN0JztcbmltcG9ydCBjbGFzc1NldCBmcm9tICdjbGFzc25hbWVzJztcblxuY2xhc3MgVGFibGVGaWx0ZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuZmlsdGVyT2JqID0ge307XG4gIH1cblxuICBoYW5kbGVLZXlVcCA9IGUgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUsIG5hbWUgfSA9IGUuY3VycmVudFRhcmdldDtcbiAgICBpZiAodmFsdWUudHJpbSgpID09PSAnJykge1xuICAgICAgZGVsZXRlIHRoaXMuZmlsdGVyT2JqW25hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlck9ialtuYW1lXSA9IHZhbHVlO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLm9uRmlsdGVyKHRoaXMuZmlsdGVyT2JqKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IHN0cmlwZWQsIGNvbmRlbnNlZCwgcm93U2VsZWN0VHlwZSwgY29sdW1ucyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB0YWJsZUNsYXNzZXMgPSBjbGFzc1NldCgndGFibGUnLCB7XG4gICAgICAndGFibGUtc3RyaXBlZCc6IHN0cmlwZWQsXG4gICAgICAndGFibGUtY29uZGVuc2VkJzogY29uZGVuc2VkXG4gICAgfSk7XG4gICAgbGV0IHNlbGVjdFJvd0hlYWRlciA9IG51bGw7XG5cbiAgICBpZiAocm93U2VsZWN0VHlwZSA9PT0gQ29uc3QuUk9XX1NFTEVDVF9TSU5HTEUgfHxcbiAgICAgICAgcm93U2VsZWN0VHlwZSA9PT0gQ29uc3QuUk9XX1NFTEVDVF9NVUxUSSkge1xuICAgICAgY29uc3Qgc3R5bGUgPSB7XG4gICAgICAgIHdpZHRoOiAzNSxcbiAgICAgICAgcGFkZGluZ0xlZnQ6IDAsXG4gICAgICAgIHBhZGRpbmdSaWdodDogMFxuICAgICAgfTtcbiAgICAgIHNlbGVjdFJvd0hlYWRlciA9ICg8dGggc3R5bGU9eyBzdHlsZSB9IGtleT17IC0xIH0+RmlsdGVyPC90aD4pO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlckZpZWxkID0gY29sdW1ucy5tYXAoZnVuY3Rpb24oY29sdW1uKSB7XG4gICAgICBjb25zdCB7IGhpZGRlbiwgd2lkdGgsIG5hbWUgfSA9IGNvbHVtbjtcbiAgICAgIGNvbnN0IHRoU3R5bGUgPSB7XG4gICAgICAgIGRpc3BsYXk6IGhpZGRlbiA/ICdub25lJyA6IG51bGwsXG4gICAgICAgIHdpZHRoXG4gICAgICB9O1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHRoIGtleT17IG5hbWUgfSBzdHlsZT17IHRoU3R5bGUgfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ndGgtaW5uZXIgdGFibGUtaGVhZGVyLWNvbHVtbic+XG4gICAgICAgICAgICA8aW5wdXQgc2l6ZT0nMTAnIHR5cGU9J3RleHQnXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXsgbmFtZSB9IG5hbWU9eyBuYW1lIH0gb25LZXlVcD17IHRoaXMuaGFuZGxlS2V5VXAgfS8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGg+XG4gICAgICApO1xuICAgIH0sIHRoaXMpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDx0YWJsZSBjbGFzc05hbWU9eyB0YWJsZUNsYXNzZXMgfSBzdHlsZT17IHsgbWFyZ2luVG9wOiA1IH0gfT5cbiAgICAgICAgPHRoZWFkPlxuICAgICAgICAgIDx0ciBzdHlsZT17IHsgYm9yZGVyQm90dG9tU3R5bGU6ICdoaWRkZW4nIH0gfT5cbiAgICAgICAgICAgIHsgc2VsZWN0Um93SGVhZGVyIH17IGZpbHRlckZpZWxkIH1cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgPC90YWJsZT5cbiAgICApO1xuICB9XG59XG5UYWJsZUZpbHRlci5wcm9wVHlwZXMgPSB7XG4gIGNvbHVtbnM6IFByb3BUeXBlcy5hcnJheSxcbiAgcm93U2VsZWN0VHlwZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25GaWx0ZXI6IFByb3BUeXBlcy5mdW5jXG59O1xuZXhwb3J0IGRlZmF1bHQgVGFibGVGaWx0ZXI7XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9UYWJsZUZpbHRlci5qc1xuICoqLyIsIi8qIGVzbGludCBuby1uZXN0ZWQtdGVybmFyeTogMCAqL1xuLyogZXNsaW50IGd1YXJkLWZvci1pbjogMCAqL1xuLyogZXNsaW50IG5vLWNvbnNvbGU6IDAgKi9cbi8qIGVzbGludCBlcWVxZXE6IDAgKi9cbmltcG9ydCBDb25zdCBmcm9tICcuLi9Db25zdCc7XG5jb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG5cbmZ1bmN0aW9uIF9zb3J0KGFyciwgc29ydEZpZWxkLCBvcmRlciwgc29ydEZ1bmMpIHtcbiAgb3JkZXIgPSBvcmRlci50b0xvd2VyQ2FzZSgpO1xuICBhcnIuc29ydCgoYSwgYikgPT4ge1xuICAgIGlmIChzb3J0RnVuYykge1xuICAgICAgcmV0dXJuIHNvcnRGdW5jKGEsIGIsIG9yZGVyLCBzb3J0RmllbGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3JkZXIgPT09IENvbnN0LlNPUlRfREVTQykge1xuICAgICAgICByZXR1cm4gYVtzb3J0RmllbGRdID4gYltzb3J0RmllbGRdID8gLTEgOiAoKGFbc29ydEZpZWxkXSA8IGJbc29ydEZpZWxkXSkgPyAxIDogMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYVtzb3J0RmllbGRdIDwgYltzb3J0RmllbGRdID8gLTEgOiAoKGFbc29ydEZpZWxkXSA+IGJbc29ydEZpZWxkXSkgPyAxIDogMCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gYXJyO1xufVxuXG5leHBvcnQgY2xhc3MgVGFibGVEYXRhU2V0IGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IoZGF0YSkge1xuICAgIHN1cGVyKGRhdGEpO1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gIH1cblxuICBzZXREYXRhKGRhdGEpIHtcbiAgICB0aGlzLmVtaXQoJ2NoYW5nZScsIGRhdGEpO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5kYXRhID0gbnVsbDtcbiAgfVxuXG4gIGdldERhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGFibGVEYXRhU3RvcmUge1xuXG4gIGNvbnN0cnVjdG9yKGRhdGEpIHtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMuY29sSW5mb3MgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyZWREYXRhID0gbnVsbDtcbiAgICB0aGlzLmlzT25GaWx0ZXIgPSBmYWxzZTtcbiAgICB0aGlzLmZpbHRlck9iaiA9IG51bGw7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gbnVsbDtcbiAgICB0aGlzLnNvcnRPYmogPSBudWxsO1xuICAgIHRoaXMucGFnZU9iaiA9IHt9O1xuICAgIHRoaXMuc2VsZWN0ZWQgPSBbXTtcbiAgICB0aGlzLm11bHRpQ29sdW1uU2VhcmNoID0gZmFsc2U7XG4gICAgdGhpcy5zaG93T25seVNlbGVjdGVkID0gZmFsc2U7XG4gICAgdGhpcy5yZW1vdGUgPSBmYWxzZTsgLy8gcmVtb3RlIGRhdGFcbiAgfVxuXG4gIHNldFByb3BzKHByb3BzKSB7XG4gICAgdGhpcy5rZXlGaWVsZCA9IHByb3BzLmtleUZpZWxkO1xuICAgIHRoaXMuZW5hYmxlUGFnaW5hdGlvbiA9IHByb3BzLmlzUGFnaW5hdGlvbjtcbiAgICB0aGlzLmNvbEluZm9zID0gcHJvcHMuY29sSW5mb3M7XG4gICAgdGhpcy5yZW1vdGUgPSBwcm9wcy5yZW1vdGU7XG4gICAgdGhpcy5tdWx0aUNvbHVtblNlYXJjaCA9IHByb3BzLm11bHRpQ29sdW1uU2VhcmNoO1xuICB9XG5cbiAgc2V0RGF0YShkYXRhKSB7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICBpZiAodGhpcy5pc09uRmlsdGVyKSB7XG4gICAgICBpZiAodGhpcy5maWx0ZXJPYmogIT09IG51bGwpIHRoaXMuZmlsdGVyKHRoaXMuZmlsdGVyT2JqKTtcbiAgICAgIGlmICh0aGlzLnNlYXJjaFRleHQgIT09IG51bGwpIHRoaXMuc2VhcmNoKHRoaXMuc2VhcmNoVGV4dCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNvcnRPYmopIHtcbiAgICAgIHRoaXMuc29ydCh0aGlzLnNvcnRPYmoub3JkZXIsIHRoaXMuc29ydE9iai5zb3J0RmllbGQpO1xuICAgIH1cbiAgfVxuXG4gIGdldFNvcnRJbmZvKCkge1xuICAgIHJldHVybiB0aGlzLnNvcnRPYmo7XG4gIH1cblxuICBzZXRTZWxlY3RlZFJvd0tleShzZWxlY3RlZFJvd0tleXMpIHtcbiAgICB0aGlzLnNlbGVjdGVkID0gc2VsZWN0ZWRSb3dLZXlzO1xuICB9XG5cbiAgZ2V0U2VsZWN0ZWRSb3dLZXlzKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkO1xuICB9XG5cbiAgZ2V0Q3VycmVudERpc3BsYXlEYXRhKCkge1xuICAgIGlmICh0aGlzLmlzT25GaWx0ZXIpIHJldHVybiB0aGlzLmZpbHRlcmVkRGF0YTtcbiAgICBlbHNlIHJldHVybiB0aGlzLmRhdGE7XG4gIH1cblxuICBpZ25vcmVOb25TZWxlY3RlZCgpIHtcbiAgICB0aGlzLnNob3dPbmx5U2VsZWN0ZWQgPSAhdGhpcy5zaG93T25seVNlbGVjdGVkO1xuICAgIGlmICh0aGlzLnNob3dPbmx5U2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuaXNPbkZpbHRlciA9IHRydWU7XG4gICAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IHRoaXMuZGF0YS5maWx0ZXIoIHJvdyA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc2VsZWN0ZWQuZmluZCh4ID0+IHJvd1t0aGlzLmtleUZpZWxkXSA9PT0geCk7XG4gICAgICAgIHJldHVybiB0eXBlb2YgcmVzdWx0ICE9PSAndW5kZWZpbmVkJyA/IHRydWUgOiBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzT25GaWx0ZXIgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBzb3J0KG9yZGVyLCBzb3J0RmllbGQpIHtcbiAgICB0aGlzLnNvcnRPYmogPSB7IG9yZGVyLCBzb3J0RmllbGQgfTtcblxuICAgIGxldCBjdXJyZW50RGlzcGxheURhdGEgPSB0aGlzLmdldEN1cnJlbnREaXNwbGF5RGF0YSgpO1xuICAgIGlmICghdGhpcy5jb2xJbmZvc1tzb3J0RmllbGRdKSByZXR1cm4gdGhpcztcblxuICAgIGNvbnN0IHsgc29ydEZ1bmMgfSA9IHRoaXMuY29sSW5mb3Nbc29ydEZpZWxkXTtcbiAgICBjdXJyZW50RGlzcGxheURhdGEgPSBfc29ydChjdXJyZW50RGlzcGxheURhdGEsIHNvcnRGaWVsZCwgb3JkZXIsIHNvcnRGdW5jKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcGFnZShwYWdlLCBzaXplUGVyUGFnZSkge1xuICAgIHRoaXMucGFnZU9iai5lbmQgPSBwYWdlICogc2l6ZVBlclBhZ2UgLSAxO1xuICAgIHRoaXMucGFnZU9iai5zdGFydCA9IHRoaXMucGFnZU9iai5lbmQgLSAoc2l6ZVBlclBhZ2UgLSAxKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGVkaXQobmV3VmFsLCByb3dJbmRleCwgZmllbGROYW1lKSB7XG4gICAgY29uc3QgY3VycmVudERpc3BsYXlEYXRhID0gdGhpcy5nZXRDdXJyZW50RGlzcGxheURhdGEoKTtcbiAgICBsZXQgcm93S2V5Q2FjaGU7XG4gICAgaWYgKCF0aGlzLmVuYWJsZVBhZ2luYXRpb24pIHtcbiAgICAgIGN1cnJlbnREaXNwbGF5RGF0YVtyb3dJbmRleF1bZmllbGROYW1lXSA9IG5ld1ZhbDtcbiAgICAgIHJvd0tleUNhY2hlID0gY3VycmVudERpc3BsYXlEYXRhW3Jvd0luZGV4XVt0aGlzLmtleUZpZWxkXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudERpc3BsYXlEYXRhW3RoaXMucGFnZU9iai5zdGFydCArIHJvd0luZGV4XVtmaWVsZE5hbWVdID0gbmV3VmFsO1xuICAgICAgcm93S2V5Q2FjaGUgPSBjdXJyZW50RGlzcGxheURhdGFbdGhpcy5wYWdlT2JqLnN0YXJ0ICsgcm93SW5kZXhdW3RoaXMua2V5RmllbGRdO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc09uRmlsdGVyKSB7XG4gICAgICB0aGlzLmRhdGEuZm9yRWFjaChmdW5jdGlvbihyb3cpIHtcbiAgICAgICAgaWYgKHJvd1t0aGlzLmtleUZpZWxkXSA9PT0gcm93S2V5Q2FjaGUpIHtcbiAgICAgICAgICByb3dbZmllbGROYW1lXSA9IG5ld1ZhbDtcbiAgICAgICAgfVxuICAgICAgfSwgdGhpcyk7XG4gICAgICBpZiAodGhpcy5maWx0ZXJPYmogIT09IG51bGwpIHRoaXMuZmlsdGVyKHRoaXMuZmlsdGVyT2JqKTtcbiAgICAgIGlmICh0aGlzLnNlYXJjaFRleHQgIT09IG51bGwpIHRoaXMuc2VhcmNoKHRoaXMuc2VhcmNoVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYWRkQXRCZWdpbihuZXdPYmopIHtcbiAgICBpZiAoIW5ld09ialt0aGlzLmtleUZpZWxkXSB8fCBuZXdPYmpbdGhpcy5rZXlGaWVsZF0udG9TdHJpbmcoKSA9PT0gJycpIHtcbiAgICAgIHRocm93IGAke3RoaXMua2V5RmllbGR9IGNhbid0IGJlIGVtcHR5IHZhbHVlLmA7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnREaXNwbGF5RGF0YSA9IHRoaXMuZ2V0Q3VycmVudERpc3BsYXlEYXRhKCk7XG4gICAgY3VycmVudERpc3BsYXlEYXRhLmZvckVhY2goZnVuY3Rpb24ocm93KSB7XG4gICAgICBpZiAocm93W3RoaXMua2V5RmllbGRdLnRvU3RyaW5nKCkgPT09IG5ld09ialt0aGlzLmtleUZpZWxkXS50b1N0cmluZygpKSB7XG4gICAgICAgIHRocm93IGAke3RoaXMua2V5RmllbGR9ICR7bmV3T2JqW3RoaXMua2V5RmllbGRdfSBhbHJlYWR5IGV4aXN0c2A7XG4gICAgICB9XG4gICAgfSwgdGhpcyk7XG4gICAgY3VycmVudERpc3BsYXlEYXRhLnVuc2hpZnQobmV3T2JqKTtcbiAgICBpZiAodGhpcy5pc09uRmlsdGVyKSB7XG4gICAgICB0aGlzLmRhdGEudW5zaGlmdChuZXdPYmopO1xuICAgIH1cbiAgfVxuXG4gIGFkZChuZXdPYmopIHtcbiAgICBpZiAoIW5ld09ialt0aGlzLmtleUZpZWxkXSB8fCBuZXdPYmpbdGhpcy5rZXlGaWVsZF0udG9TdHJpbmcoKSA9PT0gJycpIHtcbiAgICAgIHRocm93IGAke3RoaXMua2V5RmllbGR9IGNhbid0IGJlIGVtcHR5IHZhbHVlLmA7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnREaXNwbGF5RGF0YSA9IHRoaXMuZ2V0Q3VycmVudERpc3BsYXlEYXRhKCk7XG4gICAgY3VycmVudERpc3BsYXlEYXRhLmZvckVhY2goZnVuY3Rpb24ocm93KSB7XG4gICAgICBpZiAocm93W3RoaXMua2V5RmllbGRdLnRvU3RyaW5nKCkgPT09IG5ld09ialt0aGlzLmtleUZpZWxkXS50b1N0cmluZygpKSB7XG4gICAgICAgIHRocm93IGAke3RoaXMua2V5RmllbGR9ICR7bmV3T2JqW3RoaXMua2V5RmllbGRdfSBhbHJlYWR5IGV4aXN0c2A7XG4gICAgICB9XG4gICAgfSwgdGhpcyk7XG5cbiAgICBjdXJyZW50RGlzcGxheURhdGEucHVzaChuZXdPYmopO1xuICAgIGlmICh0aGlzLmlzT25GaWx0ZXIpIHtcbiAgICAgIHRoaXMuZGF0YS5wdXNoKG5ld09iaik7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlKHJvd0tleSkge1xuICAgIGNvbnN0IGN1cnJlbnREaXNwbGF5RGF0YSA9IHRoaXMuZ2V0Q3VycmVudERpc3BsYXlEYXRhKCk7XG4gICAgY29uc3QgcmVzdWx0ID0gY3VycmVudERpc3BsYXlEYXRhLmZpbHRlcihyb3cgPT4ge1xuICAgICAgcmV0dXJuIHJvd0tleS5pbmRleE9mKHJvd1t0aGlzLmtleUZpZWxkXSkgPT09IC0xO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuaXNPbkZpbHRlcikge1xuICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLmZpbHRlcihyb3cgPT4ge1xuICAgICAgICByZXR1cm4gcm93S2V5LmluZGV4T2Yocm93W3RoaXMua2V5RmllbGRdKSA9PT0gLTE7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGEgPSByZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgZmlsdGVyKGZpbHRlck9iaikge1xuICAgIGlmIChPYmplY3Qua2V5cyhmaWx0ZXJPYmopLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSBudWxsO1xuICAgICAgdGhpcy5pc09uRmlsdGVyID0gZmFsc2U7XG4gICAgICB0aGlzLmZpbHRlck9iaiA9IG51bGw7XG4gICAgICBpZiAodGhpcy5zZWFyY2hUZXh0ICE9PSBudWxsKSB0aGlzLnNlYXJjaCh0aGlzLnNlYXJjaFRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlck9iaiA9IGZpbHRlck9iajtcbiAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gdGhpcy5kYXRhLmZpbHRlciggcm93ID0+IHtcbiAgICAgICAgbGV0IHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgbGV0IGZpbHRlclZhbDtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZmlsdGVyT2JqKSB7XG4gICAgICAgICAgbGV0IHRhcmdldFZhbCA9IHJvd1trZXldO1xuXG4gICAgICAgICAgc3dpdGNoIChmaWx0ZXJPYmpba2V5XS50eXBlKSB7XG4gICAgICAgICAgY2FzZSBDb25zdC5GSUxURVJfVFlQRS5OVU1CRVI6IHtcbiAgICAgICAgICAgIGZpbHRlclZhbCA9IGZpbHRlck9ialtrZXldLnZhbHVlLm51bWJlcjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIENvbnN0LkZJTFRFUl9UWVBFLkNVU1RPTToge1xuICAgICAgICAgICAgZmlsdGVyVmFsID0gKHR5cGVvZiBmaWx0ZXJPYmpba2V5XS52YWx1ZSA9PT0gJ29iamVjdCcpID9cbiAgICAgICAgICAgICAgdW5kZWZpbmVkIDpcbiAgICAgICAgICAgICAgKHR5cGVvZiBmaWx0ZXJPYmpba2V5XS52YWx1ZSA9PT0gJ3N0cmluZycpID9cbiAgICAgICAgICAgICAgICBmaWx0ZXJPYmpba2V5XS52YWx1ZS50b0xvd2VyQ2FzZSgpIDpcbiAgICAgICAgICAgICAgICBmaWx0ZXJPYmpba2V5XS52YWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIENvbnN0LkZJTFRFUl9UWVBFLlJFR0VYOiB7XG4gICAgICAgICAgICBmaWx0ZXJWYWwgPSBmaWx0ZXJPYmpba2V5XS52YWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBmaWx0ZXJWYWwgPSAodHlwZW9mIGZpbHRlck9ialtrZXldLnZhbHVlID09PSAnc3RyaW5nJykgP1xuICAgICAgICAgICAgICBmaWx0ZXJPYmpba2V5XS52YWx1ZS50b0xvd2VyQ2FzZSgpIDpcbiAgICAgICAgICAgICAgZmlsdGVyT2JqW2tleV0udmFsdWU7XG4gICAgICAgICAgICBpZiAoZmlsdGVyVmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgLy8gU3VwcG9ydCBvbGQgZmlsdGVyXG4gICAgICAgICAgICAgIGZpbHRlclZhbCA9IGZpbHRlck9ialtrZXldLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMuY29sSW5mb3Nba2V5XSkge1xuICAgICAgICAgICAgY29uc3QgeyBmb3JtYXQsIGZpbHRlckZvcm1hdHRlZCwgZm9ybWF0RXh0cmFEYXRhIH0gPSB0aGlzLmNvbEluZm9zW2tleV07XG4gICAgICAgICAgICBpZiAoZmlsdGVyRm9ybWF0dGVkICYmIGZvcm1hdCkge1xuICAgICAgICAgICAgICB0YXJnZXRWYWwgPSBmb3JtYXQocm93W2tleV0sIHJvdywgZm9ybWF0RXh0cmFEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzd2l0Y2ggKGZpbHRlck9ialtrZXldLnR5cGUpIHtcbiAgICAgICAgICBjYXNlIENvbnN0LkZJTFRFUl9UWVBFLk5VTUJFUjoge1xuICAgICAgICAgICAgdmFsaWQgPSB0aGlzLmZpbHRlck51bWJlcih0YXJnZXRWYWwsIGZpbHRlclZhbCwgZmlsdGVyT2JqW2tleV0udmFsdWUuY29tcGFyYXRvcik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBDb25zdC5GSUxURVJfVFlQRS5EQVRFOiB7XG4gICAgICAgICAgICB2YWxpZCA9IHRoaXMuZmlsdGVyRGF0ZSh0YXJnZXRWYWwsIGZpbHRlclZhbCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBDb25zdC5GSUxURVJfVFlQRS5SRUdFWDoge1xuICAgICAgICAgICAgdmFsaWQgPSB0aGlzLmZpbHRlclJlZ2V4KHRhcmdldFZhbCwgZmlsdGVyVmFsKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIENvbnN0LkZJTFRFUl9UWVBFLkNVU1RPTToge1xuICAgICAgICAgICAgdmFsaWQgPSB0aGlzLmZpbHRlckN1c3RvbSh0YXJnZXRWYWwsIGZpbHRlclZhbCwgZmlsdGVyT2JqW2tleV0udmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIHZhbGlkID0gdGhpcy5maWx0ZXJUZXh0KHRhcmdldFZhbCwgZmlsdGVyVmFsKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWxpZDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5pc09uRmlsdGVyID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBmaWx0ZXJOdW1iZXIodGFyZ2V0VmFsLCBmaWx0ZXJWYWwsIGNvbXBhcmF0b3IpIHtcbiAgICBsZXQgdmFsaWQgPSB0cnVlO1xuICAgIHN3aXRjaCAoY29tcGFyYXRvcikge1xuICAgIGNhc2UgJz0nOiB7XG4gICAgICBpZiAodGFyZ2V0VmFsICE9IGZpbHRlclZhbCkge1xuICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgJz4nOiB7XG4gICAgICBpZiAodGFyZ2V0VmFsIDw9IGZpbHRlclZhbCkge1xuICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgJz49Jzoge1xuICAgICAgaWYgKHRhcmdldFZhbCA8IGZpbHRlclZhbCkge1xuICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgJzwnOiB7XG4gICAgICBpZiAodGFyZ2V0VmFsID49IGZpbHRlclZhbCkge1xuICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgJzw9Jzoge1xuICAgICAgaWYgKHRhcmdldFZhbCA+IGZpbHRlclZhbCkge1xuICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgJyE9Jzoge1xuICAgICAgaWYgKHRhcmdldFZhbCA9PSBmaWx0ZXJWYWwpIHtcbiAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICBjb25zb2xlLmVycm9yKCdOdW1iZXIgY29tcGFyYXRvciBwcm92aWRlZCBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWxpZDtcbiAgfVxuXG4gIGZpbHRlckRhdGUodGFyZ2V0VmFsLCBmaWx0ZXJWYWwpIHtcbiAgICByZXR1cm4gKHRhcmdldFZhbC5nZXREYXRlKCkgPT09IGZpbHRlclZhbC5nZXREYXRlKCkgJiZcbiAgICAgICAgdGFyZ2V0VmFsLmdldE1vbnRoKCkgPT09IGZpbHRlclZhbC5nZXRNb250aCgpICYmXG4gICAgICAgIHRhcmdldFZhbC5nZXRGdWxsWWVhcigpID09PSBmaWx0ZXJWYWwuZ2V0RnVsbFllYXIoKSk7XG4gIH1cblxuICBmaWx0ZXJSZWdleCh0YXJnZXRWYWwsIGZpbHRlclZhbCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gbmV3IFJlZ0V4cChmaWx0ZXJWYWwsICdpJykudGVzdCh0YXJnZXRWYWwpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ludmFsaWQgcmVndWxhciBleHByZXNzaW9uJyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBmaWx0ZXJDdXN0b20odGFyZ2V0VmFsLCBmaWx0ZXJWYWwsIGNhbGxiYWNrSW5mbykge1xuICAgIGlmIChjYWxsYmFja0luZm8gIT09IG51bGwgJiYgdHlwZW9mIGNhbGxiYWNrSW5mbyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBjYWxsYmFja0luZm8uY2FsbGJhY2sodGFyZ2V0VmFsLCBjYWxsYmFja0luZm8uY2FsbGJhY2tQYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5maWx0ZXJUZXh0KHRhcmdldFZhbCwgZmlsdGVyVmFsKTtcbiAgfVxuXG4gIGZpbHRlclRleHQodGFyZ2V0VmFsLCBmaWx0ZXJWYWwpIHtcbiAgICBpZiAodGFyZ2V0VmFsLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKGZpbHRlclZhbCkgPT09IC0xKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyogR2VuZXJhbCBzZWFyY2ggZnVuY3Rpb25cbiAgICogSXQgd2lsbCBzZWFyY2ggZm9yIHRoZSB0ZXh0IGlmIHRoZSBpbnB1dCBpbmNsdWRlcyB0aGF0IHRleHQ7XG4gICAqL1xuICBzZWFyY2goc2VhcmNoVGV4dCkge1xuICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gbnVsbDtcbiAgICAgIHRoaXMuaXNPbkZpbHRlciA9IGZhbHNlO1xuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gbnVsbDtcbiAgICAgIGlmICh0aGlzLmZpbHRlck9iaiAhPT0gbnVsbCkgdGhpcy5maWx0ZXIodGhpcy5maWx0ZXJPYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlYXJjaFRleHQgPSBzZWFyY2hUZXh0O1xuICAgICAgbGV0IHNlYXJjaFRleHRBcnJheSA9IFtdO1xuXG4gICAgICBpZiAodGhpcy5tdWx0aUNvbHVtblNlYXJjaCkge1xuICAgICAgICBzZWFyY2hUZXh0QXJyYXkgPSBzZWFyY2hUZXh0LnNwbGl0KCcgJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWFyY2hUZXh0QXJyYXkucHVzaChzZWFyY2hUZXh0KTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc291cmNlID0gdGhpcy5pc09uRmlsdGVyID8gdGhpcy5maWx0ZXJlZERhdGEgOiB0aGlzLmRhdGE7XG5cbiAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gc291cmNlLmZpbHRlciggcm93ID0+IHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJvdyk7XG4gICAgICAgIGxldCB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAvLyBmb3IgbG9vcHMgYXJlIHVnbHksIGJ1dCBwZXJmb3JtYW5jZSBtYXR0ZXJzIGhlcmUuXG4gICAgICAgIC8vIEFuZCB5b3UgY2FudCBicmVhayBmcm9tIGEgZm9yRWFjaC5cbiAgICAgICAgLy8gaHR0cDovL2pzcGVyZi5jb20vZm9yLXZzLWZvcmVhY2gvNjZcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGtleXNMZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGtleXNMZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICAgICAgaWYgKHRoaXMuY29sSW5mb3Nba2V5XSAmJiByb3dba2V5XSkge1xuICAgICAgICAgICAgY29uc3QgeyBmb3JtYXQsIGZpbHRlckZvcm1hdHRlZCwgZm9ybWF0RXh0cmFEYXRhLCBzZWFyY2hhYmxlIH0gPSB0aGlzLmNvbEluZm9zW2tleV07XG4gICAgICAgICAgICBsZXQgdGFyZ2V0VmFsID0gcm93W2tleV07XG4gICAgICAgICAgICBpZiAoc2VhcmNoYWJsZSkge1xuICAgICAgICAgICAgICBpZiAoZmlsdGVyRm9ybWF0dGVkICYmIGZvcm1hdCkge1xuICAgICAgICAgICAgICAgIHRhcmdldFZhbCA9IGZvcm1hdCh0YXJnZXRWYWwsIHJvdywgZm9ybWF0RXh0cmFEYXRhKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMCwgdGV4dExlbmd0aCA9IHNlYXJjaFRleHRBcnJheS5sZW5ndGg7IGogPCB0ZXh0TGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJWYWwgPSBzZWFyY2hUZXh0QXJyYXlbal0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0VmFsLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKGZpbHRlclZhbCkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICB2YWxpZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmlzT25GaWx0ZXIgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGdldERhdGFJZ25vcmluZ1BhZ2luYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q3VycmVudERpc3BsYXlEYXRhKCk7XG4gIH1cblxuICBnZXQoKSB7XG4gICAgY29uc3QgX2RhdGEgPSB0aGlzLmdldEN1cnJlbnREaXNwbGF5RGF0YSgpO1xuXG4gICAgaWYgKF9kYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuIF9kYXRhO1xuXG4gICAgaWYgKHRoaXMucmVtb3RlIHx8ICF0aGlzLmVuYWJsZVBhZ2luYXRpb24pIHtcbiAgICAgIHJldHVybiBfZGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICBmb3IgKGxldCBpID0gdGhpcy5wYWdlT2JqLnN0YXJ0OyBpIDw9IHRoaXMucGFnZU9iai5lbmQ7IGkrKykge1xuICAgICAgICByZXN1bHQucHVzaChfZGF0YVtpXSk7XG4gICAgICAgIGlmIChpICsgMSA9PT0gX2RhdGEubGVuZ3RoKSBicmVhaztcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0S2V5RmllbGQoKSB7XG4gICAgcmV0dXJuIHRoaXMua2V5RmllbGQ7XG4gIH1cblxuICBnZXREYXRhTnVtKCkge1xuICAgIHJldHVybiB0aGlzLmdldEN1cnJlbnREaXNwbGF5RGF0YSgpLmxlbmd0aDtcbiAgfVxuXG4gIGlzQ2hhbmdlZFBhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFnZU9iai5zdGFydCAmJiB0aGlzLnBhZ2VPYmouZW5kID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG5cbiAgZ2V0QWxsUm93a2V5KCkge1xuICAgIHJldHVybiB0aGlzLmRhdGEubWFwKHJvdyA9PiB7XG4gICAgICByZXR1cm4gcm93W3RoaXMua2V5RmllbGRdO1xuICAgIH0pO1xuICB9XG59XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9zdG9yZS9UYWJsZURhdGFTdG9yZS5qc1xuICoqLyIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gIHRoaXMuX2V2ZW50cyA9IHRoaXMuX2V2ZW50cyB8fCB7fTtcbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gdGhpcy5fbWF4TGlzdGVuZXJzIHx8IHVuZGVmaW5lZDtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLnhcbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDtcblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG4vLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxuRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcblxuLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMgZnVuY3Rpb24gYWxsb3dzXG4vLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9yIHVubGltaXRlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24obikge1xuICBpZiAoIWlzTnVtYmVyKG4pIHx8IG4gPCAwIHx8IGlzTmFOKG4pKVxuICAgIHRocm93IFR5cGVFcnJvcignbiBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7XG4gIHRoaXMuX21heExpc3RlbmVycyA9IG47XG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24odHlwZSkge1xuICB2YXIgZXIsIGhhbmRsZXIsIGxlbiwgYXJncywgaSwgbGlzdGVuZXJzO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKVxuICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuXG4gIC8vIElmIHRoZXJlIGlzIG5vICdlcnJvcicgZXZlbnQgbGlzdGVuZXIgdGhlbiB0aHJvdy5cbiAgaWYgKHR5cGUgPT09ICdlcnJvcicpIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50cy5lcnJvciB8fFxuICAgICAgICAoaXNPYmplY3QodGhpcy5fZXZlbnRzLmVycm9yKSAmJiAhdGhpcy5fZXZlbnRzLmVycm9yLmxlbmd0aCkpIHtcbiAgICAgIGVyID0gYXJndW1lbnRzWzFdO1xuICAgICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gICAgICB9XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ1VuY2F1Z2h0LCB1bnNwZWNpZmllZCBcImVycm9yXCIgZXZlbnQuJyk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlciA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcblxuICBpZiAoaXNVbmRlZmluZWQoaGFuZGxlcikpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChpc0Z1bmN0aW9uKGhhbmRsZXIpKSB7XG4gICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAvLyBmYXN0IGNhc2VzXG4gICAgICBjYXNlIDE6XG4gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzLCBhcmd1bWVudHNbMV0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgaGFuZGxlci5jYWxsKHRoaXMsIGFyZ3VtZW50c1sxXSwgYXJndW1lbnRzWzJdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICAvLyBzbG93ZXJcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0gMSk7XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBsZW47IGkrKylcbiAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgaGFuZGxlci5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QoaGFuZGxlcikpIHtcbiAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0gMSk7XG4gICAgZm9yIChpID0gMTsgaSA8IGxlbjsgaSsrKVxuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG5cbiAgICBsaXN0ZW5lcnMgPSBoYW5kbGVyLnNsaWNlKCk7XG4gICAgbGVuID0gbGlzdGVuZXJzLmxlbmd0aDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspXG4gICAgICBsaXN0ZW5lcnNbaV0uYXBwbHkodGhpcywgYXJncyk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgbTtcblxuICBpZiAoIWlzRnVuY3Rpb24obGlzdGVuZXIpKVxuICAgIHRocm93IFR5cGVFcnJvcignbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpXG4gICAgdGhpcy5fZXZlbnRzID0ge307XG5cbiAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PT0gXCJuZXdMaXN0ZW5lclwiISBCZWZvcmVcbiAgLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5lcnMsIGZpcnN0IGVtaXQgXCJuZXdMaXN0ZW5lclwiLlxuICBpZiAodGhpcy5fZXZlbnRzLm5ld0xpc3RlbmVyKVxuICAgIHRoaXMuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLFxuICAgICAgICAgICAgICBpc0Z1bmN0aW9uKGxpc3RlbmVyLmxpc3RlbmVyKSA/XG4gICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyIDogbGlzdGVuZXIpO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgIC8vIE9wdGltaXplIHRoZSBjYXNlIG9mIG9uZSBsaXN0ZW5lci4gRG9uJ3QgbmVlZCB0aGUgZXh0cmEgYXJyYXkgb2JqZWN0LlxuICAgIHRoaXMuX2V2ZW50c1t0eXBlXSA9IGxpc3RlbmVyO1xuICBlbHNlIGlmIChpc09iamVjdCh0aGlzLl9ldmVudHNbdHlwZV0pKVxuICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgZ290IGFuIGFycmF5LCBqdXN0IGFwcGVuZC5cbiAgICB0aGlzLl9ldmVudHNbdHlwZV0ucHVzaChsaXN0ZW5lcik7XG4gIGVsc2VcbiAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVkIHRvIGNoYW5nZSB0byBhcnJheS5cbiAgICB0aGlzLl9ldmVudHNbdHlwZV0gPSBbdGhpcy5fZXZlbnRzW3R5cGVdLCBsaXN0ZW5lcl07XG5cbiAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWtcbiAgaWYgKGlzT2JqZWN0KHRoaXMuX2V2ZW50c1t0eXBlXSkgJiYgIXRoaXMuX2V2ZW50c1t0eXBlXS53YXJuZWQpIHtcbiAgICB2YXIgbTtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKHRoaXMuX21heExpc3RlbmVycykpIHtcbiAgICAgIG0gPSB0aGlzLl9tYXhMaXN0ZW5lcnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycztcbiAgICB9XG5cbiAgICBpZiAobSAmJiBtID4gMCAmJiB0aGlzLl9ldmVudHNbdHlwZV0ubGVuZ3RoID4gbSkge1xuICAgICAgdGhpcy5fZXZlbnRzW3R5cGVdLndhcm5lZCA9IHRydWU7XG4gICAgICBjb25zb2xlLmVycm9yKCcobm9kZSkgd2FybmluZzogcG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSAnICtcbiAgICAgICAgICAgICAgICAgICAgJ2xlYWsgZGV0ZWN0ZWQuICVkIGxpc3RlbmVycyBhZGRlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICdVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdC4nLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHNbdHlwZV0ubGVuZ3RoKTtcbiAgICAgIGlmICh0eXBlb2YgY29uc29sZS50cmFjZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBub3Qgc3VwcG9ydGVkIGluIElFIDEwXG4gICAgICAgIGNvbnNvbGUudHJhY2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikge1xuICBpZiAoIWlzRnVuY3Rpb24obGlzdGVuZXIpKVxuICAgIHRocm93IFR5cGVFcnJvcignbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cbiAgdmFyIGZpcmVkID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gZygpIHtcbiAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGcpO1xuXG4gICAgaWYgKCFmaXJlZCkge1xuICAgICAgZmlyZWQgPSB0cnVlO1xuICAgICAgbGlzdGVuZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH1cblxuICBnLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHRoaXMub24odHlwZSwgZyk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBlbWl0cyBhICdyZW1vdmVMaXN0ZW5lcicgZXZlbnQgaWZmIHRoZSBsaXN0ZW5lciB3YXMgcmVtb3ZlZFxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBsaXN0LCBwb3NpdGlvbiwgbGVuZ3RoLCBpO1xuXG4gIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpXG4gICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblxuICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhdGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIGxpc3QgPSB0aGlzLl9ldmVudHNbdHlwZV07XG4gIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICBwb3NpdGlvbiA9IC0xO1xuXG4gIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fFxuICAgICAgKGlzRnVuY3Rpb24obGlzdC5saXN0ZW5lcikgJiYgbGlzdC5saXN0ZW5lciA9PT0gbGlzdGVuZXIpKSB7XG4gICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcbiAgICBpZiAodGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3RlbmVyKTtcblxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KGxpc3QpKSB7XG4gICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gPiAwOykge1xuICAgICAgaWYgKGxpc3RbaV0gPT09IGxpc3RlbmVyIHx8XG4gICAgICAgICAgKGxpc3RbaV0ubGlzdGVuZXIgJiYgbGlzdFtpXS5saXN0ZW5lciA9PT0gbGlzdGVuZXIpKSB7XG4gICAgICAgIHBvc2l0aW9uID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBvc2l0aW9uIDwgMClcbiAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgaWYgKGxpc3QubGVuZ3RoID09PSAxKSB7XG4gICAgICBsaXN0Lmxlbmd0aCA9IDA7XG4gICAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBsaXN0LnNwbGljZShwb3NpdGlvbiwgMSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcilcbiAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBsaXN0ZW5lcik7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24odHlwZSkge1xuICB2YXIga2V5LCBsaXN0ZW5lcnM7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgLy8gbm90IGxpc3RlbmluZyBmb3IgcmVtb3ZlTGlzdGVuZXIsIG5vIG5lZWQgdG8gZW1pdFxuICBpZiAoIXRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcikge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKVxuICAgICAgdGhpcy5fZXZlbnRzID0ge307XG4gICAgZWxzZSBpZiAodGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFsbCBsaXN0ZW5lcnMgb24gYWxsIGV2ZW50c1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGZvciAoa2V5IGluIHRoaXMuX2V2ZW50cykge1xuICAgICAgaWYgKGtleSA9PT0gJ3JlbW92ZUxpc3RlbmVyJykgY29udGludWU7XG4gICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhrZXkpO1xuICAgIH1cbiAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXInKTtcbiAgICB0aGlzLl9ldmVudHMgPSB7fTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcblxuICBpZiAoaXNGdW5jdGlvbihsaXN0ZW5lcnMpKSB7XG4gICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpO1xuICB9IGVsc2Uge1xuICAgIC8vIExJRk8gb3JkZXJcbiAgICB3aGlsZSAobGlzdGVuZXJzLmxlbmd0aClcbiAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2xpc3RlbmVycy5sZW5ndGggLSAxXSk7XG4gIH1cbiAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24odHlwZSkge1xuICB2YXIgcmV0O1xuICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhdGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgIHJldCA9IFtdO1xuICBlbHNlIGlmIChpc0Z1bmN0aW9uKHRoaXMuX2V2ZW50c1t0eXBlXSkpXG4gICAgcmV0ID0gW3RoaXMuX2V2ZW50c1t0eXBlXV07XG4gIGVsc2VcbiAgICByZXQgPSB0aGlzLl9ldmVudHNbdHlwZV0uc2xpY2UoKTtcbiAgcmV0dXJuIHJldDtcbn07XG5cbkV2ZW50RW1pdHRlci5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkge1xuICB2YXIgcmV0O1xuICBpZiAoIWVtaXR0ZXIuX2V2ZW50cyB8fCAhZW1pdHRlci5fZXZlbnRzW3R5cGVdKVxuICAgIHJldCA9IDA7XG4gIGVsc2UgaWYgKGlzRnVuY3Rpb24oZW1pdHRlci5fZXZlbnRzW3R5cGVdKSlcbiAgICByZXQgPSAxO1xuICBlbHNlXG4gICAgcmV0ID0gZW1pdHRlci5fZXZlbnRzW3R5cGVdLmxlbmd0aDtcbiAgcmV0dXJuIHJldDtcbn07XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBpc051bWJlcihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IHZvaWQgMDtcbn1cblxuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L2V2ZW50cy9ldmVudHMuanNcbiAqKiBtb2R1bGUgaWQgPSAzM1xuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBDb25zdCBmcm9tICcuL0NvbnN0JztcbmltcG9ydCBjbGFzc1NldCBmcm9tICdjbGFzc25hbWVzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICByZW5kZXJSZWFjdFNvcnRDYXJldChvcmRlcikge1xuICAgIGNvbnN0IG9yZGVyQ2xhc3MgPSBjbGFzc1NldCgnb3JkZXInLCB7XG4gICAgICAnZHJvcHVwJzogb3JkZXIgPT09IENvbnN0LlNPUlRfQVNDXG4gICAgfSk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17IG9yZGVyQ2xhc3MgfT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSdjYXJldCcgc3R5bGU9eyB7IG1hcmdpbjogJzBweCA1cHgnIH0gfT48L3NwYW4+XG4gICAgICA8L3NwYW4+XG4gICAgKTtcbiAgfSxcblxuICBnZXRTY3JvbGxCYXJXaWR0aCgpIHtcbiAgICBjb25zdCBpbm5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTtcbiAgICBpbm5lci5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICBpbm5lci5zdHlsZS5oZWlnaHQgPSAnMjAwcHgnO1xuXG4gICAgY29uc3Qgb3V0ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBvdXRlci5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgb3V0ZXIuc3R5bGUudG9wID0gJzBweCc7XG4gICAgb3V0ZXIuc3R5bGUubGVmdCA9ICcwcHgnO1xuICAgIG91dGVyLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICBvdXRlci5zdHlsZS53aWR0aCA9ICcyMDBweCc7XG4gICAgb3V0ZXIuc3R5bGUuaGVpZ2h0ID0gJzE1MHB4JztcbiAgICBvdXRlci5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICAgIG91dGVyLmFwcGVuZENoaWxkKGlubmVyKTtcblxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQob3V0ZXIpO1xuICAgIGNvbnN0IHcxID0gaW5uZXIub2Zmc2V0V2lkdGg7XG4gICAgb3V0ZXIuc3R5bGUub3ZlcmZsb3cgPSAnc2Nyb2xsJztcbiAgICBsZXQgdzIgPSBpbm5lci5vZmZzZXRXaWR0aDtcbiAgICBpZiAodzEgPT09IHcyKSB3MiA9IG91dGVyLmNsaWVudFdpZHRoO1xuXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChvdXRlcik7XG5cbiAgICByZXR1cm4gKHcxIC0gdzIpO1xuICB9LFxuXG4gIGNhblVzZURPTSgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG4gIH1cbn07XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy91dGlsLmpzXG4gKiovIiwiLyogZXNsaW50IGJsb2NrLXNjb3BlZC12YXI6IDAgKi9cbi8qIGVzbGludCB2YXJzLW9uLXRvcDogMCAqL1xuLyogZXNsaW50IG5vLXZhcjogMCAqL1xuLyogZXNsaW50IG5vLXVudXNlZC12YXJzOiAwICovXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgY29uc3QgZmlsZXNhdmVyID0gcmVxdWlyZSgnLi9maWxlc2F2ZXInKTtcbiAgdmFyIHNhdmVBcyA9IGZpbGVzYXZlci5zYXZlQXM7XG59XG5cbmZ1bmN0aW9uIHRvU3RyaW5nKGRhdGEsIGtleXMpIHtcbiAgbGV0IGRhdGFTdHJpbmcgPSAnJztcbiAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSByZXR1cm4gZGF0YVN0cmluZztcblxuICBkYXRhU3RyaW5nICs9IGtleXMuam9pbignLCcpICsgJ1xcbic7XG5cbiAgZGF0YS5tYXAoZnVuY3Rpb24ocm93KSB7XG4gICAga2V5cy5tYXAoZnVuY3Rpb24oY29sLCBpKSB7XG4gICAgICBjb25zdCBjZWxsID0gdHlwZW9mIHJvd1tjb2xdICE9PSAndW5kZWZpbmVkJyA/ICgnXCInICsgcm93W2NvbF0gKyAnXCInKSA6ICcnO1xuICAgICAgZGF0YVN0cmluZyArPSBjZWxsO1xuICAgICAgaWYgKGkgKyAxIDwga2V5cy5sZW5ndGgpIGRhdGFTdHJpbmcgKz0gJywnO1xuICAgIH0pO1xuXG4gICAgZGF0YVN0cmluZyArPSAnXFxuJztcbiAgfSk7XG5cbiAgcmV0dXJuIGRhdGFTdHJpbmc7XG59XG5cbmNvbnN0IGV4cG9ydENTViA9IGZ1bmN0aW9uKGRhdGEsIGtleXMsIGZpbGVuYW1lKSB7XG4gIGNvbnN0IGRhdGFTdHJpbmcgPSB0b1N0cmluZyhkYXRhLCBrZXlzKTtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgc2F2ZUFzKG5ldyBCbG9iKFsgZGF0YVN0cmluZyBdLFxuICAgICAgICB7IHR5cGU6ICd0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgnIH0pLFxuICAgICAgICBmaWxlbmFtZSB8fCAnc3ByZWFkc2hlZXQuY3N2Jyk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGV4cG9ydENTVjtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2Nzdl9leHBvcnRfdXRpbC5qc1xuICoqLyIsIi8qIEZpbGVTYXZlci5qc1xuICogQSBzYXZlQXMoKSBGaWxlU2F2ZXIgaW1wbGVtZW50YXRpb24uXG4gKiAxLjEuMjAxNTEwMDNcbiAqXG4gKiBCeSBFbGkgR3JleSwgaHR0cDovL2VsaWdyZXkuY29tXG4gKiBMaWNlbnNlOiBNSVRcbiAqICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGlncmV5L0ZpbGVTYXZlci5qcy9ibG9iL21hc3Rlci9MSUNFTlNFLm1kXG4gKi9cblxuLypnbG9iYWwgc2VsZiAqL1xuLypqc2xpbnQgYml0d2lzZTogdHJ1ZSwgaW5kZW50OiA0LCBsYXhicmVhazogdHJ1ZSwgbGF4Y29tbWE6IHRydWUsIHNtYXJ0dGFiczogdHJ1ZSwgcGx1c3BsdXM6IHRydWUgKi9cblxuLyohIEBzb3VyY2UgaHR0cDovL3B1cmwuZWxpZ3JleS5jb20vZ2l0aHViL0ZpbGVTYXZlci5qcy9ibG9iL21hc3Rlci9GaWxlU2F2ZXIuanMgKi9cblxudmFyIHNhdmVBcyA9IHNhdmVBcyB8fCAoZnVuY3Rpb24odmlldykge1xuXHRcInVzZSBzdHJpY3RcIjtcblx0Ly8gSUUgPDEwIGlzIGV4cGxpY2l0bHkgdW5zdXBwb3J0ZWRcblx0aWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCIgJiYgL01TSUUgWzEtOV1cXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpIHtcblx0XHRyZXR1cm47XG5cdH1cblx0dmFyXG5cdFx0ICBkb2MgPSB2aWV3LmRvY3VtZW50XG5cdFx0ICAvLyBvbmx5IGdldCBVUkwgd2hlbiBuZWNlc3NhcnkgaW4gY2FzZSBCbG9iLmpzIGhhc24ndCBvdmVycmlkZGVuIGl0IHlldFxuXHRcdCwgZ2V0X1VSTCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHZpZXcuVVJMIHx8IHZpZXcud2Via2l0VVJMIHx8IHZpZXc7XG5cdFx0fVxuXHRcdCwgc2F2ZV9saW5rID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIiwgXCJhXCIpXG5cdFx0LCBjYW5fdXNlX3NhdmVfbGluayA9IFwiZG93bmxvYWRcIiBpbiBzYXZlX2xpbmtcblx0XHQsIGNsaWNrID0gZnVuY3Rpb24obm9kZSkge1xuXHRcdFx0dmFyIGV2ZW50ID0gbmV3IE1vdXNlRXZlbnQoXCJjbGlja1wiKTtcblx0XHRcdG5vZGUuZGlzcGF0Y2hFdmVudChldmVudCk7XG5cdFx0fVxuXHRcdCwgaXNfc2FmYXJpID0gL1ZlcnNpb25cXC9bXFxkXFwuXSsuKlNhZmFyaS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KVxuXHRcdCwgd2Via2l0X3JlcV9mcyA9IHZpZXcud2Via2l0UmVxdWVzdEZpbGVTeXN0ZW1cblx0XHQsIHJlcV9mcyA9IHZpZXcucmVxdWVzdEZpbGVTeXN0ZW0gfHwgd2Via2l0X3JlcV9mcyB8fCB2aWV3Lm1velJlcXVlc3RGaWxlU3lzdGVtXG5cdFx0LCB0aHJvd19vdXRzaWRlID0gZnVuY3Rpb24oZXgpIHtcblx0XHRcdCh2aWV3LnNldEltbWVkaWF0ZSB8fCB2aWV3LnNldFRpbWVvdXQpKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR0aHJvdyBleDtcblx0XHRcdH0sIDApO1xuXHRcdH1cblx0XHQsIGZvcmNlX3NhdmVhYmxlX3R5cGUgPSBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiXG5cdFx0LCBmc19taW5fc2l6ZSA9IDBcblx0XHQvLyBTZWUgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTM3NTI5NyNjNyBhbmRcblx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vZWxpZ3JleS9GaWxlU2F2ZXIuanMvY29tbWl0LzQ4NTkzMGEjY29tbWl0Y29tbWVudC04NzY4MDQ3XG5cdFx0Ly8gZm9yIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoZSB0aW1lb3V0IGFuZCByZXZvY2F0aW9uIGZsb3dcblx0XHQsIGFyYml0cmFyeV9yZXZva2VfdGltZW91dCA9IDUwMCAvLyBpbiBtc1xuXHRcdCwgcmV2b2tlID0gZnVuY3Rpb24oZmlsZSkge1xuXHRcdFx0dmFyIHJldm9rZXIgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBmaWxlID09PSBcInN0cmluZ1wiKSB7IC8vIGZpbGUgaXMgYW4gb2JqZWN0IFVSTFxuXHRcdFx0XHRcdGdldF9VUkwoKS5yZXZva2VPYmplY3RVUkwoZmlsZSk7XG5cdFx0XHRcdH0gZWxzZSB7IC8vIGZpbGUgaXMgYSBGaWxlXG5cdFx0XHRcdFx0ZmlsZS5yZW1vdmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdGlmICh2aWV3LmNocm9tZSkge1xuXHRcdFx0XHRyZXZva2VyKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZXRUaW1lb3V0KHJldm9rZXIsIGFyYml0cmFyeV9yZXZva2VfdGltZW91dCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdCwgZGlzcGF0Y2ggPSBmdW5jdGlvbihmaWxlc2F2ZXIsIGV2ZW50X3R5cGVzLCBldmVudCkge1xuXHRcdFx0ZXZlbnRfdHlwZXMgPSBbXS5jb25jYXQoZXZlbnRfdHlwZXMpO1xuXHRcdFx0dmFyIGkgPSBldmVudF90eXBlcy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdHZhciBsaXN0ZW5lciA9IGZpbGVzYXZlcltcIm9uXCIgKyBldmVudF90eXBlc1tpXV07XG5cdFx0XHRcdGlmICh0eXBlb2YgbGlzdGVuZXIgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRsaXN0ZW5lci5jYWxsKGZpbGVzYXZlciwgZXZlbnQgfHwgZmlsZXNhdmVyKTtcblx0XHRcdFx0XHR9IGNhdGNoIChleCkge1xuXHRcdFx0XHRcdFx0dGhyb3dfb3V0c2lkZShleCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdCwgYXV0b19ib20gPSBmdW5jdGlvbihibG9iKSB7XG5cdFx0XHQvLyBwcmVwZW5kIEJPTSBmb3IgVVRGLTggWE1MIGFuZCB0ZXh0LyogdHlwZXMgKGluY2x1ZGluZyBIVE1MKVxuXHRcdFx0aWYgKC9eXFxzKig/OnRleHRcXC9cXFMqfGFwcGxpY2F0aW9uXFwveG1sfFxcUypcXC9cXFMqXFwreG1sKVxccyo7LipjaGFyc2V0XFxzKj1cXHMqdXRmLTgvaS50ZXN0KGJsb2IudHlwZSkpIHtcblx0XHRcdFx0cmV0dXJuIG5ldyBCbG9iKFtcIlxcdWZlZmZcIiwgYmxvYl0sIHt0eXBlOiBibG9iLnR5cGV9KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBibG9iO1xuXHRcdH1cblx0XHQsIEZpbGVTYXZlciA9IGZ1bmN0aW9uKGJsb2IsIG5hbWUsIG5vX2F1dG9fYm9tKSB7XG5cdFx0XHRpZiAoIW5vX2F1dG9fYm9tKSB7XG5cdFx0XHRcdGJsb2IgPSBhdXRvX2JvbShibG9iKTtcblx0XHRcdH1cblx0XHRcdC8vIEZpcnN0IHRyeSBhLmRvd25sb2FkLCB0aGVuIHdlYiBmaWxlc3lzdGVtLCB0aGVuIG9iamVjdCBVUkxzXG5cdFx0XHR2YXJcblx0XHRcdFx0ICBmaWxlc2F2ZXIgPSB0aGlzXG5cdFx0XHRcdCwgdHlwZSA9IGJsb2IudHlwZVxuXHRcdFx0XHQsIGJsb2JfY2hhbmdlZCA9IGZhbHNlXG5cdFx0XHRcdCwgb2JqZWN0X3VybFxuXHRcdFx0XHQsIHRhcmdldF92aWV3XG5cdFx0XHRcdCwgZGlzcGF0Y2hfYWxsID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0ZGlzcGF0Y2goZmlsZXNhdmVyLCBcIndyaXRlc3RhcnQgcHJvZ3Jlc3Mgd3JpdGUgd3JpdGVlbmRcIi5zcGxpdChcIiBcIikpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIG9uIGFueSBmaWxlc3lzIGVycm9ycyByZXZlcnQgdG8gc2F2aW5nIHdpdGggb2JqZWN0IFVSTHNcblx0XHRcdFx0LCBmc19lcnJvciA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICh0YXJnZXRfdmlldyAmJiBpc19zYWZhcmkgJiYgdHlwZW9mIEZpbGVSZWFkZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdFx0XHRcdC8vIFNhZmFyaSBkb2Vzbid0IGFsbG93IGRvd25sb2FkaW5nIG9mIGJsb2IgdXJsc1xuXHRcdFx0XHRcdFx0dmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cdFx0XHRcdFx0XHRyZWFkZXIub25sb2FkZW5kID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBiYXNlNjREYXRhID0gcmVhZGVyLnJlc3VsdDtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0X3ZpZXcubG9jYXRpb24uaHJlZiA9IFwiZGF0YTphdHRhY2htZW50L2ZpbGVcIiArIGJhc2U2NERhdGEuc2xpY2UoYmFzZTY0RGF0YS5zZWFyY2goL1ssO10vKSk7XG5cdFx0XHRcdFx0XHRcdGZpbGVzYXZlci5yZWFkeVN0YXRlID0gZmlsZXNhdmVyLkRPTkU7XG5cdFx0XHRcdFx0XHRcdGRpc3BhdGNoX2FsbCgpO1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdHJlYWRlci5yZWFkQXNEYXRhVVJMKGJsb2IpO1xuXHRcdFx0XHRcdFx0ZmlsZXNhdmVyLnJlYWR5U3RhdGUgPSBmaWxlc2F2ZXIuSU5JVDtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gZG9uJ3QgY3JlYXRlIG1vcmUgb2JqZWN0IFVSTHMgdGhhbiBuZWVkZWRcblx0XHRcdFx0XHRpZiAoYmxvYl9jaGFuZ2VkIHx8ICFvYmplY3RfdXJsKSB7XG5cdFx0XHRcdFx0XHRvYmplY3RfdXJsID0gZ2V0X1VSTCgpLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKHRhcmdldF92aWV3KSB7XG5cdFx0XHRcdFx0XHR0YXJnZXRfdmlldy5sb2NhdGlvbi5ocmVmID0gb2JqZWN0X3VybDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dmFyIG5ld190YWIgPSB2aWV3Lm9wZW4ob2JqZWN0X3VybCwgXCJfYmxhbmtcIik7XG5cdFx0XHRcdFx0XHRpZiAobmV3X3RhYiA9PSB1bmRlZmluZWQgJiYgaXNfc2FmYXJpKSB7XG5cdFx0XHRcdFx0XHRcdC8vQXBwbGUgZG8gbm90IGFsbG93IHdpbmRvdy5vcGVuLCBzZWUgaHR0cDovL2JpdC5seS8xa1pmZlJJXG5cdFx0XHRcdFx0XHRcdHZpZXcubG9jYXRpb24uaHJlZiA9IG9iamVjdF91cmxcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZmlsZXNhdmVyLnJlYWR5U3RhdGUgPSBmaWxlc2F2ZXIuRE9ORTtcblx0XHRcdFx0XHRkaXNwYXRjaF9hbGwoKTtcblx0XHRcdFx0XHRyZXZva2Uob2JqZWN0X3VybCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0LCBhYm9ydGFibGUgPSBmdW5jdGlvbihmdW5jKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0aWYgKGZpbGVzYXZlci5yZWFkeVN0YXRlICE9PSBmaWxlc2F2ZXIuRE9ORSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdFx0LCBjcmVhdGVfaWZfbm90X2ZvdW5kID0ge2NyZWF0ZTogdHJ1ZSwgZXhjbHVzaXZlOiBmYWxzZX1cblx0XHRcdFx0LCBzbGljZVxuXHRcdFx0O1xuXHRcdFx0ZmlsZXNhdmVyLnJlYWR5U3RhdGUgPSBmaWxlc2F2ZXIuSU5JVDtcblx0XHRcdGlmICghbmFtZSkge1xuXHRcdFx0XHRuYW1lID0gXCJkb3dubG9hZFwiO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGNhbl91c2Vfc2F2ZV9saW5rKSB7XG5cdFx0XHRcdG9iamVjdF91cmwgPSBnZXRfVVJMKCkuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuXHRcdFx0XHRzYXZlX2xpbmsuaHJlZiA9IG9iamVjdF91cmw7XG5cdFx0XHRcdHNhdmVfbGluay5kb3dubG9hZCA9IG5hbWU7XG5cdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0Y2xpY2soc2F2ZV9saW5rKTtcblx0XHRcdFx0XHRkaXNwYXRjaF9hbGwoKTtcblx0XHRcdFx0XHRyZXZva2Uob2JqZWN0X3VybCk7XG5cdFx0XHRcdFx0ZmlsZXNhdmVyLnJlYWR5U3RhdGUgPSBmaWxlc2F2ZXIuRE9ORTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIE9iamVjdCBhbmQgd2ViIGZpbGVzeXN0ZW0gVVJMcyBoYXZlIGEgcHJvYmxlbSBzYXZpbmcgaW4gR29vZ2xlIENocm9tZSB3aGVuXG5cdFx0XHQvLyB2aWV3ZWQgaW4gYSB0YWIsIHNvIEkgZm9yY2Ugc2F2ZSB3aXRoIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVxuXHRcdFx0Ly8gaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9OTExNThcblx0XHRcdC8vIFVwZGF0ZTogR29vZ2xlIGVycmFudGx5IGNsb3NlZCA5MTE1OCwgSSBzdWJtaXR0ZWQgaXQgYWdhaW46XG5cdFx0XHQvLyBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzg5NjQyXG5cdFx0XHRpZiAodmlldy5jaHJvbWUgJiYgdHlwZSAmJiB0eXBlICE9PSBmb3JjZV9zYXZlYWJsZV90eXBlKSB7XG5cdFx0XHRcdHNsaWNlID0gYmxvYi5zbGljZSB8fCBibG9iLndlYmtpdFNsaWNlO1xuXHRcdFx0XHRibG9iID0gc2xpY2UuY2FsbChibG9iLCAwLCBibG9iLnNpemUsIGZvcmNlX3NhdmVhYmxlX3R5cGUpO1xuXHRcdFx0XHRibG9iX2NoYW5nZWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0Ly8gU2luY2UgSSBjYW4ndCBiZSBzdXJlIHRoYXQgdGhlIGd1ZXNzZWQgbWVkaWEgdHlwZSB3aWxsIHRyaWdnZXIgYSBkb3dubG9hZFxuXHRcdFx0Ly8gaW4gV2ViS2l0LCBJIGFwcGVuZCAuZG93bmxvYWQgdG8gdGhlIGZpbGVuYW1lLlxuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1NDQwXG5cdFx0XHRpZiAod2Via2l0X3JlcV9mcyAmJiBuYW1lICE9PSBcImRvd25sb2FkXCIpIHtcblx0XHRcdFx0bmFtZSArPSBcIi5kb3dubG9hZFwiO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHR5cGUgPT09IGZvcmNlX3NhdmVhYmxlX3R5cGUgfHwgd2Via2l0X3JlcV9mcykge1xuXHRcdFx0XHR0YXJnZXRfdmlldyA9IHZpZXc7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIXJlcV9mcykge1xuXHRcdFx0XHRmc19lcnJvcigpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRmc19taW5fc2l6ZSArPSBibG9iLnNpemU7XG5cdFx0XHRyZXFfZnModmlldy5URU1QT1JBUlksIGZzX21pbl9zaXplLCBhYm9ydGFibGUoZnVuY3Rpb24oZnMpIHtcblx0XHRcdFx0ZnMucm9vdC5nZXREaXJlY3RvcnkoXCJzYXZlZFwiLCBjcmVhdGVfaWZfbm90X2ZvdW5kLCBhYm9ydGFibGUoZnVuY3Rpb24oZGlyKSB7XG5cdFx0XHRcdFx0dmFyIHNhdmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGRpci5nZXRGaWxlKG5hbWUsIGNyZWF0ZV9pZl9ub3RfZm91bmQsIGFib3J0YWJsZShmdW5jdGlvbihmaWxlKSB7XG5cdFx0XHRcdFx0XHRcdGZpbGUuY3JlYXRlV3JpdGVyKGFib3J0YWJsZShmdW5jdGlvbih3cml0ZXIpIHtcblx0XHRcdFx0XHRcdFx0XHR3cml0ZXIub253cml0ZWVuZCA9IGZ1bmN0aW9uKGV2ZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0YXJnZXRfdmlldy5sb2NhdGlvbi5ocmVmID0gZmlsZS50b1VSTCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZmlsZXNhdmVyLnJlYWR5U3RhdGUgPSBmaWxlc2F2ZXIuRE9ORTtcblx0XHRcdFx0XHRcdFx0XHRcdGRpc3BhdGNoKGZpbGVzYXZlciwgXCJ3cml0ZWVuZFwiLCBldmVudCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXZva2UoZmlsZSk7XG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHR3cml0ZXIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGVycm9yID0gd3JpdGVyLmVycm9yO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGVycm9yLmNvZGUgIT09IGVycm9yLkFCT1JUX0VSUikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRmc19lcnJvcigpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0XCJ3cml0ZXN0YXJ0IHByb2dyZXNzIHdyaXRlIGFib3J0XCIuc3BsaXQoXCIgXCIpLmZvckVhY2goZnVuY3Rpb24oZXZlbnQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHdyaXRlcltcIm9uXCIgKyBldmVudF0gPSBmaWxlc2F2ZXJbXCJvblwiICsgZXZlbnRdO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdHdyaXRlci53cml0ZShibG9iKTtcblx0XHRcdFx0XHRcdFx0XHRmaWxlc2F2ZXIuYWJvcnQgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHdyaXRlci5hYm9ydCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZmlsZXNhdmVyLnJlYWR5U3RhdGUgPSBmaWxlc2F2ZXIuRE9ORTtcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdGZpbGVzYXZlci5yZWFkeVN0YXRlID0gZmlsZXNhdmVyLldSSVRJTkc7XG5cdFx0XHRcdFx0XHRcdH0pLCBmc19lcnJvcik7XG5cdFx0XHRcdFx0XHR9KSwgZnNfZXJyb3IpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0ZGlyLmdldEZpbGUobmFtZSwge2NyZWF0ZTogZmFsc2V9LCBhYm9ydGFibGUoZnVuY3Rpb24oZmlsZSkge1xuXHRcdFx0XHRcdFx0Ly8gZGVsZXRlIGZpbGUgaWYgaXQgYWxyZWFkeSBleGlzdHNcblx0XHRcdFx0XHRcdGZpbGUucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHRzYXZlKCk7XG5cdFx0XHRcdFx0fSksIGFib3J0YWJsZShmdW5jdGlvbihleCkge1xuXHRcdFx0XHRcdFx0aWYgKGV4LmNvZGUgPT09IGV4Lk5PVF9GT1VORF9FUlIpIHtcblx0XHRcdFx0XHRcdFx0c2F2ZSgpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0ZnNfZXJyb3IoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdH0pLCBmc19lcnJvcik7XG5cdFx0XHR9KSwgZnNfZXJyb3IpO1xuXHRcdH1cblx0XHQsIEZTX3Byb3RvID0gRmlsZVNhdmVyLnByb3RvdHlwZVxuXHRcdCwgc2F2ZUFzID0gZnVuY3Rpb24oYmxvYiwgbmFtZSwgbm9fYXV0b19ib20pIHtcblx0XHRcdHJldHVybiBuZXcgRmlsZVNhdmVyKGJsb2IsIG5hbWUsIG5vX2F1dG9fYm9tKTtcblx0XHR9XG5cdDtcblx0Ly8gSUUgMTArIChuYXRpdmUgc2F2ZUFzKVxuXHRpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIiAmJiBuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYikge1xuXHRcdHJldHVybiBmdW5jdGlvbihibG9iLCBuYW1lLCBub19hdXRvX2JvbSkge1xuXHRcdFx0aWYgKCFub19hdXRvX2JvbSkge1xuXHRcdFx0XHRibG9iID0gYXV0b19ib20oYmxvYik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IoYmxvYiwgbmFtZSB8fCBcImRvd25sb2FkXCIpO1xuXHRcdH07XG5cdH1cblxuXHRGU19wcm90by5hYm9ydCA9IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBmaWxlc2F2ZXIgPSB0aGlzO1xuXHRcdGZpbGVzYXZlci5yZWFkeVN0YXRlID0gZmlsZXNhdmVyLkRPTkU7XG5cdFx0ZGlzcGF0Y2goZmlsZXNhdmVyLCBcImFib3J0XCIpO1xuXHR9O1xuXHRGU19wcm90by5yZWFkeVN0YXRlID0gRlNfcHJvdG8uSU5JVCA9IDA7XG5cdEZTX3Byb3RvLldSSVRJTkcgPSAxO1xuXHRGU19wcm90by5ET05FID0gMjtcblxuXHRGU19wcm90by5lcnJvciA9XG5cdEZTX3Byb3RvLm9ud3JpdGVzdGFydCA9XG5cdEZTX3Byb3RvLm9ucHJvZ3Jlc3MgPVxuXHRGU19wcm90by5vbndyaXRlID1cblx0RlNfcHJvdG8ub25hYm9ydCA9XG5cdEZTX3Byb3RvLm9uZXJyb3IgPVxuXHRGU19wcm90by5vbndyaXRlZW5kID1cblx0XHRudWxsO1xuXG5cdHJldHVybiBzYXZlQXM7XG59KFxuXHQgICB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmXG5cdHx8IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93XG5cdHx8IHRoaXMuY29udGVudFxuKSk7XG4vLyBgc2VsZmAgaXMgdW5kZWZpbmVkIGluIEZpcmVmb3ggZm9yIEFuZHJvaWQgY29udGVudCBzY3JpcHQgY29udGV4dFxuLy8gd2hpbGUgYHRoaXNgIGlzIG5zSUNvbnRlbnRGcmFtZU1lc3NhZ2VNYW5hZ2VyXG4vLyB3aXRoIGFuIGF0dHJpYnV0ZSBgY29udGVudGAgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgd2luZG93XG5cbmlmICh0eXBlb2YgbW9kdWxlICE9PSBcInVuZGVmaW5lZFwiICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gIG1vZHVsZS5leHBvcnRzLnNhdmVBcyA9IHNhdmVBcztcbn0gZWxzZSBpZiAoKHR5cGVvZiBkZWZpbmUgIT09IFwidW5kZWZpbmVkXCIgJiYgZGVmaW5lICE9PSBudWxsKSAmJiAoZGVmaW5lLmFtZCAhPSBudWxsKSkge1xuICBkZWZpbmUoW10sIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBzYXZlQXM7XG4gIH0pO1xufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvZmlsZXNhdmVyLmpzXG4gKiovIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdGhyb3cgbmV3IEVycm9yKFwiZGVmaW5lIGNhbm5vdCBiZSB1c2VkIGluZGlyZWN0XCIpOyB9O1xyXG5cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqICh3ZWJwYWNrKS9idWlsZGluL2FtZC1kZWZpbmUuanNcbiAqKiBtb2R1bGUgaWQgPSAzN1xuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIiwibW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfYW1kX29wdGlvbnNfXztcclxuXG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAod2VicGFjaykvYnVpbGRpbi9hbWQtb3B0aW9ucy5qc1xuICoqIG1vZHVsZSBpZCA9IDM4XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iLCJpbXBvcnQgQ29uc3QgZnJvbSAnLi9Db25zdCc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuXG5leHBvcnQgY2xhc3MgRmlsdGVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IoZGF0YSkge1xuICAgIHN1cGVyKGRhdGEpO1xuICAgIHRoaXMuY3VycmVudEZpbHRlciA9IHt9O1xuICB9XG5cbiAgaGFuZGxlRmlsdGVyKGRhdGFGaWVsZCwgdmFsdWUsIHR5cGUpIHtcbiAgICBjb25zdCBmaWx0ZXJUeXBlID0gdHlwZSB8fCBDb25zdC5GSUxURVJfVFlQRS5DVVNUT007XG5cbiAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgLy8gdmFsdWUgb2YgdGhlIGZpbHRlciBpcyBhbiBvYmplY3RcbiAgICAgIGxldCBoYXNWYWx1ZSA9IHRydWU7XG4gICAgICBmb3IgKGNvbnN0IHByb3AgaW4gdmFsdWUpIHtcbiAgICAgICAgaWYgKCF2YWx1ZVtwcm9wXSB8fCB2YWx1ZVtwcm9wXSA9PT0gJycpIHtcbiAgICAgICAgICBoYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBpZiBvbmUgb2YgdGhlIG9iamVjdCBwcm9wZXJ0aWVzIGlzIHVuZGVmaW5lZCBvciBlbXB0eSwgd2UgcmVtb3ZlIHRoZSBmaWx0ZXJcbiAgICAgIGlmIChoYXNWYWx1ZSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJbZGF0YUZpZWxkXSA9IHsgdmFsdWU6IHZhbHVlLCB0eXBlOiBmaWx0ZXJUeXBlIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdGhpcy5jdXJyZW50RmlsdGVyW2RhdGFGaWVsZF07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghdmFsdWUgfHwgdmFsdWUudHJpbSgpID09PSAnJykge1xuICAgICAgZGVsZXRlIHRoaXMuY3VycmVudEZpbHRlcltkYXRhRmllbGRdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJbZGF0YUZpZWxkXSA9IHsgdmFsdWU6IHZhbHVlLnRyaW0oKSwgdHlwZTogZmlsdGVyVHlwZSB9O1xuICAgIH1cbiAgICB0aGlzLmVtaXQoJ29uRmlsdGVyQ2hhbmdlJywgdGhpcy5jdXJyZW50RmlsdGVyKTtcbiAgfVxufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvRmlsdGVyLmpzXG4gKiovIiwiLyogZXNsaW50IGRlZmF1bHQtY2FzZTogMCAqL1xuLyogZXNsaW50IGd1YXJkLWZvci1pbjogMCAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgUHJvcFR5cGVzIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4vQ29uc3QnO1xuaW1wb3J0IFV0aWwgZnJvbSAnLi91dGlsJztcbmltcG9ydCBEYXRlRmlsdGVyIGZyb20gJy4vZmlsdGVycy9EYXRlJztcbmltcG9ydCBUZXh0RmlsdGVyIGZyb20gJy4vZmlsdGVycy9UZXh0JztcbmltcG9ydCBSZWdleEZpbHRlciBmcm9tICcuL2ZpbHRlcnMvUmVnZXgnO1xuaW1wb3J0IFNlbGVjdEZpbHRlciBmcm9tICcuL2ZpbHRlcnMvU2VsZWN0JztcbmltcG9ydCBOdW1iZXJGaWx0ZXIgZnJvbSAnLi9maWx0ZXJzL051bWJlcic7XG5cbmNsYXNzIFRhYmxlSGVhZGVyQ29sdW1uIGV4dGVuZHMgQ29tcG9uZW50IHtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZUZpbHRlciA9IHRoaXMuaGFuZGxlRmlsdGVyLmJpbmQodGhpcyk7XG4gIH1cblxuICBoYW5kbGVDb2x1bW5DbGljayA9ICgpID0+IHtcbiAgICBpZiAoIXRoaXMucHJvcHMuZGF0YVNvcnQpIHJldHVybjtcbiAgICBjb25zdCBvcmRlciA9IHRoaXMucHJvcHMuc29ydCA9PT0gQ29uc3QuU09SVF9ERVNDID8gQ29uc3QuU09SVF9BU0MgOiBDb25zdC5TT1JUX0RFU0M7XG4gICAgdGhpcy5wcm9wcy5vblNvcnQob3JkZXIsIHRoaXMucHJvcHMuZGF0YUZpZWxkKTtcbiAgfVxuXG4gIGhhbmRsZUZpbHRlcih2YWx1ZSwgdHlwZSkge1xuICAgIHRoaXMucHJvcHMuZmlsdGVyLmVtaXR0ZXIuaGFuZGxlRmlsdGVyKHRoaXMucHJvcHMuZGF0YUZpZWxkLCB2YWx1ZSwgdHlwZSk7XG4gIH1cblxuICBnZXRGaWx0ZXJzKCkge1xuICAgIHN3aXRjaCAodGhpcy5wcm9wcy5maWx0ZXIudHlwZSkge1xuICAgIGNhc2UgQ29uc3QuRklMVEVSX1RZUEUuVEVYVDoge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFRleHRGaWx0ZXIgeyAuLi50aGlzLnByb3BzLmZpbHRlciB9XG4gICAgICAgICAgY29sdW1uTmFtZT17IHRoaXMucHJvcHMuY2hpbGRyZW4gfSBmaWx0ZXJIYW5kbGVyPXsgdGhpcy5oYW5kbGVGaWx0ZXIgfSAvPlxuICAgICAgKTtcbiAgICB9XG4gICAgY2FzZSBDb25zdC5GSUxURVJfVFlQRS5SRUdFWDoge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFJlZ2V4RmlsdGVyIHsgLi4udGhpcy5wcm9wcy5maWx0ZXIgfVxuICAgICAgICAgIGNvbHVtbk5hbWU9eyB0aGlzLnByb3BzLmNoaWxkcmVuIH0gZmlsdGVySGFuZGxlcj17IHRoaXMuaGFuZGxlRmlsdGVyIH0gLz5cbiAgICAgICk7XG4gICAgfVxuICAgIGNhc2UgQ29uc3QuRklMVEVSX1RZUEUuU0VMRUNUOiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U2VsZWN0RmlsdGVyIHsgLi4udGhpcy5wcm9wcy5maWx0ZXIgfVxuICAgICAgICAgIGNvbHVtbk5hbWU9eyB0aGlzLnByb3BzLmNoaWxkcmVuIH0gZmlsdGVySGFuZGxlcj17IHRoaXMuaGFuZGxlRmlsdGVyIH0gLz5cbiAgICAgICk7XG4gICAgfVxuICAgIGNhc2UgQ29uc3QuRklMVEVSX1RZUEUuTlVNQkVSOiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8TnVtYmVyRmlsdGVyIHsgLi4udGhpcy5wcm9wcy5maWx0ZXIgfVxuICAgICAgICAgIGNvbHVtbk5hbWU9eyB0aGlzLnByb3BzLmNoaWxkcmVuIH0gZmlsdGVySGFuZGxlcj17IHRoaXMuaGFuZGxlRmlsdGVyIH0gLz5cbiAgICAgICk7XG4gICAgfVxuICAgIGNhc2UgQ29uc3QuRklMVEVSX1RZUEUuREFURToge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPERhdGVGaWx0ZXIgeyAuLi50aGlzLnByb3BzLmZpbHRlciB9XG4gICAgICAgICAgY29sdW1uTmFtZT17IHRoaXMucHJvcHMuY2hpbGRyZW4gfSBmaWx0ZXJIYW5kbGVyPXsgdGhpcy5oYW5kbGVGaWx0ZXIgfSAvPlxuICAgICAgKTtcbiAgICB9XG4gICAgY2FzZSBDb25zdC5GSUxURVJfVFlQRS5DVVNUT006IHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmZpbHRlci5nZXRFbGVtZW50KHRoaXMuaGFuZGxlRmlsdGVyLFxuICAgICAgICAgIHRoaXMucHJvcHMuZmlsdGVyLmN1c3RvbUZpbHRlclBhcmFtZXRlcnMpO1xuICAgIH1cbiAgICB9XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLnJlZnNbJ2hlYWRlci1jb2wnXS5zZXRBdHRyaWJ1dGUoJ2RhdGEtZmllbGQnLCB0aGlzLnByb3BzLmRhdGFGaWVsZCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgbGV0IGRlZmF1bHRDYXJldDtcbiAgICBjb25zdCB0aFN0eWxlID0ge1xuICAgICAgdGV4dEFsaWduOiB0aGlzLnByb3BzLmRhdGFBbGlnbixcbiAgICAgIGRpc3BsYXk6IHRoaXMucHJvcHMuaGlkZGVuID8gJ25vbmUnIDogbnVsbFxuICAgIH07XG4gICAgaWYgKHRoaXMucHJvcHMuc29ydEluZGljYXRvcikge1xuICAgICAgZGVmYXVsdENhcmV0ID0gKCF0aGlzLnByb3BzLmRhdGFTb3J0KSA/IG51bGwgOiAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT0nb3JkZXInPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0nZHJvcGRvd24nPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSdjYXJldCcgc3R5bGU9eyB7IG1hcmdpbjogJzEwcHggMCAxMHB4IDVweCcsIGNvbG9yOiAnI2NjYycgfSB9Pjwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSdkcm9wdXAnPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSdjYXJldCcgc3R5bGU9eyB7IG1hcmdpbjogJzEwcHggMCcsIGNvbG9yOiAnI2NjYycgfSB9Pjwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHNvcnRDYXJldCA9IHRoaXMucHJvcHMuc29ydCA/IFV0aWwucmVuZGVyUmVhY3RTb3J0Q2FyZXQodGhpcy5wcm9wcy5zb3J0KSA6IGRlZmF1bHRDYXJldDtcbiAgICBjb25zdCBjbGFzc2VzID0gdGhpcy5wcm9wcy5jbGFzc05hbWUgKyAnICcgKyAodGhpcy5wcm9wcy5kYXRhU29ydCA/ICdzb3J0LWNvbHVtbicgOiAnJyk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPHRoIHJlZj0naGVhZGVyLWNvbCdcbiAgICAgICAgICBjbGFzc05hbWU9eyBjbGFzc2VzIH1cbiAgICAgICAgICBzdHlsZT17IHRoU3R5bGUgfVxuICAgICAgICAgIHRpdGxlPXsgdGhpcy5wcm9wcy5jaGlsZHJlbiB9XG4gICAgICAgICAgb25DbGljaz17IHRoaXMuaGFuZGxlQ29sdW1uQ2xpY2sgfT5cbiAgICAgICAgeyB0aGlzLnByb3BzLmNoaWxkcmVuIH17IHNvcnRDYXJldCB9XG4gICAgICAgIDxkaXYgb25DbGljaz17IGUgPT4gZS5zdG9wUHJvcGFnYXRpb24oKSB9PlxuICAgICAgICAgIHsgdGhpcy5wcm9wcy5maWx0ZXIgPyB0aGlzLmdldEZpbHRlcnMoKSA6IG51bGwgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdGg+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBmaWx0ZXJUeXBlQXJyYXkgPSBbXTtcbmZvciAoY29uc3Qga2V5IGluIENvbnN0LkZJTFRFUl9UWVBFKSB7XG4gIGZpbHRlclR5cGVBcnJheS5wdXNoKENvbnN0LkZJTFRFUl9UWVBFW2tleV0pO1xufVxuXG5UYWJsZUhlYWRlckNvbHVtbi5wcm9wVHlwZXMgPSB7XG4gIGRhdGFGaWVsZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGF0YUFsaWduOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBkYXRhU29ydDogUHJvcFR5cGVzLmJvb2wsXG4gIG9uU29ydDogUHJvcFR5cGVzLmZ1bmMsXG4gIGRhdGFGb3JtYXQ6IFByb3BUeXBlcy5mdW5jLFxuICBpc0tleTogUHJvcFR5cGVzLmJvb2wsXG4gIGVkaXRhYmxlOiBQcm9wVHlwZXMuYW55LFxuICBoaWRkZW46IFByb3BUeXBlcy5ib29sLFxuICBzZWFyY2hhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB3aWR0aDogUHJvcFR5cGVzLnN0cmluZyxcbiAgc29ydEZ1bmM6IFByb3BUeXBlcy5mdW5jLFxuICBjb2x1bW5DbGFzc05hbWU6IFByb3BUeXBlcy5hbnksXG4gIGZpbHRlckZvcm1hdHRlZDogUHJvcFR5cGVzLmJvb2wsXG4gIHNvcnQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGZvcm1hdEV4dHJhRGF0YTogUHJvcFR5cGVzLmFueSxcbiAgZmlsdGVyOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHR5cGU6IFByb3BUeXBlcy5vbmVPZihmaWx0ZXJUeXBlQXJyYXkpLFxuICAgIGRlbGF5OiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIG9wdGlvbnM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuICAgICAgUHJvcFR5cGVzLm9iamVjdCwgLy8gZm9yIFNlbGVjdEZpbHRlclxuICAgICAgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm51bWJlcikgLy8gZm9yIE51bWJlckZpbHRlclxuICAgIF0pLFxuICAgIG51bWJlckNvbXBhcmF0b3JzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgICBlbWl0dGVyOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGdldEVsZW1lbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIGN1c3RvbUZpbHRlclBhcmFtZXRlcnM6IFByb3BUeXBlcy5vYmplY3RcbiAgfSksXG4gIHNvcnRJbmRpY2F0b3I6IFByb3BUeXBlcy5ib29sXG59O1xuXG5UYWJsZUhlYWRlckNvbHVtbi5kZWZhdWx0UHJvcHMgPSB7XG4gIGRhdGFBbGlnbjogJ2xlZnQnLFxuICBkYXRhU29ydDogZmFsc2UsXG4gIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZCxcbiAgaXNLZXk6IGZhbHNlLFxuICBlZGl0YWJsZTogdHJ1ZSxcbiAgb25Tb3J0OiB1bmRlZmluZWQsXG4gIGhpZGRlbjogZmFsc2UsXG4gIHNlYXJjaGFibGU6IHRydWUsXG4gIGNsYXNzTmFtZTogJycsXG4gIHdpZHRoOiBudWxsLFxuICBzb3J0RnVuYzogdW5kZWZpbmVkLFxuICBjb2x1bW5DbGFzc05hbWU6ICcnLFxuICBmaWx0ZXJGb3JtYXR0ZWQ6IGZhbHNlLFxuICBzb3J0OiB1bmRlZmluZWQsXG4gIGZvcm1hdEV4dHJhRGF0YTogdW5kZWZpbmVkLFxuICBmaWx0ZXI6IHVuZGVmaW5lZCxcbiAgc29ydEluZGljYXRvcjogdHJ1ZVxufTtcblxuZXhwb3J0IGRlZmF1bHQgVGFibGVIZWFkZXJDb2x1bW47XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9UYWJsZUhlYWRlckNvbHVtbi5qc1xuICoqLyIsIi8qIGVzbGludCBxdW90ZXM6IDAgKi9cbi8qIGVzbGludCBtYXgtbGVuOiAwICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBQcm9wVHlwZXMgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi4vQ29uc3QnO1xuXG5jbGFzcyBEYXRlRmlsdGVyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5maWx0ZXIgPSB0aGlzLmZpbHRlci5iaW5kKHRoaXMpO1xuICB9XG5cbiAgc2V0RGVmYXVsdERhdGUoKSB7XG4gICAgbGV0IGRlZmF1bHREYXRlID0gJyc7XG4gICAgaWYgKHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIC8vIFNldCB0aGUgYXBwcm9wcmlhdGUgZm9ybWF0IGZvciB0aGUgaW5wdXQgdHlwZT1kYXRlLCBpLmUuIFwiWVlZWS1NTS1ERFwiXG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBuZXcgRGF0ZSh0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSk7XG4gICAgICBkZWZhdWx0RGF0ZSA9IGAke2RlZmF1bHRWYWx1ZS5nZXRGdWxsWWVhcigpfS0keyhcIjBcIiArIChkZWZhdWx0VmFsdWUuZ2V0TW9udGgoKSArIDEpKS5zbGljZSgtMil9LSR7KFwiMFwiICsgZGVmYXVsdFZhbHVlLmdldERhdGUoKSkuc2xpY2UoLTIpfWA7XG4gICAgfVxuICAgIHJldHVybiBkZWZhdWx0RGF0ZTtcbiAgfVxuXG4gIGZpbHRlcihldmVudCkge1xuICAgIGNvbnN0IGRhdGVWYWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICBpZiAoZGF0ZVZhbHVlKSB7XG4gICAgICB0aGlzLnByb3BzLmZpbHRlckhhbmRsZXIobmV3IERhdGUoZGF0ZVZhbHVlKSwgQ29uc3QuRklMVEVSX1RZUEUuREFURSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvcHMuZmlsdGVySGFuZGxlcihudWxsLCBDb25zdC5GSUxURVJfVFlQRS5EQVRFKTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCBkYXRlVmFsdWUgPSB0aGlzLnJlZnMuaW5wdXREYXRlLmRlZmF1bHRWYWx1ZTtcbiAgICBpZiAoZGF0ZVZhbHVlKSB7XG4gICAgICB0aGlzLnByb3BzLmZpbHRlckhhbmRsZXIobmV3IERhdGUoZGF0ZVZhbHVlKSwgQ29uc3QuRklMVEVSX1RZUEUuREFURSk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICAgIDxpbnB1dCByZWY9J2lucHV0RGF0ZSdcbiAgICAgICAgICAgY2xhc3NOYW1lPSdmaWx0ZXIgZGF0ZS1maWx0ZXIgZm9ybS1jb250cm9sJ1xuICAgICAgICAgICB0eXBlPSdkYXRlJ1xuICAgICAgICAgICBvbkNoYW5nZT17IHRoaXMuZmlsdGVyIH1cbiAgICAgICAgICAgZGVmYXVsdFZhbHVlPXsgdGhpcy5zZXREZWZhdWx0RGF0ZSgpIH0gLz5cbiAgICApO1xuICB9XG59XG5cbkRhdGVGaWx0ZXIucHJvcFR5cGVzID0ge1xuICBmaWx0ZXJIYW5kbGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5vYmplY3QsXG4gIGNvbHVtbk5hbWU6IFByb3BUeXBlcy5zdHJpbmdcbn07XG5cbmV4cG9ydCBkZWZhdWx0IERhdGVGaWx0ZXI7XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9maWx0ZXJzL0RhdGUuanNcbiAqKi8iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBQcm9wVHlwZXMgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi4vQ29uc3QnO1xuXG5jbGFzcyBUZXh0RmlsdGVyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5maWx0ZXIgPSB0aGlzLmZpbHRlci5iaW5kKHRoaXMpO1xuICAgIHRoaXMudGltZW91dCA9IG51bGw7XG4gIH1cblxuICBmaWx0ZXIoZXZlbnQpIHtcbiAgICBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAgICB9XG4gICAgY29uc3QgZmlsdGVyVmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLmZpbHRlckhhbmRsZXIoZmlsdGVyVmFsdWUsIENvbnN0LkZJTFRFUl9UWVBFLlRFWFQpO1xuICAgIH0sIHRoaXMucHJvcHMuZGVsYXkpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gdGhpcy5yZWZzLmlucHV0VGV4dC5kZWZhdWx0VmFsdWU7XG4gICAgaWYgKGRlZmF1bHRWYWx1ZSkge1xuICAgICAgdGhpcy5wcm9wcy5maWx0ZXJIYW5kbGVyKGRlZmF1bHRWYWx1ZSwgQ29uc3QuRklMVEVSX1RZUEUuVEVYVCk7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBwbGFjZWhvbGRlciwgY29sdW1uTmFtZSwgZGVmYXVsdFZhbHVlIH0gPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXQgcmVmPSdpbnB1dFRleHQnXG4gICAgICAgIGNsYXNzTmFtZT0nZmlsdGVyIHRleHQtZmlsdGVyIGZvcm0tY29udHJvbCdcbiAgICAgICAgdHlwZT0ndGV4dCdcbiAgICAgICAgb25DaGFuZ2U9eyB0aGlzLmZpbHRlciB9XG4gICAgICAgIHBsYWNlaG9sZGVyPXsgcGxhY2Vob2xkZXIgfHwgYEVudGVyICR7Y29sdW1uTmFtZX0uLi5gIH1cbiAgICAgICAgZGVmYXVsdFZhbHVlPXsgZGVmYXVsdFZhbHVlID8gZGVmYXVsdFZhbHVlIDogJycgfSAvPlxuICAgICk7XG4gIH1cbn1cblxuVGV4dEZpbHRlci5wcm9wVHlwZXMgPSB7XG4gIGZpbHRlckhhbmRsZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGVsYXk6IFByb3BUeXBlcy5udW1iZXIsXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjb2x1bW5OYW1lOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG5UZXh0RmlsdGVyLmRlZmF1bHRQcm9wcyA9IHtcbiAgZGVsYXk6IENvbnN0LkZJTFRFUl9ERUxBWVxufTtcblxuZXhwb3J0IGRlZmF1bHQgVGV4dEZpbHRlcjtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2ZpbHRlcnMvVGV4dC5qc1xuICoqLyIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFByb3BUeXBlcyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBDb25zdCBmcm9tICcuLi9Db25zdCc7XG5cbmNsYXNzIFJlZ2V4RmlsdGVyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5maWx0ZXIgPSB0aGlzLmZpbHRlci5iaW5kKHRoaXMpO1xuICAgIHRoaXMudGltZW91dCA9IG51bGw7XG4gIH1cblxuICBmaWx0ZXIoZXZlbnQpIHtcbiAgICBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAgICB9XG4gICAgY29uc3QgZmlsdGVyVmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLmZpbHRlckhhbmRsZXIoZmlsdGVyVmFsdWUsIENvbnN0LkZJTFRFUl9UWVBFLlJFR0VYKTtcbiAgICB9LCB0aGlzLnByb3BzLmRlbGF5KTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5yZWZzLmlucHV0VGV4dC5kZWZhdWx0VmFsdWU7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLnByb3BzLmZpbHRlckhhbmRsZXIodmFsdWUsIENvbnN0LkZJTFRFUl9UWVBFLlJFR0VYKTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGRlZmF1bHRWYWx1ZSwgcGxhY2Vob2xkZXIsIGNvbHVtbk5hbWUgfSA9IHRoaXMucHJvcHM7XG4gICAgcmV0dXJuIChcbiAgICAgIDxpbnB1dCByZWY9J2lucHV0VGV4dCdcbiAgICAgICAgICBjbGFzc05hbWU9J2ZpbHRlciB0ZXh0LWZpbHRlciBmb3JtLWNvbnRyb2wnXG4gICAgICAgICAgdHlwZT0ndGV4dCdcbiAgICAgICAgICBvbkNoYW5nZT17IHRoaXMuZmlsdGVyIH1cbiAgICAgICAgICBwbGFjZWhvbGRlcj17IHBsYWNlaG9sZGVyIHx8IGBFbnRlciBSZWdleCBmb3IgJHtjb2x1bW5OYW1lfS4uLmAgfVxuICAgICAgICAgIGRlZmF1bHRWYWx1ZT17IChkZWZhdWx0VmFsdWUpID8gZGVmYXVsdFZhbHVlIDogJycgfSAvPlxuICAgICk7XG4gIH1cbn1cblxuUmVnZXhGaWx0ZXIucHJvcFR5cGVzID0ge1xuICBmaWx0ZXJIYW5kbGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGRlbGF5OiBQcm9wVHlwZXMubnVtYmVyLFxuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY29sdW1uTmFtZTogUHJvcFR5cGVzLnN0cmluZ1xufTtcblxuUmVnZXhGaWx0ZXIuZGVmYXVsdFByb3BzID0ge1xuICBkZWxheTogQ29uc3QuRklMVEVSX0RFTEFZXG59O1xuXG5leHBvcnQgZGVmYXVsdCBSZWdleEZpbHRlcjtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2ZpbHRlcnMvUmVnZXguanNcbiAqKi8iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBQcm9wVHlwZXMgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NTZXQgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi4vQ29uc3QnO1xuXG5jbGFzcyBTZWxlY3RGaWx0ZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmZpbHRlciA9IHRoaXMuZmlsdGVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGlzUGxhY2Vob2xkZXJTZWxlY3RlZDogKHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgIXRoaXMucHJvcHMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSh0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSkpXG4gICAgfTtcbiAgfVxuXG4gIGZpbHRlcihldmVudCkge1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IGV2ZW50LnRhcmdldDtcbiAgICB0aGlzLnNldFN0YXRlKHsgaXNQbGFjZWhvbGRlclNlbGVjdGVkOiAodmFsdWUgPT09ICcnKSB9KTtcbiAgICB0aGlzLnByb3BzLmZpbHRlckhhbmRsZXIodmFsdWUsIENvbnN0LkZJTFRFUl9UWVBFLlNFTEVDVCk7XG4gIH1cblxuICBnZXRPcHRpb25zKCkge1xuICAgIGNvbnN0IG9wdGlvblRhZ3MgPSBbXTtcbiAgICBjb25zdCB7IG9wdGlvbnMsIHBsYWNlaG9sZGVyLCBjb2x1bW5OYW1lIH0gPSB0aGlzLnByb3BzO1xuICAgIG9wdGlvblRhZ3MucHVzaCgoXG4gICAgICA8b3B0aW9uIGtleT0nLTEnIHZhbHVlPScnPnsgcGxhY2Vob2xkZXIgfHwgYFNlbGVjdCAke2NvbHVtbk5hbWV9Li4uYCB9PC9vcHRpb24+XG4gICAgKSk7XG4gICAgT2JqZWN0LmtleXMob3B0aW9ucykubWFwKGtleSA9PiB7XG4gICAgICBvcHRpb25UYWdzLnB1c2goPG9wdGlvbiBrZXk9eyBrZXkgfSB2YWx1ZT17IGtleSB9Pnsgb3B0aW9uc1trZXldIH08L29wdGlvbj4pO1xuICAgIH0pO1xuICAgIHJldHVybiBvcHRpb25UYWdzO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnJlZnMuc2VsZWN0SW5wdXQudmFsdWU7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLnByb3BzLmZpbHRlckhhbmRsZXIodmFsdWUsIENvbnN0LkZJTFRFUl9UWVBFLlNFTEVDVCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHNlbGVjdENsYXNzID0gY2xhc3NTZXQoJ2ZpbHRlcicsICdzZWxlY3QtZmlsdGVyJywgJ2Zvcm0tY29udHJvbCcsXG4gICAgICAgICAgICAgIHsgJ3BsYWNlaG9sZGVyLXNlbGVjdGVkJzogdGhpcy5zdGF0ZS5pc1BsYWNlaG9sZGVyU2VsZWN0ZWQgfSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPHNlbGVjdCByZWY9J3NlbGVjdElucHV0J1xuICAgICAgICAgIGNsYXNzTmFtZT17IHNlbGVjdENsYXNzIH1cbiAgICAgICAgICBvbkNoYW5nZT17IHRoaXMuZmlsdGVyIH1cbiAgICAgICAgICBkZWZhdWx0VmFsdWU9eyAodGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkgPyB0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSA6ICcnIH0gPlxuICAgICAgICB7IHRoaXMuZ2V0T3B0aW9ucygpIH1cbiAgICAgIDwvc2VsZWN0PlxuICAgICk7XG4gIH1cbn1cblxuU2VsZWN0RmlsdGVyLnByb3BUeXBlcyA9IHtcbiAgZmlsdGVySGFuZGxlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb3B0aW9uczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY29sdW1uTmFtZTogUHJvcFR5cGVzLnN0cmluZ1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2VsZWN0RmlsdGVyO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvZmlsdGVycy9TZWxlY3QuanNcbiAqKi8iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBQcm9wVHlwZXMgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NTZXQgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi4vQ29uc3QnO1xuXG5jb25zdCBsZWdhbENvbXBhcmF0b3JzID0gWyAnPScsICc+JywgJz49JywgJzwnLCAnPD0nLCAnIT0nIF07XG5cbmNsYXNzIE51bWJlckZpbHRlciBleHRlbmRzIENvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMubnVtYmVyQ29tcGFyYXRvcnMgPSB0aGlzLnByb3BzLm51bWJlckNvbXBhcmF0b3JzIHx8IGxlZ2FsQ29tcGFyYXRvcnM7XG4gICAgdGhpcy50aW1lb3V0ID0gbnVsbDtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgaXNQbGFjZWhvbGRlclNlbGVjdGVkOiAodGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICB0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZS5udW1iZXIgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAodGhpcy5wcm9wcy5vcHRpb25zICYmXG4gICAgICAgICAgdGhpcy5wcm9wcy5vcHRpb25zLmluZGV4T2YodGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUubnVtYmVyKSA9PT0gLTEpKVxuICAgIH07XG4gICAgdGhpcy5vbkNoYW5nZU51bWJlciA9IHRoaXMub25DaGFuZ2VOdW1iZXIuYmluZCh0aGlzKTtcbiAgICB0aGlzLm9uQ2hhbmdlTnVtYmVyU2V0ID0gdGhpcy5vbkNoYW5nZU51bWJlclNldC5iaW5kKHRoaXMpO1xuICAgIHRoaXMub25DaGFuZ2VDb21wYXJhdG9yID0gdGhpcy5vbkNoYW5nZUNvbXBhcmF0b3IuYmluZCh0aGlzKTtcbiAgfVxuXG4gIG9uQ2hhbmdlTnVtYmVyKGV2ZW50KSB7XG4gICAgY29uc3QgY29tcGFyYXRvciA9IHRoaXMucmVmcy5udW1iZXJGaWx0ZXJDb21wYXJhdG9yLnZhbHVlO1xuICAgIGlmIChjb21wYXJhdG9yID09PSAnJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAgICB9XG4gICAgY29uc3QgZmlsdGVyVmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLmZpbHRlckhhbmRsZXIoeyBudW1iZXI6IGZpbHRlclZhbHVlLCBjb21wYXJhdG9yIH0sIENvbnN0LkZJTFRFUl9UWVBFLk5VTUJFUik7XG4gICAgfSwgdGhpcy5wcm9wcy5kZWxheSk7XG4gIH1cblxuICBvbkNoYW5nZU51bWJlclNldChldmVudCkge1xuICAgIGNvbnN0IGNvbXBhcmF0b3IgPSB0aGlzLnJlZnMubnVtYmVyRmlsdGVyQ29tcGFyYXRvci52YWx1ZTtcbiAgICBjb25zdCB7IHZhbHVlIH0gPSBldmVudC50YXJnZXQ7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGlzUGxhY2Vob2xkZXJTZWxlY3RlZDogKHZhbHVlID09PSAnJykgfSk7XG4gICAgaWYgKGNvbXBhcmF0b3IgPT09ICcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucHJvcHMuZmlsdGVySGFuZGxlcih7IG51bWJlcjogdmFsdWUsIGNvbXBhcmF0b3IgfSwgQ29uc3QuRklMVEVSX1RZUEUuTlVNQkVSKTtcbiAgfVxuXG4gIG9uQ2hhbmdlQ29tcGFyYXRvcihldmVudCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5yZWZzLm51bWJlckZpbHRlci52YWx1ZTtcbiAgICBjb25zdCBjb21wYXJhdG9yID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wcm9wcy5maWx0ZXJIYW5kbGVyKHsgbnVtYmVyOiB2YWx1ZSwgY29tcGFyYXRvciB9LCBDb25zdC5GSUxURVJfVFlQRS5OVU1CRVIpO1xuICB9XG5cbiAgZ2V0Q29tcGFyYXRvck9wdGlvbnMoKSB7XG4gICAgY29uc3Qgb3B0aW9uVGFncyA9IFtdO1xuICAgIG9wdGlvblRhZ3MucHVzaCg8b3B0aW9uIGtleT0nLTEnPjwvb3B0aW9uPik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm51bWJlckNvbXBhcmF0b3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvcHRpb25UYWdzLnB1c2goXG4gICAgICAgIDxvcHRpb24ga2V5PXsgaSB9IHZhbHVlPXsgdGhpcy5udW1iZXJDb21wYXJhdG9yc1tpXSB9PlxuICAgICAgICAgIHsgdGhpcy5udW1iZXJDb21wYXJhdG9yc1tpXSB9XG4gICAgICAgIDwvb3B0aW9uPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvblRhZ3M7XG4gIH1cblxuICBnZXROdW1iZXJPcHRpb25zKCkge1xuICAgIGNvbnN0IG9wdGlvblRhZ3MgPSBbXTtcbiAgICBjb25zdCB7IG9wdGlvbnMgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBvcHRpb25UYWdzLnB1c2goXG4gICAgICA8b3B0aW9uIGtleT0nLTEnIHZhbHVlPScnPlxuICAgICAgICB7IHRoaXMucHJvcHMucGxhY2Vob2xkZXIgfHwgYFNlbGVjdCAke3RoaXMucHJvcHMuY29sdW1uTmFtZX0uLi5gIH1cbiAgICAgIDwvb3B0aW9uPlxuICAgICk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvcHRpb25UYWdzLnB1c2goPG9wdGlvbiBrZXk9eyBpIH0gdmFsdWU9eyBvcHRpb25zW2ldIH0+eyBvcHRpb25zW2ldIH08L29wdGlvbj4pO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uVGFncztcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IGNvbXBhcmF0b3IgPSB0aGlzLnJlZnMubnVtYmVyRmlsdGVyQ29tcGFyYXRvci52YWx1ZTtcbiAgICBjb25zdCBudW1iZXIgPSB0aGlzLnJlZnMubnVtYmVyRmlsdGVyLnZhbHVlO1xuICAgIGlmIChjb21wYXJhdG9yICYmIG51bWJlcikge1xuICAgICAgdGhpcy5wcm9wcy5maWx0ZXJIYW5kbGVyKHsgbnVtYmVyLCBjb21wYXJhdG9yIH0sIENvbnN0LkZJTFRFUl9UWVBFLk5VTUJFUik7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qgc2VsZWN0Q2xhc3MgPSBjbGFzc1NldChcbiAgICAgICdzZWxlY3QtZmlsdGVyJywgJ251bWJlci1maWx0ZXItaW5wdXQnLCAnZm9ybS1jb250cm9sJyxcbiAgICAgIHsgJ3BsYWNlaG9sZGVyLXNlbGVjdGVkJzogdGhpcy5zdGF0ZS5pc1BsYWNlaG9sZGVyU2VsZWN0ZWQgfSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9J2ZpbHRlciBudW1iZXItZmlsdGVyJz5cbiAgICAgICAgPHNlbGVjdCByZWY9J251bWJlckZpbHRlckNvbXBhcmF0b3InXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPSdudW1iZXItZmlsdGVyLWNvbXBhcmF0b3IgZm9ybS1jb250cm9sJ1xuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsgdGhpcy5vbkNoYW5nZUNvbXBhcmF0b3IgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT17XG4gICAgICAgICAgICAgICAgICAodGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUpID8gdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUuY29tcGFyYXRvciA6ICcnXG4gICAgICAgICAgICAgICAgfT5cbiAgICAgICAgICB7IHRoaXMuZ2V0Q29tcGFyYXRvck9wdGlvbnMoKSB9XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgICB7XG4gICAgICAgICAgKHRoaXMucHJvcHMub3B0aW9ucykgP1xuICAgICAgICAgICAgPHNlbGVjdCByZWY9J251bWJlckZpbHRlcidcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXsgc2VsZWN0Q2xhc3MgfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17IHRoaXMub25DaGFuZ2VOdW1iZXJTZXQgfVxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e1xuICAgICAgICAgICAgICAgICh0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSkgPyB0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZS5udW1iZXIgOiAnJ1xuICAgICAgICAgICAgICB9PlxuICAgICAgICAgICAgICB7IHRoaXMuZ2V0TnVtYmVyT3B0aW9ucygpIH1cbiAgICAgICAgICAgIDwvc2VsZWN0PiA6XG4gICAgICAgICAgICA8aW5wdXQgcmVmPSdudW1iZXJGaWx0ZXInXG4gICAgICAgICAgICAgICAgICAgdHlwZT0nbnVtYmVyJ1xuICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT0nbnVtYmVyLWZpbHRlci1pbnB1dCBmb3JtLWNvbnRyb2wnXG4gICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9eyB0aGlzLnByb3BzLnBsYWNlaG9sZGVyIHx8IGBFbnRlciAke3RoaXMucHJvcHMuY29sdW1uTmFtZX0uLi5gIH1cbiAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17IHRoaXMub25DaGFuZ2VOdW1iZXIgfVxuICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT17XG4gICAgICAgICAgICAgICAgICAgICAodGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUpID8gdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUubnVtYmVyIDogJydcbiAgICAgICAgICAgICAgICAgICB9IC8+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuTnVtYmVyRmlsdGVyLnByb3BUeXBlcyA9IHtcbiAgZmlsdGVySGFuZGxlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm51bWJlciksXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBudW1iZXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgY29tcGFyYXRvcjogUHJvcFR5cGVzLm9uZU9mKGxlZ2FsQ29tcGFyYXRvcnMpXG4gIH0pLFxuICBkZWxheTogUHJvcFR5cGVzLm51bWJlcixcbiAgLyogZXNsaW50IGNvbnNpc3RlbnQtcmV0dXJuOiAwICovXG4gIG51bWJlckNvbXBhcmF0b3JzOiBmdW5jdGlvbihwcm9wcywgcHJvcE5hbWUpIHtcbiAgICBpZiAoIXByb3BzW3Byb3BOYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BzW3Byb3BOYW1lXS5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGNvbXBhcmF0b3JJc1ZhbGlkID0gZmFsc2U7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxlZ2FsQ29tcGFyYXRvcnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKGxlZ2FsQ29tcGFyYXRvcnNbal0gPT09IHByb3BzW3Byb3BOYW1lXVtpXSkge1xuICAgICAgICAgIGNvbXBhcmF0b3JJc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFjb21wYXJhdG9ySXNWYWxpZCkge1xuICAgICAgICByZXR1cm4gbmV3IEVycm9yKGBOdW1iZXIgY29tcGFyYXRvciBwcm92aWRlZCBpcyBub3Qgc3VwcG9ydGVkLlxuICAgICAgICAgIFVzZSBvbmx5ICR7bGVnYWxDb21wYXJhdG9yc31gKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjb2x1bW5OYW1lOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG5OdW1iZXJGaWx0ZXIuZGVmYXVsdFByb3BzID0ge1xuICBkZWxheTogQ29uc3QuRklMVEVSX0RFTEFZXG59O1xuXG5leHBvcnQgZGVmYXVsdCBOdW1iZXJGaWx0ZXI7XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9maWx0ZXJzL051bWJlci5qc1xuICoqLyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/dist/react-bootstrap-table.min.js b/dist/react-bootstrap-table.min.js index 1829e628f..2ce642ee0 100644 --- a/dist/react-bootstrap-table.min.js +++ b/dist/react-bootstrap-table.min.js @@ -1,13 +1,14 @@ -!function(Q,F){"object"==typeof exports&&"object"==typeof module?module.exports=F(require("react"),require("react-dom")):"function"==typeof define&&define.amd?define(["react","react-dom"],F):"object"==typeof exports?exports.ReactBootstrapTable=F(require("react"),require("react-dom")):Q.ReactBootstrapTable=F(Q.React,Q.ReactDOM)}(this,function(__WEBPACK_EXTERNAL_MODULE_2__,__WEBPACK_EXTERNAL_MODULE_5__){return function(Q){function F(U){if(e[U])return e[U].exports;var B=e[U]={exports:{},id:U,loaded:!1};return Q[U].call(B.exports,B,B.exports,F),B.loaded=!0,B.exports}var e={};return F.m=Q,F.c=e,F.p="",F(0)}([function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _BootstrapTable = __webpack_require__(1);\n\nvar _BootstrapTable2 = _interopRequireDefault(_BootstrapTable);\n\nvar _TableHeaderColumn = __webpack_require__(41);\n\nvar _TableHeaderColumn2 = _interopRequireDefault(_TableHeaderColumn);\n\nvar _storeTableDataStore = __webpack_require__(33);\n\nif (typeof window !== 'undefined') {\n window.BootstrapTable = _BootstrapTable2['default'];\n window.TableHeaderColumn = _TableHeaderColumn2['default'];\n window.TableDataSet = _storeTableDataStore.TableDataSet;\n}\nexports['default'] = {\n BootstrapTable: _BootstrapTable2['default'],\n TableHeaderColumn: _TableHeaderColumn2['default'],\n TableDataSet: _storeTableDataStore.TableDataSet\n};\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXguanM/OTU1MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OzswQ0FBMkIsQ0FBa0I7Ozs7NkNBQ2YsRUFBcUI7Ozs7K0NBQ3RCLEVBQXdCOztBQUVyRCxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsRUFBRTtBQUNqQyxRQUFNLENBQUMsY0FBYyw4QkFBaUIsQ0FBQztBQUN2QyxRQUFNLENBQUMsaUJBQWlCLGlDQUFvQixDQUFDO0FBQzdDLFFBQU0sQ0FBQyxZQUFZLG9DQUFlLENBQUM7Q0FDcEM7cUJBQ2M7QUFDYixnQkFBYztBQUNkLG1CQUFpQjtBQUNqQixjQUFZO0NBQ2IiLCJmaWxlIjoiMC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCb290c3RyYXBUYWJsZSBmcm9tICcuL0Jvb3RzdHJhcFRhYmxlJztcbmltcG9ydCBUYWJsZUhlYWRlckNvbHVtbiBmcm9tICcuL1RhYmxlSGVhZGVyQ29sdW1uJztcbmltcG9ydCB7IFRhYmxlRGF0YVNldCB9IGZyb20gJy4vc3RvcmUvVGFibGVEYXRhU3RvcmUnO1xuXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgd2luZG93LkJvb3RzdHJhcFRhYmxlID0gQm9vdHN0cmFwVGFibGU7XG4gIHdpbmRvdy5UYWJsZUhlYWRlckNvbHVtbiA9IFRhYmxlSGVhZGVyQ29sdW1uO1xuICB3aW5kb3cuVGFibGVEYXRhU2V0ID0gVGFibGVEYXRhU2V0O1xufVxuZXhwb3J0IGRlZmF1bHQge1xuICBCb290c3RyYXBUYWJsZSxcbiAgVGFibGVIZWFkZXJDb2x1bW4sXG4gIFRhYmxlRGF0YVNldFxufTtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2luZGV4LmpzXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports,__webpack_require__){eval("/* eslint no-alert: 0 */\n/* eslint max-len: 0 */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _Const = __webpack_require__(3);\n\nvar _Const2 = _interopRequireDefault(_Const);\n\nvar _TableHeader = __webpack_require__(4);\n\nvar _TableHeader2 = _interopRequireDefault(_TableHeader);\n\nvar _TableBody = __webpack_require__(8);\n\nvar _TableBody2 = _interopRequireDefault(_TableBody);\n\nvar _paginationPaginationList = __webpack_require__(29);\n\nvar _paginationPaginationList2 = _interopRequireDefault(_paginationPaginationList);\n\nvar _toolbarToolBar = __webpack_require__(31);\n\nvar _toolbarToolBar2 = _interopRequireDefault(_toolbarToolBar);\n\nvar _TableFilter = __webpack_require__(32);\n\nvar _TableFilter2 = _interopRequireDefault(_TableFilter);\n\nvar _storeTableDataStore = __webpack_require__(33);\n\nvar _util = __webpack_require__(35);\n\nvar _util2 = _interopRequireDefault(_util);\n\nvar _csv_export_util = __webpack_require__(36);\n\nvar _csv_export_util2 = _interopRequireDefault(_csv_export_util);\n\nvar _Filter = __webpack_require__(40);\n\nvar BootstrapTable = (function (_Component) {\n _inherits(BootstrapTable, _Component);\n\n function BootstrapTable(props) {\n var _this = this;\n\n _classCallCheck(this, BootstrapTable);\n\n _get(Object.getPrototypeOf(BootstrapTable.prototype), 'constructor', this).call(this, props);\n\n this.handleSort = function (order, sortField) {\n if (_this.props.options.onSortChange) {\n _this.props.options.onSortChange(sortField, order, _this.props);\n }\n\n var result = _this.store.sort(order, sortField).get();\n _this.setState({\n data: result\n });\n };\n\n this.handlePaginationData = function (page, sizePerPage) {\n var onPageChange = _this.props.options.onPageChange;\n\n if (onPageChange) {\n onPageChange(page, sizePerPage);\n }\n\n if (_this.isRemoteDataSource()) {\n return;\n }\n\n var result = _this.store.page(page, sizePerPage).get();\n _this.setState({\n data: result,\n currPage: page,\n sizePerPage: sizePerPage\n });\n };\n\n this.handleMouseLeave = function () {\n if (_this.props.options.onMouseLeave) {\n _this.props.options.onMouseLeave();\n }\n };\n\n this.handleMouseEnter = function () {\n if (_this.props.options.onMouseEnter) {\n _this.props.options.onMouseEnter();\n }\n };\n\n this.handleRowMouseOut = function (row) {\n if (_this.props.options.onRowMouseOut) {\n _this.props.options.onRowMouseOut(row);\n }\n };\n\n this.handleRowMouseOver = function (row) {\n if (_this.props.options.onRowMouseOver) {\n _this.props.options.onRowMouseOver(row);\n }\n };\n\n this.handleRowClick = function (row) {\n if (_this.props.options.onRowClick) {\n _this.props.options.onRowClick(row);\n }\n };\n\n this.handleSelectAllRow = function (e) {\n var isSelected = e.currentTarget.checked;\n var selectedRowKeys = [];\n var result = true;\n if (_this.props.selectRow.onSelectAll) {\n result = _this.props.selectRow.onSelectAll(isSelected, isSelected ? _this.store.get() : []);\n }\n\n if (typeof result === 'undefined' || result !== false) {\n if (isSelected) {\n selectedRowKeys = _this.store.getAllRowkey();\n }\n\n _this.store.setSelectedRowKey(selectedRowKeys);\n _this.setState({ selectedRowKeys: selectedRowKeys });\n }\n };\n\n this.handleShowOnlySelected = function () {\n _this.store.ignoreNonSelected();\n var result = undefined;\n if (_this.props.pagination) {\n result = _this.store.page(1, _this.state.sizePerPage).get();\n } else {\n result = _this.store.get();\n }\n _this.setState({\n data: result,\n currPage: 1\n });\n };\n\n this.handleSelectRow = function (row, isSelected) {\n var result = true;\n var currSelected = _this.store.getSelectedRowKeys();\n var rowKey = row[_this.store.getKeyField()];\n var selectRow = _this.props.selectRow;\n\n if (selectRow.onSelect) {\n result = selectRow.onSelect(row, isSelected);\n }\n\n if (typeof result === 'undefined' || result !== false) {\n if (selectRow.mode === _Const2['default'].ROW_SELECT_SINGLE) {\n currSelected = isSelected ? [rowKey] : [];\n } else {\n if (isSelected) {\n currSelected.push(rowKey);\n } else {\n currSelected = currSelected.filter(function (key) {\n return rowKey !== key;\n });\n }\n }\n\n _this.store.setSelectedRowKey(currSelected);\n _this.setState({\n selectedRowKeys: currSelected\n });\n }\n };\n\n this.handleAddRow = function (newObj) {\n try {\n _this.store.add(newObj);\n } catch (e) {\n return e;\n }\n _this._handleAfterAddingRow(newObj);\n };\n\n this.handleDropRow = function (rowKeys) {\n var dropRowKeys = rowKeys ? rowKeys : _this.store.getSelectedRowKeys();\n // add confirm before the delete action if that option is set.\n if (dropRowKeys && dropRowKeys.length > 0) {\n if (_this.props.options.handleConfirmDeleteRow) {\n _this.props.options.handleConfirmDeleteRow(function () {\n _this.deleteRow(dropRowKeys);\n });\n } else if (confirm('Are you sure want delete?')) {\n _this.deleteRow(dropRowKeys);\n }\n }\n };\n\n this.handleFilterData = function (filterObj) {\n _this.store.filter(filterObj);\n var result = undefined;\n if (_this.props.pagination) {\n var sizePerPage = _this.state.sizePerPage;\n\n result = _this.store.page(1, sizePerPage).get();\n } else {\n result = _this.store.get();\n }\n if (_this.props.options.afterColumnFilter) {\n _this.props.options.afterColumnFilter(filterObj, _this.store.getDataIgnoringPagination());\n }\n _this.setState({\n data: result,\n currPage: 1\n });\n };\n\n this.handleExportCSV = function () {\n var result = _this.store.getDataIgnoringPagination();\n var keys = [];\n _this.props.children.map(function (column) {\n if (column.props.hidden === false) {\n keys.push(column.props.dataField);\n }\n });\n (0, _csv_export_util2['default'])(result, keys, _this.props.csvFileName);\n };\n\n this.handleSearch = function (searchText) {\n _this.store.search(searchText);\n var result = undefined;\n if (_this.props.pagination) {\n var sizePerPage = _this.state.sizePerPage;\n\n result = _this.store.page(1, sizePerPage).get();\n } else {\n result = _this.store.get();\n }\n if (_this.props.options.afterSearch) {\n _this.props.options.afterSearch(searchText, _this.store.getDataIgnoringPagination());\n }\n _this.setState({\n data: result,\n currPage: 1\n });\n };\n\n this._scrollHeader = function (e) {\n _this.refs.header.refs.container.scrollLeft = e.currentTarget.scrollLeft;\n };\n\n this._adjustTable = function () {\n _this._adjustHeaderWidth();\n _this._adjustHeight();\n };\n\n this._adjustHeaderWidth = function () {\n var header = _this.refs.header.refs.header;\n var headerContainer = _this.refs.header.refs.container;\n var tbody = _this.refs.body.refs.tbody;\n var firstRow = tbody.childNodes[0];\n var isScroll = headerContainer.offsetWidth !== tbody.parentNode.offsetWidth;\n var scrollBarWidth = isScroll ? _util2['default'].getScrollBarWidth() : 0;\n if (firstRow && _this.store.getDataNum()) {\n var cells = firstRow.childNodes;\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n var computedStyle = getComputedStyle(cell);\n var width = parseFloat(computedStyle.width.replace('px', ''));\n if (_this.isIE) {\n var paddingLeftWidth = parseFloat(computedStyle.paddingLeft.replace('px', ''));\n var paddingRightWidth = parseFloat(computedStyle.paddingRight.replace('px', ''));\n var borderRightWidth = parseFloat(computedStyle.borderRightWidth.replace('px', ''));\n var borderLeftWidth = parseFloat(computedStyle.borderLeftWidth.replace('px', ''));\n width = width + paddingLeftWidth + paddingRightWidth + borderRightWidth + borderLeftWidth;\n }\n var lastPadding = cells.length - 1 === i ? scrollBarWidth : 0;\n if (width <= 0) {\n width = 120;\n cell.width = width + lastPadding + 'px';\n }\n var result = width + lastPadding + 'px';\n header.childNodes[i].style.width = result;\n header.childNodes[i].style.minWidth = result;\n }\n }\n };\n\n this._adjustHeight = function () {\n if (_this.props.height.indexOf('%') === -1) {\n _this.refs.body.refs.container.style.height = parseFloat(_this.props.height, 10) - _this.refs.header.refs.container.offsetHeight + 'px';\n }\n };\n\n this.isIE = false;\n this._attachCellEditFunc();\n if (_util2['default'].canUseDOM()) {\n this.isIE = document.documentMode;\n }\n if (!Array.isArray(this.props.data)) {\n this.store = new _storeTableDataStore.TableDataStore(this.props.data.getData());\n this.props.data.clear();\n this.props.data.on('change', function (data) {\n _this.store.setData(data);\n _this.setState({\n data: _this.getTableData()\n });\n });\n } else {\n var copy = this.props.data.slice();\n this.store = new _storeTableDataStore.TableDataStore(copy);\n }\n\n this.initTable(this.props);\n\n if (this.filter) {\n this.filter.on('onFilterChange', function (currentFilter) {\n _this.handleFilterData(currentFilter);\n });\n }\n\n if (this.props.selectRow && this.props.selectRow.selected) {\n var copy = this.props.selectRow.selected.slice();\n this.store.setSelectedRowKey(copy);\n }\n\n this.state = {\n data: this.getTableData(),\n currPage: this.props.options.page || 1,\n sizePerPage: this.props.options.sizePerPage || _Const2['default'].SIZE_PER_PAGE_LIST[0],\n selectedRowKeys: this.store.getSelectedRowKeys()\n };\n }\n\n _createClass(BootstrapTable, [{\n key: 'initTable',\n value: function initTable(props) {\n var _this2 = this;\n\n var keyField = props.keyField;\n\n var isKeyFieldDefined = typeof keyField === 'string' && keyField.length;\n _react2['default'].Children.forEach(props.children, function (column) {\n if (column.props.isKey) {\n if (keyField) {\n throw 'Error. Multiple key column be detected in TableHeaderColumn.';\n }\n keyField = column.props.dataField;\n }\n if (column.props.filter) {\n // a column contains a filter\n if (!_this2.filter) {\n // first time create the filter on the BootstrapTable\n _this2.filter = new _Filter.Filter();\n }\n // pass the filter to column with filter\n column.props.filter.emitter = _this2.filter;\n }\n });\n\n var colInfos = this.getColumnsDescription(props).reduce(function (prev, curr) {\n prev[curr.name] = curr;\n return prev;\n }, {});\n\n if (!isKeyFieldDefined && !keyField) {\n throw 'Error. No any key column defined in TableHeaderColumn.\\n Use \\'isKey={true}\\' to specify a unique column after version 0.5.4.';\n }\n\n this.store.setProps({\n isPagination: props.pagination,\n keyField: keyField,\n colInfos: colInfos,\n multiColumnSearch: props.multiColumnSearch,\n remote: this.isRemoteDataSource()\n });\n }\n }, {\n key: 'getTableData',\n value: function getTableData() {\n var _props = this.props;\n var options = _props.options;\n var pagination = _props.pagination;\n\n var result = [];\n if (options.sortName && options.sortOrder) {\n this.store.sort(options.sortOrder, options.sortName);\n }\n\n if (pagination) {\n var page = undefined;\n var sizePerPage = undefined;\n if (this.store.isChangedPage()) {\n sizePerPage = this.state.sizePerPage;\n page = this.state.currPage;\n } else {\n sizePerPage = options.sizePerPage || _Const2['default'].SIZE_PER_PAGE_LIST[0];\n page = options.page || 1;\n }\n result = this.store.page(page, sizePerPage).get();\n } else {\n result = this.store.get();\n }\n return result;\n }\n }, {\n key: 'getColumnsDescription',\n value: function getColumnsDescription(_ref) {\n var children = _ref.children;\n\n return _react2['default'].Children.map(children, function (column, i) {\n return {\n name: column.props.dataField,\n align: column.props.dataAlign,\n sort: column.props.dataSort,\n format: column.props.dataFormat,\n formatExtraData: column.props.formatExtraData,\n filterFormatted: column.props.filterFormatted,\n editable: column.props.editable,\n hidden: column.props.hidden,\n searchable: column.props.searchable,\n className: column.props.columnClassName,\n width: column.props.width,\n text: column.props.children,\n sortFunc: column.props.sortFunc,\n index: i\n };\n });\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(nextProps) {\n this.initTable(nextProps);\n var options = nextProps.options;\n var selectRow = nextProps.selectRow;\n\n if (Array.isArray(nextProps.data)) {\n this.store.setData(nextProps.data.slice());\n var page = options.page || this.state.currPage;\n var sizePerPage = options.sizePerPage || this.state.sizePerPage;\n\n // #125\n if (!options.page && page >= Math.ceil(nextProps.data.length / sizePerPage)) {\n page = 1;\n }\n var sortInfo = this.store.getSortInfo();\n var sortField = options.sortName || (sortInfo ? sortInfo.sortField : undefined);\n var sortOrder = options.sortOrder || (sortInfo ? sortInfo.order : undefined);\n if (sortField && sortOrder) this.store.sort(sortOrder, sortField);\n var data = this.store.page(page, sizePerPage).get();\n this.setState({\n data: data,\n currPage: page,\n sizePerPage: sizePerPage\n });\n }\n if (selectRow && selectRow.selected) {\n // set default select rows to store.\n var copy = selectRow.selected.slice();\n this.store.setSelectedRowKey(copy);\n this.setState({\n selectedRowKeys: copy\n });\n }\n }\n }, {\n key: 'componentDidMount',\n value: function componentDidMount() {\n this._adjustTable();\n window.addEventListener('resize', this._adjustTable);\n this.refs.body.refs.container.addEventListener('scroll', this._scrollHeader);\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n window.removeEventListener('resize', this._adjustTable);\n this.refs.body.refs.container.removeEventListener('scroll', this._scrollHeader);\n if (this.filter) {\n this.filter.removeAllListeners('onFilterChange');\n }\n }\n }, {\n key: 'componentDidUpdate',\n value: function componentDidUpdate() {\n this._adjustTable();\n this._attachCellEditFunc();\n if (this.props.options.afterTableComplete) {\n this.props.options.afterTableComplete();\n }\n }\n }, {\n key: '_attachCellEditFunc',\n value: function _attachCellEditFunc() {\n var cellEdit = this.props.cellEdit;\n\n if (cellEdit) {\n this.props.cellEdit.__onCompleteEdit__ = this.handleEditCell.bind(this);\n if (cellEdit.mode !== _Const2['default'].CELL_EDIT_NONE) {\n this.props.selectRow.clickToSelect = false;\n }\n }\n }\n\n /**\n * Returns true if in the current configuration,\n * the datagrid should load its data remotely.\n *\n * @param {Object} [props] Optional. If not given, this.props will be used\n * @return {Boolean}\n */\n }, {\n key: 'isRemoteDataSource',\n value: function isRemoteDataSource(props) {\n return (props || this.props).remote;\n }\n }, {\n key: 'render',\n value: function render() {\n var style = {\n height: this.props.height,\n maxHeight: this.props.maxHeight\n };\n\n var columns = this.getColumnsDescription(this.props);\n var sortInfo = this.store.getSortInfo();\n var pagination = this.renderPagination();\n var toolBar = this.renderToolBar();\n var tableFilter = this.renderTableFilter(columns);\n var isSelectAll = this.isSelectAll();\n var sortIndicator = this.props.options.sortIndicator;\n if (typeof this.props.options.sortIndicator === 'undefined') sortIndicator = true;\n return _react2['default'].createElement(\n 'div',\n { className: 'react-bs-table-container' },\n toolBar,\n _react2['default'].createElement(\n 'div',\n { className: 'react-bs-table', ref: 'table', style: style,\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave },\n _react2['default'].createElement(\n _TableHeader2['default'],\n {\n ref: 'header',\n rowSelectType: this.props.selectRow.mode,\n hideSelectColumn: this.props.selectRow.hideSelectColumn,\n sortName: sortInfo ? sortInfo.sortField : undefined,\n sortOrder: sortInfo ? sortInfo.order : undefined,\n sortIndicator: sortIndicator,\n onSort: this.handleSort,\n onSelectAllRow: this.handleSelectAllRow,\n bordered: this.props.bordered,\n condensed: this.props.condensed,\n isFiltered: this.filter ? true : false,\n isSelectAll: isSelectAll },\n this.props.children\n ),\n _react2['default'].createElement(_TableBody2['default'], { ref: 'body',\n style: style,\n data: this.state.data,\n columns: columns,\n trClassName: this.props.trClassName,\n striped: this.props.striped,\n bordered: this.props.bordered,\n hover: this.props.hover,\n keyField: this.store.getKeyField(),\n condensed: this.props.condensed,\n selectRow: this.props.selectRow,\n cellEdit: this.props.cellEdit,\n selectedRowKeys: this.state.selectedRowKeys,\n onRowClick: this.handleRowClick,\n onRowMouseOver: this.handleRowMouseOver,\n onRowMouseOut: this.handleRowMouseOut,\n onSelectRow: this.handleSelectRow,\n noDataText: this.props.options.noDataText })\n ),\n tableFilter,\n pagination\n );\n }\n }, {\n key: 'isSelectAll',\n value: function isSelectAll() {\n var defaultSelectRowKeys = this.store.getSelectedRowKeys();\n var allRowKeys = this.store.getAllRowkey();\n if (defaultSelectRowKeys.length !== allRowKeys.length) {\n return defaultSelectRowKeys.length === 0 ? false : 'indeterminate';\n } else {\n return true;\n }\n }\n }, {\n key: 'cleanSelected',\n value: function cleanSelected() {\n this.store.setSelectedRowKey([]);\n this.setState({\n selectedRowKeys: []\n });\n }\n }, {\n key: 'handleEditCell',\n value: function handleEditCell(newVal, rowIndex, colIndex) {\n var _props$cellEdit = this.props.cellEdit;\n var beforeSaveCell = _props$cellEdit.beforeSaveCell;\n var afterSaveCell = _props$cellEdit.afterSaveCell;\n\n var fieldName = undefined;\n _react2['default'].Children.forEach(this.props.children, function (column, i) {\n if (i === colIndex) {\n fieldName = column.props.dataField;\n return false;\n }\n });\n\n if (beforeSaveCell) {\n var isValid = beforeSaveCell(this.state.data[rowIndex], fieldName, newVal);\n if (!isValid && typeof isValid !== 'undefined') {\n this.setState({\n data: this.store.get()\n });\n return;\n }\n }\n\n var result = this.store.edit(newVal, rowIndex, fieldName).get();\n this.setState({\n data: result\n });\n\n if (afterSaveCell) {\n afterSaveCell(this.state.data[rowIndex], fieldName, newVal);\n }\n }\n }, {\n key: 'handleAddRowAtBegin',\n value: function handleAddRowAtBegin(newObj) {\n try {\n this.store.addAtBegin(newObj);\n } catch (e) {\n return e;\n }\n this._handleAfterAddingRow(newObj);\n }\n }, {\n key: 'getSizePerPage',\n value: function getSizePerPage() {\n return this.state.sizePerPage;\n }\n }, {\n key: 'getCurrentPage',\n value: function getCurrentPage() {\n return this.state.currPage;\n }\n }, {\n key: 'deleteRow',\n value: function deleteRow(dropRowKeys) {\n var result = undefined;\n this.store.remove(dropRowKeys); // remove selected Row\n this.store.setSelectedRowKey([]); // clear selected row key\n\n if (this.props.pagination) {\n var sizePerPage = this.state.sizePerPage;\n\n var currLastPage = Math.ceil(this.store.getDataNum() / sizePerPage);\n var currPage = this.state.currPage;\n\n if (currPage > currLastPage) currPage = currLastPage;\n result = this.store.page(currPage, sizePerPage).get();\n this.setState({\n data: result,\n selectedRowKeys: this.store.getSelectedRowKeys(),\n currPage: currPage\n });\n } else {\n result = this.store.get();\n this.setState({\n data: result,\n selectedRowKeys: this.store.getSelectedRowKeys()\n });\n }\n if (this.props.options.afterDeleteRow) {\n this.props.options.afterDeleteRow(dropRowKeys);\n }\n }\n }, {\n key: 'renderPagination',\n value: function renderPagination() {\n if (this.props.pagination) {\n var dataSize = undefined;\n if (this.isRemoteDataSource()) {\n dataSize = this.props.fetchInfo.dataTotalSize;\n } else {\n dataSize = this.store.getDataNum();\n }\n var options = this.props.options;\n\n return _react2['default'].createElement(\n 'div',\n { className: 'react-bs-table-pagination' },\n _react2['default'].createElement(_paginationPaginationList2['default'], {\n ref: 'pagination',\n currPage: this.state.currPage,\n changePage: this.handlePaginationData,\n sizePerPage: this.state.sizePerPage,\n sizePerPageList: options.sizePerPageList || _Const2['default'].SIZE_PER_PAGE_LIST,\n paginationSize: options.paginationSize || _Const2['default'].PAGINATION_SIZE,\n remote: this.isRemoteDataSource(),\n dataSize: dataSize,\n onSizePerPageList: options.onSizePerPageList,\n prePage: options.prePage || _Const2['default'].PRE_PAGE,\n nextPage: options.nextPage || _Const2['default'].NEXT_PAGE,\n firstPage: options.firstPage || _Const2['default'].FIRST_PAGE,\n lastPage: options.lastPage || _Const2['default'].LAST_PAGE })\n );\n }\n return null;\n }\n }, {\n key: 'renderToolBar',\n value: function renderToolBar() {\n var _props2 = this.props;\n var selectRow = _props2.selectRow;\n var insertRow = _props2.insertRow;\n var deleteRow = _props2.deleteRow;\n var search = _props2.search;\n var children = _props2.children;\n\n var enableShowOnlySelected = selectRow && selectRow.showOnlySelected;\n if (enableShowOnlySelected || insertRow || deleteRow || search || this.props.exportCSV) {\n var columns = undefined;\n if (Array.isArray(children)) {\n columns = children.map(function (column) {\n var props = column.props;\n\n return {\n name: props.children,\n field: props.dataField,\n // when you want same auto generate value and not allow edit, example ID field\n autoValue: props.autoValue || false,\n // for create editor, no params for column.editable() indicate that editor for new row\n editable: props.editable && typeof props.editable === 'function' ? props.editable() : props.editable,\n format: props.dataFormat ? function (value) {\n return props.dataFormat(value, null, props.formatExtraData).replace(/<.*?>/g, '');\n } : false\n };\n });\n } else {\n columns = [{\n name: children.props.children,\n field: children.props.dataField,\n editable: children.props.editable\n }];\n }\n return _react2['default'].createElement(\n 'div',\n { className: 'react-bs-table-tool-bar' },\n _react2['default'].createElement(_toolbarToolBar2['default'], {\n clearSearch: this.props.options.clearSearch,\n enableInsert: insertRow,\n enableDelete: deleteRow,\n enableSearch: search,\n enableExportCSV: this.props.exportCSV,\n enableShowOnlySelected: enableShowOnlySelected,\n columns: columns,\n searchPlaceholder: this.props.searchPlaceholder,\n onAddRow: this.handleAddRow,\n onDropRow: this.handleDropRow,\n onSearch: this.handleSearch,\n onExportCSV: this.handleExportCSV,\n onShowOnlySelected: this.handleShowOnlySelected })\n );\n } else {\n return null;\n }\n }\n }, {\n key: 'renderTableFilter',\n value: function renderTableFilter(columns) {\n if (this.props.columnFilter) {\n return _react2['default'].createElement(_TableFilter2['default'], { columns: columns,\n rowSelectType: this.props.selectRow.mode,\n onFilter: this.handleFilterData });\n } else {\n return null;\n }\n }\n }, {\n key: '_handleAfterAddingRow',\n value: function _handleAfterAddingRow(newObj) {\n var result = undefined;\n if (this.props.pagination) {\n // if pagination is enabled and insert row be trigger, change to last page\n var sizePerPage = this.state.sizePerPage;\n\n var currLastPage = Math.ceil(this.store.getDataNum() / sizePerPage);\n result = this.store.page(currLastPage, sizePerPage).get();\n this.setState({\n data: result,\n currPage: currLastPage\n });\n } else {\n result = this.store.get();\n this.setState({\n data: result\n });\n }\n\n if (this.props.options.afterInsertRow) {\n this.props.options.afterInsertRow(newObj);\n }\n }\n }]);\n\n return BootstrapTable;\n})(_react.Component);\n\nBootstrapTable.propTypes = {\n keyField: _react.PropTypes.string,\n height: _react.PropTypes.string,\n maxHeight: _react.PropTypes.string,\n data: _react.PropTypes.oneOfType([_react.PropTypes.array, _react.PropTypes.object]),\n remote: _react.PropTypes.bool, // remote data, default is false\n striped: _react.PropTypes.bool,\n bordered: _react.PropTypes.bool,\n hover: _react.PropTypes.bool,\n condensed: _react.PropTypes.bool,\n pagination: _react.PropTypes.bool,\n searchPlaceholder: _react.PropTypes.string,\n selectRow: _react.PropTypes.shape({\n mode: _react.PropTypes.oneOf([_Const2['default'].ROW_SELECT_NONE, _Const2['default'].ROW_SELECT_SINGLE, _Const2['default'].ROW_SELECT_MULTI]),\n bgColor: _react.PropTypes.string,\n selected: _react.PropTypes.array,\n onSelect: _react.PropTypes.func,\n onSelectAll: _react.PropTypes.func,\n clickToSelect: _react.PropTypes.bool,\n hideSelectColumn: _react.PropTypes.bool,\n clickToSelectAndEditCell: _react.PropTypes.bool,\n showOnlySelected: _react.PropTypes.bool\n }),\n cellEdit: _react.PropTypes.shape({\n mode: _react.PropTypes.string,\n blurToSave: _react.PropTypes.bool,\n beforeSaveCell: _react.PropTypes.func,\n afterSaveCell: _react.PropTypes.func\n }),\n insertRow: _react.PropTypes.bool,\n deleteRow: _react.PropTypes.bool,\n search: _react.PropTypes.bool,\n columnFilter: _react.PropTypes.bool,\n trClassName: _react.PropTypes.any,\n options: _react.PropTypes.shape({\n clearSearch: _react.PropTypes.bool,\n sortName: _react.PropTypes.string,\n sortOrder: _react.PropTypes.string,\n sortIndicator: _react.PropTypes.bool,\n afterTableComplete: _react.PropTypes.func,\n afterDeleteRow: _react.PropTypes.func,\n afterInsertRow: _react.PropTypes.func,\n afterSearch: _react.PropTypes.func,\n afterColumnFilter: _react.PropTypes.func,\n onRowClick: _react.PropTypes.func,\n page: _react.PropTypes.number,\n sizePerPageList: _react.PropTypes.array,\n sizePerPage: _react.PropTypes.number,\n paginationSize: _react.PropTypes.number,\n onSortChange: _react.PropTypes.func,\n onPageChange: _react.PropTypes.func,\n onSizePerPageList: _react.PropTypes.func,\n noDataText: _react.PropTypes.string,\n handleConfirmDeleteRow: _react.PropTypes.func,\n prePage: _react.PropTypes.string,\n nextPage: _react.PropTypes.string,\n firstPage: _react.PropTypes.string,\n lastPage: _react.PropTypes.string\n }),\n fetchInfo: _react.PropTypes.shape({\n dataTotalSize: _react.PropTypes.number\n }),\n exportCSV: _react.PropTypes.bool,\n csvFileName: _react.PropTypes.string\n};\nBootstrapTable.defaultProps = {\n height: '100%',\n maxHeight: undefined,\n striped: false,\n bordered: true,\n hover: false,\n condensed: false,\n pagination: false,\n searchPlaceholder: undefined,\n selectRow: {\n mode: _Const2['default'].ROW_SELECT_NONE,\n bgColor: _Const2['default'].ROW_SELECT_BG_COLOR,\n selected: [],\n onSelect: undefined,\n onSelectAll: undefined,\n clickToSelect: false,\n hideSelectColumn: false,\n clickToSelectAndEditCell: false,\n showOnlySelected: false\n },\n cellEdit: {\n mode: _Const2['default'].CELL_EDIT_NONE,\n blurToSave: false,\n beforeSaveCell: undefined,\n afterSaveCell: undefined\n },\n insertRow: false,\n deleteRow: false,\n search: false,\n multiColumnSearch: false,\n columnFilter: false,\n trClassName: '',\n options: {\n clearSearch: false,\n sortName: undefined,\n sortOrder: undefined,\n sortIndicator: true,\n afterTableComplete: undefined,\n afterDeleteRow: undefined,\n afterInsertRow: undefined,\n afterSearch: undefined,\n afterColumnFilter: undefined,\n onRowClick: undefined,\n onMouseLeave: undefined,\n onMouseEnter: undefined,\n onRowMouseOut: undefined,\n onRowMouseOver: undefined,\n page: undefined,\n sizePerPageList: _Const2['default'].SIZE_PER_PAGE_LIST,\n sizePerPage: undefined,\n paginationSize: _Const2['default'].PAGINATION_SIZE,\n onSizePerPageList: undefined,\n noDataText: undefined,\n handleConfirmDeleteRow: undefined,\n prePage: _Const2['default'].PRE_PAGE,\n nextPage: _Const2['default'].NEXT_PAGE,\n firstPage: _Const2['default'].FIRST_PAGE,\n lastPage: _Const2['default'].LAST_PAGE\n },\n fetchInfo: {\n dataTotalSize: 0\n },\n exportCSV: false,\n csvFileName: undefined\n};\n\nexports['default'] = BootstrapTable;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvQm9vdHN0cmFwVGFibGUuanM/YWEwOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7aUNBRTRDLENBQU87Ozs7aUNBQ2pDLENBQVM7Ozs7dUNBQ0gsQ0FBZTs7OztxQ0FDakIsQ0FBYTs7OztvREFDUixFQUE2Qjs7OzswQ0FDcEMsRUFBbUI7Ozs7dUNBQ2YsRUFBZTs7OzsrQ0FDUixFQUF3Qjs7Z0NBQ3RDLEVBQVE7Ozs7MkNBQ0gsRUFBbUI7Ozs7a0NBQ2xCLEVBQVU7O0lBRTNCLGNBQWM7WUFBZCxjQUFjOztBQUVQLFdBRlAsY0FBYyxDQUVOLEtBQUssRUFBRTs7OzBCQUZmLGNBQWM7O0FBR2hCLCtCQUhFLGNBQWMsNkNBR1YsS0FBSyxFQUFFOztTQXlSZixVQUFVLEdBQUcsVUFBQyxLQUFLLEVBQUUsU0FBUyxFQUFLO0FBQ2pDLFVBQUksTUFBSyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtBQUNuQyxjQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBSyxLQUFLLENBQUMsQ0FBQztPQUMvRDs7QUFFRCxVQUFNLE1BQU0sR0FBRyxNQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3ZELFlBQUssUUFBUSxDQUFDO0FBQ1osWUFBSSxFQUFFLE1BQU07T0FDYixDQUFDLENBQUM7S0FDSjs7U0FFRCxvQkFBb0IsR0FBRyxVQUFDLElBQUksRUFBRSxXQUFXLEVBQUs7VUFDcEMsWUFBWSxHQUFLLE1BQUssS0FBSyxDQUFDLE9BQU8sQ0FBbkMsWUFBWTs7QUFDcEIsVUFBSSxZQUFZLEVBQUU7QUFDaEIsb0JBQVksQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7T0FDakM7O0FBRUQsVUFBSSxNQUFLLGtCQUFrQixFQUFFLEVBQUU7QUFDN0IsZUFBTztPQUNSOztB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LEVBQUUsU0FBUztBQUNwQixpQkFBYSxFQUFFLElBQUk7QUFDbkIsc0JBQWtCLEVBQUUsU0FBUztBQUM3QixrQkFBYyxFQUFFLFNBQVM7QUFDekIsa0JBQWMsRUFBRSxTQUFTO0FBQ3pCLGVBQVcsRUFBRSxTQUFTO0FBQ3RCLHFCQUFpQixFQUFFLFNBQVM7QUFDNUIsY0FBVSxFQUFFLFNBQVM7QUFDckIsZ0JBQVksRUFBRSxTQUFTO0FBQ3ZCLGdCQUFZLEVBQUUsU0FBUztBQUN2QixpQkFBYSxFQUFFLFNBQVM7QUFDeEIsa0JBQWMsRUFBRSxTQUFTO0FBQ3pCLFFBQUksRUFBRSxTQUFTO0FBQ2YsbUJBQWUsRUFBRSxtQkFBTSxrQkFBa0I7QUFDekMsZUFBVyxFQUFFLFNBQVM7QUFDdEIsa0JBQWMsRUFBRSxtQkFBTSxlQUFlO0FBQ3JDLHFCQUFpQixFQUFFLFNBQVM7QUFDNUIsY0FBVSxFQUFFLFNBQVM7QUFDckIsMEJBQXNCLEVBQUUsU0FBUztBQUNqQyxXQUFPLEVBQUUsbUJBQU0sUUFBUTtBQUN2QixZQUFRLEVBQUUsbUJBQU0sU0FBUztBQUN6QixhQUFTLEVBQUUsbUJBQU0sVUFBVTtBQUMzQixZQUFRLEVBQUUsbUJBQU0sU0FBUztHQUMxQjtBQUNELFdBQVMsRUFBRTtBQUNULGlCQUFhLEVBQUUsQ0FBQztHQUNqQjtBQUNELFdBQVMsRUFBRSxLQUFLO0FBQ2hCLGFBQVcsRUFBRSxTQUFTO0NBQ3ZCLENBQUM7O3FCQUVhLGNBQWMiLCJmaWxlIjoiMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBuby1hbGVydDogMCAqL1xuLyogZXNsaW50IG1heC1sZW46IDAgKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFByb3BUeXBlcyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBDb25zdCBmcm9tICcuL0NvbnN0JztcbmltcG9ydCBUYWJsZUhlYWRlciBmcm9tICcuL1RhYmxlSGVhZGVyJztcbmltcG9ydCBUYWJsZUJvZHkgZnJvbSAnLi9UYWJsZUJvZHknO1xuaW1wb3J0IFBhZ2luYXRpb25MaXN0IGZyb20gJy4vcGFnaW5hdGlvbi9QYWdpbmF0aW9uTGlzdCc7XG5pbXBvcnQgVG9vbEJhciBmcm9tICcuL3Rvb2xiYXIvVG9vbEJhcic7XG5pbXBvcnQgVGFibGVGaWx0ZXIgZnJvbSAnLi9UYWJsZUZpbHRlcic7XG5pbXBvcnQgeyBUYWJsZURhdGFTdG9yZSB9IGZyb20gJy4vc3RvcmUvVGFibGVEYXRhU3RvcmUnO1xuaW1wb3J0IFV0aWwgZnJvbSAnLi91dGlsJztcbmltcG9ydCBleHBvcnRDU1YgZnJvbSAnLi9jc3ZfZXhwb3J0X3V0aWwnO1xuaW1wb3J0IHsgRmlsdGVyIH0gZnJvbSAnLi9GaWx0ZXInO1xuXG5jbGFzcyBCb290c3RyYXBUYWJsZSBleHRlbmRzIENvbXBvbmVudCB7XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5pc0lFID0gZmFsc2U7XG4gICAgdGhpcy5fYXR0YWNoQ2VsbEVkaXRGdW5jKCk7XG4gICAgaWYgKFV0aWwuY2FuVXNlRE9NKCkpIHtcbiAgICAgIHRoaXMuaXNJRSA9IGRvY3VtZW50LmRvY3VtZW50TW9kZTtcbiAgICB9XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMucHJvcHMuZGF0YSkpIHtcbiAgICAgIHRoaXMuc3RvcmUgPSBuZXcgVGFibGVEYXRhU3RvcmUodGhpcy5wcm9wcy5kYXRhLmdldERhdGEoKSk7XG4gICAgICB0aGlzLnByb3BzLmRhdGEuY2xlYXIoKTtcbiAgICAgIHRoaXMucHJvcHMuZGF0YS5vbignY2hhbmdlJywgKGRhdGEpID0+IHtcbiAgICAgICAgdGhpcy5zdG9yZS5zZXREYXRhKGRhdGEpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBkYXRhOiB0aGlzLmdldFRhYmxlRGF0YSgpXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvcHkgPSB0aGlzLnByb3BzLmRhdGEuc2xpY2UoKTtcbiAgICAgIHRoaXMuc3RvcmUgPSBuZXcgVGFibGVEYXRhU3RvcmUoY29weSk7XG4gICAgfVxuXG4gICAgdGhpcy5pbml0VGFibGUodGhpcy5wcm9wcyk7XG5cbiAgICBpZiAodGhpcy5maWx0ZXIpIHtcbiAgICAgIHRoaXMuZmlsdGVyLm9uKCdvbkZpbHRlckNoYW5nZScsIChjdXJyZW50RmlsdGVyKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlRmlsdGVyRGF0YShjdXJyZW50RmlsdGVyKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLnNlbGVjdFJvdyAmJiB0aGlzLnByb3BzLnNlbGVjdFJvdy5zZWxlY3RlZCkge1xuICAgICAgY29uc3QgY29weSA9IHRoaXMucHJvcHMuc2VsZWN0Um93LnNlbGVjdGVkLnNsaWNlKCk7XG4gICAgICB0aGlzLnN0b3JlLnNldFNlbGVjdGVkUm93S2V5KGNvcHkpO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBkYXRhOiB0aGlzLmdldFRhYmxlRGF0YSgpLFxuICAgICAgY3VyclBhZ2U6IHRoaXMucHJvcHMub3B0aW9ucy5wYWdlIHx8IDEsXG4gICAgICBzaXplUGVyUGFnZTogdGhpcy5wcm9wcy5vcHRpb25zLnNpemVQZXJQYWdlIHx8IENvbnN0LlNJWkVfUEVSX1BBR0VfTElTVFswXSxcbiAgICAgIHNlbGVjdGVkUm93S2V5czogdGhpcy5zdG9yZS5nZXRTZWxlY3RlZFJvd0tleXMoKVxuICAgIH07XG4gIH1cblxuICBpbml0VGFibGUocHJvcHMpIHtcbiAgICBsZXQgeyBrZXlGaWVsZCB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCBpc0tleUZpZWxkRGVmaW5lZCA9IHR5cGVvZiBrZXlGaWVsZCA9PT0gJ3N0cmluZycgJiYga2V5RmllbGQubGVuZ3RoO1xuICAgIFJlYWN0LkNoaWxkcmVuLmZvckVhY2gocHJvcHMuY2hpbGRyZW4sIGNvbHVtbiA9PiB7XG4gICAgICBpZiAoY29sdW1uLnByb3BzLmlzS2V5KSB7XG4gICAgICAgIGlmIChrZXlGaWVsZCkge1xuICAgICAgICAgIHRocm93ICdFcnJvci4gTXVsdGlwbGUga2V5IGNvbHVtbiBiZSBkZXRlY3RlZCBpbiBUYWJsZUhlYWRlckNvbHVtbi4nO1xuICAgICAgICB9XG4gICAgICAgIGtleUZpZWxkID0gY29sdW1uLnByb3BzLmRhdGFGaWVsZDtcbiAgICAgIH1cbiAgICAgIGlmIChjb2x1bW4ucHJvcHMuZmlsdGVyKSB7XG4gICAgICAgIC8vIGEgY29sdW1uIGNvbnRhaW5zIGEgZmlsdGVyXG4gICAgICAgIGlmICghdGhpcy5maWx0ZXIpIHtcbiAgICAgICAgICAvLyBmaXJzdCB0aW1lIGNyZWF0ZSB0aGUgZmlsdGVyIG9uIHRoZSBCb290c3RyYXBUYWJsZVxuICAgICAgICAgIHRoaXMuZmlsdGVyID0gbmV3IEZpbHRlcigpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHBhc3MgdGhlIGZpbHRlciB0byBjb2x1bW4gd2l0aCBmaWx0ZXJcbiAgICAgICAgY29sdW1uLnByb3BzLmZpbHRlci5lbWl0dGVyID0gdGhpcy5maWx0ZXI7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBjb2xJbmZvcyA9IHRoaXMuZ2V0Q29sdW1uc0Rlc2NyaXB0aW9uKHByb3BzKS5yZWR1Y2UoKCBwcmV2LCBjdXJyICkgPT4ge1xuICAgICAgcHJldltjdXJyLm5hbWVdID0gY3VycjtcbiAgICAgIHJldHVybiBwcmV2O1xuICAgIH0sIHt9KTtcblxuICAgIGlmICghaXNLZXlGaWVsZERlZmluZWQgJiYgIWtleUZpZWxkKSB7XG4gICAgICB0aHJvdyBgRXJyb3IuIE5vIGFueSBrZXkgY29sdW1uIGRlZmluZWQgaW4gVGFibGVIZWFkZXJDb2x1bW4uXG4gICAgICAgICAgICBVc2UgJ2lzS2V5PXt0cnVlfScgdG8gc3BlY2lmeSBhIHVuaXF1ZSBjb2x1bW4gYWZ0ZXIgdmVyc2lvbiAwLjUuNC5gO1xuICAgIH1cblxuICAgIHRoaXMuc3RvcmUuc2V0UHJvcHMoe1xuICAgICAgaXNQYWdpbmF0aW9uOiBwcm9wcy5wYWdpbmF0aW9uLFxuICAgICAga2V5RmllbGQ6IGtleUZpZWxkLFxuICAgICAgY29sSW5mb3M6IGNvbEluZm9zLFxuICAgICAgbXVsdGlDb2x1bW5TZWFyY2g6IHByb3BzLm11bHRpQ29sdW1uU2VhcmNoLFxuICAgICAgcmVtb3RlOiB0aGlzLmlzUmVtb3RlRGF0YVNvdXJjZSgpXG4gICAgfSk7XG4gIH1cblxuICBnZXRUYWJsZURhdGEoKSB7XG4gICAgY29uc3QgeyBvcHRpb25zLCBwYWdpbmF0aW9uIH0gPSB0aGlzLnByb3BzO1xuICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICBpZiAob3B0aW9ucy5zb3J0TmFtZSAmJiBvcHRpb25zLnNvcnRPcmRlcikge1xuICAgICAgdGhpcy5zdG9yZS5zb3J0KG9wdGlvbnMuc29ydE9yZGVyLCBvcHRpb25zLnNvcnROYW1lKTtcbiAgICB9XG5cbiAgICBpZiAocGFnaW5hdGlvbikge1xuICAgICAgbGV0IHBhZ2U7XG4gICAgICBsZXQgc2l6ZVBlclBhZ2U7XG4gICAgICBpZiAodGhpcy5zdG9yZS5pc0NoYW5nZWRQYWdlKCkpIHtcbiAgICAgICAgc2l6ZVBlclBhZ2UgPSB0aGlzLnN0YXRlLnNpemVQZXJQYWdlO1xuICAgICAgICBwYWdlID0gdGhpcy5zdGF0ZS5jdXJyUGFnZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNpemVQZXJQYWdlID0gb3B0aW9ucy5zaXplUGVyUGFnZSB8fCBDb25zdC5TSVpFX1BFUl9QQUdFX0xJU1RbMF07XG4gICAgICAgIHBhZ2UgPSBvcHRpb25zLnBhZ2UgfHwgMTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IHRoaXMuc3RvcmUucGFnZShwYWdlLCBzaXplUGVyUGFnZSkuZ2V0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMuc3RvcmUuZ2V0KCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBnZXRDb2x1bW5zRGVzY3JpcHRpb24oeyBjaGlsZHJlbiB9KSB7XG4gICAgcmV0dXJuIFJlYWN0LkNoaWxkcmVuLm1hcChjaGlsZHJlbiwgKGNvbHVtbiwgaSkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogY29sdW1uLnByb3BzLmRhdGFGaWVsZCxcbiAgICAgICAgYWxpZ246IGNvbHVtbi5wcm9wcy5kYXRhQWxpZ24sXG4gICAgICAgIHNvcnQ6IGNvbHVtbi5wcm9wcy5kYXRhU29ydCxcbiAgICAgICAgZm9ybWF0OiBjb2x1bW4ucHJvcHMuZGF0YUZvcm1hdCxcbiAgICAgICAgZm9ybWF0RXh0cmFEYXRhOiBjb2x1bW4ucHJvcHMuZm9ybWF0RXh0cmFEYXRhLFxuICAgICAgICBmaWx0ZXJGb3JtYXR0ZWQ6IGNvbHVtbi5wcm9wcy5maWx0ZXJGb3JtYXR0ZWQsXG4gICAgICAgIGVkaXRhYmxlOiBjb2x1bW4ucHJvcHMuZWRpdGFibGUsXG4gICAgICAgIGhpZGRlbjogY29sdW1uLnByb3BzLmhpZGRlbixcbiAgICAgICAgc2VhcmNoYWJsZTogY29sdW1uLnByb3BzLnNlYXJjaGFibGUsXG4gICAgICAgIGNsYXNzTmFtZTogY29sdW1uLnByb3BzLmNvbHVtbkNsYXNzTmFtZSxcbiAgICAgICAgd2lkdGg6IGNvbHVtbi5wcm9wcy53aWR0aCxcbiAgICAgICAgdGV4dDogY29sdW1uLnByb3BzLmNoaWxkcmVuLFxuICAgICAgICBzb3J0RnVuYzogY29sdW1uLnByb3BzLnNvcnRGdW5jLFxuICAgICAgICBpbmRleDogaVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKSB7XG4gICAgdGhpcy5pbml0VGFibGUobmV4dFByb3BzKTtcbiAgICBjb25zdCB7IG9wdGlvbnMsIHNlbGVjdFJvdyB9ID0gbmV4dFByb3BzO1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5leHRQcm9wcy5kYXRhKSkge1xuICAgICAgdGhpcy5zdG9yZS5zZXREYXRhKG5leHRQcm9wcy5kYXRhLnNsaWNlKCkpO1xuICAgICAgbGV0IHBhZ2UgPSBvcHRpb25zLnBhZ2UgfHwgdGhpcy5zdGF0ZS5jdXJyUGFnZTtcbiAgICAgIGNvbnN0IHNpemVQZXJQYWdlID0gb3B0aW9ucy5zaXplUGVyUGFnZSB8fCB0aGlzLnN0YXRlLnNpemVQZXJQYWdlO1xuXG4gICAgICAvLyAjMTI1XG4gICAgICBpZiAoIW9wdGlvbnMucGFnZSAmJlxuICAgICAgICBwYWdlID49IE1hdGguY2VpbChuZXh0UHJvcHMuZGF0YS5sZW5ndGggLyBzaXplUGVyUGFnZSkpIHtcbiAgICAgICAgcGFnZSA9IDE7XG4gICAgICB9XG4gICAgICBjb25zdCBzb3J0SW5mbyA9IHRoaXMuc3RvcmUuZ2V0U29ydEluZm8oKTtcbiAgICAgIGNvbnN0IHNvcnRGaWVsZCA9IG9wdGlvbnMuc29ydE5hbWUgfHwgKHNvcnRJbmZvID8gc29ydEluZm8uc29ydEZpZWxkIDogdW5kZWZpbmVkKTtcbiAgICAgIGNvbnN0IHNvcnRPcmRlciA9IG9wdGlvbnMuc29ydE9yZGVyIHx8IChzb3J0SW5mbyA/IHNvcnRJbmZvLm9yZGVyIDogdW5kZWZpbmVkKTtcbiAgICAgIGlmIChzb3J0RmllbGQgJiYgc29ydE9yZGVyKSB0aGlzLnN0b3JlLnNvcnQoc29ydE9yZGVyLCBzb3J0RmllbGQpO1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuc3RvcmUucGFnZShwYWdlLCBzaXplUGVyUGFnZSkuZ2V0KCk7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZGF0YSxcbiAgICAgICAgY3VyclBhZ2U6IHBhZ2UsXG4gICAgICAgIHNpemVQZXJQYWdlXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHNlbGVjdFJvdyAmJiBzZWxlY3RSb3cuc2VsZWN0ZWQpIHtcbiAgICAgIC8vIHNldCBkZWZhdWx0IHNlbGVjdCByb3dzIHRvIHN0b3JlLlxuICAgICAgY29uc3QgY29weSA9IHNlbGVjdFJvdy5zZWxlY3RlZC5zbGljZSgpO1xuICAgICAgdGhpcy5zdG9yZS5zZXRTZWxlY3RlZFJvd0tleShjb3B5KTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzZWxlY3RlZFJvd0tleXM6IGNvcHlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMuX2FkanVzdFRhYmxlKCk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX2FkanVzdFRhYmxlKTtcbiAgICB0aGlzLnJlZnMuYm9keS5yZWZzLmNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLl9zY3JvbGxIZWFkZXIpO1xuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX2FkanVzdFRhYmxlKTtcbiAgICB0aGlzLnJlZnMuYm9keS5yZWZzLmNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLl9zY3JvbGxIZWFkZXIpO1xuICAgIGlmICh0aGlzLmZpbHRlcikge1xuICAgICAgdGhpcy5maWx0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCdvbkZpbHRlckNoYW5nZScpO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICB0aGlzLl9hZGp1c3RUYWJsZSgpO1xuICAgIHRoaXMuX2F0dGFjaENlbGxFZGl0RnVuYygpO1xuICAgIGlmICh0aGlzLnByb3BzLm9wdGlvbnMuYWZ0ZXJUYWJsZUNvbXBsZXRlKSB7XG4gICAgICB0aGlzLnByb3BzLm9wdGlvbnMuYWZ0ZXJUYWJsZUNvbXBsZXRlKCk7XG4gICAgfVxuICB9XG5cbiAgX2F0dGFjaENlbGxFZGl0RnVuYygpIHtcbiAgICBjb25zdCB7IGNlbGxFZGl0IH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChjZWxsRWRpdCkge1xuICAgICAgdGhpcy5wcm9wcy5jZWxsRWRpdC5fX29uQ29tcGxldGVFZGl0X18gPSB0aGlzLmhhbmRsZUVkaXRDZWxsLmJpbmQodGhpcyk7XG4gICAgICBpZiAoY2VsbEVkaXQubW9kZSAhPT0gQ29uc3QuQ0VMTF9FRElUX05PTkUpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5zZWxlY3RSb3cuY2xpY2tUb1NlbGVjdCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgaW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbixcbiAgICogdGhlIGRhdGFncmlkIHNob3VsZCBsb2FkIGl0cyBkYXRhIHJlbW90ZWx5LlxuICAgKlxuICAgKiBAcGFyYW0gIHtPYmplY3R9ICBbcHJvcHNdIE9wdGlvbmFsLiBJZiBub3QgZ2l2ZW4sIHRoaXMucHJvcHMgd2lsbCBiZSB1c2VkXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAqL1xuICBpc1JlbW90ZURhdGFTb3VyY2UocHJvcHMpIHtcbiAgICByZXR1cm4gKHByb3BzIHx8IHRoaXMucHJvcHMpLnJlbW90ZTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBzdHlsZSA9IHtcbiAgICAgIGhlaWdodDogdGhpcy5wcm9wcy5oZWlnaHQsXG4gICAgICBtYXhIZWlnaHQ6IHRoaXMucHJvcHMubWF4SGVpZ2h0XG4gICAgfTtcblxuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdldENvbHVtbnNEZXNjcmlwdGlvbih0aGlzLnByb3BzKTtcbiAgICBjb25zdCBzb3J0SW5mbyA9IHRoaXMuc3RvcmUuZ2V0U29ydEluZm8oKTtcbiAgICBjb25zdCBwYWdpbmF0aW9uID0gdGhpcy5yZW5kZXJQYWdpbmF0aW9uKCk7XG4gICAgY29uc3QgdG9vbEJhciA9IHRoaXMucmVuZGVyVG9vbEJhcigpO1xuICAgIGNvbnN0IHRhYmxlRmlsdGVyID0gdGhpcy5yZW5kZXJUYWJsZUZpbHRlcihjb2x1bW5zKTtcbiAgICBjb25zdCBpc1NlbGVjdEFsbCA9IHRoaXMuaXNTZWxlY3RBbGwoKTtcbiAgICBsZXQgc29ydEluZGljYXRvciA9IHRoaXMucHJvcHMub3B0aW9ucy5zb3J0SW5kaWNhdG9yO1xuICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vcHRpb25zLnNvcnRJbmRpY2F0b3IgPT09ICd1bmRlZmluZWQnKSBzb3J0SW5kaWNhdG9yID0gdHJ1ZTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9J3JlYWN0LWJzLXRhYmxlLWNvbnRhaW5lcic+XG4gICAgICAgIHsgdG9vbEJhciB9XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdyZWFjdC1icy10YWJsZScgcmVmPSd0YWJsZScgc3R5bGU9eyBzdHlsZSB9XG4gICAgICAgICAgICBvbk1vdXNlRW50ZXI9eyB0aGlzLmhhbmRsZU1vdXNlRW50ZXIgfVxuICAgICAgICAgICAgb25Nb3VzZUxlYXZlPXsgdGhpcy5oYW5kbGVNb3VzZUxlYXZlIH0+XG4gICAgICAgICAgPFRhYmxlSGVhZGVyXG4gICAgICAgICAgICByZWY9J2hlYWRlcidcbiAgICAgICAgICAgIHJvd1NlbGVjdFR5cGU9eyB0aGlzLnByb3BzLnNlbGVjdFJvdy5tb2RlIH1cbiAgICAgICAgICAgIGhpZGVTZWxlY3RDb2x1bW49eyB0aGlzLnByb3BzLnNlbGVjdFJvdy5oaWRlU2VsZWN0Q29sdW1uIH1cbiAgICAgICAgICAgIHNvcnROYW1lPXsgc29ydEluZm8gPyBzb3J0SW5mby5zb3J0RmllbGQgOiB1bmRlZmluZWQgfVxuICAgICAgICAgICAgc29ydE9yZGVyPXsgc29ydEluZm8gPyBzb3J0SW5mby5vcmRlciA6IHVuZGVmaW5lZCB9XG4gICAgICAgICAgICBzb3J0SW5kaWNhdG9yPXsgc29ydEluZGljYXRvciB9XG4gICAgICAgICAgICBvblNvcnQ9eyB0aGlzLmhhbmRsZVNvcnQgfVxuICAgICAgICAgICAgb25TZWxlY3RBbGxSb3c9eyB0aGlzLmhhbmRsZVNlbGVjdEFsbFJvdyB9XG4gICAgICAgICAgICBib3JkZXJlZD17IHRoaXMucHJvcHMuYm9yZGVyZWQgfVxuICAgICAgICAgICAgY29uZGVuc2VkPXsgdGhpcy5wcm9wcy5jb25kZW5zZWQgfVxuICAgICAgICAgICAgaXNGaWx0ZXJlZD17IHRoaXMuZmlsdGVyID8gdHJ1ZSA6IGZhbHNlIH1cbiAgICAgICAgICAgIGlzU2VsZWN0QWxsPXsgaXNTZWxlY3RBbGwgfT5cbiAgICAgICAgICAgIHsgdGhpcy5wcm9wcy5jaGlsZHJlbiB9XG4gICAgICAgICAgPC9UYWJsZUhlYWRlcj5cbiAgICAgICAgICA8VGFibGVCb2R5IHJlZj0nYm9keSdcbiAgICAgICAgICAgIHN0eWxlPXsgc3R5bGUgfVxuICAgICAgICAgICAgZGF0YT17IHRoaXMuc3RhdGUuZGF0YSB9XG4gICAgICAgICAgICBjb2x1bW5zPXsgY29sdW1ucyB9XG4gICAgICAgICAgICB0ckNsYXNzTmFtZT17IHRoaXMucHJvcHMudHJDbGFzc05hbWUgfVxuICAgICAgICAgICAgc3RyaXBlZD17IHRoaXMucHJvcHMuc3RyaXBlZCB9XG4gICAgICAgICAgICBib3JkZXJlZD17IHRoaXMucHJvcHMuYm9yZGVyZWQgfVxuICAgICAgICAgICAgaG92ZXI9eyB0aGlzLnByb3BzLmhvdmVyIH1cbiAgICAgICAgICAgIGtleUZpZWxkPXsgdGhpcy5zdG9yZS5nZXRLZXlGaWVsZCgpIH1cbiAgICAgICAgICAgIGNvbmRlbnNlZD17IHRoaXMucHJvcHMuY29uZGVuc2VkIH1cbiAgICAgICAgICAgIHNlbGVjdFJvdz17IHRoaXMucHJvcHMuc2VsZWN0Um93IH1cbiAgICAgICAgICAgIGNlbGxFZGl0PXsgdGhpcy5wcm9wcy5jZWxsRWRpdCB9XG4gICAgICAgICAgICBzZWxlY3RlZFJvd0tleXM9eyB0aGlzLnN0YXRlLnNlbGVjdGVkUm93S2V5cyB9XG4gICAgICAgICAgICBvblJvd0NsaWNrPXsgdGhpcy5oYW5kbGVSb3dDbGljayB9XG4gICAgICAgICAgICBvblJvd01vdXNlT3Zlcj17IHRoaXMuaGFuZGxlUm93TW91c2VPdmVyIH1cbiAgICAgICAgICAgIG9uUm93TW91c2VPdXQ9eyB0aGlzLmhhbmRsZVJvd01vdXNlT3V0IH1cbiAgICAgICAgICAgIG9uU2VsZWN0Um93PXsgdGhpcy5oYW5kbGVTZWxlY3RSb3cgfVxuICAgICAgICAgICAgbm9EYXRhVGV4dD17IHRoaXMucHJvcHMub3B0aW9ucy5ub0RhdGFUZXh0IH0gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHsgdGFibGVGaWx0ZXIgfVxuICAgICAgICB7IHBhZ2luYXRpb24gfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIGlzU2VsZWN0QWxsKCkge1xuICAgIGNvbnN0IGRlZmF1bHRTZWxlY3RSb3dLZXlzID0gdGhpcy5zdG9yZS5nZXRTZWxlY3RlZFJvd0tleXMoKTtcbiAgICBjb25zdCBhbGxSb3dLZXlzID0gdGhpcy5zdG9yZS5nZXRBbGxSb3drZXkoKTtcbiAgICBpZiAoZGVmYXVsdFNlbGVjdFJvd0tleXMubGVuZ3RoICE9PSBhbGxSb3dLZXlzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGRlZmF1bHRTZWxlY3RSb3dLZXlzLmxlbmd0aCA9PT0gMCA/IGZhbHNlIDogJ2luZGV0ZXJtaW5hdGUnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBjbGVhblNlbGVjdGVkKCkge1xuICAgIHRoaXMuc3RvcmUuc2V0U2VsZWN0ZWRSb3dLZXkoW10pO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgc2VsZWN0ZWRSb3dLZXlzOiBbXVxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlU29ydCA9IChvcmRlciwgc29ydEZpZWxkKSA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMub3B0aW9ucy5vblNvcnRDaGFuZ2UpIHtcbiAgICAgIHRoaXMucHJvcHMub3B0aW9ucy5vblNvcnRDaGFuZ2Uoc29ydEZpZWxkLCBvcmRlciwgdGhpcy5wcm9wcyk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5zdG9yZS5zb3J0KG9yZGVyLCBzb3J0RmllbGQpLmdldCgpO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZGF0YTogcmVzdWx0XG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVQYWdpbmF0aW9uRGF0YSA9IChwYWdlLCBzaXplUGVyUGFnZSkgPT4ge1xuICAgIGNvbnN0IHsgb25QYWdlQ2hhbmdlIH0gPSB0aGlzLnByb3BzLm9wdGlvbnM7XG4gICAgaWYgKG9uUGFnZUNoYW5nZSkge1xuICAgICAgb25QYWdlQ2hhbmdlKHBhZ2UsIHNpemVQZXJQYWdlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1JlbW90ZURhdGFTb3VyY2UoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc3RvcmUucGFnZShwYWdlLCBzaXplUGVyUGFnZSkuZ2V0KCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBkYXRhOiByZXN1bHQsXG4gICAgICBjdXJyUGFnZTogcGFnZSxcbiAgICAgIHNpemVQZXJQYWdlXG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVNb3VzZUxlYXZlID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnByb3BzLm9wdGlvbnMub25Nb3VzZUxlYXZlKSB7XG4gICAgICB0aGlzLnByb3BzLm9wdGlvbnMub25Nb3VzZUxlYXZlKCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlTW91c2VFbnRlciA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5wcm9wcy5vcHRpb25zLm9uTW91c2VFbnRlcikge1xuICAgICAgdGhpcy5wcm9wcy5vcHRpb25zLm9uTW91c2VFbnRlcigpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVJvd01vdXNlT3V0ID0gcm93ID0+IHtcbiAgICBpZiAodGhpcy5wcm9wcy5vcHRpb25zLm9uUm93TW91c2VPdXQpIHtcbiAgICAgIHRoaXMucHJvcHMub3B0aW9ucy5vblJvd01vdXNlT3V0KHJvdyk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlUm93TW91c2VPdmVyID0gcm93ID0+IHtcbiAgICBpZiAodGhpcy5wcm9wcy5vcHRpb25zLm9uUm93TW91c2VPdmVyKSB7XG4gICAgICB0aGlzLnByb3BzLm9wdGlvbnMub25Sb3dNb3VzZU92ZXIocm93KTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVSb3dDbGljayA9IHJvdyA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMub3B0aW9ucy5vblJvd0NsaWNrKSB7XG4gICAgICB0aGlzLnByb3BzLm9wdGlvbnMub25Sb3dDbGljayhyb3cpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVNlbGVjdEFsbFJvdyA9IGUgPT4ge1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBlLmN1cnJlbnRUYXJnZXQuY2hlY2tlZDtcbiAgICBsZXQgc2VsZWN0ZWRSb3dLZXlzID0gW107XG4gICAgbGV0IHJlc3VsdCA9IHRydWU7XG4gICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0Um93Lm9uU2VsZWN0QWxsKSB7XG4gICAgICByZXN1bHQgPSB0aGlzLnByb3BzLnNlbGVjdFJvdy5vblNlbGVjdEFsbChpc1NlbGVjdGVkLFxuICAgICAgICBpc1NlbGVjdGVkID8gdGhpcy5zdG9yZS5nZXQoKSA6IFtdKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ3VuZGVmaW5lZCcgfHwgcmVzdWx0ICE9PSBmYWxzZSkge1xuICAgICAgaWYgKGlzU2VsZWN0ZWQpIHtcbiAgICAgICAgc2VsZWN0ZWRSb3dLZXlzID0gdGhpcy5zdG9yZS5nZXRBbGxSb3drZXkoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdG9yZS5zZXRTZWxlY3RlZFJvd0tleShzZWxlY3RlZFJvd0tleXMpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHNlbGVjdGVkUm93S2V5cyB9KTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVTaG93T25seVNlbGVjdGVkID0gKCkgPT4ge1xuICAgIHRoaXMuc3RvcmUuaWdub3JlTm9uU2VsZWN0ZWQoKTtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGlmICh0aGlzLnByb3BzLnBhZ2luYXRpb24pIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMuc3RvcmUucGFnZSgxLCB0aGlzLnN0YXRlLnNpemVQZXJQYWdlKS5nZXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gdGhpcy5zdG9yZS5nZXQoKTtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBkYXRhOiByZXN1bHQsXG4gICAgICBjdXJyUGFnZTogMVxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlU2VsZWN0Um93ID0gKHJvdywgaXNTZWxlY3RlZCkgPT4ge1xuICAgIGxldCByZXN1bHQgPSB0cnVlO1xuICAgIGxldCBjdXJyU2VsZWN0ZWQgPSB0aGlzLnN0b3JlLmdldFNlbGVjdGVkUm93S2V5cygpO1xuICAgIGNvbnN0IHJvd0tleSA9IHJvd1sgdGhpcy5zdG9yZS5nZXRLZXlGaWVsZCgpIF07XG4gICAgY29uc3QgeyBzZWxlY3RSb3cgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKHNlbGVjdFJvdy5vblNlbGVjdCkge1xuICAgICAgcmVzdWx0ID0gc2VsZWN0Um93Lm9uU2VsZWN0KHJvdywgaXNTZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICd1bmRlZmluZWQnIHx8IHJlc3VsdCAhPT0gZmFsc2UpIHtcbiAgICAgIGlmIChzZWxlY3RSb3cubW9kZSA9PT0gQ29uc3QuUk9XX1NFTEVDVF9TSU5HTEUpIHtcbiAgICAgICAgY3VyclNlbGVjdGVkID0gaXNTZWxlY3RlZCA/IFsgcm93S2V5IF0gOiBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc1NlbGVjdGVkKSB7XG4gICAgICAgICAgY3VyclNlbGVjdGVkLnB1c2gocm93S2V5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdXJyU2VsZWN0ZWQgPSBjdXJyU2VsZWN0ZWQuZmlsdGVyKGtleSA9PiByb3dLZXkgIT09IGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5zdG9yZS5zZXRTZWxlY3RlZFJvd0tleShjdXJyU2VsZWN0ZWQpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHNlbGVjdGVkUm93S2V5czogY3VyclNlbGVjdGVkXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVFZGl0Q2VsbChuZXdWYWwsIHJvd0luZGV4LCBjb2xJbmRleCkge1xuICAgIGNvbnN0IHsgYmVmb3JlU2F2ZUNlbGwsIGFmdGVyU2F2ZUNlbGwgfSA9IHRoaXMucHJvcHMuY2VsbEVkaXQ7XG4gICAgbGV0IGZpZWxkTmFtZTtcbiAgICBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKHRoaXMucHJvcHMuY2hpbGRyZW4sIGZ1bmN0aW9uKGNvbHVtbiwgaSkge1xuICAgICAgaWYgKGkgPT09IGNvbEluZGV4KSB7XG4gICAgICAgIGZpZWxkTmFtZSA9IGNvbHVtbi5wcm9wcy5kYXRhRmllbGQ7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChiZWZvcmVTYXZlQ2VsbCkge1xuICAgICAgY29uc3QgaXNWYWxpZCA9IGJlZm9yZVNhdmVDZWxsKHRoaXMuc3RhdGUuZGF0YVtyb3dJbmRleF0sIGZpZWxkTmFtZSwgbmV3VmFsKTtcbiAgICAgIGlmICghaXNWYWxpZCAmJiB0eXBlb2YgaXNWYWxpZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgZGF0YTogdGhpcy5zdG9yZS5nZXQoKVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc3RvcmUuZWRpdChuZXdWYWwsIHJvd0luZGV4LCBmaWVsZE5hbWUpLmdldCgpO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZGF0YTogcmVzdWx0XG4gICAgfSk7XG5cbiAgICBpZiAoYWZ0ZXJTYXZlQ2VsbCkge1xuICAgICAgYWZ0ZXJTYXZlQ2VsbCh0aGlzLnN0YXRlLmRhdGFbcm93SW5kZXhdLCBmaWVsZE5hbWUsIG5ld1ZhbCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlQWRkUm93QXRCZWdpbihuZXdPYmopIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5zdG9yZS5hZGRBdEJlZ2luKG5ld09iaik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGU7XG4gICAgfVxuICAgIHRoaXMuX2hhbmRsZUFmdGVyQWRkaW5nUm93KG5ld09iaik7XG4gIH1cblxuICBoYW5kbGVBZGRSb3cgPSBuZXdPYmogPT4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnN0b3JlLmFkZChuZXdPYmopO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBlO1xuICAgIH1cbiAgICB0aGlzLl9oYW5kbGVBZnRlckFkZGluZ1JvdyhuZXdPYmopO1xuICB9XG5cbiAgZ2V0U2l6ZVBlclBhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuc2l6ZVBlclBhZ2U7XG4gIH1cblxuICBnZXRDdXJyZW50UGFnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5jdXJyUGFnZTtcbiAgfVxuXG4gIGhhbmRsZURyb3BSb3cgPSByb3dLZXlzID0+IHtcbiAgICBjb25zdCBkcm9wUm93S2V5cyA9IHJvd0tleXMgPyByb3dLZXlzIDogdGhpcy5zdG9yZS5nZXRTZWxlY3RlZFJvd0tleXMoKTtcbiAgICAvLyBhZGQgY29uZmlybSBiZWZvcmUgdGhlIGRlbGV0ZSBhY3Rpb24gaWYgdGhhdCBvcHRpb24gaXMgc2V0LlxuICAgIGlmIChkcm9wUm93S2V5cyAmJiBkcm9wUm93S2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy5vcHRpb25zLmhhbmRsZUNvbmZpcm1EZWxldGVSb3cpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vcHRpb25zLmhhbmRsZUNvbmZpcm1EZWxldGVSb3coKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGVsZXRlUm93KGRyb3BSb3dLZXlzKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGNvbmZpcm0oJ0FyZSB5b3Ugc3VyZSB3YW50IGRlbGV0ZT8nKSkge1xuICAgICAgICB0aGlzLmRlbGV0ZVJvdyhkcm9wUm93S2V5cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZGVsZXRlUm93KGRyb3BSb3dLZXlzKSB7XG4gICAgbGV0IHJlc3VsdDtcbiAgICB0aGlzLnN0b3JlLnJlbW92ZShkcm9wUm93S2V5cyk7ICAvLyByZW1vdmUgc2VsZWN0ZWQgUm93XG4gICAgdGhpcy5zdG9yZS5zZXRTZWxlY3RlZFJvd0tleShbXSk7ICAvLyBjbGVhciBzZWxlY3RlZCByb3cga2V5XG5cbiAgICBpZiAodGhpcy5wcm9wcy5wYWdpbmF0aW9uKSB7XG4gICAgICBjb25zdCB7IHNpemVQZXJQYWdlIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgY29uc3QgY3Vyckxhc3RQYWdlID0gTWF0aC5jZWlsKHRoaXMuc3RvcmUuZ2V0RGF0YU51bSgpIC8gc2l6ZVBlclBhZ2UpO1xuICAgICAgbGV0IHsgY3VyclBhZ2UgfSA9IHRoaXMuc3RhdGU7XG4gICAgICBpZiAoY3VyclBhZ2UgPiBjdXJyTGFzdFBhZ2UpIGN1cnJQYWdlID0gY3Vyckxhc3RQYWdlO1xuICAgICAgcmVzdWx0ID0gdGhpcy5zdG9yZS5wYWdlKGN1cnJQYWdlLCBzaXplUGVyUGFnZSkuZ2V0KCk7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZGF0YTogcmVzdWx0LFxuICAgICAgICBzZWxlY3RlZFJvd0tleXM6IHRoaXMuc3RvcmUuZ2V0U2VsZWN0ZWRSb3dLZXlzKCksXG4gICAgICAgIGN1cnJQYWdlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gdGhpcy5zdG9yZS5nZXQoKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBkYXRhOiByZXN1bHQsXG4gICAgICAgIHNlbGVjdGVkUm93S2V5czogdGhpcy5zdG9yZS5nZXRTZWxlY3RlZFJvd0tleXMoKVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzLm9wdGlvbnMuYWZ0ZXJEZWxldGVSb3cpIHtcbiAgICAgIHRoaXMucHJvcHMub3B0aW9ucy5hZnRlckRlbGV0ZVJvdyhkcm9wUm93S2V5cyk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlRmlsdGVyRGF0YSA9IGZpbHRlck9iaiA9PiB7XG4gICAgdGhpcy5zdG9yZS5maWx0ZXIoZmlsdGVyT2JqKTtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGlmICh0aGlzLnByb3BzLnBhZ2luYXRpb24pIHtcbiAgICAgIGNvbnN0IHsgc2l6ZVBlclBhZ2UgfSA9IHRoaXMuc3RhdGU7XG4gICAgICByZXN1bHQgPSB0aGlzLnN0b3JlLnBhZ2UoMSwgc2l6ZVBlclBhZ2UpLmdldCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSB0aGlzLnN0b3JlLmdldCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5wcm9wcy5vcHRpb25zLmFmdGVyQ29sdW1uRmlsdGVyKSB7XG4gICAgICB0aGlzLnByb3BzLm9wdGlvbnMuYWZ0ZXJDb2x1bW5GaWx0ZXIoZmlsdGVyT2JqLFxuICAgICAgICB0aGlzLnN0b3JlLmdldERhdGFJZ25vcmluZ1BhZ2luYXRpb24oKSk7XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZGF0YTogcmVzdWx0LFxuICAgICAgY3VyclBhZ2U6IDFcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZUV4cG9ydENTViA9ICgpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnN0b3JlLmdldERhdGFJZ25vcmluZ1BhZ2luYXRpb24oKTtcbiAgICBjb25zdCBrZXlzID0gW107XG4gICAgdGhpcy5wcm9wcy5jaGlsZHJlbi5tYXAoZnVuY3Rpb24oY29sdW1uKSB7XG4gICAgICBpZiAoY29sdW1uLnByb3BzLmhpZGRlbiA9PT0gZmFsc2UpIHtcbiAgICAgICAga2V5cy5wdXNoKGNvbHVtbi5wcm9wcy5kYXRhRmllbGQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGV4cG9ydENTVihyZXN1bHQsIGtleXMsIHRoaXMucHJvcHMuY3N2RmlsZU5hbWUpO1xuICB9XG5cbiAgaGFuZGxlU2VhcmNoID0gc2VhcmNoVGV4dCA9PiB7XG4gICAgdGhpcy5zdG9yZS5zZWFyY2goc2VhcmNoVGV4dCk7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAodGhpcy5wcm9wcy5wYWdpbmF0aW9uKSB7XG4gICAgICBjb25zdCB7IHNpemVQZXJQYWdlIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgcmVzdWx0ID0gdGhpcy5zdG9yZS5wYWdlKDEsIHNpemVQZXJQYWdlKS5nZXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gdGhpcy5zdG9yZS5nZXQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvcHMub3B0aW9ucy5hZnRlclNlYXJjaCkge1xuICAgICAgdGhpcy5wcm9wcy5vcHRpb25zLmFmdGVyU2VhcmNoKHNlYXJjaFRleHQsXG4gICAgICAgIHRoaXMuc3RvcmUuZ2V0RGF0YUlnbm9yaW5nUGFnaW5hdGlvbigpKTtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBkYXRhOiByZXN1bHQsXG4gICAgICBjdXJyUGFnZTogMVxuICAgIH0pO1xuICB9XG5cbiAgcmVuZGVyUGFnaW5hdGlvbigpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5wYWdpbmF0aW9uKSB7XG4gICAgICBsZXQgZGF0YVNpemU7XG4gICAgICBpZiAodGhpcy5pc1JlbW90ZURhdGFTb3VyY2UoKSkge1xuICAgICAgICBkYXRhU2l6ZSA9IHRoaXMucHJvcHMuZmV0Y2hJbmZvLmRhdGFUb3RhbFNpemU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhU2l6ZSA9IHRoaXMuc3RvcmUuZ2V0RGF0YU51bSgpO1xuICAgICAgfVxuICAgICAgY29uc3QgeyBvcHRpb25zIH0gPSB0aGlzLnByb3BzO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9J3JlYWN0LWJzLXRhYmxlLXBhZ2luYXRpb24nPlxuICAgICAgICAgIDxQYWdpbmF0aW9uTGlzdFxuICAgICAgICAgICAgcmVmPSdwYWdpbmF0aW9uJ1xuICAgICAgICAgICAgY3VyclBhZ2U9eyB0aGlzLnN0YXRlLmN1cnJQYWdlIH1cbiAgICAgICAgICAgIGNoYW5nZVBhZ2U9eyB0aGlzLmhhbmRsZVBhZ2luYXRpb25EYXRhIH1cbiAgICAgICAgICAgIHNpemVQZXJQYWdlPXsgdGhpcy5zdGF0ZS5zaXplUGVyUGFnZSB9XG4gICAgICAgICAgICBzaXplUGVyUGFnZUxpc3Q9eyBvcHRpb25zLnNpemVQZXJQYWdlTGlzdCB8fCBDb25zdC5TSVpFX1BFUl9QQUdFX0xJU1QgfVxuICAgICAgICAgICAgcGFnaW5hdGlvblNpemU9eyBvcHRpb25zLnBhZ2luYXRpb25TaXplIHx8IENvbnN0LlBBR0lOQVRJT05fU0laRSB9XG4gICAgICAgICAgICByZW1vdGU9eyB0aGlzLmlzUmVtb3RlRGF0YVNvdXJjZSgpIH1cbiAgICAgICAgICAgIGRhdGFTaXplPXsgZGF0YVNpemUgfVxuICAgICAgICAgICAgb25TaXplUGVyUGFnZUxpc3Q9eyBvcHRpb25zLm9uU2l6ZVBlclBhZ2VMaXN0IH1cbiAgICAgICAgICAgIHByZVBhZ2U9eyBvcHRpb25zLnByZVBhZ2UgfHwgQ29uc3QuUFJFX1BBR0UgfVxuICAgICAgICAgICAgbmV4dFBhZ2U9eyBvcHRpb25zLm5leHRQYWdlIHx8IENvbnN0Lk5FWFRfUEFHRSB9XG4gICAgICAgICAgICBmaXJzdFBhZ2U9eyBvcHRpb25zLmZpcnN0UGFnZSB8fCBDb25zdC5GSVJTVF9QQUdFIH1cbiAgICAgICAgICAgIGxhc3RQYWdlPXsgb3B0aW9ucy5sYXN0UGFnZSB8fCBDb25zdC5MQVNUX1BBR0UgfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmVuZGVyVG9vbEJhcigpIHtcbiAgICBjb25zdCB7IHNlbGVjdFJvdywgaW5zZXJ0Um93LCBkZWxldGVSb3csIHNlYXJjaCwgY2hpbGRyZW4gfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgZW5hYmxlU2hvd09ubHlTZWxlY3RlZCA9IHNlbGVjdFJvdyAmJiBzZWxlY3RSb3cuc2hvd09ubHlTZWxlY3RlZDtcbiAgICBpZiAoZW5hYmxlU2hvd09ubHlTZWxlY3RlZFxuICAgICAgICB8fCBpbnNlcnRSb3dcbiAgICAgICAgfHwgZGVsZXRlUm93XG4gICAgICAgIHx8IHNlYXJjaFxuICAgICAgICB8fCB0aGlzLnByb3BzLmV4cG9ydENTVikge1xuICAgICAgbGV0IGNvbHVtbnM7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgY29sdW1ucyA9IGNoaWxkcmVuLm1hcChmdW5jdGlvbihjb2x1bW4pIHtcbiAgICAgICAgICBjb25zdCB7IHByb3BzIH0gPSBjb2x1bW47XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IHByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgICAgZmllbGQ6IHByb3BzLmRhdGFGaWVsZCxcbiAgICAgICAgICAgIC8vIHdoZW4geW91IHdhbnQgc2FtZSBhdXRvIGdlbmVyYXRlIHZhbHVlIGFuZCBub3QgYWxsb3cgZWRpdCwgZXhhbXBsZSBJRCBmaWVsZFxuICAgICAgICAgICAgYXV0b1ZhbHVlOiBwcm9wcy5hdXRvVmFsdWUgfHwgZmFsc2UsXG4gICAgICAgICAgICAvLyBmb3IgY3JlYXRlIGVkaXRvciwgbm8gcGFyYW1zIGZvciBjb2x1bW4uZWRpdGFibGUoKSBpbmRpY2F0ZSB0aGF0IGVkaXRvciBmb3IgbmV3IHJvd1xuICAgICAgICAgICAgZWRpdGFibGU6IHByb3BzLmVkaXRhYmxlICYmICh0eXBlb2YgcHJvcHMuZWRpdGFibGUgPT09ICdmdW5jdGlvbicpID8gcHJvcHMuZWRpdGFibGUoKSA6IHByb3BzLmVkaXRhYmxlLFxuICAgICAgICAgICAgZm9ybWF0OiBwcm9wcy5kYXRhRm9ybWF0ID8gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLmRhdGFGb3JtYXQodmFsdWUsIG51bGwsIHByb3BzLmZvcm1hdEV4dHJhRGF0YSkucmVwbGFjZSgvPC4qPz4vZywgJycpO1xuICAgICAgICAgICAgfSA6IGZhbHNlXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2x1bW5zID0gWyB7XG4gICAgICAgICAgbmFtZTogY2hpbGRyZW4ucHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgZmllbGQ6IGNoaWxkcmVuLnByb3BzLmRhdGFGaWVsZCxcbiAgICAgICAgICBlZGl0YWJsZTogY2hpbGRyZW4ucHJvcHMuZWRpdGFibGVcbiAgICAgICAgfSBdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9J3JlYWN0LWJzLXRhYmxlLXRvb2wtYmFyJz5cbiAgICAgICAgICA8VG9vbEJhclxuICAgICAgICAgICAgY2xlYXJTZWFyY2g9eyB0aGlzLnByb3BzLm9wdGlvbnMuY2xlYXJTZWFyY2ggfVxuICAgICAgICAgICAgZW5hYmxlSW5zZXJ0PXsgaW5zZXJ0Um93IH1cbiAgICAgICAgICAgIGVuYWJsZURlbGV0ZT17IGRlbGV0ZVJvdyB9XG4gICAgICAgICAgICBlbmFibGVTZWFyY2g9eyBzZWFyY2ggfVxuICAgICAgICAgICAgZW5hYmxlRXhwb3J0Q1NWPXsgdGhpcy5wcm9wcy5leHBvcnRDU1YgfVxuICAgICAgICAgICAgZW5hYmxlU2hvd09ubHlTZWxlY3RlZD17IGVuYWJsZVNob3dPbmx5U2VsZWN0ZWQgfVxuICAgICAgICAgICAgY29sdW1ucz17IGNvbHVtbnMgfVxuICAgICAgICAgICAgc2VhcmNoUGxhY2Vob2xkZXI9eyB0aGlzLnByb3BzLnNlYXJjaFBsYWNlaG9sZGVyIH1cbiAgICAgICAgICAgIG9uQWRkUm93PXsgdGhpcy5oYW5kbGVBZGRSb3cgfVxuICAgICAgICAgICAgb25Ecm9wUm93PXsgdGhpcy5oYW5kbGVEcm9wUm93IH1cbiAgICAgICAgICAgIG9uU2VhcmNoPXsgdGhpcy5oYW5kbGVTZWFyY2ggfVxuICAgICAgICAgICAgb25FeHBvcnRDU1Y9eyB0aGlzLmhhbmRsZUV4cG9ydENTViB9XG4gICAgICAgICAgICBvblNob3dPbmx5U2VsZWN0ZWQ9eyB0aGlzLmhhbmRsZVNob3dPbmx5U2VsZWN0ZWQgfS8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyVGFibGVGaWx0ZXIoY29sdW1ucykge1xuICAgIGlmICh0aGlzLnByb3BzLmNvbHVtbkZpbHRlcikge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFRhYmxlRmlsdGVyIGNvbHVtbnM9eyBjb2x1bW5zIH1cbiAgICAgICAgICByb3dTZWxlY3RUeXBlPXsgdGhpcy5wcm9wcy5zZWxlY3RSb3cubW9kZSB9XG4gICAgICAgICAgb25GaWx0ZXI9eyB0aGlzLmhhbmRsZUZpbHRlckRhdGEgfS8+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBfc2Nyb2xsSGVhZGVyID0gKGUpID0+IHtcbiAgICB0aGlzLnJlZnMuaGVhZGVyLnJlZnMuY29udGFpbmVyLnNjcm9sbExlZnQgPSBlLmN1cnJlbnRUYXJnZXQuc2Nyb2xsTGVmdDtcbiAgfVxuXG4gIF9hZGp1c3RUYWJsZSA9ICgpID0+IHtcbiAgICB0aGlzLl9hZGp1c3RIZWFkZXJXaWR0aCgpO1xuICAgIHRoaXMuX2FkanVzdEhlaWdodCgpO1xuICB9XG5cbiAgX2FkanVzdEhlYWRlcldpZHRoID0gKCkgPT4ge1xuICAgIGNvbnN0IGhlYWRlciA9IHRoaXMucmVmcy5oZWFkZXIucmVmcy5oZWFkZXI7XG4gICAgY29uc3QgaGVhZGVyQ29udGFpbmVyID0gdGhpcy5yZWZzLmhlYWRlci5yZWZzLmNvbnRhaW5lcjtcbiAgICBjb25zdCB0Ym9keSA9IHRoaXMucmVmcy5ib2R5LnJlZnMudGJvZHk7XG4gICAgY29uc3QgZmlyc3RSb3cgPSB0Ym9keS5jaGlsZE5vZGVzWzBdO1xuICAgIGNvbnN0IGlzU2Nyb2xsID0gaGVhZGVyQ29udGFpbmVyLm9mZnNldFdpZHRoICE9PSB0Ym9keS5wYXJlbnROb2RlLm9mZnNldFdpZHRoO1xuICAgIGNvbnN0IHNjcm9sbEJhcldpZHRoID0gaXNTY3JvbGwgPyBVdGlsLmdldFNjcm9sbEJhcldpZHRoKCkgOiAwO1xuICAgIGlmIChmaXJzdFJvdyAmJiB0aGlzLnN0b3JlLmdldERhdGFOdW0oKSkge1xuICAgICAgY29uc3QgY2VsbHMgPSBmaXJzdFJvdy5jaGlsZE5vZGVzO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjZWxsID0gY2VsbHNbaV07XG4gICAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGNlbGwpO1xuICAgICAgICBsZXQgd2lkdGggPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUud2lkdGgucmVwbGFjZSgncHgnLCAnJykpO1xuICAgICAgICBpZiAodGhpcy5pc0lFKSB7XG4gICAgICAgICAgY29uc3QgcGFkZGluZ0xlZnRXaWR0aCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5wYWRkaW5nTGVmdC5yZXBsYWNlKCdweCcsICcnKSk7XG4gICAgICAgICAgY29uc3QgcGFkZGluZ1JpZ2h0V2lkdGggPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUucGFkZGluZ1JpZ2h0LnJlcGxhY2UoJ3B4JywgJycpKTtcbiAgICAgICAgICBjb25zdCBib3JkZXJSaWdodFdpZHRoID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmJvcmRlclJpZ2h0V2lkdGgucmVwbGFjZSgncHgnLCAnJykpO1xuICAgICAgICAgIGNvbnN0IGJvcmRlckxlZnRXaWR0aCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5ib3JkZXJMZWZ0V2lkdGgucmVwbGFjZSgncHgnLCAnJykpO1xuICAgICAgICAgIHdpZHRoID0gd2lkdGggKyBwYWRkaW5nTGVmdFdpZHRoICsgcGFkZGluZ1JpZ2h0V2lkdGggKyBib3JkZXJSaWdodFdpZHRoICsgYm9yZGVyTGVmdFdpZHRoO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhc3RQYWRkaW5nID0gKGNlbGxzLmxlbmd0aCAtIDEgPT09IGkgPyBzY3JvbGxCYXJXaWR0aCA6IDApO1xuICAgICAgICBpZiAod2lkdGggPD0gMCkge1xuICAgICAgICAgIHdpZHRoID0gMTIwO1xuICAgICAgICAgIGNlbGwud2lkdGggPSB3aWR0aCArIGxhc3RQYWRkaW5nICsgJ3B4JztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSB3aWR0aCArIGxhc3RQYWRkaW5nICsgJ3B4JztcbiAgICAgICAgaGVhZGVyLmNoaWxkTm9kZXNbaV0uc3R5bGUud2lkdGggPSByZXN1bHQ7XG4gICAgICAgIGhlYWRlci5jaGlsZE5vZGVzW2ldLnN0eWxlLm1pbldpZHRoID0gcmVzdWx0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9hZGp1c3RIZWlnaHQgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMuaGVpZ2h0LmluZGV4T2YoJyUnKSA9PT0gLTEpIHtcbiAgICAgIHRoaXMucmVmcy5ib2R5LnJlZnMuY29udGFpbmVyLnN0eWxlLmhlaWdodCA9XG4gICAgICAgIHBhcnNlRmxvYXQodGhpcy5wcm9wcy5oZWlnaHQsIDEwKSAtIHRoaXMucmVmcy5oZWFkZXIucmVmcy5jb250YWluZXIub2Zmc2V0SGVpZ2h0ICsgJ3B4JztcbiAgICB9XG4gIH1cblxuICBfaGFuZGxlQWZ0ZXJBZGRpbmdSb3cobmV3T2JqKSB7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAodGhpcy5wcm9wcy5wYWdpbmF0aW9uKSB7XG4gICAgICAvLyBpZiBwYWdpbmF0aW9uIGlzIGVuYWJsZWQgYW5kIGluc2VydCByb3cgYmUgdHJpZ2dlciwgY2hhbmdlIHRvIGxhc3QgcGFnZVxuICAgICAgY29uc3QgeyBzaXplUGVyUGFnZSB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgIGNvbnN0IGN1cnJMYXN0UGFnZSA9IE1hdGguY2VpbCh0aGlzLnN0b3JlLmdldERhdGFOdW0oKSAvIHNpemVQZXJQYWdlKTtcbiAgICAgIHJlc3VsdCA9IHRoaXMuc3RvcmUucGFnZShjdXJyTGFzdFBhZ2UsIHNpemVQZXJQYWdlKS5nZXQoKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBkYXRhOiByZXN1bHQsXG4gICAgICAgIGN1cnJQYWdlOiBjdXJyTGFzdFBhZ2VcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSB0aGlzLnN0b3JlLmdldCgpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGRhdGE6IHJlc3VsdFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMub3B0aW9ucy5hZnRlckluc2VydFJvdykge1xuICAgICAgdGhpcy5wcm9wcy5vcHRpb25zLmFmdGVySW5zZXJ0Um93KG5ld09iaik7XG4gICAgfVxuICB9XG59XG5cbkJvb3RzdHJhcFRhYmxlLnByb3BUeXBlcyA9IHtcbiAga2V5RmllbGQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGhlaWdodDogUHJvcFR5cGVzLnN0cmluZyxcbiAgbWF4SGVpZ2h0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBkYXRhOiBQcm9wVHlwZXMub25lT2ZUeXBlKFsgUHJvcFR5cGVzLmFycmF5LCBQcm9wVHlwZXMub2JqZWN0IF0pLFxuICByZW1vdGU6IFByb3BUeXBlcy5ib29sLCAvLyByZW1vdGUgZGF0YSwgZGVmYXVsdCBpcyBmYWxzZVxuICBzdHJpcGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgYm9yZGVyZWQ6IFByb3BUeXBlcy5ib29sLFxuICBob3ZlcjogUHJvcFR5cGVzLmJvb2wsXG4gIGNvbmRlbnNlZDogUHJvcFR5cGVzLmJvb2wsXG4gIHBhZ2luYXRpb246IFByb3BUeXBlcy5ib29sLFxuICBzZWFyY2hQbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2VsZWN0Um93OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIG1vZGU6IFByb3BUeXBlcy5vbmVPZihbXG4gICAgICBDb25zdC5ST1dfU0VMRUNUX05PTkUsXG4gICAgICBDb25zdC5ST1dfU0VMRUNUX1NJTkdMRSxcbiAgICAgIENvbnN0LlJPV19TRUxFQ1RfTVVMVElcbiAgICBdKSxcbiAgICBiZ0NvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNlbGVjdGVkOiBQcm9wVHlwZXMuYXJyYXksXG4gICAgb25TZWxlY3Q6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uU2VsZWN0QWxsOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBjbGlja1RvU2VsZWN0OiBQcm9wVHlwZXMuYm9vbCxcbiAgICBoaWRlU2VsZWN0Q29sdW1uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBjbGlja1RvU2VsZWN0QW5kRWRpdENlbGw6IFByb3BUeXBlcy5ib29sLFxuICAgIHNob3dPbmx5U2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sXG4gIH0pLFxuICBjZWxsRWRpdDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBtb2RlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGJsdXJUb1NhdmU6IFByb3BUeXBlcy5ib29sLFxuICAgIGJlZm9yZVNhdmVDZWxsOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBhZnRlclNhdmVDZWxsOiBQcm9wVHlwZXMuZnVuY1xuICB9KSxcbiAgaW5zZXJ0Um93OiBQcm9wVHlwZXMuYm9vbCxcbiAgZGVsZXRlUm93OiBQcm9wVHlwZXMuYm9vbCxcbiAgc2VhcmNoOiBQcm9wVHlwZXMuYm9vbCxcbiAgY29sdW1uRmlsdGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgdHJDbGFzc05hbWU6IFByb3BUeXBlcy5hbnksXG4gIG9wdGlvbnM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xlYXJTZWFyY2g6IFByb3BUeXBlcy5ib29sLFxuICAgIHNvcnROYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNvcnRPcmRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzb3J0SW5kaWNhdG9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBhZnRlclRhYmxlQ29tcGxldGU6IFByb3BUeXBlcy5mdW5jLFxuICAgIGFmdGVyRGVsZXRlUm93OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBhZnRlckluc2VydFJvdzogUHJvcFR5cGVzLmZ1bmMsXG4gICAgYWZ0ZXJTZWFyY2g6IFByb3BUeXBlcy5mdW5jLFxuICAgIGFmdGVyQ29sdW1uRmlsdGVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvblJvd0NsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBwYWdlOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIHNpemVQZXJQYWdlTGlzdDogUHJvcFR5cGVzLmFycmF5LFxuICAgIHNpemVQZXJQYWdlOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIHBhZ2luYXRpb25TaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIG9uU29ydENoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25QYWdlQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvblNpemVQZXJQYWdlTGlzdDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgbm9EYXRhVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBoYW5kbGVDb25maXJtRGVsZXRlUm93OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBwcmVQYWdlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG5leHRQYWdlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGZpcnN0UGFnZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBsYXN0UGFnZTogUHJvcFR5cGVzLnN0cmluZ1xuICB9KSxcbiAgZmV0Y2hJbmZvOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGRhdGFUb3RhbFNpemU6IFByb3BUeXBlcy5udW1iZXJcbiAgfSksXG4gIGV4cG9ydENTVjogUHJvcFR5cGVzLmJvb2wsXG4gIGNzdkZpbGVOYW1lOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuQm9vdHN0cmFwVGFibGUuZGVmYXVsdFByb3BzID0ge1xuICBoZWlnaHQ6ICcxMDAlJyxcbiAgbWF4SGVpZ2h0OiB1bmRlZmluZWQsXG4gIHN0cmlwZWQ6IGZhbHNlLFxuICBib3JkZXJlZDogdHJ1ZSxcbiAgaG92ZXI6IGZhbHNlLFxuICBjb25kZW5zZWQ6IGZhbHNlLFxuICBwYWdpbmF0aW9uOiBmYWxzZSxcbiAgc2VhcmNoUGxhY2Vob2xkZXI6IHVuZGVmaW5lZCxcbiAgc2VsZWN0Um93OiB7XG4gICAgbW9kZTogQ29uc3QuUk9XX1NFTEVDVF9OT05FLFxuICAgIGJnQ29sb3I6IENvbnN0LlJPV19TRUxFQ1RfQkdfQ09MT1IsXG4gICAgc2VsZWN0ZWQ6IFtdLFxuICAgIG9uU2VsZWN0OiB1bmRlZmluZWQsXG4gICAgb25TZWxlY3RBbGw6IHVuZGVmaW5lZCxcbiAgICBjbGlja1RvU2VsZWN0OiBmYWxzZSxcbiAgICBoaWRlU2VsZWN0Q29sdW1uOiBmYWxzZSxcbiAgICBjbGlja1RvU2VsZWN0QW5kRWRpdENlbGw6IGZhbHNlLFxuICAgIHNob3dPbmx5U2VsZWN0ZWQ6IGZhbHNlXG4gIH0sXG4gIGNlbGxFZGl0OiB7XG4gICAgbW9kZTogQ29uc3QuQ0VMTF9FRElUX05PTkUsXG4gICAgYmx1clRvU2F2ZTogZmFsc2UsXG4gICAgYmVmb3JlU2F2ZUNlbGw6IHVuZGVmaW5lZCxcbiAgICBhZnRlclNhdmVDZWxsOiB1bmRlZmluZWRcbiAgfSxcbiAgaW5zZXJ0Um93OiBmYWxzZSxcbiAgZGVsZXRlUm93OiBmYWxzZSxcbiAgc2VhcmNoOiBmYWxzZSxcbiAgbXVsdGlDb2x1bW5TZWFyY2g6IGZhbHNlLFxuICBjb2x1bW5GaWx0ZXI6IGZhbHNlLFxuICB0ckNsYXNzTmFtZTogJycsXG4gIG9wdGlvbnM6IHtcbiAgICBjbGVhclNlYXJjaDogZmFsc2UsXG4gICAgc29ydE5hbWU6IHVuZGVmaW5lZCxcbiAgICBzb3J0T3JkZXI6IHVuZGVmaW5lZCxcbiAgICBzb3J0SW5kaWNhdG9yOiB0cnVlLFxuICAgIGFmdGVyVGFibGVDb21wbGV0ZTogdW5kZWZpbmVkLFxuICAgIGFmdGVyRGVsZXRlUm93OiB1bmRlZmluZWQsXG4gICAgYWZ0ZXJJbnNlcnRSb3c6IHVuZGVmaW5lZCxcbiAgICBhZnRlclNlYXJjaDogdW5kZWZpbmVkLFxuICAgIGFmdGVyQ29sdW1uRmlsdGVyOiB1bmRlZmluZWQsXG4gICAgb25Sb3dDbGljazogdW5kZWZpbmVkLFxuICAgIG9uTW91c2VMZWF2ZTogdW5kZWZpbmVkLFxuICAgIG9uTW91c2VFbnRlcjogdW5kZWZpbmVkLFxuICAgIG9uUm93TW91c2VPdXQ6IHVuZGVmaW5lZCxcbiAgICBvblJvd01vdXNlT3ZlcjogdW5kZWZpbmVkLFxuICAgIHBhZ2U6IHVuZGVmaW5lZCxcbiAgICBzaXplUGVyUGFnZUxpc3Q6IENvbnN0LlNJWkVfUEVSX1BBR0VfTElTVCxcbiAgICBzaXplUGVyUGFnZTogdW5kZWZpbmVkLFxuICAgIHBhZ2luYXRpb25TaXplOiBDb25zdC5QQUdJTkFUSU9OX1NJWkUsXG4gICAgb25TaXplUGVyUGFnZUxpc3Q6IHVuZGVmaW5lZCxcbiAgICBub0RhdGFUZXh0OiB1bmRlZmluZWQsXG4gICAgaGFuZGxlQ29uZmlybURlbGV0ZVJvdzogdW5kZWZpbmVkLFxuICAgIHByZVBhZ2U6IENvbnN0LlBSRV9QQUdFLFxuICAgIG5leHRQYWdlOiBDb25zdC5ORVhUX1BBR0UsXG4gICAgZmlyc3RQYWdlOiBDb25zdC5GSVJTVF9QQUdFLFxuICAgIGxhc3RQYWdlOiBDb25zdC5MQVNUX1BBR0VcbiAgfSxcbiAgZmV0Y2hJbmZvOiB7XG4gICAgZGF0YVRvdGFsU2l6ZTogMFxuICB9LFxuICBleHBvcnRDU1Y6IGZhbHNlLFxuICBjc3ZGaWxlTmFtZTogdW5kZWZpbmVkXG59O1xuXG5leHBvcnQgZGVmYXVsdCBCb290c3RyYXBUYWJsZTtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL0Jvb3RzdHJhcFRhYmxlLmpzXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ=="); -},function(module,exports){eval("module.exports = __WEBPACK_EXTERNAL_MODULE_2__;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1wicm9vdFwiOlwiUmVhY3RcIixcImNvbW1vbmpzMlwiOlwicmVhY3RcIixcImNvbW1vbmpzXCI6XCJyZWFjdFwiLFwiYW1kXCI6XCJyZWFjdFwifT9jMDJmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwiZmlsZSI6IjIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMl9fO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogZXh0ZXJuYWwge1wicm9vdFwiOlwiUmVhY3RcIixcImNvbW1vbmpzMlwiOlwicmVhY3RcIixcImNvbW1vbmpzXCI6XCJyZWFjdFwiLFwiYW1kXCI6XCJyZWFjdFwifVxuICoqIG1vZHVsZSBpZCA9IDJcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports['default'] = {\n SORT_DESC: 'desc',\n SORT_ASC: 'asc',\n SIZE_PER_PAGE: 10,\n NEXT_PAGE: '>',\n LAST_PAGE: '>>',\n PRE_PAGE: '<',\n FIRST_PAGE: '<<',\n ROW_SELECT_BG_COLOR: '',\n ROW_SELECT_NONE: 'none',\n ROW_SELECT_SINGLE: 'radio',\n ROW_SELECT_MULTI: 'checkbox',\n CELL_EDIT_NONE: 'none',\n CELL_EDIT_CLICK: 'click',\n CELL_EDIT_DBCLICK: 'dbclick',\n SIZE_PER_PAGE_LIST: [10, 25, 30, 50],\n PAGINATION_SIZE: 5,\n NO_DATA_TEXT: 'There is no data to display',\n SHOW_ONLY_SELECT: 'Show Selected Only',\n SHOW_ALL: 'Show All',\n FILTER_DELAY: 500,\n FILTER_TYPE: {\n TEXT: 'TextFilter',\n REGEX: 'RegexFilter',\n SELECT: 'SelectFilter',\n NUMBER: 'NumberFilter',\n DATE: 'DateFilter',\n CUSTOM: 'CustomFilter'\n }\n};\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvQ29uc3QuanM/MjQ1YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztxQkFBZTtBQUNiLFdBQVMsRUFBRSxNQUFNO0FBQ2pCLFVBQVEsRUFBRSxLQUFLO0FBQ2YsZUFBYSxFQUFFLEVBQUU7QUFDakIsV0FBUyxFQUFFLEdBQUc7QUFDZCxXQUFTLEVBQUUsSUFBSTtBQUNmLFVBQVEsRUFBRSxHQUFHO0FBQ2IsWUFBVSxFQUFFLElBQUk7QUFDaEIscUJBQW1CLEVBQUUsRUFBRTtBQUN2QixpQkFBZSxFQUFFLE1BQU07QUFDdkIsbUJBQWlCLEVBQUUsT0FBTztBQUMxQixrQkFBZ0IsRUFBRSxVQUFVO0FBQzVCLGdCQUFjLEVBQUUsTUFBTTtBQUN0QixpQkFBZSxFQUFFLE9BQU87QUFDeEIsbUJBQWlCLEVBQUUsU0FBUztBQUM1QixvQkFBa0IsRUFBRSxDQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBRTtBQUN0QyxpQkFBZSxFQUFFLENBQUM7QUFDbEIsY0FBWSxFQUFFLDZCQUE2QjtBQUMzQyxrQkFBZ0IsRUFBRSxvQkFBb0I7QUFDdEMsVUFBUSxFQUFFLFVBQVU7QUFDcEIsY0FBWSxFQUFFLEdBQUc7QUFDakIsYUFBVyxFQUFFO0FBQ1gsUUFBSSxFQUFFLFlBQVk7QUFDbEIsU0FBSyxFQUFFLGFBQWE7QUFDcEIsVUFBTSxFQUFFLGNBQWM7QUFDdEIsVUFBTSxFQUFFLGNBQWM7QUFDdEIsUUFBSSxFQUFFLFlBQVk7QUFDbEIsVUFBTSxFQUFFLGNBQWM7R0FDdkI7Q0FDRiIsImZpbGUiOiIzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQge1xuICBTT1JUX0RFU0M6ICdkZXNjJyxcbiAgU09SVF9BU0M6ICdhc2MnLFxuICBTSVpFX1BFUl9QQUdFOiAxMCxcbiAgTkVYVF9QQUdFOiAnPicsXG4gIExBU1RfUEFHRTogJz4+JyxcbiAgUFJFX1BBR0U6ICc8JyxcbiAgRklSU1RfUEFHRTogJzw8JyxcbiAgUk9XX1NFTEVDVF9CR19DT0xPUjogJycsXG4gIFJPV19TRUxFQ1RfTk9ORTogJ25vbmUnLFxuICBST1dfU0VMRUNUX1NJTkdMRTogJ3JhZGlvJyxcbiAgUk9XX1NFTEVDVF9NVUxUSTogJ2NoZWNrYm94JyxcbiAgQ0VMTF9FRElUX05PTkU6ICdub25lJyxcbiAgQ0VMTF9FRElUX0NMSUNLOiAnY2xpY2snLFxuICBDRUxMX0VESVRfREJDTElDSzogJ2RiY2xpY2snLFxuICBTSVpFX1BFUl9QQUdFX0xJU1Q6IFsgMTAsIDI1LCAzMCwgNTAgXSxcbiAgUEFHSU5BVElPTl9TSVpFOiA1LFxuICBOT19EQVRBX1RFWFQ6ICdUaGVyZSBpcyBubyBkYXRhIHRvIGRpc3BsYXknLFxuICBTSE9XX09OTFlfU0VMRUNUOiAnU2hvdyBTZWxlY3RlZCBPbmx5JyxcbiAgU0hPV19BTEw6ICdTaG93IEFsbCcsXG4gIEZJTFRFUl9ERUxBWTogNTAwLFxuICBGSUxURVJfVFlQRToge1xuICAgIFRFWFQ6ICdUZXh0RmlsdGVyJyxcbiAgICBSRUdFWDogJ1JlZ2V4RmlsdGVyJyxcbiAgICBTRUxFQ1Q6ICdTZWxlY3RGaWx0ZXInLFxuICAgIE5VTUJFUjogJ051bWJlckZpbHRlcicsXG4gICAgREFURTogJ0RhdGVGaWx0ZXInLFxuICAgIENVU1RPTTogJ0N1c3RvbUZpbHRlcidcbiAgfVxufTtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL0NvbnN0LmpzXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = __webpack_require__(5);\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _Const = __webpack_require__(3);\n\nvar _Const2 = _interopRequireDefault(_Const);\n\nvar _classnames = __webpack_require__(6);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _SelectRowHeaderColumn = __webpack_require__(7);\n\nvar _SelectRowHeaderColumn2 = _interopRequireDefault(_SelectRowHeaderColumn);\n\nvar Checkbox = (function (_Component) {\n _inherits(Checkbox, _Component);\n\n function Checkbox() {\n _classCallCheck(this, Checkbox);\n\n _get(Object.getPrototypeOf(Checkbox.prototype), 'constructor', this).apply(this, arguments);\n }\n\n _createClass(Checkbox, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.update(this.props.checked);\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(props) {\n this.update(props.checked);\n }\n }, {\n key: 'update',\n value: function update(checked) {\n _reactDom2['default'].findDOMNode(this).indeterminate = checked === 'indeterminate';\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2['default'].createElement('input', { className: 'react-bs-select-all',\n type: 'checkbox',\n checked: this.props.checked,\n onChange: this.props.onChange });\n }\n }]);\n\n return Checkbox;\n})(_react.Component);\n\nvar TableHeader = (function (_Component2) {\n _inherits(TableHeader, _Component2);\n\n function TableHeader() {\n _classCallCheck(this, TableHeader);\n\n _get(Object.getPrototypeOf(TableHeader.prototype), 'constructor', this).apply(this, arguments);\n }\n\n _createClass(TableHeader, [{\n key: 'render',\n value: function render() {\n var containerClasses = (0, _classnames2['default'])('react-bs-container-header', 'table-header-wrapper');\n var tableClasses = (0, _classnames2['default'])('table', 'table-hover', {\n 'table-bordered': this.props.bordered,\n 'table-condensed': this.props.condensed\n });\n var selectRowHeaderCol = null;\n if (!this.props.hideSelectColumn) selectRowHeaderCol = this.renderSelectRowHeader();\n this._attachClearSortCaretFunc();\n\n return _react2['default'].createElement(\n 'div',\n { ref: 'container', className: containerClasses },\n _react2['default'].createElement(\n 'table',\n { className: tableClasses },\n _react2['default'].createElement(\n 'thead',\n null,\n _react2['default'].createElement(\n 'tr',\n { ref: 'header' },\n selectRowHeaderCol,\n this.props.children\n )\n )\n )\n );\n }\n }, {\n key: 'renderSelectRowHeader',\n value: function renderSelectRowHeader() {\n if (this.props.rowSelectType === _Const2['default'].ROW_SELECT_SINGLE) {\n return _react2['default'].createElement(_SelectRowHeaderColumn2['default'], null);\n } else if (this.props.rowSelectType === _Const2['default'].ROW_SELECT_MULTI) {\n return _react2['default'].createElement(\n _SelectRowHeaderColumn2['default'],\n null,\n _react2['default'].createElement(Checkbox, {\n onChange: this.props.onSelectAllRow,\n checked: this.props.isSelectAll })\n );\n } else {\n return null;\n }\n }\n }, {\n key: '_attachClearSortCaretFunc',\n value: function _attachClearSortCaretFunc() {\n var _props = this.props;\n var sortIndicator = _props.sortIndicator;\n var children = _props.children;\n var sortName = _props.sortName;\n var sortOrder = _props.sortOrder;\n var onSort = _props.onSort;\n\n if (Array.isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n var field = children[i].props.dataField;\n var sort = field === sortName ? sortOrder : undefined;\n this.props.children[i] = _react2['default'].cloneElement(children[i], { key: i, onSort: onSort, sort: sort, sortIndicator: sortIndicator });\n }\n } else {\n var field = children.props.dataField;\n var sort = field === sortName ? sortOrder : undefined;\n this.props.children = _react2['default'].cloneElement(children, { key: 0, onSort: onSort, sort: sort, sortIndicator: sortIndicator });\n }\n }\n }]);\n\n return TableHeader;\n})(_react.Component);\n\nTableHeader.propTypes = {\n rowSelectType: _react.PropTypes.string,\n onSort: _react.PropTypes.func,\n onSelectAllRow: _react.PropTypes.func,\n sortName: _react.PropTypes.string,\n sortOrder: _react.PropTypes.string,\n hideSelectColumn: _react.PropTypes.bool,\n bordered: _react.PropTypes.bool,\n condensed: _react.PropTypes.bool,\n isFiltered: _react.PropTypes.bool,\n isSelectAll: _react.PropTypes.oneOf([true, 'indeterminate', false]),\n sortIndicator: _react.PropTypes.bool\n};\n\nexports['default'] = TableHeader;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvVGFibGVIZWFkZXIuanM/Y2RjNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O2lDQUE0QyxDQUFPOzs7O29DQUM5QixDQUFXOzs7O2lDQUNkLENBQVM7Ozs7c0NBQ04sQ0FBWTs7OztpREFDQyxDQUF5Qjs7OztJQUVyRCxRQUFRO1lBQVIsUUFBUTs7V0FBUixRQUFROzBCQUFSLFFBQVE7OytCQUFSLFFBQVE7OztlQUFSLFFBQVE7O1dBQ0ssNkJBQUc7QUFBRSxVQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7S0FBRTs7O1dBQy9CLG1DQUFDLEtBQUssRUFBRTtBQUFFLFVBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQUU7OztXQUMxRCxnQkFBQyxPQUFPLEVBQUU7QUFDZCw0QkFBUyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsYUFBYSxHQUFHLE9BQU8sS0FBSyxlQUFlLENBQUM7S0FDeEU7OztXQUNLLGtCQUFHO0FBQ1AsYUFDRSw0Q0FBTyxTQUFTLEVBQUMscUJBQXFCO0FBQ3BDLFlBQUksRUFBQyxVQUFVO0FBQ2YsZUFBTyxFQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBUztBQUM5QixnQkFBUSxFQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBVSxHQUFHLENBQ3JDO0tBQ0g7OztTQWJHLFFBQVE7OztJQWdCUixXQUFXO1lBQVgsV0FBVzs7V0FBWCxXQUFXOzBCQUFYLFdBQVc7OytCQUFYLFdBQVc7OztlQUFYLFdBQVc7O1dBRVQsa0JBQUc7QUFDUCxVQUFNLGdCQUFnQixHQUFHLDZCQUFTLDJCQUEyQixFQUFFLHNCQUFzQixDQUFDLENBQUM7QUFDdkYsVUFBTSxZQUFZLEdBQUcsNkJBQVMsT0FBTyxFQUFFLGFBQWEsRUFBRTtBQUNwRCx3QkFBZ0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7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LEVBQUUsaUJBQVUsSUFBSTtBQUNoQyxVQUFRLEVBQUUsaUJBQVUsSUFBSTtBQUN4QixXQUFTLEVBQUUsaUJBQVUsSUFBSTtBQUN6QixZQUFVLEVBQUUsaUJBQVUsSUFBSTtBQUMxQixhQUFXLEVBQUUsaUJBQVUsS0FBSyxDQUFDLENBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxLQUFLLENBQUUsQ0FBQztBQUM5RCxlQUFhLEVBQUUsaUJBQVUsSUFBSTtDQUM5QixDQUFDOztxQkFFYSxXQUFXIiwiZmlsZSI6IjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBQcm9wVHlwZXMgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBDb25zdCBmcm9tICcuL0NvbnN0JztcbmltcG9ydCBjbGFzc1NldCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBTZWxlY3RSb3dIZWFkZXJDb2x1bW4gZnJvbSAnLi9TZWxlY3RSb3dIZWFkZXJDb2x1bW4nO1xuXG5jbGFzcyBDaGVja2JveCBleHRlbmRzIENvbXBvbmVudCB7XG4gIGNvbXBvbmVudERpZE1vdW50KCkgeyB0aGlzLnVwZGF0ZSh0aGlzLnByb3BzLmNoZWNrZWQpOyB9XG4gIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMocHJvcHMpIHsgdGhpcy51cGRhdGUocHJvcHMuY2hlY2tlZCk7IH1cbiAgdXBkYXRlKGNoZWNrZWQpIHtcbiAgICBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKS5pbmRldGVybWluYXRlID0gY2hlY2tlZCA9PT0gJ2luZGV0ZXJtaW5hdGUnO1xuICB9XG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGlucHV0IGNsYXNzTmFtZT0ncmVhY3QtYnMtc2VsZWN0LWFsbCdcbiAgICAgICAgdHlwZT0nY2hlY2tib3gnXG4gICAgICAgIGNoZWNrZWQ9eyB0aGlzLnByb3BzLmNoZWNrZWQgfVxuICAgICAgICBvbkNoYW5nZT17IHRoaXMucHJvcHMub25DaGFuZ2UgfSAvPlxuICAgICk7XG4gIH1cbn1cblxuY2xhc3MgVGFibGVIZWFkZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBjb250YWluZXJDbGFzc2VzID0gY2xhc3NTZXQoJ3JlYWN0LWJzLWNvbnRhaW5lci1oZWFkZXInLCAndGFibGUtaGVhZGVyLXdyYXBwZXInKTtcbiAgICBjb25zdCB0YWJsZUNsYXNzZXMgPSBjbGFzc1NldCgndGFibGUnLCAndGFibGUtaG92ZXInLCB7XG4gICAgICAndGFibGUtYm9yZGVyZWQnOiB0aGlzLnByb3BzLmJvcmRlcmVkLFxuICAgICAgJ3RhYmxlLWNvbmRlbnNlZCc6IHRoaXMucHJvcHMuY29uZGVuc2VkXG4gICAgfSk7XG4gICAgbGV0IHNlbGVjdFJvd0hlYWRlckNvbCA9IG51bGw7XG4gICAgaWYgKCF0aGlzLnByb3BzLmhpZGVTZWxlY3RDb2x1bW4pIHNlbGVjdFJvd0hlYWRlckNvbCA9IHRoaXMucmVuZGVyU2VsZWN0Um93SGVhZGVyKCk7XG4gICAgdGhpcy5fYXR0YWNoQ2xlYXJTb3J0Q2FyZXRGdW5jKCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiByZWY9J2NvbnRhaW5lcicgY2xhc3NOYW1lPXsgY29udGFpbmVyQ2xhc3NlcyB9PlxuICAgICAgICA8dGFibGUgY2xhc3NOYW1lPXsgdGFibGVDbGFzc2VzIH0+XG4gICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgPHRyIHJlZj0naGVhZGVyJz5cbiAgICAgICAgICAgICAgeyBzZWxlY3RSb3dIZWFkZXJDb2wgfVxuICAgICAgICAgICAgICB7IHRoaXMucHJvcHMuY2hpbGRyZW4gfVxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlclNlbGVjdFJvd0hlYWRlcigpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5yb3dTZWxlY3RUeXBlID09PSBDb25zdC5ST1dfU0VMRUNUX1NJTkdMRSkge1xuICAgICAgcmV0dXJuICg8U2VsZWN0Um93SGVhZGVyQ29sdW1uIC8+KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMucm93U2VsZWN0VHlwZSA9PT0gQ29uc3QuUk9XX1NFTEVDVF9NVUxUSSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFNlbGVjdFJvd0hlYWRlckNvbHVtbj5cbiAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgIG9uQ2hhbmdlPXsgdGhpcy5wcm9wcy5vblNlbGVjdEFsbFJvdyB9XG4gICAgICAgICAgICBjaGVja2VkPXsgdGhpcy5wcm9wcy5pc1NlbGVjdEFsbCB9Lz5cbiAgICAgICAgPC9TZWxlY3RSb3dIZWFkZXJDb2x1bW4+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBfYXR0YWNoQ2xlYXJTb3J0Q2FyZXRGdW5jKCkge1xuICAgIGNvbnN0IHsgc29ydEluZGljYXRvciwgY2hpbGRyZW4sIHNvcnROYW1lLCBzb3J0T3JkZXIsIG9uU29ydCB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBjaGlsZHJlbltpXS5wcm9wcy5kYXRhRmllbGQ7XG4gICAgICAgIGNvbnN0IHNvcnQgPSBmaWVsZCA9PT0gc29ydE5hbWUgPyBzb3J0T3JkZXIgOiB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMucHJvcHMuY2hpbGRyZW5baV0gPVxuICAgICAgICAgIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbltpXSxcbiAgICAgICAgICAgIHsga2V5OiBpLCBvblNvcnQsIHNvcnQsIHNvcnRJbmRpY2F0b3IgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gY2hpbGRyZW4ucHJvcHMuZGF0YUZpZWxkO1xuICAgICAgY29uc3Qgc29ydCA9IGZpZWxkID09PSBzb3J0TmFtZSA/IHNvcnRPcmRlciA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMucHJvcHMuY2hpbGRyZW4gPVxuICAgICAgICBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sXG4gICAgICAgICAgeyBrZXk6IDAsIG9uU29ydCwgc29ydCwgc29ydEluZGljYXRvciB9KTtcbiAgICB9XG4gIH1cbn1cblRhYmxlSGVhZGVyLnByb3BUeXBlcyA9IHtcbiAgcm93U2VsZWN0VHlwZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25Tb3J0OiBQcm9wVHlwZXMuZnVuYyxcbiAgb25TZWxlY3RBbGxSb3c6IFByb3BUeXBlcy5mdW5jLFxuICBzb3J0TmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgc29ydE9yZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBoaWRlU2VsZWN0Q29sdW1uOiBQcm9wVHlwZXMuYm9vbCxcbiAgYm9yZGVyZWQ6IFByb3BUeXBlcy5ib29sLFxuICBjb25kZW5zZWQ6IFByb3BUeXBlcy5ib29sLFxuICBpc0ZpbHRlcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNTZWxlY3RBbGw6IFByb3BUeXBlcy5vbmVPZihbIHRydWUsICdpbmRldGVybWluYXRlJywgZmFsc2UgXSksXG4gIHNvcnRJbmRpY2F0b3I6IFByb3BUeXBlcy5ib29sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBUYWJsZUhlYWRlcjtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL1RhYmxlSGVhZGVyLmpzXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports){eval("module.exports = __WEBPACK_EXTERNAL_MODULE_5__;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1wicm9vdFwiOlwiUmVhY3RET01cIixcImNvbW1vbmpzMlwiOlwicmVhY3QtZG9tXCIsXCJjb21tb25qc1wiOlwicmVhY3QtZG9tXCIsXCJhbWRcIjpcInJlYWN0LWRvbVwifT9iMTFhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwiZmlsZSI6IjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfNV9fO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogZXh0ZXJuYWwge1wicm9vdFwiOlwiUmVhY3RET01cIixcImNvbW1vbmpzMlwiOlwicmVhY3QtZG9tXCIsXCJjb21tb25qc1wiOlwicmVhY3QtZG9tXCIsXCJhbWRcIjpcInJlYWN0LWRvbVwifVxuICoqIG1vZHVsZSBpZCA9IDVcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports,__webpack_require__){eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n Copyright (c) 2016 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n 'use strict';\n\n var hasOwn = {}.hasOwnProperty;\n\n function classNames () {\n var classes = [];\n\n for (var i = 0; i < arguments.length; i++) {\n var arg = arguments[i];\n if (!arg) continue;\n\n var argType = typeof arg;\n\n if (argType === 'string' || argType === 'number') {\n classes.push(arg);\n } else if (Array.isArray(arg)) {\n classes.push(classNames.apply(null, arg));\n } else if (argType === 'object') {\n for (var key in arg) {\n if (hasOwn.call(arg, key) && arg[key]) {\n classes.push(key);\n }\n }\n }\n }\n\n return classes.join(' ');\n }\n\n if (typeof module !== 'undefined' && module.exports) {\n module.exports = classNames;\n } else if (true) {\n // register as 'classnames', consistent with npm package name\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function () {\n return classNames;\n }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {\n window.classNames = classNames;\n }\n}());\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NsYXNzbmFtZXMvaW5kZXguanM/OGU0MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxnQkFBZ0I7O0FBRWhCO0FBQ0E7O0FBRUEsaUJBQWlCLHNCQUFzQjtBQUN2QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFO0FBQ0Y7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiNi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICBDb3B5cmlnaHQgKGMpIDIwMTYgSmVkIFdhdHNvbi5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLCBzZWVcbiAgaHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lc1xuKi9cbi8qIGdsb2JhbCBkZWZpbmUgKi9cblxuKGZ1bmN0aW9uICgpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuXHRmdW5jdGlvbiBjbGFzc05hbWVzICgpIHtcblx0XHR2YXIgY2xhc3NlcyA9IFtdO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBhcmcgPSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoIWFyZykgY29udGludWU7XG5cblx0XHRcdHZhciBhcmdUeXBlID0gdHlwZW9mIGFyZztcblxuXHRcdFx0aWYgKGFyZ1R5cGUgPT09ICdzdHJpbmcnIHx8IGFyZ1R5cGUgPT09ICdudW1iZXInKSB7XG5cdFx0XHRcdGNsYXNzZXMucHVzaChhcmcpO1xuXHRcdFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcblx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGNsYXNzTmFtZXMuYXBwbHkobnVsbCwgYXJnKSk7XG5cdFx0XHR9IGVsc2UgaWYgKGFyZ1R5cGUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdGZvciAodmFyIGtleSBpbiBhcmcpIHtcblx0XHRcdFx0XHRpZiAoaGFzT3duLmNhbGwoYXJnLCBrZXkpICYmIGFyZ1trZXldKSB7XG5cdFx0XHRcdFx0XHRjbGFzc2VzLnB1c2goa2V5KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7XG5cdH1cblxuXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIHJlZ2lzdGVyIGFzICdjbGFzc25hbWVzJywgY29uc2lzdGVudCB3aXRoIG5wbSBwYWNrYWdlIG5hbWVcblx0XHRkZWZpbmUoJ2NsYXNzbmFtZXMnLCBbXSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXM7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xuXHR9XG59KCkpO1xuXG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34vY2xhc3NuYW1lcy9pbmRleC5qc1xuICoqIG1vZHVsZSBpZCA9IDZcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar SelectRowHeaderColumn = (function (_Component) {\n _inherits(SelectRowHeaderColumn, _Component);\n\n function SelectRowHeaderColumn() {\n _classCallCheck(this, SelectRowHeaderColumn);\n\n _get(Object.getPrototypeOf(SelectRowHeaderColumn.prototype), 'constructor', this).apply(this, arguments);\n }\n\n _createClass(SelectRowHeaderColumn, [{\n key: 'render',\n value: function render() {\n return _react2['default'].createElement(\n 'th',\n { style: { textAlign: 'center' } },\n this.props.children\n );\n }\n }]);\n\n return SelectRowHeaderColumn;\n})(_react.Component);\n\nSelectRowHeaderColumn.propTypes = {\n children: _react.PropTypes.node\n};\nexports['default'] = SelectRowHeaderColumn;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvU2VsZWN0Um93SGVhZGVyQ29sdW1uLmpzP2FhYmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztpQ0FBNEMsQ0FBTzs7OztJQUU3QyxxQkFBcUI7WUFBckIscUJBQXFCOztXQUFyQixxQkFBcUI7MEJBQXJCLHFCQUFxQjs7K0JBQXJCLHFCQUFxQjs7O2VBQXJCLHFCQUFxQjs7V0FFbkIsa0JBQUc7QUFDUCxhQUNFOztVQUFJLEtBQUssRUFBRyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUk7UUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRO09BQ2xCLENBQ0w7S0FDSDs7O1NBUkcscUJBQXFCOzs7QUFVM0IscUJBQXFCLENBQUMsU0FBUyxHQUFHO0FBQ2hDLFVBQVEsRUFBRSxpQkFBVSxJQUFJO0NBQ3pCLENBQUM7cUJBQ2EscUJBQXFCIiwiZmlsZSI6IjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBQcm9wVHlwZXMgfSBmcm9tICdyZWFjdCc7XG5cbmNsYXNzIFNlbGVjdFJvd0hlYWRlckNvbHVtbiBleHRlbmRzIENvbXBvbmVudCB7XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8dGggc3R5bGU9eyB7IHRleHRBbGlnbjogJ2NlbnRlcicgfSB9PlxuICAgICAgICB7IHRoaXMucHJvcHMuY2hpbGRyZW4gfVxuICAgICAgPC90aD5cbiAgICApO1xuICB9XG59XG5TZWxlY3RSb3dIZWFkZXJDb2x1bW4ucHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGVcbn07XG5leHBvcnQgZGVmYXVsdCBTZWxlY3RSb3dIZWFkZXJDb2x1bW47XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9TZWxlY3RSb3dIZWFkZXJDb2x1bW4uanNcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _Const = __webpack_require__(3);\n\nvar _Const2 = _interopRequireDefault(_Const);\n\nvar _TableRow = __webpack_require__(9);\n\nvar _TableRow2 = _interopRequireDefault(_TableRow);\n\nvar _TableColumn = __webpack_require__(10);\n\nvar _TableColumn2 = _interopRequireDefault(_TableColumn);\n\nvar _TableEditColumn = __webpack_require__(11);\n\nvar _TableEditColumn2 = _interopRequireDefault(_TableEditColumn);\n\nvar _classnames = __webpack_require__(6);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar isFun = function isFun(obj) {\n return obj && typeof obj === 'function';\n};\n\nvar TableBody = (function (_Component) {\n _inherits(TableBody, _Component);\n\n function TableBody(props) {\n var _this = this;\n\n _classCallCheck(this, TableBody);\n\n _get(Object.getPrototypeOf(TableBody.prototype), 'constructor', this).call(this, props);\n\n this.handleRowMouseOut = function (rowIndex) {\n var targetRow = _this.props.data[rowIndex];\n _this.props.onRowMouseOut(targetRow);\n };\n\n this.handleRowMouseOver = function (rowIndex) {\n var targetRow = _this.props.data[rowIndex];\n _this.props.onRowMouseOver(targetRow);\n };\n\n this.handleRowClick = function (rowIndex) {\n var selectedRow = undefined;\n var _props = _this.props;\n var data = _props.data;\n var onRowClick = _props.onRowClick;\n\n data.forEach(function (row, i) {\n if (i === rowIndex - 1) {\n selectedRow = row;\n }\n });\n onRowClick(selectedRow);\n };\n\n this.handleSelectRow = function (rowIndex, isSelected) {\n var selectedRow = undefined;\n var _props2 = _this.props;\n var data = _props2.data;\n var onSelectRow = _props2.onSelectRow;\n\n data.forEach(function (row, i) {\n if (i === rowIndex - 1) {\n selectedRow = row;\n return false;\n }\n });\n onSelectRow(selectedRow, isSelected);\n };\n\n this.handleSelectRowColumChange = function (e) {\n if (!_this.props.selectRow.clickToSelect || !_this.props.selectRow.clickToSelectAndEditCell) {\n _this.handleSelectRow(e.currentTarget.parentElement.parentElement.rowIndex + 1, e.currentTarget.checked);\n }\n };\n\n this.handleEditCell = function (rowIndex, columnIndex) {\n _this.editing = true;\n if (_this._isSelectRowDefined()) {\n columnIndex--;\n if (_this.props.selectRow.hideSelectColumn) columnIndex++;\n }\n rowIndex--;\n var stateObj = {\n currEditCell: {\n rid: rowIndex,\n cid: columnIndex\n }\n };\n\n if (_this.props.selectRow.clickToSelectAndEditCell) {\n _this.handleSelectRow(rowIndex + 1, true);\n }\n _this.setState(stateObj);\n };\n\n this.handleCompleteEditCell = function (newVal, rowIndex, columnIndex) {\n _this.setState({ currEditCell: null });\n if (newVal !== null) {\n _this.props.cellEdit.__onCompleteEdit__(newVal, rowIndex, columnIndex);\n }\n };\n\n this.state = {\n currEditCell: null\n };\n this.editing = false;\n }\n\n _createClass(TableBody, [{\n key: 'render',\n value: function render() {\n var tableClasses = (0, _classnames2['default'])('table', {\n 'table-striped': this.props.striped,\n 'table-bordered': this.props.bordered,\n 'table-hover': this.props.hover,\n 'table-condensed': this.props.condensed\n });\n\n var isSelectRowDefined = this._isSelectRowDefined();\n var tableHeader = this.renderTableHeader(isSelectRowDefined);\n\n var tableRows = this.props.data.map(function (data, r) {\n var tableColumns = this.props.columns.map(function (column, i) {\n var fieldValue = data[column.name];\n if (this.editing && column.name !== this.props.keyField && // Key field can't be edit\n column.editable && // column is editable? default is true, user can set it false\n this.state.currEditCell !== null && this.state.currEditCell.rid === r && this.state.currEditCell.cid === i) {\n var editable = column.editable;\n var format = column.format ? function (value) {\n return column.format(value, data, column.formatExtraData).replace(/<.*?>/g, '');\n } : false;\n\n if (isFun(column.editable)) {\n editable = column.editable(fieldValue, data, r, i);\n }\n\n return _react2['default'].createElement(\n _TableEditColumn2['default'],\n {\n completeEdit: this.handleCompleteEditCell,\n // add by bluespring for column editor customize\n editable: editable,\n format: column.format ? format : false,\n key: i,\n blurToSave: this.props.cellEdit.blurToSave,\n rowIndex: r,\n colIndex: i },\n fieldValue\n );\n } else {\n // add by bluespring for className customize\n var columnChild = fieldValue;\n var tdClassName = column.className;\n if (isFun(column.className)) {\n tdClassName = column.className(fieldValue, data, r, i);\n }\n\n if (typeof column.format !== 'undefined') {\n var formattedValue = column.format(fieldValue, data, column.formatExtraData);\n if (!_react2['default'].isValidElement(formattedValue)) {\n columnChild = _react2['default'].createElement('div', { dangerouslySetInnerHTML: { __html: formattedValue } });\n } else {\n columnChild = formattedValue;\n }\n }\n return _react2['default'].createElement(\n _TableColumn2['default'],\n { key: i,\n dataAlign: column.align,\n className: tdClassName,\n cellEdit: this.props.cellEdit,\n hidden: column.hidden,\n onEdit: this.handleEditCell,\n width: column.width },\n columnChild\n );\n }\n }, this);\n\n var selected = this.props.selectedRowKeys.indexOf(data[this.props.keyField]) !== -1;\n var selectRowColumn = isSelectRowDefined && !this.props.selectRow.hideSelectColumn ? this.renderSelectRowColumn(selected) : null;\n // add by bluespring for className customize\n var trClassName = this.props.trClassName;\n if (isFun(this.props.trClassName)) {\n trClassName = this.props.trClassName(data, r);\n }\n return _react2['default'].createElement(\n _TableRow2['default'],\n { isSelected: selected, key: r, className: trClassName,\n selectRow: isSelectRowDefined ? this.props.selectRow : undefined,\n enableCellEdit: this.props.cellEdit.mode !== _Const2['default'].CELL_EDIT_NONE,\n onRowClick: this.handleRowClick,\n onRowMouseOver: this.handleRowMouseOver,\n onRowMouseOut: this.handleRowMouseOut,\n onSelectRow: this.handleSelectRow },\n selectRowColumn,\n tableColumns\n );\n }, this);\n\n if (tableRows.length === 0) {\n tableRows.push(_react2['default'].createElement(\n _TableRow2['default'],\n { key: '##table-empty##' },\n _react2['default'].createElement(\n 'td',\n { colSpan: this.props.columns.length + (isSelectRowDefined ? 1 : 0),\n className: 'react-bs-table-no-data' },\n this.props.noDataText || _Const2['default'].NO_DATA_TEXT\n )\n ));\n }\n\n this.editing = false;\n\n return _react2['default'].createElement(\n 'div',\n { ref: 'container', className: 'react-bs-container-body', style: this.props.style },\n _react2['default'].createElement(\n 'table',\n { className: tableClasses },\n tableHeader,\n _react2['default'].createElement(\n 'tbody',\n { ref: 'tbody' },\n tableRows\n )\n )\n );\n }\n }, {\n key: 'renderTableHeader',\n value: function renderTableHeader(isSelectRowDefined) {\n var selectRowHeader = null;\n\n if (isSelectRowDefined) {\n var style = {\n width: 30,\n minWidth: 30\n };\n if (!this.props.selectRow.hideSelectColumn) {\n selectRowHeader = _react2['default'].createElement('col', { style: style, key: -1 });\n }\n }\n var theader = this.props.columns.map(function (column, i) {\n var width = column.width === null ? column.width : parseInt(column.width, 10);\n var style = {\n display: column.hidden ? 'none' : null,\n width: width,\n minWidth: width\n /** add min-wdth to fix user assign column width\n not eq offsetWidth in large column table **/\n };\n return _react2['default'].createElement('col', { style: style, key: i, className: column.className });\n });\n\n return _react2['default'].createElement(\n 'colgroup',\n { ref: 'header' },\n selectRowHeader,\n theader\n );\n }\n }, {\n key: 'renderSelectRowColumn',\n value: function renderSelectRowColumn(selected) {\n if (this.props.selectRow.mode === _Const2['default'].ROW_SELECT_SINGLE) {\n return _react2['default'].createElement(\n _TableColumn2['default'],\n { dataAlign: 'center' },\n _react2['default'].createElement('input', { type: 'radio', checked: selected,\n onChange: this.handleSelectRowColumChange })\n );\n } else {\n return _react2['default'].createElement(\n _TableColumn2['default'],\n { dataAlign: 'center' },\n _react2['default'].createElement('input', { type: 'checkbox', checked: selected,\n onChange: this.handleSelectRowColumChange })\n );\n }\n }\n }, {\n key: '_isSelectRowDefined',\n value: function _isSelectRowDefined() {\n return this.props.selectRow.mode === _Const2['default'].ROW_SELECT_SINGLE || this.props.selectRow.mode === _Const2['default'].ROW_SELECT_MULTI;\n }\n }]);\n\n return TableBody;\n})(_react.Component);\n\nTableBody.propTypes = {\n data: _react.PropTypes.array,\n columns: _react.PropTypes.array,\n striped: _react.PropTypes.bool,\n bordered: _react.PropTypes.bool,\n hover: _react.PropTypes.bool,\n condensed: _react.PropTypes.bool,\n keyField: _react.PropTypes.string,\n selectedRowKeys: _react.PropTypes.array,\n onRowClick: _react.PropTypes.func,\n onSelectRow: _react.PropTypes.func,\n noDataText: _react.PropTypes.string,\n style: _react.PropTypes.object\n};\nexports['default'] = TableBody;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvVGFibGVCb2R5LmpzPzVkNWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztpQ0FBNEMsQ0FBTzs7OztpQ0FDakMsQ0FBUzs7OztvQ0FDTixDQUFZOzs7O3VDQUNULEVBQWU7Ozs7MkNBQ1gsRUFBbUI7Ozs7c0NBQzFCLENBQVk7Ozs7QUFFakMsSUFBTSxLQUFLLEdBQUcsU0FBUixLQUFLLENBQVksR0FBRyxFQUFFO0FBQzFCLFNBQU8sR0FBRyxJQUFLLE9BQU8sR0FBRyxLQUFLLFVBQVcsQ0FBQztDQUMzQyxDQUFDOztJQUVJLFNBQVM7WUFBVCxTQUFTOztBQUVGLFdBRlAsU0FBUyxDQUVELEtBQUssRUFBRTs7OzBCQUZmLFNBQVM7O0FBR1gsK0JBSEUsU0FBUyw2Q0FHTCxLQUFLLEVBQUU7O1NBK0pmLGlCQUFpQixHQUFHLGtCQUFRLEVBQUk7QUFDOUIsVUFBTSxTQUFTLEdBQUcsTUFBSyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzVDLFlBQUssS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUNyQzs7U0FFRCxrQkFBa0IsR0FBRyxrQkFBUSxFQUFJO0FBQy9CLFVBQU0sU0FBUyxHQUFHLE1BQUssS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM1QyxZQUFLLEtBQUssQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7S0FDdEM7O1NBRUQsY0FBYyxHQUFHLGtCQUFRLEVBQUk7QUFDM0IsVUFBSSxXQUFXLGFBQUM7bUJBQ2EsTUFBSyxLQUFLO1VBQS9CLElBQUksVUFBSixJQUFJO1VBQUUsVUFBVSxVQUFWLFVBQVU7O0FBQ3hCLFVBQUksQ0FBQyxPQUFPLENBQUMsVUFBQyxHQUFHLEVBQUUsQ0FBQyxFQUFLO0FBQ3ZCLFlBQUksQ0FBQyxLQUFLLFFBQVEsR0FBRyxDQUFDLEVBQUU7QUFDdEIscUJBQVcsR0FBRyxHQUFHLENBQUM7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QUFDLElBQUksS0FBSyxtQkFBTSxnQkFBZ0IsQ0FBQztLQUM1RDs7O1NBNVBHLFNBQVM7OztBQThQZixTQUFTLENBQUMsU0FBUyxHQUFHO0FBQ3BCLE1BQUksRUFBRSxpQkFBVSxLQUFLO0FBQ3JCLFNBQU8sRUFBRSxpQkFBVSxLQUFLO0FBQ3hCLFNBQU8sRUFBRSxpQkFBVSxJQUFJO0FBQ3ZCLFVBQVEsRUFBRSxpQkFBVSxJQUFJO0FBQ3hCLE9BQUssRUFBRSxpQkFBVSxJQUFJO0FBQ3JCLFdBQVMsRUFBRSxpQkFBVSxJQUFJO0FBQ3pCLFVBQVEsRUFBRSxpQkFBVSxNQUFNO0FBQzFCLGlCQUFlLEVBQUUsaUJBQVUsS0FBSztBQUNoQyxZQUFVLEVBQUUsaUJBQVUsSUFBSTtBQUMxQixhQUFXLEVBQUUsaUJBQVUsSUFBSTtBQUMzQixZQUFVLEVBQUUsaUJBQVUsTUFBTTtBQUM1QixPQUFLLEVBQUUsaUJBQVUsTUFBTTtDQUN4QixDQUFDO3FCQUNhLFNBQVMiLCJmaWxlIjoiOC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFByb3BUeXBlcyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBDb25zdCBmcm9tICcuL0NvbnN0JztcbmltcG9ydCBUYWJsZVJvdyBmcm9tICcuL1RhYmxlUm93JztcbmltcG9ydCBUYWJsZUNvbHVtbiBmcm9tICcuL1RhYmxlQ29sdW1uJztcbmltcG9ydCBUYWJsZUVkaXRDb2x1bW4gZnJvbSAnLi9UYWJsZUVkaXRDb2x1bW4nO1xuaW1wb3J0IGNsYXNzU2V0IGZyb20gJ2NsYXNzbmFtZXMnO1xuXG5jb25zdCBpc0Z1biA9IGZ1bmN0aW9uKG9iaikge1xuICByZXR1cm4gb2JqICYmICh0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKTtcbn07XG5cbmNsYXNzIFRhYmxlQm9keSBleHRlbmRzIENvbXBvbmVudCB7XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGN1cnJFZGl0Q2VsbDogbnVsbFxuICAgIH07XG4gICAgdGhpcy5lZGl0aW5nID0gZmFsc2U7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgdGFibGVDbGFzc2VzID0gY2xhc3NTZXQoJ3RhYmxlJywge1xuICAgICAgJ3RhYmxlLXN0cmlwZWQnOiB0aGlzLnByb3BzLnN0cmlwZWQsXG4gICAgICAndGFibGUtYm9yZGVyZWQnOiB0aGlzLnByb3BzLmJvcmRlcmVkLFxuICAgICAgJ3RhYmxlLWhvdmVyJzogdGhpcy5wcm9wcy5ob3ZlcixcbiAgICAgICd0YWJsZS1jb25kZW5zZWQnOiB0aGlzLnByb3BzLmNvbmRlbnNlZFxuICAgIH0pO1xuXG4gICAgY29uc3QgaXNTZWxlY3RSb3dEZWZpbmVkID0gdGhpcy5faXNTZWxlY3RSb3dEZWZpbmVkKCk7XG4gICAgY29uc3QgdGFibGVIZWFkZXIgPSB0aGlzLnJlbmRlclRhYmxlSGVhZGVyKGlzU2VsZWN0Um93RGVmaW5lZCk7XG5cbiAgICBjb25zdCB0YWJsZVJvd3MgPSB0aGlzLnByb3BzLmRhdGEubWFwKGZ1bmN0aW9uKGRhdGEsIHIpIHtcbiAgICAgIGNvbnN0IHRhYmxlQ29sdW1ucyA9IHRoaXMucHJvcHMuY29sdW1ucy5tYXAoZnVuY3Rpb24oY29sdW1uLCBpKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPSBkYXRhW2NvbHVtbi5uYW1lXTtcbiAgICAgICAgaWYgKHRoaXMuZWRpdGluZyAmJlxuICAgICAgICAgIGNvbHVtbi5uYW1lICE9PSB0aGlzLnByb3BzLmtleUZpZWxkICYmIC8vIEtleSBmaWVsZCBjYW4ndCBiZSBlZGl0XG4gICAgICAgICAgY29sdW1uLmVkaXRhYmxlICYmIC8vIGNvbHVtbiBpcyBlZGl0YWJsZT8gZGVmYXVsdCBpcyB0cnVlLCB1c2VyIGNhbiBzZXQgaXQgZmFsc2VcbiAgICAgICAgICB0aGlzLnN0YXRlLmN1cnJFZGl0Q2VsbCAhPT0gbnVsbCAmJlxuICAgICAgICAgIHRoaXMuc3RhdGUuY3VyckVkaXRDZWxsLnJpZCA9PT0gciAmJlxuICAgICAgICAgIHRoaXMuc3RhdGUuY3VyckVkaXRDZWxsLmNpZCA9PT0gaSkge1xuICAgICAgICAgIGxldCBlZGl0YWJsZSA9IGNvbHVtbi5lZGl0YWJsZTtcbiAgICAgICAgICBjb25zdCBmb3JtYXQgPSBjb2x1bW4uZm9ybWF0ID8gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2x1bW4uZm9ybWF0KHZhbHVlLCBkYXRhLCBjb2x1bW4uZm9ybWF0RXh0cmFEYXRhKS5yZXBsYWNlKC88Lio/Pi9nLCAnJyk7XG4gICAgICAgICAgfSA6IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKGlzRnVuKGNvbHVtbi5lZGl0YWJsZSkpIHtcbiAgICAgICAgICAgIGVkaXRhYmxlID0gY29sdW1uLmVkaXRhYmxlKGZpZWxkVmFsdWUsIGRhdGEsIHIsIGkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxUYWJsZUVkaXRDb2x1bW5cbiAgICAgICAgICAgICAgICBjb21wbGV0ZUVkaXQ9eyB0aGlzLmhhbmRsZUNvbXBsZXRlRWRpdENlbGwgfVxuICAgICAgICAgICAgICAgIC8vIGFkZCBieSBibHVlc3ByaW5nIGZvciBjb2x1bW4gZWRpdG9yIGN1c3RvbWl6ZVxuICAgICAgICAgICAgICAgIGVkaXRhYmxlPXsgZWRpdGFibGUgfVxuICAgICAgICAgICAgICAgIGZvcm1hdD17IGNvbHVtbi5mb3JtYXQgPyBmb3JtYXQgOiBmYWxzZSB9XG4gICAgICAgICAgICAgICAga2V5PXsgaSB9XG4gICAgICAgICAgICAgICAgYmx1clRvU2F2ZT17IHRoaXMucHJvcHMuY2VsbEVkaXQuYmx1clRvU2F2ZSB9XG4gICAgICAgICAgICAgICAgcm93SW5kZXg9eyByIH1cbiAgICAgICAgICAgICAgICBjb2xJbmRleD17IGkgfT5cbiAgICAgICAgICAgICAgICB7IGZpZWxkVmFsdWUgfVxuICAgICAgICAgICAgICA8L1RhYmxlRWRpdENvbHVtbj5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gYWRkIGJ5IGJsdWVzcHJpbmcgZm9yIGNsYXNzTmFtZSBjdXN0b21pemVcbiAgICAgICAgICBsZXQgY29sdW1uQ2hpbGQgPSBmaWVsZFZhbHVlO1xuICAgICAgICAgIGxldCB0ZENsYXNzTmFtZSA9IGNvbHVtbi5jbGFzc05hbWU7XG4gICAgICAgICAgaWYgKGlzRnVuKGNvbHVtbi5jbGFzc05hbWUpKSB7XG4gICAgICAgICAgICB0ZENsYXNzTmFtZSA9IGNvbHVtbi5jbGFzc05hbWUoZmllbGRWYWx1ZSwgZGF0YSwgciwgaSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBjb2x1bW4uZm9ybWF0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkVmFsdWUgPSBjb2x1bW4uZm9ybWF0KGZpZWxkVmFsdWUsIGRhdGEsIGNvbHVtbi5mb3JtYXRFeHRyYURhdGEpO1xuICAgICAgICAgICAgaWYgKCFSZWFjdC5pc1ZhbGlkRWxlbWVudChmb3JtYXR0ZWRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgY29sdW1uQ2hpbGQgPSAoXG4gICAgICAgICAgICAgICAgPGRpdiBkYW5nZXJvdXNseVNldElubmVySFRNTD17IHsgX19odG1sOiBmb3JtYXR0ZWRWYWx1ZSB9IH0+PC9kaXY+XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb2x1bW5DaGlsZCA9IGZvcm1hdHRlZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFRhYmxlQ29sdW1uIGtleT17IGkgfVxuICAgICAgICAgICAgICBkYXRhQWxpZ249eyBjb2x1bW4uYWxpZ24gfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9eyB0ZENsYXNzTmFtZSB9XG4gICAgICAgICAgICAgIGNlbGxFZGl0PXsgdGhpcy5wcm9wcy5jZWxsRWRpdCB9XG4gICAgICAgICAgICAgIGhpZGRlbj17IGNvbHVtbi5oaWRkZW4gfVxuICAgICAgICAgICAgICBvbkVkaXQ9eyB0aGlzLmhhbmRsZUVkaXRDZWxsIH1cbiAgICAgICAgICAgICAgd2lkdGg9eyBjb2x1bW4ud2lkdGggfT5cbiAgICAgICAgICAgICAgeyBjb2x1bW5DaGlsZCB9XG4gICAgICAgICAgICA8L1RhYmxlQ29sdW1uPlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0sIHRoaXMpO1xuXG4gICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMucHJvcHMuc2VsZWN0ZWRSb3dLZXlzLmluZGV4T2YoZGF0YVt0aGlzLnByb3BzLmtleUZpZWxkXSkgIT09IC0xO1xuICAgICAgY29uc3Qgc2VsZWN0Um93Q29sdW1uID0gaXNTZWxlY3RSb3dEZWZpbmVkICYmICF0aGlzLnByb3BzLnNlbGVjdFJvdy5oaWRlU2VsZWN0Q29sdW1uID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyU2VsZWN0Um93Q29sdW1uKHNlbGVjdGVkKSA6IG51bGw7XG4gICAgICAvLyBhZGQgYnkgYmx1ZXNwcmluZyBmb3IgY2xhc3NOYW1lIGN1c3RvbWl6ZVxuICAgICAgbGV0IHRyQ2xhc3NOYW1lID0gdGhpcy5wcm9wcy50ckNsYXNzTmFtZTtcbiAgICAgIGlmIChpc0Z1bih0aGlzLnByb3BzLnRyQ2xhc3NOYW1lKSkge1xuICAgICAgICB0ckNsYXNzTmFtZSA9IHRoaXMucHJvcHMudHJDbGFzc05hbWUoZGF0YSwgcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGFibGVSb3cgaXNTZWxlY3RlZD17IHNlbGVjdGVkIH0ga2V5PXsgciB9IGNsYXNzTmFtZT17IHRyQ2xhc3NOYW1lIH1cbiAgICAgICAgICBzZWxlY3RSb3c9eyBpc1NlbGVjdFJvd0RlZmluZWQgPyB0aGlzLnByb3BzLnNlbGVjdFJvdyA6IHVuZGVmaW5lZCB9XG4gICAgICAgICAgZW5hYmxlQ2VsbEVkaXQ9eyB0aGlzLnByb3BzLmNlbGxFZGl0Lm1vZGUgIT09IENvbnN0LkNFTExfRURJVF9OT05FIH1cbiAgICAgICAgICBvblJvd0NsaWNrPXsgdGhpcy5oYW5kbGVSb3dDbGljayB9XG4gICAgICAgICAgb25Sb3dNb3VzZU92ZXI9eyB0aGlzLmhhbmRsZVJvd01vdXNlT3ZlciB9XG4gICAgICAgICAgb25Sb3dNb3VzZU91dD17IHRoaXMuaGFuZGxlUm93TW91c2VPdXQgfVxuICAgICAgICAgIG9uU2VsZWN0Um93PXsgdGhpcy5oYW5kbGVTZWxlY3RSb3cgfT5cbiAgICAgICAgICB7IHNlbGVjdFJvd0NvbHVtbiB9XG4gICAgICAgICAgeyB0YWJsZUNvbHVtbnMgfVxuICAgICAgICA8L1RhYmxlUm93PlxuICAgICAgKTtcbiAgICB9LCB0aGlzKTtcblxuICAgIGlmICh0YWJsZVJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICB0YWJsZVJvd3MucHVzaChcbiAgICAgICAgPFRhYmxlUm93IGtleT0nIyN0YWJsZS1lbXB0eSMjJz5cbiAgICAgICAgICA8dGQgY29sU3Bhbj17IHRoaXMucHJvcHMuY29sdW1ucy5sZW5ndGggKyAoaXNTZWxlY3RSb3dEZWZpbmVkID8gMSA6IDApIH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPSdyZWFjdC1icy10YWJsZS1uby1kYXRhJz5cbiAgICAgICAgICAgICAgeyB0aGlzLnByb3BzLm5vRGF0YVRleHQgfHwgQ29uc3QuTk9fREFUQV9URVhUIH1cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L1RhYmxlUm93PlxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmVkaXRpbmcgPSBmYWxzZTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHJlZj0nY29udGFpbmVyJyBjbGFzc05hbWU9J3JlYWN0LWJzLWNvbnRhaW5lci1ib2R5JyBzdHlsZT17IHRoaXMucHJvcHMuc3R5bGUgfT5cbiAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT17IHRhYmxlQ2xhc3NlcyB9PlxuICAgICAgICAgIHsgdGFibGVIZWFkZXIgfVxuICAgICAgICAgIDx0Ym9keSByZWY9J3Rib2R5Jz5cbiAgICAgICAgICAgIHsgdGFibGVSb3dzIH1cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlclRhYmxlSGVhZGVyKGlzU2VsZWN0Um93RGVmaW5lZCkge1xuICAgIGxldCBzZWxlY3RSb3dIZWFkZXIgPSBudWxsO1xuXG4gICAgaWYgKGlzU2VsZWN0Um93RGVmaW5lZCkge1xuICAgICAgY29uc3Qgc3R5bGUgPSB7XG4gICAgICAgIHdpZHRoOiAzMCxcbiAgICAgICAgbWluV2lkdGg6IDMwXG4gICAgICB9O1xuICAgICAgaWYgKCF0aGlzLnByb3BzLnNlbGVjdFJvdy5oaWRlU2VsZWN0Q29sdW1uKSB7XG4gICAgICAgIHNlbGVjdFJvd0hlYWRlciA9ICg8Y29sIHN0eWxlPXsgc3R5bGUgfSBrZXk9eyAtMSB9PjwvY29sPik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHRoZWFkZXIgPSB0aGlzLnByb3BzLmNvbHVtbnMubWFwKGZ1bmN0aW9uKGNvbHVtbiwgaSkge1xuICAgICAgY29uc3Qgd2lkdGggPSBjb2x1bW4ud2lkdGggPT09IG51bGwgPyBjb2x1bW4ud2lkdGggOiBwYXJzZUludChjb2x1bW4ud2lkdGgsIDEwKTtcbiAgICAgIGNvbnN0IHN0eWxlID0ge1xuICAgICAgICBkaXNwbGF5OiBjb2x1bW4uaGlkZGVuID8gJ25vbmUnIDogbnVsbCxcbiAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICBtaW5XaWR0aDogd2lkdGhcbiAgICAgICAgLyoqIGFkZCBtaW4td2R0aCB0byBmaXggdXNlciBhc3NpZ24gY29sdW1uIHdpZHRoXG4gICAgICAgIG5vdCBlcSBvZmZzZXRXaWR0aCBpbiBsYXJnZSBjb2x1bW4gdGFibGUgKiovXG4gICAgICB9O1xuICAgICAgcmV0dXJuICg8Y29sIHN0eWxlPXsgc3R5bGUgfSBrZXk9eyBpIH0gY2xhc3NOYW1lPXsgY29sdW1uLmNsYXNzTmFtZSB9PjwvY29sPik7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGNvbGdyb3VwIHJlZj0naGVhZGVyJz5cbiAgICAgICAgeyBzZWxlY3RSb3dIZWFkZXIgfXsgdGhlYWRlciB9XG4gICAgICA8L2NvbGdyb3VwPlxuICAgICk7XG4gIH1cblxuICBoYW5kbGVSb3dNb3VzZU91dCA9IHJvd0luZGV4ID0+IHtcbiAgICBjb25zdCB0YXJnZXRSb3cgPSB0aGlzLnByb3BzLmRhdGFbcm93SW5kZXhdO1xuICAgIHRoaXMucHJvcHMub25Sb3dNb3VzZU91dCh0YXJnZXRSb3cpO1xuICB9XG5cbiAgaGFuZGxlUm93TW91c2VPdmVyID0gcm93SW5kZXggPT4ge1xuICAgIGNvbnN0IHRhcmdldFJvdyA9IHRoaXMucHJvcHMuZGF0YVtyb3dJbmRleF07XG4gICAgdGhpcy5wcm9wcy5vblJvd01vdXNlT3Zlcih0YXJnZXRSb3cpO1xuICB9XG5cbiAgaGFuZGxlUm93Q2xpY2sgPSByb3dJbmRleCA9PiB7XG4gICAgbGV0IHNlbGVjdGVkUm93O1xuICAgIGNvbnN0IHsgZGF0YSwgb25Sb3dDbGljayB9ID0gdGhpcy5wcm9wcztcbiAgICBkYXRhLmZvckVhY2goKHJvdywgaSkgPT4ge1xuICAgICAgaWYgKGkgPT09IHJvd0luZGV4IC0gMSkge1xuICAgICAgICBzZWxlY3RlZFJvdyA9IHJvdztcbiAgICAgIH1cbiAgICB9KTtcbiAgICBvblJvd0NsaWNrKHNlbGVjdGVkUm93KTtcbiAgfVxuXG4gIGhhbmRsZVNlbGVjdFJvdyA9IChyb3dJbmRleCwgaXNTZWxlY3RlZCkgPT4ge1xuICAgIGxldCBzZWxlY3RlZFJvdztcbiAgICBjb25zdCB7IGRhdGEsIG9uU2VsZWN0Um93IH0gPSB0aGlzLnByb3BzO1xuICAgIGRhdGEuZm9yRWFjaCgocm93LCBpKSA9PiB7XG4gICAgICBpZiAoaSA9PT0gcm93SW5kZXggLSAxKSB7XG4gICAgICAgIHNlbGVjdGVkUm93ID0gcm93O1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgb25TZWxlY3RSb3coc2VsZWN0ZWRSb3csIGlzU2VsZWN0ZWQpO1xuICB9XG5cbiAgaGFuZGxlU2VsZWN0Um93Q29sdW1DaGFuZ2UgPSBlID0+IHtcbiAgICBpZiAoIXRoaXMucHJvcHMuc2VsZWN0Um93LmNsaWNrVG9TZWxlY3QgfHxcbiAgICAgICF0aGlzLnByb3BzLnNlbGVjdFJvdy5jbGlja1RvU2VsZWN0QW5kRWRpdENlbGwpIHtcbiAgICAgIHRoaXMuaGFuZGxlU2VsZWN0Um93KFxuICAgICAgICBlLmN1cnJlbnRUYXJnZXQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnJvd0luZGV4ICsgMSxcbiAgICAgICAgZS5jdXJyZW50VGFyZ2V0LmNoZWNrZWQpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUVkaXRDZWxsID0gKHJvd0luZGV4LCBjb2x1bW5JbmRleCkgPT4ge1xuICAgIHRoaXMuZWRpdGluZyA9IHRydWU7XG4gICAgaWYgKHRoaXMuX2lzU2VsZWN0Um93RGVmaW5lZCgpKSB7XG4gICAgICBjb2x1bW5JbmRleC0tO1xuICAgICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0Um93LmhpZGVTZWxlY3RDb2x1bW4pIGNvbHVtbkluZGV4Kys7XG4gICAgfVxuICAgIHJvd0luZGV4LS07XG4gICAgY29uc3Qgc3RhdGVPYmogPSB7XG4gICAgICBjdXJyRWRpdENlbGw6IHtcbiAgICAgICAgcmlkOiByb3dJbmRleCxcbiAgICAgICAgY2lkOiBjb2x1bW5JbmRleFxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5wcm9wcy5zZWxlY3RSb3cuY2xpY2tUb1NlbGVjdEFuZEVkaXRDZWxsKSB7XG4gICAgICB0aGlzLmhhbmRsZVNlbGVjdFJvdyhyb3dJbmRleCArIDEsIHRydWUpO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKHN0YXRlT2JqKTtcbiAgfVxuXG4gIGhhbmRsZUNvbXBsZXRlRWRpdENlbGwgPSAobmV3VmFsLCByb3dJbmRleCwgY29sdW1uSW5kZXgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHsgY3VyckVkaXRDZWxsOiBudWxsIH0pO1xuICAgIGlmIChuZXdWYWwgIT09IG51bGwpIHtcbiAgICAgIHRoaXMucHJvcHMuY2VsbEVkaXQuX19vbkNvbXBsZXRlRWRpdF9fKG5ld1ZhbCwgcm93SW5kZXgsIGNvbHVtbkluZGV4KTtcbiAgICB9XG4gIH1cblxuICByZW5kZXJTZWxlY3RSb3dDb2x1bW4oc2VsZWN0ZWQpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5zZWxlY3RSb3cubW9kZSA9PT0gQ29uc3QuUk9XX1NFTEVDVF9TSU5HTEUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUYWJsZUNvbHVtbiBkYXRhQWxpZ249J2NlbnRlcic+XG4gICAgICAgICAgPGlucHV0IHR5cGU9J3JhZGlvJyBjaGVja2VkPXsgc2VsZWN0ZWQgfVxuICAgICAgICAgICAgb25DaGFuZ2U9eyB0aGlzLmhhbmRsZVNlbGVjdFJvd0NvbHVtQ2hhbmdlIH0vPlxuICAgICAgICA8L1RhYmxlQ29sdW1uPlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFRhYmxlQ29sdW1uIGRhdGFBbGlnbj0nY2VudGVyJz5cbiAgICAgICAgICA8aW5wdXQgdHlwZT0nY2hlY2tib3gnIGNoZWNrZWQ9eyBzZWxlY3RlZCB9XG4gICAgICAgICAgb25DaGFuZ2U9eyB0aGlzLmhhbmRsZVNlbGVjdFJvd0NvbHVtQ2hhbmdlIH0vPlxuICAgICAgICA8L1RhYmxlQ29sdW1uPlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBfaXNTZWxlY3RSb3dEZWZpbmVkKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnNlbGVjdFJvdy5tb2RlID09PSBDb25zdC5ST1dfU0VMRUNUX1NJTkdMRSB8fFxuICAgICAgICAgIHRoaXMucHJvcHMuc2VsZWN0Um93Lm1vZGUgPT09IENvbnN0LlJPV19TRUxFQ1RfTVVMVEk7XG4gIH1cbn1cblRhYmxlQm9keS5wcm9wVHlwZXMgPSB7XG4gIGRhdGE6IFByb3BUeXBlcy5hcnJheSxcbiAgY29sdW1uczogUHJvcFR5cGVzLmFycmF5LFxuICBzdHJpcGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgYm9yZGVyZWQ6IFByb3BUeXBlcy5ib29sLFxuICBob3ZlcjogUHJvcFR5cGVzLmJvb2wsXG4gIGNvbmRlbnNlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGtleUZpZWxkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzZWxlY3RlZFJvd0tleXM6IFByb3BUeXBlcy5hcnJheSxcbiAgb25Sb3dDbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uU2VsZWN0Um93OiBQcm9wVHlwZXMuZnVuYyxcbiAgbm9EYXRhVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3Rcbn07XG5leHBvcnQgZGVmYXVsdCBUYWJsZUJvZHk7XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9UYWJsZUJvZHkuanNcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9"); -},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar TableRow = (function (_Component) {\n _inherits(TableRow, _Component);\n\n function TableRow(props) {\n var _this = this;\n\n _classCallCheck(this, TableRow);\n\n _get(Object.getPrototypeOf(TableRow.prototype), 'constructor', this).call(this, props);\n\n this.rowClick = function (e) {\n if (e.target.tagName !== 'INPUT' && e.target.tagName !== 'SELECT' && e.target.tagName !== 'TEXTAREA') {\n (function () {\n var rowIndex = e.currentTarget.rowIndex + 1;\n if (_this.props.selectRow) {\n if (_this.props.selectRow.clickToSelect) {\n _this.props.onSelectRow(rowIndex, !_this.props.isSelected);\n } else if (_this.props.selectRow.clickToSelectAndEditCell) {\n _this.clickNum++;\n /** if clickToSelectAndEditCell is enabled,\n * there should be a delay to prevent a selection changed when\n * user dblick to edit cell on same row but different cell\n **/\n setTimeout(function () {\n if (_this.clickNum === 1) {\n _this.props.onSelectRow(rowIndex, !_this.props.isSelected);\n }\n _this.clickNum = 0;\n }, 200);\n }\n }\n if (_this.props.onRowClick) _this.props.onRowClick(rowIndex);\n })();\n }\n };\n\n this.rowMouseOut = function (e) {\n if (_this.props.onRowMouseOut) {\n _this.props.onRowMouseOut(e.currentTarget.rowIndex);\n }\n };\n\n this.rowMouseOver = function (e) {\n if (_this.props.onRowMouseOver) {\n _this.props.onRowMouseOver(e.currentTarget.rowIndex);\n }\n };\n\n this.clickNum = 0;\n }\n\n _createClass(TableRow, [{\n key: 'render',\n value: function render() {\n this.clickNum = 0;\n var trCss = {\n style: {\n backgroundColor: this.props.isSelected ? this.props.selectRow.bgColor : null\n },\n className: (this.props.isSelected && this.props.selectRow.className ? this.props.selectRow.className : '') + (this.props.className || '')\n };\n\n if (this.props.selectRow && (this.props.selectRow.clickToSelect || this.props.selectRow.clickToSelectAndEditCell) || this.props.onRowClick) {\n return _react2['default'].createElement(\n 'tr',\n _extends({}, trCss, {\n onMouseOver: this.rowMouseOver,\n onMouseOut: this.rowMouseOut,\n onClick: this.rowClick }),\n this.props.children\n );\n } else {\n return _react2['default'].createElement(\n 'tr',\n trCss,\n this.props.children\n );\n }\n }\n }]);\n\n return TableRow;\n})(_react.Component);\n\nTableRow.propTypes = {\n isSelected: _react.PropTypes.bool,\n enableCellEdit: _react.PropTypes.bool,\n onRowClick: _react.PropTypes.func,\n onSelectRow: _react.PropTypes.func,\n onRowMouseOut: _react.PropTypes.func,\n onRowMouseOver: _react.PropTypes.func\n};\nTableRow.defaultProps = {\n onRowClick: undefined\n};\nexports['default'] = TableRow;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvVGFibGVSb3cuanM/MDNjYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7aUNBQTRDLENBQU87Ozs7SUFFN0MsUUFBUTtZQUFSLFFBQVE7O0FBRUQsV0FGUCxRQUFRLENBRUEsS0FBSyxFQUFFOzs7MEJBRmYsUUFBUTs7QUFHViwrQkFIRSxRQUFRLDZDQUdKLEtBQUssRUFBRTs7U0FJZixRQUFRLEdBQUcsV0FBQyxFQUFJO0FBQ2QsVUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxPQUFPLElBQzVCLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxLQUFLLFFBQVEsSUFDN0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssVUFBVSxFQUFFOztBQUNuQyxjQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDOUMsY0FBSSxNQUFLLEtBQUssQ0FBQyxTQUFTLEVBQUU7QUFDeEIsZ0JBQUksTUFBSyxLQUFLLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRTtBQUN0QyxvQkFBSyxLQUFLLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQUssS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQzFELE1BQU0sSUFBSSxNQUFLLEtBQUssQ0FBQyxTQUFTLENBQUMsd0JBQXdCLEVBQUU7QUFDeEQsb0JBQUssUUFBUSxFQUFFLENBQUM7Ozs7O0FBS2hCLHdCQUFVLENBQUMsWUFBTTtBQUNmLG9CQUFJLE1BQUssUUFBUSxLQUFLLENBQUMsRUFBRTtBQUN2Qix3QkFBSyxLQUFLLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQUssS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUMxRDtBQUNELHNCQUFLLFFBQVEsR0FBRyxDQUFDLENBQUM7ZUFDbkIsRUFBRSxHQUFHLENBQUMsQ0FBQzthQUNUO1dBQ0Y7QUFDRCxjQUFJLE1BQUssS0FBSyxDQUFDLFVBQVUsRUFBRSxNQUFLLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7O09BQzVEO0tBQ0Y7O1NBRUQsV0FBVyxHQUFHLFdBQUMsRUFBSTtBQUNqQixVQUFJLE1BQUssS0FBSyxDQUFDLGFBQWEsRUFBRTtBQUM1QixjQUFLLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztPQUNwRDtLQUNGOztTQUVELFlBQVksR0FBRyxXQUFDLEVBQUk7QUFDbEIsVUFBSSxNQUFLLEtBQUssQ0FBQyxjQUFjLEVBQUU7QUFDN0IsY0FBSyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7T0FDckQ7S0FDRjs7QUF2Q0MsUUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7R0FDbkI7O2VBTEcsUUFBUTs7V0E2Q04sa0JBQUc7QUFDUCxVQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUNsQixVQUFNLEtBQUssR0FBRztBQUNaLGFBQUssRUFBRTtBQUNMLHlCQUFlLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLElBQUk7U0FDN0U7QUFDRCxpQkFBUyxFQUFFLENBQ1QsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUN2RCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsRUFBRSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztPQUN0RSxDQUFDOztBQUVGLFVBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsYUFBYSxJQUM3RCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFO0FBQ3pFLGVBQ0U7O3VCQUFTLEtBQUs7QUFDVix1QkFBVyxFQUFHLElBQUksQ0FBQyxZQUFjO0FBQ2pDLHNCQUFVLEVBQUcsSUFBSSxDQUFDLFdBQWE7QUFDL0IsbUJBQU8sRUFBRyxJQUFJLENBQUMsUUFBVTtVQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTtTQUFPLENBQzFEO09BQ0gsTUFBTTtBQUNMLGVBQ0U7O1VBQVMsS0FBSztVQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTtTQUFPLENBQzdDO09BQ0g7S0FDRjs7O1NBckVHLFFBQVE7OztBQXVFZCxRQUFRLENBQUMsU0FBUyxHQUFHO0FBQ25CLFlBQVUsRUFBRSxpQkFBVSxJQUFJO0FBQzFCLGdCQUFjLEVBQUUsaUJBQVUsSUFBSTtBQUM5QixZQUFVLEVBQUUsaUJBQVUsSUFBSTtBQUMxQixhQUFXLEVBQUUsaUJBQVUsSUFBSTtBQUMzQixlQUFhLEVBQUUsaUJBQVUsSUFBSTtBQUM3QixnQkFBYyxFQUFFLGlCQUFVLElBQUk7Q0FDL0IsQ0FBQztBQUNGLFFBQVEsQ0FBQyxZQUFZLEdBQUc7QUFDdEIsWUFBVSxFQUFFLFNBQVM7Q0FDdEIsQ0FBQztxQkFDYSxRQUFRIiwiZmlsZSI6IjkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBQcm9wVHlwZXMgfSBmcm9tICdyZWFjdCc7XG5cbmNsYXNzIFRhYmxlUm93IGV4dGVuZHMgQ29tcG9uZW50IHtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmNsaWNrTnVtID0gMDtcbiAgfVxuXG4gIHJvd0NsaWNrID0gZSA9PiB7XG4gICAgaWYgKGUudGFyZ2V0LnRhZ05hbWUgIT09ICdJTlBVVCcgJiZcbiAgICAgICAgZS50YXJnZXQudGFnTmFtZSAhPT0gJ1NFTEVDVCcgJiZcbiAgICAgICAgZS50YXJnZXQudGFnTmFtZSAhPT0gJ1RFWFRBUkVBJykge1xuICAgICAgY29uc3Qgcm93SW5kZXggPSBlLmN1cnJlbnRUYXJnZXQucm93SW5kZXggKyAxO1xuICAgICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0Um93KSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnNlbGVjdFJvdy5jbGlja1RvU2VsZWN0KSB7XG4gICAgICAgICAgdGhpcy5wcm9wcy5vblNlbGVjdFJvdyhyb3dJbmRleCwgIXRoaXMucHJvcHMuaXNTZWxlY3RlZCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5zZWxlY3RSb3cuY2xpY2tUb1NlbGVjdEFuZEVkaXRDZWxsKSB7XG4gICAgICAgICAgdGhpcy5jbGlja051bSsrO1xuICAgICAgICAgIC8qKiBpZiBjbGlja1RvU2VsZWN0QW5kRWRpdENlbGwgaXMgZW5hYmxlZCxcbiAgICAgICAgICAgKiAgdGhlcmUgc2hvdWxkIGJlIGEgZGVsYXkgdG8gcHJldmVudCBhIHNlbGVjdGlvbiBjaGFuZ2VkIHdoZW5cbiAgICAgICAgICAgKiAgdXNlciBkYmxpY2sgdG8gZWRpdCBjZWxsIG9uIHNhbWUgcm93IGJ1dCBkaWZmZXJlbnQgY2VsbFxuICAgICAgICAgICoqL1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xpY2tOdW0gPT09IDEpIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vblNlbGVjdFJvdyhyb3dJbmRleCwgIXRoaXMucHJvcHMuaXNTZWxlY3RlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNsaWNrTnVtID0gMDtcbiAgICAgICAgICB9LCAyMDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5wcm9wcy5vblJvd0NsaWNrKSB0aGlzLnByb3BzLm9uUm93Q2xpY2socm93SW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHJvd01vdXNlT3V0ID0gZSA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMub25Sb3dNb3VzZU91dCkge1xuICAgICAgdGhpcy5wcm9wcy5vblJvd01vdXNlT3V0KGUuY3VycmVudFRhcmdldC5yb3dJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgcm93TW91c2VPdmVyID0gZSA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMub25Sb3dNb3VzZU92ZXIpIHtcbiAgICAgIHRoaXMucHJvcHMub25Sb3dNb3VzZU92ZXIoZS5jdXJyZW50VGFyZ2V0LnJvd0luZGV4KTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5jbGlja051bSA9IDA7XG4gICAgY29uc3QgdHJDc3MgPSB7XG4gICAgICBzdHlsZToge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoaXMucHJvcHMuaXNTZWxlY3RlZCA/IHRoaXMucHJvcHMuc2VsZWN0Um93LmJnQ29sb3IgOiBudWxsXG4gICAgICB9LFxuICAgICAgY2xhc3NOYW1lOiAoXG4gICAgICAgIHRoaXMucHJvcHMuaXNTZWxlY3RlZCAmJiB0aGlzLnByb3BzLnNlbGVjdFJvdy5jbGFzc05hbWUgP1xuICAgICAgICB0aGlzLnByb3BzLnNlbGVjdFJvdy5jbGFzc05hbWUgOiAnJykgKyAodGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgJycpXG4gICAgfTtcblxuICAgIGlmICh0aGlzLnByb3BzLnNlbGVjdFJvdyAmJiAodGhpcy5wcm9wcy5zZWxlY3RSb3cuY2xpY2tUb1NlbGVjdCB8fFxuICAgICAgdGhpcy5wcm9wcy5zZWxlY3RSb3cuY2xpY2tUb1NlbGVjdEFuZEVkaXRDZWxsKSB8fCB0aGlzLnByb3BzLm9uUm93Q2xpY2spIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDx0ciB7IC4uLnRyQ3NzIH1cbiAgICAgICAgICAgIG9uTW91c2VPdmVyPXsgdGhpcy5yb3dNb3VzZU92ZXIgfVxuICAgICAgICAgICAgb25Nb3VzZU91dD17IHRoaXMucm93TW91c2VPdXQgfVxuICAgICAgICAgICAgb25DbGljaz17IHRoaXMucm93Q2xpY2sgfT57IHRoaXMucHJvcHMuY2hpbGRyZW4gfTwvdHI+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8dHIgeyAuLi50ckNzcyB9PnsgdGhpcy5wcm9wcy5jaGlsZHJlbiB9PC90cj5cbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5UYWJsZVJvdy5wcm9wVHlwZXMgPSB7XG4gIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICBlbmFibGVDZWxsRWRpdDogUHJvcFR5cGVzLmJvb2wsXG4gIG9uUm93Q2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICBvblNlbGVjdFJvdzogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uUm93TW91c2VPdXQ6IFByb3BUeXBlcy5mdW5jLFxuICBvblJvd01vdXNlT3ZlcjogUHJvcFR5cGVzLmZ1bmNcbn07XG5UYWJsZVJvdy5kZWZhdWx0UHJvcHMgPSB7XG4gIG9uUm93Q2xpY2s6IHVuZGVmaW5lZFxufTtcbmV4cG9ydCBkZWZhdWx0IFRhYmxlUm93O1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvVGFibGVSb3cuanNcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _Const = __webpack_require__(3);\n\nvar _Const2 = _interopRequireDefault(_Const);\n\nvar TableColumn = (function (_Component) {\n _inherits(TableColumn, _Component);\n\n function TableColumn(props) {\n var _this = this;\n\n _classCallCheck(this, TableColumn);\n\n _get(Object.getPrototypeOf(TableColumn.prototype), 'constructor', this).call(this, props);\n\n this.handleCellEdit = function (e) {\n if (_this.props.cellEdit.mode === _Const2['default'].CELL_EDIT_DBCLICK) {\n if (document.selection && document.selection.empty) {\n document.selection.empty();\n } else if (window.getSelection) {\n var sel = window.getSelection();\n sel.removeAllRanges();\n }\n }\n _this.props.onEdit(e.currentTarget.parentElement.rowIndex + 1, e.currentTarget.cellIndex);\n };\n }\n\n /* eslint no-unused-vars: [0, { \"args\": \"after-used\" }] */\n\n _createClass(TableColumn, [{\n key: 'shouldComponentUpdate',\n value: function shouldComponentUpdate(nextProps, nextState) {\n var children = this.props.children;\n\n var shouldUpdated = this.props.width !== nextProps.width || this.props.className !== nextProps.className || this.props.hidden !== nextProps.hidden || this.props.dataAlign !== nextProps.dataAlign || typeof children !== typeof nextProps.children || ('' + this.props.onEdit).toString() !== ('' + nextProps.onEdit).toString();\n\n if (shouldUpdated) {\n return shouldUpdated;\n }\n\n if (typeof children === 'object' && children !== null && children.props !== null) {\n if (children.props.type === 'checkbox' || children.props.type === 'radio') {\n shouldUpdated = shouldUpdated || children.props.type !== nextProps.children.props.type || children.props.checked !== nextProps.children.props.checked;\n } else {\n shouldUpdated = true;\n }\n } else {\n shouldUpdated = shouldUpdated || children !== nextProps.children;\n }\n\n if (shouldUpdated) {\n return shouldUpdated;\n }\n\n if (!(this.props.cellEdit && nextProps.cellEdit)) {\n return false;\n } else {\n return shouldUpdated || this.props.cellEdit.mode !== nextProps.cellEdit.mode;\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var tdStyle = {\n textAlign: this.props.dataAlign,\n display: this.props.hidden ? 'none' : null\n };\n\n var opts = {};\n if (this.props.cellEdit) {\n if (this.props.cellEdit.mode === _Const2['default'].CELL_EDIT_CLICK) {\n opts.onClick = this.handleCellEdit;\n } else if (this.props.cellEdit.mode === _Const2['default'].CELL_EDIT_DBCLICK) {\n opts.onDoubleClick = this.handleCellEdit;\n }\n }\n return _react2['default'].createElement(\n 'td',\n _extends({ style: tdStyle, className: this.props.className }, opts),\n this.props.children\n );\n }\n }]);\n\n return TableColumn;\n})(_react.Component);\n\nTableColumn.propTypes = {\n dataAlign: _react.PropTypes.string,\n hidden: _react.PropTypes.bool,\n className: _react.PropTypes.string,\n children: _react.PropTypes.node\n};\n\nTableColumn.defaultProps = {\n dataAlign: 'left',\n hidden: false,\n className: ''\n};\nexports['default'] = TableColumn;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvVGFibGVDb2x1bW4uanM/YjNmMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7aUNBQTRDLENBQU87Ozs7aUNBQ2pDLENBQVM7Ozs7SUFFckIsV0FBVztZQUFYLFdBQVc7O0FBRUosV0FGUCxXQUFXLENBRUgsS0FBSyxFQUFFOzs7MEJBRmYsV0FBVzs7QUFHYiwrQkFIRSxXQUFXLDZDQUdQLEtBQUssRUFBRTs7U0F3Q2YsY0FBYyxHQUFHLFdBQUMsRUFBSTtBQUNwQixVQUFJLE1BQUssS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssbUJBQU0saUJBQWlCLEVBQUU7QUFDeEQsWUFBSSxRQUFRLENBQUMsU0FBUyxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFO0FBQ2xELGtCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQzVCLE1BQU0sSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFO0FBQzlCLGNBQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNsQyxhQUFHLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDdkI7T0FDRjtBQUNELFlBQUssS0FBSyxDQUFDLE1BQU0sQ0FDZixDQUFDLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUMxQyxDQUFDLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQzlCO0dBbkRBOzs7O2VBSkcsV0FBVzs7V0FNTSwrQkFBQyxTQUFTLEVBQUUsU0FBUyxFQUFFO1VBQ2xDLFFBQVEsR0FBSyxJQUFJLENBQUMsS0FBSyxDQUF2QixRQUFROztBQUNoQixVQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsS0FBSyxJQUNuRCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsU0FBUyxJQUM1QyxJQUFJLENBQUMs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QUFNO0FBQ2pCLFFBQU0sRUFBRSxLQUFLO0FBQ2IsV0FBUyxFQUFFLEVBQUU7Q0FDZCxDQUFDO3FCQUNhLFdBQVciLCJmaWxlIjoiMTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBQcm9wVHlwZXMgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi9Db25zdCc7XG5cbmNsYXNzIFRhYmxlQ29sdW1uIGV4dGVuZHMgQ29tcG9uZW50IHtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICAvKiBlc2xpbnQgbm8tdW51c2VkLXZhcnM6IFswLCB7IFwiYXJnc1wiOiBcImFmdGVyLXVzZWRcIiB9XSAqL1xuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcbiAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSB0aGlzLnByb3BzO1xuICAgIGxldCBzaG91bGRVcGRhdGVkID0gdGhpcy5wcm9wcy53aWR0aCAhPT0gbmV4dFByb3BzLndpZHRoXG4gICAgICB8fCB0aGlzLnByb3BzLmNsYXNzTmFtZSAhPT0gbmV4dFByb3BzLmNsYXNzTmFtZVxuICAgICAgfHwgdGhpcy5wcm9wcy5oaWRkZW4gIT09IG5leHRQcm9wcy5oaWRkZW5cbiAgICAgIHx8IHRoaXMucHJvcHMuZGF0YUFsaWduICE9PSBuZXh0UHJvcHMuZGF0YUFsaWduXG4gICAgICB8fCB0eXBlb2YgY2hpbGRyZW4gIT09IHR5cGVvZiBuZXh0UHJvcHMuY2hpbGRyZW5cbiAgICAgIHx8ICgnJyArIHRoaXMucHJvcHMub25FZGl0KS50b1N0cmluZygpICE9PSAoJycgKyBuZXh0UHJvcHMub25FZGl0KS50b1N0cmluZygpO1xuXG4gICAgaWYgKHNob3VsZFVwZGF0ZWQpIHtcbiAgICAgIHJldHVybiBzaG91bGRVcGRhdGVkO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2hpbGRyZW4gPT09ICdvYmplY3QnICYmIGNoaWxkcmVuICE9PSBudWxsICYmIGNoaWxkcmVuLnByb3BzICE9PSBudWxsKSB7XG4gICAgICBpZiAoY2hpbGRyZW4ucHJvcHMudHlwZSA9PT0gJ2NoZWNrYm94JyB8fCBjaGlsZHJlbi5wcm9wcy50eXBlID09PSAncmFkaW8nKSB7XG4gICAgICAgIHNob3VsZFVwZGF0ZWQgPSBzaG91bGRVcGRhdGVkIHx8XG4gICAgICAgICAgY2hpbGRyZW4ucHJvcHMudHlwZSAhPT0gbmV4dFByb3BzLmNoaWxkcmVuLnByb3BzLnR5cGUgfHxcbiAgICAgICAgICBjaGlsZHJlbi5wcm9wcy5jaGVja2VkICE9PSBuZXh0UHJvcHMuY2hpbGRyZW4ucHJvcHMuY2hlY2tlZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNob3VsZFVwZGF0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzaG91bGRVcGRhdGVkID0gc2hvdWxkVXBkYXRlZCB8fCBjaGlsZHJlbiAhPT0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICAgIH1cblxuICAgIGlmIChzaG91bGRVcGRhdGVkKSB7XG4gICAgICByZXR1cm4gc2hvdWxkVXBkYXRlZDtcbiAgICB9XG5cbiAgICBpZiAoISh0aGlzLnByb3BzLmNlbGxFZGl0ICYmIG5leHRQcm9wcy5jZWxsRWRpdCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHNob3VsZFVwZGF0ZWRcbiAgICAgICAgfHwgdGhpcy5wcm9wcy5jZWxsRWRpdC5tb2RlICE9PSBuZXh0UHJvcHMuY2VsbEVkaXQubW9kZTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVDZWxsRWRpdCA9IGUgPT4ge1xuICAgIGlmICh0aGlzLnByb3BzLmNlbGxFZGl0Lm1vZGUgPT09IENvbnN0LkNFTExfRURJVF9EQkNMSUNLKSB7XG4gICAgICBpZiAoZG9jdW1lbnQuc2VsZWN0aW9uICYmIGRvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSkge1xuICAgICAgICBkb2N1bWVudC5zZWxlY3Rpb24uZW1wdHkoKTtcbiAgICAgIH0gZWxzZSBpZiAod2luZG93LmdldFNlbGVjdGlvbikge1xuICAgICAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5wcm9wcy5vbkVkaXQoXG4gICAgICBlLmN1cnJlbnRUYXJnZXQucGFyZW50RWxlbWVudC5yb3dJbmRleCArIDEsXG4gICAgICBlLmN1cnJlbnRUYXJnZXQuY2VsbEluZGV4KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB0ZFN0eWxlID0ge1xuICAgICAgdGV4dEFsaWduOiB0aGlzLnByb3BzLmRhdGFBbGlnbixcbiAgICAgIGRpc3BsYXk6IHRoaXMucHJvcHMuaGlkZGVuID8gJ25vbmUnIDogbnVsbFxuICAgIH07XG5cbiAgICBjb25zdCBvcHRzID0ge307XG4gICAgaWYgKHRoaXMucHJvcHMuY2VsbEVkaXQpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLmNlbGxFZGl0Lm1vZGUgPT09IENvbnN0LkNFTExfRURJVF9DTElDSykge1xuICAgICAgICBvcHRzLm9uQ2xpY2sgPSB0aGlzLmhhbmRsZUNlbGxFZGl0O1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmNlbGxFZGl0Lm1vZGUgPT09IENvbnN0LkNFTExfRURJVF9EQkNMSUNLKSB7XG4gICAgICAgIG9wdHMub25Eb3VibGVDbGljayA9IHRoaXMuaGFuZGxlQ2VsbEVkaXQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8dGQgc3R5bGU9eyB0ZFN0eWxlIH0gY2xhc3NOYW1lPXsgdGhpcy5wcm9wcy5jbGFzc05hbWUgfSB7IC4uLm9wdHMgfT5cbiAgICAgICAgeyB0aGlzLnByb3BzLmNoaWxkcmVuIH1cbiAgICAgIDwvdGQ+XG4gICAgKTtcbiAgfVxufVxuVGFibGVDb2x1bW4ucHJvcFR5cGVzID0ge1xuICBkYXRhQWxpZ246IFByb3BUeXBlcy5zdHJpbmcsXG4gIGhpZGRlbjogUHJvcFR5cGVzLmJvb2wsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlXG59O1xuXG5UYWJsZUNvbHVtbi5kZWZhdWx0UHJvcHMgPSB7XG4gIGRhdGFBbGlnbjogJ2xlZnQnLFxuICBoaWRkZW46IGZhbHNlLFxuICBjbGFzc05hbWU6ICcnXG59O1xuZXhwb3J0IGRlZmF1bHQgVGFibGVDb2x1bW47XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9UYWJsZUNvbHVtbi5qc1xuICoqLyJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _Editor = __webpack_require__(12);\n\nvar _Editor2 = _interopRequireDefault(_Editor);\n\nvar _NotificationJs = __webpack_require__(13);\n\nvar _NotificationJs2 = _interopRequireDefault(_NotificationJs);\n\nvar _classnames = __webpack_require__(6);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar TableEditColumn = (function (_Component) {\n _inherits(TableEditColumn, _Component);\n\n function TableEditColumn(props) {\n var _this = this;\n\n _classCallCheck(this, TableEditColumn);\n\n _get(Object.getPrototypeOf(TableEditColumn.prototype), 'constructor', this).call(this, props);\n\n this.handleKeyPress = function (e) {\n if (e.keyCode === 13) {\n // Pressed ENTER\n var value = e.currentTarget.type === 'checkbox' ? _this._getCheckBoxValue(e) : e.currentTarget.value;\n\n if (!_this.validator(value)) {\n return;\n }\n _this.props.completeEdit(value, _this.props.rowIndex, _this.props.colIndex);\n } else if (e.keyCode === 27) {\n _this.props.completeEdit(null, _this.props.rowIndex, _this.props.colIndex);\n }\n };\n\n this.handleBlur = function (e) {\n if (_this.props.blurToSave) {\n var value = e.currentTarget.type === 'checkbox' ? _this._getCheckBoxValue(e) : e.currentTarget.value;\n if (!_this.validator(value)) {\n return;\n }\n _this.props.completeEdit(value, _this.props.rowIndex, _this.props.colIndex);\n }\n };\n\n this.timeouteClear = 0;\n this.state = {\n shakeEditor: false\n };\n }\n\n _createClass(TableEditColumn, [{\n key: 'validator',\n value: function validator(value) {\n var ts = this;\n if (ts.props.editable.validator) {\n var valid = ts.props.editable.validator(value);\n if (!valid) {\n ts.refs.notifier.notice('error', valid, 'Pressed ESC can cancel');\n var input = ts.refs.inputRef;\n // animate input\n ts.clearTimeout();\n ts.setState({ shakeEditor: true });\n ts.timeouteClear = setTimeout(function () {\n ts.setState({ shakeEditor: false });\n }, 300);\n input.focus();\n return false;\n }\n }\n return true;\n }\n }, {\n key: 'clearTimeout',\n value: (function (_clearTimeout) {\n function clearTimeout() {\n return _clearTimeout.apply(this, arguments);\n }\n\n clearTimeout.toString = function () {\n return _clearTimeout.toString();\n };\n\n return clearTimeout;\n })(function () {\n if (this.timeouteClear !== 0) {\n clearTimeout(this.timeouteClear);\n this.timeouteClear = 0;\n }\n })\n }, {\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.refs.inputRef.focus();\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.clearTimeout();\n }\n }, {\n key: 'render',\n value: function render() {\n var _props = this.props;\n var editable = _props.editable;\n var format = _props.format;\n var children = _props.children;\n var shakeEditor = this.state.shakeEditor;\n\n var attr = {\n ref: 'inputRef',\n onKeyDown: this.handleKeyPress,\n onBlur: this.handleBlur\n };\n // put placeholder if exist\n editable.placeholder && (attr.placeholder = editable.placeholder);\n\n var editorClass = (0, _classnames2['default'])({ 'animated': shakeEditor, 'shake': shakeEditor });\n return _react2['default'].createElement(\n 'td',\n { ref: 'td', style: { position: 'relative' } },\n (0, _Editor2['default'])(editable, attr, format, editorClass, children || ''),\n _react2['default'].createElement(_NotificationJs2['default'], { ref: 'notifier' })\n );\n }\n }, {\n key: '_getCheckBoxValue',\n value: function _getCheckBoxValue(e) {\n var value = '';\n var values = e.currentTarget.value.split(':');\n value = e.currentTarget.checked ? values[0] : values[1];\n return value;\n }\n }]);\n\n return TableEditColumn;\n})(_react.Component);\n\nTableEditColumn.propTypes = {\n completeEdit: _react.PropTypes.func,\n rowIndex: _react.PropTypes.number,\n colIndex: _react.PropTypes.number,\n blurToSave: _react.PropTypes.bool,\n editable: _react.PropTypes.oneOfType([_react.PropTypes.bool, _react.PropTypes.object]),\n format: _react.PropTypes.oneOfType([_react.PropTypes.bool, _react.PropTypes.func]),\n children: _react.PropTypes.node\n};\n\nexports['default'] = TableEditColumn;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvVGFibGVFZGl0Q29sdW1uLmpzPzdiMWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztpQ0FBNEMsQ0FBTzs7OztrQ0FDaEMsRUFBVTs7OzswQ0FDUixFQUFtQjs7OztzQ0FDbkIsQ0FBWTs7OztJQUUzQixlQUFlO1lBQWYsZUFBZTs7QUFDUixXQURQLGVBQWUsQ0FDUCxLQUFLLEVBQUU7OzswQkFEZixlQUFlOztBQUVqQiwrQkFGRSxlQUFlLDZDQUVYLEtBQUssRUFBRTs7U0FPZixjQUFjLEdBQUcsV0FBQyxFQUFJO0FBQ3BCLFVBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxFQUFFLEVBQUU7O0FBRXBCLFlBQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxLQUFLLFVBQVUsR0FDakMsTUFBSyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQzs7QUFFbEUsWUFBSSxDQUFDLE1BQUssU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzFCLGlCQUFPO1NBQ1I7QUFDRCxjQUFLLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLE1BQUssS0FBSyxDQUFDLFFBQVEsRUFBRSxNQUFLLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztPQUMxRSxNQUFNLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxFQUFFLEVBQUU7QUFDM0IsY0FBSyxLQUFLLENBQUMsWUFBWSxDQUNyQixJQUFJLEVBQUUsTUFBSyxLQUFLLENBQUMsUUFBUSxFQUFFLE1BQUssS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO09BQ25EO0tBQ0Y7O1NBRUQsVUFBVSxHQUFHLFdBQUMsRUFBSTtBQUNoQixVQUFJLE1BQUssS0FBSyxDQUFDLFVBQVUsRUFBRTtBQUN6QixZQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksS0FBSyxVQUFVLEdBQ2pDLE1BQUss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QUUsQ0FBQztRQUM3RCxnRUFBVSxHQUFHLEVBQUMsVUFBVSxHQUFFO09BQ3ZCLENBQ0w7S0FDSDs7O1dBRWdCLDJCQUFDLENBQUMsRUFBRTtBQUNuQixVQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDZixVQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEQsV0FBSyxHQUFHLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsYUFBTyxLQUFLLENBQUM7S0FDZDs7O1NBL0ZHLGVBQWU7OztBQWtHckIsZUFBZSxDQUFDLFNBQVMsR0FBRztBQUMxQixjQUFZLEVBQUUsaUJBQVUsSUFBSTtBQUM1QixVQUFRLEVBQUUsaUJBQVUsTUFBTTtBQUMxQixVQUFRLEVBQUUsaUJBQVUsTUFBTTtBQUMxQixZQUFVLEVBQUUsaUJBQVUsSUFBSTtBQUMxQixVQUFRLEVBQUUsaUJBQVUsU0FBUyxDQUFDLENBQUUsaUJBQVUsSUFBSSxFQUFFLGlCQUFVLE1BQU0sQ0FBRSxDQUFDO0FBQ25FLFFBQU0sRUFBRSxpQkFBVSxTQUFTLENBQUMsQ0FBRSxpQkFBVSxJQUFJLEVBQUUsaUJBQVUsSUFBSSxDQUFFLENBQUM7QUFDL0QsVUFBUSxFQUFFLGlCQUFVLElBQUk7Q0FDekIsQ0FBQzs7cUJBR2EsZUFBZSIsImZpbGUiOiIxMS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFByb3BUeXBlcyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBlZGl0b3IgZnJvbSAnLi9FZGl0b3InO1xuaW1wb3J0IE5vdGlmaWVyIGZyb20gJy4vTm90aWZpY2F0aW9uLmpzJztcbmltcG9ydCBjbGFzc1NldCBmcm9tICdjbGFzc25hbWVzJztcblxuY2xhc3MgVGFibGVFZGl0Q29sdW1uIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy50aW1lb3V0ZUNsZWFyID0gMDtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgc2hha2VFZGl0b3I6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGhhbmRsZUtleVByZXNzID0gZSA9PiB7XG4gICAgaWYgKGUua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgIC8vIFByZXNzZWQgRU5URVJcbiAgICAgIGNvbnN0IHZhbHVlID0gZS5jdXJyZW50VGFyZ2V0LnR5cGUgPT09ICdjaGVja2JveCcgP1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2dldENoZWNrQm94VmFsdWUoZSkgOiBlLmN1cnJlbnRUYXJnZXQudmFsdWU7XG5cbiAgICAgIGlmICghdGhpcy52YWxpZGF0b3IodmFsdWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMucHJvcHMuY29tcGxldGVFZGl0KHZhbHVlLCB0aGlzLnByb3BzLnJvd0luZGV4LCB0aGlzLnByb3BzLmNvbEluZGV4KTtcbiAgICB9IGVsc2UgaWYgKGUua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgIHRoaXMucHJvcHMuY29tcGxldGVFZGl0KFxuICAgICAgICBudWxsLCB0aGlzLnByb3BzLnJvd0luZGV4LCB0aGlzLnByb3BzLmNvbEluZGV4KTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVCbHVyID0gZSA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMuYmx1clRvU2F2ZSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBlLmN1cnJlbnRUYXJnZXQudHlwZSA9PT0gJ2NoZWNrYm94JyA/XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2V0Q2hlY2tCb3hWYWx1ZShlKSA6IGUuY3VycmVudFRhcmdldC52YWx1ZTtcbiAgICAgIGlmICghdGhpcy52YWxpZGF0b3IodmFsdWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMucHJvcHMuY29tcGxldGVFZGl0KFxuICAgICAgICAgIHZhbHVlLCB0aGlzLnByb3BzLnJvd0luZGV4LCB0aGlzLnByb3BzLmNvbEluZGV4KTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0b3IodmFsdWUpIHtcbiAgICBjb25zdCB0cyA9IHRoaXM7XG4gICAgaWYgKHRzLnByb3BzLmVkaXRhYmxlLnZhbGlkYXRvcikge1xuICAgICAgY29uc3QgdmFsaWQgPSB0cy5wcm9wcy5lZGl0YWJsZS52YWxpZGF0b3IodmFsdWUpO1xuICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICB0cy5yZWZzLm5vdGlmaWVyLm5vdGljZSgnZXJyb3InLCB2YWxpZCwgJ1ByZXNzZWQgRVNDIGNhbiBjYW5jZWwnKTtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0cy5yZWZzLmlucHV0UmVmO1xuICAgICAgICAvLyBhbmltYXRlIGlucHV0XG4gICAgICAgIHRzLmNsZWFyVGltZW91dCgpO1xuICAgICAgICB0cy5zZXRTdGF0ZSh7IHNoYWtlRWRpdG9yOiB0cnVlIH0pO1xuICAgICAgICB0cy50aW1lb3V0ZUNsZWFyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdHMuc2V0U3RhdGUoeyBzaGFrZUVkaXRvcjogZmFsc2UgfSk7XG4gICAgICAgIH0sIDMwMCk7XG4gICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY2xlYXJUaW1lb3V0KCkge1xuICAgIGlmICh0aGlzLnRpbWVvdXRlQ2xlYXIgIT09IDApIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRlQ2xlYXIpO1xuICAgICAgdGhpcy50aW1lb3V0ZUNsZWFyID0gMDtcbiAgICB9XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5yZWZzLmlucHV0UmVmLmZvY3VzKCk7XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLmNsZWFyVGltZW91dCgpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgZWRpdGFibGUsIGZvcm1hdCwgY2hpbGRyZW4gfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBzaGFrZUVkaXRvciB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBhdHRyID0ge1xuICAgICAgcmVmOiAnaW5wdXRSZWYnLFxuICAgICAgb25LZXlEb3duOiB0aGlzLmhhbmRsZUtleVByZXNzLFxuICAgICAgb25CbHVyOiB0aGlzLmhhbmRsZUJsdXJcbiAgICB9O1xuICAgIC8vIHB1dCBwbGFjZWhvbGRlciBpZiBleGlzdFxuICAgIGVkaXRhYmxlLnBsYWNlaG9sZGVyICYmIChhdHRyLnBsYWNlaG9sZGVyID0gZWRpdGFibGUucGxhY2Vob2xkZXIpO1xuXG4gICAgY29uc3QgZWRpdG9yQ2xhc3MgPSBjbGFzc1NldCh7ICdhbmltYXRlZCc6IHNoYWtlRWRpdG9yLCAnc2hha2UnOiBzaGFrZUVkaXRvciB9KTtcbiAgICByZXR1cm4gKFxuICAgICAgPHRkIHJlZj0ndGQnIHN0eWxlPXsgeyBwb3NpdGlvbjogJ3JlbGF0aXZlJyB9IH0+XG4gICAgICAgIHsgZWRpdG9yKGVkaXRhYmxlLCBhdHRyLCBmb3JtYXQsIGVkaXRvckNsYXNzLCBjaGlsZHJlbiB8fCAnJykgfVxuICAgICAgICA8Tm90aWZpZXIgcmVmPSdub3RpZmllcicvPlxuICAgICAgPC90ZD5cbiAgICApO1xuICB9XG5cbiAgX2dldENoZWNrQm94VmFsdWUoZSkge1xuICAgIGxldCB2YWx1ZSA9ICcnO1xuICAgIGNvbnN0IHZhbHVlcyA9IGUuY3VycmVudFRhcmdldC52YWx1ZS5zcGxpdCgnOicpO1xuICAgIHZhbHVlID0gZS5jdXJyZW50VGFyZ2V0LmNoZWNrZWQgPyB2YWx1ZXNbMF0gOiB2YWx1ZXNbMV07XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5cblRhYmxlRWRpdENvbHVtbi5wcm9wVHlwZXMgPSB7XG4gIGNvbXBsZXRlRWRpdDogUHJvcFR5cGVzLmZ1bmMsXG4gIHJvd0luZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuICBjb2xJbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgYmx1clRvU2F2ZTogUHJvcFR5cGVzLmJvb2wsXG4gIGVkaXRhYmxlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFsgUHJvcFR5cGVzLmJvb2wsIFByb3BUeXBlcy5vYmplY3QgXSksXG4gIGZvcm1hdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbIFByb3BUeXBlcy5ib29sLCBQcm9wVHlwZXMuZnVuYyBdKSxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlXG59O1xuXG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlRWRpdENvbHVtbjtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL1RhYmxlRWRpdENvbHVtbi5qc1xuICoqLyJdLCJzb3VyY2VSb290IjoiIn0="); -},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar editor = function editor(editable, attr, format, editorClass, defaultValue) {\n if (editable === true || typeof editable === 'string') {\n // simple declare\n var type = editable ? 'text' : editable;\n return _react2['default'].createElement('input', _extends({}, attr, { type: type, defaultValue: defaultValue,\n className: (editorClass || '') + ' form-control editor edit-text' }));\n } else if (!editable) {\n var type = editable ? 'text' : editable;\n return _react2['default'].createElement('input', _extends({}, attr, { type: type, defaultValue: defaultValue,\n disabled: 'disabled',\n className: (editorClass || '') + ' form-control editor edit-text' }));\n } else if (editable.type) {\n // standard declare\n // put style if exist\n editable.style && (attr.style = editable.style);\n // put class if exist\n attr.className = (editorClass || '') + ' form-control editor edit-' + editable.type + (editable.className ? ' ' + editable.className : '');\n\n if (editable.type === 'select') {\n // process select input\n var options = [];\n var values = editable.options.values;\n if (Array.isArray(values)) {\n (function () {\n // only can use arrray data for options\n var rowValue = undefined;\n options = values.map(function (d, i) {\n rowValue = format ? format(d) : d;\n return _react2['default'].createElement(\n 'option',\n { key: 'option' + i, value: d },\n rowValue\n );\n });\n })();\n }\n return _react2['default'].createElement(\n 'select',\n _extends({}, attr, { defaultValue: defaultValue }),\n options\n );\n } else if (editable.type === 'textarea') {\n var _ret2 = (function () {\n // process textarea input\n // put other if exist\n editable.cols && (attr.cols = editable.cols);\n editable.rows && (attr.rows = editable.rows);\n var saveBtn = undefined;\n var keyUpHandler = attr.onKeyDown;\n if (keyUpHandler) {\n attr.onKeyDown = function (e) {\n if (e.keyCode !== 13) {\n // not Pressed ENTER\n keyUpHandler(e);\n }\n };\n saveBtn = _react2['default'].createElement(\n 'button',\n {\n className: 'btn btn-info btn-xs textarea-save-btn',\n onClick: keyUpHandler },\n 'save'\n );\n }\n return {\n v: _react2['default'].createElement(\n 'div',\n null,\n _react2['default'].createElement('textarea', _extends({}, attr, { defaultValue: defaultValue })),\n saveBtn\n )\n };\n })();\n\n if (typeof _ret2 === 'object') return _ret2.v;\n } else if (editable.type === 'checkbox') {\n var values = 'true:false';\n if (editable.options && editable.options.values) {\n // values = editable.options.values.split(':');\n values = editable.options.values;\n }\n attr.className = attr.className.replace('form-control', '');\n attr.className += ' checkbox pull-right';\n\n var checked = defaultValue && defaultValue.toString() === values.split(':')[0] ? true : false;\n\n return _react2['default'].createElement('input', _extends({}, attr, { type: 'checkbox',\n value: values, defaultChecked: checked }));\n } else {\n // process other input type. as password,url,email...\n return _react2['default'].createElement('input', _extends({}, attr, { type: 'text', defaultValue: defaultValue }));\n }\n }\n // default return for other case of editable\n return _react2['default'].createElement('input', _extends({}, attr, { type: 'text',\n className: (editorClass || '') + ' form-control editor edit-text' }));\n};\n\nexports['default'] = editor;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvRWRpdG9yLmpzPzcxNWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztpQ0FBa0IsQ0FBTzs7OztBQUV6QixJQUFNLE1BQU0sR0FBRyxTQUFULE1BQU0sQ0FBWSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFO0FBQ3pFLE1BQUksUUFBUSxLQUFLLElBQUksSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUU7O0FBQ3JELFFBQU0sSUFBSSxHQUFHLFFBQVEsR0FBRyxNQUFNLEdBQUcsUUFBUSxDQUFDO0FBQzFDLFdBQ0UsdURBQVksSUFBSSxJQUFHLElBQUksRUFBRyxJQUFNLEVBQUMsWUFBWSxFQUFHLFlBQWM7QUFDMUQsZUFBUyxFQUFHLENBQUUsV0FBVyxJQUFJLEVBQUUsSUFBSSxnQ0FBa0MsSUFBRyxDQUM1RTtHQUNILE1BQU0sSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUNwQixRQUFNLElBQUksR0FBRyxRQUFRLEdBQUcsTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUMxQyxXQUNJLHVEQUFZLElBQUksSUFBRyxJQUFJLEVBQUcsSUFBTSxFQUFDLFlBQVksRUFBRyxZQUFjO0FBQzVELGNBQVEsRUFBQyxVQUFVO0FBQ25CLGVBQVMsRUFBRyxDQUFFLFdBQVcsSUFBSSxFQUFFLElBQUksZ0NBQWtDLElBQUcsQ0FDNUU7R0FDSCxNQUFNLElBQUksUUFBUSxDQUFDLElBQUksRUFBRTs7O0FBRXhCLFlBQVEsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7O0FBRWhELFFBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxXQUFXLElBQUksRUFBRSxJQUNsQiw0QkFBNEIsR0FDNUIsUUFBUSxDQUFDLElBQUksSUFDWixRQUFRLENBQUMsU0FBUyxHQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsU0FBUyxHQUFJLEVBQUUsQ0FBQyxDQUFDOztBQUV4RSxRQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFOztBQUM5QixVQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFDakIsVUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDdkMsVUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFOzs7QUFDekIsY0FBSSxRQUFRLGFBQUM7QUFDYixpQkFBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFLO0FBQzdCLG9CQUFRLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEMsbUJBQ0U7O2dCQUFRLEdBQUcsRUFBRyxRQUFRLEdBQUcsQ0FBRyxFQUFDLEtBQUssRUFBRyxDQUFHO2NBQUcsUUFBUTthQUFXLENBQzlEO1dBQ0gsQ0FBQyxDQUFDOztPQUNKO0FBQ0QsYUFDRTs7cUJBQWEsSUFBSSxJQUFHLFlBQVksRUFBRyxZQUFjO1FBQzdDLE9BQU87T0FDRixDQUNUO0tBQ0gsTUFBTSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFOzs7O0FBRXZDLGdCQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdDLGdCQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdDLFlBQUksT0FBTyxhQUFDO0FBQ1osWUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUNwQyxZQUFJLFlBQVksRUFBRTtBQUNoQixjQUFJLENBQUMsU0FBUyxHQUFHLFVBQVMsQ0FBQyxFQUFFO0FBQzNCLGdCQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUssRUFBRSxFQUFFOztBQUNwQiwwQkFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2pCO1dBQ0YsQ0FBQztBQUNGLGlCQUFPLEdBQ0w7OztBQUNFLHVCQUFTLEVBQUMsdUNBQXVDO0FBQ2pELHFCQUFPLEVBQUcsWUFBYzs7V0FHM0IsQ0FBQztTQUNIO0FBQ0Q7YUFDRTs7O1lBQ0UsMERBQWUsSUFBSSxJQUFHLFlBQVksRUFBRyxZQUFjLElBQVk7WUFDN0QsT0FBTztXQUNMO1VBQ047Ozs7S0FDSCxNQUFNLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUU7QUFDdkMsVUFBSSxNQUFNLEdBQUcsWUFBWSxDQUFDO0FBQzFCLFVBQUksUUFBUSxDQUFDLE9BQU8sSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTs7QUFFL0MsY0FBTSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO09BQ2xDO0FBQ0QsVUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUQsVUFBSSxDQUFDLFNBQVMsSUFBSSxzQkFBc0IsQ0FBQzs7QUFFekMsVUFBTSxPQUFPLEdBQUcsWUFBWSxJQUMxQixZQUFZLENBQUMsUUFBUSxFQUFFLEtBQUssTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDOztBQUVsRSxhQUNFLHVEQUFZLElBQUksSUFBRyxJQUFJLEVBQUMsVUFBVTtBQUNoQyxhQUFLLEVBQUcsTUFBUSxFQUFDLGNBQWMsRUFBRyxPQUFTLElBQUUsQ0FDL0M7S0FDSCxNQUFNOztBQUNMLGFBQ0UsdURBQVksSUFBSSxJQUFHLElBQUksRUFBQyxNQUFNLEVBQUMsWUFBWSxFQUFHLFlBQWMsSUFBRSxDQUM5RDtLQUNIO0dBQ0Y7O0FBRUQsU0FDRSx1REFBVyxJQUFJLElBQUUsSUFBSSxFQUFDLE1BQU07QUFDMUIsYUFBUyxFQUFHLENBQUMsV0FBVyxJQUFJLEVBQUUsSUFBSSxnQ0FBa0MsSUFBRSxDQUN4RTtDQUNILENBQUM7O3FCQUVhLE1BQU0iLCJmaWxlIjoiMTIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jb25zdCBlZGl0b3IgPSBmdW5jdGlvbihlZGl0YWJsZSwgYXR0ciwgZm9ybWF0LCBlZGl0b3JDbGFzcywgZGVmYXVsdFZhbHVlKSB7XG4gIGlmIChlZGl0YWJsZSA9PT0gdHJ1ZSB8fCB0eXBlb2YgZWRpdGFibGUgPT09ICdzdHJpbmcnKSB7IC8vIHNpbXBsZSBkZWNsYXJlXG4gICAgY29uc3QgdHlwZSA9IGVkaXRhYmxlID8gJ3RleHQnIDogZWRpdGFibGU7XG4gICAgcmV0dXJuIChcbiAgICAgIDxpbnB1dCB7IC4uLmF0dHIgfSB0eXBlPXsgdHlwZSB9IGRlZmF1bHRWYWx1ZT17IGRlZmF1bHRWYWx1ZSB9XG4gICAgICAgICAgY2xhc3NOYW1lPXsgKCBlZGl0b3JDbGFzcyB8fCAnJykgKyAnIGZvcm0tY29udHJvbCBlZGl0b3IgZWRpdC10ZXh0JyB9IC8+XG4gICAgKTtcbiAgfSBlbHNlIGlmICghZWRpdGFibGUpIHtcbiAgICBjb25zdCB0eXBlID0gZWRpdGFibGUgPyAndGV4dCcgOiBlZGl0YWJsZTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8aW5wdXQgeyAuLi5hdHRyIH0gdHlwZT17IHR5cGUgfSBkZWZhdWx0VmFsdWU9eyBkZWZhdWx0VmFsdWUgfVxuICAgICAgICAgIGRpc2FibGVkPSdkaXNhYmxlZCdcbiAgICAgICAgICBjbGFzc05hbWU9eyAoIGVkaXRvckNsYXNzIHx8ICcnKSArICcgZm9ybS1jb250cm9sIGVkaXRvciBlZGl0LXRleHQnIH0gLz5cbiAgICApO1xuICB9IGVsc2UgaWYgKGVkaXRhYmxlLnR5cGUpIHsvLyBzdGFuZGFyZCBkZWNsYXJlXG4gICAgLy8gcHV0IHN0eWxlIGlmIGV4aXN0XG4gICAgZWRpdGFibGUuc3R5bGUgJiYgKGF0dHIuc3R5bGUgPSBlZGl0YWJsZS5zdHlsZSk7XG4gICAgLy8gcHV0IGNsYXNzIGlmIGV4aXN0XG4gICAgYXR0ci5jbGFzc05hbWUgPSAoZWRpdG9yQ2xhc3MgfHwgJycpICtcbiAgICAgICAgICAgICAgICAgICAgICcgZm9ybS1jb250cm9sIGVkaXRvciBlZGl0LScgK1xuICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGUudHlwZSArXG4gICAgICAgICAgICAgICAgICAgICAoZWRpdGFibGUuY2xhc3NOYW1lID8gKCcgJyArIGVkaXRhYmxlLmNsYXNzTmFtZSkgOiAnJyk7XG5cbiAgICBpZiAoZWRpdGFibGUudHlwZSA9PT0gJ3NlbGVjdCcpIHsvLyBwcm9jZXNzIHNlbGVjdCBpbnB1dFxuICAgICAgbGV0IG9wdGlvbnMgPSBbXTtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IGVkaXRhYmxlLm9wdGlvbnMudmFsdWVzO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVzKSkgey8vIG9ubHkgY2FuIHVzZSBhcnJyYXkgZGF0YSBmb3Igb3B0aW9uc1xuICAgICAgICBsZXQgcm93VmFsdWU7XG4gICAgICAgIG9wdGlvbnMgPSB2YWx1ZXMubWFwKChkLCBpKSA9PiB7XG4gICAgICAgICAgcm93VmFsdWUgPSBmb3JtYXQgPyBmb3JtYXQoZCkgOiBkO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8b3B0aW9uIGtleT17ICdvcHRpb24nICsgaSB9IHZhbHVlPXsgZCB9Pnsgcm93VmFsdWUgfTwvb3B0aW9uPlxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHNlbGVjdCB7IC4uLmF0dHIgfSBkZWZhdWx0VmFsdWU9eyBkZWZhdWx0VmFsdWUgfT5cbiAgICAgICAgICB7IG9wdGlvbnMgfVxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChlZGl0YWJsZS50eXBlID09PSAndGV4dGFyZWEnKSB7Ly8gcHJvY2VzcyB0ZXh0YXJlYSBpbnB1dFxuICAgICAgLy8gcHV0IG90aGVyIGlmIGV4aXN0XG4gICAgICBlZGl0YWJsZS5jb2xzICYmIChhdHRyLmNvbHMgPSBlZGl0YWJsZS5jb2xzKTtcbiAgICAgIGVkaXRhYmxlLnJvd3MgJiYgKGF0dHIucm93cyA9IGVkaXRhYmxlLnJvd3MpO1xuICAgICAgbGV0IHNhdmVCdG47XG4gICAgICBjb25zdCBrZXlVcEhhbmRsZXIgPSBhdHRyLm9uS2V5RG93bjtcbiAgICAgIGlmIChrZXlVcEhhbmRsZXIpIHtcbiAgICAgICAgYXR0ci5vbktleURvd24gPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgaWYgKGUua2V5Q29kZSAhPT0gMTMpIHsgLy8gbm90IFByZXNzZWQgRU5URVJcbiAgICAgICAgICAgIGtleVVwSGFuZGxlcihlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHNhdmVCdG4gPSAoXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3NOYW1lPSdidG4gYnRuLWluZm8gYnRuLXhzIHRleHRhcmVhLXNhdmUtYnRuJ1xuICAgICAgICAgICAgb25DbGljaz17IGtleVVwSGFuZGxlciB9PlxuICAgICAgICAgICAgc2F2ZVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8dGV4dGFyZWEgeyAuLi5hdHRyIH0gZGVmYXVsdFZhbHVlPXsgZGVmYXVsdFZhbHVlIH0+PC90ZXh0YXJlYT5cbiAgICAgICAgICB7IHNhdmVCdG4gfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChlZGl0YWJsZS50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICBsZXQgdmFsdWVzID0gJ3RydWU6ZmFsc2UnO1xuICAgICAgaWYgKGVkaXRhYmxlLm9wdGlvbnMgJiYgZWRpdGFibGUub3B0aW9ucy52YWx1ZXMpIHtcbiAgICAgICAgLy8gdmFsdWVzID0gZWRpdGFibGUub3B0aW9ucy52YWx1ZXMuc3BsaXQoJzonKTtcbiAgICAgICAgdmFsdWVzID0gZWRpdGFibGUub3B0aW9ucy52YWx1ZXM7XG4gICAgICB9XG4gICAgICBhdHRyLmNsYXNzTmFtZSA9IGF0dHIuY2xhc3NOYW1lLnJlcGxhY2UoJ2Zvcm0tY29udHJvbCcsICcnKTtcbiAgICAgIGF0dHIuY2xhc3NOYW1lICs9ICcgY2hlY2tib3ggcHVsbC1yaWdodCc7XG5cbiAgICAgIGNvbnN0IGNoZWNrZWQgPSBkZWZhdWx0VmFsdWUgJiZcbiAgICAgICAgZGVmYXVsdFZhbHVlLnRvU3RyaW5nKCkgPT09IHZhbHVlcy5zcGxpdCgnOicpWzBdID8gdHJ1ZSA6IGZhbHNlO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8aW5wdXQgeyAuLi5hdHRyIH0gdHlwZT0nY2hlY2tib3gnXG4gICAgICAgICAgdmFsdWU9eyB2YWx1ZXMgfSBkZWZhdWx0Q2hlY2tlZD17IGNoZWNrZWQgfS8+XG4gICAgICApO1xuICAgIH0gZWxzZSB7Ly8gcHJvY2VzcyBvdGhlciBpbnB1dCB0eXBlLiBhcyBwYXNzd29yZCx1cmwsZW1haWwuLi5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxpbnB1dCB7IC4uLmF0dHIgfSB0eXBlPSd0ZXh0JyBkZWZhdWx0VmFsdWU9eyBkZWZhdWx0VmFsdWUgfS8+XG4gICAgICApO1xuICAgIH1cbiAgfVxuICAvLyBkZWZhdWx0IHJldHVybiBmb3Igb3RoZXIgY2FzZSBvZiBlZGl0YWJsZVxuICByZXR1cm4gKFxuICAgIDxpbnB1dCB7Li4uYXR0cn0gdHlwZT0ndGV4dCdcbiAgICAgIGNsYXNzTmFtZT17IChlZGl0b3JDbGFzcyB8fCAnJykgKyAnIGZvcm0tY29udHJvbCBlZGl0b3IgZWRpdC10ZXh0JyB9Lz5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGVkaXRvcjtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL0VkaXRvci5qc1xuICoqLyJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactToastr = __webpack_require__(14);\n\nvar ToastrMessageFactory = _react2['default'].createFactory(_reactToastr.ToastMessage.animation);\n\nvar Notification = (function (_Component) {\n _inherits(Notification, _Component);\n\n function Notification() {\n _classCallCheck(this, Notification);\n\n _get(Object.getPrototypeOf(Notification.prototype), 'constructor', this).apply(this, arguments);\n }\n\n _createClass(Notification, [{\n key: 'notice',\n\n // allow type is success,info,warning,error\n value: function notice(type, msg, title) {\n this.refs.toastr[type](msg, title, {\n mode: 'single',\n timeOut: 5000,\n extendedTimeOut: 1000,\n showAnimation: 'animated bounceIn',\n hideAnimation: 'animated bounceOut'\n });\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2['default'].createElement(_reactToastr.ToastContainer, { ref: 'toastr',\n toastMessageFactory: ToastrMessageFactory,\n id: 'toast-container',\n className: 'toast-top-right' });\n }\n }]);\n\n return Notification;\n})(_react.Component);\n\nexports['default'] = Notification;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvTm90aWZpY2F0aW9uLmpzPzNjODYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztpQ0FBaUMsQ0FBTzs7Ozt1Q0FFSyxFQUFjOztBQUczRCxJQUFNLG9CQUFvQixHQUFHLG1CQUFNLGFBQWEsQ0FBQywwQkFBYSxTQUFTLENBQUMsQ0FBQzs7SUFFbkUsWUFBWTtZQUFaLFlBQVk7O1dBQVosWUFBWTswQkFBWixZQUFZOzsrQkFBWixZQUFZOzs7ZUFBWixZQUFZOzs7O1dBRVYsZ0JBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUU7QUFDdkIsVUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQ3BCLEdBQUcsRUFBRSxLQUFLLEVBQUU7QUFDVixZQUFJLEVBQUUsUUFBUTtBQUNkLGVBQU8sRUFBRSxJQUFJO0FBQ2IsdUJBQWUsRUFBRSxJQUFJO0FBQ3JCLHFCQUFhLEVBQUUsb0JBQW9CO0FBQ25DLHFCQUFhLEVBQUUsb0JBQW9CO09BQ3BDLENBQUMsQ0FBQztLQUNOOzs7V0FFSyxrQkFBRztBQUNQLGFBQ0UsZ0VBQWdCLEdBQUcsRUFBQyxRQUFRO0FBQzFCLDJCQUFtQixFQUFHLG9CQUFzQjtBQUM1QyxVQUFFLEVBQUMsaUJBQWlCO0FBQ3BCLGlCQUFTLEVBQUMsaUJBQWlCLEdBQUUsQ0FDL0I7S0FDSDs7O1NBcEJHLFlBQVk7OztxQkF1QkgsWUFBWSIsImZpbGUiOiIxMy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7IFRvYXN0Q29udGFpbmVyLCBUb2FzdE1lc3NhZ2UgfSBmcm9tICdyZWFjdC10b2FzdHInO1xuXG5cbmNvbnN0IFRvYXN0ck1lc3NhZ2VGYWN0b3J5ID0gUmVhY3QuY3JlYXRlRmFjdG9yeShUb2FzdE1lc3NhZ2UuYW5pbWF0aW9uKTtcblxuY2xhc3MgTm90aWZpY2F0aW9uIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLy8gYWxsb3cgdHlwZSBpcyBzdWNjZXNzLGluZm8sd2FybmluZyxlcnJvclxuICBub3RpY2UodHlwZSwgbXNnLCB0aXRsZSkge1xuICAgIHRoaXMucmVmcy50b2FzdHJbdHlwZV0oXG4gICAgICBtc2csIHRpdGxlLCB7XG4gICAgICAgIG1vZGU6ICdzaW5nbGUnLFxuICAgICAgICB0aW1lT3V0OiA1MDAwLFxuICAgICAgICBleHRlbmRlZFRpbWVPdXQ6IDEwMDAsXG4gICAgICAgIHNob3dBbmltYXRpb246ICdhbmltYXRlZCAgYm91bmNlSW4nLFxuICAgICAgICBoaWRlQW5pbWF0aW9uOiAnYW5pbWF0ZWQgYm91bmNlT3V0J1xuICAgICAgfSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxUb2FzdENvbnRhaW5lciByZWY9J3RvYXN0cidcbiAgICAgICAgdG9hc3RNZXNzYWdlRmFjdG9yeT17IFRvYXN0ck1lc3NhZ2VGYWN0b3J5IH1cbiAgICAgICAgaWQ9J3RvYXN0LWNvbnRhaW5lcidcbiAgICAgICAgY2xhc3NOYW1lPSd0b2FzdC10b3AtcmlnaHQnLz5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE5vdGlmaWNhdGlvbjtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL05vdGlmaWNhdGlvbi5qc1xuICoqLyJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports,__webpack_require__){eval('"use strict";\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.ToastMessage = exports.ToastContainer = undefined;\n\nvar _ToastContainer = __webpack_require__(15);\n\nvar _ToastContainer2 = _interopRequireDefault(_ToastContainer);\n\nvar _ToastMessage = __webpack_require__(22);\n\nvar _ToastMessage2 = _interopRequireDefault(_ToastMessage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.ToastContainer = _ToastContainer2.default;\nexports.ToastMessage = _ToastMessage2.default;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXRvYXN0ci9saWIvaW5kZXguanM/ODEyNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHNDQUFzQyx1Q0FBdUMsZ0JBQWdCOztBQUU3RjtBQUNBIiwiZmlsZSI6IjE0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlRvYXN0TWVzc2FnZSA9IGV4cG9ydHMuVG9hc3RDb250YWluZXIgPSB1bmRlZmluZWQ7XG5cbnZhciBfVG9hc3RDb250YWluZXIgPSByZXF1aXJlKFwiLi9Ub2FzdENvbnRhaW5lclwiKTtcblxudmFyIF9Ub2FzdENvbnRhaW5lcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9Ub2FzdENvbnRhaW5lcik7XG5cbnZhciBfVG9hc3RNZXNzYWdlID0gcmVxdWlyZShcIi4vVG9hc3RNZXNzYWdlXCIpO1xuXG52YXIgX1RvYXN0TWVzc2FnZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9Ub2FzdE1lc3NhZ2UpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLlRvYXN0Q29udGFpbmVyID0gX1RvYXN0Q29udGFpbmVyMi5kZWZhdWx0O1xuZXhwb3J0cy5Ub2FzdE1lc3NhZ2UgPSBfVG9hc3RNZXNzYWdlMi5kZWZhdWx0O1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L3JlYWN0LXRvYXN0ci9saWIvaW5kZXguanNcbiAqKiBtb2R1bGUgaWQgPSAxNFxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ==')},function(module,exports,__webpack_require__){eval('"use strict";\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = 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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactAddonsUpdate = __webpack_require__(16);\n\nvar _reactAddonsUpdate2 = _interopRequireDefault(_reactAddonsUpdate);\n\nvar _ToastMessage = __webpack_require__(22);\n\nvar _ToastMessage2 = _interopRequireDefault(_ToastMessage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ToastContainer = function (_Component) {\n _inherits(ToastContainer, _Component);\n\n function ToastContainer() {\n var _Object$getPrototypeO;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, ToastContainer);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(ToastContainer)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.state = {\n toasts: [],\n toastId: 0,\n previousMessage: null\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(ToastContainer, [{\n key: "error",\n value: function error(message, title, optionsOverride) {\n this._notify(this.props.toastType.error, message, title, optionsOverride);\n }\n }, {\n key: "info",\n value: function info(message, title, optionsOverride) {\n this._notify(this.props.toastType.info, message, title, optionsOverride);\n }\n }, {\n key: "success",\n value: function success(message, title, optionsOverride) {\n this._notify(this.props.toastType.success, message, title, optionsOverride);\n }\n }, {\n key: "warning",\n value: function warning(message, title, optionsOverride) {\n this._notify(this.props.toastType.warning, message, title, optionsOverride);\n }\n }, {\n key: "clear",\n value: function clear() {\n var _this2 = this;\n\n Object.keys(this.refs).forEach(function (key) {\n _this2.refs[key].hideToast(false);\n });\n }\n }, {\n key: "render",\n value: function render() {\n var _this3 = this;\n\n return _react2.default.createElement(\n "div",\n _extends({}, this.props, { "aria-live": "polite", role: "alert" }),\n this.state.toasts.map(function (toast) {\n return _this3.props.toastMessageFactory(toast);\n })\n );\n }\n }, {\n key: "_notify",\n value: function _notify(type, message, title) {\n var _this4 = this;\n\n var optionsOverride = arguments.length <= 3 || arguments[3] === undefined ? {} : arguments[3];\n\n if (this.props.preventDuplicates) {\n if (this.state.previousMessage === message) {\n return;\n }\n }\n var key = this.state.toastId++;\n var toastId = key;\n var newToast = (0, _reactAddonsUpdate2.default)(optionsOverride, {\n $merge: {\n type: type,\n title: title,\n message: message,\n toastId: toastId,\n key: key,\n ref: "toasts__" + key,\n handleOnClick: function handleOnClick(e) {\n if ("function" === typeof optionsOverride.handleOnClick) {\n optionsOverride.handleOnClick();\n }\n return _this4._handle_toast_on_click(e);\n },\n handleRemove: this._handle_toast_remove.bind(this)\n }\n });\n var toastOperation = _defineProperty({}, "" + (this.props.newestOnTop ? "$unshift" : "$push"), [newToast]);\n\n var nextState = (0, _reactAddonsUpdate2.default)(this.state, {\n toasts: toastOperation,\n previousMessage: { $set: message }\n });\n this.setState(nextState);\n }\n }, {\n key: "_handle_toast_on_click",\n value: function _handle_toast_on_click(event) {\n this.props.onClick(event);\n if (event.defaultPrevented) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n }\n }, {\n key: "_handle_toast_remove",\n value: function _handle_toast_remove(toastId) {\n var _this5 = this;\n\n var operationName = "" + (this.props.newestOnTop ? "reduceRight" : "reduce");\n this.state.toasts[operationName](function (found, toast, index) {\n if (found || toast.toastId !== toastId) {\n return false;\n }\n _this5.setState((0, _reactAddonsUpdate2.default)(_this5.state, {\n toasts: { $splice: [[index, 1]] }\n }));\n return true;\n }, false);\n }\n }]);\n\n return ToastContainer;\n}(_react.Component);\n\nToastContainer.defaultProps = {\n toastType: {\n error: "error",\n info: "info",\n success: "success",\n warning: "warning"\n },\n id: "toast-container",\n toastMessageFactory: _react2.default.createFactory(_ToastMessage2.default),\n preventDuplicates: false,\n newestOnTop: true,\n onClick: function onClick() {}\n};\nexports.default = ToastContainer;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXRvYXN0ci9saWIvVG9hc3RDb250YWluZXIuanM/MmQyYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxtREFBbUQsZ0JBQWdCLHNCQUFzQixPQUFPLDJCQUEyQiwwQkFBMEIseURBQXlELDJCQUEyQixFQUFFLEVBQUUsRUFBRSxlQUFlOztBQUU5UCxnQ0FBZ0MsMkNBQTJDLGdCQUFnQixrQkFBa0IsT0FBTywyQkFBMkIsd0RBQXdELGdDQUFnQyx1REFBdUQsMkRBQTJELEVBQUUsRUFBRSx5REFBeUQscUVBQXFFLDZEQUE2RCxvQkFBb0IsR0FBRyxFQUFFOztBQUVqakI7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsc0NBQXNDLHVDQUF1QyxnQkFBZ0I7O0FBRTdGLDJDQUEyQyxrQkFBa0Isa0NBQWtDLHFFQUFxRSxFQUFFLEVBQUUsT0FBTyxrQkFBa0IsRUFBRSxZQUFZOztBQUUvTSxpREFBaUQsMENBQTBDLDBEQUEwRCxFQUFFOztBQUV2SixpREFBaUQsYUFBYSx1RkFBdUYsRUFBRSx1RkFBdUY7O0FBRTlPLDBDQUEwQywrREFBK0QscUdBQXFHLEVBQUUseUVBQXlFLGVBQWUseUVBQXlFLEVBQUUsRUFBRSx1SEFBdUg7O0FBRTVlO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxtRUFBbUUsYUFBYTtBQUNoRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsZUFBZSx1Q0FBdUM7QUFDekU7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQSxvRkFBb0Y7O0FBRXBGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLE9BQU87QUFDUCw2Q0FBNkM7O0FBRTdDO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUIsT0FBTztBQUNQO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkIsU0FBUztBQUNUO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjE1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfcmVhY3QgPSByZXF1aXJlKFwicmVhY3RcIik7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX3JlYWN0QWRkb25zVXBkYXRlID0gcmVxdWlyZShcInJlYWN0LWFkZG9ucy11cGRhdGVcIik7XG5cbnZhciBfcmVhY3RBZGRvbnNVcGRhdGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3RBZGRvbnNVcGRhdGUpO1xuXG52YXIgX1RvYXN0TWVzc2FnZSA9IHJlcXVpcmUoXCIuL1RvYXN0TWVzc2FnZVwiKTtcblxudmFyIF9Ub2FzdE1lc3NhZ2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfVG9hc3RNZXNzYWdlKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgVG9hc3RDb250YWluZXIgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoVG9hc3RDb250YWluZXIsIF9Db21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFRvYXN0Q29udGFpbmVyKCkge1xuICAgIHZhciBfT2JqZWN0JGdldFByb3RvdHlwZU87XG5cbiAgICB2YXIgX3RlbXAsIF90aGlzLCBfcmV0O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRvYXN0Q29udGFpbmVyKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBfcmV0ID0gKF90ZW1wID0gKF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKF9PYmplY3QkZ2V0UHJvdG90eXBlTyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihUb2FzdENvbnRhaW5lcikpLmNhbGwuYXBwbHkoX09iamVjdCRnZXRQcm90b3R5cGVPLCBbdGhpc10uY29uY2F0KGFyZ3MpKSksIF90aGlzKSwgX3RoaXMuc3RhdGUgPSB7XG4gICAgICB0b2FzdHM6IFtdLFxuICAgICAgdG9hc3RJZDogMCxcbiAgICAgIHByZXZpb3VzTWVzc2FnZTogbnVsbFxuICAgIH0sIF90ZW1wKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsIF9yZXQpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFRvYXN0Q29udGFpbmVyLCBbe1xuICAgIGtleTogXCJlcnJvclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBlcnJvcihtZXNzYWdlLCB0aXRsZSwgb3B0aW9uc092ZXJyaWRlKSB7XG4gICAgICB0aGlzLl9ub3RpZnkodGhpcy5wcm9wcy50b2FzdFR5cGUuZXJyb3IsIG1lc3NhZ2UsIHRpdGxlLCBvcHRpb25zT3ZlcnJpZGUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpbmZvXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluZm8obWVzc2FnZSwgdGl0bGUsIG9wdGlvbnNPdmVycmlkZSkge1xuICAgICAgdGhpcy5fbm90aWZ5KHRoaXMucHJvcHMudG9hc3RUeXBlLmluZm8sIG1lc3NhZ2UsIHRpdGxlLCBvcHRpb25zT3ZlcnJpZGUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzdWNjZXNzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHN1Y2Nlc3MobWVzc2FnZSwgdGl0bGUsIG9wdGlvbnNPdmVycmlkZSkge1xuICAgICAgdGhpcy5fbm90aWZ5KHRoaXMucHJvcHMudG9hc3RUeXBlLnN1Y2Nlc3MsIG1lc3NhZ2UsIHRpdGxlLCBvcHRpb25zT3ZlcnJpZGUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ3YXJuaW5nXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHdhcm5pbmcobWVzc2FnZSwgdGl0bGUsIG9wdGlvbnNPdmVycmlkZSkge1xuICAgICAgdGhpcy5fbm90aWZ5KHRoaXMucHJvcHMudG9hc3RUeXBlLndhcm5pbmcsIG1lc3NhZ2UsIHRpdGxlLCBvcHRpb25zT3ZlcnJpZGUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjbGVhclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnJlZnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBfdGhpczIucmVmc1trZXldLmhpZGVUb2FzdChmYWxzZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICByZXR1cm4gX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIF9leHRlbmRzKHt9LCB0aGlzLnByb3BzLCB7IFwiYXJpYS1saXZlXCI6IFwicG9saXRlXCIsIHJvbGU6IFwiYWxlcnRcIiB9KSxcbiAgICAgICAgdGhpcy5zdGF0ZS50b2FzdHMubWFwKGZ1bmN0aW9uICh0b2FzdCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczMucHJvcHMudG9hc3RNZXNzYWdlRmFjdG9yeSh0b2FzdCk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfbm90aWZ5XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9ub3RpZnkodHlwZSwgbWVzc2FnZSwgdGl0bGUpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICB2YXIgb3B0aW9uc092ZXJyaWRlID0gYXJndW1lbnRzLmxlbmd0aCA8PSAzIHx8IGFyZ3VtZW50c1szXSA9PT0gdW5kZWZpbmVkID8ge30gOiBhcmd1bWVudHNbM107XG5cbiAgICAgIGlmICh0aGlzLnByb3BzLnByZXZlbnREdXBsaWNhdGVzKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLnByZXZpb3VzTWVzc2FnZSA9PT0gbWVzc2FnZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIGtleSA9IHRoaXMuc3RhdGUudG9hc3RJZCsrO1xuICAgICAgdmFyIHRvYXN0SWQgPSBrZXk7XG4gICAgICB2YXIgbmV3VG9hc3QgPSAoMCwgX3JlYWN0QWRkb25zVXBkYXRlMi5kZWZhdWx0KShvcHRpb25zT3ZlcnJpZGUsIHtcbiAgICAgICAgJG1lcmdlOiB7XG4gICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgICAgICB0b2FzdElkOiB0b2FzdElkLFxuICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgIHJlZjogXCJ0b2FzdHNfX1wiICsga2V5LFxuICAgICAgICAgIGhhbmRsZU9uQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZU9uQ2xpY2soZSkge1xuICAgICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG9wdGlvbnNPdmVycmlkZS5oYW5kbGVPbkNsaWNrKSB7XG4gICAgICAgICAgICAgIG9wdGlvbnNPdmVycmlkZS5oYW5kbGVPbkNsaWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX3RoaXM0Ll9oYW5kbGVfdG9hc3Rfb25fY2xpY2soZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBoYW5kbGVSZW1vdmU6IHRoaXMuX2hhbmRsZV90b2FzdF9yZW1vdmUuYmluZCh0aGlzKVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHZhciB0b2FzdE9wZXJhdGlvbiA9IF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIiArICh0aGlzLnByb3BzLm5ld2VzdE9uVG9wID8gXCIkdW5zaGlmdFwiIDogXCIkcHVzaFwiKSwgW25ld1RvYXN0XSk7XG5cbiAgICAgIHZhciBuZXh0U3RhdGUgPSAoMCwgX3JlYWN0QWRkb25zVXBkYXRlMi5kZWZhdWx0KSh0aGlzLnN0YXRlLCB7XG4gICAgICAgIHRvYXN0czogdG9hc3RPcGVyYXRpb24sXG4gICAgICAgIHByZXZpb3VzTWVzc2FnZTogeyAkc2V0OiBtZXNzYWdlIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5zZXRTdGF0ZShuZXh0U3RhdGUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfaGFuZGxlX3RvYXN0X29uX2NsaWNrXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9oYW5kbGVfdG9hc3Rfb25fY2xpY2soZXZlbnQpIHtcbiAgICAgIHRoaXMucHJvcHMub25DbGljayhldmVudCk7XG4gICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9oYW5kbGVfdG9hc3RfcmVtb3ZlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9oYW5kbGVfdG9hc3RfcmVtb3ZlKHRvYXN0SWQpIHtcbiAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgICB2YXIgb3BlcmF0aW9uTmFtZSA9IFwiXCIgKyAodGhpcy5wcm9wcy5uZXdlc3RPblRvcCA/IFwicmVkdWNlUmlnaHRcIiA6IFwicmVkdWNlXCIpO1xuICAgICAgdGhpcy5zdGF0ZS50b2FzdHNbb3BlcmF0aW9uTmFtZV0oZnVuY3Rpb24gKGZvdW5kLCB0b2FzdCwgaW5kZXgpIHtcbiAgICAgICAgaWYgKGZvdW5kIHx8IHRvYXN0LnRvYXN0SWQgIT09IHRvYXN0SWQpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXM1LnNldFN0YXRlKCgwLCBfcmVhY3RBZGRvbnNVcGRhdGUyLmRlZmF1bHQpKF90aGlzNS5zdGF0ZSwge1xuICAgICAgICAgIHRvYXN0czogeyAkc3BsaWNlOiBbW2luZGV4LCAxXV0gfVxuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSwgZmFsc2UpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBUb2FzdENvbnRhaW5lcjtcbn0oX3JlYWN0LkNvbXBvbmVudCk7XG5cblRvYXN0Q29udGFpbmVyLmRlZmF1bHRQcm9wcyA9IHtcbiAgdG9hc3RUeXBlOiB7XG4gICAgZXJyb3I6IFwiZXJyb3JcIixcbiAgICBpbmZvOiBcImluZm9cIixcbiAgICBzdWNjZXNzOiBcInN1Y2Nlc3NcIixcbiAgICB3YXJuaW5nOiBcIndhcm5pbmdcIlxuICB9LFxuICBpZDogXCJ0b2FzdC1jb250YWluZXJcIixcbiAgdG9hc3RNZXNzYWdlRmFjdG9yeTogX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUZhY3RvcnkoX1RvYXN0TWVzc2FnZTIuZGVmYXVsdCksXG4gIHByZXZlbnREdXBsaWNhdGVzOiBmYWxzZSxcbiAgbmV3ZXN0T25Ub3A6IHRydWUsXG4gIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soKSB7fVxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IFRvYXN0Q29udGFpbmVyO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L3JlYWN0LXRvYXN0ci9saWIvVG9hc3RDb250YWluZXIuanNcbiAqKiBtb2R1bGUgaWQgPSAxNVxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ=='); -},function(module,exports,__webpack_require__){eval("module.exports = __webpack_require__(17);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXRvYXN0ci9+L3JlYWN0LWFkZG9ucy11cGRhdGUvaW5kZXguanM/NGUyMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSIsImZpbGUiOiIxNi5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgncmVhY3QvbGliL3VwZGF0ZScpO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L3JlYWN0LXRvYXN0ci9+L3JlYWN0LWFkZG9ucy11cGRhdGUvaW5kZXguanNcbiAqKiBtb2R1bGUgaWQgPSAxNlxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports,__webpack_require__){eval("/* WEBPACK VAR INJECTION */(function(process) {/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule update\n */\n\n/* global hasOwnProperty:true */\n\n'use strict';\n\nvar assign = __webpack_require__(19);\nvar keyOf = __webpack_require__(20);\nvar invariant = __webpack_require__(21);\nvar hasOwnProperty = ({}).hasOwnProperty;\n\nfunction shallowCopy(x) {\n if (Array.isArray(x)) {\n return x.concat();\n } else if (x && typeof x === 'object') {\n return assign(new x.constructor(), x);\n } else {\n return x;\n }\n}\n\nvar COMMAND_PUSH = keyOf({ $push: null });\nvar COMMAND_UNSHIFT = keyOf({ $unshift: null });\nvar COMMAND_SPLICE = keyOf({ $splice: null });\nvar COMMAND_SET = keyOf({ $set: null });\nvar COMMAND_MERGE = keyOf({ $merge: null });\nvar COMMAND_APPLY = keyOf({ $apply: null });\n\nvar ALL_COMMANDS_LIST = [COMMAND_PUSH, COMMAND_UNSHIFT, COMMAND_SPLICE, COMMAND_SET, COMMAND_MERGE, COMMAND_APPLY];\n\nvar ALL_COMMANDS_SET = {};\n\nALL_COMMANDS_LIST.forEach(function (command) {\n ALL_COMMANDS_SET[command] = true;\n});\n\nfunction invariantArrayCase(value, spec, command) {\n !Array.isArray(value) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'update(): expected target of %s to be an array; got %s.', command, value) : invariant(false) : undefined;\n var specValue = spec[command];\n !Array.isArray(specValue) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'update(): expected spec of %s to be an array; got %s. ' + 'Did you forget to wrap your parameter in an array?', command, specValue) : invariant(false) : undefined;\n}\n\nfunction update(value, spec) {\n !(typeof spec === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'update(): You provided a key path to update() that did not contain one ' + 'of %s. Did you forget to include {%s: ...}?', ALL_COMMANDS_LIST.join(', '), COMMAND_SET) : invariant(false) : undefined;\n\n if (hasOwnProperty.call(spec, COMMAND_SET)) {\n !(Object.keys(spec).length === 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot have more than one key in an object with %s', COMMAND_SET) : invariant(false) : undefined;\n\n return spec[COMMAND_SET];\n }\n\n var nextValue = shallowCopy(value);\n\n if (hasOwnProperty.call(spec, COMMAND_MERGE)) {\n var mergeObj = spec[COMMAND_MERGE];\n !(mergeObj && typeof mergeObj === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'update(): %s expects a spec of type \\'object\\'; got %s', COMMAND_MERGE, mergeObj) : invariant(false) : undefined;\n !(nextValue && typeof nextValue === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'update(): %s expects a target of type \\'object\\'; got %s', COMMAND_MERGE, nextValue) : invariant(false) : undefined;\n assign(nextValue, spec[COMMAND_MERGE]);\n }\n\n if (hasOwnProperty.call(spec, COMMAND_PUSH)) {\n invariantArrayCase(value, spec, COMMAND_PUSH);\n spec[COMMAND_PUSH].forEach(function (item) {\n nextValue.push(item);\n });\n }\n\n if (hasOwnProperty.call(spec, COMMAND_UNSHIFT)) {\n invariantArrayCase(value, spec, COMMAND_UNSHIFT);\n spec[COMMAND_UNSHIFT].forEach(function (item) {\n nextValue.unshift(item);\n });\n }\n\n if (hasOwnProperty.call(spec, COMMAND_SPLICE)) {\n !Array.isArray(value) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected %s target to be an array; got %s', COMMAND_SPLICE, value) : invariant(false) : undefined;\n !Array.isArray(spec[COMMAND_SPLICE]) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'update(): expected spec of %s to be an array of arrays; got %s. ' + 'Did you forget to wrap your parameters in an array?', COMMAND_SPLICE, spec[COMMAND_SPLICE]) : invariant(false) : undefined;\n spec[COMMAND_SPLICE].forEach(function (args) {\n !Array.isArray(args) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'update(): expected spec of %s to be an array of arrays; got %s. ' + 'Did you forget to wrap your parameters in an array?', COMMAND_SPLICE, spec[COMMAND_SPLICE]) : invariant(false) : undefined;\n nextValue.splice.apply(nextValue, args);\n });\n }\n\n if (hasOwnProperty.call(spec, COMMAND_APPLY)) {\n !(typeof spec[COMMAND_APPLY] === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'update(): expected spec of %s to be a function; got %s.', COMMAND_APPLY, spec[COMMAND_APPLY]) : invariant(false) : undefined;\n nextValue = spec[COMMAND_APPLY](nextValue);\n }\n\n for (var k in spec) {\n if (!(ALL_COMMANDS_SET.hasOwnProperty(k) && ALL_COMMANDS_SET[k])) {\n nextValue[k] = update(value[k], spec[k]);\n }\n }\n\n return nextValue;\n}\n\nmodule.exports = update;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(18)))\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L3JlYWN0L2xpYi91cGRhdGUuanM/ZTdlMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7O0FBRXhCO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUEsMEJBQTBCLGNBQWM7QUFDeEMsNkJBQTZCLGlCQUFpQjtBQUM5Qyw0QkFBNEIsZ0JBQWdCO0FBQzVDLHlCQUF5QixhQUFhO0FBQ3RDLDJCQUEyQixlQUFlO0FBQzFDLDJCQUEyQixlQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBLG1JQUFtSTtBQUNuSTtBQUNBLHFJQUFxSTtBQUNySTs7QUFFQTtBQUNBLHdNQUF3TSxRQUFROztBQUVoTjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDJKQUEySjtBQUMzSiwrSkFBK0o7QUFDL0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLHdIQUF3SDtBQUN4SCw0SkFBNEo7QUFDNUo7QUFDQSw4SUFBOEk7QUFDOUk7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSw0SkFBNEo7QUFDNUo7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsd0IiLCJmaWxlIjoiMTcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgdXBkYXRlXG4gKi9cblxuLyogZ2xvYmFsIGhhc093blByb3BlcnR5OnRydWUgKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZSgnLi9PYmplY3QuYXNzaWduJyk7XG52YXIga2V5T2YgPSByZXF1aXJlKCdmYmpzL2xpYi9rZXlPZicpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2ludmFyaWFudCcpO1xudmFyIGhhc093blByb3BlcnR5ID0gKHt9KS5oYXNPd25Qcm9wZXJ0eTtcblxuZnVuY3Rpb24gc2hhbGxvd0NvcHkoeCkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh4KSkge1xuICAgIHJldHVybiB4LmNvbmNhdCgpO1xuICB9IGVsc2UgaWYgKHggJiYgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGFzc2lnbihuZXcgeC5jb25zdHJ1Y3RvcigpLCB4KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geDtcbiAgfVxufVxuXG52YXIgQ09NTUFORF9QVVNIID0ga2V5T2YoeyAkcHVzaDogbnVsbCB9KTtcbnZhciBDT01NQU5EX1VOU0hJRlQgPSBrZXlPZih7ICR1bnNoaWZ0OiBudWxsIH0pO1xudmFyIENPTU1BTkRfU1BMSUNFID0ga2V5T2YoeyAkc3BsaWNlOiBudWxsIH0pO1xudmFyIENPTU1BTkRfU0VUID0ga2V5T2YoeyAkc2V0OiBudWxsIH0pO1xudmFyIENPTU1BTkRfTUVSR0UgPSBrZXlPZih7ICRtZXJnZTogbnVsbCB9KTtcbnZhciBDT01NQU5EX0FQUExZID0ga2V5T2YoeyAkYXBwbHk6IG51bGwgfSk7XG5cbnZhciBBTExfQ09NTUFORFNfTElTVCA9IFtDT01NQU5EX1BVU0gsIENPTU1BTkRfVU5TSElGVCwgQ09NTUFORF9TUExJQ0UsIENPTU1BTkRfU0VULCBDT01NQU5EX01FUkdFLCBDT01NQU5EX0FQUExZXTtcblxudmFyIEFMTF9DT01NQU5EU19TRVQgPSB7fTtcblxuQUxMX0NPTU1BTkRTX0xJU1QuZm9yRWFjaChmdW5jdGlvbiAoY29tbWFuZCkge1xuICBBTExfQ09NTUFORFNfU0VUW2NvbW1hbmRdID0gdHJ1ZTtcbn0pO1xuXG5mdW5jdGlvbiBpbnZhcmlhbnRBcnJheUNhc2UodmFsdWUsIHNwZWMsIGNvbW1hbmQpIHtcbiAgIUFycmF5LmlzQXJyYXkodmFsdWUpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ3VwZGF0ZSgpOiBleHBlY3RlZCB0YXJnZXQgb2YgJXMgdG8gYmUgYW4gYXJyYXk7IGdvdCAlcy4nLCBjb21tYW5kLCB2YWx1ZSkgOiBpbnZhcmlhbnQoZmFsc2UpIDogdW5kZWZpbmVkO1xuICB2YXIgc3BlY1ZhbHVlID0gc3BlY1tjb21tYW5kXTtcbiAgIUFycmF5LmlzQXJyYXkoc3BlY1ZhbHVlKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICd1cGRhdGUoKTogZXhwZWN0ZWQgc3BlYyBvZiAlcyB0byBiZSBhbiBhcnJheTsgZ290ICVzLiAnICsgJ0RpZCB5b3UgZm9yZ2V0IHRvIHdyYXAgeW91ciBwYXJhbWV0ZXIgaW4gYW4gYXJyYXk/JywgY29tbWFuZCwgc3BlY1ZhbHVlKSA6IGludmFyaWFudChmYWxzZSkgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZSh2YWx1ZSwgc3BlYykge1xuICAhKHR5cGVvZiBzcGVjID09PSAnb2JqZWN0JykgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAndXBkYXRlKCk6IFlvdSBwcm92aWRlZCBhIGtleSBwYXRoIHRvIHVwZGF0ZSgpIHRoYXQgZGlkIG5vdCBjb250YWluIG9uZSAnICsgJ29mICVzLiBEaWQgeW91IGZvcmdldCB0byBpbmNsdWRlIHslczogLi4ufT8nLCBBTExfQ09NTUFORFNfTElTVC5qb2luKCcsICcpLCBDT01NQU5EX1NFVCkgOiBpbnZhcmlhbnQoZmFsc2UpIDogdW5kZWZpbmVkO1xuXG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHNwZWMsIENPTU1BTkRfU0VUKSkge1xuICAgICEoT2JqZWN0LmtleXMoc3BlYykubGVuZ3RoID09PSAxKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdDYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIGtleSBpbiBhbiBvYmplY3Qgd2l0aCAlcycsIENPTU1BTkRfU0VUKSA6IGludmFyaWFudChmYWxzZSkgOiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4gc3BlY1tDT01NQU5EX1NFVF07XG4gIH1cblxuICB2YXIgbmV4dFZhbHVlID0gc2hhbGxvd0NvcHkodmFsdWUpO1xuXG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHNwZWMsIENPTU1BTkRfTUVSR0UpKSB7XG4gICAgdmFyIG1lcmdlT2JqID0gc3BlY1tDT01NQU5EX01FUkdFXTtcbiAgICAhKG1lcmdlT2JqICYmIHR5cGVvZiBtZXJnZU9iaiA9PT0gJ29iamVjdCcpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ3VwZGF0ZSgpOiAlcyBleHBlY3RzIGEgc3BlYyBvZiB0eXBlIFxcJ29iamVjdFxcJzsgZ290ICVzJywgQ09NTUFORF9NRVJHRSwgbWVyZ2VPYmopIDogaW52YXJpYW50KGZhbHNlKSA6IHVuZGVmaW5lZDtcbiAgICAhKG5leHRWYWx1ZSAmJiB0eXBlb2YgbmV4dFZhbHVlID09PSAnb2JqZWN0JykgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAndXBkYXRlKCk6ICVzIGV4cGVjdHMgYSB0YXJnZXQgb2YgdHlwZSBcXCdvYmplY3RcXCc7IGdvdCAlcycsIENPTU1BTkRfTUVSR0UsIG5leHRWYWx1ZSkgOiBpbnZhcmlhbnQoZmFsc2UpIDogdW5kZWZpbmVkO1xuICAgIGFzc2lnbihuZXh0VmFsdWUsIHNwZWNbQ09NTUFORF9NRVJHRV0pO1xuICB9XG5cbiAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc3BlYywgQ09NTUFORF9QVVNIKSkge1xuICAgIGludmFyaWFudEFycmF5Q2FzZSh2YWx1ZSwgc3BlYywgQ09NTUFORF9QVVNIKTtcbiAgICBzcGVjW0NPTU1BTkRfUFVTSF0uZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgbmV4dFZhbHVlLnB1c2goaXRlbSk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChzcGVjLCBDT01NQU5EX1VOU0hJRlQpKSB7XG4gICAgaW52YXJpYW50QXJyYXlDYXNlKHZhbHVlLCBzcGVjLCBDT01NQU5EX1VOU0hJRlQpO1xuICAgIHNwZWNbQ09NTUFORF9VTlNISUZUXS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICBuZXh0VmFsdWUudW5zaGlmdChpdGVtKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHNwZWMsIENPTU1BTkRfU1BMSUNFKSkge1xuICAgICFBcnJheS5pc0FycmF5KHZhbHVlKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdFeHBlY3RlZCAlcyB0YXJnZXQgdG8gYmUgYW4gYXJyYXk7IGdvdCAlcycsIENPTU1BTkRfU1BMSUNFLCB2YWx1ZSkgOiBpbnZhcmlhbnQoZmFsc2UpIDogdW5kZWZpbmVkO1xuICAgICFBcnJheS5pc0FycmF5KHNwZWNbQ09NTUFORF9TUExJQ0VdKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICd1cGRhdGUoKTogZXhwZWN0ZWQgc3BlYyBvZiAlcyB0byBiZSBhbiBhcnJheSBvZiBhcnJheXM7IGdvdCAlcy4gJyArICdEaWQgeW91IGZvcmdldCB0byB3cmFwIHlvdXIgcGFyYW1ldGVycyBpbiBhbiBhcnJheT8nLCBDT01NQU5EX1NQTElDRSwgc3BlY1tDT01NQU5EX1NQTElDRV0pIDogaW52YXJpYW50KGZhbHNlKSA6IHVuZGVmaW5lZDtcbiAgICBzcGVjW0NPTU1BTkRfU1BMSUNFXS5mb3JFYWNoKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAhQXJyYXkuaXNBcnJheShhcmdzKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICd1cGRhdGUoKTogZXhwZWN0ZWQgc3BlYyBvZiAlcyB0byBiZSBhbiBhcnJheSBvZiBhcnJheXM7IGdvdCAlcy4gJyArICdEaWQgeW91IGZvcmdldCB0byB3cmFwIHlvdXIgcGFyYW1ldGVycyBpbiBhbiBhcnJheT8nLCBDT01NQU5EX1NQTElDRSwgc3BlY1tDT01NQU5EX1NQTElDRV0pIDogaW52YXJpYW50KGZhbHNlKSA6IHVuZGVmaW5lZDtcbiAgICAgIG5leHRWYWx1ZS5zcGxpY2UuYXBwbHkobmV4dFZhbHVlLCBhcmdzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHNwZWMsIENPTU1BTkRfQVBQTFkpKSB7XG4gICAgISh0eXBlb2Ygc3BlY1tDT01NQU5EX0FQUExZXSA9PT0gJ2Z1bmN0aW9uJykgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAndXBkYXRlKCk6IGV4cGVjdGVkIHNwZWMgb2YgJXMgdG8gYmUgYSBmdW5jdGlvbjsgZ290ICVzLicsIENPTU1BTkRfQVBQTFksIHNwZWNbQ09NTUFORF9BUFBMWV0pIDogaW52YXJpYW50KGZhbHNlKSA6IHVuZGVmaW5lZDtcbiAgICBuZXh0VmFsdWUgPSBzcGVjW0NPTU1BTkRfQVBQTFldKG5leHRWYWx1ZSk7XG4gIH1cblxuICBmb3IgKHZhciBrIGluIHNwZWMpIHtcbiAgICBpZiAoIShBTExfQ09NTUFORFNfU0VULmhhc093blByb3BlcnR5KGspICYmIEFMTF9DT01NQU5EU19TRVRba10pKSB7XG4gICAgICBuZXh0VmFsdWVba10gPSB1cGRhdGUodmFsdWVba10sIHNwZWNba10pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXh0VmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdXBkYXRlO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L3JlYWN0L2xpYi91cGRhdGUuanNcbiAqKiBtb2R1bGUgaWQgPSAxN1xuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports){eval("// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL34vbm9kZS1saWJzLWJyb3dzZXIvfi9wcm9jZXNzL2Jyb3dzZXIuanM/NmYwZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHNCQUFzQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixVQUFVIiwiZmlsZSI6IjE4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG5cbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHNldFRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZHJhaW5RdWV1ZSwgMCk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG5cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqICh3ZWJwYWNrKS9+L25vZGUtbGlicy1icm93c2VyL34vcHJvY2Vzcy9icm93c2VyLmpzXG4gKiogbW9kdWxlIGlkID0gMThcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports){eval("/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule Object.assign\n */\n\n// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign\n\n'use strict';\n\nfunction assign(target, sources) {\n if (target == null) {\n throw new TypeError('Object.assign target cannot be null or undefined');\n }\n\n var to = Object(target);\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n\n for (var nextIndex = 1; nextIndex < arguments.length; nextIndex++) {\n var nextSource = arguments[nextIndex];\n if (nextSource == null) {\n continue;\n }\n\n var from = Object(nextSource);\n\n // We don't currently support accessors nor proxies. Therefore this\n // copy cannot throw. If we ever supported this then we must handle\n // exceptions and side-effects. We don't support symbols so they won't\n // be transferred.\n\n for (var key in from) {\n if (hasOwnProperty.call(from, key)) {\n to[key] = from[key];\n }\n }\n }\n\n return to;\n}\n\nmodule.exports = assign;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L3JlYWN0L2xpYi9PYmplY3QuYXNzaWduLmpzPzRhNTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx5QkFBeUIsOEJBQThCO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6IjE5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIE9iamVjdC5hc3NpZ25cbiAqL1xuXG4vLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtb2JqZWN0LmFzc2lnblxuXG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZXMpIHtcbiAgaWYgKHRhcmdldCA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiB0YXJnZXQgY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkJyk7XG4gIH1cblxuICB2YXIgdG8gPSBPYmplY3QodGFyZ2V0KTtcbiAgdmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuICBmb3IgKHZhciBuZXh0SW5kZXggPSAxOyBuZXh0SW5kZXggPCBhcmd1bWVudHMubGVuZ3RoOyBuZXh0SW5kZXgrKykge1xuICAgIHZhciBuZXh0U291cmNlID0gYXJndW1lbnRzW25leHRJbmRleF07XG4gICAgaWYgKG5leHRTb3VyY2UgPT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIGZyb20gPSBPYmplY3QobmV4dFNvdXJjZSk7XG5cbiAgICAvLyBXZSBkb24ndCBjdXJyZW50bHkgc3VwcG9ydCBhY2Nlc3NvcnMgbm9yIHByb3hpZXMuIFRoZXJlZm9yZSB0aGlzXG4gICAgLy8gY29weSBjYW5ub3QgdGhyb3cuIElmIHdlIGV2ZXIgc3VwcG9ydGVkIHRoaXMgdGhlbiB3ZSBtdXN0IGhhbmRsZVxuICAgIC8vIGV4Y2VwdGlvbnMgYW5kIHNpZGUtZWZmZWN0cy4gV2UgZG9uJ3Qgc3VwcG9ydCBzeW1ib2xzIHNvIHRoZXkgd29uJ3RcbiAgICAvLyBiZSB0cmFuc2ZlcnJlZC5cblxuICAgIGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XG4gICAgICAgIHRvW2tleV0gPSBmcm9tW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2lnbjtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vfi9yZWFjdC9saWIvT2JqZWN0LmFzc2lnbi5qc1xuICoqIG1vZHVsZSBpZCA9IDE5XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports){eval("/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule keyOf\n */\n\n/**\n * Allows extraction of a minified key. Let's the build system minify keys\n * without losing the ability to dynamically use key strings as values\n * themselves. Pass in an object with a single key/val pair and it will return\n * you the string key of that single record. Suppose you want to grab the\n * value for a key 'className' inside of an object. Key/val minification may\n * have aliased that key to be 'xa12'. keyOf({className: null}) will return\n * 'xa12' in that case. Resolve keys you want to use once at startup time, then\n * reuse those resolutions.\n */\n\"use strict\";\n\nvar keyOf = function (oneKeyObj) {\n var key;\n for (key in oneKeyObj) {\n if (!oneKeyObj.hasOwnProperty(key)) {\n continue;\n }\n return key;\n }\n return null;\n};\n\nmodule.exports = keyOf;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L3JlYWN0L34vZmJqcy9saWIva2V5T2YuanM/NjVlOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsZ0JBQWdCO0FBQzlEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6IjIwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGtleU9mXG4gKi9cblxuLyoqXG4gKiBBbGxvd3MgZXh0cmFjdGlvbiBvZiBhIG1pbmlmaWVkIGtleS4gTGV0J3MgdGhlIGJ1aWxkIHN5c3RlbSBtaW5pZnkga2V5c1xuICogd2l0aG91dCBsb3NpbmcgdGhlIGFiaWxpdHkgdG8gZHluYW1pY2FsbHkgdXNlIGtleSBzdHJpbmdzIGFzIHZhbHVlc1xuICogdGhlbXNlbHZlcy4gUGFzcyBpbiBhbiBvYmplY3Qgd2l0aCBhIHNpbmdsZSBrZXkvdmFsIHBhaXIgYW5kIGl0IHdpbGwgcmV0dXJuXG4gKiB5b3UgdGhlIHN0cmluZyBrZXkgb2YgdGhhdCBzaW5nbGUgcmVjb3JkLiBTdXBwb3NlIHlvdSB3YW50IHRvIGdyYWIgdGhlXG4gKiB2YWx1ZSBmb3IgYSBrZXkgJ2NsYXNzTmFtZScgaW5zaWRlIG9mIGFuIG9iamVjdC4gS2V5L3ZhbCBtaW5pZmljYXRpb24gbWF5XG4gKiBoYXZlIGFsaWFzZWQgdGhhdCBrZXkgdG8gYmUgJ3hhMTInLiBrZXlPZih7Y2xhc3NOYW1lOiBudWxsfSkgd2lsbCByZXR1cm5cbiAqICd4YTEyJyBpbiB0aGF0IGNhc2UuIFJlc29sdmUga2V5cyB5b3Ugd2FudCB0byB1c2Ugb25jZSBhdCBzdGFydHVwIHRpbWUsIHRoZW5cbiAqIHJldXNlIHRob3NlIHJlc29sdXRpb25zLlxuICovXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGtleU9mID0gZnVuY3Rpb24gKG9uZUtleU9iaikge1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBvbmVLZXlPYmopIHtcbiAgICBpZiAoIW9uZUtleU9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcmV0dXJuIGtleTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5T2Y7XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34vcmVhY3Qvfi9mYmpzL2xpYi9rZXlPZi5qc1xuICoqIG1vZHVsZSBpZCA9IDIwXG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports,__webpack_require__){eval("/* WEBPACK VAR INJECTION */(function(process) {/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule invariant\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nfunction invariant(condition, format, a, b, c, d, e, f) {\n if (process.env.NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n}\n\nmodule.exports = invariant;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(18)))\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L3JlYWN0L34vZmJqcy9saWIvaW52YXJpYW50LmpzPzU2OGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRDtBQUNyRCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBOztBQUVBLDJCIiwiZmlsZSI6IjIxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGludmFyaWFudFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBVc2UgaW52YXJpYW50KCkgdG8gYXNzZXJ0IHN0YXRlIHdoaWNoIHlvdXIgcHJvZ3JhbSBhc3N1bWVzIHRvIGJlIHRydWUuXG4gKlxuICogUHJvdmlkZSBzcHJpbnRmLXN0eWxlIGZvcm1hdCAob25seSAlcyBpcyBzdXBwb3J0ZWQpIGFuZCBhcmd1bWVudHNcbiAqIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBicm9rZSBhbmQgd2hhdCB5b3Ugd2VyZVxuICogZXhwZWN0aW5nLlxuICpcbiAqIFRoZSBpbnZhcmlhbnQgbWVzc2FnZSB3aWxsIGJlIHN0cmlwcGVkIGluIHByb2R1Y3Rpb24sIGJ1dCB0aGUgaW52YXJpYW50XG4gKiB3aWxsIHJlbWFpbiB0byBlbnN1cmUgbG9naWMgZG9lcyBub3QgZGlmZmVyIGluIHByb2R1Y3Rpb24uXG4gKi9cblxuZnVuY3Rpb24gaW52YXJpYW50KGNvbmRpdGlvbiwgZm9ybWF0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFyaWFudCByZXF1aXJlcyBhbiBlcnJvciBtZXNzYWdlIGFyZ3VtZW50Jyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFjb25kaXRpb24pIHtcbiAgICB2YXIgZXJyb3I7XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlcnJvciA9IG5ldyBFcnJvcignTWluaWZpZWQgZXhjZXB0aW9uIG9jY3VycmVkOyB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgJyArICdmb3IgdGhlIGZ1bGwgZXJyb3IgbWVzc2FnZSBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLicpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgYXJncyA9IFthLCBiLCBjLCBkLCBlLCBmXTtcbiAgICAgIHZhciBhcmdJbmRleCA9IDA7XG4gICAgICBlcnJvciA9IG5ldyBFcnJvcihmb3JtYXQucmVwbGFjZSgvJXMvZywgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gYXJnc1thcmdJbmRleCsrXTtcbiAgICAgIH0pKTtcbiAgICAgIGVycm9yLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgfVxuXG4gICAgZXJyb3IuZnJhbWVzVG9Qb3AgPSAxOyAvLyB3ZSBkb24ndCBjYXJlIGFib3V0IGludmFyaWFudCdzIG93biBmcmFtZVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW52YXJpYW50O1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L3JlYWN0L34vZmJqcy9saWIvaW52YXJpYW50LmpzXG4gKiogbW9kdWxlIGlkID0gMjFcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports,__webpack_require__){eval('"use strict";\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.jQuery = exports.animation = undefined;\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactAddonsUpdate = __webpack_require__(16);\n\nvar _reactAddonsUpdate2 = _interopRequireDefault(_reactAddonsUpdate);\n\nvar _classnames = __webpack_require__(6);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _animationMixin = __webpack_require__(23);\n\nvar _animationMixin2 = _interopRequireDefault(_animationMixin);\n\nvar _jQueryMixin = __webpack_require__(28);\n\nvar _jQueryMixin2 = _interopRequireDefault(_jQueryMixin);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction noop() {}\n\nvar ToastMessageSpec = {\n displayName: "ToastMessage",\n\n getDefaultProps: function getDefaultProps() {\n var iconClassNames = {\n error: "toast-error",\n info: "toast-info",\n success: "toast-success",\n warning: "toast-warning"\n };\n\n return {\n className: "toast",\n iconClassNames: iconClassNames,\n titleClassName: "toast-title",\n messageClassName: "toast-message",\n tapToDismiss: true,\n closeButton: false\n };\n },\n handleOnClick: function handleOnClick(event) {\n this.props.handleOnClick(event);\n if (this.props.tapToDismiss) {\n this.hideToast(true);\n }\n },\n _handle_close_button_click: function _handle_close_button_click(event) {\n event.stopPropagation();\n this.hideToast(true);\n },\n _handle_remove: function _handle_remove() {\n this.props.handleRemove(this.props.toastId);\n },\n _render_close_button: function _render_close_button() {\n return this.props.closeButton ? _react2.default.createElement("button", {\n className: "toast-close-button", role: "button",\n onClick: this._handle_close_button_click,\n dangerouslySetInnerHTML: { __html: "×" }\n }) : false;\n },\n _render_title_element: function _render_title_element() {\n return this.props.title ? _react2.default.createElement(\n "div",\n { className: this.props.titleClassName },\n this.props.title\n ) : false;\n },\n _render_message_element: function _render_message_element() {\n return this.props.message ? _react2.default.createElement(\n "div",\n { className: this.props.messageClassName },\n this.props.message\n ) : false;\n },\n render: function render() {\n var iconClassName = this.props.iconClassName || this.props.iconClassNames[this.props.type];\n\n return _react2.default.createElement(\n "div",\n {\n className: (0, _classnames2.default)(this.props.className, iconClassName),\n style: this.props.style,\n onClick: this.handleOnClick,\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave\n },\n this._render_close_button(),\n this._render_title_element(),\n this._render_message_element()\n );\n }\n};\n\nvar animation = exports.animation = _react2.default.createClass((0, _reactAddonsUpdate2.default)(ToastMessageSpec, {\n displayName: { $set: "ToastMessage.animation" },\n mixins: { $set: [_animationMixin2.default] }\n}));\n\nvar jQuery = exports.jQuery = _react2.default.createClass((0, _reactAddonsUpdate2.default)(ToastMessageSpec, {\n displayName: { $set: "ToastMessage.jQuery" },\n mixins: { $set: [_jQueryMixin2.default] }\n}));\n\n/*\n * assign default noop functions\n */\nToastMessageSpec.handleMouseEnter = noop;\nToastMessageSpec.handleMouseLeave = noop;\nToastMessageSpec.hideToast = noop;\n\nvar ToastMessage = _react2.default.createClass(ToastMessageSpec);\n\nToastMessage.animation = animation;\nToastMessage.jQuery = jQuery;\n\nexports.default = ToastMessage;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXRvYXN0ci9saWIvVG9hc3RNZXNzYWdlL2luZGV4LmpzP2NkODQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxzQ0FBc0MsdUNBQXVDLGdCQUFnQjs7QUFFN0Y7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsaUJBQWlCO0FBQ2pELEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsT0FBTyx1Q0FBdUM7QUFDOUM7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxPQUFPLHlDQUF5QztBQUNoRDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQkFBZ0IsaUNBQWlDO0FBQ2pELFdBQVc7QUFDWCxDQUFDOztBQUVEO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QyxXQUFXO0FBQ1gsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIyMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5qUXVlcnkgPSBleHBvcnRzLmFuaW1hdGlvbiA9IHVuZGVmaW5lZDtcblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcblxudmFyIF9yZWFjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdCk7XG5cbnZhciBfcmVhY3RBZGRvbnNVcGRhdGUgPSByZXF1aXJlKFwicmVhY3QtYWRkb25zLXVwZGF0ZVwiKTtcblxudmFyIF9yZWFjdEFkZG9uc1VwZGF0ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdEFkZG9uc1VwZGF0ZSk7XG5cbnZhciBfY2xhc3NuYW1lcyA9IHJlcXVpcmUoXCJjbGFzc25hbWVzXCIpO1xuXG52YXIgX2NsYXNzbmFtZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NuYW1lcyk7XG5cbnZhciBfYW5pbWF0aW9uTWl4aW4gPSByZXF1aXJlKFwiLi9hbmltYXRpb25NaXhpblwiKTtcblxudmFyIF9hbmltYXRpb25NaXhpbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hbmltYXRpb25NaXhpbik7XG5cbnZhciBfalF1ZXJ5TWl4aW4gPSByZXF1aXJlKFwiLi9qUXVlcnlNaXhpblwiKTtcblxudmFyIF9qUXVlcnlNaXhpbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9qUXVlcnlNaXhpbik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG52YXIgVG9hc3RNZXNzYWdlU3BlYyA9IHtcbiAgZGlzcGxheU5hbWU6IFwiVG9hc3RNZXNzYWdlXCIsXG5cbiAgZ2V0RGVmYXVsdFByb3BzOiBmdW5jdGlvbiBnZXREZWZhdWx0UHJvcHMoKSB7XG4gICAgdmFyIGljb25DbGFzc05hbWVzID0ge1xuICAgICAgZXJyb3I6IFwidG9hc3QtZXJyb3JcIixcbiAgICAgIGluZm86IFwidG9hc3QtaW5mb1wiLFxuICAgICAgc3VjY2VzczogXCJ0b2FzdC1zdWNjZXNzXCIsXG4gICAgICB3YXJuaW5nOiBcInRvYXN0LXdhcm5pbmdcIlxuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgY2xhc3NOYW1lOiBcInRvYXN0XCIsXG4gICAgICBpY29uQ2xhc3NOYW1lczogaWNvbkNsYXNzTmFtZXMsXG4gICAgICB0aXRsZUNsYXNzTmFtZTogXCJ0b2FzdC10aXRsZVwiLFxuICAgICAgbWVzc2FnZUNsYXNzTmFtZTogXCJ0b2FzdC1tZXNzYWdlXCIsXG4gICAgICB0YXBUb0Rpc21pc3M6IHRydWUsXG4gICAgICBjbG9zZUJ1dHRvbjogZmFsc2VcbiAgICB9O1xuICB9LFxuICBoYW5kbGVPbkNsaWNrOiBmdW5jdGlvbiBoYW5kbGVPbkNsaWNrKGV2ZW50KSB7XG4gICAgdGhpcy5wcm9wcy5oYW5kbGVPbkNsaWNrKGV2ZW50KTtcbiAgICBpZiAodGhpcy5wcm9wcy50YXBUb0Rpc21pc3MpIHtcbiAgICAgIHRoaXMuaGlkZVRvYXN0KHRydWUpO1xuICAgIH1cbiAgfSxcbiAgX2hhbmRsZV9jbG9zZV9idXR0b25fY2xpY2s6IGZ1bmN0aW9uIF9oYW5kbGVfY2xvc2VfYnV0dG9uX2NsaWNrKGV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5oaWRlVG9hc3QodHJ1ZSk7XG4gIH0sXG4gIF9oYW5kbGVfcmVtb3ZlOiBmdW5jdGlvbiBfaGFuZGxlX3JlbW92ZSgpIHtcbiAgICB0aGlzLnByb3BzLmhhbmRsZVJlbW92ZSh0aGlzLnByb3BzLnRvYXN0SWQpO1xuICB9LFxuICBfcmVuZGVyX2Nsb3NlX2J1dHRvbjogZnVuY3Rpb24gX3JlbmRlcl9jbG9zZV9idXR0b24oKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY2xvc2VCdXR0b24gPyBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwidG9hc3QtY2xvc2UtYnV0dG9uXCIsIHJvbGU6IFwiYnV0dG9uXCIsXG4gICAgICBvbkNsaWNrOiB0aGlzLl9oYW5kbGVfY2xvc2VfYnV0dG9uX2NsaWNrLFxuICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHsgX19odG1sOiBcIiZ0aW1lcztcIiB9XG4gICAgfSkgOiBmYWxzZTtcbiAgfSxcbiAgX3JlbmRlcl90aXRsZV9lbGVtZW50OiBmdW5jdGlvbiBfcmVuZGVyX3RpdGxlX2VsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMudGl0bGUgPyBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7IGNsYXNzTmFtZTogdGhpcy5wcm9wcy50aXRsZUNsYXNzTmFtZSB9LFxuICAgICAgdGhpcy5wcm9wcy50aXRsZVxuICAgICkgOiBmYWxzZTtcbiAgfSxcbiAgX3JlbmRlcl9tZXNzYWdlX2VsZW1lbnQ6IGZ1bmN0aW9uIF9yZW5kZXJfbWVzc2FnZV9lbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1lc3NhZ2UgPyBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7IGNsYXNzTmFtZTogdGhpcy5wcm9wcy5tZXNzYWdlQ2xhc3NOYW1lIH0sXG4gICAgICB0aGlzLnByb3BzLm1lc3NhZ2VcbiAgICApIDogZmFsc2U7XG4gIH0sXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBpY29uQ2xhc3NOYW1lID0gdGhpcy5wcm9wcy5pY29uQ2xhc3NOYW1lIHx8IHRoaXMucHJvcHMuaWNvbkNsYXNzTmFtZXNbdGhpcy5wcm9wcy50eXBlXTtcblxuICAgIHJldHVybiBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogKDAsIF9jbGFzc25hbWVzMi5kZWZhdWx0KSh0aGlzLnByb3BzLmNsYXNzTmFtZSwgaWNvbkNsYXNzTmFtZSksXG4gICAgICAgIHN0eWxlOiB0aGlzLnByb3BzLnN0eWxlLFxuICAgICAgICBvbkNsaWNrOiB0aGlzLmhhbmRsZU9uQ2xpY2ssXG4gICAgICAgIG9uTW91c2VFbnRlcjogdGhpcy5oYW5kbGVNb3VzZUVudGVyLFxuICAgICAgICBvbk1vdXNlTGVhdmU6IHRoaXMuaGFuZGxlTW91c2VMZWF2ZVxuICAgICAgfSxcbiAgICAgIHRoaXMuX3JlbmRlcl9jbG9zZV9idXR0b24oKSxcbiAgICAgIHRoaXMuX3JlbmRlcl90aXRsZV9lbGVtZW50KCksXG4gICAgICB0aGlzLl9yZW5kZXJfbWVzc2FnZV9lbGVtZW50KClcbiAgICApO1xuICB9XG59O1xuXG52YXIgYW5pbWF0aW9uID0gZXhwb3J0cy5hbmltYXRpb24gPSBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlQ2xhc3MoKDAsIF9yZWFjdEFkZG9uc1VwZGF0ZTIuZGVmYXVsdCkoVG9hc3RNZXNzYWdlU3BlYywge1xuICBkaXNwbGF5TmFtZTogeyAkc2V0OiBcIlRvYXN0TWVzc2FnZS5hbmltYXRpb25cIiB9LFxuICBtaXhpbnM6IHsgJHNldDogW19hbmltYXRpb25NaXhpbjIuZGVmYXVsdF0gfVxufSkpO1xuXG52YXIgalF1ZXJ5ID0gZXhwb3J0cy5qUXVlcnkgPSBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlQ2xhc3MoKDAsIF9yZWFjdEFkZG9uc1VwZGF0ZTIuZGVmYXVsdCkoVG9hc3RNZXNzYWdlU3BlYywge1xuICBkaXNwbGF5TmFtZTogeyAkc2V0OiBcIlRvYXN0TWVzc2FnZS5qUXVlcnlcIiB9LFxuICBtaXhpbnM6IHsgJHNldDogW19qUXVlcnlNaXhpbjIuZGVmYXVsdF0gfVxufSkpO1xuXG4vKlxuICogYXNzaWduIGRlZmF1bHQgbm9vcCBmdW5jdGlvbnNcbiAqL1xuVG9hc3RNZXNzYWdlU3BlYy5oYW5kbGVNb3VzZUVudGVyID0gbm9vcDtcblRvYXN0TWVzc2FnZVNwZWMuaGFuZGxlTW91c2VMZWF2ZSA9IG5vb3A7XG5Ub2FzdE1lc3NhZ2VTcGVjLmhpZGVUb2FzdCA9IG5vb3A7XG5cbnZhciBUb2FzdE1lc3NhZ2UgPSBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlQ2xhc3MoVG9hc3RNZXNzYWdlU3BlYyk7XG5cblRvYXN0TWVzc2FnZS5hbmltYXRpb24gPSBhbmltYXRpb247XG5Ub2FzdE1lc3NhZ2UualF1ZXJ5ID0galF1ZXJ5O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBUb2FzdE1lc3NhZ2U7XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34vcmVhY3QtdG9hc3RyL2xpYi9Ub2FzdE1lc3NhZ2UvaW5kZXguanNcbiAqKiBtb2R1bGUgaWQgPSAyMlxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ=='); -},function(module,exports,__webpack_require__){eval('"use strict";\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _CSSCore = __webpack_require__(24);\n\nvar _CSSCore2 = _interopRequireDefault(_CSSCore);\n\nvar _ReactTransitionEvents = __webpack_require__(26);\n\nvar _ReactTransitionEvents2 = _interopRequireDefault(_ReactTransitionEvents);\n\nvar _reactDom = __webpack_require__(5);\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar TICK = 17;\nvar toString = Object.prototype.toString;\nexports.default = {\n getDefaultProps: function getDefaultProps() {\n return {\n transition: null, // some examples defined in index.scss (scale, fadeInOut, rotate)\n showAnimation: "animated bounceIn", // or other animations from animate.css\n hideAnimation: "animated bounceOut",\n timeOut: 5000,\n extendedTimeOut: 1000\n };\n },\n componentWillMount: function componentWillMount() {\n this.classNameQueue = [];\n this.isHiding = false;\n this.intervalId = null;\n },\n componentDidMount: function componentDidMount() {\n var _this = this;\n\n this._is_mounted = true;\n this._show();\n var node = _reactDom2.default.findDOMNode(this);\n\n var onHideComplete = function onHideComplete() {\n if (_this.isHiding) {\n _this._set_is_hiding(false);\n _ReactTransitionEvents2.default.removeEndEventListener(node, onHideComplete);\n _this._handle_remove();\n }\n };\n _ReactTransitionEvents2.default.addEndEventListener(node, onHideComplete);\n\n if (this.props.timeOut > 0) {\n this._set_interval_id(setTimeout(this.hideToast, this.props.timeOut));\n }\n },\n componentWillUnmount: function componentWillUnmount() {\n this._is_mounted = false;\n if (this.intervalId) {\n clearTimeout(this.intervalId);\n }\n },\n _set_transition: function _set_transition(hide) {\n var animationType = hide ? "leave" : "enter";\n var node = _reactDom2.default.findDOMNode(this);\n var className = this.props.transition + "-" + animationType;\n var activeClassName = className + "-active";\n\n var endListener = function endListener(e) {\n if (e && e.target !== node) {\n return;\n }\n\n _CSSCore2.default.removeClass(node, className);\n _CSSCore2.default.removeClass(node, activeClassName);\n\n _ReactTransitionEvents2.default.removeEndEventListener(node, endListener);\n };\n\n _ReactTransitionEvents2.default.addEndEventListener(node, endListener);\n\n _CSSCore2.default.addClass(node, className);\n\n // Need to do this to actually trigger a transition.\n this._queue_class(activeClassName);\n },\n _clear_transition: function _clear_transition(hide) {\n var node = _reactDom2.default.findDOMNode(this);\n var animationType = hide ? "leave" : "enter";\n var className = this.props.transition + "-" + animationType;\n var activeClassName = className + "-active";\n\n _CSSCore2.default.removeClass(node, className);\n _CSSCore2.default.removeClass(node, activeClassName);\n },\n _set_animation: function _set_animation(hide) {\n var node = _reactDom2.default.findDOMNode(this);\n var animations = this._get_animation_classes(hide);\n var endListener = function endListener(e) {\n if (e && e.target !== node) {\n return;\n }\n\n animations.forEach(function (anim) {\n _CSSCore2.default.removeClass(node, anim);\n });\n\n _ReactTransitionEvents2.default.removeEndEventListener(node, endListener);\n };\n\n _ReactTransitionEvents2.default.addEndEventListener(node, endListener);\n\n animations.forEach(function (anim) {\n _CSSCore2.default.addClass(node, anim);\n });\n },\n _get_animation_classes: function _get_animation_classes(hide) {\n var animations = hide ? this.props.hideAnimation : this.props.showAnimation;\n if ("[object Array]" === toString.call(animations)) {\n return animations;\n } else if ("string" === typeof animations) {\n return animations.split(" ");\n }\n },\n _clear_animation: function _clear_animation(hide) {\n var _this2 = this;\n\n var animations = this._get_animation_classes(hide);\n animations.forEach(function (animation) {\n _CSSCore2.default.removeClass(_reactDom2.default.findDOMNode(_this2), animation);\n });\n },\n _queue_class: function _queue_class(className) {\n this.classNameQueue.push(className);\n\n if (!this.timeout) {\n this.timeout = setTimeout(this._flush_class_name_queue, TICK);\n }\n },\n _flush_class_name_queue: function _flush_class_name_queue() {\n if (this._is_mounted) {\n this.classNameQueue.forEach(_CSSCore2.default.addClass.bind(_CSSCore2.default, _reactDom2.default.findDOMNode(this)));\n }\n this.classNameQueue.length = 0;\n this.timeout = null;\n },\n _show: function _show() {\n if (this.props.transition) {\n this._set_transition();\n } else if (this.props.showAnimation) {\n this._set_animation();\n }\n },\n handleMouseEnter: function handleMouseEnter() {\n clearTimeout(this.intervalId);\n this._set_interval_id(null);\n if (this.isHiding) {\n this._set_is_hiding(false);\n\n if (this.props.hideAnimation) {\n this._clear_animation(true);\n } else if (this.props.transition) {\n this._clear_transition(true);\n }\n }\n },\n handleMouseLeave: function handleMouseLeave() {\n if (!this.isHiding && (this.props.timeOut > 0 || this.props.extendedTimeOut > 0)) {\n this._set_interval_id(setTimeout(this.hideToast, this.props.extendedTimeOut));\n }\n },\n hideToast: function hideToast(override) {\n if (this.isHiding || this.intervalId === null && !override) {\n return;\n }\n\n this._set_is_hiding(true);\n if (this.props.transition) {\n this._set_transition(true);\n } else if (this.props.hideAnimation) {\n this._set_animation(true);\n } else {\n this._handle_remove();\n }\n },\n _set_interval_id: function _set_interval_id(intervalId) {\n this.intervalId = intervalId;\n },\n _set_is_hiding: function _set_is_hiding(isHiding) {\n this.isHiding = isHiding;\n }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXRvYXN0ci9saWIvVG9hc3RNZXNzYWdlL2FuaW1hdGlvbk1peGluLmpzPzM5OTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsc0NBQXNDLHVDQUF1QyxnQkFBZ0I7O0FBRTdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9DU1NDb3JlID0gcmVxdWlyZShcImZianMvbGliL0NTU0NvcmVcIik7XG5cbnZhciBfQ1NTQ29yZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9DU1NDb3JlKTtcblxudmFyIF9SZWFjdFRyYW5zaXRpb25FdmVudHMgPSByZXF1aXJlKFwicmVhY3QvbGliL1JlYWN0VHJhbnNpdGlvbkV2ZW50c1wiKTtcblxudmFyIF9SZWFjdFRyYW5zaXRpb25FdmVudHMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfUmVhY3RUcmFuc2l0aW9uRXZlbnRzKTtcblxudmFyIF9yZWFjdERvbSA9IHJlcXVpcmUoXCJyZWFjdC1kb21cIik7XG5cbnZhciBfcmVhY3REb20yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3REb20pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgVElDSyA9IDE3O1xudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgZ2V0RGVmYXVsdFByb3BzOiBmdW5jdGlvbiBnZXREZWZhdWx0UHJvcHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRyYW5zaXRpb246IG51bGwsIC8vIHNvbWUgZXhhbXBsZXMgZGVmaW5lZCBpbiBpbmRleC5zY3NzIChzY2FsZSwgZmFkZUluT3V0LCByb3RhdGUpXG4gICAgICBzaG93QW5pbWF0aW9uOiBcImFuaW1hdGVkIGJvdW5jZUluXCIsIC8vIG9yIG90aGVyIGFuaW1hdGlvbnMgZnJvbSBhbmltYXRlLmNzc1xuICAgICAgaGlkZUFuaW1hdGlvbjogXCJhbmltYXRlZCBib3VuY2VPdXRcIixcbiAgICAgIHRpbWVPdXQ6IDUwMDAsXG4gICAgICBleHRlbmRlZFRpbWVPdXQ6IDEwMDBcbiAgICB9O1xuICB9LFxuICBjb21wb25lbnRXaWxsTW91bnQ6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcbiAgICB0aGlzLmNsYXNzTmFtZVF1ZXVlID0gW107XG4gICAgdGhpcy5pc0hpZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuaW50ZXJ2YWxJZCA9IG51bGw7XG4gIH0sXG4gIGNvbXBvbmVudERpZE1vdW50OiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy5faXNfbW91bnRlZCA9IHRydWU7XG4gICAgdGhpcy5fc2hvdygpO1xuICAgIHZhciBub2RlID0gX3JlYWN0RG9tMi5kZWZhdWx0LmZpbmRET01Ob2RlKHRoaXMpO1xuXG4gICAgdmFyIG9uSGlkZUNvbXBsZXRlID0gZnVuY3Rpb24gb25IaWRlQ29tcGxldGUoKSB7XG4gICAgICBpZiAoX3RoaXMuaXNIaWRpbmcpIHtcbiAgICAgICAgX3RoaXMuX3NldF9pc19oaWRpbmcoZmFsc2UpO1xuICAgICAgICBfUmVhY3RUcmFuc2l0aW9uRXZlbnRzMi5kZWZhdWx0LnJlbW92ZUVuZEV2ZW50TGlzdGVuZXIobm9kZSwgb25IaWRlQ29tcGxldGUpO1xuICAgICAgICBfdGhpcy5faGFuZGxlX3JlbW92ZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgX1JlYWN0VHJhbnNpdGlvbkV2ZW50czIuZGVmYXVsdC5hZGRFbmRFdmVudExpc3RlbmVyKG5vZGUsIG9uSGlkZUNvbXBsZXRlKTtcblxuICAgIGlmICh0aGlzLnByb3BzLnRpbWVPdXQgPiAwKSB7XG4gICAgICB0aGlzLl9zZXRfaW50ZXJ2YWxfaWQoc2V0VGltZW91dCh0aGlzLmhpZGVUb2FzdCwgdGhpcy5wcm9wcy50aW1lT3V0KSk7XG4gICAgfVxuICB9LFxuICBjb21wb25lbnRXaWxsVW5tb3VudDogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5faXNfbW91bnRlZCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLmludGVydmFsSWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmludGVydmFsSWQpO1xuICAgIH1cbiAgfSxcbiAgX3NldF90cmFuc2l0aW9uOiBmdW5jdGlvbiBfc2V0X3RyYW5zaXRpb24oaGlkZSkge1xuICAgIHZhciBhbmltYXRpb25UeXBlID0gaGlkZSA/IFwibGVhdmVcIiA6IFwiZW50ZXJcIjtcbiAgICB2YXIgbm9kZSA9IF9yZWFjdERvbTIuZGVmYXVsdC5maW5kRE9NTm9kZSh0aGlzKTtcbiAgICB2YXIgY2xhc3NOYW1lID0gdGhpcy5wcm9wcy50cmFuc2l0aW9uICsgXCItXCIgKyBhbmltYXRpb25UeXBlO1xuICAgIHZhciBhY3RpdmVDbGFzc05hbWUgPSBjbGFzc05hbWUgKyBcIi1hY3RpdmVcIjtcblxuICAgIHZhciBlbmRMaXN0ZW5lciA9IGZ1bmN0aW9uIGVuZExpc3RlbmVyKGUpIHtcbiAgICAgIGlmIChlICYmIGUudGFyZ2V0ICE9PSBub2RlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgX0NTU0NvcmUyLmRlZmF1bHQucmVtb3ZlQ2xhc3Mobm9kZSwgY2xhc3NOYW1lKTtcbiAgICAgIF9DU1NDb3JlMi5kZWZhdWx0LnJlbW92ZUNsYXNzKG5vZGUsIGFjdGl2ZUNsYXNzTmFtZSk7XG5cbiAgICAgIF9SZWFjdFRyYW5zaXRpb25FdmVudHMyLmRlZmF1bHQucmVtb3ZlRW5kRXZlbnRMaXN0ZW5lcihub2RlLCBlbmRMaXN0ZW5lcik7XG4gICAgfTtcblxuICAgIF9SZWFjdFRyYW5zaXRpb25FdmVudHMyLmRlZmF1bHQuYWRkRW5kRXZlbnRMaXN0ZW5lcihub2RlLCBlbmRMaXN0ZW5lcik7XG5cbiAgICBfQ1NTQ29yZTIuZGVmYXVsdC5hZGRDbGFzcyhub2RlLCBjbGFzc05hbWUpO1xuXG4gICAgLy8gTmVlZCB0byBkbyB0aGlzIHRvIGFjdHVhbGx5IHRyaWdnZXIgYSB0cmFuc2l0aW9uLlxuICAgIHRoaXMuX3F1ZXVlX2NsYXNzKGFjdGl2ZUNsYXNzTmFtZSk7XG4gIH0sXG4gIF9jbGVhcl90cmFuc2l0aW9uOiBmdW5jdGlvbiBfY2xlYXJfdHJhbnNpdGlvbihoaWRlKSB7XG4gICAgdmFyIG5vZGUgPSBfcmVhY3REb20yLmRlZmF1bHQuZmluZERPTU5vZGUodGhpcyk7XG4gICAgdmFyIGFuaW1hdGlvblR5cGUgPSBoaWRlID8gXCJsZWF2ZVwiIDogXCJlbnRlclwiO1xuICAgIHZhciBjbGFzc05hbWUgPSB0aGlzLnByb3BzLnRyYW5zaXRpb24gKyBcIi1cIiArIGFuaW1hdGlvblR5cGU7XG4gICAgdmFyIGFjdGl2ZUNsYXNzTmFtZSA9IGNsYXNzTmFtZSArIFwiLWFjdGl2ZVwiO1xuXG4gICAgX0NTU0NvcmUyLmRlZmF1bHQucmVtb3ZlQ2xhc3Mobm9kZSwgY2xhc3NOYW1lKTtcbiAgICBfQ1NTQ29yZTIuZGVmYXVsdC5yZW1vdmVDbGFzcyhub2RlLCBhY3RpdmVDbGFzc05hbWUpO1xuICB9LFxuICBfc2V0X2FuaW1hdGlvbjogZnVuY3Rpb24gX3NldF9hbmltYXRpb24oaGlkZSkge1xuICAgIHZhciBub2RlID0gX3JlYWN0RG9tMi5kZWZhdWx0LmZpbmRET01Ob2RlKHRoaXMpO1xuICAgIHZhciBhbmltYXRpb25zID0gdGhpcy5fZ2V0X2FuaW1hdGlvbl9jbGFzc2VzKGhpZGUpO1xuICAgIHZhciBlbmRMaXN0ZW5lciA9IGZ1bmN0aW9uIGVuZExpc3RlbmVyKGUpIHtcbiAgICAgIGlmIChlICYmIGUudGFyZ2V0ICE9PSBub2RlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYW5pbWF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChhbmltKSB7XG4gICAgICAgIF9DU1NDb3JlMi5kZWZhdWx0LnJlbW92ZUNsYXNzKG5vZGUsIGFuaW0pO1xuICAgICAgfSk7XG5cbiAgICAgIF9SZWFjdFRyYW5zaXRpb25FdmVudHMyLmRlZmF1bHQucmVtb3ZlRW5kRXZlbnRMaXN0ZW5lcihub2RlLCBlbmRMaXN0ZW5lcik7XG4gICAgfTtcblxuICAgIF9SZWFjdFRyYW5zaXRpb25FdmVudHMyLmRlZmF1bHQuYWRkRW5kRXZlbnRMaXN0ZW5lcihub2RlLCBlbmRMaXN0ZW5lcik7XG5cbiAgICBhbmltYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKGFuaW0pIHtcbiAgICAgIF9DU1NDb3JlMi5kZWZhdWx0LmFkZENsYXNzKG5vZGUsIGFuaW0pO1xuICAgIH0pO1xuICB9LFxuICBfZ2V0X2FuaW1hdGlvbl9jbGFzc2VzOiBmdW5jdGlvbiBfZ2V0X2FuaW1hdGlvbl9jbGFzc2VzKGhpZGUpIHtcbiAgICB2YXIgYW5pbWF0aW9ucyA9IGhpZGUgPyB0aGlzLnByb3BzLmhpZGVBbmltYXRpb24gOiB0aGlzLnByb3BzLnNob3dBbmltYXRpb247XG4gICAgaWYgKFwiW29iamVjdCBBcnJheV1cIiA9PT0gdG9TdHJpbmcuY2FsbChhbmltYXRpb25zKSkge1xuICAgICAgcmV0dXJuIGFuaW1hdGlvbnM7XG4gICAgfSBlbHNlIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgYW5pbWF0aW9ucykge1xuICAgICAgcmV0dXJuIGFuaW1hdGlvbnMuc3BsaXQoXCIgXCIpO1xuICAgIH1cbiAgfSxcbiAgX2NsZWFyX2FuaW1hdGlvbjogZnVuY3Rpb24gX2NsZWFyX2FuaW1hdGlvbihoaWRlKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgYW5pbWF0aW9ucyA9IHRoaXMuX2dldF9hbmltYXRpb25fY2xhc3NlcyhoaWRlKTtcbiAgICBhbmltYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKGFuaW1hdGlvbikge1xuICAgICAgX0NTU0NvcmUyLmRlZmF1bHQucmVtb3ZlQ2xhc3MoX3JlYWN0RG9tMi5kZWZhdWx0LmZpbmRET01Ob2RlKF90aGlzMiksIGFuaW1hdGlvbik7XG4gICAgfSk7XG4gIH0sXG4gIF9xdWV1ZV9jbGFzczogZnVuY3Rpb24gX3F1ZXVlX2NsYXNzKGNsYXNzTmFtZSkge1xuICAgIHRoaXMuY2xhc3NOYW1lUXVldWUucHVzaChjbGFzc05hbWUpO1xuXG4gICAgaWYgKCF0aGlzLnRpbWVvdXQpIHtcbiAgICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQodGhpcy5fZmx1c2hfY2xhc3NfbmFtZV9xdWV1ZSwgVElDSyk7XG4gICAgfVxuICB9LFxuICBfZmx1c2hfY2xhc3NfbmFtZV9xdWV1ZTogZnVuY3Rpb24gX2ZsdXNoX2NsYXNzX25hbWVfcXVldWUoKSB7XG4gICAgaWYgKHRoaXMuX2lzX21vdW50ZWQpIHtcbiAgICAgIHRoaXMuY2xhc3NOYW1lUXVldWUuZm9yRWFjaChfQ1NTQ29yZTIuZGVmYXVsdC5hZGRDbGFzcy5iaW5kKF9DU1NDb3JlMi5kZWZhdWx0LCBfcmVhY3REb20yLmRlZmF1bHQuZmluZERPTU5vZGUodGhpcykpKTtcbiAgICB9XG4gICAgdGhpcy5jbGFzc05hbWVRdWV1ZS5sZW5ndGggPSAwO1xuICAgIHRoaXMudGltZW91dCA9IG51bGw7XG4gIH0sXG4gIF9zaG93OiBmdW5jdGlvbiBfc2hvdygpIHtcbiAgICBpZiAodGhpcy5wcm9wcy50cmFuc2l0aW9uKSB7XG4gICAgICB0aGlzLl9zZXRfdHJhbnNpdGlvbigpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5zaG93QW5pbWF0aW9uKSB7XG4gICAgICB0aGlzLl9zZXRfYW5pbWF0aW9uKCk7XG4gICAgfVxuICB9LFxuICBoYW5kbGVNb3VzZUVudGVyOiBmdW5jdGlvbiBoYW5kbGVNb3VzZUVudGVyKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmludGVydmFsSWQpO1xuICAgIHRoaXMuX3NldF9pbnRlcnZhbF9pZChudWxsKTtcbiAgICBpZiAodGhpcy5pc0hpZGluZykge1xuICAgICAgdGhpcy5fc2V0X2lzX2hpZGluZyhmYWxzZSk7XG5cbiAgICAgIGlmICh0aGlzLnByb3BzLmhpZGVBbmltYXRpb24pIHtcbiAgICAgICAgdGhpcy5fY2xlYXJfYW5pbWF0aW9uKHRydWUpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnRyYW5zaXRpb24pIHtcbiAgICAgICAgdGhpcy5fY2xlYXJfdHJhbnNpdGlvbih0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGhhbmRsZU1vdXNlTGVhdmU6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlTGVhdmUoKSB7XG4gICAgaWYgKCF0aGlzLmlzSGlkaW5nICYmICh0aGlzLnByb3BzLnRpbWVPdXQgPiAwIHx8IHRoaXMucHJvcHMuZXh0ZW5kZWRUaW1lT3V0ID4gMCkpIHtcbiAgICAgIHRoaXMuX3NldF9pbnRlcnZhbF9pZChzZXRUaW1lb3V0KHRoaXMuaGlkZVRvYXN0LCB0aGlzLnByb3BzLmV4dGVuZGVkVGltZU91dCkpO1xuICAgIH1cbiAgfSxcbiAgaGlkZVRvYXN0OiBmdW5jdGlvbiBoaWRlVG9hc3Qob3ZlcnJpZGUpIHtcbiAgICBpZiAodGhpcy5pc0hpZGluZyB8fCB0aGlzLmludGVydmFsSWQgPT09IG51bGwgJiYgIW92ZXJyaWRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fc2V0X2lzX2hpZGluZyh0cnVlKTtcbiAgICBpZiAodGhpcy5wcm9wcy50cmFuc2l0aW9uKSB7XG4gICAgICB0aGlzLl9zZXRfdHJhbnNpdGlvbih0cnVlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuaGlkZUFuaW1hdGlvbikge1xuICAgICAgdGhpcy5fc2V0X2FuaW1hdGlvbih0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faGFuZGxlX3JlbW92ZSgpO1xuICAgIH1cbiAgfSxcbiAgX3NldF9pbnRlcnZhbF9pZDogZnVuY3Rpb24gX3NldF9pbnRlcnZhbF9pZChpbnRlcnZhbElkKSB7XG4gICAgdGhpcy5pbnRlcnZhbElkID0gaW50ZXJ2YWxJZDtcbiAgfSxcbiAgX3NldF9pc19oaWRpbmc6IGZ1bmN0aW9uIF9zZXRfaXNfaGlkaW5nKGlzSGlkaW5nKSB7XG4gICAgdGhpcy5pc0hpZGluZyA9IGlzSGlkaW5nO1xuICB9XG59O1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L3JlYWN0LXRvYXN0ci9saWIvVG9hc3RNZXNzYWdlL2FuaW1hdGlvbk1peGluLmpzXG4gKiogbW9kdWxlIGlkID0gMjNcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0=')},function(module,exports,__webpack_require__){eval("/* WEBPACK VAR INJECTION */(function(process) {/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule CSSCore\n * @typechecks\n */\n\n'use strict';\n\nvar invariant = __webpack_require__(25);\n\n/**\n * The CSSCore module specifies the API (and implements most of the methods)\n * that should be used when dealing with the display of elements (via their\n * CSS classes and visibility on screen. It is an API focused on mutating the\n * display and not reading it as no logical state should be encoded in the\n * display of elements.\n */\n\nvar CSSCore = {\n\n /**\n * Adds the class passed in to the element if it doesn't already have it.\n *\n * @param {DOMElement} element the element to set the class on\n * @param {string} className the CSS className\n * @return {DOMElement} the element passed in\n */\n addClass: function (element, className) {\n !!/\\s/.test(className) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'CSSCore.addClass takes only a single class name. \"%s\" contains ' + 'multiple classes.', className) : invariant(false) : undefined;\n\n if (className) {\n if (element.classList) {\n element.classList.add(className);\n } else if (!CSSCore.hasClass(element, className)) {\n element.className = element.className + ' ' + className;\n }\n }\n return element;\n },\n\n /**\n * Removes the class passed in from the element\n *\n * @param {DOMElement} element the element to set the class on\n * @param {string} className the CSS className\n * @return {DOMElement} the element passed in\n */\n removeClass: function (element, className) {\n !!/\\s/.test(className) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'CSSCore.removeClass takes only a single class name. \"%s\" contains ' + 'multiple classes.', className) : invariant(false) : undefined;\n\n if (className) {\n if (element.classList) {\n element.classList.remove(className);\n } else if (CSSCore.hasClass(element, className)) {\n element.className = element.className.replace(new RegExp('(^|\\\\s)' + className + '(?:\\\\s|$)', 'g'), '$1').replace(/\\s+/g, ' ') // multiple spaces to one\n .replace(/^\\s*|\\s*$/g, ''); // trim the ends\n }\n }\n return element;\n },\n\n /**\n * Helper to add or remove a class from an element based on a condition.\n *\n * @param {DOMElement} element the element to set the class on\n * @param {string} className the CSS className\n * @param {*} bool condition to whether to add or remove the class\n * @return {DOMElement} the element passed in\n */\n conditionClass: function (element, className, bool) {\n return (bool ? CSSCore.addClass : CSSCore.removeClass)(element, className);\n },\n\n /**\n * Tests whether the element has the class specified.\n *\n * @param {DOMNode|DOMWindow} element the element to set the class on\n * @param {string} className the CSS className\n * @return {boolean} true if the element has the class, false if not\n */\n hasClass: function (element, className) {\n !!/\\s/.test(className) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'CSS.hasClass takes only a single class name.') : invariant(false) : undefined;\n if (element.classList) {\n return !!className && element.classList.contains(className);\n }\n return (' ' + element.className + ' ').indexOf(' ' + className + ' ') > -1;\n }\n\n};\n\nmodule.exports = CSSCore;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(18)))\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2ZianMvbGliL0NTU0NvcmUuanM/MjMyOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsV0FBVztBQUN4QixhQUFhLE9BQU87QUFDcEIsY0FBYyxXQUFXO0FBQ3pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLGFBQWEsV0FBVztBQUN4QixhQUFhLE9BQU87QUFDcEIsY0FBYyxXQUFXO0FBQ3pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxhQUFhLFdBQVc7QUFDeEIsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsRUFBRTtBQUNmLGNBQWMsV0FBVztBQUN6QjtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLGFBQWEsa0JBQWtCO0FBQy9CLGFBQWEsT0FBTztBQUNwQixjQUFjLFFBQVE7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSx5QiIsImZpbGUiOiIyNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBDU1NDb3JlXG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJy4vaW52YXJpYW50Jyk7XG5cbi8qKlxuICogVGhlIENTU0NvcmUgbW9kdWxlIHNwZWNpZmllcyB0aGUgQVBJIChhbmQgaW1wbGVtZW50cyBtb3N0IG9mIHRoZSBtZXRob2RzKVxuICogdGhhdCBzaG91bGQgYmUgdXNlZCB3aGVuIGRlYWxpbmcgd2l0aCB0aGUgZGlzcGxheSBvZiBlbGVtZW50cyAodmlhIHRoZWlyXG4gKiBDU1MgY2xhc3NlcyBhbmQgdmlzaWJpbGl0eSBvbiBzY3JlZW4uIEl0IGlzIGFuIEFQSSBmb2N1c2VkIG9uIG11dGF0aW5nIHRoZVxuICogZGlzcGxheSBhbmQgbm90IHJlYWRpbmcgaXQgYXMgbm8gbG9naWNhbCBzdGF0ZSBzaG91bGQgYmUgZW5jb2RlZCBpbiB0aGVcbiAqIGRpc3BsYXkgb2YgZWxlbWVudHMuXG4gKi9cblxudmFyIENTU0NvcmUgPSB7XG5cbiAgLyoqXG4gICAqIEFkZHMgdGhlIGNsYXNzIHBhc3NlZCBpbiB0byB0aGUgZWxlbWVudCBpZiBpdCBkb2Vzbid0IGFscmVhZHkgaGF2ZSBpdC5cbiAgICpcbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBlbGVtZW50IHRoZSBlbGVtZW50IHRvIHNldCB0aGUgY2xhc3Mgb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSB0aGUgQ1NTIGNsYXNzTmFtZVxuICAgKiBAcmV0dXJuIHtET01FbGVtZW50fSB0aGUgZWxlbWVudCBwYXNzZWQgaW5cbiAgICovXG4gIGFkZENsYXNzOiBmdW5jdGlvbiAoZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gICAgISEvXFxzLy50ZXN0KGNsYXNzTmFtZSkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnQ1NTQ29yZS5hZGRDbGFzcyB0YWtlcyBvbmx5IGEgc2luZ2xlIGNsYXNzIG5hbWUuIFwiJXNcIiBjb250YWlucyAnICsgJ211bHRpcGxlIGNsYXNzZXMuJywgY2xhc3NOYW1lKSA6IGludmFyaWFudChmYWxzZSkgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoY2xhc3NOYW1lKSB7XG4gICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7XG4gICAgICB9IGVsc2UgaWYgKCFDU1NDb3JlLmhhc0NsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSBlbGVtZW50LmNsYXNzTmFtZSArICcgJyArIGNsYXNzTmFtZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGNsYXNzIHBhc3NlZCBpbiBmcm9tIHRoZSBlbGVtZW50XG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gZWxlbWVudCB0aGUgZWxlbWVudCB0byBzZXQgdGhlIGNsYXNzIG9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWUgdGhlIENTUyBjbGFzc05hbWVcbiAgICogQHJldHVybiB7RE9NRWxlbWVudH0gdGhlIGVsZW1lbnQgcGFzc2VkIGluXG4gICAqL1xuICByZW1vdmVDbGFzczogZnVuY3Rpb24gKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xuICAgICEhL1xccy8udGVzdChjbGFzc05hbWUpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ0NTU0NvcmUucmVtb3ZlQ2xhc3MgdGFrZXMgb25seSBhIHNpbmdsZSBjbGFzcyBuYW1lLiBcIiVzXCIgY29udGFpbnMgJyArICdtdWx0aXBsZSBjbGFzc2VzLicsIGNsYXNzTmFtZSkgOiBpbnZhcmlhbnQoZmFsc2UpIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKGNsYXNzTmFtZSkge1xuICAgICAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0KSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpO1xuICAgICAgfSBlbHNlIGlmIChDU1NDb3JlLmhhc0NsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSBlbGVtZW50LmNsYXNzTmFtZS5yZXBsYWNlKG5ldyBSZWdFeHAoJyhefFxcXFxzKScgKyBjbGFzc05hbWUgKyAnKD86XFxcXHN8JCknLCAnZycpLCAnJDEnKS5yZXBsYWNlKC9cXHMrL2csICcgJykgLy8gbXVsdGlwbGUgc3BhY2VzIHRvIG9uZVxuICAgICAgICAucmVwbGFjZSgvXlxccyp8XFxzKiQvZywgJycpOyAvLyB0cmltIHRoZSBlbmRzXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50O1xuICB9LFxuXG4gIC8qKlxuICAgKiBIZWxwZXIgdG8gYWRkIG9yIHJlbW92ZSBhIGNsYXNzIGZyb20gYW4gZWxlbWVudCBiYXNlZCBvbiBhIGNvbmRpdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBlbGVtZW50IHRoZSBlbGVtZW50IHRvIHNldCB0aGUgY2xhc3Mgb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSB0aGUgQ1NTIGNsYXNzTmFtZVxuICAgKiBAcGFyYW0geyp9IGJvb2wgY29uZGl0aW9uIHRvIHdoZXRoZXIgdG8gYWRkIG9yIHJlbW92ZSB0aGUgY2xhc3NcbiAgICogQHJldHVybiB7RE9NRWxlbWVudH0gdGhlIGVsZW1lbnQgcGFzc2VkIGluXG4gICAqL1xuICBjb25kaXRpb25DbGFzczogZnVuY3Rpb24gKGVsZW1lbnQsIGNsYXNzTmFtZSwgYm9vbCkge1xuICAgIHJldHVybiAoYm9vbCA/IENTU0NvcmUuYWRkQ2xhc3MgOiBDU1NDb3JlLnJlbW92ZUNsYXNzKShlbGVtZW50LCBjbGFzc05hbWUpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBUZXN0cyB3aGV0aGVyIHRoZSBlbGVtZW50IGhhcyB0aGUgY2xhc3Mgc3BlY2lmaWVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0RPTU5vZGV8RE9NV2luZG93fSBlbGVtZW50IHRoZSBlbGVtZW50IHRvIHNldCB0aGUgY2xhc3Mgb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSB0aGUgQ1NTIGNsYXNzTmFtZVxuICAgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHRoZSBlbGVtZW50IGhhcyB0aGUgY2xhc3MsIGZhbHNlIGlmIG5vdFxuICAgKi9cbiAgaGFzQ2xhc3M6IGZ1bmN0aW9uIChlbGVtZW50LCBjbGFzc05hbWUpIHtcbiAgICAhIS9cXHMvLnRlc3QoY2xhc3NOYW1lKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdDU1MuaGFzQ2xhc3MgdGFrZXMgb25seSBhIHNpbmdsZSBjbGFzcyBuYW1lLicpIDogaW52YXJpYW50KGZhbHNlKSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QpIHtcbiAgICAgIHJldHVybiAhIWNsYXNzTmFtZSAmJiBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gKCcgJyArIGVsZW1lbnQuY2xhc3NOYW1lICsgJyAnKS5pbmRleE9mKCcgJyArIGNsYXNzTmFtZSArICcgJykgPiAtMTtcbiAgfVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENTU0NvcmU7XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34vZmJqcy9saWIvQ1NTQ29yZS5qc1xuICoqIG1vZHVsZSBpZCA9IDI0XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports,__webpack_require__){eval("/* WEBPACK VAR INJECTION */(function(process) {/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule invariant\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nfunction invariant(condition, format, a, b, c, d, e, f) {\n if (process.env.NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n}\n\nmodule.exports = invariant;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(18)))\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2ZianMvbGliL2ludmFyaWFudC5qcz80NTk5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQ7QUFDckQsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUEsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTs7QUFFQSwyQiIsImZpbGUiOiIyNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBpbnZhcmlhbnRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVXNlIGludmFyaWFudCgpIHRvIGFzc2VydCBzdGF0ZSB3aGljaCB5b3VyIHByb2dyYW0gYXNzdW1lcyB0byBiZSB0cnVlLlxuICpcbiAqIFByb3ZpZGUgc3ByaW50Zi1zdHlsZSBmb3JtYXQgKG9ubHkgJXMgaXMgc3VwcG9ydGVkKSBhbmQgYXJndW1lbnRzXG4gKiB0byBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgYnJva2UgYW5kIHdoYXQgeW91IHdlcmVcbiAqIGV4cGVjdGluZy5cbiAqXG4gKiBUaGUgaW52YXJpYW50IG1lc3NhZ2Ugd2lsbCBiZSBzdHJpcHBlZCBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGludmFyaWFudFxuICogd2lsbCByZW1haW4gdG8gZW5zdXJlIGxvZ2ljIGRvZXMgbm90IGRpZmZlciBpbiBwcm9kdWN0aW9uLlxuICovXG5cbmZ1bmN0aW9uIGludmFyaWFudChjb25kaXRpb24sIGZvcm1hdCwgYSwgYiwgYywgZCwgZSwgZikge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhcmlhbnQgcmVxdWlyZXMgYW4gZXJyb3IgbWVzc2FnZSBhcmd1bWVudCcpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29uZGl0aW9uKSB7XG4gICAgdmFyIGVycm9yO1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoJ01pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50ICcgKyAnZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGFyZ3MgPSBbYSwgYiwgYywgZCwgZSwgZl07XG4gICAgICB2YXIgYXJnSW5kZXggPSAwO1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107XG4gICAgICB9KSk7XG4gICAgICBlcnJvci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgIH1cblxuICAgIGVycm9yLmZyYW1lc1RvUG9wID0gMTsgLy8gd2UgZG9uJ3QgY2FyZSBhYm91dCBpbnZhcmlhbnQncyBvd24gZnJhbWVcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGludmFyaWFudDtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vfi9mYmpzL2xpYi9pbnZhcmlhbnQuanNcbiAqKiBtb2R1bGUgaWQgPSAyNVxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports,__webpack_require__){eval("/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactTransitionEvents\n */\n\n'use strict';\n\nvar ExecutionEnvironment = __webpack_require__(27);\n\n/**\n * EVENT_NAME_MAP is used to determine which event fired when a\n * transition/animation ends, based on the style property used to\n * define that event.\n */\nvar EVENT_NAME_MAP = {\n transitionend: {\n 'transition': 'transitionend',\n 'WebkitTransition': 'webkitTransitionEnd',\n 'MozTransition': 'mozTransitionEnd',\n 'OTransition': 'oTransitionEnd',\n 'msTransition': 'MSTransitionEnd'\n },\n\n animationend: {\n 'animation': 'animationend',\n 'WebkitAnimation': 'webkitAnimationEnd',\n 'MozAnimation': 'mozAnimationEnd',\n 'OAnimation': 'oAnimationEnd',\n 'msAnimation': 'MSAnimationEnd'\n }\n};\n\nvar endEvents = [];\n\nfunction detectEvents() {\n var testEl = document.createElement('div');\n var style = testEl.style;\n\n // On some platforms, in particular some releases of Android 4.x,\n // the un-prefixed \"animation\" and \"transition\" properties are defined on the\n // style object but the events that fire will still be prefixed, so we need\n // to check if the un-prefixed events are useable, and if not remove them\n // from the map\n if (!('AnimationEvent' in window)) {\n delete EVENT_NAME_MAP.animationend.animation;\n }\n\n if (!('TransitionEvent' in window)) {\n delete EVENT_NAME_MAP.transitionend.transition;\n }\n\n for (var baseEventName in EVENT_NAME_MAP) {\n var baseEvents = EVENT_NAME_MAP[baseEventName];\n for (var styleName in baseEvents) {\n if (styleName in style) {\n endEvents.push(baseEvents[styleName]);\n break;\n }\n }\n }\n}\n\nif (ExecutionEnvironment.canUseDOM) {\n detectEvents();\n}\n\n// We use the raw {add|remove}EventListener() call because EventListener\n// does not know how to remove event listeners and we really should\n// clean up. Also, these events are not triggered in older browsers\n// so we should be A-OK here.\n\nfunction addEventListener(node, eventName, eventListener) {\n node.addEventListener(eventName, eventListener, false);\n}\n\nfunction removeEventListener(node, eventName, eventListener) {\n node.removeEventListener(eventName, eventListener, false);\n}\n\nvar ReactTransitionEvents = {\n addEndEventListener: function (node, eventListener) {\n if (endEvents.length === 0) {\n // If CSS transitions are not supported, trigger an \"end animation\"\n // event immediately.\n window.setTimeout(eventListener, 0);\n return;\n }\n endEvents.forEach(function (endEvent) {\n addEventListener(node, endEvent, eventListener);\n });\n },\n\n removeEndEventListener: function (node, eventListener) {\n if (endEvents.length === 0) {\n return;\n }\n endEvents.forEach(function (endEvent) {\n removeEventListener(node, endEvent, eventListener);\n });\n }\n};\n\nmodule.exports = ReactTransitionEvents;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L3JlYWN0L2xpYi9SZWFjdFRyYW5zaXRpb25FdmVudHMuanM/YjZhYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsV0FBVztBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBIiwiZmlsZSI6IjI2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0VHJhbnNpdGlvbkV2ZW50c1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZSgnZmJqcy9saWIvRXhlY3V0aW9uRW52aXJvbm1lbnQnKTtcblxuLyoqXG4gKiBFVkVOVF9OQU1FX01BUCBpcyB1c2VkIHRvIGRldGVybWluZSB3aGljaCBldmVudCBmaXJlZCB3aGVuIGFcbiAqIHRyYW5zaXRpb24vYW5pbWF0aW9uIGVuZHMsIGJhc2VkIG9uIHRoZSBzdHlsZSBwcm9wZXJ0eSB1c2VkIHRvXG4gKiBkZWZpbmUgdGhhdCBldmVudC5cbiAqL1xudmFyIEVWRU5UX05BTUVfTUFQID0ge1xuICB0cmFuc2l0aW9uZW5kOiB7XG4gICAgJ3RyYW5zaXRpb24nOiAndHJhbnNpdGlvbmVuZCcsXG4gICAgJ1dlYmtpdFRyYW5zaXRpb24nOiAnd2Via2l0VHJhbnNpdGlvbkVuZCcsXG4gICAgJ01velRyYW5zaXRpb24nOiAnbW96VHJhbnNpdGlvbkVuZCcsXG4gICAgJ09UcmFuc2l0aW9uJzogJ29UcmFuc2l0aW9uRW5kJyxcbiAgICAnbXNUcmFuc2l0aW9uJzogJ01TVHJhbnNpdGlvbkVuZCdcbiAgfSxcblxuICBhbmltYXRpb25lbmQ6IHtcbiAgICAnYW5pbWF0aW9uJzogJ2FuaW1hdGlvbmVuZCcsXG4gICAgJ1dlYmtpdEFuaW1hdGlvbic6ICd3ZWJraXRBbmltYXRpb25FbmQnLFxuICAgICdNb3pBbmltYXRpb24nOiAnbW96QW5pbWF0aW9uRW5kJyxcbiAgICAnT0FuaW1hdGlvbic6ICdvQW5pbWF0aW9uRW5kJyxcbiAgICAnbXNBbmltYXRpb24nOiAnTVNBbmltYXRpb25FbmQnXG4gIH1cbn07XG5cbnZhciBlbmRFdmVudHMgPSBbXTtcblxuZnVuY3Rpb24gZGV0ZWN0RXZlbnRzKCkge1xuICB2YXIgdGVzdEVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHZhciBzdHlsZSA9IHRlc3RFbC5zdHlsZTtcblxuICAvLyBPbiBzb21lIHBsYXRmb3JtcywgaW4gcGFydGljdWxhciBzb21lIHJlbGVhc2VzIG9mIEFuZHJvaWQgNC54LFxuICAvLyB0aGUgdW4tcHJlZml4ZWQgXCJhbmltYXRpb25cIiBhbmQgXCJ0cmFuc2l0aW9uXCIgcHJvcGVydGllcyBhcmUgZGVmaW5lZCBvbiB0aGVcbiAgLy8gc3R5bGUgb2JqZWN0IGJ1dCB0aGUgZXZlbnRzIHRoYXQgZmlyZSB3aWxsIHN0aWxsIGJlIHByZWZpeGVkLCBzbyB3ZSBuZWVkXG4gIC8vIHRvIGNoZWNrIGlmIHRoZSB1bi1wcmVmaXhlZCBldmVudHMgYXJlIHVzZWFibGUsIGFuZCBpZiBub3QgcmVtb3ZlIHRoZW1cbiAgLy8gZnJvbSB0aGUgbWFwXG4gIGlmICghKCdBbmltYXRpb25FdmVudCcgaW4gd2luZG93KSkge1xuICAgIGRlbGV0ZSBFVkVOVF9OQU1FX01BUC5hbmltYXRpb25lbmQuYW5pbWF0aW9uO1xuICB9XG5cbiAgaWYgKCEoJ1RyYW5zaXRpb25FdmVudCcgaW4gd2luZG93KSkge1xuICAgIGRlbGV0ZSBFVkVOVF9OQU1FX01BUC50cmFuc2l0aW9uZW5kLnRyYW5zaXRpb247XG4gIH1cblxuICBmb3IgKHZhciBiYXNlRXZlbnROYW1lIGluIEVWRU5UX05BTUVfTUFQKSB7XG4gICAgdmFyIGJhc2VFdmVudHMgPSBFVkVOVF9OQU1FX01BUFtiYXNlRXZlbnROYW1lXTtcbiAgICBmb3IgKHZhciBzdHlsZU5hbWUgaW4gYmFzZUV2ZW50cykge1xuICAgICAgaWYgKHN0eWxlTmFtZSBpbiBzdHlsZSkge1xuICAgICAgICBlbmRFdmVudHMucHVzaChiYXNlRXZlbnRzW3N0eWxlTmFtZV0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuaWYgKEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSkge1xuICBkZXRlY3RFdmVudHMoKTtcbn1cblxuLy8gV2UgdXNlIHRoZSByYXcge2FkZHxyZW1vdmV9RXZlbnRMaXN0ZW5lcigpIGNhbGwgYmVjYXVzZSBFdmVudExpc3RlbmVyXG4vLyBkb2VzIG5vdCBrbm93IGhvdyB0byByZW1vdmUgZXZlbnQgbGlzdGVuZXJzIGFuZCB3ZSByZWFsbHkgc2hvdWxkXG4vLyBjbGVhbiB1cC4gQWxzbywgdGhlc2UgZXZlbnRzIGFyZSBub3QgdHJpZ2dlcmVkIGluIG9sZGVyIGJyb3dzZXJzXG4vLyBzbyB3ZSBzaG91bGQgYmUgQS1PSyBoZXJlLlxuXG5mdW5jdGlvbiBhZGRFdmVudExpc3RlbmVyKG5vZGUsIGV2ZW50TmFtZSwgZXZlbnRMaXN0ZW5lcikge1xuICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBldmVudExpc3RlbmVyLCBmYWxzZSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXIobm9kZSwgZXZlbnROYW1lLCBldmVudExpc3RlbmVyKSB7XG4gIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGV2ZW50TGlzdGVuZXIsIGZhbHNlKTtcbn1cblxudmFyIFJlYWN0VHJhbnNpdGlvbkV2ZW50cyA9IHtcbiAgYWRkRW5kRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gKG5vZGUsIGV2ZW50TGlzdGVuZXIpIHtcbiAgICBpZiAoZW5kRXZlbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gSWYgQ1NTIHRyYW5zaXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkLCB0cmlnZ2VyIGFuIFwiZW5kIGFuaW1hdGlvblwiXG4gICAgICAvLyBldmVudCBpbW1lZGlhdGVseS5cbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGV2ZW50TGlzdGVuZXIsIDApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbmRFdmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZW5kRXZlbnQpIHtcbiAgICAgIGFkZEV2ZW50TGlzdGVuZXIobm9kZSwgZW5kRXZlbnQsIGV2ZW50TGlzdGVuZXIpO1xuICAgIH0pO1xuICB9LFxuXG4gIHJlbW92ZUVuZEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uIChub2RlLCBldmVudExpc3RlbmVyKSB7XG4gICAgaWYgKGVuZEV2ZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZW5kRXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGVuZEV2ZW50KSB7XG4gICAgICByZW1vdmVFdmVudExpc3RlbmVyKG5vZGUsIGVuZEV2ZW50LCBldmVudExpc3RlbmVyKTtcbiAgICB9KTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFRyYW5zaXRpb25FdmVudHM7XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34vcmVhY3QvbGliL1JlYWN0VHJhbnNpdGlvbkV2ZW50cy5qc1xuICoqIG1vZHVsZSBpZCA9IDI2XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9"); -},function(module,exports){eval("/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ExecutionEnvironment\n */\n\n'use strict';\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\n/**\n * Simple, lightweight module assisting with the detection and context of\n * Worker. Helps avoid circular dependencies and allows code to reason about\n * whether or not they are in a Worker, even if they never include the main\n * `ReactWorker` dependency.\n */\nvar ExecutionEnvironment = {\n\n canUseDOM: canUseDOM,\n\n canUseWorkers: typeof Worker !== 'undefined',\n\n canUseEventListeners: canUseDOM && !!(window.addEventListener || window.attachEvent),\n\n canUseViewport: canUseDOM && !!window.screen,\n\n isInWorker: !canUseDOM // For now, this is true - might change in the future.\n\n};\n\nmodule.exports = ExecutionEnvironment;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L3JlYWN0L34vZmJqcy9saWIvRXhlY3V0aW9uRW52aXJvbm1lbnQuanM/MjAzNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSIsImZpbGUiOiIyNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBFeGVjdXRpb25FbnZpcm9ubWVudFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGNhblVzZURPTSA9ICEhKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5kb2N1bWVudCAmJiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbi8qKlxuICogU2ltcGxlLCBsaWdodHdlaWdodCBtb2R1bGUgYXNzaXN0aW5nIHdpdGggdGhlIGRldGVjdGlvbiBhbmQgY29udGV4dCBvZlxuICogV29ya2VyLiBIZWxwcyBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMgYW5kIGFsbG93cyBjb2RlIHRvIHJlYXNvbiBhYm91dFxuICogd2hldGhlciBvciBub3QgdGhleSBhcmUgaW4gYSBXb3JrZXIsIGV2ZW4gaWYgdGhleSBuZXZlciBpbmNsdWRlIHRoZSBtYWluXG4gKiBgUmVhY3RXb3JrZXJgIGRlcGVuZGVuY3kuXG4gKi9cbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHtcblxuICBjYW5Vc2VET006IGNhblVzZURPTSxcblxuICBjYW5Vc2VXb3JrZXJzOiB0eXBlb2YgV29ya2VyICE9PSAndW5kZWZpbmVkJyxcblxuICBjYW5Vc2VFdmVudExpc3RlbmVyczogY2FuVXNlRE9NICYmICEhKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyIHx8IHdpbmRvdy5hdHRhY2hFdmVudCksXG5cbiAgY2FuVXNlVmlld3BvcnQ6IGNhblVzZURPTSAmJiAhIXdpbmRvdy5zY3JlZW4sXG5cbiAgaXNJbldvcmtlcjogIWNhblVzZURPTSAvLyBGb3Igbm93LCB0aGlzIGlzIHRydWUgLSBtaWdodCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS5cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFeGVjdXRpb25FbnZpcm9ubWVudDtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vfi9yZWFjdC9+L2ZianMvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50LmpzXG4gKiogbW9kdWxlIGlkID0gMjdcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports,__webpack_require__){eval('"use strict";\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _reactDom = __webpack_require__(5);\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction call_show_method($node, props) {\n $node[props.showMethod]({\n duration: props.showDuration,\n easing: props.showEasing\n });\n}\n\nexports.default = {\n getDefaultProps: function getDefaultProps() {\n return {\n style: {\n display: "none" },\n // effective $.hide()\n showMethod: "fadeIn", // slideDown, and show are built into jQuery\n showDuration: 300,\n showEasing: "swing", // and linear are built into jQuery\n hideMethod: "fadeOut",\n hideDuration: 1000,\n hideEasing: "swing",\n //\n timeOut: 5000,\n extendedTimeOut: 1000\n };\n },\n getInitialState: function getInitialState() {\n return {\n intervalId: null,\n isHiding: false\n };\n },\n componentDidMount: function componentDidMount() {\n call_show_method(this._get_$_node(), this.props);\n if (this.props.timeOut > 0) {\n this._set_interval_id(setTimeout(this.hideToast, this.props.timeOut));\n }\n },\n handleMouseEnter: function handleMouseEnter() {\n clearTimeout(this.state.intervalId);\n this._set_interval_id(null);\n this._set_is_hiding(false);\n\n call_show_method(this._get_$_node().stop(true, true), this.props);\n },\n handleMouseLeave: function handleMouseLeave() {\n if (!this.state.isHiding && (this.props.timeOut > 0 || this.props.extendedTimeOut > 0)) {\n this._set_interval_id(setTimeout(this.hideToast, this.props.extendedTimeOut));\n }\n },\n hideToast: function hideToast(override) {\n if (this.state.isHiding || this.state.intervalId === null && !override) {\n return;\n }\n this.setState({ isHiding: true });\n\n this._get_$_node()[this.props.hideMethod]({\n duration: this.props.hideDuration,\n easing: this.props.hideEasing,\n complete: this._handle_remove\n });\n },\n _get_$_node: function _get_$_node() {\n /* eslint-disable no-undef */\n return jQuery(_reactDom2.default.findDOMNode(this));\n /* eslint-enable no-undef */\n },\n _set_interval_id: function _set_interval_id(intervalId) {\n this.setState({\n intervalId: intervalId\n });\n },\n _set_is_hiding: function _set_is_hiding(isHiding) {\n this.setState({\n isHiding: isHiding\n });\n }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXRvYXN0ci9saWIvVG9hc3RNZXNzYWdlL2pRdWVyeU1peGluLmpzPzQ1NGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7O0FBRUEsc0NBQXNDLHVDQUF1QyxnQkFBZ0I7O0FBRTdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGlCQUFpQjs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EiLCJmaWxlIjoiMjguanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9yZWFjdERvbSA9IHJlcXVpcmUoXCJyZWFjdC1kb21cIik7XG5cbnZhciBfcmVhY3REb20yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3REb20pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBjYWxsX3Nob3dfbWV0aG9kKCRub2RlLCBwcm9wcykge1xuICAkbm9kZVtwcm9wcy5zaG93TWV0aG9kXSh7XG4gICAgZHVyYXRpb246IHByb3BzLnNob3dEdXJhdGlvbixcbiAgICBlYXNpbmc6IHByb3BzLnNob3dFYXNpbmdcbiAgfSk7XG59XG5cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgZ2V0RGVmYXVsdFByb3BzOiBmdW5jdGlvbiBnZXREZWZhdWx0UHJvcHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIGRpc3BsYXk6IFwibm9uZVwiIH0sXG4gICAgICAvLyBlZmZlY3RpdmUgJC5oaWRlKClcbiAgICAgIHNob3dNZXRob2Q6IFwiZmFkZUluXCIsIC8vIHNsaWRlRG93biwgYW5kIHNob3cgYXJlIGJ1aWx0IGludG8galF1ZXJ5XG4gICAgICBzaG93RHVyYXRpb246IDMwMCxcbiAgICAgIHNob3dFYXNpbmc6IFwic3dpbmdcIiwgLy8gYW5kIGxpbmVhciBhcmUgYnVpbHQgaW50byBqUXVlcnlcbiAgICAgIGhpZGVNZXRob2Q6IFwiZmFkZU91dFwiLFxuICAgICAgaGlkZUR1cmF0aW9uOiAxMDAwLFxuICAgICAgaGlkZUVhc2luZzogXCJzd2luZ1wiLFxuICAgICAgLy9cbiAgICAgIHRpbWVPdXQ6IDUwMDAsXG4gICAgICBleHRlbmRlZFRpbWVPdXQ6IDEwMDBcbiAgICB9O1xuICB9LFxuICBnZXRJbml0aWFsU3RhdGU6IGZ1bmN0aW9uIGdldEluaXRpYWxTdGF0ZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaW50ZXJ2YWxJZDogbnVsbCxcbiAgICAgIGlzSGlkaW5nOiBmYWxzZVxuICAgIH07XG4gIH0sXG4gIGNvbXBvbmVudERpZE1vdW50OiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjYWxsX3Nob3dfbWV0aG9kKHRoaXMuX2dldF8kX25vZGUoKSwgdGhpcy5wcm9wcyk7XG4gICAgaWYgKHRoaXMucHJvcHMudGltZU91dCA+IDApIHtcbiAgICAgIHRoaXMuX3NldF9pbnRlcnZhbF9pZChzZXRUaW1lb3V0KHRoaXMuaGlkZVRvYXN0LCB0aGlzLnByb3BzLnRpbWVPdXQpKTtcbiAgICB9XG4gIH0sXG4gIGhhbmRsZU1vdXNlRW50ZXI6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlRW50ZXIoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuc3RhdGUuaW50ZXJ2YWxJZCk7XG4gICAgdGhpcy5fc2V0X2ludGVydmFsX2lkKG51bGwpO1xuICAgIHRoaXMuX3NldF9pc19oaWRpbmcoZmFsc2UpO1xuXG4gICAgY2FsbF9zaG93X21ldGhvZCh0aGlzLl9nZXRfJF9ub2RlKCkuc3RvcCh0cnVlLCB0cnVlKSwgdGhpcy5wcm9wcyk7XG4gIH0sXG4gIGhhbmRsZU1vdXNlTGVhdmU6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlTGVhdmUoKSB7XG4gICAgaWYgKCF0aGlzLnN0YXRlLmlzSGlkaW5nICYmICh0aGlzLnByb3BzLnRpbWVPdXQgPiAwIHx8IHRoaXMucHJvcHMuZXh0ZW5kZWRUaW1lT3V0ID4gMCkpIHtcbiAgICAgIHRoaXMuX3NldF9pbnRlcnZhbF9pZChzZXRUaW1lb3V0KHRoaXMuaGlkZVRvYXN0LCB0aGlzLnByb3BzLmV4dGVuZGVkVGltZU91dCkpO1xuICAgIH1cbiAgfSxcbiAgaGlkZVRvYXN0OiBmdW5jdGlvbiBoaWRlVG9hc3Qob3ZlcnJpZGUpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5pc0hpZGluZyB8fCB0aGlzLnN0YXRlLmludGVydmFsSWQgPT09IG51bGwgJiYgIW92ZXJyaWRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoeyBpc0hpZGluZzogdHJ1ZSB9KTtcblxuICAgIHRoaXMuX2dldF8kX25vZGUoKVt0aGlzLnByb3BzLmhpZGVNZXRob2RdKHtcbiAgICAgIGR1cmF0aW9uOiB0aGlzLnByb3BzLmhpZGVEdXJhdGlvbixcbiAgICAgIGVhc2luZzogdGhpcy5wcm9wcy5oaWRlRWFzaW5nLFxuICAgICAgY29tcGxldGU6IHRoaXMuX2hhbmRsZV9yZW1vdmVcbiAgICB9KTtcbiAgfSxcbiAgX2dldF8kX25vZGU6IGZ1bmN0aW9uIF9nZXRfJF9ub2RlKCkge1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG4gICAgcmV0dXJuIGpRdWVyeShfcmVhY3REb20yLmRlZmF1bHQuZmluZERPTU5vZGUodGhpcykpO1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW5kZWYgKi9cbiAgfSxcbiAgX3NldF9pbnRlcnZhbF9pZDogZnVuY3Rpb24gX3NldF9pbnRlcnZhbF9pZChpbnRlcnZhbElkKSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpbnRlcnZhbElkOiBpbnRlcnZhbElkXG4gICAgfSk7XG4gIH0sXG4gIF9zZXRfaXNfaGlkaW5nOiBmdW5jdGlvbiBfc2V0X2lzX2hpZGluZyhpc0hpZGluZykge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXNIaWRpbmc6IGlzSGlkaW5nXG4gICAgfSk7XG4gIH1cbn07XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34vcmVhY3QtdG9hc3RyL2xpYi9Ub2FzdE1lc3NhZ2UvalF1ZXJ5TWl4aW4uanNcbiAqKiBtb2R1bGUgaWQgPSAyOFxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ==')},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _PageButtonJs = __webpack_require__(30);\n\nvar _PageButtonJs2 = _interopRequireDefault(_PageButtonJs);\n\nvar _Const = __webpack_require__(3);\n\nvar _Const2 = _interopRequireDefault(_Const);\n\nvar PaginationList = (function (_Component) {\n _inherits(PaginationList, _Component);\n\n function PaginationList() {\n var _this = this;\n\n _classCallCheck(this, PaginationList);\n\n _get(Object.getPrototypeOf(PaginationList.prototype), 'constructor', this).apply(this, arguments);\n\n this.changePage = function (page) {\n var _props = _this.props;\n var prePage = _props.prePage;\n var currPage = _props.currPage;\n var nextPage = _props.nextPage;\n var lastPage = _props.lastPage;\n var firstPage = _props.firstPage;\n var sizePerPage = _props.sizePerPage;\n\n if (page === prePage) {\n page = currPage - 1 < 1 ? 1 : currPage - 1;\n } else if (page === nextPage) {\n page = currPage + 1 > _this.totalPages ? _this.totalPages : currPage + 1;\n } else if (page === lastPage) {\n page = _this.totalPages;\n } else if (page === firstPage) {\n page = 1;\n } else {\n page = parseInt(page, 10);\n }\n\n if (page !== currPage) {\n _this.props.changePage(page, sizePerPage);\n }\n };\n\n this.changeSizePerPage = function (e) {\n e.preventDefault();\n\n var selectSize = parseInt(e.currentTarget.text, 10);\n var currPage = _this.props.currPage;\n\n if (selectSize !== _this.props.sizePerPage) {\n _this.totalPages = Math.ceil(_this.props.dataSize / selectSize);\n if (currPage > _this.totalPages) currPage = _this.totalPages;\n\n _this.props.changePage(currPage, selectSize);\n if (_this.props.onSizePerPageList) {\n _this.props.onSizePerPageList(selectSize);\n }\n }\n };\n }\n\n _createClass(PaginationList, [{\n key: 'render',\n value: function render() {\n var _this2 = this;\n\n var _props2 = this.props;\n var dataSize = _props2.dataSize;\n var sizePerPage = _props2.sizePerPage;\n var sizePerPageList = _props2.sizePerPageList;\n\n this.totalPages = Math.ceil(dataSize / sizePerPage);\n var pageBtns = this.makePage();\n var pageListStyle = {\n float: 'right',\n // override the margin-top defined in .pagination class in bootstrap.\n marginTop: '0px'\n };\n\n var sizePerPageOptions = sizePerPageList.map(function (_sizePerPage) {\n return _react2['default'].createElement(\n 'li',\n { key: _sizePerPage, role: 'presentation' },\n _react2['default'].createElement(\n 'a',\n { role: 'menuitem',\n tabIndex: '-1', href: '#',\n onClick: _this2.changeSizePerPage },\n _sizePerPage\n )\n );\n });\n\n return _react2['default'].createElement(\n 'div',\n { className: 'row', style: { marginTop: 15 } },\n sizePerPageList.length > 1 ? _react2['default'].createElement(\n 'div',\n null,\n _react2['default'].createElement(\n 'div',\n { className: 'col-md-6' },\n _react2['default'].createElement(\n 'div',\n { className: 'dropdown' },\n _react2['default'].createElement(\n 'button',\n { className: 'btn btn-default dropdown-toggle',\n type: 'button', id: 'pageDropDown', 'data-toggle': 'dropdown',\n 'aria-expanded': 'true' },\n sizePerPage,\n _react2['default'].createElement(\n 'span',\n null,\n ' ',\n _react2['default'].createElement('span', { className: 'caret' })\n )\n ),\n _react2['default'].createElement(\n 'ul',\n { className: 'dropdown-menu', role: 'menu', 'aria-labelledby': 'pageDropDown' },\n sizePerPageOptions\n )\n )\n ),\n _react2['default'].createElement(\n 'div',\n { className: 'col-md-6' },\n _react2['default'].createElement(\n 'ul',\n { className: 'pagination', style: pageListStyle },\n pageBtns\n )\n )\n ) : _react2['default'].createElement(\n 'div',\n { className: 'col-md-12' },\n _react2['default'].createElement(\n 'ul',\n { className: 'pagination', style: pageListStyle },\n pageBtns\n )\n )\n );\n }\n }, {\n key: 'makePage',\n value: function makePage() {\n var pages = this.getPages();\n return pages.map(function (page) {\n var isActive = page === this.props.currPage;\n var disabled = false;\n var hidden = false;\n if (this.props.currPage === 1 && (page === this.props.firstPage || page === this.props.prePage)) {\n disabled = true;\n hidden = true;\n }\n if (this.props.currPage === this.totalPages && (page === this.props.nextPage || page === this.props.lastPage)) {\n disabled = true;\n hidden = true;\n }\n return _react2['default'].createElement(\n _PageButtonJs2['default'],\n { key: page,\n changePage: this.changePage,\n active: isActive,\n disable: disabled,\n hidden: hidden },\n page\n );\n }, this);\n }\n }, {\n key: 'getPages',\n value: function getPages() {\n var pages = undefined;\n var startPage = 1;\n var endPage = this.totalPages;\n\n startPage = Math.max(this.props.currPage - Math.floor(this.props.paginationSize / 2), 1);\n endPage = startPage + this.props.paginationSize - 1;\n\n if (endPage > this.totalPages) {\n endPage = this.totalPages;\n startPage = endPage - this.props.paginationSize + 1;\n }\n\n if (startPage !== 1 && this.totalPages > this.props.paginationSize) {\n pages = [this.props.firstPage, this.props.prePage];\n } else if (this.totalPages > 1) {\n pages = [this.props.prePage];\n } else {\n pages = [];\n }\n\n for (var i = startPage; i <= endPage; i++) {\n if (i > 0) pages.push(i);\n }\n\n if (endPage !== this.totalPages) {\n pages.push(this.props.nextPage);\n pages.push(this.props.lastPage);\n } else if (this.totalPages > 1) {\n pages.push(this.props.nextPage);\n }\n return pages;\n }\n }]);\n\n return PaginationList;\n})(_react.Component);\n\nPaginationList.propTypes = {\n currPage: _react.PropTypes.number,\n sizePerPage: _react.PropTypes.number,\n dataSize: _react.PropTypes.number,\n changePage: _react.PropTypes.func,\n sizePerPageList: _react.PropTypes.array,\n paginationSize: _react.PropTypes.number,\n remote: _react.PropTypes.bool,\n onSizePerPageList: _react.PropTypes.func,\n prePage: _react.PropTypes.string\n};\n\nPaginationList.defaultProps = {\n sizePerPage: _Const2['default'].SIZE_PER_PAGE\n};\n\nexports['default'] = PaginationList;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvcGFnaW5hdGlvbi9QYWdpbmF0aW9uTGlzdC5qcz81N2U5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7aUNBQTRDLENBQU87Ozs7d0NBQzVCLEVBQWlCOzs7O2lDQUN0QixDQUFVOzs7O0lBRXRCLGNBQWM7WUFBZCxjQUFjOztXQUFkLGNBQWM7OzswQkFBZCxjQUFjOzsrQkFBZCxjQUFjOztTQUVsQixVQUFVLEdBQUcsY0FBSSxFQUFJO21CQUN1RCxNQUFLLEtBQUs7VUFBNUUsT0FBTyxVQUFQLE9BQU87VUFBRSxRQUFRLFVBQVIsUUFBUTtVQUFFLFFBQVEsVUFBUixRQUFRO1VBQUUsUUFBUSxVQUFSLFFBQVE7VUFBRSxTQUFTLFVBQVQsU0FBUztVQUFFLFdBQVcsVUFBWCxXQUFXOztBQUNyRSxVQUFJLElBQUksS0FBSyxPQUFPLEVBQUU7QUFDcEIsWUFBSSxHQUFHLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO09BQzVDLE1BQU0sSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFO0FBQzVCLFlBQUksR0FBRyxRQUFRLEdBQUcsQ0FBQyxHQUFHLE1BQUssVUFBVSxHQUFHLE1BQUssVUFBVSxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUM7T0FDeEUsTUFBTSxJQUFJLElBQUksS0FBSyxRQUFRLEVBQUU7QUFDNUIsWUFBSSxHQUFHLE1BQUssVUFBVSxDQUFDO09BQ3hCLE1BQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO0FBQzdCLFlBQUksR0FBRyxDQUFDLENBQUM7T0FDVixNQUFNO0FBQ0wsWUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7T0FDM0I7O0FBRUQsVUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFO0FBQ3JCLGNBQUssS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7T0FD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Q0FBQyxRQUFRLENBQUMsQ0FBQztPQUNqQyxNQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUU7QUFDOUIsYUFBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO09BQ2pDO0FBQ0QsYUFBTyxLQUFLLENBQUM7S0FDZDs7O1NBMUpHLGNBQWM7OztBQTRKcEIsY0FBYyxDQUFDLFNBQVMsR0FBRztBQUN6QixVQUFRLEVBQUUsaUJBQVUsTUFBTTtBQUMxQixhQUFXLEVBQUUsaUJBQVUsTUFBTTtBQUM3QixVQUFRLEVBQUUsaUJBQVUsTUFBTTtBQUMxQixZQUFVLEVBQUUsaUJBQVUsSUFBSTtBQUMxQixpQkFBZSxFQUFFLGlCQUFVLEtBQUs7QUFDaEMsZ0JBQWMsRUFBRSxpQkFBVSxNQUFNO0FBQ2hDLFFBQU0sRUFBRSxpQkFBVSxJQUFJO0FBQ3RCLG1CQUFpQixFQUFFLGlCQUFVLElBQUk7QUFDakMsU0FBTyxFQUFFLGlCQUFVLE1BQU07Q0FDMUIsQ0FBQzs7QUFFRixjQUFjLENBQUMsWUFBWSxHQUFHO0FBQzVCLGFBQVcsRUFBRSxtQkFBTSxhQUFhO0NBQ2pDLENBQUM7O3FCQUVhLGNBQWMiLCJmaWxlIjoiMjkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBQcm9wVHlwZXMgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUGFnZUJ1dHRvbiBmcm9tICcuL1BhZ2VCdXR0b24uanMnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4uL0NvbnN0JztcblxuY2xhc3MgUGFnaW5hdGlvbkxpc3QgZXh0ZW5kcyBDb21wb25lbnQge1xuXG4gIGNoYW5nZVBhZ2UgPSBwYWdlID0+IHtcbiAgICBjb25zdCB7IHByZVBhZ2UsIGN1cnJQYWdlLCBuZXh0UGFnZSwgbGFzdFBhZ2UsIGZpcnN0UGFnZSwgc2l6ZVBlclBhZ2UgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKHBhZ2UgPT09IHByZVBhZ2UpIHtcbiAgICAgIHBhZ2UgPSBjdXJyUGFnZSAtIDEgPCAxID8gMSA6IGN1cnJQYWdlIC0gMTtcbiAgICB9IGVsc2UgaWYgKHBhZ2UgPT09IG5leHRQYWdlKSB7XG4gICAgICBwYWdlID0gY3VyclBhZ2UgKyAxID4gdGhpcy50b3RhbFBhZ2VzID8gdGhpcy50b3RhbFBhZ2VzIDogY3VyclBhZ2UgKyAxO1xuICAgIH0gZWxzZSBpZiAocGFnZSA9PT0gbGFzdFBhZ2UpIHtcbiAgICAgIHBhZ2UgPSB0aGlzLnRvdGFsUGFnZXM7XG4gICAgfSBlbHNlIGlmIChwYWdlID09PSBmaXJzdFBhZ2UpIHtcbiAgICAgIHBhZ2UgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYWdlID0gcGFyc2VJbnQocGFnZSwgMTApO1xuICAgIH1cblxuICAgIGlmIChwYWdlICE9PSBjdXJyUGFnZSkge1xuICAgICAgdGhpcy5wcm9wcy5jaGFuZ2VQYWdlKHBhZ2UsIHNpemVQZXJQYWdlKTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VTaXplUGVyUGFnZSA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0IHNlbGVjdFNpemUgPSBwYXJzZUludChlLmN1cnJlbnRUYXJnZXQudGV4dCwgMTApO1xuICAgIGxldCB7IGN1cnJQYWdlIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChzZWxlY3RTaXplICE9PSB0aGlzLnByb3BzLnNpemVQZXJQYWdlKSB7XG4gICAgICB0aGlzLnRvdGFsUGFnZXMgPSBNYXRoLmNlaWwodGhpcy5wcm9wcy5kYXRhU2l6ZSAvIHNlbGVjdFNpemUpO1xuICAgICAgaWYgKGN1cnJQYWdlID4gdGhpcy50b3RhbFBhZ2VzKSBjdXJyUGFnZSA9IHRoaXMudG90YWxQYWdlcztcblxuICAgICAgdGhpcy5wcm9wcy5jaGFuZ2VQYWdlKGN1cnJQYWdlLCBzZWxlY3RTaXplKTtcbiAgICAgIGlmICh0aGlzLnByb3BzLm9uU2l6ZVBlclBhZ2VMaXN0KSB7XG4gICAgICAgIHRoaXMucHJvcHMub25TaXplUGVyUGFnZUxpc3Qoc2VsZWN0U2l6ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgZGF0YVNpemUsIHNpemVQZXJQYWdlLCBzaXplUGVyUGFnZUxpc3QgfSA9IHRoaXMucHJvcHM7XG4gICAgdGhpcy50b3RhbFBhZ2VzID0gTWF0aC5jZWlsKGRhdGFTaXplIC8gc2l6ZVBlclBhZ2UpO1xuICAgIGNvbnN0IHBhZ2VCdG5zID0gdGhpcy5tYWtlUGFnZSgpO1xuICAgIGNvbnN0IHBhZ2VMaXN0U3R5bGUgPSB7XG4gICAgICBmbG9hdDogJ3JpZ2h0JyxcbiAgICAgIC8vIG92ZXJyaWRlIHRoZSBtYXJnaW4tdG9wIGRlZmluZWQgaW4gLnBhZ2luYXRpb24gY2xhc3MgaW4gYm9vdHN0cmFwLlxuICAgICAgbWFyZ2luVG9wOiAnMHB4J1xuICAgIH07XG5cbiAgICBjb25zdCBzaXplUGVyUGFnZU9wdGlvbnMgPSBzaXplUGVyUGFnZUxpc3QubWFwKChfc2l6ZVBlclBhZ2UpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxsaSBrZXk9eyBfc2l6ZVBlclBhZ2UgfSByb2xlPSdwcmVzZW50YXRpb24nPlxuICAgICAgICAgIDxhIHJvbGU9J21lbnVpdGVtJ1xuICAgICAgICAgICAgdGFiSW5kZXg9Jy0xJyBocmVmPScjJ1xuICAgICAgICAgICAgb25DbGljaz17IHRoaXMuY2hhbmdlU2l6ZVBlclBhZ2UgfT57IF9zaXplUGVyUGFnZSB9PC9hPlxuICAgICAgICA8L2xpPlxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93JyBzdHlsZT17IHsgbWFyZ2luVG9wOiAxNSB9IH0+XG4gICAgICAgIHtcbiAgICAgICAgICBzaXplUGVyUGFnZUxpc3QubGVuZ3RoID4gMVxuICAgICAgICAgID8gPGRpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2NvbC1tZC02Jz5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nZHJvcGRvd24nPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9J2J0biBidG4tZGVmYXVsdCBkcm9wZG93bi10b2dnbGUnXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9J2J1dHRvbicgaWQ9J3BhZ2VEcm9wRG93bicgZGF0YS10b2dnbGU9J2Ryb3Bkb3duJ1xuICAgICAgICAgICAgICAgICAgICBhcmlhLWV4cGFuZGVkPSd0cnVlJz5cbiAgICAgICAgICAgICAgICAgICAgeyBzaXplUGVyUGFnZSB9XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIHsgJyAnIH1cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9J2NhcmV0Jy8+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzTmFtZT0nZHJvcGRvd24tbWVudScgcm9sZT0nbWVudScgYXJpYS1sYWJlbGxlZGJ5PSdwYWdlRHJvcERvd24nPlxuICAgICAgICAgICAgICAgICAgICB7IHNpemVQZXJQYWdlT3B0aW9ucyB9XG4gICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2NvbC1tZC02Jz5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3NOYW1lPSdwYWdpbmF0aW9uJyBzdHlsZT17IHBhZ2VMaXN0U3R5bGUgfT5cbiAgICAgICAgICAgICAgICAgIHsgcGFnZUJ0bnMgfVxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgOiA8ZGl2IGNsYXNzTmFtZT0nY29sLW1kLTEyJz5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzTmFtZT0ncGFnaW5hdGlvbicgc3R5bGU9eyBwYWdlTGlzdFN0eWxlIH0+XG4gICAgICAgICAgICAgICAgeyBwYWdlQnRucyB9XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIG1ha2VQYWdlKCkge1xuICAgIGNvbnN0IHBhZ2VzID0gdGhpcy5nZXRQYWdlcygpO1xuICAgIHJldHVybiBwYWdlcy5tYXAoZnVuY3Rpb24ocGFnZSkge1xuICAgICAgY29uc3QgaXNBY3RpdmUgPSBwYWdlID09PSB0aGlzLnByb3BzLmN1cnJQYWdlO1xuICAgICAgbGV0IGRpc2FibGVkID0gZmFsc2U7XG4gICAgICBsZXQgaGlkZGVuID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5wcm9wcy5jdXJyUGFnZSA9PT0gMSAmJlxuICAgICAgICAocGFnZSA9PT0gdGhpcy5wcm9wcy5maXJzdFBhZ2UgfHwgcGFnZSA9PT0gdGhpcy5wcm9wcy5wcmVQYWdlKSkge1xuICAgICAgICBkaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIGhpZGRlbiA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5wcm9wcy5jdXJyUGFnZSA9PT0gdGhpcy50b3RhbFBhZ2VzICYmXG4gICAgICAgIChwYWdlID09PSB0aGlzLnByb3BzLm5leHRQYWdlIHx8IHBhZ2UgPT09IHRoaXMucHJvcHMubGFzdFBhZ2UpKSB7XG4gICAgICAgIGRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgaGlkZGVuID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxQYWdlQnV0dG9uIGtleT17IHBhZ2UgfVxuICAgICAgICAgIGNoYW5nZVBhZ2U9eyB0aGlzLmNoYW5nZVBhZ2UgfVxuICAgICAgICAgIGFjdGl2ZT17IGlzQWN0aXZlIH1cbiAgICAgICAgICBkaXNhYmxlPXsgZGlzYWJsZWQgfVxuICAgICAgICAgIGhpZGRlbj17IGhpZGRlbiB9PlxuICAgICAgICAgIHsgcGFnZSB9XG4gICAgICAgIDwvUGFnZUJ1dHRvbj5cbiAgICAgICk7XG4gICAgfSwgdGhpcyk7XG4gIH1cblxuICBnZXRQYWdlcygpIHtcbiAgICBsZXQgcGFnZXM7XG4gICAgbGV0IHN0YXJ0UGFnZSA9IDE7XG4gICAgbGV0IGVuZFBhZ2UgPSB0aGlzLnRvdGFsUGFnZXM7XG5cbiAgICBzdGFydFBhZ2UgPSBNYXRoLm1heCh0aGlzLnByb3BzLmN1cnJQYWdlIC0gTWF0aC5mbG9vcih0aGlzLnByb3BzLnBhZ2luYXRpb25TaXplIC8gMiksIDEpO1xuICAgIGVuZFBhZ2UgPSBzdGFydFBhZ2UgKyB0aGlzLnByb3BzLnBhZ2luYXRpb25TaXplIC0gMTtcblxuICAgIGlmIChlbmRQYWdlID4gdGhpcy50b3RhbFBhZ2VzKSB7XG4gICAgICBlbmRQYWdlID0gdGhpcy50b3RhbFBhZ2VzO1xuICAgICAgc3RhcnRQYWdlID0gZW5kUGFnZSAtIHRoaXMucHJvcHMucGFnaW5hdGlvblNpemUgKyAxO1xuICAgIH1cblxuICAgIGlmIChzdGFydFBhZ2UgIT09IDEgJiYgdGhpcy50b3RhbFBhZ2VzID4gdGhpcy5wcm9wcy5wYWdpbmF0aW9uU2l6ZSkge1xuICAgICAgcGFnZXMgPSBbIHRoaXMucHJvcHMuZmlyc3RQYWdlLCB0aGlzLnByb3BzLnByZVBhZ2UgXTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudG90YWxQYWdlcyA+IDEpIHtcbiAgICAgIHBhZ2VzID0gWyB0aGlzLnByb3BzLnByZVBhZ2UgXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFnZXMgPSBbXTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gc3RhcnRQYWdlOyBpIDw9IGVuZFBhZ2U7IGkrKykge1xuICAgICAgaWYgKGkgPiAwKSBwYWdlcy5wdXNoKGkpO1xuICAgIH1cblxuICAgIGlmIChlbmRQYWdlICE9PSB0aGlzLnRvdGFsUGFnZXMpIHtcbiAgICAgIHBhZ2VzLnB1c2godGhpcy5wcm9wcy5uZXh0UGFnZSk7XG4gICAgICBwYWdlcy5wdXNoKHRoaXMucHJvcHMubGFzdFBhZ2UpO1xuICAgIH0gZWxzZSBpZiAodGhpcy50b3RhbFBhZ2VzID4gMSkge1xuICAgICAgcGFnZXMucHVzaCh0aGlzLnByb3BzLm5leHRQYWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhZ2VzO1xuICB9XG59XG5QYWdpbmF0aW9uTGlzdC5wcm9wVHlwZXMgPSB7XG4gIGN1cnJQYWdlOiBQcm9wVHlwZXMubnVtYmVyLFxuICBzaXplUGVyUGFnZTogUHJvcFR5cGVzLm51bWJlcixcbiAgZGF0YVNpemU6IFByb3BUeXBlcy5udW1iZXIsXG4gIGNoYW5nZVBhZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBzaXplUGVyUGFnZUxpc3Q6IFByb3BUeXBlcy5hcnJheSxcbiAgcGFnaW5hdGlvblNpemU6IFByb3BUeXBlcy5udW1iZXIsXG4gIHJlbW90ZTogUHJvcFR5cGVzLmJvb2wsXG4gIG9uU2l6ZVBlclBhZ2VMaXN0OiBQcm9wVHlwZXMuZnVuYyxcbiAgcHJlUGFnZTogUHJvcFR5cGVzLnN0cmluZ1xufTtcblxuUGFnaW5hdGlvbkxpc3QuZGVmYXVsdFByb3BzID0ge1xuICBzaXplUGVyUGFnZTogQ29uc3QuU0laRV9QRVJfUEFHRVxufTtcblxuZXhwb3J0IGRlZmF1bHQgUGFnaW5hdGlvbkxpc3Q7XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9wYWdpbmF0aW9uL1BhZ2luYXRpb25MaXN0LmpzXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ=="); -},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _classnames = __webpack_require__(6);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar PageButton = (function (_Component) {\n _inherits(PageButton, _Component);\n\n function PageButton(props) {\n var _this = this;\n\n _classCallCheck(this, PageButton);\n\n _get(Object.getPrototypeOf(PageButton.prototype), 'constructor', this).call(this, props);\n\n this.pageBtnClick = function (e) {\n e.preventDefault();\n _this.props.changePage(e.currentTarget.textContent);\n };\n }\n\n _createClass(PageButton, [{\n key: 'render',\n value: function render() {\n var classes = (0, _classnames2['default'])({\n 'active': this.props.active,\n 'disabled': this.props.disable,\n 'hidden': this.props.hidden\n });\n return _react2['default'].createElement(\n 'li',\n { className: classes },\n _react2['default'].createElement(\n 'a',\n { href: '#', onClick: this.pageBtnClick },\n this.props.children\n )\n );\n }\n }]);\n\n return PageButton;\n})(_react.Component);\n\nPageButton.propTypes = {\n changePage: _react.PropTypes.func,\n active: _react.PropTypes.bool,\n disable: _react.PropTypes.bool,\n hidden: _react.PropTypes.bool,\n children: _react.PropTypes.node\n};\n\nexports['default'] = PageButton;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvcGFnaW5hdGlvbi9QYWdlQnV0dG9uLmpzPzU0NGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztpQ0FBNEMsQ0FBTzs7OztzQ0FDOUIsQ0FBWTs7OztJQUUzQixVQUFVO1lBQVYsVUFBVTs7QUFFSCxXQUZQLFVBQVUsQ0FFRixLQUFLLEVBQUU7OzswQkFGZixVQUFVOztBQUdaLCtCQUhFLFVBQVUsNkNBR04sS0FBSyxFQUFFOztTQUdmLFlBQVksR0FBRyxXQUFDLEVBQUk7QUFDbEIsT0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ25CLFlBQUssS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0tBQ3BEO0dBTEE7O2VBSkcsVUFBVTs7V0FXUixrQkFBRztBQUNQLFVBQU0sT0FBTyxHQUFHLDZCQUFTO0FBQ3ZCLGdCQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO0FBQzNCLGtCQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPO0FBQzlCLGdCQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO09BQzVCLENBQUMsQ0FBQztBQUNILGFBQ0U7O1VBQUksU0FBUyxFQUFHLE9BQVM7UUFDdkI7O1lBQUcsSUFBSSxFQUFDLEdBQUcsRUFBQyxPQUFPLEVBQUcsSUFBSSxDQUFDLFlBQWM7VUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7U0FBTTtPQUNsRSxDQUNMO0tBQ0g7OztTQXRCRyxVQUFVOzs7QUF3QmhCLFVBQVUsQ0FBQyxTQUFTLEdBQUc7QUFDckIsWUFBVSxFQUFFLGlCQUFVLElBQUk7QUFDMUIsUUFBTSxFQUFFLGlCQUFVLElBQUk7QUFDdEIsU0FBTyxFQUFFLGlCQUFVLElBQUk7QUFDdkIsUUFBTSxFQUFFLGlCQUFVLElBQUk7QUFDdEIsVUFBUSxFQUFFLGlCQUFVLElBQUk7Q0FDekIsQ0FBQzs7cUJBRWEsVUFBVSIsImZpbGUiOiIzMC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFByb3BUeXBlcyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc1NldCBmcm9tICdjbGFzc25hbWVzJztcblxuY2xhc3MgUGFnZUJ1dHRvbiBleHRlbmRzIENvbXBvbmVudCB7XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICBwYWdlQnRuQ2xpY2sgPSBlID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5wcm9wcy5jaGFuZ2VQYWdlKGUuY3VycmVudFRhcmdldC50ZXh0Q29udGVudCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgY2xhc3NlcyA9IGNsYXNzU2V0KHtcbiAgICAgICdhY3RpdmUnOiB0aGlzLnByb3BzLmFjdGl2ZSxcbiAgICAgICdkaXNhYmxlZCc6IHRoaXMucHJvcHMuZGlzYWJsZSxcbiAgICAgICdoaWRkZW4nOiB0aGlzLnByb3BzLmhpZGRlblxuICAgIH0pO1xuICAgIHJldHVybiAoXG4gICAgICA8bGkgY2xhc3NOYW1lPXsgY2xhc3NlcyB9PlxuICAgICAgICA8YSBocmVmPScjJyBvbkNsaWNrPXsgdGhpcy5wYWdlQnRuQ2xpY2sgfT57IHRoaXMucHJvcHMuY2hpbGRyZW4gfTwvYT5cbiAgICAgIDwvbGk+XG4gICAgKTtcbiAgfVxufVxuUGFnZUJ1dHRvbi5wcm9wVHlwZXMgPSB7XG4gIGNoYW5nZVBhZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBhY3RpdmU6IFByb3BUeXBlcy5ib29sLFxuICBkaXNhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgaGlkZGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlXG59O1xuXG5leHBvcnQgZGVmYXVsdCBQYWdlQnV0dG9uO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvcGFnaW5hdGlvbi9QYWdlQnV0dG9uLmpzXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _classnames = __webpack_require__(6);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _Const = __webpack_require__(3);\n\nvar _Const2 = _interopRequireDefault(_Const);\n\nvar _Editor = __webpack_require__(12);\n\nvar _Editor2 = _interopRequireDefault(_Editor);\n\nvar _NotificationJs = __webpack_require__(13);\n\nvar _NotificationJs2 = _interopRequireDefault(_NotificationJs);\n\nvar ToolBar = (function (_Component) {\n _inherits(ToolBar, _Component);\n\n function ToolBar(props) {\n var _this = this;\n\n _classCallCheck(this, ToolBar);\n\n _get(Object.getPrototypeOf(ToolBar.prototype), 'constructor', this).call(this, props);\n\n this.handleSaveBtnClick = function () {\n var newObj = _this.checkAndParseForm();\n if (!newObj) {\n // validate errors\n return;\n }\n var msg = _this.props.onAddRow(newObj);\n if (msg) {\n _this.refs.notifier.notice('error', msg, 'Pressed ESC can cancel');\n _this.clearTimeout();\n // shake form and hack prevent modal hide\n _this.setState({\n shakeEditor: true,\n validateState: 'this is hack for prevent bootstrap modal hide'\n });\n // clear animate class\n _this.timeouteClear = setTimeout(function () {\n _this.setState({ shakeEditor: false });\n }, 300);\n } else {\n // reset state and hide modal hide\n _this.setState({\n validateState: null,\n shakeEditor: false\n }, function () {\n document.querySelector('.modal-backdrop').click();\n document.querySelector('.' + _this.modalClassName).click();\n });\n // reset form\n _this.refs.form.reset();\n }\n };\n\n this.handleShowOnlyToggle = function () {\n _this.setState({\n showSelected: !_this.state.showSelected\n });\n _this.props.onShowOnlySelected();\n };\n\n this.handleDropRowBtnClick = function () {\n _this.props.onDropRow();\n };\n\n this.handleKeyUp = function (e) {\n _this.props.onSearch(e.currentTarget.value);\n };\n\n this.handleExportCSV = function () {\n _this.props.onExportCSV();\n };\n\n this.handleClearBtnClick = function () {\n _this.refs.seachInput.value = '';\n _this.props.onSearch('');\n };\n\n this.timeouteClear = 0;\n this.modalClassName;\n this.state = {\n isInsertRowTrigger: true,\n validateState: null,\n shakeEditor: false,\n showSelected: false\n };\n }\n\n _createClass(ToolBar, [{\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.clearTimeout();\n }\n }, {\n key: 'clearTimeout',\n value: (function (_clearTimeout) {\n function clearTimeout() {\n return _clearTimeout.apply(this, arguments);\n }\n\n clearTimeout.toString = function () {\n return _clearTimeout.toString();\n };\n\n return clearTimeout;\n })(function () {\n if (this.timeouteClear) {\n clearTimeout(this.timeouteClear);\n this.timeouteClear = 0;\n }\n })\n }, {\n key: 'checkAndParseForm',\n value: function checkAndParseForm() {\n var _this2 = this;\n\n var newObj = {};\n var validateState = {};\n var isValid = true;\n var tempValue = undefined;\n var tempMsg = undefined;\n\n this.props.columns.forEach(function (column, i) {\n if (column.autoValue) {\n // when you want same auto generate value and not allow edit, example ID field\n var time = new Date().getTime();\n tempValue = typeof column.autoValue === 'function' ? column.autoValue() : 'autovalue-' + time;\n } else {\n var dom = this.refs[column.field + i];\n tempValue = dom.value;\n\n if (column.editable && column.editable.type === 'checkbox') {\n var values = tempValue.split(':');\n tempValue = dom.checked ? values[0] : values[1];\n }\n\n if (column.editable && column.editable.validator) {\n // process validate\n tempMsg = column.editable.validator(tempValue);\n if (tempMsg !== true) {\n isValid = false;\n validateState[column.field] = tempMsg;\n }\n }\n }\n\n newObj[column.field] = tempValue;\n }, this);\n\n if (isValid) {\n return newObj;\n } else {\n this.clearTimeout();\n // show error in form and shake it\n this.setState({ validateState: validateState, shakeEditor: true });\n // notifier error\n this.refs.notifier.notice('error', 'Form validate errors, please checking!', 'Pressed ESC can cancel');\n // clear animate class\n this.timeouteClear = setTimeout(function () {\n _this2.setState({ shakeEditor: false });\n }, 300);\n return null;\n }\n }\n }, {\n key: 'handleCloseBtn',\n value: function handleCloseBtn() {\n this.refs.warning.style.display = 'none';\n }\n }, {\n key: 'render',\n value: function render() {\n this.modalClassName = 'bs-table-modal-sm' + new Date().getTime();\n var insertBtn = null;\n var deleteBtn = null;\n var exportCSV = null;\n var showSelectedOnlyBtn = null;\n\n if (this.props.enableInsert) {\n insertBtn = _react2['default'].createElement(\n 'button',\n { type: 'button',\n className: 'btn btn-info react-bs-table-add-btn',\n 'data-toggle': 'modal',\n 'data-target': '.' + this.modalClassName },\n _react2['default'].createElement('i', { className: 'glyphicon glyphicon-plus' }),\n ' New'\n );\n }\n\n if (this.props.enableDelete) {\n deleteBtn = _react2['default'].createElement(\n 'button',\n { type: 'button',\n className: 'btn btn-warning react-bs-table-del-btn',\n 'data-toggle': 'tooltip',\n 'data-placement': 'right',\n title: 'Drop selected row',\n onClick: this.handleDropRowBtnClick },\n _react2['default'].createElement('i', { className: 'glyphicon glyphicon-trash' }),\n ' Delete'\n );\n }\n\n if (this.props.enableShowOnlySelected) {\n showSelectedOnlyBtn = _react2['default'].createElement(\n 'button',\n { type: 'button',\n onClick: this.handleShowOnlyToggle,\n className: 'btn btn-primary',\n 'data-toggle': 'button',\n 'aria-pressed': 'false' },\n this.state.showSelected ? _Const2['default'].SHOW_ALL : _Const2['default'].SHOW_ONLY_SELECT\n );\n }\n\n if (this.props.enableExportCSV) {\n exportCSV = _react2['default'].createElement(\n 'button',\n { type: 'button',\n className: 'btn btn-success',\n onClick: this.handleExportCSV },\n _react2['default'].createElement('i', { className: 'glyphicon glyphicon-export' }),\n ' Export to CSV'\n );\n }\n\n var searchTextInput = this.renderSearchPanel();\n var modal = this.props.enableInsert ? this.renderInsertRowModal() : null;\n\n return _react2['default'].createElement(\n 'div',\n { className: 'row' },\n _react2['default'].createElement(\n 'div',\n { className: 'col-xs-12 col-sm-6 col-md-6 col-lg-8' },\n _react2['default'].createElement(\n 'div',\n { className: 'btn-group btn-group-sm', role: 'group' },\n exportCSV,\n insertBtn,\n deleteBtn,\n showSelectedOnlyBtn\n )\n ),\n _react2['default'].createElement(\n 'div',\n { className: 'col-xs-12 col-sm-6 col-md-6 col-lg-4' },\n searchTextInput\n ),\n _react2['default'].createElement(_NotificationJs2['default'], { ref: 'notifier' }),\n modal\n );\n }\n }, {\n key: 'renderSearchPanel',\n value: function renderSearchPanel() {\n if (this.props.enableSearch) {\n var classNames = 'form-group form-group-sm react-bs-table-search-form';\n var clearBtn = null;\n if (this.props.clearSearch) {\n clearBtn = _react2['default'].createElement(\n 'span',\n { className: 'input-group-btn' },\n _react2['default'].createElement(\n 'button',\n {\n className: 'btn btn-default',\n type: 'button',\n onClick: this.handleClearBtnClick },\n 'Clear'\n )\n );\n classNames += ' input-group input-group-sm';\n }\n\n return _react2['default'].createElement(\n 'div',\n { className: classNames },\n _react2['default'].createElement('input', { ref: 'seachInput',\n className: 'form-control',\n type: 'text',\n placeholder: this.props.searchPlaceholder ? this.props.searchPlaceholder : 'Search',\n onKeyUp: this.handleKeyUp }),\n clearBtn\n );\n } else {\n return null;\n }\n }\n }, {\n key: 'renderInsertRowModal',\n value: function renderInsertRowModal() {\n var validateState = this.state.validateState || {};\n var shakeEditor = this.state.shakeEditor;\n var inputField = this.props.columns.map(function (column, i) {\n var editable = column.editable;\n var format = column.format;\n var field = column.field;\n var name = column.name;\n var autoValue = column.autoValue;\n\n var attr = {\n ref: field + i,\n placeholder: editable.placeholder ? editable.placeholder : name\n };\n\n if (autoValue) {\n // when you want same auto generate value\n // and not allow edit, for example ID field\n return null;\n }\n var error = validateState[field] ? _react2['default'].createElement(\n 'span',\n { className: 'help-block bg-danger' },\n validateState[field]\n ) : null;\n\n // let editor = Editor(editable,attr,format);\n // if(editor.props.type && editor.props.type == 'checkbox'){\n return _react2['default'].createElement(\n 'div',\n { className: 'form-group', key: field },\n _react2['default'].createElement(\n 'label',\n null,\n name\n ),\n (0, _Editor2['default'])(editable, attr, format, ''),\n error\n );\n });\n var modalClass = (0, _classnames2['default'])('modal', 'fade', this.modalClassName, {\n // hack prevent bootstrap modal hide by reRender\n 'in': shakeEditor || this.state.validateState\n });\n var dialogClass = (0, _classnames2['default'])('modal-dialog', 'modal-sm', {\n 'animated': shakeEditor,\n 'shake': shakeEditor\n });\n return _react2['default'].createElement(\n 'div',\n { ref: 'modal', className: modalClass, tabIndex: '-1', role: 'dialog' },\n _react2['default'].createElement(\n 'div',\n { className: dialogClass },\n _react2['default'].createElement(\n 'div',\n { className: 'modal-content' },\n _react2['default'].createElement(\n 'div',\n { className: 'modal-header' },\n _react2['default'].createElement(\n 'button',\n { type: 'button',\n className: 'close',\n 'data-dismiss': 'modal',\n 'aria-label': 'Close' },\n _react2['default'].createElement(\n 'span',\n { 'aria-hidden': 'true' },\n '×'\n )\n ),\n _react2['default'].createElement(\n 'h4',\n { className: 'modal-title' },\n 'New Record'\n )\n ),\n _react2['default'].createElement(\n 'div',\n { className: 'modal-body' },\n _react2['default'].createElement(\n 'form',\n { ref: 'form' },\n inputField\n )\n ),\n _react2['default'].createElement(\n 'div',\n { className: 'modal-footer' },\n _react2['default'].createElement(\n 'button',\n { type: 'button',\n className: 'btn btn-default',\n 'data-dismiss': 'modal' },\n 'Close'\n ),\n _react2['default'].createElement(\n 'button',\n { type: 'button',\n className: 'btn btn-info',\n onClick: this.handleSaveBtnClick },\n 'Save'\n )\n )\n )\n )\n );\n }\n }]);\n\n return ToolBar;\n})(_react.Component);\n\nToolBar.propTypes = {\n onAddRow: _react.PropTypes.func,\n onDropRow: _react.PropTypes.func,\n onShowOnlySelected: _react.PropTypes.func,\n enableInsert: _react.PropTypes.bool,\n enableDelete: _react.PropTypes.bool,\n enableSearch: _react.PropTypes.bool,\n enableShowOnlySelected: _react.PropTypes.bool,\n columns: _react.PropTypes.array,\n searchPlaceholder: _react.PropTypes.string,\n clearSearch: _react.PropTypes.bool\n};\n\nToolBar.defaultProps = {\n enableInsert: false,\n enableDelete: false,\n enableSearch: false,\n enableShowOnlySelected: false,\n clearSearch: false\n};\n\nexports['default'] = ToolBar;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvdG9vbGJhci9Ub29sQmFyLmpzPzZiZjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztpQ0FBNEMsQ0FBTzs7OztzQ0FDOUIsQ0FBWTs7OztpQ0FDZixDQUFVOzs7O2tDQUNULEVBQVc7Ozs7MENBQ1QsRUFBb0I7Ozs7SUFFbkMsT0FBTztZQUFQLE9BQU87O0FBRUEsV0FGUCxPQUFPLENBRUMsS0FBSyxFQUFFOzs7MEJBRmYsT0FBTzs7QUFHVCwrQkFIRSxPQUFPLDZDQUdILEtBQUssRUFBRTs7U0E0RWYsa0JBQWtCLEdBQUcsWUFBTTtBQUN6QixVQUFNLE1BQU0sR0FBRyxNQUFLLGlCQUFpQixFQUFFLENBQUM7QUFDeEMsVUFBSSxDQUFDLE1BQU0sRUFBRTs7QUFDWCxlQUFPO09BQ1I7QUFDRCxVQUFNLEdBQUcsR0FBRyxNQUFLLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDeEMsVUFBSSxHQUFHLEVBQUU7QUFDUCxjQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztBQUNsRSxjQUFLLFlBQVksRUFBRSxDQUFDOztBQUVwQixjQUFLLFFBQVEsQ0FBQztBQUNaLHFCQUFXLEVBQUUsSUFBSTtBQUNqQix1QkFBYSxFQUFFLCtDQUErQztTQUMvRCxDQUFDLENBQUM7O0FBRUgsY0FBSyxhQUFhLEdBQUcsVUFBVSxDQUFDLFlBQU07QUFDcEMsZ0JBQUssUUFBUSxDQUFDLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDdkMsRUFBRSxHQUFHLENBQUMsQ0FBQztPQUNULE1BQU07O0FBRUwsY0FBSyxRQUFRLENBQUM7QUFDWix1QkFBYSxFQUFFLElBQUk7QUFDbkIscUJBQVcsRUFBRSxLQUFLO1NBQ25CLEVBQUUsWUFBTTtBQUNQLGtCQUFRLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFD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QkFBaUI7QUFDM0Isa0NBQWEsT0FBTzs7ZUFFYjtjQUNUOztrQkFBUSxJQUFJLEVBQUMsUUFBUTtBQUNuQiwyQkFBUyxFQUFDLGNBQWM7QUFDeEIseUJBQU8sRUFBRyxJQUFJLENBQUMsa0JBQW9COztlQUU1QjthQUNMO1dBQ0Y7U0FDRjtPQUNGLENBQ047S0FDSDs7O1NBOVRHLE9BQU87OztBQWlVYixPQUFPLENBQUMsU0FBUyxHQUFHO0FBQ2xCLFVBQVEsRUFBRSxpQkFBVSxJQUFJO0FBQ3hCLFdBQVMsRUFBRSxpQkFBVSxJQUFJO0FBQ3pCLG9CQUFrQixFQUFFLGlCQUFVLElBQUk7QUFDbEMsY0FBWSxFQUFFLGlCQUFVLElBQUk7QUFDNUIsY0FBWSxFQUFFLGlCQUFVLElBQUk7QUFDNUIsY0FBWSxFQUFFLGlCQUFVLElBQUk7QUFDNUIsd0JBQXNCLEVBQUUsaUJBQVUsSUFBSTtBQUN0QyxTQUFPLEVBQUUsaUJBQVUsS0FBSztBQUN4QixtQkFBaUIsRUFBRSxpQkFBVSxNQUFNO0FBQ25DLGFBQVcsRUFBRSxpQkFBVSxJQUFJO0NBQzVCLENBQUM7O0FBRUYsT0FBTyxDQUFDLFlBQVksR0FBRztBQUNyQixjQUFZLEVBQUUsS0FBSztBQUNuQixjQUFZLEVBQUUsS0FBSztBQUNuQixjQUFZLEVBQUUsS0FBSztBQUNuQix3QkFBc0IsRUFBRSxLQUFLO0FBQzdCLGFBQVcsRUFBRSxLQUFLO0NBQ25CLENBQUM7O3FCQUVhLE9BQU8iLCJmaWxlIjoiMzEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBQcm9wVHlwZXMgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NTZXQgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi4vQ29uc3QnO1xuaW1wb3J0IGVkaXRvciBmcm9tICcuLi9FZGl0b3InO1xuaW1wb3J0IE5vdGlmaWVyIGZyb20gJy4uL05vdGlmaWNhdGlvbi5qcyc7XG5cbmNsYXNzIFRvb2xCYXIgZXh0ZW5kcyBDb21wb25lbnQge1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMudGltZW91dGVDbGVhciA9IDA7XG4gICAgdGhpcy5tb2RhbENsYXNzTmFtZTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgaXNJbnNlcnRSb3dUcmlnZ2VyOiB0cnVlLFxuICAgICAgdmFsaWRhdGVTdGF0ZTogbnVsbCxcbiAgICAgIHNoYWtlRWRpdG9yOiBmYWxzZSxcbiAgICAgIHNob3dTZWxlY3RlZDogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5jbGVhclRpbWVvdXQoKTtcbiAgfVxuXG4gIGNsZWFyVGltZW91dCgpIHtcbiAgICBpZiAodGhpcy50aW1lb3V0ZUNsZWFyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0ZUNsZWFyKTtcbiAgICAgIHRoaXMudGltZW91dGVDbGVhciA9IDA7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tBbmRQYXJzZUZvcm0oKSB7XG4gICAgY29uc3QgbmV3T2JqID0ge307XG4gICAgY29uc3QgdmFsaWRhdGVTdGF0ZSA9IHt9O1xuICAgIGxldCBpc1ZhbGlkID0gdHJ1ZTtcbiAgICBsZXQgdGVtcFZhbHVlO1xuICAgIGxldCB0ZW1wTXNnO1xuXG4gICAgdGhpcy5wcm9wcy5jb2x1bW5zLmZvckVhY2goZnVuY3Rpb24oY29sdW1uLCBpKSB7XG4gICAgICBpZiAoY29sdW1uLmF1dG9WYWx1ZSkge1xuICAgICAgICAvLyB3aGVuIHlvdSB3YW50IHNhbWUgYXV0byBnZW5lcmF0ZSB2YWx1ZSBhbmQgbm90IGFsbG93IGVkaXQsIGV4YW1wbGUgSUQgZmllbGRcbiAgICAgICAgY29uc3QgdGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICB0ZW1wVmFsdWUgPSB0eXBlb2YgY29sdW1uLmF1dG9WYWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/XG4gICAgICAgICAgY29sdW1uLmF1dG9WYWx1ZSgpIDpcbiAgICAgICAgICAoYGF1dG92YWx1ZS0ke3RpbWV9YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBkb20gPSB0aGlzLnJlZnNbY29sdW1uLmZpZWxkICsgaV07XG4gICAgICAgIHRlbXBWYWx1ZSA9IGRvbS52YWx1ZTtcblxuICAgICAgICBpZiAoY29sdW1uLmVkaXRhYmxlICYmIGNvbHVtbi5lZGl0YWJsZS50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWVzID0gdGVtcFZhbHVlLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgdGVtcFZhbHVlID0gZG9tLmNoZWNrZWQgPyB2YWx1ZXNbMF0gOiB2YWx1ZXNbMV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29sdW1uLmVkaXRhYmxlICYmIGNvbHVtbi5lZGl0YWJsZS52YWxpZGF0b3IpIHsgLy8gcHJvY2VzcyB2YWxpZGF0ZVxuICAgICAgICAgIHRlbXBNc2cgPSBjb2x1bW4uZWRpdGFibGUudmFsaWRhdG9yKHRlbXBWYWx1ZSk7XG4gICAgICAgICAgaWYgKHRlbXBNc2cgIT09IHRydWUpIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhbGlkYXRlU3RhdGVbY29sdW1uLmZpZWxkXSA9IHRlbXBNc2c7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5ld09ialtjb2x1bW4uZmllbGRdID0gdGVtcFZhbHVlO1xuICAgIH0sIHRoaXMpO1xuXG4gICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBuZXdPYmo7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xlYXJUaW1lb3V0KCk7XG4gICAgICAvLyBzaG93IGVycm9yIGluIGZvcm0gYW5kIHNoYWtlIGl0XG4gICAgICB0aGlzLnNldFN0YXRlKHsgdmFsaWRhdGVTdGF0ZSwgc2hha2VFZGl0b3I6IHRydWUgfSk7XG4gICAgICAvLyBub3RpZmllciBlcnJvclxuICAgICAgdGhpcy5yZWZzLm5vdGlmaWVyLm5vdGljZShcbiAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgJ0Zvcm0gdmFsaWRhdGUgZXJyb3JzLCBwbGVhc2UgY2hlY2tpbmchJyxcbiAgICAgICAgJ1ByZXNzZWQgRVNDIGNhbiBjYW5jZWwnKTtcbiAgICAgIC8vIGNsZWFyIGFuaW1hdGUgY2xhc3NcbiAgICAgIHRoaXMudGltZW91dGVDbGVhciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgc2hha2VFZGl0b3I6IGZhbHNlIH0pO1xuICAgICAgfSwgMzAwKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVNhdmVCdG5DbGljayA9ICgpID0+IHtcbiAgICBjb25zdCBuZXdPYmogPSB0aGlzLmNoZWNrQW5kUGFyc2VGb3JtKCk7XG4gICAgaWYgKCFuZXdPYmopIHsgLy8gdmFsaWRhdGUgZXJyb3JzXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG1zZyA9IHRoaXMucHJvcHMub25BZGRSb3cobmV3T2JqKTtcbiAgICBpZiAobXNnKSB7XG4gICAgICB0aGlzLnJlZnMubm90aWZpZXIubm90aWNlKCdlcnJvcicsIG1zZywgJ1ByZXNzZWQgRVNDIGNhbiBjYW5jZWwnKTtcbiAgICAgIHRoaXMuY2xlYXJUaW1lb3V0KCk7XG4gICAgICAvLyBzaGFrZSBmb3JtIGFuZCBoYWNrIHByZXZlbnQgbW9kYWwgaGlkZVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHNoYWtlRWRpdG9yOiB0cnVlLFxuICAgICAgICB2YWxpZGF0ZVN0YXRlOiAndGhpcyBpcyBoYWNrIGZvciBwcmV2ZW50IGJvb3RzdHJhcCBtb2RhbCBoaWRlJ1xuICAgICAgfSk7XG4gICAgICAvLyBjbGVhciBhbmltYXRlIGNsYXNzXG4gICAgICB0aGlzLnRpbWVvdXRlQ2xlYXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHNoYWtlRWRpdG9yOiBmYWxzZSB9KTtcbiAgICAgIH0sIDMwMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJlc2V0IHN0YXRlIGFuZCBoaWRlIG1vZGFsIGhpZGVcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICB2YWxpZGF0ZVN0YXRlOiBudWxsLFxuICAgICAgICBzaGFrZUVkaXRvcjogZmFsc2VcbiAgICAgIH0sICgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1vZGFsLWJhY2tkcm9wJykuY2xpY2soKTtcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLicgKyB0aGlzLm1vZGFsQ2xhc3NOYW1lKS5jbGljaygpO1xuICAgICAgfSk7XG4gICAgICAvLyByZXNldCBmb3JtXG4gICAgICB0aGlzLnJlZnMuZm9ybS5yZXNldCgpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVNob3dPbmx5VG9nZ2xlID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgc2hvd1NlbGVjdGVkOiAhdGhpcy5zdGF0ZS5zaG93U2VsZWN0ZWRcbiAgICB9KTtcbiAgICB0aGlzLnByb3BzLm9uU2hvd09ubHlTZWxlY3RlZCgpO1xuICB9XG5cbiAgaGFuZGxlRHJvcFJvd0J0bkNsaWNrID0gKCkgPT4ge1xuICAgIHRoaXMucHJvcHMub25Ecm9wUm93KCk7XG4gIH1cblxuICBoYW5kbGVDbG9zZUJ0bigpIHtcbiAgICB0aGlzLnJlZnMud2FybmluZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICB9XG5cbiAgaGFuZGxlS2V5VXAgPSBlID0+IHtcbiAgICB0aGlzLnByb3BzLm9uU2VhcmNoKGUuY3VycmVudFRhcmdldC52YWx1ZSk7XG4gIH1cblxuICBoYW5kbGVFeHBvcnRDU1YgPSAoKSA9PiB7XG4gICAgdGhpcy5wcm9wcy5vbkV4cG9ydENTVigpO1xuICB9XG5cbiAgaGFuZGxlQ2xlYXJCdG5DbGljayA9ICgpID0+IHtcbiAgICB0aGlzLnJlZnMuc2VhY2hJbnB1dC52YWx1ZSA9ICcnO1xuICAgIHRoaXMucHJvcHMub25TZWFyY2goJycpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMubW9kYWxDbGFzc05hbWUgPSAnYnMtdGFibGUtbW9kYWwtc20nICsgbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgbGV0IGluc2VydEJ0biA9IG51bGw7XG4gICAgbGV0IGRlbGV0ZUJ0biA9IG51bGw7XG4gICAgbGV0IGV4cG9ydENTViA9IG51bGw7XG4gICAgbGV0IHNob3dTZWxlY3RlZE9ubHlCdG4gPSBudWxsO1xuXG4gICAgaWYgKHRoaXMucHJvcHMuZW5hYmxlSW5zZXJ0KSB7XG4gICAgICBpbnNlcnRCdG4gPSAoXG4gICAgICAgIDxidXR0b24gdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgIGNsYXNzTmFtZT0nYnRuIGJ0bi1pbmZvIHJlYWN0LWJzLXRhYmxlLWFkZC1idG4nXG4gICAgICAgICAgZGF0YS10b2dnbGU9J21vZGFsJ1xuICAgICAgICAgIGRhdGEtdGFyZ2V0PXsgJy4nICsgdGhpcy5tb2RhbENsYXNzTmFtZSB9PlxuICAgICAgICAgIDxpIGNsYXNzTmFtZT0nZ2x5cGhpY29uIGdseXBoaWNvbi1wbHVzJz48L2k+IE5ld1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMuZW5hYmxlRGVsZXRlKSB7XG4gICAgICBkZWxldGVCdG4gPSAoXG4gICAgICAgIDxidXR0b24gdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgIGNsYXNzTmFtZT0nYnRuIGJ0bi13YXJuaW5nIHJlYWN0LWJzLXRhYmxlLWRlbC1idG4nXG4gICAgICAgICAgZGF0YS10b2dnbGU9J3Rvb2x0aXAnXG4gICAgICAgICAgZGF0YS1wbGFjZW1lbnQ9J3JpZ2h0J1xuICAgICAgICAgIHRpdGxlPSdEcm9wIHNlbGVjdGVkIHJvdydcbiAgICAgICAgICBvbkNsaWNrPXsgdGhpcy5oYW5kbGVEcm9wUm93QnRuQ2xpY2sgfT5cbiAgICAgICAgICA8aSBjbGFzc05hbWU9J2dseXBoaWNvbiBnbHlwaGljb24tdHJhc2gnPjwvaT4gRGVsZXRlXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9wcy5lbmFibGVTaG93T25seVNlbGVjdGVkKSB7XG4gICAgICBzaG93U2VsZWN0ZWRPbmx5QnRuID0gKFxuICAgICAgICA8YnV0dG9uIHR5cGU9J2J1dHRvbidcbiAgICAgICAgICBvbkNsaWNrPXsgdGhpcy5oYW5kbGVTaG93T25seVRvZ2dsZSB9XG4gICAgICAgICAgY2xhc3NOYW1lPSdidG4gYnRuLXByaW1hcnknXG4gICAgICAgICAgZGF0YS10b2dnbGU9J2J1dHRvbidcbiAgICAgICAgICBhcmlhLXByZXNzZWQ9J2ZhbHNlJz5cbiAgICAgICAgICB7IHRoaXMuc3RhdGUuc2hvd1NlbGVjdGVkID8gQ29uc3QuU0hPV19BTEwgOiBDb25zdC5TSE9XX09OTFlfU0VMRUNUIH1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLmVuYWJsZUV4cG9ydENTVikge1xuICAgICAgZXhwb3J0Q1NWID0gKFxuICAgICAgICA8YnV0dG9uIHR5cGU9J2J1dHRvbidcbiAgICAgICAgICBjbGFzc05hbWU9J2J0biBidG4tc3VjY2VzcydcbiAgICAgICAgICBvbkNsaWNrPXsgdGhpcy5oYW5kbGVFeHBvcnRDU1YgfT5cbiAgICAgICAgICAgIDxpIGNsYXNzTmFtZT0nZ2x5cGhpY29uIGdseXBoaWNvbi1leHBvcnQnPjwvaT4gRXhwb3J0IHRvIENTVlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VhcmNoVGV4dElucHV0ID0gdGhpcy5yZW5kZXJTZWFyY2hQYW5lbCgpO1xuICAgIGNvbnN0IG1vZGFsID0gdGhpcy5wcm9wcy5lbmFibGVJbnNlcnQgPyB0aGlzLnJlbmRlckluc2VydFJvd01vZGFsKCkgOiBudWxsO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPSdyb3cnPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC02IGNvbC1sZy04Jz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nYnRuLWdyb3VwIGJ0bi1ncm91cC1zbScgcm9sZT0nZ3JvdXAnPlxuICAgICAgICAgICAgeyBleHBvcnRDU1YgfVxuICAgICAgICAgICAgeyBpbnNlcnRCdG4gfVxuICAgICAgICAgICAgeyBkZWxldGVCdG4gfVxuICAgICAgICAgICAgeyBzaG93U2VsZWN0ZWRPbmx5QnRuIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2wteHMtMTIgY29sLXNtLTYgY29sLW1kLTYgY29sLWxnLTQnPlxuICAgICAgICAgIHsgc2VhcmNoVGV4dElucHV0IH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxOb3RpZmllciByZWY9J25vdGlmaWVyJyAvPlxuICAgICAgICB7IG1vZGFsIH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZW5kZXJTZWFyY2hQYW5lbCgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5lbmFibGVTZWFyY2gpIHtcbiAgICAgIGxldCBjbGFzc05hbWVzID0gJ2Zvcm0tZ3JvdXAgZm9ybS1ncm91cC1zbSByZWFjdC1icy10YWJsZS1zZWFyY2gtZm9ybSc7XG4gICAgICBsZXQgY2xlYXJCdG4gPSBudWxsO1xuICAgICAgaWYgKHRoaXMucHJvcHMuY2xlYXJTZWFyY2gpIHtcbiAgICAgICAgY2xlYXJCdG4gPSAoXG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSdpbnB1dC1ncm91cC1idG4nPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzc05hbWU9J2J0biBidG4tZGVmYXVsdCdcbiAgICAgICAgICAgICAgdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgICAgICBvbkNsaWNrPXsgdGhpcy5oYW5kbGVDbGVhckJ0bkNsaWNrIH0+XG4gICAgICAgICAgICAgIENsZWFyXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICk7XG4gICAgICAgIGNsYXNzTmFtZXMgKz0gJyBpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zbSc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXsgY2xhc3NOYW1lcyB9PlxuICAgICAgICAgIDxpbnB1dCByZWY9J3NlYWNoSW5wdXQnXG4gICAgICAgICAgICBjbGFzc05hbWU9J2Zvcm0tY29udHJvbCdcbiAgICAgICAgICAgIHR5cGU9J3RleHQnXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17IHRoaXMucHJvcHMuc2VhcmNoUGxhY2Vob2xkZXIgPyB0aGlzLnByb3BzLnNlYXJjaFBsYWNlaG9sZGVyIDogJ1NlYXJjaCcgfVxuICAgICAgICAgICAgb25LZXlVcD17IHRoaXMuaGFuZGxlS2V5VXAgfS8+XG4gICAgICAgICAgICB7IGNsZWFyQnRuIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZW5kZXJJbnNlcnRSb3dNb2RhbCgpIHtcbiAgICBjb25zdCB2YWxpZGF0ZVN0YXRlID0gdGhpcy5zdGF0ZS52YWxpZGF0ZVN0YXRlIHx8IHt9O1xuICAgIGNvbnN0IHNoYWtlRWRpdG9yID0gdGhpcy5zdGF0ZS5zaGFrZUVkaXRvcjtcbiAgICBjb25zdCBpbnB1dEZpZWxkID0gdGhpcy5wcm9wcy5jb2x1bW5zLm1hcChmdW5jdGlvbihjb2x1bW4sIGkpIHtcbiAgICAgIGNvbnN0IHsgZWRpdGFibGUsIGZvcm1hdCwgZmllbGQsIG5hbWUsIGF1dG9WYWx1ZSB9ID0gY29sdW1uO1xuICAgICAgY29uc3QgYXR0ciA9IHtcbiAgICAgICAgcmVmOiBmaWVsZCArIGksXG4gICAgICAgIHBsYWNlaG9sZGVyOiBlZGl0YWJsZS5wbGFjZWhvbGRlciA/IGVkaXRhYmxlLnBsYWNlaG9sZGVyIDogbmFtZVxuICAgICAgfTtcblxuICAgICAgaWYgKGF1dG9WYWx1ZSkge1xuICAgICAgICAvLyB3aGVuIHlvdSB3YW50IHNhbWUgYXV0byBnZW5lcmF0ZSB2YWx1ZVxuICAgICAgICAvLyBhbmQgbm90IGFsbG93IGVkaXQsIGZvciBleGFtcGxlIElEIGZpZWxkXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgZXJyb3IgPSB2YWxpZGF0ZVN0YXRlW2ZpZWxkXSA/XG4gICAgICAgICg8c3BhbiBjbGFzc05hbWU9J2hlbHAtYmxvY2sgYmctZGFuZ2VyJz57IHZhbGlkYXRlU3RhdGVbZmllbGRdIH08L3NwYW4+KSA6XG4gICAgICAgIG51bGw7XG5cbiAgICAgIC8vIGxldCBlZGl0b3IgPSBFZGl0b3IoZWRpdGFibGUsYXR0cixmb3JtYXQpO1xuICAgICAgLy8gaWYoZWRpdG9yLnByb3BzLnR5cGUgJiYgZWRpdG9yLnByb3BzLnR5cGUgPT0gJ2NoZWNrYm94Jyl7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nZm9ybS1ncm91cCcga2V5PXsgZmllbGQgfT5cbiAgICAgICAgICA8bGFiZWw+eyBuYW1lIH08L2xhYmVsPlxuICAgICAgICAgIHsgZWRpdG9yKGVkaXRhYmxlLCBhdHRyLCBmb3JtYXQsICcnKSB9XG4gICAgICAgICAgeyBlcnJvciB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9KTtcbiAgICBjb25zdCBtb2RhbENsYXNzID0gY2xhc3NTZXQoJ21vZGFsJywgJ2ZhZGUnLCB0aGlzLm1vZGFsQ2xhc3NOYW1lLCB7XG4gICAgICAvLyBoYWNrIHByZXZlbnQgYm9vdHN0cmFwIG1vZGFsIGhpZGUgYnkgcmVSZW5kZXJcbiAgICAgICdpbic6IHNoYWtlRWRpdG9yIHx8IHRoaXMuc3RhdGUudmFsaWRhdGVTdGF0ZVxuICAgIH0pO1xuICAgIGNvbnN0IGRpYWxvZ0NsYXNzID0gY2xhc3NTZXQoJ21vZGFsLWRpYWxvZycsICdtb2RhbC1zbScsIHtcbiAgICAgICdhbmltYXRlZCc6IHNoYWtlRWRpdG9yLFxuICAgICAgJ3NoYWtlJzogc2hha2VFZGl0b3JcbiAgICB9KTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiByZWY9J21vZGFsJyBjbGFzc05hbWU9eyBtb2RhbENsYXNzIH0gdGFiSW5kZXg9Jy0xJyByb2xlPSdkaWFsb2cnPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17IGRpYWxvZ0NsYXNzIH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9J21vZGFsLWNvbnRlbnQnPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J21vZGFsLWhlYWRlcic+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT0nY2xvc2UnXG4gICAgICAgICAgICAgICAgZGF0YS1kaXNtaXNzPSdtb2RhbCdcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPSdDbG9zZSc+XG4gICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49J3RydWUnPiZ0aW1lczs8L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8aDQgY2xhc3NOYW1lPSdtb2RhbC10aXRsZSc+TmV3IFJlY29yZDwvaDQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtb2RhbC1ib2R5Jz5cbiAgICAgICAgICAgICAgPGZvcm0gcmVmPSdmb3JtJz5cbiAgICAgICAgICAgICAgeyBpbnB1dEZpZWxkIH1cbiAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbW9kYWwtZm9vdGVyJz5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSdidXR0b24nXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPSdidG4gYnRuLWRlZmF1bHQnXG4gICAgICAgICAgICAgICAgZGF0YS1kaXNtaXNzPSdtb2RhbCc+XG4gICAgICAgICAgICAgICAgQ2xvc2VcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT0nYnRuIGJ0bi1pbmZvJ1xuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyB0aGlzLmhhbmRsZVNhdmVCdG5DbGljayB9PlxuICAgICAgICAgICAgICAgIFNhdmVcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblRvb2xCYXIucHJvcFR5cGVzID0ge1xuICBvbkFkZFJvdzogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uRHJvcFJvdzogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uU2hvd09ubHlTZWxlY3RlZDogUHJvcFR5cGVzLmZ1bmMsXG4gIGVuYWJsZUluc2VydDogUHJvcFR5cGVzLmJvb2wsXG4gIGVuYWJsZURlbGV0ZTogUHJvcFR5cGVzLmJvb2wsXG4gIGVuYWJsZVNlYXJjaDogUHJvcFR5cGVzLmJvb2wsXG4gIGVuYWJsZVNob3dPbmx5U2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICBjb2x1bW5zOiBQcm9wVHlwZXMuYXJyYXksXG4gIHNlYXJjaFBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjbGVhclNlYXJjaDogUHJvcFR5cGVzLmJvb2xcbn07XG5cblRvb2xCYXIuZGVmYXVsdFByb3BzID0ge1xuICBlbmFibGVJbnNlcnQ6IGZhbHNlLFxuICBlbmFibGVEZWxldGU6IGZhbHNlLFxuICBlbmFibGVTZWFyY2g6IGZhbHNlLFxuICBlbmFibGVTaG93T25seVNlbGVjdGVkOiBmYWxzZSxcbiAgY2xlYXJTZWFyY2g6IGZhbHNlXG59O1xuXG5leHBvcnQgZGVmYXVsdCBUb29sQmFyO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvdG9vbGJhci9Ub29sQmFyLmpzXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ=="); -},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _Const = __webpack_require__(3);\n\nvar _Const2 = _interopRequireDefault(_Const);\n\nvar _classnames = __webpack_require__(6);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar TableFilter = (function (_Component) {\n _inherits(TableFilter, _Component);\n\n function TableFilter(props) {\n var _this = this;\n\n _classCallCheck(this, TableFilter);\n\n _get(Object.getPrototypeOf(TableFilter.prototype), 'constructor', this).call(this, props);\n\n this.handleKeyUp = function (e) {\n var _e$currentTarget = e.currentTarget;\n var value = _e$currentTarget.value;\n var name = _e$currentTarget.name;\n\n if (value.trim() === '') {\n delete _this.filterObj[name];\n } else {\n _this.filterObj[name] = value;\n }\n _this.props.onFilter(_this.filterObj);\n };\n\n this.filterObj = {};\n }\n\n _createClass(TableFilter, [{\n key: 'render',\n value: function render() {\n var _props = this.props;\n var striped = _props.striped;\n var condensed = _props.condensed;\n var rowSelectType = _props.rowSelectType;\n var columns = _props.columns;\n\n var tableClasses = (0, _classnames2['default'])('table', {\n 'table-striped': striped,\n 'table-condensed': condensed\n });\n var selectRowHeader = null;\n\n if (rowSelectType === _Const2['default'].ROW_SELECT_SINGLE || rowSelectType === _Const2['default'].ROW_SELECT_MULTI) {\n var style = {\n width: 35,\n paddingLeft: 0,\n paddingRight: 0\n };\n selectRowHeader = _react2['default'].createElement(\n 'th',\n { style: style, key: -1 },\n 'Filter'\n );\n }\n\n var filterField = columns.map(function (column) {\n var hidden = column.hidden;\n var width = column.width;\n var name = column.name;\n\n var thStyle = {\n display: hidden ? 'none' : null,\n width: width\n };\n return _react2['default'].createElement(\n 'th',\n { key: name, style: thStyle },\n _react2['default'].createElement(\n 'div',\n { className: 'th-inner table-header-column' },\n _react2['default'].createElement('input', { size: '10', type: 'text',\n placeholder: name, name: name, onKeyUp: this.handleKeyUp })\n )\n );\n }, this);\n\n return _react2['default'].createElement(\n 'table',\n { className: tableClasses, style: { marginTop: 5 } },\n _react2['default'].createElement(\n 'thead',\n null,\n _react2['default'].createElement(\n 'tr',\n { style: { borderBottomStyle: 'hidden' } },\n selectRowHeader,\n filterField\n )\n )\n );\n }\n }]);\n\n return TableFilter;\n})(_react.Component);\n\nTableFilter.propTypes = {\n columns: _react.PropTypes.array,\n rowSelectType: _react.PropTypes.string,\n onFilter: _react.PropTypes.func\n};\nexports['default'] = TableFilter;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvVGFibGVGaWx0ZXIuanM/MWI2OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O2lDQUE0QyxDQUFPOzs7O2lDQUNqQyxDQUFTOzs7O3NDQUNOLENBQVk7Ozs7SUFFM0IsV0FBVztZQUFYLFdBQVc7O0FBRUosV0FGUCxXQUFXLENBRUgsS0FBSyxFQUFFOzs7MEJBRmYsV0FBVzs7QUFHYiwrQkFIRSxXQUFXLDZDQUdQLEtBQUssRUFBRTs7U0FJZixXQUFXLEdBQUcsV0FBQyxFQUFJOzZCQUNPLENBQUMsQ0FBQyxhQUFhO1VBQS9CLEtBQUssb0JBQUwsS0FBSztVQUFFLElBQUksb0JBQUosSUFBSTs7QUFDbkIsVUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO0FBQ3ZCLGVBQU8sTUFBSyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDN0IsTUFBTTtBQUNMLGNBQUssU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztPQUM5QjtBQUNELFlBQUssS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFLLFNBQVMsQ0FBQyxDQUFDO0tBQ3JDOztBQVhDLFFBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0dBQ3JCOztlQUxHLFdBQVc7O1dBaUJULGtCQUFHO21CQUNnRCxJQUFJLENBQUMsS0FBSztVQUF6RCxPQUFPLFVBQVAsT0FBTztVQUFFLFNBQVMsVUFBVCxTQUFTO1VBQUUsYUFBYSxVQUFiLGFBQWE7VUFBRSxPQUFPLFVBQVAsT0FBTzs7QUFDbEQsVUFBTSxZQUFZLEdBQUcsNkJBQVMsT0FBTyxFQUFFO0FBQ3JDLHVCQUFlLEVBQUUsT0FBTztBQUN4Qix5QkFBaUIsRUFBRSxTQUFTO09BQzdCLENBQUMsQ0FBQztBQUNILFVBQUksZUFBZSxHQUFHLElBQUksQ0FBQzs7QUFFM0IsVUFBSSxhQUFhLEtBQUssbUJBQU0saUJBQWlCLElBQ3pDLGFBQWEsS0FBSyxtQkFBTSxnQkFBZ0IsRUFBRTtBQUM1QyxZQUFNLEtBQUssR0FBRztBQUNaLGVBQUssRUFBRSxFQUFFO0FBQ1QscUJBQVcsRUFBRSxDQUFDO0FBQ2Qsc0JBQVksRUFBRSxDQUFDO1NBQ2hCLENBQUM7QUFDRix1QkFBZSxHQUFJOztZQUFJLEtBQUssRUFBRyxLQUFPLEVBQUMsR0FBRyxFQUFHLENBQUMsQ0FBRzs7U0FBYSxDQUFDO09BQ2hFOztBQUVELFVBQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBUyxNQUFNLEVBQUU7WUFDdkMsTUFBTSxHQUFrQixNQUFNLENBQTlCLE1BQU07WUFBRSxLQUFLLEdBQVcsTUFBTSxDQUF0QixLQUFLO1lBQUUsSUFBSSxHQUFLLE1BQU0sQ0FBZixJQUFJOztBQUMzQixZQUFNLE9BQU8sR0FBRztBQUNkLGlCQUFPLEVBQUUsTUFBTSxHQUFHLE1BQU0sR0FBRyxJQUFJO0FBQy9CLGVBQUssRUFBTCxLQUFLO1NBQ04sQ0FBQztBQUNGLGVBQ0U7O1lBQUksR0FBRyxFQUFHLElBQU0sRUFBQyxLQUFLLEVBQUcsT0FBUztVQUNoQzs7Y0FBSyxTQUFTLEVBQUMsOEJBQThCO1lBQzNDLDRDQUFPLElBQUksRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLE1BQU07QUFDMUIseUJBQVcsRUFBRyxJQUFNLEVBQUMsSUFBSSxFQUFHLElBQU0sRUFBQyxPQUFPLEVBQUcsSUFBSSxDQUFDLFdBQWEsR0FBRTtXQUMvRDtTQUNILENBQ0w7T0FDSCxFQUFFLElBQUksQ0FBQyxDQUFDOztBQUVULGFBQ0U7O1VBQU8sU0FBUyxFQUFHLFlBQWMsRUFBQyxLQUFLLEVBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFJO1FBQzFEOzs7VUFDRTs7Y0FBSSxLQUFLLEVBQUcsRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUk7WUFDekMsZUFBZTtZQUFJLFdBQVc7V0FDN0I7U0FDQztPQUNGLENBQ1I7S0FDSDs7O1NBNURHLFdBQVc7OztBQThEakIsV0FBVyxDQUFDLFNBQVMsR0FBRztBQUN0QixTQUFPLEVBQUUsaUJBQVUsS0FBSztBQUN4QixlQUFhLEVBQUUsaUJBQVUsTUFBTTtBQUMvQixVQUFRLEVBQUUsaUJBQVUsSUFBSTtDQUN6QixDQUFDO3FCQUNhLFdBQVciLCJmaWxlIjoiMzIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBQcm9wVHlwZXMgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi9Db25zdCc7XG5pbXBvcnQgY2xhc3NTZXQgZnJvbSAnY2xhc3NuYW1lcyc7XG5cbmNsYXNzIFRhYmxlRmlsdGVyIGV4dGVuZHMgQ29tcG9uZW50IHtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmZpbHRlck9iaiA9IHt9O1xuICB9XG5cbiAgaGFuZGxlS2V5VXAgPSBlID0+IHtcbiAgICBjb25zdCB7IHZhbHVlLCBuYW1lIH0gPSBlLmN1cnJlbnRUYXJnZXQ7XG4gICAgaWYgKHZhbHVlLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmZpbHRlck9ialtuYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWx0ZXJPYmpbbmFtZV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgdGhpcy5wcm9wcy5vbkZpbHRlcih0aGlzLmZpbHRlck9iaik7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBzdHJpcGVkLCBjb25kZW5zZWQsIHJvd1NlbGVjdFR5cGUsIGNvbHVtbnMgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgdGFibGVDbGFzc2VzID0gY2xhc3NTZXQoJ3RhYmxlJywge1xuICAgICAgJ3RhYmxlLXN0cmlwZWQnOiBzdHJpcGVkLFxuICAgICAgJ3RhYmxlLWNvbmRlbnNlZCc6IGNvbmRlbnNlZFxuICAgIH0pO1xuICAgIGxldCBzZWxlY3RSb3dIZWFkZXIgPSBudWxsO1xuXG4gICAgaWYgKHJvd1NlbGVjdFR5cGUgPT09IENvbnN0LlJPV19TRUxFQ1RfU0lOR0xFIHx8XG4gICAgICAgIHJvd1NlbGVjdFR5cGUgPT09IENvbnN0LlJPV19TRUxFQ1RfTVVMVEkpIHtcbiAgICAgIGNvbnN0IHN0eWxlID0ge1xuICAgICAgICB3aWR0aDogMzUsXG4gICAgICAgIHBhZGRpbmdMZWZ0OiAwLFxuICAgICAgICBwYWRkaW5nUmlnaHQ6IDBcbiAgICAgIH07XG4gICAgICBzZWxlY3RSb3dIZWFkZXIgPSAoPHRoIHN0eWxlPXsgc3R5bGUgfSBrZXk9eyAtMSB9PkZpbHRlcjwvdGg+KTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXJGaWVsZCA9IGNvbHVtbnMubWFwKGZ1bmN0aW9uKGNvbHVtbikge1xuICAgICAgY29uc3QgeyBoaWRkZW4sIHdpZHRoLCBuYW1lIH0gPSBjb2x1bW47XG4gICAgICBjb25zdCB0aFN0eWxlID0ge1xuICAgICAgICBkaXNwbGF5OiBoaWRkZW4gPyAnbm9uZScgOiBudWxsLFxuICAgICAgICB3aWR0aFxuICAgICAgfTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDx0aCBrZXk9eyBuYW1lIH0gc3R5bGU9eyB0aFN0eWxlIH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9J3RoLWlubmVyIHRhYmxlLWhlYWRlci1jb2x1bW4nPlxuICAgICAgICAgICAgPGlucHV0IHNpemU9JzEwJyB0eXBlPSd0ZXh0J1xuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17IG5hbWUgfSBuYW1lPXsgbmFtZSB9IG9uS2V5VXA9eyB0aGlzLmhhbmRsZUtleVVwIH0vPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RoPlxuICAgICAgKTtcbiAgICB9LCB0aGlzKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8dGFibGUgY2xhc3NOYW1lPXsgdGFibGVDbGFzc2VzIH0gc3R5bGU9eyB7IG1hcmdpblRvcDogNSB9IH0+XG4gICAgICAgIDx0aGVhZD5cbiAgICAgICAgICA8dHIgc3R5bGU9eyB7IGJvcmRlckJvdHRvbVN0eWxlOiAnaGlkZGVuJyB9IH0+XG4gICAgICAgICAgICB7IHNlbGVjdFJvd0hlYWRlciB9eyBmaWx0ZXJGaWVsZCB9XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90aGVhZD5cbiAgICAgIDwvdGFibGU+XG4gICAgKTtcbiAgfVxufVxuVGFibGVGaWx0ZXIucHJvcFR5cGVzID0ge1xuICBjb2x1bW5zOiBQcm9wVHlwZXMuYXJyYXksXG4gIHJvd1NlbGVjdFR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uRmlsdGVyOiBQcm9wVHlwZXMuZnVuY1xufTtcbmV4cG9ydCBkZWZhdWx0IFRhYmxlRmlsdGVyO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvVGFibGVGaWx0ZXIuanNcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports,__webpack_require__){eval("/* eslint no-nested-ternary: 0 */\n/* eslint guard-for-in: 0 */\n/* eslint no-console: 0 */\n/* eslint eqeqeq: 0 */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _Const = __webpack_require__(3);\n\nvar _Const2 = _interopRequireDefault(_Const);\n\nvar EventEmitter = __webpack_require__(34).EventEmitter;\n\nfunction _sort(arr, sortField, order, sortFunc) {\n order = order.toLowerCase();\n arr.sort(function (a, b) {\n if (sortFunc) {\n return sortFunc(a, b, order, sortField);\n } else {\n if (order === _Const2['default'].SORT_DESC) {\n return a[sortField] > b[sortField] ? -1 : a[sortField] < b[sortField] ? 1 : 0;\n } else {\n return a[sortField] < b[sortField] ? -1 : a[sortField] > b[sortField] ? 1 : 0;\n }\n }\n });\n\n return arr;\n}\n\nvar TableDataSet = (function (_EventEmitter) {\n _inherits(TableDataSet, _EventEmitter);\n\n function TableDataSet(data) {\n _classCallCheck(this, TableDataSet);\n\n _get(Object.getPrototypeOf(TableDataSet.prototype), 'constructor', this).call(this, data);\n this.data = data;\n }\n\n _createClass(TableDataSet, [{\n key: 'setData',\n value: function setData(data) {\n this.emit('change', data);\n }\n }, {\n key: 'clear',\n value: function clear() {\n this.data = null;\n }\n }, {\n key: 'getData',\n value: function getData() {\n return this.data;\n }\n }]);\n\n return TableDataSet;\n})(EventEmitter);\n\nexports.TableDataSet = TableDataSet;\n\nvar TableDataStore = (function () {\n function TableDataStore(data) {\n _classCallCheck(this, TableDataStore);\n\n this.data = data;\n this.colInfos = null;\n this.filteredData = null;\n this.isOnFilter = false;\n this.filterObj = null;\n this.searchText = null;\n this.sortObj = null;\n this.pageObj = {};\n this.selected = [];\n this.multiColumnSearch = false;\n this.showOnlySelected = false;\n this.remote = false; // remote data\n }\n\n _createClass(TableDataStore, [{\n key: 'setProps',\n value: function setProps(props) {\n this.keyField = props.keyField;\n this.enablePagination = props.isPagination;\n this.colInfos = props.colInfos;\n this.remote = props.remote;\n this.multiColumnSearch = props.multiColumnSearch;\n }\n }, {\n key: 'setData',\n value: function setData(data) {\n this.data = data;\n if (this.isOnFilter) {\n if (this.filterObj !== null) this.filter(this.filterObj);\n if (this.searchText !== null) this.search(this.searchText);\n }\n if (this.sortObj) {\n this.sort(this.sortObj.order, this.sortObj.sortField);\n }\n }\n }, {\n key: 'getSortInfo',\n value: function getSortInfo() {\n return this.sortObj;\n }\n }, {\n key: 'setSelectedRowKey',\n value: function setSelectedRowKey(selectedRowKeys) {\n this.selected = selectedRowKeys;\n }\n }, {\n key: 'getSelectedRowKeys',\n value: function getSelectedRowKeys() {\n return this.selected;\n }\n }, {\n key: 'getCurrentDisplayData',\n value: function getCurrentDisplayData() {\n if (this.isOnFilter) return this.filteredData;else return this.data;\n }\n }, {\n key: 'ignoreNonSelected',\n value: function ignoreNonSelected() {\n var _this = this;\n\n this.showOnlySelected = !this.showOnlySelected;\n if (this.showOnlySelected) {\n this.isOnFilter = true;\n this.filteredData = this.data.filter(function (row) {\n var result = _this.selected.find(function (x) {\n return row[_this.keyField] === x;\n });\n return typeof result !== 'undefined' ? true : false;\n });\n } else {\n this.isOnFilter = false;\n }\n }\n }, {\n key: 'sort',\n value: function sort(order, sortField) {\n this.sortObj = { order: order, sortField: sortField };\n\n var currentDisplayData = this.getCurrentDisplayData();\n if (!this.colInfos[sortField]) return this;\n\n var sortFunc = this.colInfos[sortField].sortFunc;\n\n currentDisplayData = _sort(currentDisplayData, sortField, order, sortFunc);\n\n return this;\n }\n }, {\n key: 'page',\n value: function page(_page, sizePerPage) {\n this.pageObj.end = _page * sizePerPage - 1;\n this.pageObj.start = this.pageObj.end - (sizePerPage - 1);\n return this;\n }\n }, {\n key: 'edit',\n value: function edit(newVal, rowIndex, fieldName) {\n var currentDisplayData = this.getCurrentDisplayData();\n var rowKeyCache = undefined;\n if (!this.enablePagination) {\n currentDisplayData[rowIndex][fieldName] = newVal;\n rowKeyCache = currentDisplayData[rowIndex][this.keyField];\n } else {\n currentDisplayData[this.pageObj.start + rowIndex][fieldName] = newVal;\n rowKeyCache = currentDisplayData[this.pageObj.start + rowIndex][this.keyField];\n }\n if (this.isOnFilter) {\n this.data.forEach(function (row) {\n if (row[this.keyField] === rowKeyCache) {\n row[fieldName] = newVal;\n }\n }, this);\n if (this.filterObj !== null) this.filter(this.filterObj);\n if (this.searchText !== null) this.search(this.searchText);\n }\n return this;\n }\n }, {\n key: 'addAtBegin',\n value: function addAtBegin(newObj) {\n if (!newObj[this.keyField] || newObj[this.keyField].toString() === '') {\n throw this.keyField + ' can\\'t be empty value.';\n }\n var currentDisplayData = this.getCurrentDisplayData();\n currentDisplayData.forEach(function (row) {\n if (row[this.keyField].toString() === newObj[this.keyField].toString()) {\n throw this.keyField + ' ' + newObj[this.keyField] + ' already exists';\n }\n }, this);\n currentDisplayData.unshift(newObj);\n if (this.isOnFilter) {\n this.data.unshift(newObj);\n }\n }\n }, {\n key: 'add',\n value: function add(newObj) {\n if (!newObj[this.keyField] || newObj[this.keyField].toString() === '') {\n throw this.keyField + ' can\\'t be empty value.';\n }\n var currentDisplayData = this.getCurrentDisplayData();\n currentDisplayData.forEach(function (row) {\n if (row[this.keyField].toString() === newObj[this.keyField].toString()) {\n throw this.keyField + ' ' + newObj[this.keyField] + ' already exists';\n }\n }, this);\n\n currentDisplayData.push(newObj);\n if (this.isOnFilter) {\n this.data.push(newObj);\n }\n }\n }, {\n key: 'remove',\n value: function remove(rowKey) {\n var _this2 = this;\n\n var currentDisplayData = this.getCurrentDisplayData();\n var result = currentDisplayData.filter(function (row) {\n return rowKey.indexOf(row[_this2.keyField]) === -1;\n });\n\n if (this.isOnFilter) {\n this.data = this.data.filter(function (row) {\n return rowKey.indexOf(row[_this2.keyField]) === -1;\n });\n this.filteredData = result;\n } else {\n this.data = result;\n }\n }\n }, {\n key: 'filter',\n value: function filter(filterObj) {\n var _this3 = this;\n\n if (Object.keys(filterObj).length === 0) {\n this.filteredData = null;\n this.isOnFilter = false;\n this.filterObj = null;\n if (this.searchText !== null) this.search(this.searchText);\n } else {\n this.filterObj = filterObj;\n this.filteredData = this.data.filter(function (row) {\n var valid = true;\n var filterVal = undefined;\n for (var key in filterObj) {\n var targetVal = row[key];\n\n switch (filterObj[key].type) {\n case _Const2['default'].FILTER_TYPE.NUMBER:\n {\n filterVal = filterObj[key].value.number;\n break;\n }\n case _Const2['default'].FILTER_TYPE.CUSTOM:\n {\n filterVal = typeof filterObj[key].value === 'object' ? undefined : typeof filterObj[key].value === 'string' ? filterObj[key].value.toLowerCase() : filterObj[key].value;\n break;\n }\n case _Const2['default'].FILTER_TYPE.REGEX:\n {\n filterVal = filterObj[key].value;\n break;\n }\n default:\n {\n filterVal = typeof filterObj[key].value === 'string' ? filterObj[key].value.toLowerCase() : filterObj[key].value;\n if (filterVal === undefined) {\n // Support old filter\n filterVal = filterObj[key].toLowerCase();\n }\n break;\n }\n }\n\n if (_this3.colInfos[key]) {\n var _colInfos$key = _this3.colInfos[key];\n var format = _colInfos$key.format;\n var filterFormatted = _colInfos$key.filterFormatted;\n var formatExtraData = _colInfos$key.formatExtraData;\n\n if (filterFormatted && format) {\n targetVal = format(row[key], row, formatExtraData);\n }\n }\n\n switch (filterObj[key].type) {\n case _Const2['default'].FILTER_TYPE.NUMBER:\n {\n valid = _this3.filterNumber(targetVal, filterVal, filterObj[key].value.comparator);\n break;\n }\n case _Const2['default'].FILTER_TYPE.DATE:\n {\n valid = _this3.filterDate(targetVal, filterVal);\n break;\n }\n case _Const2['default'].FILTER_TYPE.REGEX:\n {\n valid = _this3.filterRegex(targetVal, filterVal);\n break;\n }\n case _Const2['default'].FILTER_TYPE.CUSTOM:\n {\n valid = _this3.filterCustom(targetVal, filterVal, filterObj[key].value);\n break;\n }\n default:\n {\n valid = _this3.filterText(targetVal, filterVal);\n break;\n }\n }\n if (!valid) {\n break;\n }\n }\n return valid;\n });\n this.isOnFilter = true;\n }\n }\n }, {\n key: 'filterNumber',\n value: function filterNumber(targetVal, filterVal, comparator) {\n var valid = true;\n switch (comparator) {\n case '=':\n {\n if (targetVal != filterVal) {\n valid = false;\n }\n break;\n }\n case '>':\n {\n if (targetVal <= filterVal) {\n valid = false;\n }\n break;\n }\n case '>=':\n {\n if (targetVal < filterVal) {\n valid = false;\n }\n break;\n }\n case '<':\n {\n if (targetVal >= filterVal) {\n valid = false;\n }\n break;\n }\n case '<=':\n {\n if (targetVal > filterVal) {\n valid = false;\n }\n break;\n }\n case '!=':\n {\n if (targetVal == filterVal) {\n valid = false;\n }\n break;\n }\n default:\n {\n console.error('Number comparator provided is not supported');\n break;\n }\n }\n return valid;\n }\n }, {\n key: 'filterDate',\n value: function filterDate(targetVal, filterVal) {\n return targetVal.getDate() === filterVal.getDate() && targetVal.getMonth() === filterVal.getMonth() && targetVal.getFullYear() === filterVal.getFullYear();\n }\n }, {\n key: 'filterRegex',\n value: function filterRegex(targetVal, filterVal) {\n try {\n return new RegExp(filterVal, 'i').test(targetVal);\n } catch (e) {\n console.error('Invalid regular expression');\n return true;\n }\n }\n }, {\n key: 'filterCustom',\n value: function filterCustom(targetVal, filterVal, callbackInfo) {\n if (callbackInfo !== null && typeof callbackInfo === 'object') {\n return callbackInfo.callback(targetVal, callbackInfo.callbackParameters);\n }\n\n return this.filterText(targetVal, filterVal);\n }\n }, {\n key: 'filterText',\n value: function filterText(targetVal, filterVal) {\n if (targetVal.toString().toLowerCase().indexOf(filterVal) === -1) {\n return false;\n }\n return true;\n }\n\n /* General search function\n * It will search for the text if the input includes that text;\n */\n }, {\n key: 'search',\n value: function search(searchText) {\n var _this4 = this;\n\n if (searchText.trim() === '') {\n this.filteredData = null;\n this.isOnFilter = false;\n this.searchText = null;\n if (this.filterObj !== null) this.filter(this.filterObj);\n } else {\n (function () {\n _this4.searchText = searchText;\n var searchTextArray = [];\n\n if (_this4.multiColumnSearch) {\n searchTextArray = searchText.split(' ');\n } else {\n searchTextArray.push(searchText);\n }\n\n var source = _this4.isOnFilter ? _this4.filteredData : _this4.data;\n\n _this4.filteredData = source.filter(function (row) {\n var keys = Object.keys(row);\n var valid = false;\n // for loops are ugly, but performance matters here.\n // And you cant break from a forEach.\n // http://jsperf.com/for-vs-foreach/66\n for (var i = 0, keysLength = keys.length; i < keysLength; i++) {\n var key = keys[i];\n if (_this4.colInfos[key] && row[key]) {\n var _colInfos$key2 = _this4.colInfos[key];\n var format = _colInfos$key2.format;\n var filterFormatted = _colInfos$key2.filterFormatted;\n var formatExtraData = _colInfos$key2.formatExtraData;\n var searchable = _colInfos$key2.searchable;\n\n var targetVal = row[key];\n if (searchable) {\n if (filterFormatted && format) {\n targetVal = format(targetVal, row, formatExtraData);\n }\n for (var j = 0, textLength = searchTextArray.length; j < textLength; j++) {\n var filterVal = searchTextArray[j].toLowerCase();\n if (targetVal.toString().toLowerCase().indexOf(filterVal) !== -1) {\n valid = true;\n break;\n }\n }\n }\n }\n }\n return valid;\n });\n _this4.isOnFilter = true;\n })();\n }\n }\n }, {\n key: 'getDataIgnoringPagination',\n value: function getDataIgnoringPagination() {\n return this.getCurrentDisplayData();\n }\n }, {\n key: 'get',\n value: function get() {\n var _data = this.getCurrentDisplayData();\n\n if (_data.length === 0) return _data;\n\n if (this.remote || !this.enablePagination) {\n return _data;\n } else {\n var result = [];\n for (var i = this.pageObj.start; i <= this.pageObj.end; i++) {\n result.push(_data[i]);\n if (i + 1 === _data.length) break;\n }\n return result;\n }\n }\n }, {\n key: 'getKeyField',\n value: function getKeyField() {\n return this.keyField;\n }\n }, {\n key: 'getDataNum',\n value: function getDataNum() {\n return this.getCurrentDisplayData().length;\n }\n }, {\n key: 'isChangedPage',\n value: function isChangedPage() {\n return this.pageObj.start && this.pageObj.end ? true : false;\n }\n }, {\n key: 'getAllRowkey',\n value: function getAllRowkey() {\n var _this5 = this;\n\n return this.data.map(function (row) {\n return row[_this5.keyField];\n });\n }\n }]);\n\n return TableDataStore;\n})();\n\nexports.TableDataStore = TableDataStore;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvc3RvcmUvVGFibGVEYXRhU3RvcmUuanM/ZDgwMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztpQ0FJa0IsQ0FBVTs7OztBQUM1QixJQUFNLFlBQVksR0FBRyxtQkFBTyxDQUFDLEVBQVEsQ0FBQyxDQUFDLFlBQVksQ0FBQzs7QUFFcEQsU0FBUyxLQUFLLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO0FBQzlDLE9BQUssR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDNUIsS0FBRyxDQUFDLElBQUksQ0FBQyxVQUFDLENBQUMsRUFBRSxDQUFDLEVBQUs7QUFDakIsUUFBSSxRQUFRLEVBQUU7QUFDWixhQUFPLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztLQUN6QyxNQUFNO0FBQ0wsVUFBSSxLQUFLLEtBQUssbUJBQU0sU0FBUyxFQUFFO0FBQzdCLGVBQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFJLENBQUMsR0FBRyxDQUFFLENBQUM7T0FDbkYsTUFBTTtBQUNMLGVBQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFJLENBQUMsR0FBRyxDQUFFLENBQUM7T0FDbkY7S0FDRjtHQUNGLENBQUMsQ0FBQzs7QUFFSCxTQUFPLEdBQUcsQ0FBQztDQUNaOztJQUVZLFlBQVk7WUFBWixZQUFZOztBQUNaLFdBREEsWUFBWSxDQUNYLElBQUksRUFBRTswQkFEUCxZQUFZOztBQUVyQiwr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V0FFWSx5QkFBRztBQUNkLGFBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQztLQUM5RDs7O1dBRVcsd0JBQUc7OztBQUNiLGFBQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBRyxFQUFJO0FBQzFCLGVBQU8sR0FBRyxDQUFDLE9BQUssUUFBUSxDQUFDLENBQUM7T0FDM0IsQ0FBQyxDQUFDO0tBQ0o7OztTQW5aVSxjQUFjIiwiZmlsZSI6IjMzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50IG5vLW5lc3RlZC10ZXJuYXJ5OiAwICovXG4vKiBlc2xpbnQgZ3VhcmQtZm9yLWluOiAwICovXG4vKiBlc2xpbnQgbm8tY29uc29sZTogMCAqL1xuLyogZXNsaW50IGVxZXFlcTogMCAqL1xuaW1wb3J0IENvbnN0IGZyb20gJy4uL0NvbnN0JztcbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlcjtcblxuZnVuY3Rpb24gX3NvcnQoYXJyLCBzb3J0RmllbGQsIG9yZGVyLCBzb3J0RnVuYykge1xuICBvcmRlciA9IG9yZGVyLnRvTG93ZXJDYXNlKCk7XG4gIGFyci5zb3J0KChhLCBiKSA9PiB7XG4gICAgaWYgKHNvcnRGdW5jKSB7XG4gICAgICByZXR1cm4gc29ydEZ1bmMoYSwgYiwgb3JkZXIsIHNvcnRGaWVsZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChvcmRlciA9PT0gQ29uc3QuU09SVF9ERVNDKSB7XG4gICAgICAgIHJldHVybiBhW3NvcnRGaWVsZF0gPiBiW3NvcnRGaWVsZF0gPyAtMSA6ICgoYVtzb3J0RmllbGRdIDwgYltzb3J0RmllbGRdKSA/IDEgOiAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhW3NvcnRGaWVsZF0gPCBiW3NvcnRGaWVsZF0gPyAtMSA6ICgoYVtzb3J0RmllbGRdID4gYltzb3J0RmllbGRdKSA/IDEgOiAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBhcnI7XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJsZURhdGFTZXQgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICBjb25zdHJ1Y3RvcihkYXRhKSB7XG4gICAgc3VwZXIoZGF0YSk7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgfVxuXG4gIHNldERhdGEoZGF0YSkge1xuICAgIHRoaXMuZW1pdCgnY2hhbmdlJywgZGF0YSk7XG4gIH1cblxuICBjbGVhcigpIHtcbiAgICB0aGlzLmRhdGEgPSBudWxsO1xuICB9XG5cbiAgZ2V0RGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJsZURhdGFTdG9yZSB7XG5cbiAgY29uc3RydWN0b3IoZGF0YSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5jb2xJbmZvcyA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJlZERhdGEgPSBudWxsO1xuICAgIHRoaXMuaXNPbkZpbHRlciA9IGZhbHNlO1xuICAgIHRoaXMuZmlsdGVyT2JqID0gbnVsbDtcbiAgICB0aGlzLnNlYXJjaFRleHQgPSBudWxsO1xuICAgIHRoaXMuc29ydE9iaiA9IG51bGw7XG4gICAgdGhpcy5wYWdlT2JqID0ge307XG4gICAgdGhpcy5zZWxlY3RlZCA9IFtdO1xuICAgIHRoaXMubXVsdGlDb2x1bW5TZWFyY2ggPSBmYWxzZTtcbiAgICB0aGlzLnNob3dPbmx5U2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnJlbW90ZSA9IGZhbHNlOyAvLyByZW1vdGUgZGF0YVxuICB9XG5cbiAgc2V0UHJvcHMocHJvcHMpIHtcbiAgICB0aGlzLmtleUZpZWxkID0gcHJvcHMua2V5RmllbGQ7XG4gICAgdGhpcy5lbmFibGVQYWdpbmF0aW9uID0gcHJvcHMuaXNQYWdpbmF0aW9uO1xuICAgIHRoaXMuY29sSW5mb3MgPSBwcm9wcy5jb2xJbmZvcztcbiAgICB0aGlzLnJlbW90ZSA9IHByb3BzLnJlbW90ZTtcbiAgICB0aGlzLm11bHRpQ29sdW1uU2VhcmNoID0gcHJvcHMubXVsdGlDb2x1bW5TZWFyY2g7XG4gIH1cblxuICBzZXREYXRhKGRhdGEpIHtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIGlmICh0aGlzLmlzT25GaWx0ZXIpIHtcbiAgICAgIGlmICh0aGlzLmZpbHRlck9iaiAhPT0gbnVsbCkgdGhpcy5maWx0ZXIodGhpcy5maWx0ZXJPYmopO1xuICAgICAgaWYgKHRoaXMuc2VhcmNoVGV4dCAhPT0gbnVsbCkgdGhpcy5zZWFyY2godGhpcy5zZWFyY2hUZXh0KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc29ydE9iaikge1xuICAgICAgdGhpcy5zb3J0KHRoaXMuc29ydE9iai5vcmRlciwgdGhpcy5zb3J0T2JqLnNvcnRGaWVsZCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0U29ydEluZm8oKSB7XG4gICAgcmV0dXJuIHRoaXMuc29ydE9iajtcbiAgfVxuXG4gIHNldFNlbGVjdGVkUm93S2V5KHNlbGVjdGVkUm93S2V5cykge1xuICAgIHRoaXMuc2VsZWN0ZWQgPSBzZWxlY3RlZFJvd0tleXM7XG4gIH1cblxuICBnZXRTZWxlY3RlZFJvd0tleXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQ7XG4gIH1cblxuICBnZXRDdXJyZW50RGlzcGxheURhdGEoKSB7XG4gICAgaWYgKHRoaXMuaXNPbkZpbHRlcikgcmV0dXJuIHRoaXMuZmlsdGVyZWREYXRhO1xuICAgIGVsc2UgcmV0dXJuIHRoaXMuZGF0YTtcbiAgfVxuXG4gIGlnbm9yZU5vblNlbGVjdGVkKCkge1xuICAgIHRoaXMuc2hvd09ubHlTZWxlY3RlZCA9ICF0aGlzLnNob3dPbmx5U2VsZWN0ZWQ7XG4gICAgaWYgKHRoaXMuc2hvd09ubHlTZWxlY3RlZCkge1xuICAgICAgdGhpcy5pc09uRmlsdGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gdGhpcy5kYXRhLmZpbHRlciggcm93ID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5zZWxlY3RlZC5maW5kKHggPT4gcm93W3RoaXMua2V5RmllbGRdID09PSB4KTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiByZXN1bHQgIT09ICd1bmRlZmluZWQnID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNPbkZpbHRlciA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHNvcnQob3JkZXIsIHNvcnRGaWVsZCkge1xuICAgIHRoaXMuc29ydE9iaiA9IHsgb3JkZXIsIHNvcnRGaWVsZCB9O1xuXG4gICAgbGV0IGN1cnJlbnREaXNwbGF5RGF0YSA9IHRoaXMuZ2V0Q3VycmVudERpc3BsYXlEYXRhKCk7XG4gICAgaWYgKCF0aGlzLmNvbEluZm9zW3NvcnRGaWVsZF0pIHJldHVybiB0aGlzO1xuXG4gICAgY29uc3QgeyBzb3J0RnVuYyB9ID0gdGhpcy5jb2xJbmZvc1tzb3J0RmllbGRdO1xuICAgIGN1cnJlbnREaXNwbGF5RGF0YSA9IF9zb3J0KGN1cnJlbnREaXNwbGF5RGF0YSwgc29ydEZpZWxkLCBvcmRlciwgc29ydEZ1bmMpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwYWdlKHBhZ2UsIHNpemVQZXJQYWdlKSB7XG4gICAgdGhpcy5wYWdlT2JqLmVuZCA9IHBhZ2UgKiBzaXplUGVyUGFnZSAtIDE7XG4gICAgdGhpcy5wYWdlT2JqLnN0YXJ0ID0gdGhpcy5wYWdlT2JqLmVuZCAtIChzaXplUGVyUGFnZSAtIDEpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZWRpdChuZXdWYWwsIHJvd0luZGV4LCBmaWVsZE5hbWUpIHtcbiAgICBjb25zdCBjdXJyZW50RGlzcGxheURhdGEgPSB0aGlzLmdldEN1cnJlbnREaXNwbGF5RGF0YSgpO1xuICAgIGxldCByb3dLZXlDYWNoZTtcbiAgICBpZiAoIXRoaXMuZW5hYmxlUGFnaW5hdGlvbikge1xuICAgICAgY3VycmVudERpc3BsYXlEYXRhW3Jvd0luZGV4XVtmaWVsZE5hbWVdID0gbmV3VmFsO1xuICAgICAgcm93S2V5Q2FjaGUgPSBjdXJyZW50RGlzcGxheURhdGFbcm93SW5kZXhdW3RoaXMua2V5RmllbGRdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50RGlzcGxheURhdGFbdGhpcy5wYWdlT2JqLnN0YXJ0ICsgcm93SW5kZXhdW2ZpZWxkTmFtZV0gPSBuZXdWYWw7XG4gICAgICByb3dLZXlDYWNoZSA9IGN1cnJlbnREaXNwbGF5RGF0YVt0aGlzLnBhZ2VPYmouc3RhcnQgKyByb3dJbmRleF1bdGhpcy5rZXlGaWVsZF07XG4gICAgfVxuICAgIGlmICh0aGlzLmlzT25GaWx0ZXIpIHtcbiAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKHJvdykge1xuICAgICAgICBpZiAocm93W3RoaXMua2V5RmllbGRdID09PSByb3dLZXlDYWNoZSkge1xuICAgICAgICAgIHJvd1tmaWVsZE5hbWVdID0gbmV3VmFsO1xuICAgICAgICB9XG4gICAgICB9LCB0aGlzKTtcbiAgICAgIGlmICh0aGlzLmZpbHRlck9iaiAhPT0gbnVsbCkgdGhpcy5maWx0ZXIodGhpcy5maWx0ZXJPYmopO1xuICAgICAgaWYgKHRoaXMuc2VhcmNoVGV4dCAhPT0gbnVsbCkgdGhpcy5zZWFyY2godGhpcy5zZWFyY2hUZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhZGRBdEJlZ2luKG5ld09iaikge1xuICAgIGlmICghbmV3T2JqW3RoaXMua2V5RmllbGRdIHx8IG5ld09ialt0aGlzLmtleUZpZWxkXS50b1N0cmluZygpID09PSAnJykge1xuICAgICAgdGhyb3cgYCR7dGhpcy5rZXlGaWVsZH0gY2FuJ3QgYmUgZW1wdHkgdmFsdWUuYDtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudERpc3BsYXlEYXRhID0gdGhpcy5nZXRDdXJyZW50RGlzcGxheURhdGEoKTtcbiAgICBjdXJyZW50RGlzcGxheURhdGEuZm9yRWFjaChmdW5jdGlvbihyb3cpIHtcbiAgICAgIGlmIChyb3dbdGhpcy5rZXlGaWVsZF0udG9TdHJpbmcoKSA9PT0gbmV3T2JqW3RoaXMua2V5RmllbGRdLnRvU3RyaW5nKCkpIHtcbiAgICAgICAgdGhyb3cgYCR7dGhpcy5rZXlGaWVsZH0gJHtuZXdPYmpbdGhpcy5rZXlGaWVsZF19IGFscmVhZHkgZXhpc3RzYDtcbiAgICAgIH1cbiAgICB9LCB0aGlzKTtcbiAgICBjdXJyZW50RGlzcGxheURhdGEudW5zaGlmdChuZXdPYmopO1xuICAgIGlmICh0aGlzLmlzT25GaWx0ZXIpIHtcbiAgICAgIHRoaXMuZGF0YS51bnNoaWZ0KG5ld09iaik7XG4gICAgfVxuICB9XG5cbiAgYWRkKG5ld09iaikge1xuICAgIGlmICghbmV3T2JqW3RoaXMua2V5RmllbGRdIHx8IG5ld09ialt0aGlzLmtleUZpZWxkXS50b1N0cmluZygpID09PSAnJykge1xuICAgICAgdGhyb3cgYCR7dGhpcy5rZXlGaWVsZH0gY2FuJ3QgYmUgZW1wdHkgdmFsdWUuYDtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudERpc3BsYXlEYXRhID0gdGhpcy5nZXRDdXJyZW50RGlzcGxheURhdGEoKTtcbiAgICBjdXJyZW50RGlzcGxheURhdGEuZm9yRWFjaChmdW5jdGlvbihyb3cpIHtcbiAgICAgIGlmIChyb3dbdGhpcy5rZXlGaWVsZF0udG9TdHJpbmcoKSA9PT0gbmV3T2JqW3RoaXMua2V5RmllbGRdLnRvU3RyaW5nKCkpIHtcbiAgICAgICAgdGhyb3cgYCR7dGhpcy5rZXlGaWVsZH0gJHtuZXdPYmpbdGhpcy5rZXlGaWVsZF19IGFscmVhZHkgZXhpc3RzYDtcbiAgICAgIH1cbiAgICB9LCB0aGlzKTtcblxuICAgIGN1cnJlbnREaXNwbGF5RGF0YS5wdXNoKG5ld09iaik7XG4gICAgaWYgKHRoaXMuaXNPbkZpbHRlcikge1xuICAgICAgdGhpcy5kYXRhLnB1c2gobmV3T2JqKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmUocm93S2V5KSB7XG4gICAgY29uc3QgY3VycmVudERpc3BsYXlEYXRhID0gdGhpcy5nZXRDdXJyZW50RGlzcGxheURhdGEoKTtcbiAgICBjb25zdCByZXN1bHQgPSBjdXJyZW50RGlzcGxheURhdGEuZmlsdGVyKHJvdyA9PiB7XG4gICAgICByZXR1cm4gcm93S2V5LmluZGV4T2Yocm93W3RoaXMua2V5RmllbGRdKSA9PT0gLTE7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5pc09uRmlsdGVyKSB7XG4gICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuZmlsdGVyKHJvdyA9PiB7XG4gICAgICAgIHJldHVybiByb3dLZXkuaW5kZXhPZihyb3dbdGhpcy5rZXlGaWVsZF0pID09PSAtMTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSByZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YSA9IHJlc3VsdDtcbiAgICB9XG4gIH1cblxuICBmaWx0ZXIoZmlsdGVyT2JqKSB7XG4gICAgaWYgKE9iamVjdC5rZXlzKGZpbHRlck9iaikubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IG51bGw7XG4gICAgICB0aGlzLmlzT25GaWx0ZXIgPSBmYWxzZTtcbiAgICAgIHRoaXMuZmlsdGVyT2JqID0gbnVsbDtcbiAgICAgIGlmICh0aGlzLnNlYXJjaFRleHQgIT09IG51bGwpIHRoaXMuc2VhcmNoKHRoaXMuc2VhcmNoVGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyT2JqID0gZmlsdGVyT2JqO1xuICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSB0aGlzLmRhdGEuZmlsdGVyKCByb3cgPT4ge1xuICAgICAgICBsZXQgdmFsaWQgPSB0cnVlO1xuICAgICAgICBsZXQgZmlsdGVyVmFsO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBmaWx0ZXJPYmopIHtcbiAgICAgICAgICBsZXQgdGFyZ2V0VmFsID0gcm93W2tleV07XG5cbiAgICAgICAgICBzd2l0Y2ggKGZpbHRlck9ialtrZXldLnR5cGUpIHtcbiAgICAgICAgICBjYXNlIENvbnN0LkZJTFRFUl9UWVBFLk5VTUJFUjoge1xuICAgICAgICAgICAgZmlsdGVyVmFsID0gZmlsdGVyT2JqW2tleV0udmFsdWUubnVtYmVyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQ29uc3QuRklMVEVSX1RZUEUuQ1VTVE9NOiB7XG4gICAgICAgICAgICBmaWx0ZXJWYWwgPSAodHlwZW9mIGZpbHRlck9ialtrZXldLnZhbHVlID09PSAnb2JqZWN0JykgP1xuICAgICAgICAgICAgICB1bmRlZmluZWQgOlxuICAgICAgICAgICAgICAodHlwZW9mIGZpbHRlck9ialtrZXldLnZhbHVlID09PSAnc3RyaW5nJykgP1xuICAgICAgICAgICAgICAgIGZpbHRlck9ialtrZXldLnZhbHVlLnRvTG93ZXJDYXNlKCkgOlxuICAgICAgICAgICAgICAgIGZpbHRlck9ialtrZXldLnZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQ29uc3QuRklMVEVSX1RZUEUuUkVHRVg6IHtcbiAgICAgICAgICAgIGZpbHRlclZhbCA9IGZpbHRlck9ialtrZXldLnZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGZpbHRlclZhbCA9ICh0eXBlb2YgZmlsdGVyT2JqW2tleV0udmFsdWUgPT09ICdzdHJpbmcnKSA/XG4gICAgICAgICAgICAgIGZpbHRlck9ialtrZXldLnZhbHVlLnRvTG93ZXJDYXNlKCkgOlxuICAgICAgICAgICAgICBmaWx0ZXJPYmpba2V5XS52YWx1ZTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJWYWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAvLyBTdXBwb3J0IG9sZCBmaWx0ZXJcbiAgICAgICAgICAgICAgZmlsdGVyVmFsID0gZmlsdGVyT2JqW2tleV0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy5jb2xJbmZvc1trZXldKSB7XG4gICAgICAgICAgICBjb25zdCB7IGZvcm1hdCwgZmlsdGVyRm9ybWF0dGVkLCBmb3JtYXRFeHRyYURhdGEgfSA9IHRoaXMuY29sSW5mb3Nba2V5XTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJGb3JtYXR0ZWQgJiYgZm9ybWF0KSB7XG4gICAgICAgICAgICAgIHRhcmdldFZhbCA9IGZvcm1hdChyb3dba2V5XSwgcm93LCBmb3JtYXRFeHRyYURhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHN3aXRjaCAoZmlsdGVyT2JqW2tleV0udHlwZSkge1xuICAgICAgICAgIGNhc2UgQ29uc3QuRklMVEVSX1RZUEUuTlVNQkVSOiB7XG4gICAgICAgICAgICB2YWxpZCA9IHRoaXMuZmlsdGVyTnVtYmVyKHRhcmdldFZhbCwgZmlsdGVyVmFsLCBmaWx0ZXJPYmpba2V5XS52YWx1ZS5jb21wYXJhdG9yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIENvbnN0LkZJTFRFUl9UWVBFLkRBVEU6IHtcbiAgICAgICAgICAgIHZhbGlkID0gdGhpcy5maWx0ZXJEYXRlKHRhcmdldFZhbCwgZmlsdGVyVmFsKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIENvbnN0LkZJTFRFUl9UWVBFLlJFR0VYOiB7XG4gICAgICAgICAgICB2YWxpZCA9IHRoaXMuZmlsdGVyUmVnZXgodGFyZ2V0VmFsLCBmaWx0ZXJWYWwpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQ29uc3QuRklMVEVSX1RZUEUuQ1VTVE9NOiB7XG4gICAgICAgICAgICB2YWxpZCA9IHRoaXMuZmlsdGVyQ3VzdG9tKHRhcmdldFZhbCwgZmlsdGVyVmFsLCBmaWx0ZXJPYmpba2V5XS52YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgdmFsaWQgPSB0aGlzLmZpbHRlclRleHQodGFyZ2V0VmFsLCBmaWx0ZXJWYWwpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmlzT25GaWx0ZXIgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGZpbHRlck51bWJlcih0YXJnZXRWYWwsIGZpbHRlclZhbCwgY29tcGFyYXRvcikge1xuICAgIGxldCB2YWxpZCA9IHRydWU7XG4gICAgc3dpdGNoIChjb21wYXJhdG9yKSB7XG4gICAgY2FzZSAnPSc6IHtcbiAgICAgIGlmICh0YXJnZXRWYWwgIT0gZmlsdGVyVmFsKSB7XG4gICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAnPic6IHtcbiAgICAgIGlmICh0YXJnZXRWYWwgPD0gZmlsdGVyVmFsKSB7XG4gICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAnPj0nOiB7XG4gICAgICBpZiAodGFyZ2V0VmFsIDwgZmlsdGVyVmFsKSB7XG4gICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAnPCc6IHtcbiAgICAgIGlmICh0YXJnZXRWYWwgPj0gZmlsdGVyVmFsKSB7XG4gICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAnPD0nOiB7XG4gICAgICBpZiAodGFyZ2V0VmFsID4gZmlsdGVyVmFsKSB7XG4gICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAnIT0nOiB7XG4gICAgICBpZiAodGFyZ2V0VmFsID09IGZpbHRlclZhbCkge1xuICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ051bWJlciBjb21wYXJhdG9yIHByb3ZpZGVkIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkO1xuICB9XG5cbiAgZmlsdGVyRGF0ZSh0YXJnZXRWYWwsIGZpbHRlclZhbCkge1xuICAgIHJldHVybiAodGFyZ2V0VmFsLmdldERhdGUoKSA9PT0gZmlsdGVyVmFsLmdldERhdGUoKSAmJlxuICAgICAgICB0YXJnZXRWYWwuZ2V0TW9udGgoKSA9PT0gZmlsdGVyVmFsLmdldE1vbnRoKCkgJiZcbiAgICAgICAgdGFyZ2V0VmFsLmdldEZ1bGxZZWFyKCkgPT09IGZpbHRlclZhbC5nZXRGdWxsWWVhcigpKTtcbiAgfVxuXG4gIGZpbHRlclJlZ2V4KHRhcmdldFZhbCwgZmlsdGVyVmFsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBuZXcgUmVnRXhwKGZpbHRlclZhbCwgJ2knKS50ZXN0KHRhcmdldFZhbCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24nKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGZpbHRlckN1c3RvbSh0YXJnZXRWYWwsIGZpbHRlclZhbCwgY2FsbGJhY2tJbmZvKSB7XG4gICAgaWYgKGNhbGxiYWNrSW5mbyAhPT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2tJbmZvID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrSW5mby5jYWxsYmFjayh0YXJnZXRWYWwsIGNhbGxiYWNrSW5mby5jYWxsYmFja1BhcmFtZXRlcnMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmZpbHRlclRleHQodGFyZ2V0VmFsLCBmaWx0ZXJWYWwpO1xuICB9XG5cbiAgZmlsdGVyVGV4dCh0YXJnZXRWYWwsIGZpbHRlclZhbCkge1xuICAgIGlmICh0YXJnZXRWYWwudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZmlsdGVyVmFsKSA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiBHZW5lcmFsIHNlYXJjaCBmdW5jdGlvblxuICAgKiBJdCB3aWxsIHNlYXJjaCBmb3IgdGhlIHRleHQgaWYgdGhlIGlucHV0IGluY2x1ZGVzIHRoYXQgdGV4dDtcbiAgICovXG4gIHNlYXJjaChzZWFyY2hUZXh0KSB7XG4gICAgaWYgKHNlYXJjaFRleHQudHJpbSgpID09PSAnJykge1xuICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSBudWxsO1xuICAgICAgdGhpcy5pc09uRmlsdGVyID0gZmFsc2U7XG4gICAgICB0aGlzLnNlYXJjaFRleHQgPSBudWxsO1xuICAgICAgaWYgKHRoaXMuZmlsdGVyT2JqICE9PSBudWxsKSB0aGlzLmZpbHRlcih0aGlzLmZpbHRlck9iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHNlYXJjaFRleHQ7XG4gICAgICBsZXQgc2VhcmNoVGV4dEFycmF5ID0gW107XG5cbiAgICAgIGlmICh0aGlzLm11bHRpQ29sdW1uU2VhcmNoKSB7XG4gICAgICAgIHNlYXJjaFRleHRBcnJheSA9IHNlYXJjaFRleHQuc3BsaXQoJyAnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlYXJjaFRleHRBcnJheS5wdXNoKHNlYXJjaFRleHQpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzb3VyY2UgPSB0aGlzLmlzT25GaWx0ZXIgPyB0aGlzLmZpbHRlcmVkRGF0YSA6IHRoaXMuZGF0YTtcblxuICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSBzb3VyY2UuZmlsdGVyKCByb3cgPT4ge1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocm93KTtcbiAgICAgICAgbGV0IHZhbGlkID0gZmFsc2U7XG4gICAgICAgIC8vIGZvciBsb29wcyBhcmUgdWdseSwgYnV0IHBlcmZvcm1hbmNlIG1hdHRlcnMgaGVyZS5cbiAgICAgICAgLy8gQW5kIHlvdSBjYW50IGJyZWFrIGZyb20gYSBmb3JFYWNoLlxuICAgICAgICAvLyBodHRwOi8vanNwZXJmLmNvbS9mb3ItdnMtZm9yZWFjaC82NlxuICAgICAgICBmb3IgKGxldCBpID0gMCwga2V5c0xlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwga2V5c0xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICBpZiAodGhpcy5jb2xJbmZvc1trZXldICYmIHJvd1trZXldKSB7XG4gICAgICAgICAgICBjb25zdCB7IGZvcm1hdCwgZmlsdGVyRm9ybWF0dGVkLCBmb3JtYXRFeHRyYURhdGEsIHNlYXJjaGFibGUgfSA9IHRoaXMuY29sSW5mb3Nba2V5XTtcbiAgICAgICAgICAgIGxldCB0YXJnZXRWYWwgPSByb3dba2V5XTtcbiAgICAgICAgICAgIGlmIChzZWFyY2hhYmxlKSB7XG4gICAgICAgICAgICAgIGlmIChmaWx0ZXJGb3JtYXR0ZWQgJiYgZm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0VmFsID0gZm9ybWF0KHRhcmdldFZhbCwgcm93LCBmb3JtYXRFeHRyYURhdGEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGZvciAobGV0IGogPSAwLCB0ZXh0TGVuZ3RoID0gc2VhcmNoVGV4dEFycmF5Lmxlbmd0aDsgaiA8IHRleHRMZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlclZhbCA9IHNlYXJjaFRleHRBcnJheVtqXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXRWYWwudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZmlsdGVyVmFsKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgIHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsaWQ7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuaXNPbkZpbHRlciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0RGF0YUlnbm9yaW5nUGFnaW5hdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDdXJyZW50RGlzcGxheURhdGEoKTtcbiAgfVxuXG4gIGdldCgpIHtcbiAgICBjb25zdCBfZGF0YSA9IHRoaXMuZ2V0Q3VycmVudERpc3BsYXlEYXRhKCk7XG5cbiAgICBpZiAoX2RhdGEubGVuZ3RoID09PSAwKSByZXR1cm4gX2RhdGE7XG5cbiAgICBpZiAodGhpcy5yZW1vdGUgfHwgIXRoaXMuZW5hYmxlUGFnaW5hdGlvbikge1xuICAgICAgcmV0dXJuIF9kYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSB0aGlzLnBhZ2VPYmouc3RhcnQ7IGkgPD0gdGhpcy5wYWdlT2JqLmVuZDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKF9kYXRhW2ldKTtcbiAgICAgICAgaWYgKGkgKyAxID09PSBfZGF0YS5sZW5ndGgpIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cblxuICBnZXRLZXlGaWVsZCgpIHtcbiAgICByZXR1cm4gdGhpcy5rZXlGaWVsZDtcbiAgfVxuXG4gIGdldERhdGFOdW0oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q3VycmVudERpc3BsYXlEYXRhKCkubGVuZ3RoO1xuICB9XG5cbiAgaXNDaGFuZ2VkUGFnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlT2JqLnN0YXJ0ICYmIHRoaXMucGFnZU9iai5lbmQgPyB0cnVlIDogZmFsc2U7XG4gIH1cblxuICBnZXRBbGxSb3drZXkoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5tYXAocm93ID0+IHtcbiAgICAgIHJldHVybiByb3dbdGhpcy5rZXlGaWVsZF07XG4gICAgfSk7XG4gIH1cbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL3N0b3JlL1RhYmxlRGF0YVN0b3JlLmpzXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ=="); -},function(module,exports){eval("// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfunction EventEmitter() {\n this._events = this._events || {};\n this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n if (!isNumber(n) || n < 0 || isNaN(n))\n throw TypeError('n must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n var er, handler, len, args, i, listeners;\n\n if (!this._events)\n this._events = {};\n\n // If there is no 'error' event listener then throw.\n if (type === 'error') {\n if (!this._events.error ||\n (isObject(this._events.error) && !this._events.error.length)) {\n er = arguments[1];\n if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n }\n throw TypeError('Uncaught, unspecified \"error\" event.');\n }\n }\n\n handler = this._events[type];\n\n if (isUndefined(handler))\n return false;\n\n if (isFunction(handler)) {\n switch (arguments.length) {\n // fast cases\n case 1:\n handler.call(this);\n break;\n case 2:\n handler.call(this, arguments[1]);\n break;\n case 3:\n handler.call(this, arguments[1], arguments[2]);\n break;\n // slower\n default:\n args = Array.prototype.slice.call(arguments, 1);\n handler.apply(this, args);\n }\n } else if (isObject(handler)) {\n args = Array.prototype.slice.call(arguments, 1);\n listeners = handler.slice();\n len = listeners.length;\n for (i = 0; i < len; i++)\n listeners[i].apply(this, args);\n }\n\n return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n var m;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events)\n this._events = {};\n\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (this._events.newListener)\n this.emit('newListener', type,\n isFunction(listener.listener) ?\n listener.listener : listener);\n\n if (!this._events[type])\n // Optimize the case of one listener. Don't need the extra array object.\n this._events[type] = listener;\n else if (isObject(this._events[type]))\n // If we've already got an array, just append.\n this._events[type].push(listener);\n else\n // Adding the second element, need to change to array.\n this._events[type] = [this._events[type], listener];\n\n // Check for listener leak\n if (isObject(this._events[type]) && !this._events[type].warned) {\n if (!isUndefined(this._maxListeners)) {\n m = this._maxListeners;\n } else {\n m = EventEmitter.defaultMaxListeners;\n }\n\n if (m && m > 0 && this._events[type].length > m) {\n this._events[type].warned = true;\n console.error('(node) warning: possible EventEmitter memory ' +\n 'leak detected. %d listeners added. ' +\n 'Use emitter.setMaxListeners() to increase limit.',\n this._events[type].length);\n if (typeof console.trace === 'function') {\n // not supported in IE 10\n console.trace();\n }\n }\n }\n\n return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n var fired = false;\n\n function g() {\n this.removeListener(type, g);\n\n if (!fired) {\n fired = true;\n listener.apply(this, arguments);\n }\n }\n\n g.listener = listener;\n this.on(type, g);\n\n return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n var list, position, length, i;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events || !this._events[type])\n return this;\n\n list = this._events[type];\n length = list.length;\n position = -1;\n\n if (list === listener ||\n (isFunction(list.listener) && list.listener === listener)) {\n delete this._events[type];\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n\n } else if (isObject(list)) {\n for (i = length; i-- > 0;) {\n if (list[i] === listener ||\n (list[i].listener && list[i].listener === listener)) {\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (list.length === 1) {\n list.length = 0;\n delete this._events[type];\n } else {\n list.splice(position, 1);\n }\n\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n }\n\n return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n var key, listeners;\n\n if (!this._events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!this._events.removeListener) {\n if (arguments.length === 0)\n this._events = {};\n else if (this._events[type])\n delete this._events[type];\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n for (key in this._events) {\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = {};\n return this;\n }\n\n listeners = this._events[type];\n\n if (isFunction(listeners)) {\n this.removeListener(type, listeners);\n } else if (listeners) {\n // LIFO order\n while (listeners.length)\n this.removeListener(type, listeners[listeners.length - 1]);\n }\n delete this._events[type];\n\n return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n var ret;\n if (!this._events || !this._events[type])\n ret = [];\n else if (isFunction(this._events[type]))\n ret = [this._events[type]];\n else\n ret = this._events[type].slice();\n return ret;\n};\n\nEventEmitter.prototype.listenerCount = function(type) {\n if (this._events) {\n var evlistener = this._events[type];\n\n if (isFunction(evlistener))\n return 1;\n else if (evlistener)\n return evlistener.length;\n }\n return 0;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n return emitter.listenerCount(type);\n};\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL34vbm9kZS1saWJzLWJyb3dzZXIvfi9ldmVudHMvZXZlbnRzLmpzPzQ2YjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEdBQUc7QUFDSCxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsImZpbGUiOiIzNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gIHRoaXMuX2V2ZW50cyA9IHRoaXMuX2V2ZW50cyB8fCB7fTtcbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gdGhpcy5fbWF4TGlzdGVuZXJzIHx8IHVuZGVmaW5lZDtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLnhcbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDtcblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG4vLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxuRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcblxuLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMgZnVuY3Rpb24gYWxsb3dzXG4vLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9yIHVubGltaXRlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24obikge1xuICBpZiAoIWlzTnVtYmVyKG4pIHx8IG4gPCAwIHx8IGlzTmFOKG4pKVxuICAgIHRocm93IFR5cGVFcnJvcignbiBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7XG4gIHRoaXMuX21heExpc3RlbmVycyA9IG47XG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24odHlwZSkge1xuICB2YXIgZXIsIGhhbmRsZXIsIGxlbiwgYXJncywgaSwgbGlzdGVuZXJzO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKVxuICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuXG4gIC8vIElmIHRoZXJlIGlzIG5vICdlcnJvcicgZXZlbnQgbGlzdGVuZXIgdGhlbiB0aHJvdy5cbiAgaWYgKHR5cGUgPT09ICdlcnJvcicpIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50cy5lcnJvciB8fFxuICAgICAgICAoaXNPYmplY3QodGhpcy5fZXZlbnRzLmVycm9yKSAmJiAhdGhpcy5fZXZlbnRzLmVycm9yLmxlbmd0aCkpIHtcbiAgICAgIGVyID0gYXJndW1lbnRzWzFdO1xuICAgICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gICAgICB9XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ1VuY2F1Z2h0LCB1bnNwZWNpZmllZCBcImVycm9yXCIgZXZlbnQuJyk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlciA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcblxuICBpZiAoaXNVbmRlZmluZWQoaGFuZGxlcikpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChpc0Z1bmN0aW9uKGhhbmRsZXIpKSB7XG4gICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAvLyBmYXN0IGNhc2VzXG4gICAgICBjYXNlIDE6XG4gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzLCBhcmd1bWVudHNbMV0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgaGFuZGxlci5jYWxsKHRoaXMsIGFyZ3VtZW50c1sxXSwgYXJndW1lbnRzWzJdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICAvLyBzbG93ZXJcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICBoYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc09iamVjdChoYW5kbGVyKSkge1xuICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgIGxpc3RlbmVycyA9IGhhbmRsZXIuc2xpY2UoKTtcbiAgICBsZW4gPSBsaXN0ZW5lcnMubGVuZ3RoO1xuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICAgIGxpc3RlbmVyc1tpXS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBtO1xuXG4gIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpXG4gICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblxuICBpZiAoIXRoaXMuX2V2ZW50cylcbiAgICB0aGlzLl9ldmVudHMgPSB7fTtcblxuICAvLyBUbyBhdm9pZCByZWN1cnNpb24gaW4gdGhlIGNhc2UgdGhhdCB0eXBlID09PSBcIm5ld0xpc3RlbmVyXCIhIEJlZm9yZVxuICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3QgZW1pdCBcIm5ld0xpc3RlbmVyXCIuXG4gIGlmICh0aGlzLl9ldmVudHMubmV3TGlzdGVuZXIpXG4gICAgdGhpcy5lbWl0KCduZXdMaXN0ZW5lcicsIHR5cGUsXG4gICAgICAgICAgICAgIGlzRnVuY3Rpb24obGlzdGVuZXIubGlzdGVuZXIpID9cbiAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgOiBsaXN0ZW5lcik7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgLy8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBEb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXG4gICAgdGhpcy5fZXZlbnRzW3R5cGVdID0gbGlzdGVuZXI7XG4gIGVsc2UgaWYgKGlzT2JqZWN0KHRoaXMuX2V2ZW50c1t0eXBlXSkpXG4gICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gYXJyYXksIGp1c3QgYXBwZW5kLlxuICAgIHRoaXMuX2V2ZW50c1t0eXBlXS5wdXNoKGxpc3RlbmVyKTtcbiAgZWxzZVxuICAgIC8vIEFkZGluZyB0aGUgc2Vjb25kIGVsZW1lbnQsIG5lZWQgdG8gY2hhbmdlIHRvIGFycmF5LlxuICAgIHRoaXMuX2V2ZW50c1t0eXBlXSA9IFt0aGlzLl9ldmVudHNbdHlwZV0sIGxpc3RlbmVyXTtcblxuICAvLyBDaGVjayBmb3IgbGlzdGVuZXIgbGVha1xuICBpZiAoaXNPYmplY3QodGhpcy5fZXZlbnRzW3R5cGVdKSAmJiAhdGhpcy5fZXZlbnRzW3R5cGVdLndhcm5lZCkge1xuICAgIGlmICghaXNVbmRlZmluZWQodGhpcy5fbWF4TGlzdGVuZXJzKSkge1xuICAgICAgbSA9IHRoaXMuX21heExpc3RlbmVycztcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IEV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzO1xuICAgIH1cblxuICAgIGlmIChtICYmIG0gPiAwICYmIHRoaXMuX2V2ZW50c1t0eXBlXS5sZW5ndGggPiBtKSB7XG4gICAgICB0aGlzLl9ldmVudHNbdHlwZV0ud2FybmVkID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJyhub2RlKSB3YXJuaW5nOiBwb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5ICcgK1xuICAgICAgICAgICAgICAgICAgICAnbGVhayBkZXRlY3RlZC4gJWQgbGlzdGVuZXJzIGFkZGVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ1VzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0LicsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50c1t0eXBlXS5sZW5ndGgpO1xuICAgICAgaWYgKHR5cGVvZiBjb25zb2xlLnRyYWNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIG5vdCBzdXBwb3J0ZWQgaW4gSUUgMTBcbiAgICAgICAgY29uc29sZS50cmFjZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpXG4gICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblxuICB2YXIgZmlyZWQgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBnKCkge1xuICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgZyk7XG5cbiAgICBpZiAoIWZpcmVkKSB7XG4gICAgICBmaXJlZCA9IHRydWU7XG4gICAgICBsaXN0ZW5lci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfVxuXG4gIGcubGlzdGVuZXIgPSBsaXN0ZW5lcjtcbiAgdGhpcy5vbih0eXBlLCBnKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIGVtaXRzIGEgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZmYgdGhlIGxpc3RlbmVyIHdhcyByZW1vdmVkXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIpIHtcbiAgdmFyIGxpc3QsIHBvc2l0aW9uLCBsZW5ndGgsIGk7XG5cbiAgaWYgKCFpc0Z1bmN0aW9uKGxpc3RlbmVyKSlcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ2xpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgbGlzdCA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcbiAgbGVuZ3RoID0gbGlzdC5sZW5ndGg7XG4gIHBvc2l0aW9uID0gLTE7XG5cbiAgaWYgKGxpc3QgPT09IGxpc3RlbmVyIHx8XG4gICAgICAoaXNGdW5jdGlvbihsaXN0Lmxpc3RlbmVyKSAmJiBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikpIHtcbiAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuICAgIGlmICh0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdGVuZXIpO1xuXG4gIH0gZWxzZSBpZiAoaXNPYmplY3QobGlzdCkpIHtcbiAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSA+IDA7KSB7XG4gICAgICBpZiAobGlzdFtpXSA9PT0gbGlzdGVuZXIgfHxcbiAgICAgICAgICAobGlzdFtpXS5saXN0ZW5lciAmJiBsaXN0W2ldLmxpc3RlbmVyID09PSBsaXN0ZW5lcikpIHtcbiAgICAgICAgcG9zaXRpb24gPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocG9zaXRpb24gPCAwKVxuICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICAgIGxpc3QubGVuZ3RoID0gMDtcbiAgICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpc3Quc3BsaWNlKHBvc2l0aW9uLCAxKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3RlbmVyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbih0eXBlKSB7XG4gIHZhciBrZXksIGxpc3RlbmVycztcblxuICBpZiAoIXRoaXMuX2V2ZW50cylcbiAgICByZXR1cm4gdGhpcztcblxuICAvLyBub3QgbGlzdGVuaW5nIGZvciByZW1vdmVMaXN0ZW5lciwgbm8gbmVlZCB0byBlbWl0XG4gIGlmICghdGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLl9ldmVudHMgPSB7fTtcbiAgICBlbHNlIGlmICh0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gZW1pdCByZW1vdmVMaXN0ZW5lciBmb3IgYWxsIGxpc3RlbmVycyBvbiBhbGwgZXZlbnRzXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgZm9yIChrZXkgaW4gdGhpcy5fZXZlbnRzKSB7XG4gICAgICBpZiAoa2V5ID09PSAncmVtb3ZlTGlzdGVuZXInKSBjb250aW51ZTtcbiAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7XG4gICAgfVxuICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdyZW1vdmVMaXN0ZW5lcicpO1xuICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW3R5cGVdO1xuXG4gIGlmIChpc0Z1bmN0aW9uKGxpc3RlbmVycykpIHtcbiAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7XG4gIH0gZWxzZSBpZiAobGlzdGVuZXJzKSB7XG4gICAgLy8gTElGTyBvcmRlclxuICAgIHdoaWxlIChsaXN0ZW5lcnMubGVuZ3RoKVxuICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbbGlzdGVuZXJzLmxlbmd0aCAtIDFdKTtcbiAgfVxuICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbih0eXBlKSB7XG4gIHZhciByZXQ7XG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgcmV0ID0gW107XG4gIGVsc2UgaWYgKGlzRnVuY3Rpb24odGhpcy5fZXZlbnRzW3R5cGVdKSlcbiAgICByZXQgPSBbdGhpcy5fZXZlbnRzW3R5cGVdXTtcbiAgZWxzZVxuICAgIHJldCA9IHRoaXMuX2V2ZW50c1t0eXBlXS5zbGljZSgpO1xuICByZXR1cm4gcmV0O1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24odHlwZSkge1xuICBpZiAodGhpcy5fZXZlbnRzKSB7XG4gICAgdmFyIGV2bGlzdGVuZXIgPSB0aGlzLl9ldmVudHNbdHlwZV07XG5cbiAgICBpZiAoaXNGdW5jdGlvbihldmxpc3RlbmVyKSlcbiAgICAgIHJldHVybiAxO1xuICAgIGVsc2UgaWYgKGV2bGlzdGVuZXIpXG4gICAgICByZXR1cm4gZXZsaXN0ZW5lci5sZW5ndGg7XG4gIH1cbiAgcmV0dXJuIDA7XG59O1xuXG5FdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgcmV0dXJuIGVtaXR0ZXIubGlzdGVuZXJDb3VudCh0eXBlKTtcbn07XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBpc051bWJlcihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IHZvaWQgMDtcbn1cblxuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogKHdlYnBhY2spL34vbm9kZS1saWJzLWJyb3dzZXIvfi9ldmVudHMvZXZlbnRzLmpzXG4gKiogbW9kdWxlIGlkID0gMzRcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _Const = __webpack_require__(3);\n\nvar _Const2 = _interopRequireDefault(_Const);\n\nvar _classnames = __webpack_require__(6);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nexports['default'] = {\n renderReactSortCaret: function renderReactSortCaret(order) {\n var orderClass = (0, _classnames2['default'])('order', {\n 'dropup': order === _Const2['default'].SORT_ASC\n });\n return _react2['default'].createElement(\n 'span',\n { className: orderClass },\n _react2['default'].createElement('span', { className: 'caret', style: { margin: '0px 5px' } })\n );\n },\n\n getScrollBarWidth: function getScrollBarWidth() {\n var inner = document.createElement('p');\n inner.style.width = '100%';\n inner.style.height = '200px';\n\n var outer = document.createElement('div');\n outer.style.position = 'absolute';\n outer.style.top = '0px';\n outer.style.left = '0px';\n outer.style.visibility = 'hidden';\n outer.style.width = '200px';\n outer.style.height = '150px';\n outer.style.overflow = 'hidden';\n outer.appendChild(inner);\n\n document.body.appendChild(outer);\n var w1 = inner.offsetWidth;\n outer.style.overflow = 'scroll';\n var w2 = inner.offsetWidth;\n if (w1 === w2) w2 = outer.clientWidth;\n\n document.body.removeChild(outer);\n\n return w1 - w2;\n },\n\n canUseDOM: function canUseDOM() {\n return typeof window !== 'undefined' && typeof window.document !== 'undefined';\n }\n};\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvdXRpbC5qcz9hZDAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O2lDQUFrQixDQUFPOzs7O2lDQUNQLENBQVM7Ozs7c0NBQ04sQ0FBWTs7OztxQkFFbEI7QUFDYixzQkFBb0IsZ0NBQUMsS0FBSyxFQUFFO0FBQzFCLFFBQU0sVUFBVSxHQUFHLDZCQUFTLE9BQU8sRUFBRTtBQUNuQyxjQUFRLEVBQUUsS0FBSyxLQUFLLG1CQUFNLFFBQVE7S0FDbkMsQ0FBQyxDQUFDO0FBQ0gsV0FDRTs7UUFBTSxTQUFTLEVBQUcsVUFBWTtNQUM1QiwyQ0FBTSxTQUFTLEVBQUMsT0FBTyxFQUFDLEtBQUssRUFBRyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUksR0FBUTtLQUMxRCxDQUNQO0dBQ0g7O0FBRUQsbUJBQWlCLCtCQUFHO0FBQ2xCLFFBQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUMsU0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQzNCLFNBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQzs7QUFFN0IsUUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QyxTQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7QUFDbEMsU0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQ3hCLFNBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN6QixTQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7QUFDbEMsU0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDO0FBQzVCLFNBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztBQUM3QixTQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDaEMsU0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7QUFFekIsWUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakMsUUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztBQUM3QixTQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDaEMsUUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztBQUMzQixRQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7O0FBRXRDLFlBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDOztBQUVqQyxXQUFRLEVBQUUsR0FBRyxFQUFFLENBQUU7R0FDbEI7O0FBRUQsV0FBUyx1QkFBRztBQUNWLFdBQU8sT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLE9BQU8sTUFBTSxDQUFDLFFBQVEsS0FBSyxXQUFXLENBQUM7R0FDaEY7Q0FDRiIsImZpbGUiOiIzNS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi9Db25zdCc7XG5pbXBvcnQgY2xhc3NTZXQgZnJvbSAnY2xhc3NuYW1lcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcmVuZGVyUmVhY3RTb3J0Q2FyZXQob3JkZXIpIHtcbiAgICBjb25zdCBvcmRlckNsYXNzID0gY2xhc3NTZXQoJ29yZGVyJywge1xuICAgICAgJ2Ryb3B1cCc6IG9yZGVyID09PSBDb25zdC5TT1JUX0FTQ1xuICAgIH0pO1xuICAgIHJldHVybiAoXG4gICAgICA8c3BhbiBjbGFzc05hbWU9eyBvcmRlckNsYXNzIH0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT0nY2FyZXQnIHN0eWxlPXsgeyBtYXJnaW46ICcwcHggNXB4JyB9IH0+PC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgICk7XG4gIH0sXG5cbiAgZ2V0U2Nyb2xsQmFyV2lkdGgoKSB7XG4gICAgY29uc3QgaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7XG4gICAgaW5uZXIuc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgaW5uZXIuc3R5bGUuaGVpZ2h0ID0gJzIwMHB4JztcblxuICAgIGNvbnN0IG91dGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgb3V0ZXIuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIG91dGVyLnN0eWxlLnRvcCA9ICcwcHgnO1xuICAgIG91dGVyLnN0eWxlLmxlZnQgPSAnMHB4JztcbiAgICBvdXRlci5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgb3V0ZXIuc3R5bGUud2lkdGggPSAnMjAwcHgnO1xuICAgIG91dGVyLnN0eWxlLmhlaWdodCA9ICcxNTBweCc7XG4gICAgb3V0ZXIuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICBvdXRlci5hcHBlbmRDaGlsZChpbm5lcik7XG5cbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG91dGVyKTtcbiAgICBjb25zdCB3MSA9IGlubmVyLm9mZnNldFdpZHRoO1xuICAgIG91dGVyLnN0eWxlLm92ZXJmbG93ID0gJ3Njcm9sbCc7XG4gICAgbGV0IHcyID0gaW5uZXIub2Zmc2V0V2lkdGg7XG4gICAgaWYgKHcxID09PSB3MikgdzIgPSBvdXRlci5jbGllbnRXaWR0aDtcblxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQob3V0ZXIpO1xuXG4gICAgcmV0dXJuICh3MSAtIHcyKTtcbiAgfSxcblxuICBjYW5Vc2VET00oKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xuICB9XG59O1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvdXRpbC5qc1xuICoqLyJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports,__webpack_require__){eval("/* eslint block-scoped-var: 0 */\n/* eslint vars-on-top: 0 */\n/* eslint no-var: 0 */\n/* eslint no-unused-vars: 0 */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nif (typeof window !== 'undefined') {\n var filesaver = __webpack_require__(37);\n var saveAs = filesaver.saveAs;\n}\n\nfunction toString(data, keys) {\n var dataString = '';\n if (data.length === 0) return dataString;\n\n dataString += keys.join(',') + '\\n';\n\n data.map(function (row) {\n keys.map(function (col, i) {\n var cell = typeof row[col] !== 'undefined' ? '\"' + row[col] + '\"' : '';\n dataString += cell;\n if (i + 1 < keys.length) dataString += ',';\n });\n\n dataString += '\\n';\n });\n\n return dataString;\n}\n\nvar exportCSV = function exportCSV(data, keys, filename) {\n var dataString = toString(data, keys);\n if (typeof window !== 'undefined') {\n saveAs(new Blob([dataString], { type: 'text/plain;charset=utf-8' }), filename || 'spreadsheet.csv');\n }\n};\n\nexports['default'] = exportCSV;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY3N2X2V4cG9ydF91dGlsLmpzPzhlY2MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBSUEsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUU7QUFDakMsTUFBTSxTQUFTLEdBQUcsbUJBQU8sQ0FBQyxFQUFhLENBQUMsQ0FBQztBQUN6QyxNQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO0NBQy9COztBQUVELFNBQVMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7QUFDNUIsTUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLE1BQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsT0FBTyxVQUFVLENBQUM7O0FBRXpDLFlBQVUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQzs7QUFFcEMsTUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFTLEdBQUcsRUFBRTtBQUNyQixRQUFJLENBQUMsR0FBRyxDQUFDLFVBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUN4QixVQUFNLElBQUksR0FBRyxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxXQUFXLEdBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUksRUFBRSxDQUFDO0FBQzNFLGdCQUFVLElBQUksSUFBSSxDQUFDO0FBQ25CLFVBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsSUFBSSxHQUFHLENBQUM7S0FDNUMsQ0FBQyxDQUFDOztBQUVILGNBQVUsSUFBSSxJQUFJLENBQUM7R0FDcEIsQ0FBQyxDQUFDOztBQUVILFNBQU8sVUFBVSxDQUFDO0NBQ25COztBQUVELElBQU0sU0FBUyxHQUFHLFNBQVosU0FBUyxDQUFZLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0FBQy9DLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEMsTUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUU7QUFDakMsVUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUUsVUFBVSxDQUFFLEVBQzFCLEVBQUUsSUFBSSxFQUFFLDBCQUEwQixFQUFFLENBQUMsRUFDckMsUUFBUSxJQUFJLGlCQUFpQixDQUFDLENBQUM7R0FDcEM7Q0FDRixDQUFDOztxQkFFYSxTQUFTIiwiZmlsZSI6IjM2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50IGJsb2NrLXNjb3BlZC12YXI6IDAgKi9cbi8qIGVzbGludCB2YXJzLW9uLXRvcDogMCAqL1xuLyogZXNsaW50IG5vLXZhcjogMCAqL1xuLyogZXNsaW50IG5vLXVudXNlZC12YXJzOiAwICovXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgY29uc3QgZmlsZXNhdmVyID0gcmVxdWlyZSgnLi9maWxlc2F2ZXInKTtcbiAgdmFyIHNhdmVBcyA9IGZpbGVzYXZlci5zYXZlQXM7XG59XG5cbmZ1bmN0aW9uIHRvU3RyaW5nKGRhdGEsIGtleXMpIHtcbiAgbGV0IGRhdGFTdHJpbmcgPSAnJztcbiAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSByZXR1cm4gZGF0YVN0cmluZztcblxuICBkYXRhU3RyaW5nICs9IGtleXMuam9pbignLCcpICsgJ1xcbic7XG5cbiAgZGF0YS5tYXAoZnVuY3Rpb24ocm93KSB7XG4gICAga2V5cy5tYXAoZnVuY3Rpb24oY29sLCBpKSB7XG4gICAgICBjb25zdCBjZWxsID0gdHlwZW9mIHJvd1tjb2xdICE9PSAndW5kZWZpbmVkJyA/ICgnXCInICsgcm93W2NvbF0gKyAnXCInKSA6ICcnO1xuICAgICAgZGF0YVN0cmluZyArPSBjZWxsO1xuICAgICAgaWYgKGkgKyAxIDwga2V5cy5sZW5ndGgpIGRhdGFTdHJpbmcgKz0gJywnO1xuICAgIH0pO1xuXG4gICAgZGF0YVN0cmluZyArPSAnXFxuJztcbiAgfSk7XG5cbiAgcmV0dXJuIGRhdGFTdHJpbmc7XG59XG5cbmNvbnN0IGV4cG9ydENTViA9IGZ1bmN0aW9uKGRhdGEsIGtleXMsIGZpbGVuYW1lKSB7XG4gIGNvbnN0IGRhdGFTdHJpbmcgPSB0b1N0cmluZyhkYXRhLCBrZXlzKTtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgc2F2ZUFzKG5ldyBCbG9iKFsgZGF0YVN0cmluZyBdLFxuICAgICAgICB7IHR5cGU6ICd0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgnIH0pLFxuICAgICAgICBmaWxlbmFtZSB8fCAnc3ByZWFkc2hlZXQuY3N2Jyk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGV4cG9ydENTVjtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2Nzdl9leHBvcnRfdXRpbC5qc1xuICoqLyJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports,__webpack_require__){eval('var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* FileSaver.js\n * A saveAs() FileSaver implementation.\n * 1.1.20151003\n *\n * By Eli Grey, http://eligrey.com\n * License: MIT\n * See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md\n */\n\n/*global self */\n/*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */\n\n/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */\n\n"use strict";\n\nvar saveAs = saveAs || (function (view) {\n "use strict";\n // IE <10 is explicitly unsupported\n if (typeof navigator !== "undefined" && /MSIE [1-9]\\./.test(navigator.userAgent)) {\n return;\n }\n var doc = view.document,\n \n // only get URL when necessary in case Blob.js hasn\'t overridden it yet\n get_URL = function get_URL() {\n return view.URL || view.webkitURL || view;\n },\n save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a"),\n can_use_save_link = ("download" in save_link),\n click = function click(node) {\n var event = new MouseEvent("click");\n node.dispatchEvent(event);\n },\n is_safari = /Version\\/[\\d\\.]+.*Safari/.test(navigator.userAgent),\n webkit_req_fs = view.webkitRequestFileSystem,\n req_fs = view.requestFileSystem || webkit_req_fs || view.mozRequestFileSystem,\n throw_outside = function throw_outside(ex) {\n (view.setImmediate || view.setTimeout)(function () {\n throw ex;\n }, 0);\n },\n force_saveable_type = "application/octet-stream",\n fs_min_size = 0,\n \n // See https://code.google.com/p/chromium/issues/detail?id=375297#c7 and\n // https://github.com/eligrey/FileSaver.js/commit/485930a#commitcomment-8768047\n // for the reasoning behind the timeout and revocation flow\n arbitrary_revoke_timeout = 500,\n // in ms\n revoke = function revoke(file) {\n var revoker = function revoker() {\n if (typeof file === "string") {\n // file is an object URL\n get_URL().revokeObjectURL(file);\n } else {\n // file is a File\n file.remove();\n }\n };\n if (view.chrome) {\n revoker();\n } else {\n setTimeout(revoker, arbitrary_revoke_timeout);\n }\n },\n dispatch = function dispatch(filesaver, event_types, event) {\n event_types = [].concat(event_types);\n var i = event_types.length;\n while (i--) {\n var listener = filesaver["on" + event_types[i]];\n if (typeof listener === "function") {\n try {\n listener.call(filesaver, event || filesaver);\n } catch (ex) {\n throw_outside(ex);\n }\n }\n }\n },\n auto_bom = function auto_bom(blob) {\n // prepend BOM for UTF-8 XML and text/* types (including HTML)\n if (/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(blob.type)) {\n return new Blob(["\ufeff", blob], { type: blob.type });\n }\n return blob;\n },\n FileSaver = function FileSaver(blob, name, no_auto_bom) {\n if (!no_auto_bom) {\n blob = auto_bom(blob);\n }\n // First try a.download, then web filesystem, then object URLs\n var filesaver = this,\n type = blob.type,\n blob_changed = false,\n object_url,\n target_view,\n dispatch_all = function dispatch_all() {\n dispatch(filesaver, "writestart progress write writeend".split(" "));\n },\n \n // on any filesys errors revert to saving with object URLs\n fs_error = function fs_error() {\n if (target_view && is_safari && typeof FileReader !== "undefined") {\n // Safari doesn\'t allow downloading of blob urls\n var reader = new FileReader();\n reader.onloadend = function () {\n var base64Data = reader.result;\n target_view.location.href = "data:attachment/file" + base64Data.slice(base64Data.search(/[,;]/));\n filesaver.readyState = filesaver.DONE;\n dispatch_all();\n };\n reader.readAsDataURL(blob);\n filesaver.readyState = filesaver.INIT;\n return;\n }\n // don\'t create more object URLs than needed\n if (blob_changed || !object_url) {\n object_url = get_URL().createObjectURL(blob);\n }\n if (target_view) {\n target_view.location.href = object_url;\n } else {\n var new_tab = view.open(object_url, "_blank");\n if (new_tab == undefined && is_safari) {\n //Apple do not allow window.open, see http://bit.ly/1kZffRI\n view.location.href = object_url;\n }\n }\n filesaver.readyState = filesaver.DONE;\n dispatch_all();\n revoke(object_url);\n },\n abortable = function abortable(func) {\n return function () {\n if (filesaver.readyState !== filesaver.DONE) {\n return func.apply(this, arguments);\n }\n };\n },\n create_if_not_found = { create: true, exclusive: false },\n slice;\n filesaver.readyState = filesaver.INIT;\n if (!name) {\n name = "download";\n }\n if (can_use_save_link) {\n object_url = get_URL().createObjectURL(blob);\n save_link.href = object_url;\n save_link.download = name;\n setTimeout(function () {\n click(save_link);\n dispatch_all();\n revoke(object_url);\n filesaver.readyState = filesaver.DONE;\n });\n return;\n }\n // Object and web filesystem URLs have a problem saving in Google Chrome when\n // viewed in a tab, so I force save with application/octet-stream\n // http://code.google.com/p/chromium/issues/detail?id=91158\n // Update: Google errantly closed 91158, I submitted it again:\n // https://code.google.com/p/chromium/issues/detail?id=389642\n if (view.chrome && type && type !== force_saveable_type) {\n slice = blob.slice || blob.webkitSlice;\n blob = slice.call(blob, 0, blob.size, force_saveable_type);\n blob_changed = true;\n }\n // Since I can\'t be sure that the guessed media type will trigger a download\n // in WebKit, I append .download to the filename.\n // https://bugs.webkit.org/show_bug.cgi?id=65440\n if (webkit_req_fs && name !== "download") {\n name += ".download";\n }\n if (type === force_saveable_type || webkit_req_fs) {\n target_view = view;\n }\n if (!req_fs) {\n fs_error();\n return;\n }\n fs_min_size += blob.size;\n req_fs(view.TEMPORARY, fs_min_size, abortable(function (fs) {\n fs.root.getDirectory("saved", create_if_not_found, abortable(function (dir) {\n var save = function save() {\n dir.getFile(name, create_if_not_found, abortable(function (file) {\n file.createWriter(abortable(function (writer) {\n writer.onwriteend = function (event) {\n target_view.location.href = file.toURL();\n filesaver.readyState = filesaver.DONE;\n dispatch(filesaver, "writeend", event);\n revoke(file);\n };\n writer.onerror = function () {\n var error = writer.error;\n if (error.code !== error.ABORT_ERR) {\n fs_error();\n }\n };\n "writestart progress write abort".split(" ").forEach(function (event) {\n writer["on" + event] = filesaver["on" + event];\n });\n writer.write(blob);\n filesaver.abort = function () {\n writer.abort();\n filesaver.readyState = filesaver.DONE;\n };\n filesaver.readyState = filesaver.WRITING;\n }), fs_error);\n }), fs_error);\n };\n dir.getFile(name, { create: false }, abortable(function (file) {\n // delete file if it already exists\n file.remove();\n save();\n }), abortable(function (ex) {\n if (ex.code === ex.NOT_FOUND_ERR) {\n save();\n } else {\n fs_error();\n }\n }));\n }), fs_error);\n }), fs_error);\n },\n FS_proto = FileSaver.prototype,\n saveAs = function saveAs(blob, name, no_auto_bom) {\n return new FileSaver(blob, name, no_auto_bom);\n };\n // IE 10+ (native saveAs)\n if (typeof navigator !== "undefined" && navigator.msSaveOrOpenBlob) {\n return function (blob, name, no_auto_bom) {\n if (!no_auto_bom) {\n blob = auto_bom(blob);\n }\n return navigator.msSaveOrOpenBlob(blob, name || "download");\n };\n }\n\n FS_proto.abort = function () {\n var filesaver = this;\n filesaver.readyState = filesaver.DONE;\n dispatch(filesaver, "abort");\n };\n FS_proto.readyState = FS_proto.INIT = 0;\n FS_proto.WRITING = 1;\n FS_proto.DONE = 2;\n\n FS_proto.error = FS_proto.onwritestart = FS_proto.onprogress = FS_proto.onwrite = FS_proto.onabort = FS_proto.onerror = FS_proto.onwriteend = null;\n\n return saveAs;\n})(typeof self !== "undefined" && self || typeof window !== "undefined" && window || undefined.content);\n// `self` is undefined in Firefox for Android content script context\n// while `this` is nsIContentFrameMessageManager\n// with an attribute `content` that corresponds to the window\n\nif (typeof module !== "undefined" && module.exports) {\n module.exports.saveAs = saveAs;\n} else if ("function" !== "undefined" && __webpack_require__(38) !== null && __webpack_require__(39) != null) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function () {\n return saveAs;\n }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZmlsZXNhdmVyLmpzP2NlYzIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQWNBLElBQUksTUFBTSxHQUFHLE1BQU0sSUFBSyxXQUFTLElBQUksRUFBRTtBQUN0QyxhQUFZLENBQUM7O0FBRWIsS0FBSSxPQUFPLFNBQVMsS0FBSyxXQUFXLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUU7QUFDakYsU0FBTztFQUNQO0FBQ0QsS0FDRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVE7OztBQUVuQixRQUFPLEdBQUcsU0FBVixPQUFPLEdBQWM7QUFDdEIsU0FBTyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDO0VBQzFDO0tBQ0MsU0FBUyxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsOEJBQThCLEVBQUUsR0FBRyxDQUFDO0tBQ3BFLGlCQUFpQixJQUFHLFVBQVUsSUFBSSxTQUFTO0tBQzNDLEtBQUssR0FBRyxTQUFSLEtBQUssQ0FBWSxJQUFJLEVBQUU7QUFDeEIsTUFBSSxLQUFLLEdBQUcsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDcEMsTUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztFQUMxQjtLQUNDLFNBQVMsR0FBRywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztLQUNoRSxhQUFhLEdBQUcsSUFBSSxDQUFDLHVCQUF1QjtLQUM1QyxNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixJQUFJLGFBQWEsSUFBSSxJQUFJLENBQUMsb0JBQW9CO0tBQzdFLGFBQWEsR0FBRyxTQUFoQixhQUFhLENBQVksRUFBRSxFQUFFO0FBQzlCLEdBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLFlBQVc7QUFDakQsU0FBTSxFQUFFLENBQUM7R0FD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Q2YsK0lBQUMsQ0FBQyIsImZpbGUiOiIzNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIEZpbGVTYXZlci5qc1xuICogQSBzYXZlQXMoKSBGaWxlU2F2ZXIgaW1wbGVtZW50YXRpb24uXG4gKiAxLjEuMjAxNTEwMDNcbiAqXG4gKiBCeSBFbGkgR3JleSwgaHR0cDovL2VsaWdyZXkuY29tXG4gKiBMaWNlbnNlOiBNSVRcbiAqICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGlncmV5L0ZpbGVTYXZlci5qcy9ibG9iL21hc3Rlci9MSUNFTlNFLm1kXG4gKi9cblxuLypnbG9iYWwgc2VsZiAqL1xuLypqc2xpbnQgYml0d2lzZTogdHJ1ZSwgaW5kZW50OiA0LCBsYXhicmVhazogdHJ1ZSwgbGF4Y29tbWE6IHRydWUsIHNtYXJ0dGFiczogdHJ1ZSwgcGx1c3BsdXM6IHRydWUgKi9cblxuLyohIEBzb3VyY2UgaHR0cDovL3B1cmwuZWxpZ3JleS5jb20vZ2l0aHViL0ZpbGVTYXZlci5qcy9ibG9iL21hc3Rlci9GaWxlU2F2ZXIuanMgKi9cblxudmFyIHNhdmVBcyA9IHNhdmVBcyB8fCAoZnVuY3Rpb24odmlldykge1xuXHRcInVzZSBzdHJpY3RcIjtcblx0Ly8gSUUgPDEwIGlzIGV4cGxpY2l0bHkgdW5zdXBwb3J0ZWRcblx0aWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCIgJiYgL01TSUUgWzEtOV1cXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpIHtcblx0XHRyZXR1cm47XG5cdH1cblx0dmFyXG5cdFx0ICBkb2MgPSB2aWV3LmRvY3VtZW50XG5cdFx0ICAvLyBvbmx5IGdldCBVUkwgd2hlbiBuZWNlc3NhcnkgaW4gY2FzZSBCbG9iLmpzIGhhc24ndCBvdmVycmlkZGVuIGl0IHlldFxuXHRcdCwgZ2V0X1VSTCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHZpZXcuVVJMIHx8IHZpZXcud2Via2l0VVJMIHx8IHZpZXc7XG5cdFx0fVxuXHRcdCwgc2F2ZV9saW5rID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIiwgXCJhXCIpXG5cdFx0LCBjYW5fdXNlX3NhdmVfbGluayA9IFwiZG93bmxvYWRcIiBpbiBzYXZlX2xpbmtcblx0XHQsIGNsaWNrID0gZnVuY3Rpb24obm9kZSkge1xuXHRcdFx0dmFyIGV2ZW50ID0gbmV3IE1vdXNlRXZlbnQoXCJjbGlja1wiKTtcblx0XHRcdG5vZGUuZGlzcGF0Y2hFdmVudChldmVudCk7XG5cdFx0fVxuXHRcdCwgaXNfc2FmYXJpID0gL1ZlcnNpb25cXC9bXFxkXFwuXSsuKlNhZmFyaS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KVxuXHRcdCwgd2Via2l0X3JlcV9mcyA9IHZpZXcud2Via2l0UmVxdWVzdEZpbGVTeXN0ZW1cblx0XHQsIHJlcV9mcyA9IHZpZXcucmVxdWVzdEZpbGVTeXN0ZW0gfHwgd2Via2l0X3JlcV9mcyB8fCB2aWV3Lm1velJlcXVlc3RGaWxlU3lzdGVtXG5cdFx0LCB0aHJvd19vdXRzaWRlID0gZnVuY3Rpb24oZXgpIHtcblx0XHRcdCh2aWV3LnNldEltbWVkaWF0ZSB8fCB2aWV3LnNldFRpbWVvdXQpKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR0aHJvdyBleDtcblx0XHRcdH0sIDApO1xuXHRcdH1cblx0XHQsIGZvcmNlX3NhdmVhYmxlX3R5cGUgPSBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiXG5cdFx0LCBmc19taW5fc2l6ZSA9IDBcblx0XHQvLyBTZWUgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTM3NTI5NyNjNyBhbmRcblx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vZWxpZ3JleS9GaWxlU2F2ZXIuanMvY29tbWl0LzQ4NTkzMGEjY29tbWl0Y29tbWVudC04NzY4MDQ3XG5cdFx0Ly8gZm9yIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoZSB0aW1lb3V0IGFuZCByZXZvY2F0aW9uIGZsb3dcblx0XHQsIGFyYml0cmFyeV9yZXZva2VfdGltZW91dCA9IDUwMCAvLyBpbiBtc1xuXHRcdCwgcmV2b2tlID0gZnVuY3Rpb24oZmlsZSkge1xuXHRcdFx0dmFyIHJldm9rZXIgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBmaWxlID09PSBcInN0cmluZ1wiKSB7IC8vIGZpbGUgaXMgYW4gb2JqZWN0IFVSTFxuXHRcdFx0XHRcdGdldF9VUkwoKS5yZXZva2VPYmplY3RVUkwoZmlsZSk7XG5cdFx0XHRcdH0gZWxzZSB7IC8vIGZpbGUgaXMgYSBGaWxlXG5cdFx0XHRcdFx0ZmlsZS5yZW1vdmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdGlmICh2aWV3LmNocm9tZSkge1xuXHRcdFx0XHRyZXZva2VyKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZXRUaW1lb3V0KHJldm9rZXIsIGFyYml0cmFyeV9yZXZva2VfdGltZW91dCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdCwgZGlzcGF0Y2ggPSBmdW5jdGlvbihmaWxlc2F2ZXIsIGV2ZW50X3R5cGVzLCBldmVudCkge1xuXHRcdFx0ZXZlbnRfdHlwZXMgPSBbXS5jb25jYXQoZXZlbnRfdHlwZXMpO1xuXHRcdFx0dmFyIGkgPSBldmVudF90eXBlcy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdHZhciBsaXN0ZW5lciA9IGZpbGVzYXZlcltcIm9uXCIgKyBldmVudF90eXBlc1tpXV07XG5cdFx0XHRcdGlmICh0eXBlb2YgbGlzdGVuZXIgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRsaXN0ZW5lci5jYWxsKGZpbGVzYXZlciwgZXZlbnQgfHwgZmlsZXNhdmVyKTtcblx0XHRcdFx0XHR9IGNhdGNoIChleCkge1xuXHRcdFx0XHRcdFx0dGhyb3dfb3V0c2lkZShleCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdCwgYXV0b19ib20gPSBmdW5jdGlvbihibG9iKSB7XG5cdFx0XHQvLyBwcmVwZW5kIEJPTSBmb3IgVVRGLTggWE1MIGFuZCB0ZXh0LyogdHlwZXMgKGluY2x1ZGluZyBIVE1MKVxuXHRcdFx0aWYgKC9eXFxzKig/OnRleHRcXC9cXFMqfGFwcGxpY2F0aW9uXFwveG1sfFxcUypcXC9cXFMqXFwreG1sKVxccyo7LipjaGFyc2V0XFxzKj1cXHMqdXRmLTgvaS50ZXN0KGJsb2IudHlwZSkpIHtcblx0XHRcdFx0cmV0dXJuIG5ldyBCbG9iKFtcIlxcdWZlZmZcIiwgYmxvYl0sIHt0eXBlOiBibG9iLnR5cGV9KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBibG9iO1xuXHRcdH1cblx0XHQsIEZpbGVTYXZlciA9IGZ1bmN0aW9uKGJsb2IsIG5hbWUsIG5vX2F1dG9fYm9tKSB7XG5cdFx0XHRpZiAoIW5vX2F1dG9fYm9tKSB7XG5cdFx0XHRcdGJsb2IgPSBhdXRvX2JvbShibG9iKTtcblx0XHRcdH1cblx0XHRcdC8vIEZpcnN0IHRyeSBhLmRvd25sb2FkLCB0aGVuIHdlYiBmaWxlc3lzdGVtLCB0aGVuIG9iamVjdCBVUkxzXG5cdFx0XHR2YXJcblx0XHRcdFx0ICBmaWxlc2F2ZXIgPSB0aGlzXG5cdFx0XHRcdCwgdHlwZSA9IGJsb2IudHlwZVxuXHRcdFx0XHQsIGJsb2JfY2hhbmdlZCA9IGZhbHNlXG5cdFx0XHRcdCwgb2JqZWN0X3VybFxuXHRcdFx0XHQsIHRhcmdldF92aWV3XG5cdFx0XHRcdCwgZGlzcGF0Y2hfYWxsID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0ZGlzcGF0Y2goZmlsZXNhdmVyLCBcIndyaXRlc3RhcnQgcHJvZ3Jlc3Mgd3JpdGUgd3JpdGVlbmRcIi5zcGxpdChcIiBcIikpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIG9uIGFueSBmaWxlc3lzIGVycm9ycyByZXZlcnQgdG8gc2F2aW5nIHdpdGggb2JqZWN0IFVSTHNcblx0XHRcdFx0LCBmc19lcnJvciA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICh0YXJnZXRfdmlldyAmJiBpc19zYWZhcmkgJiYgdHlwZW9mIEZpbGVSZWFkZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdFx0XHRcdC8vIFNhZmFyaSBkb2Vzbid0IGFsbG93IGRvd25sb2FkaW5nIG9mIGJsb2IgdXJsc1xuXHRcdFx0XHRcdFx0dmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cdFx0XHRcdFx0XHRyZWFkZXIub25sb2FkZW5kID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBiYXNlNjREYXRhID0gcmVhZGVyLnJlc3VsdDtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0X3ZpZXcubG9jYXRpb24uaHJlZiA9IFwiZGF0YTphdHRhY2htZW50L2ZpbGVcIiArIGJhc2U2NERhdGEuc2xpY2UoYmFzZTY0RGF0YS5zZWFyY2goL1ssO10vKSk7XG5cdFx0XHRcdFx0XHRcdGZpbGVzYXZlci5yZWFkeVN0YXRlID0gZmlsZXNhdmVyLkRPTkU7XG5cdFx0XHRcdFx0XHRcdGRpc3BhdGNoX2FsbCgpO1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdHJlYWRlci5yZWFkQXNEYXRhVVJMKGJsb2IpO1xuXHRcdFx0XHRcdFx0ZmlsZXNhdmVyLnJlYWR5U3RhdGUgPSBmaWxlc2F2ZXIuSU5JVDtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gZG9uJ3QgY3JlYXRlIG1vcmUgb2JqZWN0IFVSTHMgdGhhbiBuZWVkZWRcblx0XHRcdFx0XHRpZiAoYmxvYl9jaGFuZ2VkIHx8ICFvYmplY3RfdXJsKSB7XG5cdFx0XHRcdFx0XHRvYmplY3RfdXJsID0gZ2V0X1VSTCgpLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKHRhcmdldF92aWV3KSB7XG5cdFx0XHRcdFx0XHR0YXJnZXRfdmlldy5sb2NhdGlvbi5ocmVmID0gb2JqZWN0X3VybDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dmFyIG5ld190YWIgPSB2aWV3Lm9wZW4ob2JqZWN0X3VybCwgXCJfYmxhbmtcIik7XG5cdFx0XHRcdFx0XHRpZiAobmV3X3RhYiA9PSB1bmRlZmluZWQgJiYgaXNfc2FmYXJpKSB7XG5cdFx0XHRcdFx0XHRcdC8vQXBwbGUgZG8gbm90IGFsbG93IHdpbmRvdy5vcGVuLCBzZWUgaHR0cDovL2JpdC5seS8xa1pmZlJJXG5cdFx0XHRcdFx0XHRcdHZpZXcubG9jYXRpb24uaHJlZiA9IG9iamVjdF91cmxcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZmlsZXNhdmVyLnJlYWR5U3RhdGUgPSBmaWxlc2F2ZXIuRE9ORTtcblx0XHRcdFx0XHRkaXNwYXRjaF9hbGwoKTtcblx0XHRcdFx0XHRyZXZva2Uob2JqZWN0X3VybCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0LCBhYm9ydGFibGUgPSBmdW5jdGlvbihmdW5jKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0aWYgKGZpbGVzYXZlci5yZWFkeVN0YXRlICE9PSBmaWxlc2F2ZXIuRE9ORSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdFx0LCBjcmVhdGVfaWZfbm90X2ZvdW5kID0ge2NyZWF0ZTogdHJ1ZSwgZXhjbHVzaXZlOiBmYWxzZX1cblx0XHRcdFx0LCBzbGljZVxuXHRcdFx0O1xuXHRcdFx0ZmlsZXNhdmVyLnJlYWR5U3RhdGUgPSBmaWxlc2F2ZXIuSU5JVDtcblx0XHRcdGlmICghbmFtZSkge1xuXHRcdFx0XHRuYW1lID0gXCJkb3dubG9hZFwiO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGNhbl91c2Vfc2F2ZV9saW5rKSB7XG5cdFx0XHRcdG9iamVjdF91cmwgPSBnZXRfVVJMKCkuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuXHRcdFx0XHRzYXZlX2xpbmsuaHJlZiA9IG9iamVjdF91cmw7XG5cdFx0XHRcdHNhdmVfbGluay5kb3dubG9hZCA9IG5hbWU7XG5cdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0Y2xpY2soc2F2ZV9saW5rKTtcblx0XHRcdFx0XHRkaXNwYXRjaF9hbGwoKTtcblx0XHRcdFx0XHRyZXZva2Uob2JqZWN0X3VybCk7XG5cdFx0XHRcdFx0ZmlsZXNhdmVyLnJlYWR5U3RhdGUgPSBmaWxlc2F2ZXIuRE9ORTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIE9iamVjdCBhbmQgd2ViIGZpbGVzeXN0ZW0gVVJMcyBoYXZlIGEgcHJvYmxlbSBzYXZpbmcgaW4gR29vZ2xlIENocm9tZSB3aGVuXG5cdFx0XHQvLyB2aWV3ZWQgaW4gYSB0YWIsIHNvIEkgZm9yY2Ugc2F2ZSB3aXRoIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVxuXHRcdFx0Ly8gaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9OTExNThcblx0XHRcdC8vIFVwZGF0ZTogR29vZ2xlIGVycmFudGx5IGNsb3NlZCA5MTE1OCwgSSBzdWJtaXR0ZWQgaXQgYWdhaW46XG5cdFx0XHQvLyBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzg5NjQyXG5cdFx0XHRpZiAodmlldy5jaHJvbWUgJiYgdHlwZSAmJiB0eXBlICE9PSBmb3JjZV9zYXZlYWJsZV90eXBlKSB7XG5cdFx0XHRcdHNsaWNlID0gYmxvYi5zbGljZSB8fCBibG9iLndlYmtpdFNsaWNlO1xuXHRcdFx0XHRibG9iID0gc2xpY2UuY2FsbChibG9iLCAwLCBibG9iLnNpemUsIGZvcmNlX3NhdmVhYmxlX3R5cGUpO1xuXHRcdFx0XHRibG9iX2NoYW5nZWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0Ly8gU2luY2UgSSBjYW4ndCBiZSBzdXJlIHRoYXQgdGhlIGd1ZXNzZWQgbWVkaWEgdHlwZSB3aWxsIHRyaWdnZXIgYSBkb3dubG9hZFxuXHRcdFx0Ly8gaW4gV2ViS2l0LCBJIGFwcGVuZCAuZG93bmxvYWQgdG8gdGhlIGZpbGVuYW1lLlxuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1NDQwXG5cdFx0XHRpZiAod2Via2l0X3JlcV9mcyAmJiBuYW1lICE9PSBcImRvd25sb2FkXCIpIHtcblx0XHRcdFx0bmFtZSArPSBcIi5kb3dubG9hZFwiO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHR5cGUgPT09IGZvcmNlX3NhdmVhYmxlX3R5cGUgfHwgd2Via2l0X3JlcV9mcykge1xuXHRcdFx0XHR0YXJnZXRfdmlldyA9IHZpZXc7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIXJlcV9mcykge1xuXHRcdFx0XHRmc19lcnJvcigpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRmc19taW5fc2l6ZSArPSBibG9iLnNpemU7XG5cdFx0XHRyZXFfZnModmlldy5URU1QT1JBUlksIGZzX21pbl9zaXplLCBhYm9ydGFibGUoZnVuY3Rpb24oZnMpIHtcblx0XHRcdFx0ZnMucm9vdC5nZXREaXJlY3RvcnkoXCJzYXZlZFwiLCBjcmVhdGVfaWZfbm90X2ZvdW5kLCBhYm9ydGFibGUoZnVuY3Rpb24oZGlyKSB7XG5cdFx0XHRcdFx0dmFyIHNhdmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGRpci5nZXRGaWxlKG5hbWUsIGNyZWF0ZV9pZl9ub3RfZm91bmQsIGFib3J0YWJsZShmdW5jdGlvbihmaWxlKSB7XG5cdFx0XHRcdFx0XHRcdGZpbGUuY3JlYXRlV3JpdGVyKGFib3J0YWJsZShmdW5jdGlvbih3cml0ZXIpIHtcblx0XHRcdFx0XHRcdFx0XHR3cml0ZXIub253cml0ZWVuZCA9IGZ1bmN0aW9uKGV2ZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0YXJnZXRfdmlldy5sb2NhdGlvbi5ocmVmID0gZmlsZS50b1VSTCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZmlsZXNhdmVyLnJlYWR5U3RhdGUgPSBmaWxlc2F2ZXIuRE9ORTtcblx0XHRcdFx0XHRcdFx0XHRcdGRpc3BhdGNoKGZpbGVzYXZlciwgXCJ3cml0ZWVuZFwiLCBldmVudCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXZva2UoZmlsZSk7XG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHR3cml0ZXIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGVycm9yID0gd3JpdGVyLmVycm9yO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGVycm9yLmNvZGUgIT09IGVycm9yLkFCT1JUX0VSUikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRmc19lcnJvcigpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0XCJ3cml0ZXN0YXJ0IHByb2dyZXNzIHdyaXRlIGFib3J0XCIuc3BsaXQoXCIgXCIpLmZvckVhY2goZnVuY3Rpb24oZXZlbnQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHdyaXRlcltcIm9uXCIgKyBldmVudF0gPSBmaWxlc2F2ZXJbXCJvblwiICsgZXZlbnRdO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdHdyaXRlci53cml0ZShibG9iKTtcblx0XHRcdFx0XHRcdFx0XHRmaWxlc2F2ZXIuYWJvcnQgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHdyaXRlci5hYm9ydCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZmlsZXNhdmVyLnJlYWR5U3RhdGUgPSBmaWxlc2F2ZXIuRE9ORTtcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdGZpbGVzYXZlci5yZWFkeVN0YXRlID0gZmlsZXNhdmVyLldSSVRJTkc7XG5cdFx0XHRcdFx0XHRcdH0pLCBmc19lcnJvcik7XG5cdFx0XHRcdFx0XHR9KSwgZnNfZXJyb3IpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0ZGlyLmdldEZpbGUobmFtZSwge2NyZWF0ZTogZmFsc2V9LCBhYm9ydGFibGUoZnVuY3Rpb24oZmlsZSkge1xuXHRcdFx0XHRcdFx0Ly8gZGVsZXRlIGZpbGUgaWYgaXQgYWxyZWFkeSBleGlzdHNcblx0XHRcdFx0XHRcdGZpbGUucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHRzYXZlKCk7XG5cdFx0XHRcdFx0fSksIGFib3J0YWJsZShmdW5jdGlvbihleCkge1xuXHRcdFx0XHRcdFx0aWYgKGV4LmNvZGUgPT09IGV4Lk5PVF9GT1VORF9FUlIpIHtcblx0XHRcdFx0XHRcdFx0c2F2ZSgpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0ZnNfZXJyb3IoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdH0pLCBmc19lcnJvcik7XG5cdFx0XHR9KSwgZnNfZXJyb3IpO1xuXHRcdH1cblx0XHQsIEZTX3Byb3RvID0gRmlsZVNhdmVyLnByb3RvdHlwZVxuXHRcdCwgc2F2ZUFzID0gZnVuY3Rpb24oYmxvYiwgbmFtZSwgbm9fYXV0b19ib20pIHtcblx0XHRcdHJldHVybiBuZXcgRmlsZVNhdmVyKGJsb2IsIG5hbWUsIG5vX2F1dG9fYm9tKTtcblx0XHR9XG5cdDtcblx0Ly8gSUUgMTArIChuYXRpdmUgc2F2ZUFzKVxuXHRpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIiAmJiBuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYikge1xuXHRcdHJldHVybiBmdW5jdGlvbihibG9iLCBuYW1lLCBub19hdXRvX2JvbSkge1xuXHRcdFx0aWYgKCFub19hdXRvX2JvbSkge1xuXHRcdFx0XHRibG9iID0gYXV0b19ib20oYmxvYik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IoYmxvYiwgbmFtZSB8fCBcImRvd25sb2FkXCIpO1xuXHRcdH07XG5cdH1cblxuXHRGU19wcm90by5hYm9ydCA9IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBmaWxlc2F2ZXIgPSB0aGlzO1xuXHRcdGZpbGVzYXZlci5yZWFkeVN0YXRlID0gZmlsZXNhdmVyLkRPTkU7XG5cdFx0ZGlzcGF0Y2goZmlsZXNhdmVyLCBcImFib3J0XCIpO1xuXHR9O1xuXHRGU19wcm90by5yZWFkeVN0YXRlID0gRlNfcHJvdG8uSU5JVCA9IDA7XG5cdEZTX3Byb3RvLldSSVRJTkcgPSAxO1xuXHRGU19wcm90by5ET05FID0gMjtcblxuXHRGU19wcm90by5lcnJvciA9XG5cdEZTX3Byb3RvLm9ud3JpdGVzdGFydCA9XG5cdEZTX3Byb3RvLm9ucHJvZ3Jlc3MgPVxuXHRGU19wcm90by5vbndyaXRlID1cblx0RlNfcHJvdG8ub25hYm9ydCA9XG5cdEZTX3Byb3RvLm9uZXJyb3IgPVxuXHRGU19wcm90by5vbndyaXRlZW5kID1cblx0XHRudWxsO1xuXG5cdHJldHVybiBzYXZlQXM7XG59KFxuXHQgICB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmXG5cdHx8IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93XG5cdHx8IHRoaXMuY29udGVudFxuKSk7XG4vLyBgc2VsZmAgaXMgdW5kZWZpbmVkIGluIEZpcmVmb3ggZm9yIEFuZHJvaWQgY29udGVudCBzY3JpcHQgY29udGV4dFxuLy8gd2hpbGUgYHRoaXNgIGlzIG5zSUNvbnRlbnRGcmFtZU1lc3NhZ2VNYW5hZ2VyXG4vLyB3aXRoIGFuIGF0dHJpYnV0ZSBgY29udGVudGAgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgd2luZG93XG5cbmlmICh0eXBlb2YgbW9kdWxlICE9PSBcInVuZGVmaW5lZFwiICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gIG1vZHVsZS5leHBvcnRzLnNhdmVBcyA9IHNhdmVBcztcbn0gZWxzZSBpZiAoKHR5cGVvZiBkZWZpbmUgIT09IFwidW5kZWZpbmVkXCIgJiYgZGVmaW5lICE9PSBudWxsKSAmJiAoZGVmaW5lLmFtZCAhPSBudWxsKSkge1xuICBkZWZpbmUoW10sIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBzYXZlQXM7XG4gIH0pO1xufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvZmlsZXNhdmVyLmpzXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ=='); -},function(module,exports){eval('module.exports = function() { throw new Error("define cannot be used indirect"); };\r\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vYW1kLWRlZmluZS5qcz8wYmJhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZCQUE2QixtREFBbUQiLCJmaWxlIjoiMzguanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB0aHJvdyBuZXcgRXJyb3IoXCJkZWZpbmUgY2Fubm90IGJlIHVzZWQgaW5kaXJlY3RcIik7IH07XHJcblxuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogKHdlYnBhY2spL2J1aWxkaW4vYW1kLWRlZmluZS5qc1xuICoqIG1vZHVsZSBpZCA9IDM4XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9')},function(module,exports){eval("/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {module.exports = __webpack_amd_options__;\r\n\n/* WEBPACK VAR INJECTION */}.call(exports, {}))\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vYW1kLW9wdGlvbnMuanM/NWY3MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSIsImZpbGUiOiIzOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX2FtZF9vcHRpb25zX187XHJcblxuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogKHdlYnBhY2spL2J1aWxkaW4vYW1kLW9wdGlvbnMuanNcbiAqKiBtb2R1bGUgaWQgPSAzOVxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _Const = __webpack_require__(3);\n\nvar _Const2 = _interopRequireDefault(_Const);\n\nvar _events = __webpack_require__(34);\n\nvar Filter = (function (_EventEmitter) {\n _inherits(Filter, _EventEmitter);\n\n function Filter(data) {\n _classCallCheck(this, Filter);\n\n _get(Object.getPrototypeOf(Filter.prototype), 'constructor', this).call(this, data);\n this.currentFilter = {};\n }\n\n _createClass(Filter, [{\n key: 'handleFilter',\n value: function handleFilter(dataField, value, type) {\n var filterType = type || _Const2['default'].FILTER_TYPE.CUSTOM;\n\n if (value !== null && typeof value === 'object') {\n // value of the filter is an object\n var hasValue = true;\n for (var prop in value) {\n if (!value[prop] || value[prop] === '') {\n hasValue = false;\n break;\n }\n }\n // if one of the object properties is undefined or empty, we remove the filter\n if (hasValue) {\n this.currentFilter[dataField] = { value: value, type: filterType };\n } else {\n delete this.currentFilter[dataField];\n }\n } else if (!value || value.trim() === '') {\n delete this.currentFilter[dataField];\n } else {\n this.currentFilter[dataField] = { value: value.trim(), type: filterType };\n }\n this.emit('onFilterChange', this.currentFilter);\n }\n }]);\n\n return Filter;\n})(_events.EventEmitter);\n\nexports.Filter = Filter;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvRmlsdGVyLmpzPzVkNzMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztpQ0FBa0IsQ0FBUzs7OztrQ0FDRSxFQUFROztJQUV4QixNQUFNO1lBQU4sTUFBTTs7QUFDTixXQURBLE1BQU0sQ0FDTCxJQUFJLEVBQUU7MEJBRFAsTUFBTTs7QUFFZiwrQkFGUyxNQUFNLDZDQUVULElBQUksRUFBRTtBQUNaLFFBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO0dBQ3pCOztlQUpVLE1BQU07O1dBTUwsc0JBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7QUFDbkMsVUFBTSxVQUFVLEdBQUcsSUFBSSxJQUFJLG1CQUFNLFdBQVcsQ0FBQyxNQUFNLENBQUM7O0FBRXBELFVBQUksS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7O0FBRS9DLFlBQUksUUFBUSxHQUFHLElBQUksQ0FBQztBQUNwQixhQUFLLElBQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtBQUN4QixjQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUU7QUFDdEMsb0JBQVEsR0FBRyxLQUFLLENBQUM7QUFDakIsa0JBQU07V0FDUDtTQUNGOztBQUVELFlBQUksUUFBUSxFQUFFO0FBQ1osY0FBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDO1NBQ3BFLE1BQU07QUFDTCxpQkFBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3RDO09BQ0YsTUFBTSxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7QUFDeEMsZUFBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO09BQ3RDLE1BQU07QUFDTCxZQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUM7T0FDM0U7QUFDRCxVQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztLQUNqRDs7O1NBOUJVLE1BQU0iLCJmaWxlIjoiNDAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29uc3QgZnJvbSAnLi9Db25zdCc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuXG5leHBvcnQgY2xhc3MgRmlsdGVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IoZGF0YSkge1xuICAgIHN1cGVyKGRhdGEpO1xuICAgIHRoaXMuY3VycmVudEZpbHRlciA9IHt9O1xuICB9XG5cbiAgaGFuZGxlRmlsdGVyKGRhdGFGaWVsZCwgdmFsdWUsIHR5cGUpIHtcbiAgICBjb25zdCBmaWx0ZXJUeXBlID0gdHlwZSB8fCBDb25zdC5GSUxURVJfVFlQRS5DVVNUT007XG5cbiAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgLy8gdmFsdWUgb2YgdGhlIGZpbHRlciBpcyBhbiBvYmplY3RcbiAgICAgIGxldCBoYXNWYWx1ZSA9IHRydWU7XG4gICAgICBmb3IgKGNvbnN0IHByb3AgaW4gdmFsdWUpIHtcbiAgICAgICAgaWYgKCF2YWx1ZVtwcm9wXSB8fCB2YWx1ZVtwcm9wXSA9PT0gJycpIHtcbiAgICAgICAgICBoYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBpZiBvbmUgb2YgdGhlIG9iamVjdCBwcm9wZXJ0aWVzIGlzIHVuZGVmaW5lZCBvciBlbXB0eSwgd2UgcmVtb3ZlIHRoZSBmaWx0ZXJcbiAgICAgIGlmIChoYXNWYWx1ZSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJbZGF0YUZpZWxkXSA9IHsgdmFsdWU6IHZhbHVlLCB0eXBlOiBmaWx0ZXJUeXBlIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdGhpcy5jdXJyZW50RmlsdGVyW2RhdGFGaWVsZF07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghdmFsdWUgfHwgdmFsdWUudHJpbSgpID09PSAnJykge1xuICAgICAgZGVsZXRlIHRoaXMuY3VycmVudEZpbHRlcltkYXRhRmllbGRdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJbZGF0YUZpZWxkXSA9IHsgdmFsdWU6IHZhbHVlLnRyaW0oKSwgdHlwZTogZmlsdGVyVHlwZSB9O1xuICAgIH1cbiAgICB0aGlzLmVtaXQoJ29uRmlsdGVyQ2hhbmdlJywgdGhpcy5jdXJyZW50RmlsdGVyKTtcbiAgfVxufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvRmlsdGVyLmpzXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports,__webpack_require__){eval("/* eslint default-case: 0 */\n/* eslint guard-for-in: 0 */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _Const = __webpack_require__(3);\n\nvar _Const2 = _interopRequireDefault(_Const);\n\nvar _util = __webpack_require__(35);\n\nvar _util2 = _interopRequireDefault(_util);\n\nvar _filtersDate = __webpack_require__(42);\n\nvar _filtersDate2 = _interopRequireDefault(_filtersDate);\n\nvar _filtersText = __webpack_require__(43);\n\nvar _filtersText2 = _interopRequireDefault(_filtersText);\n\nvar _filtersRegex = __webpack_require__(44);\n\nvar _filtersRegex2 = _interopRequireDefault(_filtersRegex);\n\nvar _filtersSelect = __webpack_require__(45);\n\nvar _filtersSelect2 = _interopRequireDefault(_filtersSelect);\n\nvar _filtersNumber = __webpack_require__(46);\n\nvar _filtersNumber2 = _interopRequireDefault(_filtersNumber);\n\nvar TableHeaderColumn = (function (_Component) {\n _inherits(TableHeaderColumn, _Component);\n\n function TableHeaderColumn(props) {\n var _this = this;\n\n _classCallCheck(this, TableHeaderColumn);\n\n _get(Object.getPrototypeOf(TableHeaderColumn.prototype), 'constructor', this).call(this, props);\n\n this.handleColumnClick = function () {\n if (!_this.props.dataSort) return;\n var order = _this.props.sort === _Const2['default'].SORT_DESC ? _Const2['default'].SORT_ASC : _Const2['default'].SORT_DESC;\n _this.props.onSort(order, _this.props.dataField);\n };\n\n this.handleFilter = this.handleFilter.bind(this);\n }\n\n _createClass(TableHeaderColumn, [{\n key: 'handleFilter',\n value: function handleFilter(value, type) {\n this.props.filter.emitter.handleFilter(this.props.dataField, value, type);\n }\n }, {\n key: 'getFilters',\n value: function getFilters() {\n switch (this.props.filter.type) {\n case _Const2['default'].FILTER_TYPE.TEXT:\n {\n return _react2['default'].createElement(_filtersText2['default'], _extends({}, this.props.filter, {\n columnName: this.props.children, filterHandler: this.handleFilter }));\n }\n case _Const2['default'].FILTER_TYPE.REGEX:\n {\n return _react2['default'].createElement(_filtersRegex2['default'], _extends({}, this.props.filter, {\n columnName: this.props.children, filterHandler: this.handleFilter }));\n }\n case _Const2['default'].FILTER_TYPE.SELECT:\n {\n return _react2['default'].createElement(_filtersSelect2['default'], _extends({}, this.props.filter, {\n columnName: this.props.children, filterHandler: this.handleFilter }));\n }\n case _Const2['default'].FILTER_TYPE.NUMBER:\n {\n return _react2['default'].createElement(_filtersNumber2['default'], _extends({}, this.props.filter, {\n columnName: this.props.children, filterHandler: this.handleFilter }));\n }\n case _Const2['default'].FILTER_TYPE.DATE:\n {\n return _react2['default'].createElement(_filtersDate2['default'], _extends({}, this.props.filter, {\n columnName: this.props.children, filterHandler: this.handleFilter }));\n }\n case _Const2['default'].FILTER_TYPE.CUSTOM:\n {\n return this.props.filter.getElement(this.handleFilter, this.props.filter.customFilterParameters);\n }\n }\n }\n }, {\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.refs['header-col'].setAttribute('data-field', this.props.dataField);\n }\n }, {\n key: 'render',\n value: function render() {\n var defaultCaret = undefined;\n var thStyle = {\n textAlign: this.props.dataAlign,\n display: this.props.hidden ? 'none' : null\n };\n if (this.props.sortIndicator) {\n defaultCaret = !this.props.dataSort ? null : _react2['default'].createElement(\n 'span',\n { className: 'order' },\n _react2['default'].createElement(\n 'span',\n { className: 'dropdown' },\n _react2['default'].createElement('span', { className: 'caret', style: { margin: '10px 0 10px 5px', color: '#ccc' } })\n ),\n _react2['default'].createElement(\n 'span',\n { className: 'dropup' },\n _react2['default'].createElement('span', { className: 'caret', style: { margin: '10px 0', color: '#ccc' } })\n )\n );\n }\n var sortCaret = this.props.sort ? _util2['default'].renderReactSortCaret(this.props.sort) : defaultCaret;\n var classes = this.props.className + ' ' + (this.props.dataSort ? 'sort-column' : '');\n\n return _react2['default'].createElement(\n 'th',\n { ref: 'header-col',\n className: classes,\n style: thStyle,\n title: this.props.children,\n onClick: this.handleColumnClick },\n this.props.children,\n sortCaret,\n _react2['default'].createElement(\n 'div',\n { onClick: function (e) {\n return e.stopPropagation();\n } },\n this.props.filter ? this.getFilters() : null\n )\n );\n }\n }]);\n\n return TableHeaderColumn;\n})(_react.Component);\n\nvar filterTypeArray = [];\nfor (var key in _Const2['default'].FILTER_TYPE) {\n filterTypeArray.push(_Const2['default'].FILTER_TYPE[key]);\n}\n\nTableHeaderColumn.propTypes = {\n dataField: _react.PropTypes.string,\n dataAlign: _react.PropTypes.string,\n dataSort: _react.PropTypes.bool,\n onSort: _react.PropTypes.func,\n dataFormat: _react.PropTypes.func,\n isKey: _react.PropTypes.bool,\n editable: _react.PropTypes.any,\n hidden: _react.PropTypes.bool,\n searchable: _react.PropTypes.bool,\n className: _react.PropTypes.string,\n width: _react.PropTypes.string,\n sortFunc: _react.PropTypes.func,\n columnClassName: _react.PropTypes.any,\n filterFormatted: _react.PropTypes.bool,\n sort: _react.PropTypes.string,\n formatExtraData: _react.PropTypes.any,\n filter: _react.PropTypes.shape({\n type: _react.PropTypes.oneOf(filterTypeArray),\n delay: _react.PropTypes.number,\n options: _react.PropTypes.oneOfType([_react.PropTypes.object, // for SelectFilter\n _react.PropTypes.arrayOf(_react.PropTypes.number) // for NumberFilter\n ]),\n numberComparators: _react.PropTypes.arrayOf(_react.PropTypes.string),\n emitter: _react.PropTypes.object,\n placeholder: _react.PropTypes.string,\n getElement: _react.PropTypes.func,\n customFilterParameters: _react.PropTypes.object\n }),\n sortIndicator: _react.PropTypes.bool\n};\n\nTableHeaderColumn.defaultProps = {\n dataAlign: 'left',\n dataSort: false,\n dataFormat: undefined,\n isKey: false,\n editable: true,\n onSort: undefined,\n hidden: false,\n searchable: true,\n className: '',\n width: null,\n sortFunc: undefined,\n columnClassName: '',\n filterFormatted: false,\n sort: undefined,\n formatExtraData: undefined,\n filter: undefined,\n sortIndicator: true\n};\n\nexports['default'] = TableHeaderColumn;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvVGFibGVIZWFkZXJDb2x1bW4uanM/YTNlNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztpQ0FFNEMsQ0FBTzs7OztpQ0FDakMsQ0FBUzs7OztnQ0FDVixFQUFROzs7O3VDQUNGLEVBQWdCOzs7O3VDQUNoQixFQUFnQjs7Ozt3Q0FDZixFQUFpQjs7Ozt5Q0FDaEIsRUFBa0I7Ozs7eUNBQ2xCLEVBQWtCOzs7O0lBRXJDLGlCQUFpQjtZQUFqQixpQkFBaUI7O0FBRVYsV0FGUCxpQkFBaUIsQ0FFVCxLQUFLLEVBQUU7OzswQkFGZixpQkFBaUI7O0FBR25CLCtCQUhFLGlCQUFpQiw2Q0FHYixLQUFLLEVBQUU7O1NBSWYsaUJBQWlCLEdBQUcsWUFBTTtBQUN4QixVQUFJLENBQUMsTUFBSyxLQUFLLENBQUMsUUFBUSxFQUFFLE9BQU87QUFDakMsVUFBTSxLQUFLLEdBQUcsTUFBSyxLQUFLLENBQUMsSUFBSSxLQUFLLG1CQUFNLFNBQVMsR0FBRyxtQkFBTSxRQUFRLEdBQUcsbUJBQU0sU0FBUyxDQUFDO0FBQ3JGLFlBQUssS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBSyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7S0FDaEQ7O0FBUEMsUUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztHQUNsRDs7ZUFMRyxpQkFBaUI7O1dBYVQsc0JBQUMsS0FBSyxFQUFFLElBQUksRUFBRTtBQUN4QixVQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztLQUMzRTs7O1dBRVMsc0JBQUc7QUFDWCxjQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUk7QUFDOUIsYUFBSyxtQkFBTSxX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RSxTQUFTO0FBQzFCLFFBQU0sRUFBRSxTQUFTO0FBQ2pCLGVBQWEsRUFBRSxJQUFJO0NBQ3BCLENBQUM7O3FCQUVhLGlCQUFpQiIsImZpbGUiOiI0MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBkZWZhdWx0LWNhc2U6IDAgKi9cbi8qIGVzbGludCBndWFyZC1mb3ItaW46IDAgKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFByb3BUeXBlcyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBDb25zdCBmcm9tICcuL0NvbnN0JztcbmltcG9ydCBVdGlsIGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgRGF0ZUZpbHRlciBmcm9tICcuL2ZpbHRlcnMvRGF0ZSc7XG5pbXBvcnQgVGV4dEZpbHRlciBmcm9tICcuL2ZpbHRlcnMvVGV4dCc7XG5pbXBvcnQgUmVnZXhGaWx0ZXIgZnJvbSAnLi9maWx0ZXJzL1JlZ2V4JztcbmltcG9ydCBTZWxlY3RGaWx0ZXIgZnJvbSAnLi9maWx0ZXJzL1NlbGVjdCc7XG5pbXBvcnQgTnVtYmVyRmlsdGVyIGZyb20gJy4vZmlsdGVycy9OdW1iZXInO1xuXG5jbGFzcyBUYWJsZUhlYWRlckNvbHVtbiBleHRlbmRzIENvbXBvbmVudCB7XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVGaWx0ZXIgPSB0aGlzLmhhbmRsZUZpbHRlci5iaW5kKHRoaXMpO1xuICB9XG5cbiAgaGFuZGxlQ29sdW1uQ2xpY2sgPSAoKSA9PiB7XG4gICAgaWYgKCF0aGlzLnByb3BzLmRhdGFTb3J0KSByZXR1cm47XG4gICAgY29uc3Qgb3JkZXIgPSB0aGlzLnByb3BzLnNvcnQgPT09IENvbnN0LlNPUlRfREVTQyA/IENvbnN0LlNPUlRfQVNDIDogQ29uc3QuU09SVF9ERVNDO1xuICAgIHRoaXMucHJvcHMub25Tb3J0KG9yZGVyLCB0aGlzLnByb3BzLmRhdGFGaWVsZCk7XG4gIH1cblxuICBoYW5kbGVGaWx0ZXIodmFsdWUsIHR5cGUpIHtcbiAgICB0aGlzLnByb3BzLmZpbHRlci5lbWl0dGVyLmhhbmRsZUZpbHRlcih0aGlzLnByb3BzLmRhdGFGaWVsZCwgdmFsdWUsIHR5cGUpO1xuICB9XG5cbiAgZ2V0RmlsdGVycygpIHtcbiAgICBzd2l0Y2ggKHRoaXMucHJvcHMuZmlsdGVyLnR5cGUpIHtcbiAgICBjYXNlIENvbnN0LkZJTFRFUl9UWVBFLlRFWFQ6IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUZXh0RmlsdGVyIHsgLi4udGhpcy5wcm9wcy5maWx0ZXIgfVxuICAgICAgICAgIGNvbHVtbk5hbWU9eyB0aGlzLnByb3BzLmNoaWxkcmVuIH0gZmlsdGVySGFuZGxlcj17IHRoaXMuaGFuZGxlRmlsdGVyIH0gLz5cbiAgICAgICk7XG4gICAgfVxuICAgIGNhc2UgQ29uc3QuRklMVEVSX1RZUEUuUkVHRVg6IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxSZWdleEZpbHRlciB7IC4uLnRoaXMucHJvcHMuZmlsdGVyIH1cbiAgICAgICAgICBjb2x1bW5OYW1lPXsgdGhpcy5wcm9wcy5jaGlsZHJlbiB9IGZpbHRlckhhbmRsZXI9eyB0aGlzLmhhbmRsZUZpbHRlciB9IC8+XG4gICAgICApO1xuICAgIH1cbiAgICBjYXNlIENvbnN0LkZJTFRFUl9UWVBFLlNFTEVDVDoge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFNlbGVjdEZpbHRlciB7IC4uLnRoaXMucHJvcHMuZmlsdGVyIH1cbiAgICAgICAgICBjb2x1bW5OYW1lPXsgdGhpcy5wcm9wcy5jaGlsZHJlbiB9IGZpbHRlckhhbmRsZXI9eyB0aGlzLmhhbmRsZUZpbHRlciB9IC8+XG4gICAgICApO1xuICAgIH1cbiAgICBjYXNlIENvbnN0LkZJTFRFUl9UWVBFLk5VTUJFUjoge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPE51bWJlckZpbHRlciB7IC4uLnRoaXMucHJvcHMuZmlsdGVyIH1cbiAgICAgICAgICBjb2x1bW5OYW1lPXsgdGhpcy5wcm9wcy5jaGlsZHJlbiB9IGZpbHRlckhhbmRsZXI9eyB0aGlzLmhhbmRsZUZpbHRlciB9IC8+XG4gICAgICApO1xuICAgIH1cbiAgICBjYXNlIENvbnN0LkZJTFRFUl9UWVBFLkRBVEU6IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxEYXRlRmlsdGVyIHsgLi4udGhpcy5wcm9wcy5maWx0ZXIgfVxuICAgICAgICAgIGNvbHVtbk5hbWU9eyB0aGlzLnByb3BzLmNoaWxkcmVuIH0gZmlsdGVySGFuZGxlcj17IHRoaXMuaGFuZGxlRmlsdGVyIH0gLz5cbiAgICAgICk7XG4gICAgfVxuICAgIGNhc2UgQ29uc3QuRklMVEVSX1RZUEUuQ1VTVE9NOiB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5maWx0ZXIuZ2V0RWxlbWVudCh0aGlzLmhhbmRsZUZpbHRlcixcbiAgICAgICAgICB0aGlzLnByb3BzLmZpbHRlci5jdXN0b21GaWx0ZXJQYXJhbWV0ZXJzKTtcbiAgICB9XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5yZWZzWydoZWFkZXItY29sJ10uc2V0QXR0cmlidXRlKCdkYXRhLWZpZWxkJywgdGhpcy5wcm9wcy5kYXRhRmllbGQpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGxldCBkZWZhdWx0Q2FyZXQ7XG4gICAgY29uc3QgdGhTdHlsZSA9IHtcbiAgICAgIHRleHRBbGlnbjogdGhpcy5wcm9wcy5kYXRhQWxpZ24sXG4gICAgICBkaXNwbGF5OiB0aGlzLnByb3BzLmhpZGRlbiA/ICdub25lJyA6IG51bGxcbiAgICB9O1xuICAgIGlmICh0aGlzLnByb3BzLnNvcnRJbmRpY2F0b3IpIHtcbiAgICAgIGRlZmF1bHRDYXJldCA9ICghdGhpcy5wcm9wcy5kYXRhU29ydCkgPyBudWxsIDogKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9J29yZGVyJz5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9J2Ryb3Bkb3duJz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0nY2FyZXQnIHN0eWxlPXsgeyBtYXJnaW46ICcxMHB4IDAgMTBweCA1cHgnLCBjb2xvcjogJyNjY2MnIH0gfT48L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0nZHJvcHVwJz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0nY2FyZXQnIHN0eWxlPXsgeyBtYXJnaW46ICcxMHB4IDAnLCBjb2xvcjogJyNjY2MnIH0gfT48L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBzb3J0Q2FyZXQgPSB0aGlzLnByb3BzLnNvcnQgPyBVdGlsLnJlbmRlclJlYWN0U29ydENhcmV0KHRoaXMucHJvcHMuc29ydCkgOiBkZWZhdWx0Q2FyZXQ7XG4gICAgY29uc3QgY2xhc3NlcyA9IHRoaXMucHJvcHMuY2xhc3NOYW1lICsgJyAnICsgKHRoaXMucHJvcHMuZGF0YVNvcnQgPyAnc29ydC1jb2x1bW4nIDogJycpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDx0aCByZWY9J2hlYWRlci1jb2wnXG4gICAgICAgICAgY2xhc3NOYW1lPXsgY2xhc3NlcyB9XG4gICAgICAgICAgc3R5bGU9eyB0aFN0eWxlIH1cbiAgICAgICAgICB0aXRsZT17IHRoaXMucHJvcHMuY2hpbGRyZW4gfVxuICAgICAgICAgIG9uQ2xpY2s9eyB0aGlzLmhhbmRsZUNvbHVtbkNsaWNrIH0+XG4gICAgICAgIHsgdGhpcy5wcm9wcy5jaGlsZHJlbiB9eyBzb3J0Q2FyZXQgfVxuICAgICAgICA8ZGl2IG9uQ2xpY2s9eyBlID0+IGUuc3RvcFByb3BhZ2F0aW9uKCkgfT5cbiAgICAgICAgICB7IHRoaXMucHJvcHMuZmlsdGVyID8gdGhpcy5nZXRGaWx0ZXJzKCkgOiBudWxsIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3RoPlxuICAgICk7XG4gIH1cbn1cblxuY29uc3QgZmlsdGVyVHlwZUFycmF5ID0gW107XG5mb3IgKGNvbnN0IGtleSBpbiBDb25zdC5GSUxURVJfVFlQRSkge1xuICBmaWx0ZXJUeXBlQXJyYXkucHVzaChDb25zdC5GSUxURVJfVFlQRVtrZXldKTtcbn1cblxuVGFibGVIZWFkZXJDb2x1bW4ucHJvcFR5cGVzID0ge1xuICBkYXRhRmllbGQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGRhdGFBbGlnbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGF0YVNvcnQ6IFByb3BUeXBlcy5ib29sLFxuICBvblNvcnQ6IFByb3BUeXBlcy5mdW5jLFxuICBkYXRhRm9ybWF0OiBQcm9wVHlwZXMuZnVuYyxcbiAgaXNLZXk6IFByb3BUeXBlcy5ib29sLFxuICBlZGl0YWJsZTogUHJvcFR5cGVzLmFueSxcbiAgaGlkZGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgc2VhcmNoYWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgd2lkdGg6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNvcnRGdW5jOiBQcm9wVHlwZXMuZnVuYyxcbiAgY29sdW1uQ2xhc3NOYW1lOiBQcm9wVHlwZXMuYW55LFxuICBmaWx0ZXJGb3JtYXR0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICBzb3J0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBmb3JtYXRFeHRyYURhdGE6IFByb3BUeXBlcy5hbnksXG4gIGZpbHRlcjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICB0eXBlOiBQcm9wVHlwZXMub25lT2YoZmlsdGVyVHlwZUFycmF5KSxcbiAgICBkZWxheTogUHJvcFR5cGVzLm51bWJlcixcbiAgICBvcHRpb25zOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbiAgICAgIFByb3BUeXBlcy5vYmplY3QsIC8vIGZvciBTZWxlY3RGaWx0ZXJcbiAgICAgIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5udW1iZXIpIC8vIGZvciBOdW1iZXJGaWx0ZXJcbiAgICBdKSxcbiAgICBudW1iZXJDb21wYXJhdG9yczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgZW1pdHRlcjogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBnZXRFbGVtZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBjdXN0b21GaWx0ZXJQYXJhbWV0ZXJzOiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICBzb3J0SW5kaWNhdG9yOiBQcm9wVHlwZXMuYm9vbFxufTtcblxuVGFibGVIZWFkZXJDb2x1bW4uZGVmYXVsdFByb3BzID0ge1xuICBkYXRhQWxpZ246ICdsZWZ0JyxcbiAgZGF0YVNvcnQ6IGZhbHNlLFxuICBkYXRhRm9ybWF0OiB1bmRlZmluZWQsXG4gIGlzS2V5OiBmYWxzZSxcbiAgZWRpdGFibGU6IHRydWUsXG4gIG9uU29ydDogdW5kZWZpbmVkLFxuICBoaWRkZW46IGZhbHNlLFxuICBzZWFyY2hhYmxlOiB0cnVlLFxuICBjbGFzc05hbWU6ICcnLFxuICB3aWR0aDogbnVsbCxcbiAgc29ydEZ1bmM6IHVuZGVmaW5lZCxcbiAgY29sdW1uQ2xhc3NOYW1lOiAnJyxcbiAgZmlsdGVyRm9ybWF0dGVkOiBmYWxzZSxcbiAgc29ydDogdW5kZWZpbmVkLFxuICBmb3JtYXRFeHRyYURhdGE6IHVuZGVmaW5lZCxcbiAgZmlsdGVyOiB1bmRlZmluZWQsXG4gIHNvcnRJbmRpY2F0b3I6IHRydWVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlSGVhZGVyQ29sdW1uO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvVGFibGVIZWFkZXJDb2x1bW4uanNcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports,__webpack_require__){eval("/* eslint quotes: 0 */\n/* eslint max-len: 0 */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _Const = __webpack_require__(3);\n\nvar _Const2 = _interopRequireDefault(_Const);\n\nvar DateFilter = (function (_Component) {\n _inherits(DateFilter, _Component);\n\n function DateFilter(props) {\n _classCallCheck(this, DateFilter);\n\n _get(Object.getPrototypeOf(DateFilter.prototype), 'constructor', this).call(this, props);\n this.filter = this.filter.bind(this);\n }\n\n _createClass(DateFilter, [{\n key: 'setDefaultDate',\n value: function setDefaultDate() {\n var defaultDate = '';\n if (this.props.defaultValue) {\n // Set the appropriate format for the input type=date, i.e. \"YYYY-MM-DD\"\n var defaultValue = new Date(this.props.defaultValue);\n defaultDate = defaultValue.getFullYear() + '-' + (\"0\" + (defaultValue.getMonth() + 1)).slice(-2) + '-' + (\"0\" + defaultValue.getDate()).slice(-2);\n }\n return defaultDate;\n }\n }, {\n key: 'filter',\n value: function filter(event) {\n var dateValue = event.target.value;\n if (dateValue) {\n this.props.filterHandler(new Date(dateValue), _Const2['default'].FILTER_TYPE.DATE);\n } else {\n this.props.filterHandler(null, _Const2['default'].FILTER_TYPE.DATE);\n }\n }\n }, {\n key: 'componentDidMount',\n value: function componentDidMount() {\n var dateValue = this.refs.inputDate.defaultValue;\n if (dateValue) {\n this.props.filterHandler(new Date(dateValue), _Const2['default'].FILTER_TYPE.DATE);\n }\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2['default'].createElement('input', { ref: 'inputDate',\n className: 'filter date-filter form-control',\n type: 'date',\n onChange: this.filter,\n defaultValue: this.setDefaultDate() });\n }\n }]);\n\n return DateFilter;\n})(_react.Component);\n\nDateFilter.propTypes = {\n filterHandler: _react.PropTypes.func.isRequired,\n defaultValue: _react.PropTypes.object,\n columnName: _react.PropTypes.string\n};\n\nexports['default'] = DateFilter;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZmlsdGVycy9EYXRlLmpzP2ExOTIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O2lDQUU0QyxDQUFPOzs7O2lDQUNqQyxDQUFVOzs7O0lBRXRCLFVBQVU7WUFBVixVQUFVOztBQUNILFdBRFAsVUFBVSxDQUNGLEtBQUssRUFBRTswQkFEZixVQUFVOztBQUVaLCtCQUZFLFVBQVUsNkNBRU4sS0FBSyxFQUFFO0FBQ2IsUUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztHQUN0Qzs7ZUFKRyxVQUFVOztXQU1BLDBCQUFHO0FBQ2YsVUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLFVBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUU7O0FBRTNCLFlBQU0sWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDdkQsbUJBQVcsR0FBTSxZQUFZLENBQUMsV0FBVyxFQUFFLFNBQUksQ0FBQyxHQUFHLElBQUksWUFBWSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFBQyxDQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFJLENBQUMsR0FBRyxHQUFHLFlBQVksQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUcsQ0FBQztPQUM5STtBQUNELGFBQU8sV0FBVyxDQUFDO0tBQ3BCOzs7V0FFSyxnQkFBQyxLQUFLLEVBQUU7QUFDWixVQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUNyQyxVQUFJLFNBQVMsRUFBRTtBQUNiLFlBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLG1CQUFNLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN2RSxNQUFNO0FBQ0wsWUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLG1CQUFNLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN4RDtLQUNGOzs7V0FFZ0IsNkJBQUc7QUFDbEIsVUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDO0FBQ25ELFVBQUksU0FBUyxFQUFFO0FBQ2IsWUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsbUJBQU0sV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ3ZFO0tBQ0Y7OztXQUVLLGtCQUFHO0FBQ1AsYUFDSSw0Q0FBTyxHQUFHLEVBQUMsV0FBVztBQUNuQixpQkFBUyxFQUFDLGlDQUFpQztBQUMzQyxZQUFJLEVBQUMsTUFBTTtBQUNYLGdCQUFRLEVBQUcsSUFBSSxDQUFDLE1BQVE7QUFDeEIsb0JBQVksRUFBRyxJQUFJLENBQUMsY0FBYyxFQUFJLEdBQUcsQ0FDOUM7S0FDSDs7O1NBeENHLFVBQVU7OztBQTJDaEIsVUFBVSxDQUFDLFNBQVMsR0FBRztBQUNyQixlQUFhLEVBQUUsaUJBQVUsSUFBSSxDQUFDLFVBQVU7QUFDeEMsY0FBWSxFQUFFLGlCQUFVLE1BQU07QUFDOUIsWUFBVSxFQUFFLGlCQUFVLE1BQU07Q0FDN0IsQ0FBQzs7cUJBRWEsVUFBVSIsImZpbGUiOiI0Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBxdW90ZXM6IDAgKi9cbi8qIGVzbGludCBtYXgtbGVuOiAwICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBQcm9wVHlwZXMgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi4vQ29uc3QnO1xuXG5jbGFzcyBEYXRlRmlsdGVyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5maWx0ZXIgPSB0aGlzLmZpbHRlci5iaW5kKHRoaXMpO1xuICB9XG5cbiAgc2V0RGVmYXVsdERhdGUoKSB7XG4gICAgbGV0IGRlZmF1bHREYXRlID0gJyc7XG4gICAgaWYgKHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIC8vIFNldCB0aGUgYXBwcm9wcmlhdGUgZm9ybWF0IGZvciB0aGUgaW5wdXQgdHlwZT1kYXRlLCBpLmUuIFwiWVlZWS1NTS1ERFwiXG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBuZXcgRGF0ZSh0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSk7XG4gICAgICBkZWZhdWx0RGF0ZSA9IGAke2RlZmF1bHRWYWx1ZS5nZXRGdWxsWWVhcigpfS0keyhcIjBcIiArIChkZWZhdWx0VmFsdWUuZ2V0TW9udGgoKSArIDEpKS5zbGljZSgtMil9LSR7KFwiMFwiICsgZGVmYXVsdFZhbHVlLmdldERhdGUoKSkuc2xpY2UoLTIpfWA7XG4gICAgfVxuICAgIHJldHVybiBkZWZhdWx0RGF0ZTtcbiAgfVxuXG4gIGZpbHRlcihldmVudCkge1xuICAgIGNvbnN0IGRhdGVWYWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICBpZiAoZGF0ZVZhbHVlKSB7XG4gICAgICB0aGlzLnByb3BzLmZpbHRlckhhbmRsZXIobmV3IERhdGUoZGF0ZVZhbHVlKSwgQ29uc3QuRklMVEVSX1RZUEUuREFURSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvcHMuZmlsdGVySGFuZGxlcihudWxsLCBDb25zdC5GSUxURVJfVFlQRS5EQVRFKTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCBkYXRlVmFsdWUgPSB0aGlzLnJlZnMuaW5wdXREYXRlLmRlZmF1bHRWYWx1ZTtcbiAgICBpZiAoZGF0ZVZhbHVlKSB7XG4gICAgICB0aGlzLnByb3BzLmZpbHRlckhhbmRsZXIobmV3IERhdGUoZGF0ZVZhbHVlKSwgQ29uc3QuRklMVEVSX1RZUEUuREFURSk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICAgIDxpbnB1dCByZWY9J2lucHV0RGF0ZSdcbiAgICAgICAgICAgY2xhc3NOYW1lPSdmaWx0ZXIgZGF0ZS1maWx0ZXIgZm9ybS1jb250cm9sJ1xuICAgICAgICAgICB0eXBlPSdkYXRlJ1xuICAgICAgICAgICBvbkNoYW5nZT17IHRoaXMuZmlsdGVyIH1cbiAgICAgICAgICAgZGVmYXVsdFZhbHVlPXsgdGhpcy5zZXREZWZhdWx0RGF0ZSgpIH0gLz5cbiAgICApO1xuICB9XG59XG5cbkRhdGVGaWx0ZXIucHJvcFR5cGVzID0ge1xuICBmaWx0ZXJIYW5kbGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5vYmplY3QsXG4gIGNvbHVtbk5hbWU6IFByb3BUeXBlcy5zdHJpbmdcbn07XG5cbmV4cG9ydCBkZWZhdWx0IERhdGVGaWx0ZXI7XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9maWx0ZXJzL0RhdGUuanNcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9"); -},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _Const = __webpack_require__(3);\n\nvar _Const2 = _interopRequireDefault(_Const);\n\nvar TextFilter = (function (_Component) {\n _inherits(TextFilter, _Component);\n\n function TextFilter(props) {\n _classCallCheck(this, TextFilter);\n\n _get(Object.getPrototypeOf(TextFilter.prototype), 'constructor', this).call(this, props);\n this.filter = this.filter.bind(this);\n this.timeout = null;\n }\n\n _createClass(TextFilter, [{\n key: 'filter',\n value: function filter(event) {\n var _this = this;\n\n if (this.timeout) {\n clearTimeout(this.timeout);\n }\n var filterValue = event.target.value;\n this.timeout = setTimeout(function () {\n _this.props.filterHandler(filterValue, _Const2['default'].FILTER_TYPE.TEXT);\n }, this.props.delay);\n }\n }, {\n key: 'componentDidMount',\n value: function componentDidMount() {\n var defaultValue = this.refs.inputText.defaultValue;\n if (defaultValue) {\n this.props.filterHandler(defaultValue, _Const2['default'].FILTER_TYPE.TEXT);\n }\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n clearTimeout(this.timeout);\n }\n }, {\n key: 'render',\n value: function render() {\n var _props = this.props;\n var placeholder = _props.placeholder;\n var columnName = _props.columnName;\n var defaultValue = _props.defaultValue;\n\n return _react2['default'].createElement('input', { ref: 'inputText',\n className: 'filter text-filter form-control',\n type: 'text',\n onChange: this.filter,\n placeholder: placeholder || 'Enter ' + columnName + '...',\n defaultValue: defaultValue ? defaultValue : '' });\n }\n }]);\n\n return TextFilter;\n})(_react.Component);\n\nTextFilter.propTypes = {\n filterHandler: _react.PropTypes.func.isRequired,\n defaultValue: _react.PropTypes.string,\n delay: _react.PropTypes.number,\n placeholder: _react.PropTypes.string,\n columnName: _react.PropTypes.string\n};\n\nTextFilter.defaultProps = {\n delay: _Const2['default'].FILTER_DELAY\n};\n\nexports['default'] = TextFilter;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZmlsdGVycy9UZXh0LmpzPzIxYWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztpQ0FBNEMsQ0FBTzs7OztpQ0FDakMsQ0FBVTs7OztJQUV0QixVQUFVO1lBQVYsVUFBVTs7QUFDSCxXQURQLFVBQVUsQ0FDRixLQUFLLEVBQUU7MEJBRGYsVUFBVTs7QUFFWiwrQkFGRSxVQUFVLDZDQUVOLEtBQUssRUFBRTtBQUNiLFFBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsUUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7R0FDckI7O2VBTEcsVUFBVTs7V0FPUixnQkFBQyxLQUFLLEVBQUU7OztBQUNaLFVBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUNoQixvQkFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztPQUM1QjtBQUNELFVBQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQ3ZDLFVBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLFlBQU07QUFDOUIsY0FBSyxLQUFLLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxtQkFBTSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDL0QsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3RCOzs7V0FFZ0IsNkJBQUc7QUFDbEIsVUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDO0FBQ3RELFVBQUksWUFBWSxFQUFFO0FBQ2hCLFlBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxtQkFBTSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDaEU7S0FDRjs7O1dBRW1CLGdDQUFHO0FBQ3JCLGtCQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQzVCOzs7V0FFSyxrQkFBRzttQkFDMkMsSUFBSSxDQUFDLEtBQUs7VUFBcEQsV0FBVyxVQUFYLFdBQVc7VUFBRSxVQUFVLFVBQVYsVUFBVTtVQUFFLFlBQVksVUFBWixZQUFZOztBQUM3QyxhQUNFLDRDQUFPLEdBQUcsRUFBQyxXQUFXO0FBQ3BCLGlCQUFTLEVBQUMsaUNBQWlDO0FBQzNDLFlBQUksRUFBQyxNQUFNO0FBQ1gsZ0JBQVEsRUFBRyxJQUFJLENBQUMsTUFBUTtBQUN4QixtQkFBVyxFQUFHLFdBQVcsZUFBYSxVQUFVLFFBQU87QUFDdkQsb0JBQVksRUFBRyxZQUFZLEdBQUcsWUFBWSxHQUFHLEVBQUksR0FBRyxDQUN0RDtLQUNIOzs7U0F0Q0csVUFBVTs7O0FBeUNoQixVQUFVLENBQUMsU0FBUyxHQUFHO0FBQ3JCLGVBQWEsRUFBRSxpQkFBVSxJQUFJLENBQUMsVUFBVTtBQUN4QyxjQUFZLEVBQUUsaUJBQVUsTUFBTTtBQUM5QixPQUFLLEVBQUUsaUJBQVUsTUFBTTtBQUN2QixhQUFXLEVBQUUsaUJBQVUsTUFBTTtBQUM3QixZQUFVLEVBQUUsaUJBQVUsTUFBTTtDQUM3QixDQUFDOztBQUVGLFVBQVUsQ0FBQyxZQUFZLEdBQUc7QUFDeEIsT0FBSyxFQUFFLG1CQUFNLFlBQVk7Q0FDMUIsQ0FBQzs7cUJBRWEsVUFBVSIsImZpbGUiOiI0My5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFByb3BUeXBlcyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBDb25zdCBmcm9tICcuLi9Db25zdCc7XG5cbmNsYXNzIFRleHRGaWx0ZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmZpbHRlciA9IHRoaXMuZmlsdGVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy50aW1lb3V0ID0gbnVsbDtcbiAgfVxuXG4gIGZpbHRlcihldmVudCkge1xuICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucHJvcHMuZmlsdGVySGFuZGxlcihmaWx0ZXJWYWx1ZSwgQ29uc3QuRklMVEVSX1RZUEUuVEVYVCk7XG4gICAgfSwgdGhpcy5wcm9wcy5kZWxheSk7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzLnJlZnMuaW5wdXRUZXh0LmRlZmF1bHRWYWx1ZTtcbiAgICBpZiAoZGVmYXVsdFZhbHVlKSB7XG4gICAgICB0aGlzLnByb3BzLmZpbHRlckhhbmRsZXIoZGVmYXVsdFZhbHVlLCBDb25zdC5GSUxURVJfVFlQRS5URVhUKTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IHBsYWNlaG9sZGVyLCBjb2x1bW5OYW1lLCBkZWZhdWx0VmFsdWUgfSA9IHRoaXMucHJvcHM7XG4gICAgcmV0dXJuIChcbiAgICAgIDxpbnB1dCByZWY9J2lucHV0VGV4dCdcbiAgICAgICAgY2xhc3NOYW1lPSdmaWx0ZXIgdGV4dC1maWx0ZXIgZm9ybS1jb250cm9sJ1xuICAgICAgICB0eXBlPSd0ZXh0J1xuICAgICAgICBvbkNoYW5nZT17IHRoaXMuZmlsdGVyIH1cbiAgICAgICAgcGxhY2Vob2xkZXI9eyBwbGFjZWhvbGRlciB8fCBgRW50ZXIgJHtjb2x1bW5OYW1lfS4uLmAgfVxuICAgICAgICBkZWZhdWx0VmFsdWU9eyBkZWZhdWx0VmFsdWUgPyBkZWZhdWx0VmFsdWUgOiAnJyB9IC8+XG4gICAgKTtcbiAgfVxufVxuXG5UZXh0RmlsdGVyLnByb3BUeXBlcyA9IHtcbiAgZmlsdGVySGFuZGxlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBkZWxheTogUHJvcFR5cGVzLm51bWJlcixcbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNvbHVtbk5hbWU6IFByb3BUeXBlcy5zdHJpbmdcbn07XG5cblRleHRGaWx0ZXIuZGVmYXVsdFByb3BzID0ge1xuICBkZWxheTogQ29uc3QuRklMVEVSX0RFTEFZXG59O1xuXG5leHBvcnQgZGVmYXVsdCBUZXh0RmlsdGVyO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvZmlsdGVycy9UZXh0LmpzXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _Const = __webpack_require__(3);\n\nvar _Const2 = _interopRequireDefault(_Const);\n\nvar RegexFilter = (function (_Component) {\n _inherits(RegexFilter, _Component);\n\n function RegexFilter(props) {\n _classCallCheck(this, RegexFilter);\n\n _get(Object.getPrototypeOf(RegexFilter.prototype), 'constructor', this).call(this, props);\n this.filter = this.filter.bind(this);\n this.timeout = null;\n }\n\n _createClass(RegexFilter, [{\n key: 'filter',\n value: function filter(event) {\n var _this = this;\n\n if (this.timeout) {\n clearTimeout(this.timeout);\n }\n var filterValue = event.target.value;\n this.timeout = setTimeout(function () {\n _this.props.filterHandler(filterValue, _Const2['default'].FILTER_TYPE.REGEX);\n }, this.props.delay);\n }\n }, {\n key: 'componentDidMount',\n value: function componentDidMount() {\n var value = this.refs.inputText.defaultValue;\n if (value) {\n this.props.filterHandler(value, _Const2['default'].FILTER_TYPE.REGEX);\n }\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n clearTimeout(this.timeout);\n }\n }, {\n key: 'render',\n value: function render() {\n var _props = this.props;\n var defaultValue = _props.defaultValue;\n var placeholder = _props.placeholder;\n var columnName = _props.columnName;\n\n return _react2['default'].createElement('input', { ref: 'inputText',\n className: 'filter text-filter form-control',\n type: 'text',\n onChange: this.filter,\n placeholder: placeholder || 'Enter Regex for ' + columnName + '...',\n defaultValue: defaultValue ? defaultValue : '' });\n }\n }]);\n\n return RegexFilter;\n})(_react.Component);\n\nRegexFilter.propTypes = {\n filterHandler: _react.PropTypes.func.isRequired,\n defaultValue: _react.PropTypes.string,\n delay: _react.PropTypes.number,\n placeholder: _react.PropTypes.string,\n columnName: _react.PropTypes.string\n};\n\nRegexFilter.defaultProps = {\n delay: _Const2['default'].FILTER_DELAY\n};\n\nexports['default'] = RegexFilter;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZmlsdGVycy9SZWdleC5qcz8wNzY3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7aUNBQTRDLENBQU87Ozs7aUNBQ2pDLENBQVU7Ozs7SUFFdEIsV0FBVztZQUFYLFdBQVc7O0FBQ0osV0FEUCxXQUFXLENBQ0gsS0FBSyxFQUFFOzBCQURmLFdBQVc7O0FBRWIsK0JBRkUsV0FBVyw2Q0FFUCxLQUFLLEVBQUU7QUFDYixRQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JDLFFBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0dBQ3JCOztlQUxHLFdBQVc7O1dBT1QsZ0JBQUMsS0FBSyxFQUFFOzs7QUFDWixVQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDaEIsb0JBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7T0FDNUI7QUFDRCxVQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUN2QyxVQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxZQUFNO0FBQzlCLGNBQUssS0FBSyxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsbUJBQU0sV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO09BQ2hFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUN0Qjs7O1dBRWdCLDZCQUFHO0FBQ2xCLFVBQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQztBQUMvQyxVQUFJLEtBQUssRUFBRTtBQUNULFlBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxtQkFBTSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7T0FDMUQ7S0FDRjs7O1dBRW1CLGdDQUFHO0FBQ3JCLGtCQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQzVCOzs7V0FFSyxrQkFBRzttQkFDMkMsSUFBSSxDQUFDLEtBQUs7VUFBcEQsWUFBWSxVQUFaLFlBQVk7VUFBRSxXQUFXLFVBQVgsV0FBVztVQUFFLFVBQVUsVUFBVixVQUFVOztBQUM3QyxhQUNFLDRDQUFPLEdBQUcsRUFBQyxXQUFXO0FBQ2xCLGlCQUFTLEVBQUMsaUNBQWlDO0FBQzNDLFlBQUksRUFBQyxNQUFNO0FBQ1gsZ0JBQVEsRUFBRyxJQUFJLENBQUMsTUFBUTtBQUN4QixtQkFBVyxFQUFHLFdBQVcseUJBQXVCLFVBQVUsUUFBTztBQUNqRSxvQkFBWSxFQUFJLFlBQVksR0FBSSxZQUFZLEdBQUcsRUFBSSxHQUFHLENBQzFEO0tBQ0g7OztTQXRDRyxXQUFXOzs7QUF5Q2pCLFdBQVcsQ0FBQyxTQUFTLEdBQUc7QUFDdEIsZUFBYSxFQUFFLGlCQUFVLElBQUksQ0FBQyxVQUFVO0FBQ3hDLGNBQVksRUFBRSxpQkFBVSxNQUFNO0FBQzlCLE9BQUssRUFBRSxpQkFBVSxNQUFNO0FBQ3ZCLGFBQVcsRUFBRSxpQkFBVSxNQUFNO0FBQzdCLFlBQVUsRUFBRSxpQkFBVSxNQUFNO0NBQzdCLENBQUM7O0FBRUYsV0FBVyxDQUFDLFlBQVksR0FBRztBQUN6QixPQUFLLEVBQUUsbUJBQU0sWUFBWTtDQUMxQixDQUFDOztxQkFFYSxXQUFXIiwiZmlsZSI6IjQ0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgUHJvcFR5cGVzIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4uL0NvbnN0JztcblxuY2xhc3MgUmVnZXhGaWx0ZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmZpbHRlciA9IHRoaXMuZmlsdGVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy50aW1lb3V0ID0gbnVsbDtcbiAgfVxuXG4gIGZpbHRlcihldmVudCkge1xuICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucHJvcHMuZmlsdGVySGFuZGxlcihmaWx0ZXJWYWx1ZSwgQ29uc3QuRklMVEVSX1RZUEUuUkVHRVgpO1xuICAgIH0sIHRoaXMucHJvcHMuZGVsYXkpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnJlZnMuaW5wdXRUZXh0LmRlZmF1bHRWYWx1ZTtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMucHJvcHMuZmlsdGVySGFuZGxlcih2YWx1ZSwgQ29uc3QuRklMVEVSX1RZUEUuUkVHRVgpO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgZGVmYXVsdFZhbHVlLCBwbGFjZWhvbGRlciwgY29sdW1uTmFtZSB9ID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4gKFxuICAgICAgPGlucHV0IHJlZj0naW5wdXRUZXh0J1xuICAgICAgICAgIGNsYXNzTmFtZT0nZmlsdGVyIHRleHQtZmlsdGVyIGZvcm0tY29udHJvbCdcbiAgICAgICAgICB0eXBlPSd0ZXh0J1xuICAgICAgICAgIG9uQ2hhbmdlPXsgdGhpcy5maWx0ZXIgfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXsgcGxhY2Vob2xkZXIgfHwgYEVudGVyIFJlZ2V4IGZvciAke2NvbHVtbk5hbWV9Li4uYCB9XG4gICAgICAgICAgZGVmYXVsdFZhbHVlPXsgKGRlZmF1bHRWYWx1ZSkgPyBkZWZhdWx0VmFsdWUgOiAnJyB9IC8+XG4gICAgKTtcbiAgfVxufVxuXG5SZWdleEZpbHRlci5wcm9wVHlwZXMgPSB7XG4gIGZpbHRlckhhbmRsZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGVsYXk6IFByb3BUeXBlcy5udW1iZXIsXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjb2x1bW5OYW1lOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG5SZWdleEZpbHRlci5kZWZhdWx0UHJvcHMgPSB7XG4gIGRlbGF5OiBDb25zdC5GSUxURVJfREVMQVlcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJlZ2V4RmlsdGVyO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvZmlsdGVycy9SZWdleC5qc1xuICoqLyJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _classnames = __webpack_require__(6);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _Const = __webpack_require__(3);\n\nvar _Const2 = _interopRequireDefault(_Const);\n\nvar SelectFilter = (function (_Component) {\n _inherits(SelectFilter, _Component);\n\n function SelectFilter(props) {\n _classCallCheck(this, SelectFilter);\n\n _get(Object.getPrototypeOf(SelectFilter.prototype), 'constructor', this).call(this, props);\n this.filter = this.filter.bind(this);\n this.state = {\n isPlaceholderSelected: this.props.defaultValue === undefined || !this.props.options.hasOwnProperty(this.props.defaultValue)\n };\n }\n\n _createClass(SelectFilter, [{\n key: 'filter',\n value: function filter(event) {\n var value = event.target.value;\n\n this.setState({ isPlaceholderSelected: value === '' });\n this.props.filterHandler(value, _Const2['default'].FILTER_TYPE.SELECT);\n }\n }, {\n key: 'getOptions',\n value: function getOptions() {\n var optionTags = [];\n var _props = this.props;\n var options = _props.options;\n var placeholder = _props.placeholder;\n var columnName = _props.columnName;\n\n optionTags.push(_react2['default'].createElement(\n 'option',\n { key: '-1', value: '' },\n placeholder || 'Select ' + columnName + '...'\n ));\n Object.keys(options).map(function (key) {\n optionTags.push(_react2['default'].createElement(\n 'option',\n { key: key, value: key },\n options[key]\n ));\n });\n return optionTags;\n }\n }, {\n key: 'componentDidMount',\n value: function componentDidMount() {\n var value = this.refs.selectInput.value;\n if (value) {\n this.props.filterHandler(value, _Const2['default'].FILTER_TYPE.SELECT);\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var selectClass = (0, _classnames2['default'])('filter', 'select-filter', 'form-control', { 'placeholder-selected': this.state.isPlaceholderSelected });\n\n return _react2['default'].createElement(\n 'select',\n { ref: 'selectInput',\n className: selectClass,\n onChange: this.filter,\n defaultValue: this.props.defaultValue !== undefined ? this.props.defaultValue : '' },\n this.getOptions()\n );\n }\n }]);\n\n return SelectFilter;\n})(_react.Component);\n\nSelectFilter.propTypes = {\n filterHandler: _react.PropTypes.func.isRequired,\n options: _react.PropTypes.object.isRequired,\n placeholder: _react.PropTypes.string,\n columnName: _react.PropTypes.string\n};\n\nexports['default'] = SelectFilter;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZmlsdGVycy9TZWxlY3QuanM/YmYyNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O2lDQUE0QyxDQUFPOzs7O3NDQUM5QixDQUFZOzs7O2lDQUNmLENBQVU7Ozs7SUFFdEIsWUFBWTtZQUFaLFlBQVk7O0FBQ0wsV0FEUCxZQUFZLENBQ0osS0FBSyxFQUFFOzBCQURmLFlBQVk7O0FBRWQsK0JBRkUsWUFBWSw2Q0FFUixLQUFLLEVBQUU7QUFDYixRQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JDLFFBQUksQ0FBQyxLQUFLLEdBQUc7QUFDWCwyQkFBcUIsRUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksS0FBSyxTQUFTLElBQ3JELENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFFO0tBQ3JFLENBQUM7R0FDSDs7ZUFSRyxZQUFZOztXQVVWLGdCQUFDLEtBQUssRUFBRTtVQUNKLEtBQUssR0FBSyxLQUFLLENBQUMsTUFBTSxDQUF0QixLQUFLOztBQUNiLFVBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxxQkFBcUIsRUFBRyxLQUFLLEtBQUssRUFBRyxFQUFFLENBQUMsQ0FBQztBQUN6RCxVQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsbUJBQU0sV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQzNEOzs7V0FFUyxzQkFBRztBQUNYLFVBQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQzttQkFDdUIsSUFBSSxDQUFDLEtBQUs7VUFBL0MsT0FBTyxVQUFQLE9BQU87VUFBRSxXQUFXLFVBQVgsV0FBVztVQUFFLFVBQVUsVUFBVixVQUFVOztBQUN4QyxnQkFBVSxDQUFDLElBQUksQ0FDYjs7VUFBUSxHQUFHLEVBQUMsSUFBSSxFQUFDLEtBQUssRUFBQyxFQUFFO1FBQUcsV0FBVyxnQkFBYyxVQUFVLFFBQUs7T0FBVyxDQUMvRSxDQUFDO0FBQ0gsWUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsYUFBRyxFQUFJO0FBQzlCLGtCQUFVLENBQUMsSUFBSSxDQUFDOztZQUFRLEdBQUcsRUFBRyxHQUFLLEVBQUMsS0FBSyxFQUFHLEdBQUs7VUFBRyxPQUFPLENBQUMsR0FBRyxDQUFDO1NBQVcsQ0FBQyxDQUFDO09BQzlFLENBQUMsQ0FBQztBQUNILGFBQU8sVUFBVSxDQUFDO0tBQ25COzs7V0FFZ0IsNkJBQUc7QUFDbEIsVUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO0FBQzFDLFVBQUksS0FBSyxFQUFFO0FBQ1QsWUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLG1CQUFNLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztPQUMzRDtLQUNGOzs7V0FFSyxrQkFBRztBQUNQLFVBQU0sV0FBVyxHQUFHLDZCQUFTLFFBQVEsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUM1RCxFQUFFLHNCQUFzQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDOztBQUV4RSxhQUNFOztVQUFRLEdBQUcsRUFBQyxhQUFhO0FBQ3JCLG1CQUFTLEVBQUcsV0FBYTtBQUN6QixrQkFBUSxFQUFHLElBQUksQ0FBQyxNQUFRO0FBQ3hCLHNCQUFZLEVBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEtBQUssU0FBUyxHQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLEVBQUk7UUFDdkYsSUFBSSxDQUFDLFVBQVUsRUFBRTtPQUNaLENBQ1Q7S0FDSDs7O1NBL0NHLFlBQVk7OztBQWtEbEIsWUFBWSxDQUFDLFNBQVMsR0FBRztBQUN2QixlQUFhLEVBQUUsaUJBQVUsSUFBSSxDQUFDLFVBQVU7QUFDeEMsU0FBTyxFQUFFLGlCQUFVLE1BQU0sQ0FBQyxVQUFVO0FBQ3BDLGFBQVcsRUFBRSxpQkFBVSxNQUFNO0FBQzdCLFlBQVUsRUFBRSxpQkFBVSxNQUFNO0NBQzdCLENBQUM7O3FCQUVhLFlBQVkiLCJmaWxlIjoiNDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBQcm9wVHlwZXMgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NTZXQgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi4vQ29uc3QnO1xuXG5jbGFzcyBTZWxlY3RGaWx0ZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmZpbHRlciA9IHRoaXMuZmlsdGVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGlzUGxhY2Vob2xkZXJTZWxlY3RlZDogKHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgIXRoaXMucHJvcHMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSh0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSkpXG4gICAgfTtcbiAgfVxuXG4gIGZpbHRlcihldmVudCkge1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IGV2ZW50LnRhcmdldDtcbiAgICB0aGlzLnNldFN0YXRlKHsgaXNQbGFjZWhvbGRlclNlbGVjdGVkOiAodmFsdWUgPT09ICcnKSB9KTtcbiAgICB0aGlzLnByb3BzLmZpbHRlckhhbmRsZXIodmFsdWUsIENvbnN0LkZJTFRFUl9UWVBFLlNFTEVDVCk7XG4gIH1cblxuICBnZXRPcHRpb25zKCkge1xuICAgIGNvbnN0IG9wdGlvblRhZ3MgPSBbXTtcbiAgICBjb25zdCB7IG9wdGlvbnMsIHBsYWNlaG9sZGVyLCBjb2x1bW5OYW1lIH0gPSB0aGlzLnByb3BzO1xuICAgIG9wdGlvblRhZ3MucHVzaCgoXG4gICAgICA8b3B0aW9uIGtleT0nLTEnIHZhbHVlPScnPnsgcGxhY2Vob2xkZXIgfHwgYFNlbGVjdCAke2NvbHVtbk5hbWV9Li4uYCB9PC9vcHRpb24+XG4gICAgKSk7XG4gICAgT2JqZWN0LmtleXMob3B0aW9ucykubWFwKGtleSA9PiB7XG4gICAgICBvcHRpb25UYWdzLnB1c2goPG9wdGlvbiBrZXk9eyBrZXkgfSB2YWx1ZT17IGtleSB9Pnsgb3B0aW9uc1trZXldIH08L29wdGlvbj4pO1xuICAgIH0pO1xuICAgIHJldHVybiBvcHRpb25UYWdzO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnJlZnMuc2VsZWN0SW5wdXQudmFsdWU7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLnByb3BzLmZpbHRlckhhbmRsZXIodmFsdWUsIENvbnN0LkZJTFRFUl9UWVBFLlNFTEVDVCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHNlbGVjdENsYXNzID0gY2xhc3NTZXQoJ2ZpbHRlcicsICdzZWxlY3QtZmlsdGVyJywgJ2Zvcm0tY29udHJvbCcsXG4gICAgICAgICAgICAgIHsgJ3BsYWNlaG9sZGVyLXNlbGVjdGVkJzogdGhpcy5zdGF0ZS5pc1BsYWNlaG9sZGVyU2VsZWN0ZWQgfSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPHNlbGVjdCByZWY9J3NlbGVjdElucHV0J1xuICAgICAgICAgIGNsYXNzTmFtZT17IHNlbGVjdENsYXNzIH1cbiAgICAgICAgICBvbkNoYW5nZT17IHRoaXMuZmlsdGVyIH1cbiAgICAgICAgICBkZWZhdWx0VmFsdWU9eyAodGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkgPyB0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSA6ICcnIH0gPlxuICAgICAgICB7IHRoaXMuZ2V0T3B0aW9ucygpIH1cbiAgICAgIDwvc2VsZWN0PlxuICAgICk7XG4gIH1cbn1cblxuU2VsZWN0RmlsdGVyLnByb3BUeXBlcyA9IHtcbiAgZmlsdGVySGFuZGxlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb3B0aW9uczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY29sdW1uTmFtZTogUHJvcFR5cGVzLnN0cmluZ1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2VsZWN0RmlsdGVyO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvZmlsdGVycy9TZWxlY3QuanNcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _classnames = __webpack_require__(6);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _Const = __webpack_require__(3);\n\nvar _Const2 = _interopRequireDefault(_Const);\n\nvar legalComparators = ['=', '>', '>=', '<', '<=', '!='];\n\nvar NumberFilter = (function (_Component) {\n _inherits(NumberFilter, _Component);\n\n function NumberFilter(props) {\n _classCallCheck(this, NumberFilter);\n\n _get(Object.getPrototypeOf(NumberFilter.prototype), 'constructor', this).call(this, props);\n this.numberComparators = this.props.numberComparators || legalComparators;\n this.timeout = null;\n this.state = {\n isPlaceholderSelected: this.props.defaultValue === undefined || this.props.defaultValue.number === undefined || this.props.options && this.props.options.indexOf(this.props.defaultValue.number) === -1\n };\n this.onChangeNumber = this.onChangeNumber.bind(this);\n this.onChangeNumberSet = this.onChangeNumberSet.bind(this);\n this.onChangeComparator = this.onChangeComparator.bind(this);\n }\n\n _createClass(NumberFilter, [{\n key: 'onChangeNumber',\n value: function onChangeNumber(event) {\n var _this = this;\n\n var comparator = this.refs.numberFilterComparator.value;\n if (comparator === '') {\n return;\n }\n if (this.timeout) {\n clearTimeout(this.timeout);\n }\n var filterValue = event.target.value;\n this.timeout = setTimeout(function () {\n _this.props.filterHandler({ number: filterValue, comparator: comparator }, _Const2['default'].FILTER_TYPE.NUMBER);\n }, this.props.delay);\n }\n }, {\n key: 'onChangeNumberSet',\n value: function onChangeNumberSet(event) {\n var comparator = this.refs.numberFilterComparator.value;\n var value = event.target.value;\n\n this.setState({ isPlaceholderSelected: value === '' });\n if (comparator === '') {\n return;\n }\n this.props.filterHandler({ number: value, comparator: comparator }, _Const2['default'].FILTER_TYPE.NUMBER);\n }\n }, {\n key: 'onChangeComparator',\n value: function onChangeComparator(event) {\n var value = this.refs.numberFilter.value;\n var comparator = event.target.value;\n if (value === '') {\n return;\n }\n this.props.filterHandler({ number: value, comparator: comparator }, _Const2['default'].FILTER_TYPE.NUMBER);\n }\n }, {\n key: 'getComparatorOptions',\n value: function getComparatorOptions() {\n var optionTags = [];\n optionTags.push(_react2['default'].createElement('option', { key: '-1' }));\n for (var i = 0; i < this.numberComparators.length; i++) {\n optionTags.push(_react2['default'].createElement(\n 'option',\n { key: i, value: this.numberComparators[i] },\n this.numberComparators[i]\n ));\n }\n return optionTags;\n }\n }, {\n key: 'getNumberOptions',\n value: function getNumberOptions() {\n var optionTags = [];\n var options = this.props.options;\n\n optionTags.push(_react2['default'].createElement(\n 'option',\n { key: '-1', value: '' },\n this.props.placeholder || 'Select ' + this.props.columnName + '...'\n ));\n for (var i = 0; i < options.length; i++) {\n optionTags.push(_react2['default'].createElement(\n 'option',\n { key: i, value: options[i] },\n options[i]\n ));\n }\n return optionTags;\n }\n }, {\n key: 'componentDidMount',\n value: function componentDidMount() {\n var comparator = this.refs.numberFilterComparator.value;\n var number = this.refs.numberFilter.value;\n if (comparator && number) {\n this.props.filterHandler({ number: number, comparator: comparator }, _Const2['default'].FILTER_TYPE.NUMBER);\n }\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n clearTimeout(this.timeout);\n }\n }, {\n key: 'render',\n value: function render() {\n var selectClass = (0, _classnames2['default'])('select-filter', 'number-filter-input', 'form-control', { 'placeholder-selected': this.state.isPlaceholderSelected });\n\n return _react2['default'].createElement(\n 'div',\n { className: 'filter number-filter' },\n _react2['default'].createElement(\n 'select',\n { ref: 'numberFilterComparator',\n className: 'number-filter-comparator form-control',\n onChange: this.onChangeComparator,\n defaultValue: this.props.defaultValue ? this.props.defaultValue.comparator : '' },\n this.getComparatorOptions()\n ),\n this.props.options ? _react2['default'].createElement(\n 'select',\n { ref: 'numberFilter',\n className: selectClass,\n onChange: this.onChangeNumberSet,\n defaultValue: this.props.defaultValue ? this.props.defaultValue.number : '' },\n this.getNumberOptions()\n ) : _react2['default'].createElement('input', { ref: 'numberFilter',\n type: 'number',\n className: 'number-filter-input form-control',\n placeholder: this.props.placeholder || 'Enter ' + this.props.columnName + '...',\n onChange: this.onChangeNumber,\n defaultValue: this.props.defaultValue ? this.props.defaultValue.number : '' })\n );\n }\n }]);\n\n return NumberFilter;\n})(_react.Component);\n\nNumberFilter.propTypes = {\n filterHandler: _react.PropTypes.func.isRequired,\n options: _react.PropTypes.arrayOf(_react.PropTypes.number),\n defaultValue: _react.PropTypes.shape({\n number: _react.PropTypes.number,\n comparator: _react.PropTypes.oneOf(legalComparators)\n }),\n delay: _react.PropTypes.number,\n /* eslint consistent-return: 0 */\n numberComparators: function numberComparators(props, propName) {\n if (!props[propName]) {\n return;\n }\n for (var i = 0; i < props[propName].length; i++) {\n var comparatorIsValid = false;\n for (var j = 0; j < legalComparators.length; j++) {\n if (legalComparators[j] === props[propName][i]) {\n comparatorIsValid = true;\n break;\n }\n }\n if (!comparatorIsValid) {\n return new Error('Number comparator provided is not supported.\\n Use only ' + legalComparators);\n }\n }\n },\n placeholder: _react.PropTypes.string,\n columnName: _react.PropTypes.string\n};\n\nNumberFilter.defaultProps = {\n delay: _Const2['default'].FILTER_DELAY\n};\n\nexports['default'] = NumberFilter;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZmlsdGVycy9OdW1iZXIuanM/ZmVkZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O2lDQUE0QyxDQUFPOzs7O3NDQUM5QixDQUFZOzs7O2lDQUNmLENBQVU7Ozs7QUFFNUIsSUFBTSxnQkFBZ0IsR0FBRyxDQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFFLENBQUM7O0lBRXZELFlBQVk7WUFBWixZQUFZOztBQUNMLFdBRFAsWUFBWSxDQUNKLEtBQUssRUFBRTswQkFEZixZQUFZOztBQUVkLCtCQUZFLFlBQVksNkNBRVIsS0FBSyxFQUFFO0FBQ2IsUUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLElBQUksZ0JBQWdCLENBQUM7QUFDMUUsUUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDcEIsUUFBSSxDQUFDLEtBQUssR0FBRztBQUNYLDJCQUFxQixFQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxLQUFLLFNBQVMsSUFDM0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFDM0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQ2pCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUc7S0FDeEUsQ0FBQztBQUNGLFFBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckQsUUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0QsUUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FB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QWlCLEVBQUUsMkJBQVMsS0FBSyxFQUFFLFFBQVEsRUFBRTtBQUMzQyxRQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQ3BCLGFBQU87S0FDUjtBQUNELFNBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9DLFVBQUksaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0FBQzlCLFdBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEQsWUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDOUMsMkJBQWlCLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLGdCQUFNO1NBQ1A7T0FDRjtBQUNELFVBQUksQ0FBQyxpQkFBaUIsRUFBRTtBQUN0QixlQUFPLElBQUksS0FBSyx1RUFDSCxnQkFBZ0IsQ0FBRyxDQUFDO09BQ2xDO0tBQ0Y7R0FDRjtBQUNELGFBQVcsRUFBRSxpQkFBVSxNQUFNO0FBQzdCLFlBQVUsRUFBRSxpQkFBVSxNQUFNO0NBQzdCLENBQUM7O0FBRUYsWUFBWSxDQUFDLFlBQVksR0FBRztBQUMxQixPQUFLLEVBQUUsbUJBQU0sWUFBWTtDQUMxQixDQUFDOztxQkFFYSxZQUFZIiwiZmlsZSI6IjQ2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgUHJvcFR5cGVzIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzU2V0IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4uL0NvbnN0JztcblxuY29uc3QgbGVnYWxDb21wYXJhdG9ycyA9IFsgJz0nLCAnPicsICc+PScsICc8JywgJzw9JywgJyE9JyBdO1xuXG5jbGFzcyBOdW1iZXJGaWx0ZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLm51bWJlckNvbXBhcmF0b3JzID0gdGhpcy5wcm9wcy5udW1iZXJDb21wYXJhdG9ycyB8fCBsZWdhbENvbXBhcmF0b3JzO1xuICAgIHRoaXMudGltZW91dCA9IG51bGw7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGlzUGxhY2Vob2xkZXJTZWxlY3RlZDogKHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUubnVtYmVyID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgKHRoaXMucHJvcHMub3B0aW9ucyAmJlxuICAgICAgICAgIHRoaXMucHJvcHMub3B0aW9ucy5pbmRleE9mKHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlLm51bWJlcikgPT09IC0xKSlcbiAgICB9O1xuICAgIHRoaXMub25DaGFuZ2VOdW1iZXIgPSB0aGlzLm9uQ2hhbmdlTnVtYmVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5vbkNoYW5nZU51bWJlclNldCA9IHRoaXMub25DaGFuZ2VOdW1iZXJTZXQuYmluZCh0aGlzKTtcbiAgICB0aGlzLm9uQ2hhbmdlQ29tcGFyYXRvciA9IHRoaXMub25DaGFuZ2VDb21wYXJhdG9yLmJpbmQodGhpcyk7XG4gIH1cblxuICBvbkNoYW5nZU51bWJlcihldmVudCkge1xuICAgIGNvbnN0IGNvbXBhcmF0b3IgPSB0aGlzLnJlZnMubnVtYmVyRmlsdGVyQ29tcGFyYXRvci52YWx1ZTtcbiAgICBpZiAoY29tcGFyYXRvciA9PT0gJycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlclZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy5maWx0ZXJIYW5kbGVyKHsgbnVtYmVyOiBmaWx0ZXJWYWx1ZSwgY29tcGFyYXRvciB9LCBDb25zdC5GSUxURVJfVFlQRS5OVU1CRVIpO1xuICAgIH0sIHRoaXMucHJvcHMuZGVsYXkpO1xuICB9XG5cbiAgb25DaGFuZ2VOdW1iZXJTZXQoZXZlbnQpIHtcbiAgICBjb25zdCBjb21wYXJhdG9yID0gdGhpcy5yZWZzLm51bWJlckZpbHRlckNvbXBhcmF0b3IudmFsdWU7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gZXZlbnQudGFyZ2V0O1xuICAgIHRoaXMuc2V0U3RhdGUoeyBpc1BsYWNlaG9sZGVyU2VsZWN0ZWQ6ICh2YWx1ZSA9PT0gJycpIH0pO1xuICAgIGlmIChjb21wYXJhdG9yID09PSAnJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLmZpbHRlckhhbmRsZXIoeyBudW1iZXI6IHZhbHVlLCBjb21wYXJhdG9yIH0sIENvbnN0LkZJTFRFUl9UWVBFLk5VTUJFUik7XG4gIH1cblxuICBvbkNoYW5nZUNvbXBhcmF0b3IoZXZlbnQpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMucmVmcy5udW1iZXJGaWx0ZXIudmFsdWU7XG4gICAgY29uc3QgY29tcGFyYXRvciA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucHJvcHMuZmlsdGVySGFuZGxlcih7IG51bWJlcjogdmFsdWUsIGNvbXBhcmF0b3IgfSwgQ29uc3QuRklMVEVSX1RZUEUuTlVNQkVSKTtcbiAgfVxuXG4gIGdldENvbXBhcmF0b3JPcHRpb25zKCkge1xuICAgIGNvbnN0IG9wdGlvblRhZ3MgPSBbXTtcbiAgICBvcHRpb25UYWdzLnB1c2goPG9wdGlvbiBrZXk9Jy0xJz48L29wdGlvbj4pO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5udW1iZXJDb21wYXJhdG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgb3B0aW9uVGFncy5wdXNoKFxuICAgICAgICA8b3B0aW9uIGtleT17IGkgfSB2YWx1ZT17IHRoaXMubnVtYmVyQ29tcGFyYXRvcnNbaV0gfT5cbiAgICAgICAgICB7IHRoaXMubnVtYmVyQ29tcGFyYXRvcnNbaV0gfVxuICAgICAgICA8L29wdGlvbj5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25UYWdzO1xuICB9XG5cbiAgZ2V0TnVtYmVyT3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25UYWdzID0gW107XG4gICAgY29uc3QgeyBvcHRpb25zIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgb3B0aW9uVGFncy5wdXNoKFxuICAgICAgPG9wdGlvbiBrZXk9Jy0xJyB2YWx1ZT0nJz5cbiAgICAgICAgeyB0aGlzLnByb3BzLnBsYWNlaG9sZGVyIHx8IGBTZWxlY3QgJHt0aGlzLnByb3BzLmNvbHVtbk5hbWV9Li4uYCB9XG4gICAgICA8L29wdGlvbj5cbiAgICApO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgb3B0aW9uVGFncy5wdXNoKDxvcHRpb24ga2V5PXsgaSB9IHZhbHVlPXsgb3B0aW9uc1tpXSB9Pnsgb3B0aW9uc1tpXSB9PC9vcHRpb24+KTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvblRhZ3M7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCBjb21wYXJhdG9yID0gdGhpcy5yZWZzLm51bWJlckZpbHRlckNvbXBhcmF0b3IudmFsdWU7XG4gICAgY29uc3QgbnVtYmVyID0gdGhpcy5yZWZzLm51bWJlckZpbHRlci52YWx1ZTtcbiAgICBpZiAoY29tcGFyYXRvciAmJiBudW1iZXIpIHtcbiAgICAgIHRoaXMucHJvcHMuZmlsdGVySGFuZGxlcih7IG51bWJlciwgY29tcGFyYXRvciB9LCBDb25zdC5GSUxURVJfVFlQRS5OVU1CRVIpO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHNlbGVjdENsYXNzID0gY2xhc3NTZXQoXG4gICAgICAnc2VsZWN0LWZpbHRlcicsICdudW1iZXItZmlsdGVyLWlucHV0JywgJ2Zvcm0tY29udHJvbCcsXG4gICAgICB7ICdwbGFjZWhvbGRlci1zZWxlY3RlZCc6IHRoaXMuc3RhdGUuaXNQbGFjZWhvbGRlclNlbGVjdGVkIH0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPSdmaWx0ZXIgbnVtYmVyLWZpbHRlcic+XG4gICAgICAgIDxzZWxlY3QgcmVmPSdudW1iZXJGaWx0ZXJDb21wYXJhdG9yJ1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT0nbnVtYmVyLWZpbHRlci1jb21wYXJhdG9yIGZvcm0tY29udHJvbCdcbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17IHRoaXMub25DaGFuZ2VDb21wYXJhdG9yIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e1xuICAgICAgICAgICAgICAgICAgKHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlKSA/IHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlLmNvbXBhcmF0b3IgOiAnJ1xuICAgICAgICAgICAgICAgIH0+XG4gICAgICAgICAgeyB0aGlzLmdldENvbXBhcmF0b3JPcHRpb25zKCkgfVxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAge1xuICAgICAgICAgICh0aGlzLnByb3BzLm9wdGlvbnMpID9cbiAgICAgICAgICAgIDxzZWxlY3QgcmVmPSdudW1iZXJGaWx0ZXInXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17IHNlbGVjdENsYXNzIH1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9eyB0aGlzLm9uQ2hhbmdlTnVtYmVyU2V0IH1cbiAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlPXtcbiAgICAgICAgICAgICAgICAodGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUpID8gdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUubnVtYmVyIDogJydcbiAgICAgICAgICAgICAgfT5cbiAgICAgICAgICAgICAgeyB0aGlzLmdldE51bWJlck9wdGlvbnMoKSB9XG4gICAgICAgICAgICA8L3NlbGVjdD4gOlxuICAgICAgICAgICAgPGlucHV0IHJlZj0nbnVtYmVyRmlsdGVyJ1xuICAgICAgICAgICAgICAgICAgIHR5cGU9J251bWJlcidcbiAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9J251bWJlci1maWx0ZXItaW5wdXQgZm9ybS1jb250cm9sJ1xuICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXsgdGhpcy5wcm9wcy5wbGFjZWhvbGRlciB8fCBgRW50ZXIgJHt0aGlzLnByb3BzLmNvbHVtbk5hbWV9Li4uYCB9XG4gICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyB0aGlzLm9uQ2hhbmdlTnVtYmVyIH1cbiAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e1xuICAgICAgICAgICAgICAgICAgICAgKHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlKSA/IHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlLm51bWJlciA6ICcnXG4gICAgICAgICAgICAgICAgICAgfSAvPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbk51bWJlckZpbHRlci5wcm9wVHlwZXMgPSB7XG4gIGZpbHRlckhhbmRsZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5udW1iZXIpLFxuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgbnVtYmVyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGNvbXBhcmF0b3I6IFByb3BUeXBlcy5vbmVPZihsZWdhbENvbXBhcmF0b3JzKVxuICB9KSxcbiAgZGVsYXk6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qIGVzbGludCBjb25zaXN0ZW50LXJldHVybjogMCAqL1xuICBudW1iZXJDb21wYXJhdG9yczogZnVuY3Rpb24ocHJvcHMsIHByb3BOYW1lKSB7XG4gICAgaWYgKCFwcm9wc1twcm9wTmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wc1twcm9wTmFtZV0ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBjb21wYXJhdG9ySXNWYWxpZCA9IGZhbHNlO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsZWdhbENvbXBhcmF0b3JzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChsZWdhbENvbXBhcmF0b3JzW2pdID09PSBwcm9wc1twcm9wTmFtZV1baV0pIHtcbiAgICAgICAgICBjb21wYXJhdG9ySXNWYWxpZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghY29tcGFyYXRvcklzVmFsaWQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihgTnVtYmVyIGNvbXBhcmF0b3IgcHJvdmlkZWQgaXMgbm90IHN1cHBvcnRlZC5cbiAgICAgICAgICBVc2Ugb25seSAke2xlZ2FsQ29tcGFyYXRvcnN9YCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY29sdW1uTmFtZTogUHJvcFR5cGVzLnN0cmluZ1xufTtcblxuTnVtYmVyRmlsdGVyLmRlZmF1bHRQcm9wcyA9IHtcbiAgZGVsYXk6IENvbnN0LkZJTFRFUl9ERUxBWVxufTtcblxuZXhwb3J0IGRlZmF1bHQgTnVtYmVyRmlsdGVyO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvZmlsdGVycy9OdW1iZXIuanNcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9"); +!function(Q,F){"object"==typeof exports&&"object"==typeof module?module.exports=F(require("react"),require("react-dom")):"function"==typeof define&&define.amd?define(["react","react-dom"],F):"object"==typeof exports?exports.ReactBootstrapTable=F(require("react"),require("react-dom")):Q.ReactBootstrapTable=F(Q.React,Q.ReactDOM)}(this,function(__WEBPACK_EXTERNAL_MODULE_2__,__WEBPACK_EXTERNAL_MODULE_5__){return function(Q){function F(U){if(e[U])return e[U].exports;var B=e[U]={exports:{},id:U,loaded:!1};return Q[U].call(B.exports,B,B.exports,F),B.loaded=!0,B.exports}var e={};return F.m=Q,F.c=e,F.p="",F(0)}([function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _BootstrapTable = __webpack_require__(1);\n\nvar _BootstrapTable2 = _interopRequireDefault(_BootstrapTable);\n\nvar _TableHeaderColumn = __webpack_require__(40);\n\nvar _TableHeaderColumn2 = _interopRequireDefault(_TableHeaderColumn);\n\nvar _storeTableDataStore = __webpack_require__(32);\n\nif (typeof window !== 'undefined') {\n window.BootstrapTable = _BootstrapTable2['default'];\n window.TableHeaderColumn = _TableHeaderColumn2['default'];\n window.TableDataSet = _storeTableDataStore.TableDataSet;\n}\nexports['default'] = {\n BootstrapTable: _BootstrapTable2['default'],\n TableHeaderColumn: _TableHeaderColumn2['default'],\n TableDataSet: _storeTableDataStore.TableDataSet\n};\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXguanM/OTU1MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OzswQ0FBMkIsQ0FBa0I7Ozs7NkNBQ2YsRUFBcUI7Ozs7K0NBQ3RCLEVBQXdCOztBQUVyRCxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsRUFBRTtBQUNqQyxRQUFNLENBQUMsY0FBYyw4QkFBaUIsQ0FBQztBQUN2QyxRQUFNLENBQUMsaUJBQWlCLGlDQUFvQixDQUFDO0FBQzdDLFFBQU0sQ0FBQyxZQUFZLG9DQUFlLENBQUM7Q0FDcEM7cUJBQ2M7QUFDYixnQkFBYztBQUNkLG1CQUFpQjtBQUNqQixjQUFZO0NBQ2IiLCJmaWxlIjoiMC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCb290c3RyYXBUYWJsZSBmcm9tICcuL0Jvb3RzdHJhcFRhYmxlJztcbmltcG9ydCBUYWJsZUhlYWRlckNvbHVtbiBmcm9tICcuL1RhYmxlSGVhZGVyQ29sdW1uJztcbmltcG9ydCB7IFRhYmxlRGF0YVNldCB9IGZyb20gJy4vc3RvcmUvVGFibGVEYXRhU3RvcmUnO1xuXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgd2luZG93LkJvb3RzdHJhcFRhYmxlID0gQm9vdHN0cmFwVGFibGU7XG4gIHdpbmRvdy5UYWJsZUhlYWRlckNvbHVtbiA9IFRhYmxlSGVhZGVyQ29sdW1uO1xuICB3aW5kb3cuVGFibGVEYXRhU2V0ID0gVGFibGVEYXRhU2V0O1xufVxuZXhwb3J0IGRlZmF1bHQge1xuICBCb290c3RyYXBUYWJsZSxcbiAgVGFibGVIZWFkZXJDb2x1bW4sXG4gIFRhYmxlRGF0YVNldFxufTtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2luZGV4LmpzXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports,__webpack_require__){eval("/* eslint no-alert: 0 */\n/* eslint max-len: 0 */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _Const = __webpack_require__(3);\n\nvar _Const2 = _interopRequireDefault(_Const);\n\nvar _TableHeader = __webpack_require__(4);\n\nvar _TableHeader2 = _interopRequireDefault(_TableHeader);\n\nvar _TableBody = __webpack_require__(8);\n\nvar _TableBody2 = _interopRequireDefault(_TableBody);\n\nvar _paginationPaginationList = __webpack_require__(28);\n\nvar _paginationPaginationList2 = _interopRequireDefault(_paginationPaginationList);\n\nvar _toolbarToolBar = __webpack_require__(30);\n\nvar _toolbarToolBar2 = _interopRequireDefault(_toolbarToolBar);\n\nvar _TableFilter = __webpack_require__(31);\n\nvar _TableFilter2 = _interopRequireDefault(_TableFilter);\n\nvar _storeTableDataStore = __webpack_require__(32);\n\nvar _util = __webpack_require__(34);\n\nvar _util2 = _interopRequireDefault(_util);\n\nvar _csv_export_util = __webpack_require__(35);\n\nvar _csv_export_util2 = _interopRequireDefault(_csv_export_util);\n\nvar _Filter = __webpack_require__(39);\n\nvar BootstrapTable = (function (_Component) {\n _inherits(BootstrapTable, _Component);\n\n function BootstrapTable(props) {\n var _this = this;\n\n _classCallCheck(this, BootstrapTable);\n\n _get(Object.getPrototypeOf(BootstrapTable.prototype), 'constructor', this).call(this, props);\n\n this.handleSort = function (order, sortField) {\n if (_this.props.options.onSortChange) {\n _this.props.options.onSortChange(sortField, order, _this.props);\n }\n\n var result = _this.store.sort(order, sortField).get();\n _this.setState({\n data: result\n });\n };\n\n this.handlePaginationData = function (page, sizePerPage) {\n var onPageChange = _this.props.options.onPageChange;\n\n if (onPageChange) {\n onPageChange(page, sizePerPage);\n }\n\n if (_this.isRemoteDataSource()) {\n return;\n }\n\n var result = _this.store.page(page, sizePerPage).get();\n _this.setState({\n data: result,\n currPage: page,\n sizePerPage: sizePerPage\n });\n };\n\n this.handleMouseLeave = function () {\n if (_this.props.options.onMouseLeave) {\n _this.props.options.onMouseLeave();\n }\n };\n\n this.handleMouseEnter = function () {\n if (_this.props.options.onMouseEnter) {\n _this.props.options.onMouseEnter();\n }\n };\n\n this.handleRowMouseOut = function (row, event) {\n if (_this.props.options.onRowMouseOut) {\n _this.props.options.onRowMouseOut(row, event);\n }\n };\n\n this.handleRowMouseOver = function (row, event) {\n if (_this.props.options.onRowMouseOver) {\n _this.props.options.onRowMouseOver(row, event);\n }\n };\n\n this.handleRowClick = function (row) {\n if (_this.props.options.onRowClick) {\n _this.props.options.onRowClick(row);\n }\n };\n\n this.handleSelectAllRow = function (e) {\n var isSelected = e.currentTarget.checked;\n var selectedRowKeys = [];\n var result = true;\n if (_this.props.selectRow.onSelectAll) {\n result = _this.props.selectRow.onSelectAll(isSelected, isSelected ? _this.store.get() : []);\n }\n\n if (typeof result === 'undefined' || result !== false) {\n if (isSelected) {\n selectedRowKeys = _this.store.getAllRowkey();\n }\n\n _this.store.setSelectedRowKey(selectedRowKeys);\n _this.setState({ selectedRowKeys: selectedRowKeys });\n }\n };\n\n this.handleShowOnlySelected = function () {\n _this.store.ignoreNonSelected();\n var result = undefined;\n if (_this.props.pagination) {\n result = _this.store.page(1, _this.state.sizePerPage).get();\n } else {\n result = _this.store.get();\n }\n _this.setState({\n data: result,\n currPage: 1\n });\n };\n\n this.handleSelectRow = function (row, isSelected) {\n var result = true;\n var currSelected = _this.store.getSelectedRowKeys();\n var rowKey = row[_this.store.getKeyField()];\n var selectRow = _this.props.selectRow;\n\n if (selectRow.onSelect) {\n result = selectRow.onSelect(row, isSelected);\n }\n\n if (typeof result === 'undefined' || result !== false) {\n if (selectRow.mode === _Const2['default'].ROW_SELECT_SINGLE) {\n currSelected = isSelected ? [rowKey] : [];\n } else {\n if (isSelected) {\n currSelected.push(rowKey);\n } else {\n currSelected = currSelected.filter(function (key) {\n return rowKey !== key;\n });\n }\n }\n\n _this.store.setSelectedRowKey(currSelected);\n _this.setState({\n selectedRowKeys: currSelected\n });\n }\n };\n\n this.handleAddRow = function (newObj) {\n try {\n _this.store.add(newObj);\n } catch (e) {\n return e;\n }\n _this._handleAfterAddingRow(newObj);\n };\n\n this.handleDropRow = function (rowKeys) {\n var dropRowKeys = rowKeys ? rowKeys : _this.store.getSelectedRowKeys();\n // add confirm before the delete action if that option is set.\n if (dropRowKeys && dropRowKeys.length > 0) {\n if (_this.props.options.handleConfirmDeleteRow) {\n _this.props.options.handleConfirmDeleteRow(function () {\n _this.deleteRow(dropRowKeys);\n });\n } else if (confirm('Are you sure want delete?')) {\n _this.deleteRow(dropRowKeys);\n }\n }\n };\n\n this.handleFilterData = function (filterObj) {\n _this.store.filter(filterObj);\n var result = undefined;\n if (_this.props.pagination) {\n var sizePerPage = _this.state.sizePerPage;\n\n result = _this.store.page(1, sizePerPage).get();\n } else {\n result = _this.store.get();\n }\n if (_this.props.options.afterColumnFilter) {\n _this.props.options.afterColumnFilter(filterObj, _this.store.getDataIgnoringPagination());\n }\n _this.setState({\n data: result,\n currPage: 1\n });\n };\n\n this.handleExportCSV = function () {\n var result = _this.store.getDataIgnoringPagination();\n var keys = [];\n _this.props.children.map(function (column) {\n if (column.props.hidden === false) {\n keys.push(column.props.dataField);\n }\n });\n (0, _csv_export_util2['default'])(result, keys, _this.props.csvFileName);\n };\n\n this.handleSearch = function (searchText) {\n _this.store.search(searchText);\n var result = undefined;\n if (_this.props.pagination) {\n var sizePerPage = _this.state.sizePerPage;\n\n result = _this.store.page(1, sizePerPage).get();\n } else {\n result = _this.store.get();\n }\n if (_this.props.options.afterSearch) {\n _this.props.options.afterSearch(searchText, _this.store.getDataIgnoringPagination());\n }\n _this.setState({\n data: result,\n currPage: 1\n });\n };\n\n this._scrollHeader = function (e) {\n _this.refs.header.refs.container.scrollLeft = e.currentTarget.scrollLeft;\n };\n\n this._adjustTable = function () {\n _this._adjustHeaderWidth();\n _this._adjustHeight();\n };\n\n this._adjustHeaderWidth = function () {\n var header = _this.refs.header.refs.header;\n var headerContainer = _this.refs.header.refs.container;\n var tbody = _this.refs.body.refs.tbody;\n var firstRow = tbody.childNodes[0];\n var isScroll = headerContainer.offsetWidth !== tbody.parentNode.offsetWidth;\n var scrollBarWidth = isScroll ? _util2['default'].getScrollBarWidth() : 0;\n if (firstRow && _this.store.getDataNum()) {\n var cells = firstRow.childNodes;\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n var computedStyle = getComputedStyle(cell);\n var width = parseFloat(computedStyle.width.replace('px', ''));\n if (_this.isIE) {\n var paddingLeftWidth = parseFloat(computedStyle.paddingLeft.replace('px', ''));\n var paddingRightWidth = parseFloat(computedStyle.paddingRight.replace('px', ''));\n var borderRightWidth = parseFloat(computedStyle.borderRightWidth.replace('px', ''));\n var borderLeftWidth = parseFloat(computedStyle.borderLeftWidth.replace('px', ''));\n width = width + paddingLeftWidth + paddingRightWidth + borderRightWidth + borderLeftWidth;\n }\n var lastPadding = cells.length - 1 === i ? scrollBarWidth : 0;\n if (width <= 0) {\n width = 120;\n cell.width = width + lastPadding + 'px';\n }\n var result = width + lastPadding + 'px';\n header.childNodes[i].style.width = result;\n header.childNodes[i].style.minWidth = result;\n }\n }\n };\n\n this._adjustHeight = function () {\n if (_this.props.height.indexOf('%') === -1) {\n _this.refs.body.refs.container.style.height = parseFloat(_this.props.height, 10) - _this.refs.header.refs.container.offsetHeight + 'px';\n }\n };\n\n this.isIE = false;\n this._attachCellEditFunc();\n if (_util2['default'].canUseDOM()) {\n this.isIE = document.documentMode;\n }\n if (!Array.isArray(this.props.data)) {\n this.store = new _storeTableDataStore.TableDataStore(this.props.data.getData());\n this.props.data.clear();\n this.props.data.on('change', function (data) {\n _this.store.setData(data);\n _this.setState({\n data: _this.getTableData()\n });\n });\n } else {\n var copy = this.props.data.slice();\n this.store = new _storeTableDataStore.TableDataStore(copy);\n }\n\n this.initTable(this.props);\n\n if (this.filter) {\n this.filter.on('onFilterChange', function (currentFilter) {\n _this.handleFilterData(currentFilter);\n });\n }\n\n if (this.props.selectRow && this.props.selectRow.selected) {\n var copy = this.props.selectRow.selected.slice();\n this.store.setSelectedRowKey(copy);\n }\n\n this.state = {\n data: this.getTableData(),\n currPage: this.props.options.page || 1,\n sizePerPage: this.props.options.sizePerPage || _Const2['default'].SIZE_PER_PAGE_LIST[0],\n selectedRowKeys: this.store.getSelectedRowKeys()\n };\n }\n\n _createClass(BootstrapTable, [{\n key: 'initTable',\n value: function initTable(props) {\n var _this2 = this;\n\n var keyField = props.keyField;\n\n var isKeyFieldDefined = typeof keyField === 'string' && keyField.length;\n _react2['default'].Children.forEach(props.children, function (column) {\n if (column.props.isKey) {\n if (keyField) {\n throw 'Error. Multiple key column be detected in TableHeaderColumn.';\n }\n keyField = column.props.dataField;\n }\n if (column.props.filter) {\n // a column contains a filter\n if (!_this2.filter) {\n // first time create the filter on the BootstrapTable\n _this2.filter = new _Filter.Filter();\n }\n // pass the filter to column with filter\n column.props.filter.emitter = _this2.filter;\n }\n });\n\n var colInfos = this.getColumnsDescription(props).reduce(function (prev, curr) {\n prev[curr.name] = curr;\n return prev;\n }, {});\n\n if (!isKeyFieldDefined && !keyField) {\n throw 'Error. No any key column defined in TableHeaderColumn.\\n Use \\'isKey={true}\\' to specify a unique column after version 0.5.4.';\n }\n\n this.store.setProps({\n isPagination: props.pagination,\n keyField: keyField,\n colInfos: colInfos,\n multiColumnSearch: props.multiColumnSearch,\n remote: this.isRemoteDataSource()\n });\n }\n }, {\n key: 'getTableData',\n value: function getTableData() {\n var _props = this.props;\n var options = _props.options;\n var pagination = _props.pagination;\n\n var result = [];\n if (options.sortName && options.sortOrder) {\n this.store.sort(options.sortOrder, options.sortName);\n }\n\n if (pagination) {\n var page = undefined;\n var sizePerPage = undefined;\n if (this.store.isChangedPage()) {\n sizePerPage = this.state.sizePerPage;\n page = this.state.currPage;\n } else {\n sizePerPage = options.sizePerPage || _Const2['default'].SIZE_PER_PAGE_LIST[0];\n page = options.page || 1;\n }\n result = this.store.page(page, sizePerPage).get();\n } else {\n result = this.store.get();\n }\n return result;\n }\n }, {\n key: 'getColumnsDescription',\n value: function getColumnsDescription(_ref) {\n var children = _ref.children;\n\n return _react2['default'].Children.map(children, function (column, i) {\n return {\n name: column.props.dataField,\n align: column.props.dataAlign,\n sort: column.props.dataSort,\n format: column.props.dataFormat,\n formatExtraData: column.props.formatExtraData,\n filterFormatted: column.props.filterFormatted,\n editable: column.props.editable,\n hidden: column.props.hidden,\n searchable: column.props.searchable,\n className: column.props.columnClassName,\n width: column.props.width,\n text: column.props.children,\n sortFunc: column.props.sortFunc,\n index: i\n };\n });\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(nextProps) {\n this.initTable(nextProps);\n var options = nextProps.options;\n var selectRow = nextProps.selectRow;\n\n if (Array.isArray(nextProps.data)) {\n this.store.setData(nextProps.data.slice());\n var page = options.page || this.state.currPage;\n var sizePerPage = options.sizePerPage || this.state.sizePerPage;\n\n // #125\n if (!options.page && page >= Math.ceil(nextProps.data.length / sizePerPage)) {\n page = 1;\n }\n var sortInfo = this.store.getSortInfo();\n var sortField = options.sortName || (sortInfo ? sortInfo.sortField : undefined);\n var sortOrder = options.sortOrder || (sortInfo ? sortInfo.order : undefined);\n if (sortField && sortOrder) this.store.sort(sortOrder, sortField);\n var data = this.store.page(page, sizePerPage).get();\n this.setState({\n data: data,\n currPage: page,\n sizePerPage: sizePerPage\n });\n }\n if (selectRow && selectRow.selected) {\n // set default select rows to store.\n var copy = selectRow.selected.slice();\n this.store.setSelectedRowKey(copy);\n this.setState({\n selectedRowKeys: copy\n });\n }\n }\n }, {\n key: 'componentDidMount',\n value: function componentDidMount() {\n this._adjustTable();\n window.addEventListener('resize', this._adjustTable);\n this.refs.body.refs.container.addEventListener('scroll', this._scrollHeader);\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n window.removeEventListener('resize', this._adjustTable);\n this.refs.body.refs.container.removeEventListener('scroll', this._scrollHeader);\n if (this.filter) {\n this.filter.removeAllListeners('onFilterChange');\n }\n }\n }, {\n key: 'componentDidUpdate',\n value: function componentDidUpdate() {\n this._adjustTable();\n this._attachCellEditFunc();\n if (this.props.options.afterTableComplete) {\n this.props.options.afterTableComplete();\n }\n }\n }, {\n key: '_attachCellEditFunc',\n value: function _attachCellEditFunc() {\n var cellEdit = this.props.cellEdit;\n\n if (cellEdit) {\n this.props.cellEdit.__onCompleteEdit__ = this.handleEditCell.bind(this);\n if (cellEdit.mode !== _Const2['default'].CELL_EDIT_NONE) {\n this.props.selectRow.clickToSelect = false;\n }\n }\n }\n\n /**\n * Returns true if in the current configuration,\n * the datagrid should load its data remotely.\n *\n * @param {Object} [props] Optional. If not given, this.props will be used\n * @return {Boolean}\n */\n }, {\n key: 'isRemoteDataSource',\n value: function isRemoteDataSource(props) {\n return (props || this.props).remote;\n }\n }, {\n key: 'render',\n value: function render() {\n var style = {\n height: this.props.height,\n maxHeight: this.props.maxHeight\n };\n\n var columns = this.getColumnsDescription(this.props);\n var sortInfo = this.store.getSortInfo();\n var pagination = this.renderPagination();\n var toolBar = this.renderToolBar();\n var tableFilter = this.renderTableFilter(columns);\n var isSelectAll = this.isSelectAll();\n var sortIndicator = this.props.options.sortIndicator;\n if (typeof this.props.options.sortIndicator === 'undefined') sortIndicator = true;\n return _react2['default'].createElement(\n 'div',\n { className: 'react-bs-table-container' },\n toolBar,\n _react2['default'].createElement(\n 'div',\n { className: 'react-bs-table', ref: 'table', style: style,\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave },\n _react2['default'].createElement(\n _TableHeader2['default'],\n {\n ref: 'header',\n rowSelectType: this.props.selectRow.mode,\n hideSelectColumn: this.props.selectRow.hideSelectColumn,\n sortName: sortInfo ? sortInfo.sortField : undefined,\n sortOrder: sortInfo ? sortInfo.order : undefined,\n sortIndicator: sortIndicator,\n onSort: this.handleSort,\n onSelectAllRow: this.handleSelectAllRow,\n bordered: this.props.bordered,\n condensed: this.props.condensed,\n isFiltered: this.filter ? true : false,\n isSelectAll: isSelectAll },\n this.props.children\n ),\n _react2['default'].createElement(_TableBody2['default'], { ref: 'body',\n style: style,\n data: this.state.data,\n columns: columns,\n trClassName: this.props.trClassName,\n striped: this.props.striped,\n bordered: this.props.bordered,\n hover: this.props.hover,\n keyField: this.store.getKeyField(),\n condensed: this.props.condensed,\n selectRow: this.props.selectRow,\n cellEdit: this.props.cellEdit,\n selectedRowKeys: this.state.selectedRowKeys,\n onRowClick: this.handleRowClick,\n onRowMouseOver: this.handleRowMouseOver,\n onRowMouseOut: this.handleRowMouseOut,\n onSelectRow: this.handleSelectRow,\n noDataText: this.props.options.noDataText })\n ),\n tableFilter,\n pagination\n );\n }\n }, {\n key: 'isSelectAll',\n value: function isSelectAll() {\n var defaultSelectRowKeys = this.store.getSelectedRowKeys();\n var allRowKeys = this.store.getAllRowkey();\n if (defaultSelectRowKeys.length !== allRowKeys.length) {\n return defaultSelectRowKeys.length === 0 ? false : 'indeterminate';\n } else {\n return true;\n }\n }\n }, {\n key: 'cleanSelected',\n value: function cleanSelected() {\n this.store.setSelectedRowKey([]);\n this.setState({\n selectedRowKeys: []\n });\n }\n }, {\n key: 'handleEditCell',\n value: function handleEditCell(newVal, rowIndex, colIndex) {\n var _props$cellEdit = this.props.cellEdit;\n var beforeSaveCell = _props$cellEdit.beforeSaveCell;\n var afterSaveCell = _props$cellEdit.afterSaveCell;\n\n var fieldName = undefined;\n _react2['default'].Children.forEach(this.props.children, function (column, i) {\n if (i === colIndex) {\n fieldName = column.props.dataField;\n return false;\n }\n });\n\n if (beforeSaveCell) {\n var isValid = beforeSaveCell(this.state.data[rowIndex], fieldName, newVal);\n if (!isValid && typeof isValid !== 'undefined') {\n this.setState({\n data: this.store.get()\n });\n return;\n }\n }\n\n var result = this.store.edit(newVal, rowIndex, fieldName).get();\n this.setState({\n data: result\n });\n\n if (afterSaveCell) {\n afterSaveCell(this.state.data[rowIndex], fieldName, newVal);\n }\n }\n }, {\n key: 'handleAddRowAtBegin',\n value: function handleAddRowAtBegin(newObj) {\n try {\n this.store.addAtBegin(newObj);\n } catch (e) {\n return e;\n }\n this._handleAfterAddingRow(newObj);\n }\n }, {\n key: 'getSizePerPage',\n value: function getSizePerPage() {\n return this.state.sizePerPage;\n }\n }, {\n key: 'getCurrentPage',\n value: function getCurrentPage() {\n return this.state.currPage;\n }\n }, {\n key: 'deleteRow',\n value: function deleteRow(dropRowKeys) {\n var result = undefined;\n this.store.remove(dropRowKeys); // remove selected Row\n this.store.setSelectedRowKey([]); // clear selected row key\n\n if (this.props.pagination) {\n var sizePerPage = this.state.sizePerPage;\n\n var currLastPage = Math.ceil(this.store.getDataNum() / sizePerPage);\n var currPage = this.state.currPage;\n\n if (currPage > currLastPage) currPage = currLastPage;\n result = this.store.page(currPage, sizePerPage).get();\n this.setState({\n data: result,\n selectedRowKeys: this.store.getSelectedRowKeys(),\n currPage: currPage\n });\n } else {\n result = this.store.get();\n this.setState({\n data: result,\n selectedRowKeys: this.store.getSelectedRowKeys()\n });\n }\n if (this.props.options.afterDeleteRow) {\n this.props.options.afterDeleteRow(dropRowKeys);\n }\n }\n }, {\n key: 'renderPagination',\n value: function renderPagination() {\n if (this.props.pagination) {\n var dataSize = undefined;\n if (this.isRemoteDataSource()) {\n dataSize = this.props.fetchInfo.dataTotalSize;\n } else {\n dataSize = this.store.getDataNum();\n }\n var options = this.props.options;\n\n return _react2['default'].createElement(\n 'div',\n { className: 'react-bs-table-pagination' },\n _react2['default'].createElement(_paginationPaginationList2['default'], {\n ref: 'pagination',\n currPage: this.state.currPage,\n changePage: this.handlePaginationData,\n sizePerPage: this.state.sizePerPage,\n sizePerPageList: options.sizePerPageList || _Const2['default'].SIZE_PER_PAGE_LIST,\n paginationSize: options.paginationSize || _Const2['default'].PAGINATION_SIZE,\n remote: this.isRemoteDataSource(),\n dataSize: dataSize,\n onSizePerPageList: options.onSizePerPageList,\n prePage: options.prePage || _Const2['default'].PRE_PAGE,\n nextPage: options.nextPage || _Const2['default'].NEXT_PAGE,\n firstPage: options.firstPage || _Const2['default'].FIRST_PAGE,\n lastPage: options.lastPage || _Const2['default'].LAST_PAGE })\n );\n }\n return null;\n }\n }, {\n key: 'renderToolBar',\n value: function renderToolBar() {\n var _props2 = this.props;\n var selectRow = _props2.selectRow;\n var insertRow = _props2.insertRow;\n var deleteRow = _props2.deleteRow;\n var search = _props2.search;\n var children = _props2.children;\n\n var enableShowOnlySelected = selectRow && selectRow.showOnlySelected;\n if (enableShowOnlySelected || insertRow || deleteRow || search || this.props.exportCSV) {\n var columns = undefined;\n if (Array.isArray(children)) {\n columns = children.map(function (column) {\n var props = column.props;\n\n return {\n name: props.children,\n field: props.dataField,\n // when you want same auto generate value and not allow edit, example ID field\n autoValue: props.autoValue || false,\n // for create editor, no params for column.editable() indicate that editor for new row\n editable: props.editable && typeof props.editable === 'function' ? props.editable() : props.editable,\n format: props.dataFormat ? function (value) {\n return props.dataFormat(value, null, props.formatExtraData).replace(/<.*?>/g, '');\n } : false\n };\n });\n } else {\n columns = [{\n name: children.props.children,\n field: children.props.dataField,\n editable: children.props.editable\n }];\n }\n return _react2['default'].createElement(\n 'div',\n { className: 'react-bs-table-tool-bar' },\n _react2['default'].createElement(_toolbarToolBar2['default'], {\n clearSearch: this.props.options.clearSearch,\n enableInsert: insertRow,\n enableDelete: deleteRow,\n enableSearch: search,\n enableExportCSV: this.props.exportCSV,\n enableShowOnlySelected: enableShowOnlySelected,\n columns: columns,\n searchPlaceholder: this.props.searchPlaceholder,\n onAddRow: this.handleAddRow,\n onDropRow: this.handleDropRow,\n onSearch: this.handleSearch,\n onExportCSV: this.handleExportCSV,\n onShowOnlySelected: this.handleShowOnlySelected })\n );\n } else {\n return null;\n }\n }\n }, {\n key: 'renderTableFilter',\n value: function renderTableFilter(columns) {\n if (this.props.columnFilter) {\n return _react2['default'].createElement(_TableFilter2['default'], { columns: columns,\n rowSelectType: this.props.selectRow.mode,\n onFilter: this.handleFilterData });\n } else {\n return null;\n }\n }\n }, {\n key: '_handleAfterAddingRow',\n value: function _handleAfterAddingRow(newObj) {\n var result = undefined;\n if (this.props.pagination) {\n // if pagination is enabled and insert row be trigger, change to last page\n var sizePerPage = this.state.sizePerPage;\n\n var currLastPage = Math.ceil(this.store.getDataNum() / sizePerPage);\n result = this.store.page(currLastPage, sizePerPage).get();\n this.setState({\n data: result,\n currPage: currLastPage\n });\n } else {\n result = this.store.get();\n this.setState({\n data: result\n });\n }\n\n if (this.props.options.afterInsertRow) {\n this.props.options.afterInsertRow(newObj);\n }\n }\n }]);\n\n return BootstrapTable;\n})(_react.Component);\n\nBootstrapTable.propTypes = {\n keyField: _react.PropTypes.string,\n height: _react.PropTypes.string,\n maxHeight: _react.PropTypes.string,\n data: _react.PropTypes.oneOfType([_react.PropTypes.array, _react.PropTypes.object]),\n remote: _react.PropTypes.bool, // remote data, default is false\n striped: _react.PropTypes.bool,\n bordered: _react.PropTypes.bool,\n hover: _react.PropTypes.bool,\n condensed: _react.PropTypes.bool,\n pagination: _react.PropTypes.bool,\n searchPlaceholder: _react.PropTypes.string,\n selectRow: _react.PropTypes.shape({\n mode: _react.PropTypes.oneOf([_Const2['default'].ROW_SELECT_NONE, _Const2['default'].ROW_SELECT_SINGLE, _Const2['default'].ROW_SELECT_MULTI]),\n bgColor: _react.PropTypes.string,\n selected: _react.PropTypes.array,\n onSelect: _react.PropTypes.func,\n onSelectAll: _react.PropTypes.func,\n clickToSelect: _react.PropTypes.bool,\n hideSelectColumn: _react.PropTypes.bool,\n clickToSelectAndEditCell: _react.PropTypes.bool,\n showOnlySelected: _react.PropTypes.bool\n }),\n cellEdit: _react.PropTypes.shape({\n mode: _react.PropTypes.string,\n blurToSave: _react.PropTypes.bool,\n beforeSaveCell: _react.PropTypes.func,\n afterSaveCell: _react.PropTypes.func\n }),\n insertRow: _react.PropTypes.bool,\n deleteRow: _react.PropTypes.bool,\n search: _react.PropTypes.bool,\n columnFilter: _react.PropTypes.bool,\n trClassName: _react.PropTypes.any,\n options: _react.PropTypes.shape({\n clearSearch: _react.PropTypes.bool,\n sortName: _react.PropTypes.string,\n sortOrder: _react.PropTypes.string,\n sortIndicator: _react.PropTypes.bool,\n afterTableComplete: _react.PropTypes.func,\n afterDeleteRow: _react.PropTypes.func,\n afterInsertRow: _react.PropTypes.func,\n afterSearch: _react.PropTypes.func,\n afterColumnFilter: _react.PropTypes.func,\n onRowClick: _react.PropTypes.func,\n page: _react.PropTypes.number,\n sizePerPageList: _react.PropTypes.array,\n sizePerPage: _react.PropTypes.number,\n paginationSize: _react.PropTypes.number,\n onSortChange: _react.PropTypes.func,\n onPageChange: _react.PropTypes.func,\n onSizePerPageList: _react.PropTypes.func,\n noDataText: _react.PropTypes.string,\n handleConfirmDeleteRow: _react.PropTypes.func,\n prePage: _react.PropTypes.string,\n nextPage: _react.PropTypes.string,\n firstPage: _react.PropTypes.string,\n lastPage: _react.PropTypes.string\n }),\n fetchInfo: _react.PropTypes.shape({\n dataTotalSize: _react.PropTypes.number\n }),\n exportCSV: _react.PropTypes.bool,\n csvFileName: _react.PropTypes.string\n};\nBootstrapTable.defaultProps = {\n height: '100%',\n maxHeight: undefined,\n striped: false,\n bordered: true,\n hover: false,\n condensed: false,\n pagination: false,\n searchPlaceholder: undefined,\n selectRow: {\n mode: _Const2['default'].ROW_SELECT_NONE,\n bgColor: _Const2['default'].ROW_SELECT_BG_COLOR,\n selected: [],\n onSelect: undefined,\n onSelectAll: undefined,\n clickToSelect: false,\n hideSelectColumn: false,\n clickToSelectAndEditCell: false,\n showOnlySelected: false\n },\n cellEdit: {\n mode: _Const2['default'].CELL_EDIT_NONE,\n blurToSave: false,\n beforeSaveCell: undefined,\n afterSaveCell: undefined\n },\n insertRow: false,\n deleteRow: false,\n search: false,\n multiColumnSearch: false,\n columnFilter: false,\n trClassName: '',\n options: {\n clearSearch: false,\n sortName: undefined,\n sortOrder: undefined,\n sortIndicator: true,\n afterTableComplete: undefined,\n afterDeleteRow: undefined,\n afterInsertRow: undefined,\n afterSearch: undefined,\n afterColumnFilter: undefined,\n onRowClick: undefined,\n onMouseLeave: undefined,\n onMouseEnter: undefined,\n onRowMouseOut: undefined,\n onRowMouseOver: undefined,\n page: undefined,\n sizePerPageList: _Const2['default'].SIZE_PER_PAGE_LIST,\n sizePerPage: undefined,\n paginationSize: _Const2['default'].PAGINATION_SIZE,\n onSizePerPageList: undefined,\n noDataText: undefined,\n handleConfirmDeleteRow: undefined,\n prePage: _Const2['default'].PRE_PAGE,\n nextPage: _Const2['default'].NEXT_PAGE,\n firstPage: _Const2['default'].FIRST_PAGE,\n lastPage: _Const2['default'].LAST_PAGE\n },\n fetchInfo: {\n dataTotalSize: 0\n },\n exportCSV: false,\n csvFileName: undefined\n};\n\nexports['default'] = BootstrapTable;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvQm9vdHN0cmFwVGFibGUuanM/YWEwOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7aUNBRTRDLENBQU87Ozs7aUNBQ2pDLENBQVM7Ozs7dUNBQ0gsQ0FBZTs7OztxQ0FDakIsQ0FBYTs7OztvREFDUixFQUE2Qjs7OzswQ0FDcEMsRUFBbUI7Ozs7dUNBQ2YsRUFBZTs7OzsrQ0FDUixFQUF3Qjs7Z0NBQ3RDLEVBQVE7Ozs7MkNBQ0gsRUFBbUI7Ozs7a0NBQ2xCLEVBQVU7O0lBRTNCLGNBQWM7WUFBZCxjQUFjOztBQUVQLFdBRlAsY0FBYyxDQUVOLEtBQUssRUFBRTs7OzBCQUZmLGNBQWM7O0FBR2hCLCtCQUhFLGNBQWMsNkNBR1YsS0FBSyxFQUFFOztTQXlSZixVQUFVLEdBQUcsVUFBQyxLQUFLLEVBQUUsU0FBUyxFQUFLO0FBQ2pDLFVBQUksTUFBSyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtBQUNuQyxjQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBSyxLQUFLLENBQUMsQ0FBQztPQUMvRDs7QUFFRCxVQUFNLE1BQU0sR0FBRyxNQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3ZELFlBQUssUUFBUSxDQUFDO0FBQ1osWUFBSSxFQUFFLE1BQU07T0FDYixDQUFDLENBQUM7S0FDSjs7U0FFRCxvQkFBb0IsR0FBRyxVQUFDLElBQUksRUFBRSxXQUFXLEVBQUs7VUFDcEMsWUFBWSxHQUFLLE1BQUssS0FBSyxDQUFDLE9BQU8sQ0FBbkMsWUFBWTs7QUFDcEIsVUFBSSxZQUFZLEVBQUU7QUFDaEIsb0JBQVksQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7T0FDakM7O0FBRUQsVUFBSSxNQUFLLGtCQUFrQixFQUFFLEVBQUU7QUFDN0IsZUFBTztPQUNSOztB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QUNQLGVBQVcsRUFBRSxLQUFLO0FBQ2xCLFlBQVEsRUFBRSxTQUFTO0FBQ25CLGFBQVMsRUFBRSxTQUFTO0FBQ3BCLGlCQUFhLEVBQUUsSUFBSTtBQUNuQixzQkFBa0IsRUFBRSxTQUFTO0FBQzdCLGtCQUFjLEVBQUUsU0FBUztBQUN6QixrQkFBYyxFQUFFLFNBQVM7QUFDekIsZUFBVyxFQUFFLFNBQVM7QUFDdEIscUJBQWlCLEVBQUUsU0FBUztBQUM1QixjQUFVLEVBQUUsU0FBUztBQUNyQixnQkFBWSxFQUFFLFNBQVM7QUFDdkIsZ0JBQVksRUFBRSxTQUFTO0FBQ3ZCLGlCQUFhLEVBQUUsU0FBUztBQUN4QixrQkFBYyxFQUFFLFNBQVM7QUFDekIsUUFBSSxFQUFFLFNBQVM7QUFDZixtQkFBZSxFQUFFLG1CQUFNLGtCQUFrQjtBQUN6QyxlQUFXLEVBQUUsU0FBUztBQUN0QixrQkFBYyxFQUFFLG1CQUFNLGVBQWU7QUFDckMscUJBQWlCLEVBQUUsU0FBUztBQUM1QixjQUFVLEVBQUUsU0FBUztBQUNyQiwwQkFBc0IsRUFBRSxTQUFTO0FBQ2pDLFdBQU8sRUFBRSxtQkFBTSxRQUFRO0FBQ3ZCLFlBQVEsRUFBRSxtQkFBTSxTQUFTO0FBQ3pCLGFBQVMsRUFBRSxtQkFBTSxVQUFVO0FBQzNCLFlBQVEsRUFBRSxtQkFBTSxTQUFTO0dBQzFCO0FBQ0QsV0FBUyxFQUFFO0FBQ1QsaUJBQWEsRUFBRSxDQUFDO0dBQ2pCO0FBQ0QsV0FBUyxFQUFFLEtBQUs7QUFDaEIsYUFBVyxFQUFFLFNBQVM7Q0FDdkIsQ0FBQzs7cUJBRWEsY0FBYyIsImZpbGUiOiIxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50IG5vLWFsZXJ0OiAwICovXG4vKiBlc2xpbnQgbWF4LWxlbjogMCAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgUHJvcFR5cGVzIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4vQ29uc3QnO1xuaW1wb3J0IFRhYmxlSGVhZGVyIGZyb20gJy4vVGFibGVIZWFkZXInO1xuaW1wb3J0IFRhYmxlQm9keSBmcm9tICcuL1RhYmxlQm9keSc7XG5pbXBvcnQgUGFnaW5hdGlvbkxpc3QgZnJvbSAnLi9wYWdpbmF0aW9uL1BhZ2luYXRpb25MaXN0JztcbmltcG9ydCBUb29sQmFyIGZyb20gJy4vdG9vbGJhci9Ub29sQmFyJztcbmltcG9ydCBUYWJsZUZpbHRlciBmcm9tICcuL1RhYmxlRmlsdGVyJztcbmltcG9ydCB7IFRhYmxlRGF0YVN0b3JlIH0gZnJvbSAnLi9zdG9yZS9UYWJsZURhdGFTdG9yZSc7XG5pbXBvcnQgVXRpbCBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IGV4cG9ydENTViBmcm9tICcuL2Nzdl9leHBvcnRfdXRpbCc7XG5pbXBvcnQgeyBGaWx0ZXIgfSBmcm9tICcuL0ZpbHRlcic7XG5cbmNsYXNzIEJvb3RzdHJhcFRhYmxlIGV4dGVuZHMgQ29tcG9uZW50IHtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmlzSUUgPSBmYWxzZTtcbiAgICB0aGlzLl9hdHRhY2hDZWxsRWRpdEZ1bmMoKTtcbiAgICBpZiAoVXRpbC5jYW5Vc2VET00oKSkge1xuICAgICAgdGhpcy5pc0lFID0gZG9jdW1lbnQuZG9jdW1lbnRNb2RlO1xuICAgIH1cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5wcm9wcy5kYXRhKSkge1xuICAgICAgdGhpcy5zdG9yZSA9IG5ldyBUYWJsZURhdGFTdG9yZSh0aGlzLnByb3BzLmRhdGEuZ2V0RGF0YSgpKTtcbiAgICAgIHRoaXMucHJvcHMuZGF0YS5jbGVhcigpO1xuICAgICAgdGhpcy5wcm9wcy5kYXRhLm9uKCdjaGFuZ2UnLCAoZGF0YSkgPT4ge1xuICAgICAgICB0aGlzLnN0b3JlLnNldERhdGEoZGF0YSk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGRhdGE6IHRoaXMuZ2V0VGFibGVEYXRhKClcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY29weSA9IHRoaXMucHJvcHMuZGF0YS5zbGljZSgpO1xuICAgICAgdGhpcy5zdG9yZSA9IG5ldyBUYWJsZURhdGFTdG9yZShjb3B5KTtcbiAgICB9XG5cbiAgICB0aGlzLmluaXRUYWJsZSh0aGlzLnByb3BzKTtcblxuICAgIGlmICh0aGlzLmZpbHRlcikge1xuICAgICAgdGhpcy5maWx0ZXIub24oJ29uRmlsdGVyQ2hhbmdlJywgKGN1cnJlbnRGaWx0ZXIpID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVGaWx0ZXJEYXRhKGN1cnJlbnRGaWx0ZXIpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0Um93ICYmIHRoaXMucHJvcHMuc2VsZWN0Um93LnNlbGVjdGVkKSB7XG4gICAgICBjb25zdCBjb3B5ID0gdGhpcy5wcm9wcy5zZWxlY3RSb3cuc2VsZWN0ZWQuc2xpY2UoKTtcbiAgICAgIHRoaXMuc3RvcmUuc2V0U2VsZWN0ZWRSb3dLZXkoY29weSk7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGRhdGE6IHRoaXMuZ2V0VGFibGVEYXRhKCksXG4gICAgICBjdXJyUGFnZTogdGhpcy5wcm9wcy5vcHRpb25zLnBhZ2UgfHwgMSxcbiAgICAgIHNpemVQZXJQYWdlOiB0aGlzLnByb3BzLm9wdGlvbnMuc2l6ZVBlclBhZ2UgfHwgQ29uc3QuU0laRV9QRVJfUEFHRV9MSVNUWzBdLFxuICAgICAgc2VsZWN0ZWRSb3dLZXlzOiB0aGlzLnN0b3JlLmdldFNlbGVjdGVkUm93S2V5cygpXG4gICAgfTtcbiAgfVxuXG4gIGluaXRUYWJsZShwcm9wcykge1xuICAgIGxldCB7IGtleUZpZWxkIH0gPSBwcm9wcztcblxuICAgIGNvbnN0IGlzS2V5RmllbGREZWZpbmVkID0gdHlwZW9mIGtleUZpZWxkID09PSAnc3RyaW5nJyAmJiBrZXlGaWVsZC5sZW5ndGg7XG4gICAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChwcm9wcy5jaGlsZHJlbiwgY29sdW1uID0+IHtcbiAgICAgIGlmIChjb2x1bW4ucHJvcHMuaXNLZXkpIHtcbiAgICAgICAgaWYgKGtleUZpZWxkKSB7XG4gICAgICAgICAgdGhyb3cgJ0Vycm9yLiBNdWx0aXBsZSBrZXkgY29sdW1uIGJlIGRldGVjdGVkIGluIFRhYmxlSGVhZGVyQ29sdW1uLic7XG4gICAgICAgIH1cbiAgICAgICAga2V5RmllbGQgPSBjb2x1bW4ucHJvcHMuZGF0YUZpZWxkO1xuICAgICAgfVxuICAgICAgaWYgKGNvbHVtbi5wcm9wcy5maWx0ZXIpIHtcbiAgICAgICAgLy8gYSBjb2x1bW4gY29udGFpbnMgYSBmaWx0ZXJcbiAgICAgICAgaWYgKCF0aGlzLmZpbHRlcikge1xuICAgICAgICAgIC8vIGZpcnN0IHRpbWUgY3JlYXRlIHRoZSBmaWx0ZXIgb24gdGhlIEJvb3RzdHJhcFRhYmxlXG4gICAgICAgICAgdGhpcy5maWx0ZXIgPSBuZXcgRmlsdGVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcGFzcyB0aGUgZmlsdGVyIHRvIGNvbHVtbiB3aXRoIGZpbHRlclxuICAgICAgICBjb2x1bW4ucHJvcHMuZmlsdGVyLmVtaXR0ZXIgPSB0aGlzLmZpbHRlcjtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGNvbEluZm9zID0gdGhpcy5nZXRDb2x1bW5zRGVzY3JpcHRpb24ocHJvcHMpLnJlZHVjZSgoIHByZXYsIGN1cnIgKSA9PiB7XG4gICAgICBwcmV2W2N1cnIubmFtZV0gPSBjdXJyO1xuICAgICAgcmV0dXJuIHByZXY7XG4gICAgfSwge30pO1xuXG4gICAgaWYgKCFpc0tleUZpZWxkRGVmaW5lZCAmJiAha2V5RmllbGQpIHtcbiAgICAgIHRocm93IGBFcnJvci4gTm8gYW55IGtleSBjb2x1bW4gZGVmaW5lZCBpbiBUYWJsZUhlYWRlckNvbHVtbi5cbiAgICAgICAgICAgIFVzZSAnaXNLZXk9e3RydWV9JyB0byBzcGVjaWZ5IGEgdW5pcXVlIGNvbHVtbiBhZnRlciB2ZXJzaW9uIDAuNS40LmA7XG4gICAgfVxuXG4gICAgdGhpcy5zdG9yZS5zZXRQcm9wcyh7XG4gICAgICBpc1BhZ2luYXRpb246IHByb3BzLnBhZ2luYXRpb24sXG4gICAgICBrZXlGaWVsZDoga2V5RmllbGQsXG4gICAgICBjb2xJbmZvczogY29sSW5mb3MsXG4gICAgICBtdWx0aUNvbHVtblNlYXJjaDogcHJvcHMubXVsdGlDb2x1bW5TZWFyY2gsXG4gICAgICByZW1vdGU6IHRoaXMuaXNSZW1vdGVEYXRhU291cmNlKClcbiAgICB9KTtcbiAgfVxuXG4gIGdldFRhYmxlRGF0YSgpIHtcbiAgICBjb25zdCB7IG9wdGlvbnMsIHBhZ2luYXRpb24gfSA9IHRoaXMucHJvcHM7XG4gICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgIGlmIChvcHRpb25zLnNvcnROYW1lICYmIG9wdGlvbnMuc29ydE9yZGVyKSB7XG4gICAgICB0aGlzLnN0b3JlLnNvcnQob3B0aW9ucy5zb3J0T3JkZXIsIG9wdGlvbnMuc29ydE5hbWUpO1xuICAgIH1cblxuICAgIGlmIChwYWdpbmF0aW9uKSB7XG4gICAgICBsZXQgcGFnZTtcbiAgICAgIGxldCBzaXplUGVyUGFnZTtcbiAgICAgIGlmICh0aGlzLnN0b3JlLmlzQ2hhbmdlZFBhZ2UoKSkge1xuICAgICAgICBzaXplUGVyUGFnZSA9IHRoaXMuc3RhdGUuc2l6ZVBlclBhZ2U7XG4gICAgICAgIHBhZ2UgPSB0aGlzLnN0YXRlLmN1cnJQYWdlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2l6ZVBlclBhZ2UgPSBvcHRpb25zLnNpemVQZXJQYWdlIHx8IENvbnN0LlNJWkVfUEVSX1BBR0VfTElTVFswXTtcbiAgICAgICAgcGFnZSA9IG9wdGlvbnMucGFnZSB8fCAxO1xuICAgICAgfVxuICAgICAgcmVzdWx0ID0gdGhpcy5zdG9yZS5wYWdlKHBhZ2UsIHNpemVQZXJQYWdlKS5nZXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gdGhpcy5zdG9yZS5nZXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGdldENvbHVtbnNEZXNjcmlwdGlvbih7IGNoaWxkcmVuIH0pIHtcbiAgICByZXR1cm4gUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY29sdW1uLCBpKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBjb2x1bW4ucHJvcHMuZGF0YUZpZWxkLFxuICAgICAgICBhbGlnbjogY29sdW1uLnByb3BzLmRhdGFBbGlnbixcbiAgICAgICAgc29ydDogY29sdW1uLnByb3BzLmRhdGFTb3J0LFxuICAgICAgICBmb3JtYXQ6IGNvbHVtbi5wcm9wcy5kYXRhRm9ybWF0LFxuICAgICAgICBmb3JtYXRFeHRyYURhdGE6IGNvbHVtbi5wcm9wcy5mb3JtYXRFeHRyYURhdGEsXG4gICAgICAgIGZpbHRlckZvcm1hdHRlZDogY29sdW1uLnByb3BzLmZpbHRlckZvcm1hdHRlZCxcbiAgICAgICAgZWRpdGFibGU6IGNvbHVtbi5wcm9wcy5lZGl0YWJsZSxcbiAgICAgICAgaGlkZGVuOiBjb2x1bW4ucHJvcHMuaGlkZGVuLFxuICAgICAgICBzZWFyY2hhYmxlOiBjb2x1bW4ucHJvcHMuc2VhcmNoYWJsZSxcbiAgICAgICAgY2xhc3NOYW1lOiBjb2x1bW4ucHJvcHMuY29sdW1uQ2xhc3NOYW1lLFxuICAgICAgICB3aWR0aDogY29sdW1uLnByb3BzLndpZHRoLFxuICAgICAgICB0ZXh0OiBjb2x1bW4ucHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIHNvcnRGdW5jOiBjb2x1bW4ucHJvcHMuc29ydEZ1bmMsXG4gICAgICAgIGluZGV4OiBpXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcbiAgICB0aGlzLmluaXRUYWJsZShuZXh0UHJvcHMpO1xuICAgIGNvbnN0IHsgb3B0aW9ucywgc2VsZWN0Um93IH0gPSBuZXh0UHJvcHM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmV4dFByb3BzLmRhdGEpKSB7XG4gICAgICB0aGlzLnN0b3JlLnNldERhdGEobmV4dFByb3BzLmRhdGEuc2xpY2UoKSk7XG4gICAgICBsZXQgcGFnZSA9IG9wdGlvbnMucGFnZSB8fCB0aGlzLnN0YXRlLmN1cnJQYWdlO1xuICAgICAgY29uc3Qgc2l6ZVBlclBhZ2UgPSBvcHRpb25zLnNpemVQZXJQYWdlIHx8IHRoaXMuc3RhdGUuc2l6ZVBlclBhZ2U7XG5cbiAgICAgIC8vICMxMjVcbiAgICAgIGlmICghb3B0aW9ucy5wYWdlICYmXG4gICAgICAgIHBhZ2UgPj0gTWF0aC5jZWlsKG5leHRQcm9wcy5kYXRhLmxlbmd0aCAvIHNpemVQZXJQYWdlKSkge1xuICAgICAgICBwYWdlID0gMTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNvcnRJbmZvID0gdGhpcy5zdG9yZS5nZXRTb3J0SW5mbygpO1xuICAgICAgY29uc3Qgc29ydEZpZWxkID0gb3B0aW9ucy5zb3J0TmFtZSB8fCAoc29ydEluZm8gPyBzb3J0SW5mby5zb3J0RmllbGQgOiB1bmRlZmluZWQpO1xuICAgICAgY29uc3Qgc29ydE9yZGVyID0gb3B0aW9ucy5zb3J0T3JkZXIgfHwgKHNvcnRJbmZvID8gc29ydEluZm8ub3JkZXIgOiB1bmRlZmluZWQpO1xuICAgICAgaWYgKHNvcnRGaWVsZCAmJiBzb3J0T3JkZXIpIHRoaXMuc3RvcmUuc29ydChzb3J0T3JkZXIsIHNvcnRGaWVsZCk7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5zdG9yZS5wYWdlKHBhZ2UsIHNpemVQZXJQYWdlKS5nZXQoKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBkYXRhLFxuICAgICAgICBjdXJyUGFnZTogcGFnZSxcbiAgICAgICAgc2l6ZVBlclBhZ2VcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoc2VsZWN0Um93ICYmIHNlbGVjdFJvdy5zZWxlY3RlZCkge1xuICAgICAgLy8gc2V0IGRlZmF1bHQgc2VsZWN0IHJvd3MgdG8gc3RvcmUuXG4gICAgICBjb25zdCBjb3B5ID0gc2VsZWN0Um93LnNlbGVjdGVkLnNsaWNlKCk7XG4gICAgICB0aGlzLnN0b3JlLnNldFNlbGVjdGVkUm93S2V5KGNvcHkpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHNlbGVjdGVkUm93S2V5czogY29weVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5fYWRqdXN0VGFibGUoKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fYWRqdXN0VGFibGUpO1xuICAgIHRoaXMucmVmcy5ib2R5LnJlZnMuY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuX3Njcm9sbEhlYWRlcik7XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fYWRqdXN0VGFibGUpO1xuICAgIHRoaXMucmVmcy5ib2R5LnJlZnMuY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuX3Njcm9sbEhlYWRlcik7XG4gICAgaWYgKHRoaXMuZmlsdGVyKSB7XG4gICAgICB0aGlzLmZpbHRlci5yZW1vdmVBbGxMaXN0ZW5lcnMoJ29uRmlsdGVyQ2hhbmdlJyk7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgIHRoaXMuX2FkanVzdFRhYmxlKCk7XG4gICAgdGhpcy5fYXR0YWNoQ2VsbEVkaXRGdW5jKCk7XG4gICAgaWYgKHRoaXMucHJvcHMub3B0aW9ucy5hZnRlclRhYmxlQ29tcGxldGUpIHtcbiAgICAgIHRoaXMucHJvcHMub3B0aW9ucy5hZnRlclRhYmxlQ29tcGxldGUoKTtcbiAgICB9XG4gIH1cblxuICBfYXR0YWNoQ2VsbEVkaXRGdW5jKCkge1xuICAgIGNvbnN0IHsgY2VsbEVkaXQgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKGNlbGxFZGl0KSB7XG4gICAgICB0aGlzLnByb3BzLmNlbGxFZGl0Ll9fb25Db21wbGV0ZUVkaXRfXyA9IHRoaXMuaGFuZGxlRWRpdENlbGwuYmluZCh0aGlzKTtcbiAgICAgIGlmIChjZWxsRWRpdC5tb2RlICE9PSBDb25zdC5DRUxMX0VESVRfTk9ORSkge1xuICAgICAgICB0aGlzLnByb3BzLnNlbGVjdFJvdy5jbGlja1RvU2VsZWN0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLFxuICAgKiB0aGUgZGF0YWdyaWQgc2hvdWxkIGxvYWQgaXRzIGRhdGEgcmVtb3RlbHkuXG4gICAqXG4gICAqIEBwYXJhbSAge09iamVjdH0gIFtwcm9wc10gT3B0aW9uYWwuIElmIG5vdCBnaXZlbiwgdGhpcy5wcm9wcyB3aWxsIGJlIHVzZWRcbiAgICogQHJldHVybiB7Qm9vbGVhbn1cbiAgICovXG4gIGlzUmVtb3RlRGF0YVNvdXJjZShwcm9wcykge1xuICAgIHJldHVybiAocHJvcHMgfHwgdGhpcy5wcm9wcykucmVtb3RlO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHN0eWxlID0ge1xuICAgICAgaGVpZ2h0OiB0aGlzLnByb3BzLmhlaWdodCxcbiAgICAgIG1heEhlaWdodDogdGhpcy5wcm9wcy5tYXhIZWlnaHRcbiAgICB9O1xuXG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ2V0Q29sdW1uc0Rlc2NyaXB0aW9uKHRoaXMucHJvcHMpO1xuICAgIGNvbnN0IHNvcnRJbmZvID0gdGhpcy5zdG9yZS5nZXRTb3J0SW5mbygpO1xuICAgIGNvbnN0IHBhZ2luYXRpb24gPSB0aGlzLnJlbmRlclBhZ2luYXRpb24oKTtcbiAgICBjb25zdCB0b29sQmFyID0gdGhpcy5yZW5kZXJUb29sQmFyKCk7XG4gICAgY29uc3QgdGFibGVGaWx0ZXIgPSB0aGlzLnJlbmRlclRhYmxlRmlsdGVyKGNvbHVtbnMpO1xuICAgIGNvbnN0IGlzU2VsZWN0QWxsID0gdGhpcy5pc1NlbGVjdEFsbCgpO1xuICAgIGxldCBzb3J0SW5kaWNhdG9yID0gdGhpcy5wcm9wcy5vcHRpb25zLnNvcnRJbmRpY2F0b3I7XG4gICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLm9wdGlvbnMuc29ydEluZGljYXRvciA9PT0gJ3VuZGVmaW5lZCcpIHNvcnRJbmRpY2F0b3IgPSB0cnVlO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT0ncmVhY3QtYnMtdGFibGUtY29udGFpbmVyJz5cbiAgICAgICAgeyB0b29sQmFyIH1cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9J3JlYWN0LWJzLXRhYmxlJyByZWY9J3RhYmxlJyBzdHlsZT17IHN0eWxlIH1cbiAgICAgICAgICAgIG9uTW91c2VFbnRlcj17IHRoaXMuaGFuZGxlTW91c2VFbnRlciB9XG4gICAgICAgICAgICBvbk1vdXNlTGVhdmU9eyB0aGlzLmhhbmRsZU1vdXNlTGVhdmUgfT5cbiAgICAgICAgICA8VGFibGVIZWFkZXJcbiAgICAgICAgICAgIHJlZj0naGVhZGVyJ1xuICAgICAgICAgICAgcm93U2VsZWN0VHlwZT17IHRoaXMucHJvcHMuc2VsZWN0Um93Lm1vZGUgfVxuICAgICAgICAgICAgaGlkZVNlbGVjdENvbHVtbj17IHRoaXMucHJvcHMuc2VsZWN0Um93LmhpZGVTZWxlY3RDb2x1bW4gfVxuICAgICAgICAgICAgc29ydE5hbWU9eyBzb3J0SW5mbyA/IHNvcnRJbmZvLnNvcnRGaWVsZCA6IHVuZGVmaW5lZCB9XG4gICAgICAgICAgICBzb3J0T3JkZXI9eyBzb3J0SW5mbyA/IHNvcnRJbmZvLm9yZGVyIDogdW5kZWZpbmVkIH1cbiAgICAgICAgICAgIHNvcnRJbmRpY2F0b3I9eyBzb3J0SW5kaWNhdG9yIH1cbiAgICAgICAgICAgIG9uU29ydD17IHRoaXMuaGFuZGxlU29ydCB9XG4gICAgICAgICAgICBvblNlbGVjdEFsbFJvdz17IHRoaXMuaGFuZGxlU2VsZWN0QWxsUm93IH1cbiAgICAgICAgICAgIGJvcmRlcmVkPXsgdGhpcy5wcm9wcy5ib3JkZXJlZCB9XG4gICAgICAgICAgICBjb25kZW5zZWQ9eyB0aGlzLnByb3BzLmNvbmRlbnNlZCB9XG4gICAgICAgICAgICBpc0ZpbHRlcmVkPXsgdGhpcy5maWx0ZXIgPyB0cnVlIDogZmFsc2UgfVxuICAgICAgICAgICAgaXNTZWxlY3RBbGw9eyBpc1NlbGVjdEFsbCB9PlxuICAgICAgICAgICAgeyB0aGlzLnByb3BzLmNoaWxkcmVuIH1cbiAgICAgICAgICA8L1RhYmxlSGVhZGVyPlxuICAgICAgICAgIDxUYWJsZUJvZHkgcmVmPSdib2R5J1xuICAgICAgICAgICAgc3R5bGU9eyBzdHlsZSB9XG4gICAgICAgICAgICBkYXRhPXsgdGhpcy5zdGF0ZS5kYXRhIH1cbiAgICAgICAgICAgIGNvbHVtbnM9eyBjb2x1bW5zIH1cbiAgICAgICAgICAgIHRyQ2xhc3NOYW1lPXsgdGhpcy5wcm9wcy50ckNsYXNzTmFtZSB9XG4gICAgICAgICAgICBzdHJpcGVkPXsgdGhpcy5wcm9wcy5zdHJpcGVkIH1cbiAgICAgICAgICAgIGJvcmRlcmVkPXsgdGhpcy5wcm9wcy5ib3JkZXJlZCB9XG4gICAgICAgICAgICBob3Zlcj17IHRoaXMucHJvcHMuaG92ZXIgfVxuICAgICAgICAgICAga2V5RmllbGQ9eyB0aGlzLnN0b3JlLmdldEtleUZpZWxkKCkgfVxuICAgICAgICAgICAgY29uZGVuc2VkPXsgdGhpcy5wcm9wcy5jb25kZW5zZWQgfVxuICAgICAgICAgICAgc2VsZWN0Um93PXsgdGhpcy5wcm9wcy5zZWxlY3RSb3cgfVxuICAgICAgICAgICAgY2VsbEVkaXQ9eyB0aGlzLnByb3BzLmNlbGxFZGl0IH1cbiAgICAgICAgICAgIHNlbGVjdGVkUm93S2V5cz17IHRoaXMuc3RhdGUuc2VsZWN0ZWRSb3dLZXlzIH1cbiAgICAgICAgICAgIG9uUm93Q2xpY2s9eyB0aGlzLmhhbmRsZVJvd0NsaWNrIH1cbiAgICAgICAgICAgIG9uUm93TW91c2VPdmVyPXsgdGhpcy5oYW5kbGVSb3dNb3VzZU92ZXIgfVxuICAgICAgICAgICAgb25Sb3dNb3VzZU91dD17IHRoaXMuaGFuZGxlUm93TW91c2VPdXQgfVxuICAgICAgICAgICAgb25TZWxlY3RSb3c9eyB0aGlzLmhhbmRsZVNlbGVjdFJvdyB9XG4gICAgICAgICAgICBub0RhdGFUZXh0PXsgdGhpcy5wcm9wcy5vcHRpb25zLm5vRGF0YVRleHQgfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgeyB0YWJsZUZpbHRlciB9XG4gICAgICAgIHsgcGFnaW5hdGlvbiB9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgaXNTZWxlY3RBbGwoKSB7XG4gICAgY29uc3QgZGVmYXVsdFNlbGVjdFJvd0tleXMgPSB0aGlzLnN0b3JlLmdldFNlbGVjdGVkUm93S2V5cygpO1xuICAgIGNvbnN0IGFsbFJvd0tleXMgPSB0aGlzLnN0b3JlLmdldEFsbFJvd2tleSgpO1xuICAgIGlmIChkZWZhdWx0U2VsZWN0Um93S2V5cy5sZW5ndGggIT09IGFsbFJvd0tleXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZGVmYXVsdFNlbGVjdFJvd0tleXMubGVuZ3RoID09PSAwID8gZmFsc2UgOiAnaW5kZXRlcm1pbmF0ZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFuU2VsZWN0ZWQoKSB7XG4gICAgdGhpcy5zdG9yZS5zZXRTZWxlY3RlZFJvd0tleShbXSk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBzZWxlY3RlZFJvd0tleXM6IFtdXG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVTb3J0ID0gKG9yZGVyLCBzb3J0RmllbGQpID0+IHtcbiAgICBpZiAodGhpcy5wcm9wcy5vcHRpb25zLm9uU29ydENoYW5nZSkge1xuICAgICAgdGhpcy5wcm9wcy5vcHRpb25zLm9uU29ydENoYW5nZShzb3J0RmllbGQsIG9yZGVyLCB0aGlzLnByb3BzKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnN0b3JlLnNvcnQob3JkZXIsIHNvcnRGaWVsZCkuZ2V0KCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBkYXRhOiByZXN1bHRcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVBhZ2luYXRpb25EYXRhID0gKHBhZ2UsIHNpemVQZXJQYWdlKSA9PiB7XG4gICAgY29uc3QgeyBvblBhZ2VDaGFuZ2UgfSA9IHRoaXMucHJvcHMub3B0aW9ucztcbiAgICBpZiAob25QYWdlQ2hhbmdlKSB7XG4gICAgICBvblBhZ2VDaGFuZ2UocGFnZSwgc2l6ZVBlclBhZ2UpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzUmVtb3RlRGF0YVNvdXJjZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5zdG9yZS5wYWdlKHBhZ2UsIHNpemVQZXJQYWdlKS5nZXQoKTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGRhdGE6IHJlc3VsdCxcbiAgICAgIGN1cnJQYWdlOiBwYWdlLFxuICAgICAgc2l6ZVBlclBhZ2VcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZU1vdXNlTGVhdmUgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMub3B0aW9ucy5vbk1vdXNlTGVhdmUpIHtcbiAgICAgIHRoaXMucHJvcHMub3B0aW9ucy5vbk1vdXNlTGVhdmUoKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVNb3VzZUVudGVyID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnByb3BzLm9wdGlvbnMub25Nb3VzZUVudGVyKSB7XG4gICAgICB0aGlzLnByb3BzLm9wdGlvbnMub25Nb3VzZUVudGVyKCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlUm93TW91c2VPdXQgPSAocm93LCBldmVudCkgPT4ge1xuICAgIGlmICh0aGlzLnByb3BzLm9wdGlvbnMub25Sb3dNb3VzZU91dCkge1xuICAgICAgdGhpcy5wcm9wcy5vcHRpb25zLm9uUm93TW91c2VPdXQocm93LCBldmVudCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlUm93TW91c2VPdmVyID0gKHJvdywgZXZlbnQpID0+IHtcbiAgICBpZiAodGhpcy5wcm9wcy5vcHRpb25zLm9uUm93TW91c2VPdmVyKSB7XG4gICAgICB0aGlzLnByb3BzLm9wdGlvbnMub25Sb3dNb3VzZU92ZXIocm93LCBldmVudCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlUm93Q2xpY2sgPSByb3cgPT4ge1xuICAgIGlmICh0aGlzLnByb3BzLm9wdGlvbnMub25Sb3dDbGljaykge1xuICAgICAgdGhpcy5wcm9wcy5vcHRpb25zLm9uUm93Q2xpY2socm93KTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVTZWxlY3RBbGxSb3cgPSBlID0+IHtcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gZS5jdXJyZW50VGFyZ2V0LmNoZWNrZWQ7XG4gICAgbGV0IHNlbGVjdGVkUm93S2V5cyA9IFtdO1xuICAgIGxldCByZXN1bHQgPSB0cnVlO1xuICAgIGlmICh0aGlzLnByb3BzLnNlbGVjdFJvdy5vblNlbGVjdEFsbCkge1xuICAgICAgcmVzdWx0ID0gdGhpcy5wcm9wcy5zZWxlY3RSb3cub25TZWxlY3RBbGwoaXNTZWxlY3RlZCxcbiAgICAgICAgaXNTZWxlY3RlZCA/IHRoaXMuc3RvcmUuZ2V0KCkgOiBbXSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICd1bmRlZmluZWQnIHx8IHJlc3VsdCAhPT0gZmFsc2UpIHtcbiAgICAgIGlmIChpc1NlbGVjdGVkKSB7XG4gICAgICAgIHNlbGVjdGVkUm93S2V5cyA9IHRoaXMuc3RvcmUuZ2V0QWxsUm93a2V5KCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3RvcmUuc2V0U2VsZWN0ZWRSb3dLZXkoc2VsZWN0ZWRSb3dLZXlzKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBzZWxlY3RlZFJvd0tleXMgfSk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlU2hvd09ubHlTZWxlY3RlZCA9ICgpID0+IHtcbiAgICB0aGlzLnN0b3JlLmlnbm9yZU5vblNlbGVjdGVkKCk7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAodGhpcy5wcm9wcy5wYWdpbmF0aW9uKSB7XG4gICAgICByZXN1bHQgPSB0aGlzLnN0b3JlLnBhZ2UoMSwgdGhpcy5zdGF0ZS5zaXplUGVyUGFnZSkuZ2V0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMuc3RvcmUuZ2V0KCk7XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZGF0YTogcmVzdWx0LFxuICAgICAgY3VyclBhZ2U6IDFcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVNlbGVjdFJvdyA9IChyb3csIGlzU2VsZWN0ZWQpID0+IHtcbiAgICBsZXQgcmVzdWx0ID0gdHJ1ZTtcbiAgICBsZXQgY3VyclNlbGVjdGVkID0gdGhpcy5zdG9yZS5nZXRTZWxlY3RlZFJvd0tleXMoKTtcbiAgICBjb25zdCByb3dLZXkgPSByb3dbIHRoaXMuc3RvcmUuZ2V0S2V5RmllbGQoKSBdO1xuICAgIGNvbnN0IHsgc2VsZWN0Um93IH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChzZWxlY3RSb3cub25TZWxlY3QpIHtcbiAgICAgIHJlc3VsdCA9IHNlbGVjdFJvdy5vblNlbGVjdChyb3csIGlzU2VsZWN0ZWQpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAndW5kZWZpbmVkJyB8fCByZXN1bHQgIT09IGZhbHNlKSB7XG4gICAgICBpZiAoc2VsZWN0Um93Lm1vZGUgPT09IENvbnN0LlJPV19TRUxFQ1RfU0lOR0xFKSB7XG4gICAgICAgIGN1cnJTZWxlY3RlZCA9IGlzU2VsZWN0ZWQgPyBbIHJvd0tleSBdIDogW107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNTZWxlY3RlZCkge1xuICAgICAgICAgIGN1cnJTZWxlY3RlZC5wdXNoKHJvd0tleSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VyclNlbGVjdGVkID0gY3VyclNlbGVjdGVkLmZpbHRlcihrZXkgPT4gcm93S2V5ICE9PSBrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3RvcmUuc2V0U2VsZWN0ZWRSb3dLZXkoY3VyclNlbGVjdGVkKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzZWxlY3RlZFJvd0tleXM6IGN1cnJTZWxlY3RlZFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlRWRpdENlbGwobmV3VmFsLCByb3dJbmRleCwgY29sSW5kZXgpIHtcbiAgICBjb25zdCB7IGJlZm9yZVNhdmVDZWxsLCBhZnRlclNhdmVDZWxsIH0gPSB0aGlzLnByb3BzLmNlbGxFZGl0O1xuICAgIGxldCBmaWVsZE5hbWU7XG4gICAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaCh0aGlzLnByb3BzLmNoaWxkcmVuLCBmdW5jdGlvbihjb2x1bW4sIGkpIHtcbiAgICAgIGlmIChpID09PSBjb2xJbmRleCkge1xuICAgICAgICBmaWVsZE5hbWUgPSBjb2x1bW4ucHJvcHMuZGF0YUZpZWxkO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoYmVmb3JlU2F2ZUNlbGwpIHtcbiAgICAgIGNvbnN0IGlzVmFsaWQgPSBiZWZvcmVTYXZlQ2VsbCh0aGlzLnN0YXRlLmRhdGFbcm93SW5kZXhdLCBmaWVsZE5hbWUsIG5ld1ZhbCk7XG4gICAgICBpZiAoIWlzVmFsaWQgJiYgdHlwZW9mIGlzVmFsaWQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGRhdGE6IHRoaXMuc3RvcmUuZ2V0KClcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnN0b3JlLmVkaXQobmV3VmFsLCByb3dJbmRleCwgZmllbGROYW1lKS5nZXQoKTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGRhdGE6IHJlc3VsdFxuICAgIH0pO1xuXG4gICAgaWYgKGFmdGVyU2F2ZUNlbGwpIHtcbiAgICAgIGFmdGVyU2F2ZUNlbGwodGhpcy5zdGF0ZS5kYXRhW3Jvd0luZGV4XSwgZmllbGROYW1lLCBuZXdWYWwpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUFkZFJvd0F0QmVnaW4obmV3T2JqKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuc3RvcmUuYWRkQXRCZWdpbihuZXdPYmopO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBlO1xuICAgIH1cbiAgICB0aGlzLl9oYW5kbGVBZnRlckFkZGluZ1JvdyhuZXdPYmopO1xuICB9XG5cbiAgaGFuZGxlQWRkUm93ID0gbmV3T2JqID0+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5zdG9yZS5hZGQobmV3T2JqKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZTtcbiAgICB9XG4gICAgdGhpcy5faGFuZGxlQWZ0ZXJBZGRpbmdSb3cobmV3T2JqKTtcbiAgfVxuXG4gIGdldFNpemVQZXJQYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLnNpemVQZXJQYWdlO1xuICB9XG5cbiAgZ2V0Q3VycmVudFBhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuY3VyclBhZ2U7XG4gIH1cblxuICBoYW5kbGVEcm9wUm93ID0gcm93S2V5cyA9PiB7XG4gICAgY29uc3QgZHJvcFJvd0tleXMgPSByb3dLZXlzID8gcm93S2V5cyA6IHRoaXMuc3RvcmUuZ2V0U2VsZWN0ZWRSb3dLZXlzKCk7XG4gICAgLy8gYWRkIGNvbmZpcm0gYmVmb3JlIHRoZSBkZWxldGUgYWN0aW9uIGlmIHRoYXQgb3B0aW9uIGlzIHNldC5cbiAgICBpZiAoZHJvcFJvd0tleXMgJiYgZHJvcFJvd0tleXMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHRoaXMucHJvcHMub3B0aW9ucy5oYW5kbGVDb25maXJtRGVsZXRlUm93KSB7XG4gICAgICAgIHRoaXMucHJvcHMub3B0aW9ucy5oYW5kbGVDb25maXJtRGVsZXRlUm93KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmRlbGV0ZVJvdyhkcm9wUm93S2V5cyk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChjb25maXJtKCdBcmUgeW91IHN1cmUgd2FudCBkZWxldGU/JykpIHtcbiAgICAgICAgdGhpcy5kZWxldGVSb3coZHJvcFJvd0tleXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRlbGV0ZVJvdyhkcm9wUm93S2V5cykge1xuICAgIGxldCByZXN1bHQ7XG4gICAgdGhpcy5zdG9yZS5yZW1vdmUoZHJvcFJvd0tleXMpOyAgLy8gcmVtb3ZlIHNlbGVjdGVkIFJvd1xuICAgIHRoaXMuc3RvcmUuc2V0U2VsZWN0ZWRSb3dLZXkoW10pOyAgLy8gY2xlYXIgc2VsZWN0ZWQgcm93IGtleVxuXG4gICAgaWYgKHRoaXMucHJvcHMucGFnaW5hdGlvbikge1xuICAgICAgY29uc3QgeyBzaXplUGVyUGFnZSB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgIGNvbnN0IGN1cnJMYXN0UGFnZSA9IE1hdGguY2VpbCh0aGlzLnN0b3JlLmdldERhdGFOdW0oKSAvIHNpemVQZXJQYWdlKTtcbiAgICAgIGxldCB7IGN1cnJQYWdlIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgaWYgKGN1cnJQYWdlID4gY3Vyckxhc3RQYWdlKSBjdXJyUGFnZSA9IGN1cnJMYXN0UGFnZTtcbiAgICAgIHJlc3VsdCA9IHRoaXMuc3RvcmUucGFnZShjdXJyUGFnZSwgc2l6ZVBlclBhZ2UpLmdldCgpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGRhdGE6IHJlc3VsdCxcbiAgICAgICAgc2VsZWN0ZWRSb3dLZXlzOiB0aGlzLnN0b3JlLmdldFNlbGVjdGVkUm93S2V5cygpLFxuICAgICAgICBjdXJyUGFnZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMuc3RvcmUuZ2V0KCk7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZGF0YTogcmVzdWx0LFxuICAgICAgICBzZWxlY3RlZFJvd0tleXM6IHRoaXMuc3RvcmUuZ2V0U2VsZWN0ZWRSb3dLZXlzKClcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5wcm9wcy5vcHRpb25zLmFmdGVyRGVsZXRlUm93KSB7XG4gICAgICB0aGlzLnByb3BzLm9wdGlvbnMuYWZ0ZXJEZWxldGVSb3coZHJvcFJvd0tleXMpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUZpbHRlckRhdGEgPSBmaWx0ZXJPYmogPT4ge1xuICAgIHRoaXMuc3RvcmUuZmlsdGVyKGZpbHRlck9iaik7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAodGhpcy5wcm9wcy5wYWdpbmF0aW9uKSB7XG4gICAgICBjb25zdCB7IHNpemVQZXJQYWdlIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgcmVzdWx0ID0gdGhpcy5zdG9yZS5wYWdlKDEsIHNpemVQZXJQYWdlKS5nZXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gdGhpcy5zdG9yZS5nZXQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvcHMub3B0aW9ucy5hZnRlckNvbHVtbkZpbHRlcikge1xuICAgICAgdGhpcy5wcm9wcy5vcHRpb25zLmFmdGVyQ29sdW1uRmlsdGVyKGZpbHRlck9iaixcbiAgICAgICAgdGhpcy5zdG9yZS5nZXREYXRhSWdub3JpbmdQYWdpbmF0aW9uKCkpO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGRhdGE6IHJlc3VsdCxcbiAgICAgIGN1cnJQYWdlOiAxXG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVFeHBvcnRDU1YgPSAoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5zdG9yZS5nZXREYXRhSWdub3JpbmdQYWdpbmF0aW9uKCk7XG4gICAgY29uc3Qga2V5cyA9IFtdO1xuICAgIHRoaXMucHJvcHMuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKGNvbHVtbikge1xuICAgICAgaWYgKGNvbHVtbi5wcm9wcy5oaWRkZW4gPT09IGZhbHNlKSB7XG4gICAgICAgIGtleXMucHVzaChjb2x1bW4ucHJvcHMuZGF0YUZpZWxkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBleHBvcnRDU1YocmVzdWx0LCBrZXlzLCB0aGlzLnByb3BzLmNzdkZpbGVOYW1lKTtcbiAgfVxuXG4gIGhhbmRsZVNlYXJjaCA9IHNlYXJjaFRleHQgPT4ge1xuICAgIHRoaXMuc3RvcmUuc2VhcmNoKHNlYXJjaFRleHQpO1xuICAgIGxldCByZXN1bHQ7XG4gICAgaWYgKHRoaXMucHJvcHMucGFnaW5hdGlvbikge1xuICAgICAgY29uc3QgeyBzaXplUGVyUGFnZSB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgIHJlc3VsdCA9IHRoaXMuc3RvcmUucGFnZSgxLCBzaXplUGVyUGFnZSkuZ2V0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMuc3RvcmUuZ2V0KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzLm9wdGlvbnMuYWZ0ZXJTZWFyY2gpIHtcbiAgICAgIHRoaXMucHJvcHMub3B0aW9ucy5hZnRlclNlYXJjaChzZWFyY2hUZXh0LFxuICAgICAgICB0aGlzLnN0b3JlLmdldERhdGFJZ25vcmluZ1BhZ2luYXRpb24oKSk7XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZGF0YTogcmVzdWx0LFxuICAgICAgY3VyclBhZ2U6IDFcbiAgICB9KTtcbiAgfVxuXG4gIHJlbmRlclBhZ2luYXRpb24oKSB7XG4gICAgaWYgKHRoaXMucHJvcHMucGFnaW5hdGlvbikge1xuICAgICAgbGV0IGRhdGFTaXplO1xuICAgICAgaWYgKHRoaXMuaXNSZW1vdGVEYXRhU291cmNlKCkpIHtcbiAgICAgICAgZGF0YVNpemUgPSB0aGlzLnByb3BzLmZldGNoSW5mby5kYXRhVG90YWxTaXplO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YVNpemUgPSB0aGlzLnN0b3JlLmdldERhdGFOdW0oKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgb3B0aW9ucyB9ID0gdGhpcy5wcm9wcztcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdyZWFjdC1icy10YWJsZS1wYWdpbmF0aW9uJz5cbiAgICAgICAgICA8UGFnaW5hdGlvbkxpc3RcbiAgICAgICAgICAgIHJlZj0ncGFnaW5hdGlvbidcbiAgICAgICAgICAgIGN1cnJQYWdlPXsgdGhpcy5zdGF0ZS5jdXJyUGFnZSB9XG4gICAgICAgICAgICBjaGFuZ2VQYWdlPXsgdGhpcy5oYW5kbGVQYWdpbmF0aW9uRGF0YSB9XG4gICAgICAgICAgICBzaXplUGVyUGFnZT17IHRoaXMuc3RhdGUuc2l6ZVBlclBhZ2UgfVxuICAgICAgICAgICAgc2l6ZVBlclBhZ2VMaXN0PXsgb3B0aW9ucy5zaXplUGVyUGFnZUxpc3QgfHwgQ29uc3QuU0laRV9QRVJfUEFHRV9MSVNUIH1cbiAgICAgICAgICAgIHBhZ2luYXRpb25TaXplPXsgb3B0aW9ucy5wYWdpbmF0aW9uU2l6ZSB8fCBDb25zdC5QQUdJTkFUSU9OX1NJWkUgfVxuICAgICAgICAgICAgcmVtb3RlPXsgdGhpcy5pc1JlbW90ZURhdGFTb3VyY2UoKSB9XG4gICAgICAgICAgICBkYXRhU2l6ZT17IGRhdGFTaXplIH1cbiAgICAgICAgICAgIG9uU2l6ZVBlclBhZ2VMaXN0PXsgb3B0aW9ucy5vblNpemVQZXJQYWdlTGlzdCB9XG4gICAgICAgICAgICBwcmVQYWdlPXsgb3B0aW9ucy5wcmVQYWdlIHx8IENvbnN0LlBSRV9QQUdFIH1cbiAgICAgICAgICAgIG5leHRQYWdlPXsgb3B0aW9ucy5uZXh0UGFnZSB8fCBDb25zdC5ORVhUX1BBR0UgfVxuICAgICAgICAgICAgZmlyc3RQYWdlPXsgb3B0aW9ucy5maXJzdFBhZ2UgfHwgQ29uc3QuRklSU1RfUEFHRSB9XG4gICAgICAgICAgICBsYXN0UGFnZT17IG9wdGlvbnMubGFzdFBhZ2UgfHwgQ29uc3QuTEFTVF9QQUdFIH0gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJlbmRlclRvb2xCYXIoKSB7XG4gICAgY29uc3QgeyBzZWxlY3RSb3csIGluc2VydFJvdywgZGVsZXRlUm93LCBzZWFyY2gsIGNoaWxkcmVuIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGVuYWJsZVNob3dPbmx5U2VsZWN0ZWQgPSBzZWxlY3RSb3cgJiYgc2VsZWN0Um93LnNob3dPbmx5U2VsZWN0ZWQ7XG4gICAgaWYgKGVuYWJsZVNob3dPbmx5U2VsZWN0ZWRcbiAgICAgICAgfHwgaW5zZXJ0Um93XG4gICAgICAgIHx8IGRlbGV0ZVJvd1xuICAgICAgICB8fCBzZWFyY2hcbiAgICAgICAgfHwgdGhpcy5wcm9wcy5leHBvcnRDU1YpIHtcbiAgICAgIGxldCBjb2x1bW5zO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgIGNvbHVtbnMgPSBjaGlsZHJlbi5tYXAoZnVuY3Rpb24oY29sdW1uKSB7XG4gICAgICAgICAgY29uc3QgeyBwcm9wcyB9ID0gY29sdW1uO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICAgIGZpZWxkOiBwcm9wcy5kYXRhRmllbGQsXG4gICAgICAgICAgICAvLyB3aGVuIHlvdSB3YW50IHNhbWUgYXV0byBnZW5lcmF0ZSB2YWx1ZSBhbmQgbm90IGFsbG93IGVkaXQsIGV4YW1wbGUgSUQgZmllbGRcbiAgICAgICAgICAgIGF1dG9WYWx1ZTogcHJvcHMuYXV0b1ZhbHVlIHx8IGZhbHNlLFxuICAgICAgICAgICAgLy8gZm9yIGNyZWF0ZSBlZGl0b3IsIG5vIHBhcmFtcyBmb3IgY29sdW1uLmVkaXRhYmxlKCkgaW5kaWNhdGUgdGhhdCBlZGl0b3IgZm9yIG5ldyByb3dcbiAgICAgICAgICAgIGVkaXRhYmxlOiBwcm9wcy5lZGl0YWJsZSAmJiAodHlwZW9mIHByb3BzLmVkaXRhYmxlID09PSAnZnVuY3Rpb24nKSA/IHByb3BzLmVkaXRhYmxlKCkgOiBwcm9wcy5lZGl0YWJsZSxcbiAgICAgICAgICAgIGZvcm1hdDogcHJvcHMuZGF0YUZvcm1hdCA/IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBwcm9wcy5kYXRhRm9ybWF0KHZhbHVlLCBudWxsLCBwcm9wcy5mb3JtYXRFeHRyYURhdGEpLnJlcGxhY2UoLzwuKj8+L2csICcnKTtcbiAgICAgICAgICAgIH0gOiBmYWxzZVxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29sdW1ucyA9IFsge1xuICAgICAgICAgIG5hbWU6IGNoaWxkcmVuLnByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgIGZpZWxkOiBjaGlsZHJlbi5wcm9wcy5kYXRhRmllbGQsXG4gICAgICAgICAgZWRpdGFibGU6IGNoaWxkcmVuLnByb3BzLmVkaXRhYmxlXG4gICAgICAgIH0gXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdyZWFjdC1icy10YWJsZS10b29sLWJhcic+XG4gICAgICAgICAgPFRvb2xCYXJcbiAgICAgICAgICAgIGNsZWFyU2VhcmNoPXsgdGhpcy5wcm9wcy5vcHRpb25zLmNsZWFyU2VhcmNoIH1cbiAgICAgICAgICAgIGVuYWJsZUluc2VydD17IGluc2VydFJvdyB9XG4gICAgICAgICAgICBlbmFibGVEZWxldGU9eyBkZWxldGVSb3cgfVxuICAgICAgICAgICAgZW5hYmxlU2VhcmNoPXsgc2VhcmNoIH1cbiAgICAgICAgICAgIGVuYWJsZUV4cG9ydENTVj17IHRoaXMucHJvcHMuZXhwb3J0Q1NWIH1cbiAgICAgICAgICAgIGVuYWJsZVNob3dPbmx5U2VsZWN0ZWQ9eyBlbmFibGVTaG93T25seVNlbGVjdGVkIH1cbiAgICAgICAgICAgIGNvbHVtbnM9eyBjb2x1bW5zIH1cbiAgICAgICAgICAgIHNlYXJjaFBsYWNlaG9sZGVyPXsgdGhpcy5wcm9wcy5zZWFyY2hQbGFjZWhvbGRlciB9XG4gICAgICAgICAgICBvbkFkZFJvdz17IHRoaXMuaGFuZGxlQWRkUm93IH1cbiAgICAgICAgICAgIG9uRHJvcFJvdz17IHRoaXMuaGFuZGxlRHJvcFJvdyB9XG4gICAgICAgICAgICBvblNlYXJjaD17IHRoaXMuaGFuZGxlU2VhcmNoIH1cbiAgICAgICAgICAgIG9uRXhwb3J0Q1NWPXsgdGhpcy5oYW5kbGVFeHBvcnRDU1YgfVxuICAgICAgICAgICAgb25TaG93T25seVNlbGVjdGVkPXsgdGhpcy5oYW5kbGVTaG93T25seVNlbGVjdGVkIH0vPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlclRhYmxlRmlsdGVyKGNvbHVtbnMpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5jb2x1bW5GaWx0ZXIpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUYWJsZUZpbHRlciBjb2x1bW5zPXsgY29sdW1ucyB9XG4gICAgICAgICAgcm93U2VsZWN0VHlwZT17IHRoaXMucHJvcHMuc2VsZWN0Um93Lm1vZGUgfVxuICAgICAgICAgIG9uRmlsdGVyPXsgdGhpcy5oYW5kbGVGaWx0ZXJEYXRhIH0vPlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgX3Njcm9sbEhlYWRlciA9IChlKSA9PiB7XG4gICAgdGhpcy5yZWZzLmhlYWRlci5yZWZzLmNvbnRhaW5lci5zY3JvbGxMZWZ0ID0gZS5jdXJyZW50VGFyZ2V0LnNjcm9sbExlZnQ7XG4gIH1cblxuICBfYWRqdXN0VGFibGUgPSAoKSA9PiB7XG4gICAgdGhpcy5fYWRqdXN0SGVhZGVyV2lkdGgoKTtcbiAgICB0aGlzLl9hZGp1c3RIZWlnaHQoKTtcbiAgfVxuXG4gIF9hZGp1c3RIZWFkZXJXaWR0aCA9ICgpID0+IHtcbiAgICBjb25zdCBoZWFkZXIgPSB0aGlzLnJlZnMuaGVhZGVyLnJlZnMuaGVhZGVyO1xuICAgIGNvbnN0IGhlYWRlckNvbnRhaW5lciA9IHRoaXMucmVmcy5oZWFkZXIucmVmcy5jb250YWluZXI7XG4gICAgY29uc3QgdGJvZHkgPSB0aGlzLnJlZnMuYm9keS5yZWZzLnRib2R5O1xuICAgIGNvbnN0IGZpcnN0Um93ID0gdGJvZHkuY2hpbGROb2Rlc1swXTtcbiAgICBjb25zdCBpc1Njcm9sbCA9IGhlYWRlckNvbnRhaW5lci5vZmZzZXRXaWR0aCAhPT0gdGJvZHkucGFyZW50Tm9kZS5vZmZzZXRXaWR0aDtcbiAgICBjb25zdCBzY3JvbGxCYXJXaWR0aCA9IGlzU2Nyb2xsID8gVXRpbC5nZXRTY3JvbGxCYXJXaWR0aCgpIDogMDtcbiAgICBpZiAoZmlyc3RSb3cgJiYgdGhpcy5zdG9yZS5nZXREYXRhTnVtKCkpIHtcbiAgICAgIGNvbnN0IGNlbGxzID0gZmlyc3RSb3cuY2hpbGROb2RlcztcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2VsbCA9IGNlbGxzW2ldO1xuICAgICAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShjZWxsKTtcbiAgICAgICAgbGV0IHdpZHRoID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLndpZHRoLnJlcGxhY2UoJ3B4JywgJycpKTtcbiAgICAgICAgaWYgKHRoaXMuaXNJRSkge1xuICAgICAgICAgIGNvbnN0IHBhZGRpbmdMZWZ0V2lkdGggPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUucGFkZGluZ0xlZnQucmVwbGFjZSgncHgnLCAnJykpO1xuICAgICAgICAgIGNvbnN0IHBhZGRpbmdSaWdodFdpZHRoID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLnBhZGRpbmdSaWdodC5yZXBsYWNlKCdweCcsICcnKSk7XG4gICAgICAgICAgY29uc3QgYm9yZGVyUmlnaHRXaWR0aCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5ib3JkZXJSaWdodFdpZHRoLnJlcGxhY2UoJ3B4JywgJycpKTtcbiAgICAgICAgICBjb25zdCBib3JkZXJMZWZ0V2lkdGggPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUuYm9yZGVyTGVmdFdpZHRoLnJlcGxhY2UoJ3B4JywgJycpKTtcbiAgICAgICAgICB3aWR0aCA9IHdpZHRoICsgcGFkZGluZ0xlZnRXaWR0aCArIHBhZGRpbmdSaWdodFdpZHRoICsgYm9yZGVyUmlnaHRXaWR0aCArIGJvcmRlckxlZnRXaWR0aDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYXN0UGFkZGluZyA9IChjZWxscy5sZW5ndGggLSAxID09PSBpID8gc2Nyb2xsQmFyV2lkdGggOiAwKTtcbiAgICAgICAgaWYgKHdpZHRoIDw9IDApIHtcbiAgICAgICAgICB3aWR0aCA9IDEyMDtcbiAgICAgICAgICBjZWxsLndpZHRoID0gd2lkdGggKyBsYXN0UGFkZGluZyArICdweCc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gd2lkdGggKyBsYXN0UGFkZGluZyArICdweCc7XG4gICAgICAgIGhlYWRlci5jaGlsZE5vZGVzW2ldLnN0eWxlLndpZHRoID0gcmVzdWx0O1xuICAgICAgICBoZWFkZXIuY2hpbGROb2Rlc1tpXS5zdHlsZS5taW5XaWR0aCA9IHJlc3VsdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfYWRqdXN0SGVpZ2h0ID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnByb3BzLmhlaWdodC5pbmRleE9mKCclJykgPT09IC0xKSB7XG4gICAgICB0aGlzLnJlZnMuYm9keS5yZWZzLmNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPVxuICAgICAgICBwYXJzZUZsb2F0KHRoaXMucHJvcHMuaGVpZ2h0LCAxMCkgLSB0aGlzLnJlZnMuaGVhZGVyLnJlZnMuY29udGFpbmVyLm9mZnNldEhlaWdodCArICdweCc7XG4gICAgfVxuICB9XG5cbiAgX2hhbmRsZUFmdGVyQWRkaW5nUm93KG5ld09iaikge1xuICAgIGxldCByZXN1bHQ7XG4gICAgaWYgKHRoaXMucHJvcHMucGFnaW5hdGlvbikge1xuICAgICAgLy8gaWYgcGFnaW5hdGlvbiBpcyBlbmFibGVkIGFuZCBpbnNlcnQgcm93IGJlIHRyaWdnZXIsIGNoYW5nZSB0byBsYXN0IHBhZ2VcbiAgICAgIGNvbnN0IHsgc2l6ZVBlclBhZ2UgfSA9IHRoaXMuc3RhdGU7XG4gICAgICBjb25zdCBjdXJyTGFzdFBhZ2UgPSBNYXRoLmNlaWwodGhpcy5zdG9yZS5nZXREYXRhTnVtKCkgLyBzaXplUGVyUGFnZSk7XG4gICAgICByZXN1bHQgPSB0aGlzLnN0b3JlLnBhZ2UoY3Vyckxhc3RQYWdlLCBzaXplUGVyUGFnZSkuZ2V0KCk7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZGF0YTogcmVzdWx0LFxuICAgICAgICBjdXJyUGFnZTogY3Vyckxhc3RQYWdlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gdGhpcy5zdG9yZS5nZXQoKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBkYXRhOiByZXN1bHRcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLm9wdGlvbnMuYWZ0ZXJJbnNlcnRSb3cpIHtcbiAgICAgIHRoaXMucHJvcHMub3B0aW9ucy5hZnRlckluc2VydFJvdyhuZXdPYmopO1xuICAgIH1cbiAgfVxufVxuXG5Cb290c3RyYXBUYWJsZS5wcm9wVHlwZXMgPSB7XG4gIGtleUZpZWxkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBoZWlnaHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG1heEhlaWdodDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGF0YTogUHJvcFR5cGVzLm9uZU9mVHlwZShbIFByb3BUeXBlcy5hcnJheSwgUHJvcFR5cGVzLm9iamVjdCBdKSxcbiAgcmVtb3RlOiBQcm9wVHlwZXMuYm9vbCwgLy8gcmVtb3RlIGRhdGEsIGRlZmF1bHQgaXMgZmFsc2VcbiAgc3RyaXBlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGJvcmRlcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgaG92ZXI6IFByb3BUeXBlcy5ib29sLFxuICBjb25kZW5zZWQ6IFByb3BUeXBlcy5ib29sLFxuICBwYWdpbmF0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgc2VhcmNoUGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNlbGVjdFJvdzogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBtb2RlOiBQcm9wVHlwZXMub25lT2YoW1xuICAgICAgQ29uc3QuUk9XX1NFTEVDVF9OT05FLFxuICAgICAgQ29uc3QuUk9XX1NFTEVDVF9TSU5HTEUsXG4gICAgICBDb25zdC5ST1dfU0VMRUNUX01VTFRJXG4gICAgXSksXG4gICAgYmdDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzZWxlY3RlZDogUHJvcFR5cGVzLmFycmF5LFxuICAgIG9uU2VsZWN0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvblNlbGVjdEFsbDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgY2xpY2tUb1NlbGVjdDogUHJvcFR5cGVzLmJvb2wsXG4gICAgaGlkZVNlbGVjdENvbHVtbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgY2xpY2tUb1NlbGVjdEFuZEVkaXRDZWxsOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBzaG93T25seVNlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbFxuICB9KSxcbiAgY2VsbEVkaXQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgbW9kZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBibHVyVG9TYXZlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBiZWZvcmVTYXZlQ2VsbDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgYWZ0ZXJTYXZlQ2VsbDogUHJvcFR5cGVzLmZ1bmNcbiAgfSksXG4gIGluc2VydFJvdzogUHJvcFR5cGVzLmJvb2wsXG4gIGRlbGV0ZVJvdzogUHJvcFR5cGVzLmJvb2wsXG4gIHNlYXJjaDogUHJvcFR5cGVzLmJvb2wsXG4gIGNvbHVtbkZpbHRlcjogUHJvcFR5cGVzLmJvb2wsXG4gIHRyQ2xhc3NOYW1lOiBQcm9wVHlwZXMuYW55LFxuICBvcHRpb25zOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsZWFyU2VhcmNoOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBzb3J0TmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzb3J0T3JkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc29ydEluZGljYXRvcjogUHJvcFR5cGVzLmJvb2wsXG4gICAgYWZ0ZXJUYWJsZUNvbXBsZXRlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBhZnRlckRlbGV0ZVJvdzogUHJvcFR5cGVzLmZ1bmMsXG4gICAgYWZ0ZXJJbnNlcnRSb3c6IFByb3BUeXBlcy5mdW5jLFxuICAgIGFmdGVyU2VhcmNoOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBhZnRlckNvbHVtbkZpbHRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25Sb3dDbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gICAgcGFnZTogUHJvcFR5cGVzLm51bWJlcixcbiAgICBzaXplUGVyUGFnZUxpc3Q6IFByb3BUeXBlcy5hcnJheSxcbiAgICBzaXplUGVyUGFnZTogUHJvcFR5cGVzLm51bWJlcixcbiAgICBwYWdpbmF0aW9uU2l6ZTogUHJvcFR5cGVzLm51bWJlcixcbiAgICBvblNvcnRDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uUGFnZUNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25TaXplUGVyUGFnZUxpc3Q6IFByb3BUeXBlcy5mdW5jLFxuICAgIG5vRGF0YVRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgaGFuZGxlQ29uZmlybURlbGV0ZVJvdzogUHJvcFR5cGVzLmZ1bmMsXG4gICAgcHJlUGFnZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBuZXh0UGFnZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBmaXJzdFBhZ2U6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgbGFzdFBhZ2U6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSksXG4gIGZldGNoSW5mbzogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBkYXRhVG90YWxTaXplOiBQcm9wVHlwZXMubnVtYmVyXG4gIH0pLFxuICBleHBvcnRDU1Y6IFByb3BUeXBlcy5ib29sLFxuICBjc3ZGaWxlTmFtZTogUHJvcFR5cGVzLnN0cmluZ1xufTtcbkJvb3RzdHJhcFRhYmxlLmRlZmF1bHRQcm9wcyA9IHtcbiAgaGVpZ2h0OiAnMTAwJScsXG4gIG1heEhlaWdodDogdW5kZWZpbmVkLFxuICBzdHJpcGVkOiBmYWxzZSxcbiAgYm9yZGVyZWQ6IHRydWUsXG4gIGhvdmVyOiBmYWxzZSxcbiAgY29uZGVuc2VkOiBmYWxzZSxcbiAgcGFnaW5hdGlvbjogZmFsc2UsXG4gIHNlYXJjaFBsYWNlaG9sZGVyOiB1bmRlZmluZWQsXG4gIHNlbGVjdFJvdzoge1xuICAgIG1vZGU6IENvbnN0LlJPV19TRUxFQ1RfTk9ORSxcbiAgICBiZ0NvbG9yOiBDb25zdC5ST1dfU0VMRUNUX0JHX0NPTE9SLFxuICAgIHNlbGVjdGVkOiBbXSxcbiAgICBvblNlbGVjdDogdW5kZWZpbmVkLFxuICAgIG9uU2VsZWN0QWxsOiB1bmRlZmluZWQsXG4gICAgY2xpY2tUb1NlbGVjdDogZmFsc2UsXG4gICAgaGlkZVNlbGVjdENvbHVtbjogZmFsc2UsXG4gICAgY2xpY2tUb1NlbGVjdEFuZEVkaXRDZWxsOiBmYWxzZSxcbiAgICBzaG93T25seVNlbGVjdGVkOiBmYWxzZVxuICB9LFxuICBjZWxsRWRpdDoge1xuICAgIG1vZGU6IENvbnN0LkNFTExfRURJVF9OT05FLFxuICAgIGJsdXJUb1NhdmU6IGZhbHNlLFxuICAgIGJlZm9yZVNhdmVDZWxsOiB1bmRlZmluZWQsXG4gICAgYWZ0ZXJTYXZlQ2VsbDogdW5kZWZpbmVkXG4gIH0sXG4gIGluc2VydFJvdzogZmFsc2UsXG4gIGRlbGV0ZVJvdzogZmFsc2UsXG4gIHNlYXJjaDogZmFsc2UsXG4gIG11bHRpQ29sdW1uU2VhcmNoOiBmYWxzZSxcbiAgY29sdW1uRmlsdGVyOiBmYWxzZSxcbiAgdHJDbGFzc05hbWU6ICcnLFxuICBvcHRpb25zOiB7XG4gICAgY2xlYXJTZWFyY2g6IGZhbHNlLFxuICAgIHNvcnROYW1lOiB1bmRlZmluZWQsXG4gICAgc29ydE9yZGVyOiB1bmRlZmluZWQsXG4gICAgc29ydEluZGljYXRvcjogdHJ1ZSxcbiAgICBhZnRlclRhYmxlQ29tcGxldGU6IHVuZGVmaW5lZCxcbiAgICBhZnRlckRlbGV0ZVJvdzogdW5kZWZpbmVkLFxuICAgIGFmdGVySW5zZXJ0Um93OiB1bmRlZmluZWQsXG4gICAgYWZ0ZXJTZWFyY2g6IHVuZGVmaW5lZCxcbiAgICBhZnRlckNvbHVtbkZpbHRlcjogdW5kZWZpbmVkLFxuICAgIG9uUm93Q2xpY2s6IHVuZGVmaW5lZCxcbiAgICBvbk1vdXNlTGVhdmU6IHVuZGVmaW5lZCxcbiAgICBvbk1vdXNlRW50ZXI6IHVuZGVmaW5lZCxcbiAgICBvblJvd01vdXNlT3V0OiB1bmRlZmluZWQsXG4gICAgb25Sb3dNb3VzZU92ZXI6IHVuZGVmaW5lZCxcbiAgICBwYWdlOiB1bmRlZmluZWQsXG4gICAgc2l6ZVBlclBhZ2VMaXN0OiBDb25zdC5TSVpFX1BFUl9QQUdFX0xJU1QsXG4gICAgc2l6ZVBlclBhZ2U6IHVuZGVmaW5lZCxcbiAgICBwYWdpbmF0aW9uU2l6ZTogQ29uc3QuUEFHSU5BVElPTl9TSVpFLFxuICAgIG9uU2l6ZVBlclBhZ2VMaXN0OiB1bmRlZmluZWQsXG4gICAgbm9EYXRhVGV4dDogdW5kZWZpbmVkLFxuICAgIGhhbmRsZUNvbmZpcm1EZWxldGVSb3c6IHVuZGVmaW5lZCxcbiAgICBwcmVQYWdlOiBDb25zdC5QUkVfUEFHRSxcbiAgICBuZXh0UGFnZTogQ29uc3QuTkVYVF9QQUdFLFxuICAgIGZpcnN0UGFnZTogQ29uc3QuRklSU1RfUEFHRSxcbiAgICBsYXN0UGFnZTogQ29uc3QuTEFTVF9QQUdFXG4gIH0sXG4gIGZldGNoSW5mbzoge1xuICAgIGRhdGFUb3RhbFNpemU6IDBcbiAgfSxcbiAgZXhwb3J0Q1NWOiBmYWxzZSxcbiAgY3N2RmlsZU5hbWU6IHVuZGVmaW5lZFxufTtcblxuZXhwb3J0IGRlZmF1bHQgQm9vdHN0cmFwVGFibGU7XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9Cb290c3RyYXBUYWJsZS5qc1xuICoqLyJdLCJzb3VyY2VSb290IjoiIn0="); +},function(module,exports){eval("module.exports = __WEBPACK_EXTERNAL_MODULE_2__;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1wicm9vdFwiOlwiUmVhY3RcIixcImNvbW1vbmpzMlwiOlwicmVhY3RcIixcImNvbW1vbmpzXCI6XCJyZWFjdFwiLFwiYW1kXCI6XCJyZWFjdFwifT9jMDJmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwiZmlsZSI6IjIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMl9fO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogZXh0ZXJuYWwge1wicm9vdFwiOlwiUmVhY3RcIixcImNvbW1vbmpzMlwiOlwicmVhY3RcIixcImNvbW1vbmpzXCI6XCJyZWFjdFwiLFwiYW1kXCI6XCJyZWFjdFwifVxuICoqIG1vZHVsZSBpZCA9IDJcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports['default'] = {\n SORT_DESC: 'desc',\n SORT_ASC: 'asc',\n SIZE_PER_PAGE: 10,\n NEXT_PAGE: '>',\n LAST_PAGE: '>>',\n PRE_PAGE: '<',\n FIRST_PAGE: '<<',\n ROW_SELECT_BG_COLOR: '',\n ROW_SELECT_NONE: 'none',\n ROW_SELECT_SINGLE: 'radio',\n ROW_SELECT_MULTI: 'checkbox',\n CELL_EDIT_NONE: 'none',\n CELL_EDIT_CLICK: 'click',\n CELL_EDIT_DBCLICK: 'dbclick',\n SIZE_PER_PAGE_LIST: [10, 25, 30, 50],\n PAGINATION_SIZE: 5,\n NO_DATA_TEXT: 'There is no data to display',\n SHOW_ONLY_SELECT: 'Show Selected Only',\n SHOW_ALL: 'Show All',\n FILTER_DELAY: 500,\n FILTER_TYPE: {\n TEXT: 'TextFilter',\n REGEX: 'RegexFilter',\n SELECT: 'SelectFilter',\n NUMBER: 'NumberFilter',\n DATE: 'DateFilter',\n CUSTOM: 'CustomFilter'\n }\n};\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvQ29uc3QuanM/MjQ1YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztxQkFBZTtBQUNiLFdBQVMsRUFBRSxNQUFNO0FBQ2pCLFVBQVEsRUFBRSxLQUFLO0FBQ2YsZUFBYSxFQUFFLEVBQUU7QUFDakIsV0FBUyxFQUFFLEdBQUc7QUFDZCxXQUFTLEVBQUUsSUFBSTtBQUNmLFVBQVEsRUFBRSxHQUFHO0FBQ2IsWUFBVSxFQUFFLElBQUk7QUFDaEIscUJBQW1CLEVBQUUsRUFBRTtBQUN2QixpQkFBZSxFQUFFLE1BQU07QUFDdkIsbUJBQWlCLEVBQUUsT0FBTztBQUMxQixrQkFBZ0IsRUFBRSxVQUFVO0FBQzVCLGdCQUFjLEVBQUUsTUFBTTtBQUN0QixpQkFBZSxFQUFFLE9BQU87QUFDeEIsbUJBQWlCLEVBQUUsU0FBUztBQUM1QixvQkFBa0IsRUFBRSxDQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBRTtBQUN0QyxpQkFBZSxFQUFFLENBQUM7QUFDbEIsY0FBWSxFQUFFLDZCQUE2QjtBQUMzQyxrQkFBZ0IsRUFBRSxvQkFBb0I7QUFDdEMsVUFBUSxFQUFFLFVBQVU7QUFDcEIsY0FBWSxFQUFFLEdBQUc7QUFDakIsYUFBVyxFQUFFO0FBQ1gsUUFBSSxFQUFFLFlBQVk7QUFDbEIsU0FBSyxFQUFFLGFBQWE7QUFDcEIsVUFBTSxFQUFFLGNBQWM7QUFDdEIsVUFBTSxFQUFFLGNBQWM7QUFDdEIsUUFBSSxFQUFFLFlBQVk7QUFDbEIsVUFBTSxFQUFFLGNBQWM7R0FDdkI7Q0FDRiIsImZpbGUiOiIzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQge1xuICBTT1JUX0RFU0M6ICdkZXNjJyxcbiAgU09SVF9BU0M6ICdhc2MnLFxuICBTSVpFX1BFUl9QQUdFOiAxMCxcbiAgTkVYVF9QQUdFOiAnPicsXG4gIExBU1RfUEFHRTogJz4+JyxcbiAgUFJFX1BBR0U6ICc8JyxcbiAgRklSU1RfUEFHRTogJzw8JyxcbiAgUk9XX1NFTEVDVF9CR19DT0xPUjogJycsXG4gIFJPV19TRUxFQ1RfTk9ORTogJ25vbmUnLFxuICBST1dfU0VMRUNUX1NJTkdMRTogJ3JhZGlvJyxcbiAgUk9XX1NFTEVDVF9NVUxUSTogJ2NoZWNrYm94JyxcbiAgQ0VMTF9FRElUX05PTkU6ICdub25lJyxcbiAgQ0VMTF9FRElUX0NMSUNLOiAnY2xpY2snLFxuICBDRUxMX0VESVRfREJDTElDSzogJ2RiY2xpY2snLFxuICBTSVpFX1BFUl9QQUdFX0xJU1Q6IFsgMTAsIDI1LCAzMCwgNTAgXSxcbiAgUEFHSU5BVElPTl9TSVpFOiA1LFxuICBOT19EQVRBX1RFWFQ6ICdUaGVyZSBpcyBubyBkYXRhIHRvIGRpc3BsYXknLFxuICBTSE9XX09OTFlfU0VMRUNUOiAnU2hvdyBTZWxlY3RlZCBPbmx5JyxcbiAgU0hPV19BTEw6ICdTaG93IEFsbCcsXG4gIEZJTFRFUl9ERUxBWTogNTAwLFxuICBGSUxURVJfVFlQRToge1xuICAgIFRFWFQ6ICdUZXh0RmlsdGVyJyxcbiAgICBSRUdFWDogJ1JlZ2V4RmlsdGVyJyxcbiAgICBTRUxFQ1Q6ICdTZWxlY3RGaWx0ZXInLFxuICAgIE5VTUJFUjogJ051bWJlckZpbHRlcicsXG4gICAgREFURTogJ0RhdGVGaWx0ZXInLFxuICAgIENVU1RPTTogJ0N1c3RvbUZpbHRlcidcbiAgfVxufTtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL0NvbnN0LmpzXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = __webpack_require__(5);\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _Const = __webpack_require__(3);\n\nvar _Const2 = _interopRequireDefault(_Const);\n\nvar _classnames = __webpack_require__(6);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _SelectRowHeaderColumn = __webpack_require__(7);\n\nvar _SelectRowHeaderColumn2 = _interopRequireDefault(_SelectRowHeaderColumn);\n\nvar Checkbox = (function (_Component) {\n _inherits(Checkbox, _Component);\n\n function Checkbox() {\n _classCallCheck(this, Checkbox);\n\n _get(Object.getPrototypeOf(Checkbox.prototype), 'constructor', this).apply(this, arguments);\n }\n\n _createClass(Checkbox, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.update(this.props.checked);\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(props) {\n this.update(props.checked);\n }\n }, {\n key: 'update',\n value: function update(checked) {\n _reactDom2['default'].findDOMNode(this).indeterminate = checked === 'indeterminate';\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2['default'].createElement('input', { className: 'react-bs-select-all',\n type: 'checkbox',\n checked: this.props.checked,\n onChange: this.props.onChange });\n }\n }]);\n\n return Checkbox;\n})(_react.Component);\n\nvar TableHeader = (function (_Component2) {\n _inherits(TableHeader, _Component2);\n\n function TableHeader() {\n _classCallCheck(this, TableHeader);\n\n _get(Object.getPrototypeOf(TableHeader.prototype), 'constructor', this).apply(this, arguments);\n }\n\n _createClass(TableHeader, [{\n key: 'render',\n value: function render() {\n var containerClasses = (0, _classnames2['default'])('react-bs-container-header', 'table-header-wrapper');\n var tableClasses = (0, _classnames2['default'])('table', 'table-hover', {\n 'table-bordered': this.props.bordered,\n 'table-condensed': this.props.condensed\n });\n var selectRowHeaderCol = null;\n if (!this.props.hideSelectColumn) selectRowHeaderCol = this.renderSelectRowHeader();\n this._attachClearSortCaretFunc();\n\n return _react2['default'].createElement(\n 'div',\n { ref: 'container', className: containerClasses },\n _react2['default'].createElement(\n 'table',\n { className: tableClasses },\n _react2['default'].createElement(\n 'thead',\n null,\n _react2['default'].createElement(\n 'tr',\n { ref: 'header' },\n selectRowHeaderCol,\n this.props.children\n )\n )\n )\n );\n }\n }, {\n key: 'renderSelectRowHeader',\n value: function renderSelectRowHeader() {\n if (this.props.rowSelectType === _Const2['default'].ROW_SELECT_SINGLE) {\n return _react2['default'].createElement(_SelectRowHeaderColumn2['default'], null);\n } else if (this.props.rowSelectType === _Const2['default'].ROW_SELECT_MULTI) {\n return _react2['default'].createElement(\n _SelectRowHeaderColumn2['default'],\n null,\n _react2['default'].createElement(Checkbox, {\n onChange: this.props.onSelectAllRow,\n checked: this.props.isSelectAll })\n );\n } else {\n return null;\n }\n }\n }, {\n key: '_attachClearSortCaretFunc',\n value: function _attachClearSortCaretFunc() {\n var _props = this.props;\n var sortIndicator = _props.sortIndicator;\n var children = _props.children;\n var sortName = _props.sortName;\n var sortOrder = _props.sortOrder;\n var onSort = _props.onSort;\n\n if (Array.isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n var field = children[i].props.dataField;\n var sort = field === sortName ? sortOrder : undefined;\n this.props.children[i] = _react2['default'].cloneElement(children[i], { key: i, onSort: onSort, sort: sort, sortIndicator: sortIndicator });\n }\n } else {\n var field = children.props.dataField;\n var sort = field === sortName ? sortOrder : undefined;\n this.props.children = _react2['default'].cloneElement(children, { key: 0, onSort: onSort, sort: sort, sortIndicator: sortIndicator });\n }\n }\n }]);\n\n return TableHeader;\n})(_react.Component);\n\nTableHeader.propTypes = {\n rowSelectType: _react.PropTypes.string,\n onSort: _react.PropTypes.func,\n onSelectAllRow: _react.PropTypes.func,\n sortName: _react.PropTypes.string,\n sortOrder: _react.PropTypes.string,\n hideSelectColumn: _react.PropTypes.bool,\n bordered: _react.PropTypes.bool,\n condensed: _react.PropTypes.bool,\n isFiltered: _react.PropTypes.bool,\n isSelectAll: _react.PropTypes.oneOf([true, 'indeterminate', false]),\n sortIndicator: _react.PropTypes.bool\n};\n\nexports['default'] = TableHeader;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvVGFibGVIZWFkZXIuanM/Y2RjNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O2lDQUE0QyxDQUFPOzs7O29DQUM5QixDQUFXOzs7O2lDQUNkLENBQVM7Ozs7c0NBQ04sQ0FBWTs7OztpREFDQyxDQUF5Qjs7OztJQUVyRCxRQUFRO1lBQVIsUUFBUTs7V0FBUixRQUFROzBCQUFSLFFBQVE7OytCQUFSLFFBQVE7OztlQUFSLFFBQVE7O1dBQ0ssNkJBQUc7QUFBRSxVQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7S0FBRTs7O1dBQy9CLG1DQUFDLEtBQUssRUFBRTtBQUFFLFVBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQUU7OztXQUMxRCxnQkFBQyxPQUFPLEVBQUU7QUFDZCw0QkFBUyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsYUFBYSxHQUFHLE9BQU8sS0FBSyxlQUFlLENBQUM7S0FDeEU7OztXQUNLLGtCQUFHO0FBQ1AsYUFDRSw0Q0FBTyxTQUFTLEVBQUMscUJBQXFCO0FBQ3BDLFlBQUksRUFBQyxVQUFVO0FBQ2YsZUFBTyxFQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBUztBQUM5QixnQkFBUSxFQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBVSxHQUFHLENBQ3JDO0tBQ0g7OztTQWJHLFFBQVE7OztJQWdCUixXQUFXO1lBQVgsV0FBVzs7V0FBWCxXQUFXOzBCQUFYLFdBQVc7OytCQUFYLFdBQVc7OztlQUFYLFdBQVc7O1dBRVQsa0JBQUc7QUFDUCxVQUFNLGdCQUFnQixHQUFHLDZCQUFTLDJCQUEyQixFQUFFLHNCQUFzQixDQUFDLENBQUM7QUFDdkYsVUFBTSxZQUFZLEdBQUcsNkJBQVMsT0FBTyxFQUFFLGFBQWEsRUFBRTtBQUNwRCx3QkFBZ0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7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LEVBQUUsaUJBQVUsSUFBSTtBQUNoQyxVQUFRLEVBQUUsaUJBQVUsSUFBSTtBQUN4QixXQUFTLEVBQUUsaUJBQVUsSUFBSTtBQUN6QixZQUFVLEVBQUUsaUJBQVUsSUFBSTtBQUMxQixhQUFXLEVBQUUsaUJBQVUsS0FBSyxDQUFDLENBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxLQUFLLENBQUUsQ0FBQztBQUM5RCxlQUFhLEVBQUUsaUJBQVUsSUFBSTtDQUM5QixDQUFDOztxQkFFYSxXQUFXIiwiZmlsZSI6IjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBQcm9wVHlwZXMgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBDb25zdCBmcm9tICcuL0NvbnN0JztcbmltcG9ydCBjbGFzc1NldCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBTZWxlY3RSb3dIZWFkZXJDb2x1bW4gZnJvbSAnLi9TZWxlY3RSb3dIZWFkZXJDb2x1bW4nO1xuXG5jbGFzcyBDaGVja2JveCBleHRlbmRzIENvbXBvbmVudCB7XG4gIGNvbXBvbmVudERpZE1vdW50KCkgeyB0aGlzLnVwZGF0ZSh0aGlzLnByb3BzLmNoZWNrZWQpOyB9XG4gIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMocHJvcHMpIHsgdGhpcy51cGRhdGUocHJvcHMuY2hlY2tlZCk7IH1cbiAgdXBkYXRlKGNoZWNrZWQpIHtcbiAgICBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKS5pbmRldGVybWluYXRlID0gY2hlY2tlZCA9PT0gJ2luZGV0ZXJtaW5hdGUnO1xuICB9XG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGlucHV0IGNsYXNzTmFtZT0ncmVhY3QtYnMtc2VsZWN0LWFsbCdcbiAgICAgICAgdHlwZT0nY2hlY2tib3gnXG4gICAgICAgIGNoZWNrZWQ9eyB0aGlzLnByb3BzLmNoZWNrZWQgfVxuICAgICAgICBvbkNoYW5nZT17IHRoaXMucHJvcHMub25DaGFuZ2UgfSAvPlxuICAgICk7XG4gIH1cbn1cblxuY2xhc3MgVGFibGVIZWFkZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBjb250YWluZXJDbGFzc2VzID0gY2xhc3NTZXQoJ3JlYWN0LWJzLWNvbnRhaW5lci1oZWFkZXInLCAndGFibGUtaGVhZGVyLXdyYXBwZXInKTtcbiAgICBjb25zdCB0YWJsZUNsYXNzZXMgPSBjbGFzc1NldCgndGFibGUnLCAndGFibGUtaG92ZXInLCB7XG4gICAgICAndGFibGUtYm9yZGVyZWQnOiB0aGlzLnByb3BzLmJvcmRlcmVkLFxuICAgICAgJ3RhYmxlLWNvbmRlbnNlZCc6IHRoaXMucHJvcHMuY29uZGVuc2VkXG4gICAgfSk7XG4gICAgbGV0IHNlbGVjdFJvd0hlYWRlckNvbCA9IG51bGw7XG4gICAgaWYgKCF0aGlzLnByb3BzLmhpZGVTZWxlY3RDb2x1bW4pIHNlbGVjdFJvd0hlYWRlckNvbCA9IHRoaXMucmVuZGVyU2VsZWN0Um93SGVhZGVyKCk7XG4gICAgdGhpcy5fYXR0YWNoQ2xlYXJTb3J0Q2FyZXRGdW5jKCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiByZWY9J2NvbnRhaW5lcicgY2xhc3NOYW1lPXsgY29udGFpbmVyQ2xhc3NlcyB9PlxuICAgICAgICA8dGFibGUgY2xhc3NOYW1lPXsgdGFibGVDbGFzc2VzIH0+XG4gICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgPHRyIHJlZj0naGVhZGVyJz5cbiAgICAgICAgICAgICAgeyBzZWxlY3RSb3dIZWFkZXJDb2wgfVxuICAgICAgICAgICAgICB7IHRoaXMucHJvcHMuY2hpbGRyZW4gfVxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlclNlbGVjdFJvd0hlYWRlcigpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5yb3dTZWxlY3RUeXBlID09PSBDb25zdC5ST1dfU0VMRUNUX1NJTkdMRSkge1xuICAgICAgcmV0dXJuICg8U2VsZWN0Um93SGVhZGVyQ29sdW1uIC8+KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMucm93U2VsZWN0VHlwZSA9PT0gQ29uc3QuUk9XX1NFTEVDVF9NVUxUSSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFNlbGVjdFJvd0hlYWRlckNvbHVtbj5cbiAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgIG9uQ2hhbmdlPXsgdGhpcy5wcm9wcy5vblNlbGVjdEFsbFJvdyB9XG4gICAgICAgICAgICBjaGVja2VkPXsgdGhpcy5wcm9wcy5pc1NlbGVjdEFsbCB9Lz5cbiAgICAgICAgPC9TZWxlY3RSb3dIZWFkZXJDb2x1bW4+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBfYXR0YWNoQ2xlYXJTb3J0Q2FyZXRGdW5jKCkge1xuICAgIGNvbnN0IHsgc29ydEluZGljYXRvciwgY2hpbGRyZW4sIHNvcnROYW1lLCBzb3J0T3JkZXIsIG9uU29ydCB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBjaGlsZHJlbltpXS5wcm9wcy5kYXRhRmllbGQ7XG4gICAgICAgIGNvbnN0IHNvcnQgPSBmaWVsZCA9PT0gc29ydE5hbWUgPyBzb3J0T3JkZXIgOiB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMucHJvcHMuY2hpbGRyZW5baV0gPVxuICAgICAgICAgIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbltpXSxcbiAgICAgICAgICAgIHsga2V5OiBpLCBvblNvcnQsIHNvcnQsIHNvcnRJbmRpY2F0b3IgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gY2hpbGRyZW4ucHJvcHMuZGF0YUZpZWxkO1xuICAgICAgY29uc3Qgc29ydCA9IGZpZWxkID09PSBzb3J0TmFtZSA/IHNvcnRPcmRlciA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMucHJvcHMuY2hpbGRyZW4gPVxuICAgICAgICBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sXG4gICAgICAgICAgeyBrZXk6IDAsIG9uU29ydCwgc29ydCwgc29ydEluZGljYXRvciB9KTtcbiAgICB9XG4gIH1cbn1cblRhYmxlSGVhZGVyLnByb3BUeXBlcyA9IHtcbiAgcm93U2VsZWN0VHlwZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25Tb3J0OiBQcm9wVHlwZXMuZnVuYyxcbiAgb25TZWxlY3RBbGxSb3c6IFByb3BUeXBlcy5mdW5jLFxuICBzb3J0TmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgc29ydE9yZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBoaWRlU2VsZWN0Q29sdW1uOiBQcm9wVHlwZXMuYm9vbCxcbiAgYm9yZGVyZWQ6IFByb3BUeXBlcy5ib29sLFxuICBjb25kZW5zZWQ6IFByb3BUeXBlcy5ib29sLFxuICBpc0ZpbHRlcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNTZWxlY3RBbGw6IFByb3BUeXBlcy5vbmVPZihbIHRydWUsICdpbmRldGVybWluYXRlJywgZmFsc2UgXSksXG4gIHNvcnRJbmRpY2F0b3I6IFByb3BUeXBlcy5ib29sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBUYWJsZUhlYWRlcjtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL1RhYmxlSGVhZGVyLmpzXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports){eval("module.exports = __WEBPACK_EXTERNAL_MODULE_5__;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1wicm9vdFwiOlwiUmVhY3RET01cIixcImNvbW1vbmpzMlwiOlwicmVhY3QtZG9tXCIsXCJjb21tb25qc1wiOlwicmVhY3QtZG9tXCIsXCJhbWRcIjpcInJlYWN0LWRvbVwifT9iMTFhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwiZmlsZSI6IjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfNV9fO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogZXh0ZXJuYWwge1wicm9vdFwiOlwiUmVhY3RET01cIixcImNvbW1vbmpzMlwiOlwicmVhY3QtZG9tXCIsXCJjb21tb25qc1wiOlwicmVhY3QtZG9tXCIsXCJhbWRcIjpcInJlYWN0LWRvbVwifVxuICoqIG1vZHVsZSBpZCA9IDVcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports,__webpack_require__){eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n Copyright (c) 2016 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n 'use strict';\n\n var hasOwn = {}.hasOwnProperty;\n\n function classNames () {\n var classes = [];\n\n for (var i = 0; i < arguments.length; i++) {\n var arg = arguments[i];\n if (!arg) continue;\n\n var argType = typeof arg;\n\n if (argType === 'string' || argType === 'number') {\n classes.push(arg);\n } else if (Array.isArray(arg)) {\n classes.push(classNames.apply(null, arg));\n } else if (argType === 'object') {\n for (var key in arg) {\n if (hasOwn.call(arg, key) && arg[key]) {\n classes.push(key);\n }\n }\n }\n }\n\n return classes.join(' ');\n }\n\n if (typeof module !== 'undefined' && module.exports) {\n module.exports = classNames;\n } else if (true) {\n // register as 'classnames', consistent with npm package name\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function () {\n return classNames;\n }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {\n window.classNames = classNames;\n }\n}());\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2NsYXNzbmFtZXMvaW5kZXguanM/OGU0MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxnQkFBZ0I7O0FBRWhCO0FBQ0E7O0FBRUEsaUJBQWlCLHNCQUFzQjtBQUN2QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFO0FBQ0Y7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiNi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICBDb3B5cmlnaHQgKGMpIDIwMTYgSmVkIFdhdHNvbi5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLCBzZWVcbiAgaHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lc1xuKi9cbi8qIGdsb2JhbCBkZWZpbmUgKi9cblxuKGZ1bmN0aW9uICgpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuXHRmdW5jdGlvbiBjbGFzc05hbWVzICgpIHtcblx0XHR2YXIgY2xhc3NlcyA9IFtdO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBhcmcgPSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoIWFyZykgY29udGludWU7XG5cblx0XHRcdHZhciBhcmdUeXBlID0gdHlwZW9mIGFyZztcblxuXHRcdFx0aWYgKGFyZ1R5cGUgPT09ICdzdHJpbmcnIHx8IGFyZ1R5cGUgPT09ICdudW1iZXInKSB7XG5cdFx0XHRcdGNsYXNzZXMucHVzaChhcmcpO1xuXHRcdFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcblx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGNsYXNzTmFtZXMuYXBwbHkobnVsbCwgYXJnKSk7XG5cdFx0XHR9IGVsc2UgaWYgKGFyZ1R5cGUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdGZvciAodmFyIGtleSBpbiBhcmcpIHtcblx0XHRcdFx0XHRpZiAoaGFzT3duLmNhbGwoYXJnLCBrZXkpICYmIGFyZ1trZXldKSB7XG5cdFx0XHRcdFx0XHRjbGFzc2VzLnB1c2goa2V5KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7XG5cdH1cblxuXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIHJlZ2lzdGVyIGFzICdjbGFzc25hbWVzJywgY29uc2lzdGVudCB3aXRoIG5wbSBwYWNrYWdlIG5hbWVcblx0XHRkZWZpbmUoJ2NsYXNzbmFtZXMnLCBbXSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXM7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xuXHR9XG59KCkpO1xuXG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34vY2xhc3NuYW1lcy9pbmRleC5qc1xuICoqIG1vZHVsZSBpZCA9IDZcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar SelectRowHeaderColumn = (function (_Component) {\n _inherits(SelectRowHeaderColumn, _Component);\n\n function SelectRowHeaderColumn() {\n _classCallCheck(this, SelectRowHeaderColumn);\n\n _get(Object.getPrototypeOf(SelectRowHeaderColumn.prototype), 'constructor', this).apply(this, arguments);\n }\n\n _createClass(SelectRowHeaderColumn, [{\n key: 'render',\n value: function render() {\n return _react2['default'].createElement(\n 'th',\n { style: { textAlign: 'center' } },\n this.props.children\n );\n }\n }]);\n\n return SelectRowHeaderColumn;\n})(_react.Component);\n\nSelectRowHeaderColumn.propTypes = {\n children: _react.PropTypes.node\n};\nexports['default'] = SelectRowHeaderColumn;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvU2VsZWN0Um93SGVhZGVyQ29sdW1uLmpzP2FhYmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztpQ0FBNEMsQ0FBTzs7OztJQUU3QyxxQkFBcUI7WUFBckIscUJBQXFCOztXQUFyQixxQkFBcUI7MEJBQXJCLHFCQUFxQjs7K0JBQXJCLHFCQUFxQjs7O2VBQXJCLHFCQUFxQjs7V0FFbkIsa0JBQUc7QUFDUCxhQUNFOztVQUFJLEtBQUssRUFBRyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUk7UUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRO09BQ2xCLENBQ0w7S0FDSDs7O1NBUkcscUJBQXFCOzs7QUFVM0IscUJBQXFCLENBQUMsU0FBUyxHQUFHO0FBQ2hDLFVBQVEsRUFBRSxpQkFBVSxJQUFJO0NBQ3pCLENBQUM7cUJBQ2EscUJBQXFCIiwiZmlsZSI6IjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBQcm9wVHlwZXMgfSBmcm9tICdyZWFjdCc7XG5cbmNsYXNzIFNlbGVjdFJvd0hlYWRlckNvbHVtbiBleHRlbmRzIENvbXBvbmVudCB7XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8dGggc3R5bGU9eyB7IHRleHRBbGlnbjogJ2NlbnRlcicgfSB9PlxuICAgICAgICB7IHRoaXMucHJvcHMuY2hpbGRyZW4gfVxuICAgICAgPC90aD5cbiAgICApO1xuICB9XG59XG5TZWxlY3RSb3dIZWFkZXJDb2x1bW4ucHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGVcbn07XG5leHBvcnQgZGVmYXVsdCBTZWxlY3RSb3dIZWFkZXJDb2x1bW47XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9TZWxlY3RSb3dIZWFkZXJDb2x1bW4uanNcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _Const = __webpack_require__(3);\n\nvar _Const2 = _interopRequireDefault(_Const);\n\nvar _TableRow = __webpack_require__(9);\n\nvar _TableRow2 = _interopRequireDefault(_TableRow);\n\nvar _TableColumn = __webpack_require__(10);\n\nvar _TableColumn2 = _interopRequireDefault(_TableColumn);\n\nvar _TableEditColumn = __webpack_require__(11);\n\nvar _TableEditColumn2 = _interopRequireDefault(_TableEditColumn);\n\nvar _classnames = __webpack_require__(6);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar isFun = function isFun(obj) {\n return obj && typeof obj === 'function';\n};\n\nvar TableBody = (function (_Component) {\n _inherits(TableBody, _Component);\n\n function TableBody(props) {\n var _this = this;\n\n _classCallCheck(this, TableBody);\n\n _get(Object.getPrototypeOf(TableBody.prototype), 'constructor', this).call(this, props);\n\n this.handleRowMouseOut = function (rowIndex, event) {\n var targetRow = _this.props.data[rowIndex];\n _this.props.onRowMouseOut(targetRow, event);\n };\n\n this.handleRowMouseOver = function (rowIndex, event) {\n var targetRow = _this.props.data[rowIndex];\n _this.props.onRowMouseOver(targetRow, event);\n };\n\n this.handleRowClick = function (rowIndex) {\n var selectedRow = undefined;\n var _props = _this.props;\n var data = _props.data;\n var onRowClick = _props.onRowClick;\n\n data.forEach(function (row, i) {\n if (i === rowIndex - 1) {\n selectedRow = row;\n }\n });\n onRowClick(selectedRow);\n };\n\n this.handleSelectRow = function (rowIndex, isSelected) {\n var selectedRow = undefined;\n var _props2 = _this.props;\n var data = _props2.data;\n var onSelectRow = _props2.onSelectRow;\n\n data.forEach(function (row, i) {\n if (i === rowIndex - 1) {\n selectedRow = row;\n return false;\n }\n });\n onSelectRow(selectedRow, isSelected);\n };\n\n this.handleSelectRowColumChange = function (e) {\n if (!_this.props.selectRow.clickToSelect || !_this.props.selectRow.clickToSelectAndEditCell) {\n _this.handleSelectRow(e.currentTarget.parentElement.parentElement.rowIndex + 1, e.currentTarget.checked);\n }\n };\n\n this.handleEditCell = function (rowIndex, columnIndex) {\n _this.editing = true;\n if (_this._isSelectRowDefined()) {\n columnIndex--;\n if (_this.props.selectRow.hideSelectColumn) columnIndex++;\n }\n rowIndex--;\n var stateObj = {\n currEditCell: {\n rid: rowIndex,\n cid: columnIndex\n }\n };\n\n if (_this.props.selectRow.clickToSelectAndEditCell) {\n _this.handleSelectRow(rowIndex + 1, true);\n }\n _this.setState(stateObj);\n };\n\n this.handleCompleteEditCell = function (newVal, rowIndex, columnIndex) {\n _this.setState({ currEditCell: null });\n if (newVal !== null) {\n _this.props.cellEdit.__onCompleteEdit__(newVal, rowIndex, columnIndex);\n }\n };\n\n this.state = {\n currEditCell: null\n };\n this.editing = false;\n }\n\n _createClass(TableBody, [{\n key: 'render',\n value: function render() {\n var tableClasses = (0, _classnames2['default'])('table', {\n 'table-striped': this.props.striped,\n 'table-bordered': this.props.bordered,\n 'table-hover': this.props.hover,\n 'table-condensed': this.props.condensed\n });\n\n var isSelectRowDefined = this._isSelectRowDefined();\n var tableHeader = this.renderTableHeader(isSelectRowDefined);\n\n var tableRows = this.props.data.map(function (data, r) {\n var tableColumns = this.props.columns.map(function (column, i) {\n var fieldValue = data[column.name];\n if (this.editing && column.name !== this.props.keyField && // Key field can't be edit\n column.editable && // column is editable? default is true, user can set it false\n this.state.currEditCell !== null && this.state.currEditCell.rid === r && this.state.currEditCell.cid === i) {\n var editable = column.editable;\n var format = column.format ? function (value) {\n return column.format(value, data, column.formatExtraData).replace(/<.*?>/g, '');\n } : false;\n\n if (isFun(column.editable)) {\n editable = column.editable(fieldValue, data, r, i);\n }\n\n return _react2['default'].createElement(\n _TableEditColumn2['default'],\n {\n completeEdit: this.handleCompleteEditCell,\n // add by bluespring for column editor customize\n editable: editable,\n format: column.format ? format : false,\n key: i,\n blurToSave: this.props.cellEdit.blurToSave,\n rowIndex: r,\n colIndex: i },\n fieldValue\n );\n } else {\n // add by bluespring for className customize\n var columnChild = fieldValue;\n var tdClassName = column.className;\n if (isFun(column.className)) {\n tdClassName = column.className(fieldValue, data, r, i);\n }\n\n if (typeof column.format !== 'undefined') {\n var formattedValue = column.format(fieldValue, data, column.formatExtraData);\n if (!_react2['default'].isValidElement(formattedValue)) {\n columnChild = _react2['default'].createElement('div', { dangerouslySetInnerHTML: { __html: formattedValue } });\n } else {\n columnChild = formattedValue;\n }\n }\n return _react2['default'].createElement(\n _TableColumn2['default'],\n { key: i,\n dataAlign: column.align,\n className: tdClassName,\n cellEdit: this.props.cellEdit,\n hidden: column.hidden,\n onEdit: this.handleEditCell,\n width: column.width },\n columnChild\n );\n }\n }, this);\n\n var selected = this.props.selectedRowKeys.indexOf(data[this.props.keyField]) !== -1;\n var selectRowColumn = isSelectRowDefined && !this.props.selectRow.hideSelectColumn ? this.renderSelectRowColumn(selected) : null;\n // add by bluespring for className customize\n var trClassName = this.props.trClassName;\n if (isFun(this.props.trClassName)) {\n trClassName = this.props.trClassName(data, r);\n }\n return _react2['default'].createElement(\n _TableRow2['default'],\n { isSelected: selected, key: r, className: trClassName,\n selectRow: isSelectRowDefined ? this.props.selectRow : undefined,\n enableCellEdit: this.props.cellEdit.mode !== _Const2['default'].CELL_EDIT_NONE,\n onRowClick: this.handleRowClick,\n onRowMouseOver: this.handleRowMouseOver,\n onRowMouseOut: this.handleRowMouseOut,\n onSelectRow: this.handleSelectRow },\n selectRowColumn,\n tableColumns\n );\n }, this);\n\n if (tableRows.length === 0) {\n tableRows.push(_react2['default'].createElement(\n _TableRow2['default'],\n { key: '##table-empty##' },\n _react2['default'].createElement(\n 'td',\n { colSpan: this.props.columns.length + (isSelectRowDefined ? 1 : 0),\n className: 'react-bs-table-no-data' },\n this.props.noDataText || _Const2['default'].NO_DATA_TEXT\n )\n ));\n }\n\n this.editing = false;\n\n return _react2['default'].createElement(\n 'div',\n { ref: 'container', className: 'react-bs-container-body', style: this.props.style },\n _react2['default'].createElement(\n 'table',\n { className: tableClasses },\n tableHeader,\n _react2['default'].createElement(\n 'tbody',\n { ref: 'tbody' },\n tableRows\n )\n )\n );\n }\n }, {\n key: 'renderTableHeader',\n value: function renderTableHeader(isSelectRowDefined) {\n var selectRowHeader = null;\n\n if (isSelectRowDefined) {\n var style = {\n width: 30,\n minWidth: 30\n };\n if (!this.props.selectRow.hideSelectColumn) {\n selectRowHeader = _react2['default'].createElement('col', { style: style, key: -1 });\n }\n }\n var theader = this.props.columns.map(function (column, i) {\n var width = column.width === null ? column.width : parseInt(column.width, 10);\n var style = {\n display: column.hidden ? 'none' : null,\n width: width,\n minWidth: width\n /** add min-wdth to fix user assign column width\n not eq offsetWidth in large column table **/\n };\n return _react2['default'].createElement('col', { style: style, key: i, className: column.className });\n });\n\n return _react2['default'].createElement(\n 'colgroup',\n { ref: 'header' },\n selectRowHeader,\n theader\n );\n }\n }, {\n key: 'renderSelectRowColumn',\n value: function renderSelectRowColumn(selected) {\n if (this.props.selectRow.mode === _Const2['default'].ROW_SELECT_SINGLE) {\n return _react2['default'].createElement(\n _TableColumn2['default'],\n { dataAlign: 'center' },\n _react2['default'].createElement('input', { type: 'radio', checked: selected,\n onChange: this.handleSelectRowColumChange })\n );\n } else {\n return _react2['default'].createElement(\n _TableColumn2['default'],\n { dataAlign: 'center' },\n _react2['default'].createElement('input', { type: 'checkbox', checked: selected,\n onChange: this.handleSelectRowColumChange })\n );\n }\n }\n }, {\n key: '_isSelectRowDefined',\n value: function _isSelectRowDefined() {\n return this.props.selectRow.mode === _Const2['default'].ROW_SELECT_SINGLE || this.props.selectRow.mode === _Const2['default'].ROW_SELECT_MULTI;\n }\n }]);\n\n return TableBody;\n})(_react.Component);\n\nTableBody.propTypes = {\n data: _react.PropTypes.array,\n columns: _react.PropTypes.array,\n striped: _react.PropTypes.bool,\n bordered: _react.PropTypes.bool,\n hover: _react.PropTypes.bool,\n condensed: _react.PropTypes.bool,\n keyField: _react.PropTypes.string,\n selectedRowKeys: _react.PropTypes.array,\n onRowClick: _react.PropTypes.func,\n onSelectRow: _react.PropTypes.func,\n noDataText: _react.PropTypes.string,\n style: _react.PropTypes.object\n};\nexports['default'] = TableBody;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvVGFibGVCb2R5LmpzPzVkNWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztpQ0FBNEMsQ0FBTzs7OztpQ0FDakMsQ0FBUzs7OztvQ0FDTixDQUFZOzs7O3VDQUNULEVBQWU7Ozs7MkNBQ1gsRUFBbUI7Ozs7c0NBQzFCLENBQVk7Ozs7QUFFakMsSUFBTSxLQUFLLEdBQUcsU0FBUixLQUFLLENBQVksR0FBRyxFQUFFO0FBQzFCLFNBQU8sR0FBRyxJQUFLLE9BQU8sR0FBRyxLQUFLLFVBQVcsQ0FBQztDQUMzQyxDQUFDOztJQUVJLFNBQVM7WUFBVCxTQUFTOztBQUVGLFdBRlAsU0FBUyxDQUVELEtBQUssRUFBRTs7OzBCQUZmLFNBQVM7O0FBR1gsK0JBSEUsU0FBUyw2Q0FHTCxLQUFLLEVBQUU7O1NBK0pmLGlCQUFpQixHQUFHLFVBQUMsUUFBUSxFQUFFLEtBQUssRUFBSztBQUN2QyxVQUFNLFNBQVMsR0FBRyxNQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDNUMsWUFBSyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUM1Qzs7U0FFRCxrQkFBa0IsR0FBRyxVQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUs7QUFDeEMsVUFBTSxTQUFTLEdBQUcsTUFBSyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzVDLFlBQUssS0FBSyxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDN0M7O1NBRUQsY0FBYyxHQUFHLGtCQUFRLEVBQUk7QUFDM0IsVUFBSSxXQUFXLGFBQUM7bUJBQ2EsTUFBSyxLQUFLO1VBQS9CLElBQUksVUFBSixJQUFJO1VBQUUsVUFBVSxVQUFWLFVBQVU7O0FBQ3hCLFVBQUksQ0FBQyxPQUFPLENBQUMsVUFBQyxHQUFHLEVBQUUsQ0FBQyxFQUFLO0FBQ3ZCLFlBQUksQ0FBQyxLQUFL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QUssbUJBQU0saUJBQWlCLElBQ3RELElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxtQkFBTSxnQkFBZ0IsQ0FBQztLQUM1RDs7O1NBNVBHLFNBQVM7OztBQThQZixTQUFTLENBQUMsU0FBUyxHQUFHO0FBQ3BCLE1BQUksRUFBRSxpQkFBVSxLQUFLO0FBQ3JCLFNBQU8sRUFBRSxpQkFBVSxLQUFLO0FBQ3hCLFNBQU8sRUFBRSxpQkFBVSxJQUFJO0FBQ3ZCLFVBQVEsRUFBRSxpQkFBVSxJQUFJO0FBQ3hCLE9BQUssRUFBRSxpQkFBVSxJQUFJO0FBQ3JCLFdBQVMsRUFBRSxpQkFBVSxJQUFJO0FBQ3pCLFVBQVEsRUFBRSxpQkFBVSxNQUFNO0FBQzFCLGlCQUFlLEVBQUUsaUJBQVUsS0FBSztBQUNoQyxZQUFVLEVBQUUsaUJBQVUsSUFBSTtBQUMxQixhQUFXLEVBQUUsaUJBQVUsSUFBSTtBQUMzQixZQUFVLEVBQUUsaUJBQVUsTUFBTTtBQUM1QixPQUFLLEVBQUUsaUJBQVUsTUFBTTtDQUN4QixDQUFDO3FCQUNhLFNBQVMiLCJmaWxlIjoiOC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFByb3BUeXBlcyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBDb25zdCBmcm9tICcuL0NvbnN0JztcbmltcG9ydCBUYWJsZVJvdyBmcm9tICcuL1RhYmxlUm93JztcbmltcG9ydCBUYWJsZUNvbHVtbiBmcm9tICcuL1RhYmxlQ29sdW1uJztcbmltcG9ydCBUYWJsZUVkaXRDb2x1bW4gZnJvbSAnLi9UYWJsZUVkaXRDb2x1bW4nO1xuaW1wb3J0IGNsYXNzU2V0IGZyb20gJ2NsYXNzbmFtZXMnO1xuXG5jb25zdCBpc0Z1biA9IGZ1bmN0aW9uKG9iaikge1xuICByZXR1cm4gb2JqICYmICh0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKTtcbn07XG5cbmNsYXNzIFRhYmxlQm9keSBleHRlbmRzIENvbXBvbmVudCB7XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGN1cnJFZGl0Q2VsbDogbnVsbFxuICAgIH07XG4gICAgdGhpcy5lZGl0aW5nID0gZmFsc2U7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgdGFibGVDbGFzc2VzID0gY2xhc3NTZXQoJ3RhYmxlJywge1xuICAgICAgJ3RhYmxlLXN0cmlwZWQnOiB0aGlzLnByb3BzLnN0cmlwZWQsXG4gICAgICAndGFibGUtYm9yZGVyZWQnOiB0aGlzLnByb3BzLmJvcmRlcmVkLFxuICAgICAgJ3RhYmxlLWhvdmVyJzogdGhpcy5wcm9wcy5ob3ZlcixcbiAgICAgICd0YWJsZS1jb25kZW5zZWQnOiB0aGlzLnByb3BzLmNvbmRlbnNlZFxuICAgIH0pO1xuXG4gICAgY29uc3QgaXNTZWxlY3RSb3dEZWZpbmVkID0gdGhpcy5faXNTZWxlY3RSb3dEZWZpbmVkKCk7XG4gICAgY29uc3QgdGFibGVIZWFkZXIgPSB0aGlzLnJlbmRlclRhYmxlSGVhZGVyKGlzU2VsZWN0Um93RGVmaW5lZCk7XG5cbiAgICBjb25zdCB0YWJsZVJvd3MgPSB0aGlzLnByb3BzLmRhdGEubWFwKGZ1bmN0aW9uKGRhdGEsIHIpIHtcbiAgICAgIGNvbnN0IHRhYmxlQ29sdW1ucyA9IHRoaXMucHJvcHMuY29sdW1ucy5tYXAoZnVuY3Rpb24oY29sdW1uLCBpKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPSBkYXRhW2NvbHVtbi5uYW1lXTtcbiAgICAgICAgaWYgKHRoaXMuZWRpdGluZyAmJlxuICAgICAgICAgIGNvbHVtbi5uYW1lICE9PSB0aGlzLnByb3BzLmtleUZpZWxkICYmIC8vIEtleSBmaWVsZCBjYW4ndCBiZSBlZGl0XG4gICAgICAgICAgY29sdW1uLmVkaXRhYmxlICYmIC8vIGNvbHVtbiBpcyBlZGl0YWJsZT8gZGVmYXVsdCBpcyB0cnVlLCB1c2VyIGNhbiBzZXQgaXQgZmFsc2VcbiAgICAgICAgICB0aGlzLnN0YXRlLmN1cnJFZGl0Q2VsbCAhPT0gbnVsbCAmJlxuICAgICAgICAgIHRoaXMuc3RhdGUuY3VyckVkaXRDZWxsLnJpZCA9PT0gciAmJlxuICAgICAgICAgIHRoaXMuc3RhdGUuY3VyckVkaXRDZWxsLmNpZCA9PT0gaSkge1xuICAgICAgICAgIGxldCBlZGl0YWJsZSA9IGNvbHVtbi5lZGl0YWJsZTtcbiAgICAgICAgICBjb25zdCBmb3JtYXQgPSBjb2x1bW4uZm9ybWF0ID8gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2x1bW4uZm9ybWF0KHZhbHVlLCBkYXRhLCBjb2x1bW4uZm9ybWF0RXh0cmFEYXRhKS5yZXBsYWNlKC88Lio/Pi9nLCAnJyk7XG4gICAgICAgICAgfSA6IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKGlzRnVuKGNvbHVtbi5lZGl0YWJsZSkpIHtcbiAgICAgICAgICAgIGVkaXRhYmxlID0gY29sdW1uLmVkaXRhYmxlKGZpZWxkVmFsdWUsIGRhdGEsIHIsIGkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxUYWJsZUVkaXRDb2x1bW5cbiAgICAgICAgICAgICAgICBjb21wbGV0ZUVkaXQ9eyB0aGlzLmhhbmRsZUNvbXBsZXRlRWRpdENlbGwgfVxuICAgICAgICAgICAgICAgIC8vIGFkZCBieSBibHVlc3ByaW5nIGZvciBjb2x1bW4gZWRpdG9yIGN1c3RvbWl6ZVxuICAgICAgICAgICAgICAgIGVkaXRhYmxlPXsgZWRpdGFibGUgfVxuICAgICAgICAgICAgICAgIGZvcm1hdD17IGNvbHVtbi5mb3JtYXQgPyBmb3JtYXQgOiBmYWxzZSB9XG4gICAgICAgICAgICAgICAga2V5PXsgaSB9XG4gICAgICAgICAgICAgICAgYmx1clRvU2F2ZT17IHRoaXMucHJvcHMuY2VsbEVkaXQuYmx1clRvU2F2ZSB9XG4gICAgICAgICAgICAgICAgcm93SW5kZXg9eyByIH1cbiAgICAgICAgICAgICAgICBjb2xJbmRleD17IGkgfT5cbiAgICAgICAgICAgICAgICB7IGZpZWxkVmFsdWUgfVxuICAgICAgICAgICAgICA8L1RhYmxlRWRpdENvbHVtbj5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gYWRkIGJ5IGJsdWVzcHJpbmcgZm9yIGNsYXNzTmFtZSBjdXN0b21pemVcbiAgICAgICAgICBsZXQgY29sdW1uQ2hpbGQgPSBmaWVsZFZhbHVlO1xuICAgICAgICAgIGxldCB0ZENsYXNzTmFtZSA9IGNvbHVtbi5jbGFzc05hbWU7XG4gICAgICAgICAgaWYgKGlzRnVuKGNvbHVtbi5jbGFzc05hbWUpKSB7XG4gICAgICAgICAgICB0ZENsYXNzTmFtZSA9IGNvbHVtbi5jbGFzc05hbWUoZmllbGRWYWx1ZSwgZGF0YSwgciwgaSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBjb2x1bW4uZm9ybWF0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkVmFsdWUgPSBjb2x1bW4uZm9ybWF0KGZpZWxkVmFsdWUsIGRhdGEsIGNvbHVtbi5mb3JtYXRFeHRyYURhdGEpO1xuICAgICAgICAgICAgaWYgKCFSZWFjdC5pc1ZhbGlkRWxlbWVudChmb3JtYXR0ZWRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgY29sdW1uQ2hpbGQgPSAoXG4gICAgICAgICAgICAgICAgPGRpdiBkYW5nZXJvdXNseVNldElubmVySFRNTD17IHsgX19odG1sOiBmb3JtYXR0ZWRWYWx1ZSB9IH0+PC9kaXY+XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb2x1bW5DaGlsZCA9IGZvcm1hdHRlZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFRhYmxlQ29sdW1uIGtleT17IGkgfVxuICAgICAgICAgICAgICBkYXRhQWxpZ249eyBjb2x1bW4uYWxpZ24gfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9eyB0ZENsYXNzTmFtZSB9XG4gICAgICAgICAgICAgIGNlbGxFZGl0PXsgdGhpcy5wcm9wcy5jZWxsRWRpdCB9XG4gICAgICAgICAgICAgIGhpZGRlbj17IGNvbHVtbi5oaWRkZW4gfVxuICAgICAgICAgICAgICBvbkVkaXQ9eyB0aGlzLmhhbmRsZUVkaXRDZWxsIH1cbiAgICAgICAgICAgICAgd2lkdGg9eyBjb2x1bW4ud2lkdGggfT5cbiAgICAgICAgICAgICAgeyBjb2x1bW5DaGlsZCB9XG4gICAgICAgICAgICA8L1RhYmxlQ29sdW1uPlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0sIHRoaXMpO1xuXG4gICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMucHJvcHMuc2VsZWN0ZWRSb3dLZXlzLmluZGV4T2YoZGF0YVt0aGlzLnByb3BzLmtleUZpZWxkXSkgIT09IC0xO1xuICAgICAgY29uc3Qgc2VsZWN0Um93Q29sdW1uID0gaXNTZWxlY3RSb3dEZWZpbmVkICYmICF0aGlzLnByb3BzLnNlbGVjdFJvdy5oaWRlU2VsZWN0Q29sdW1uID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyU2VsZWN0Um93Q29sdW1uKHNlbGVjdGVkKSA6IG51bGw7XG4gICAgICAvLyBhZGQgYnkgYmx1ZXNwcmluZyBmb3IgY2xhc3NOYW1lIGN1c3RvbWl6ZVxuICAgICAgbGV0IHRyQ2xhc3NOYW1lID0gdGhpcy5wcm9wcy50ckNsYXNzTmFtZTtcbiAgICAgIGlmIChpc0Z1bih0aGlzLnByb3BzLnRyQ2xhc3NOYW1lKSkge1xuICAgICAgICB0ckNsYXNzTmFtZSA9IHRoaXMucHJvcHMudHJDbGFzc05hbWUoZGF0YSwgcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGFibGVSb3cgaXNTZWxlY3RlZD17IHNlbGVjdGVkIH0ga2V5PXsgciB9IGNsYXNzTmFtZT17IHRyQ2xhc3NOYW1lIH1cbiAgICAgICAgICBzZWxlY3RSb3c9eyBpc1NlbGVjdFJvd0RlZmluZWQgPyB0aGlzLnByb3BzLnNlbGVjdFJvdyA6IHVuZGVmaW5lZCB9XG4gICAgICAgICAgZW5hYmxlQ2VsbEVkaXQ9eyB0aGlzLnByb3BzLmNlbGxFZGl0Lm1vZGUgIT09IENvbnN0LkNFTExfRURJVF9OT05FIH1cbiAgICAgICAgICBvblJvd0NsaWNrPXsgdGhpcy5oYW5kbGVSb3dDbGljayB9XG4gICAgICAgICAgb25Sb3dNb3VzZU92ZXI9eyB0aGlzLmhhbmRsZVJvd01vdXNlT3ZlciB9XG4gICAgICAgICAgb25Sb3dNb3VzZU91dD17IHRoaXMuaGFuZGxlUm93TW91c2VPdXQgfVxuICAgICAgICAgIG9uU2VsZWN0Um93PXsgdGhpcy5oYW5kbGVTZWxlY3RSb3cgfT5cbiAgICAgICAgICB7IHNlbGVjdFJvd0NvbHVtbiB9XG4gICAgICAgICAgeyB0YWJsZUNvbHVtbnMgfVxuICAgICAgICA8L1RhYmxlUm93PlxuICAgICAgKTtcbiAgICB9LCB0aGlzKTtcblxuICAgIGlmICh0YWJsZVJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICB0YWJsZVJvd3MucHVzaChcbiAgICAgICAgPFRhYmxlUm93IGtleT0nIyN0YWJsZS1lbXB0eSMjJz5cbiAgICAgICAgICA8dGQgY29sU3Bhbj17IHRoaXMucHJvcHMuY29sdW1ucy5sZW5ndGggKyAoaXNTZWxlY3RSb3dEZWZpbmVkID8gMSA6IDApIH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPSdyZWFjdC1icy10YWJsZS1uby1kYXRhJz5cbiAgICAgICAgICAgICAgeyB0aGlzLnByb3BzLm5vRGF0YVRleHQgfHwgQ29uc3QuTk9fREFUQV9URVhUIH1cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L1RhYmxlUm93PlxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmVkaXRpbmcgPSBmYWxzZTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHJlZj0nY29udGFpbmVyJyBjbGFzc05hbWU9J3JlYWN0LWJzLWNvbnRhaW5lci1ib2R5JyBzdHlsZT17IHRoaXMucHJvcHMuc3R5bGUgfT5cbiAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT17IHRhYmxlQ2xhc3NlcyB9PlxuICAgICAgICAgIHsgdGFibGVIZWFkZXIgfVxuICAgICAgICAgIDx0Ym9keSByZWY9J3Rib2R5Jz5cbiAgICAgICAgICAgIHsgdGFibGVSb3dzIH1cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlclRhYmxlSGVhZGVyKGlzU2VsZWN0Um93RGVmaW5lZCkge1xuICAgIGxldCBzZWxlY3RSb3dIZWFkZXIgPSBudWxsO1xuXG4gICAgaWYgKGlzU2VsZWN0Um93RGVmaW5lZCkge1xuICAgICAgY29uc3Qgc3R5bGUgPSB7XG4gICAgICAgIHdpZHRoOiAzMCxcbiAgICAgICAgbWluV2lkdGg6IDMwXG4gICAgICB9O1xuICAgICAgaWYgKCF0aGlzLnByb3BzLnNlbGVjdFJvdy5oaWRlU2VsZWN0Q29sdW1uKSB7XG4gICAgICAgIHNlbGVjdFJvd0hlYWRlciA9ICg8Y29sIHN0eWxlPXsgc3R5bGUgfSBrZXk9eyAtMSB9PjwvY29sPik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHRoZWFkZXIgPSB0aGlzLnByb3BzLmNvbHVtbnMubWFwKGZ1bmN0aW9uKGNvbHVtbiwgaSkge1xuICAgICAgY29uc3Qgd2lkdGggPSBjb2x1bW4ud2lkdGggPT09IG51bGwgPyBjb2x1bW4ud2lkdGggOiBwYXJzZUludChjb2x1bW4ud2lkdGgsIDEwKTtcbiAgICAgIGNvbnN0IHN0eWxlID0ge1xuICAgICAgICBkaXNwbGF5OiBjb2x1bW4uaGlkZGVuID8gJ25vbmUnIDogbnVsbCxcbiAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICBtaW5XaWR0aDogd2lkdGhcbiAgICAgICAgLyoqIGFkZCBtaW4td2R0aCB0byBmaXggdXNlciBhc3NpZ24gY29sdW1uIHdpZHRoXG4gICAgICAgIG5vdCBlcSBvZmZzZXRXaWR0aCBpbiBsYXJnZSBjb2x1bW4gdGFibGUgKiovXG4gICAgICB9O1xuICAgICAgcmV0dXJuICg8Y29sIHN0eWxlPXsgc3R5bGUgfSBrZXk9eyBpIH0gY2xhc3NOYW1lPXsgY29sdW1uLmNsYXNzTmFtZSB9PjwvY29sPik7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGNvbGdyb3VwIHJlZj0naGVhZGVyJz5cbiAgICAgICAgeyBzZWxlY3RSb3dIZWFkZXIgfXsgdGhlYWRlciB9XG4gICAgICA8L2NvbGdyb3VwPlxuICAgICk7XG4gIH1cblxuICBoYW5kbGVSb3dNb3VzZU91dCA9IChyb3dJbmRleCwgZXZlbnQpID0+IHtcbiAgICBjb25zdCB0YXJnZXRSb3cgPSB0aGlzLnByb3BzLmRhdGFbcm93SW5kZXhdO1xuICAgIHRoaXMucHJvcHMub25Sb3dNb3VzZU91dCh0YXJnZXRSb3csIGV2ZW50KTtcbiAgfVxuXG4gIGhhbmRsZVJvd01vdXNlT3ZlciA9IChyb3dJbmRleCwgZXZlbnQpID0+IHtcbiAgICBjb25zdCB0YXJnZXRSb3cgPSB0aGlzLnByb3BzLmRhdGFbcm93SW5kZXhdO1xuICAgIHRoaXMucHJvcHMub25Sb3dNb3VzZU92ZXIodGFyZ2V0Um93LCBldmVudCk7XG4gIH1cblxuICBoYW5kbGVSb3dDbGljayA9IHJvd0luZGV4ID0+IHtcbiAgICBsZXQgc2VsZWN0ZWRSb3c7XG4gICAgY29uc3QgeyBkYXRhLCBvblJvd0NsaWNrIH0gPSB0aGlzLnByb3BzO1xuICAgIGRhdGEuZm9yRWFjaCgocm93LCBpKSA9PiB7XG4gICAgICBpZiAoaSA9PT0gcm93SW5kZXggLSAxKSB7XG4gICAgICAgIHNlbGVjdGVkUm93ID0gcm93O1xuICAgICAgfVxuICAgIH0pO1xuICAgIG9uUm93Q2xpY2soc2VsZWN0ZWRSb3cpO1xuICB9XG5cbiAgaGFuZGxlU2VsZWN0Um93ID0gKHJvd0luZGV4LCBpc1NlbGVjdGVkKSA9PiB7XG4gICAgbGV0IHNlbGVjdGVkUm93O1xuICAgIGNvbnN0IHsgZGF0YSwgb25TZWxlY3RSb3cgfSA9IHRoaXMucHJvcHM7XG4gICAgZGF0YS5mb3JFYWNoKChyb3csIGkpID0+IHtcbiAgICAgIGlmIChpID09PSByb3dJbmRleCAtIDEpIHtcbiAgICAgICAgc2VsZWN0ZWRSb3cgPSByb3c7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBvblNlbGVjdFJvdyhzZWxlY3RlZFJvdywgaXNTZWxlY3RlZCk7XG4gIH1cblxuICBoYW5kbGVTZWxlY3RSb3dDb2x1bUNoYW5nZSA9IGUgPT4ge1xuICAgIGlmICghdGhpcy5wcm9wcy5zZWxlY3RSb3cuY2xpY2tUb1NlbGVjdCB8fFxuICAgICAgIXRoaXMucHJvcHMuc2VsZWN0Um93LmNsaWNrVG9TZWxlY3RBbmRFZGl0Q2VsbCkge1xuICAgICAgdGhpcy5oYW5kbGVTZWxlY3RSb3coXG4gICAgICAgIGUuY3VycmVudFRhcmdldC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQucm93SW5kZXggKyAxLFxuICAgICAgICBlLmN1cnJlbnRUYXJnZXQuY2hlY2tlZCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlRWRpdENlbGwgPSAocm93SW5kZXgsIGNvbHVtbkluZGV4KSA9PiB7XG4gICAgdGhpcy5lZGl0aW5nID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5faXNTZWxlY3RSb3dEZWZpbmVkKCkpIHtcbiAgICAgIGNvbHVtbkluZGV4LS07XG4gICAgICBpZiAodGhpcy5wcm9wcy5zZWxlY3RSb3cuaGlkZVNlbGVjdENvbHVtbikgY29sdW1uSW5kZXgrKztcbiAgICB9XG4gICAgcm93SW5kZXgtLTtcbiAgICBjb25zdCBzdGF0ZU9iaiA9IHtcbiAgICAgIGN1cnJFZGl0Q2VsbDoge1xuICAgICAgICByaWQ6IHJvd0luZGV4LFxuICAgICAgICBjaWQ6IGNvbHVtbkluZGV4XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICh0aGlzLnByb3BzLnNlbGVjdFJvdy5jbGlja1RvU2VsZWN0QW5kRWRpdENlbGwpIHtcbiAgICAgIHRoaXMuaGFuZGxlU2VsZWN0Um93KHJvd0luZGV4ICsgMSwgdHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoc3RhdGVPYmopO1xuICB9XG5cbiAgaGFuZGxlQ29tcGxldGVFZGl0Q2VsbCA9IChuZXdWYWwsIHJvd0luZGV4LCBjb2x1bW5JbmRleCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoeyBjdXJyRWRpdENlbGw6IG51bGwgfSk7XG4gICAgaWYgKG5ld1ZhbCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5wcm9wcy5jZWxsRWRpdC5fX29uQ29tcGxldGVFZGl0X18obmV3VmFsLCByb3dJbmRleCwgY29sdW1uSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlclNlbGVjdFJvd0NvbHVtbihzZWxlY3RlZCkge1xuICAgIGlmICh0aGlzLnByb3BzLnNlbGVjdFJvdy5tb2RlID09PSBDb25zdC5ST1dfU0VMRUNUX1NJTkdMRSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFRhYmxlQ29sdW1uIGRhdGFBbGlnbj0nY2VudGVyJz5cbiAgICAgICAgICA8aW5wdXQgdHlwZT0ncmFkaW8nIGNoZWNrZWQ9eyBzZWxlY3RlZCB9XG4gICAgICAgICAgICBvbkNoYW5nZT17IHRoaXMuaGFuZGxlU2VsZWN0Um93Q29sdW1DaGFuZ2UgfS8+XG4gICAgICAgIDwvVGFibGVDb2x1bW4+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGFibGVDb2x1bW4gZGF0YUFsaWduPSdjZW50ZXInPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPSdjaGVja2JveCcgY2hlY2tlZD17IHNlbGVjdGVkIH1cbiAgICAgICAgICBvbkNoYW5nZT17IHRoaXMuaGFuZGxlU2VsZWN0Um93Q29sdW1DaGFuZ2UgfS8+XG4gICAgICAgIDwvVGFibGVDb2x1bW4+XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIF9pc1NlbGVjdFJvd0RlZmluZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc2VsZWN0Um93Lm1vZGUgPT09IENvbnN0LlJPV19TRUxFQ1RfU0lOR0xFIHx8XG4gICAgICAgICAgdGhpcy5wcm9wcy5zZWxlY3RSb3cubW9kZSA9PT0gQ29uc3QuUk9XX1NFTEVDVF9NVUxUSTtcbiAgfVxufVxuVGFibGVCb2R5LnByb3BUeXBlcyA9IHtcbiAgZGF0YTogUHJvcFR5cGVzLmFycmF5LFxuICBjb2x1bW5zOiBQcm9wVHlwZXMuYXJyYXksXG4gIHN0cmlwZWQ6IFByb3BUeXBlcy5ib29sLFxuICBib3JkZXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGhvdmVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgY29uZGVuc2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAga2V5RmllbGQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNlbGVjdGVkUm93S2V5czogUHJvcFR5cGVzLmFycmF5LFxuICBvblJvd0NsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25TZWxlY3RSb3c6IFByb3BUeXBlcy5mdW5jLFxuICBub0RhdGFUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdFxufTtcbmV4cG9ydCBkZWZhdWx0IFRhYmxlQm9keTtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL1RhYmxlQm9keS5qc1xuICoqLyJdLCJzb3VyY2VSb290IjoiIn0="); +},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar TableRow = (function (_Component) {\n _inherits(TableRow, _Component);\n\n function TableRow(props) {\n var _this = this;\n\n _classCallCheck(this, TableRow);\n\n _get(Object.getPrototypeOf(TableRow.prototype), 'constructor', this).call(this, props);\n\n this.rowClick = function (e) {\n if (e.target.tagName !== 'INPUT' && e.target.tagName !== 'SELECT' && e.target.tagName !== 'TEXTAREA') {\n (function () {\n var rowIndex = e.currentTarget.rowIndex + 1;\n if (_this.props.selectRow) {\n if (_this.props.selectRow.clickToSelect) {\n _this.props.onSelectRow(rowIndex, !_this.props.isSelected);\n } else if (_this.props.selectRow.clickToSelectAndEditCell) {\n _this.clickNum++;\n /** if clickToSelectAndEditCell is enabled,\n * there should be a delay to prevent a selection changed when\n * user dblick to edit cell on same row but different cell\n **/\n setTimeout(function () {\n if (_this.clickNum === 1) {\n _this.props.onSelectRow(rowIndex, !_this.props.isSelected);\n }\n _this.clickNum = 0;\n }, 200);\n }\n }\n if (_this.props.onRowClick) _this.props.onRowClick(rowIndex);\n })();\n }\n };\n\n this.rowMouseOut = function (e) {\n if (_this.props.onRowMouseOut) {\n _this.props.onRowMouseOut(e.currentTarget.rowIndex, e);\n }\n };\n\n this.rowMouseOver = function (e) {\n if (_this.props.onRowMouseOver) {\n _this.props.onRowMouseOver(e.currentTarget.rowIndex, e);\n }\n };\n\n this.clickNum = 0;\n }\n\n _createClass(TableRow, [{\n key: 'render',\n value: function render() {\n this.clickNum = 0;\n var trCss = {\n style: {\n backgroundColor: this.props.isSelected ? this.props.selectRow.bgColor : null\n },\n className: (this.props.isSelected && this.props.selectRow.className ? this.props.selectRow.className : '') + (this.props.className || '')\n };\n\n if (this.props.selectRow && (this.props.selectRow.clickToSelect || this.props.selectRow.clickToSelectAndEditCell) || this.props.onRowClick) {\n return _react2['default'].createElement(\n 'tr',\n _extends({}, trCss, {\n onMouseOver: this.rowMouseOver,\n onMouseOut: this.rowMouseOut,\n onClick: this.rowClick }),\n this.props.children\n );\n } else {\n return _react2['default'].createElement(\n 'tr',\n trCss,\n this.props.children\n );\n }\n }\n }]);\n\n return TableRow;\n})(_react.Component);\n\nTableRow.propTypes = {\n isSelected: _react.PropTypes.bool,\n enableCellEdit: _react.PropTypes.bool,\n onRowClick: _react.PropTypes.func,\n onSelectRow: _react.PropTypes.func,\n onRowMouseOut: _react.PropTypes.func,\n onRowMouseOver: _react.PropTypes.func\n};\nTableRow.defaultProps = {\n onRowClick: undefined\n};\nexports['default'] = TableRow;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvVGFibGVSb3cuanM/MDNjYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7aUNBQTRDLENBQU87Ozs7SUFFN0MsUUFBUTtZQUFSLFFBQVE7O0FBRUQsV0FGUCxRQUFRLENBRUEsS0FBSyxFQUFFOzs7MEJBRmYsUUFBUTs7QUFHViwrQkFIRSxRQUFRLDZDQUdKLEtBQUssRUFBRTs7U0FJZixRQUFRLEdBQUcsV0FBQyxFQUFJO0FBQ2QsVUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxPQUFPLElBQzVCLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxLQUFLLFFBQVEsSUFDN0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssVUFBVSxFQUFFOztBQUNuQyxjQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDOUMsY0FBSSxNQUFLLEtBQUssQ0FBQyxTQUFTLEVBQUU7QUFDeEIsZ0JBQUksTUFBSyxLQUFLLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRTtBQUN0QyxvQkFBSyxLQUFLLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQUssS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQzFELE1BQU0sSUFBSSxNQUFLLEtBQUssQ0FBQyxTQUFTLENBQUMsd0JBQXdCLEVBQUU7QUFDeEQsb0JBQUssUUFBUSxFQUFFLENBQUM7Ozs7O0FBS2hCLHdCQUFVLENBQUMsWUFBTTtBQUNmLG9CQUFJLE1BQUssUUFBUSxLQUFLLENBQUMsRUFBRTtBQUN2Qix3QkFBSyxLQUFLLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQUssS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUMxRDtBQUNELHNCQUFLLFFBQVEsR0FBRyxDQUFDLENBQUM7ZUFDbkIsRUFBRSxHQUFHLENBQUMsQ0FBQzthQUNUO1dBQ0Y7QUFDRCxjQUFJLE1BQUssS0FBSyxDQUFDLFVBQVUsRUFBRSxNQUFLLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7O09BQzVEO0tBQ0Y7O1NBRUQsV0FBVyxHQUFHLFdBQUMsRUFBSTtBQUNqQixVQUFJLE1BQUssS0FBSyxDQUFDLGFBQWEsRUFBRTtBQUM1QixjQUFLLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7T0FDdkQ7S0FDRjs7U0FFRCxZQUFZLEdBQUcsV0FBQyxFQUFJO0FBQ2xCLFVBQUksTUFBSyxLQUFLLENBQUMsY0FBYyxFQUFFO0FBQzdCLGNBQUssS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztPQUN4RDtLQUNGOztBQXZDQyxRQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztHQUNuQjs7ZUFMRyxRQUFROztXQTZDTixrQkFBRztBQUNQLFVBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLFVBQU0sS0FBSyxHQUFHO0FBQ1osYUFBSyxFQUFFO0FBQ0wseUJBQWUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsSUFBSTtTQUM3RTtBQUNELGlCQUFTLEVBQUUsQ0FDVCxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQ3ZELElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxFQUFFLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDO09BQ3RFLENBQUM7O0FBRUYsVUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxhQUFhLElBQzdELElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLHdCQUF3QixDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUU7QUFDekUsZUFDRTs7dUJBQVMsS0FBSztBQUNWLHVCQUFXLEVBQUcsSUFBSSxDQUFDLFlBQWM7QUFDakMsc0JBQVUsRUFBRyxJQUFJLENBQUMsV0FBYTtBQUMvQixtQkFBTyxFQUFHLElBQUksQ0FBQyxRQUFVO1VBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRO1NBQU8sQ0FDMUQ7T0FDSCxNQUFNO0FBQ0wsZUFDRTs7VUFBUyxLQUFLO1VBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRO1NBQU8sQ0FDN0M7T0FDSDtLQUNGOzs7U0FyRUcsUUFBUTs7O0FBdUVkLFFBQVEsQ0FBQyxTQUFTLEdBQUc7QUFDbkIsWUFBVSxFQUFFLGlCQUFVLElBQUk7QUFDMUIsZ0JBQWMsRUFBRSxpQkFBVSxJQUFJO0FBQzlCLFlBQVUsRUFBRSxpQkFBVSxJQUFJO0FBQzFCLGFBQVcsRUFBRSxpQkFBVSxJQUFJO0FBQzNCLGVBQWEsRUFBRSxpQkFBVSxJQUFJO0FBQzdCLGdCQUFjLEVBQUUsaUJBQVUsSUFBSTtDQUMvQixDQUFDO0FBQ0YsUUFBUSxDQUFDLFlBQVksR0FBRztBQUN0QixZQUFVLEVBQUUsU0FBUztDQUN0QixDQUFDO3FCQUNhLFFBQVEiLCJmaWxlIjoiOS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFByb3BUeXBlcyB9IGZyb20gJ3JlYWN0JztcblxuY2xhc3MgVGFibGVSb3cgZXh0ZW5kcyBDb21wb25lbnQge1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuY2xpY2tOdW0gPSAwO1xuICB9XG5cbiAgcm93Q2xpY2sgPSBlID0+IHtcbiAgICBpZiAoZS50YXJnZXQudGFnTmFtZSAhPT0gJ0lOUFVUJyAmJlxuICAgICAgICBlLnRhcmdldC50YWdOYW1lICE9PSAnU0VMRUNUJyAmJlxuICAgICAgICBlLnRhcmdldC50YWdOYW1lICE9PSAnVEVYVEFSRUEnKSB7XG4gICAgICBjb25zdCByb3dJbmRleCA9IGUuY3VycmVudFRhcmdldC5yb3dJbmRleCArIDE7XG4gICAgICBpZiAodGhpcy5wcm9wcy5zZWxlY3RSb3cpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0Um93LmNsaWNrVG9TZWxlY3QpIHtcbiAgICAgICAgICB0aGlzLnByb3BzLm9uU2VsZWN0Um93KHJvd0luZGV4LCAhdGhpcy5wcm9wcy5pc1NlbGVjdGVkKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnNlbGVjdFJvdy5jbGlja1RvU2VsZWN0QW5kRWRpdENlbGwpIHtcbiAgICAgICAgICB0aGlzLmNsaWNrTnVtKys7XG4gICAgICAgICAgLyoqIGlmIGNsaWNrVG9TZWxlY3RBbmRFZGl0Q2VsbCBpcyBlbmFibGVkLFxuICAgICAgICAgICAqICB0aGVyZSBzaG91bGQgYmUgYSBkZWxheSB0byBwcmV2ZW50IGEgc2VsZWN0aW9uIGNoYW5nZWQgd2hlblxuICAgICAgICAgICAqICB1c2VyIGRibGljayB0byBlZGl0IGNlbGwgb24gc2FtZSByb3cgYnV0IGRpZmZlcmVudCBjZWxsXG4gICAgICAgICAgKiovXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5jbGlja051bSA9PT0gMSkge1xuICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uU2VsZWN0Um93KHJvd0luZGV4LCAhdGhpcy5wcm9wcy5pc1NlbGVjdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2xpY2tOdW0gPSAwO1xuICAgICAgICAgIH0sIDIwMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnByb3BzLm9uUm93Q2xpY2spIHRoaXMucHJvcHMub25Sb3dDbGljayhyb3dJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgcm93TW91c2VPdXQgPSBlID0+IHtcbiAgICBpZiAodGhpcy5wcm9wcy5vblJvd01vdXNlT3V0KSB7XG4gICAgICB0aGlzLnByb3BzLm9uUm93TW91c2VPdXQoZS5jdXJyZW50VGFyZ2V0LnJvd0luZGV4LCBlKTtcbiAgICB9XG4gIH1cblxuICByb3dNb3VzZU92ZXIgPSBlID0+IHtcbiAgICBpZiAodGhpcy5wcm9wcy5vblJvd01vdXNlT3Zlcikge1xuICAgICAgdGhpcy5wcm9wcy5vblJvd01vdXNlT3ZlcihlLmN1cnJlbnRUYXJnZXQucm93SW5kZXgsIGUpO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICB0aGlzLmNsaWNrTnVtID0gMDtcbiAgICBjb25zdCB0ckNzcyA9IHtcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5wcm9wcy5pc1NlbGVjdGVkID8gdGhpcy5wcm9wcy5zZWxlY3RSb3cuYmdDb2xvciA6IG51bGxcbiAgICAgIH0sXG4gICAgICBjbGFzc05hbWU6IChcbiAgICAgICAgdGhpcy5wcm9wcy5pc1NlbGVjdGVkICYmIHRoaXMucHJvcHMuc2VsZWN0Um93LmNsYXNzTmFtZSA/XG4gICAgICAgIHRoaXMucHJvcHMuc2VsZWN0Um93LmNsYXNzTmFtZSA6ICcnKSArICh0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCAnJylcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0Um93ICYmICh0aGlzLnByb3BzLnNlbGVjdFJvdy5jbGlja1RvU2VsZWN0IHx8XG4gICAgICB0aGlzLnByb3BzLnNlbGVjdFJvdy5jbGlja1RvU2VsZWN0QW5kRWRpdENlbGwpIHx8IHRoaXMucHJvcHMub25Sb3dDbGljaykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHRyIHsgLi4udHJDc3MgfVxuICAgICAgICAgICAgb25Nb3VzZU92ZXI9eyB0aGlzLnJvd01vdXNlT3ZlciB9XG4gICAgICAgICAgICBvbk1vdXNlT3V0PXsgdGhpcy5yb3dNb3VzZU91dCB9XG4gICAgICAgICAgICBvbkNsaWNrPXsgdGhpcy5yb3dDbGljayB9PnsgdGhpcy5wcm9wcy5jaGlsZHJlbiB9PC90cj5cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDx0ciB7IC4uLnRyQ3NzIH0+eyB0aGlzLnByb3BzLmNoaWxkcmVuIH08L3RyPlxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblRhYmxlUm93LnByb3BUeXBlcyA9IHtcbiAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGVuYWJsZUNlbGxFZGl0OiBQcm9wVHlwZXMuYm9vbCxcbiAgb25Sb3dDbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uU2VsZWN0Um93OiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Sb3dNb3VzZU91dDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uUm93TW91c2VPdmVyOiBQcm9wVHlwZXMuZnVuY1xufTtcblRhYmxlUm93LmRlZmF1bHRQcm9wcyA9IHtcbiAgb25Sb3dDbGljazogdW5kZWZpbmVkXG59O1xuZXhwb3J0IGRlZmF1bHQgVGFibGVSb3c7XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9UYWJsZVJvdy5qc1xuICoqLyJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _Const = __webpack_require__(3);\n\nvar _Const2 = _interopRequireDefault(_Const);\n\nvar TableColumn = (function (_Component) {\n _inherits(TableColumn, _Component);\n\n function TableColumn(props) {\n var _this = this;\n\n _classCallCheck(this, TableColumn);\n\n _get(Object.getPrototypeOf(TableColumn.prototype), 'constructor', this).call(this, props);\n\n this.handleCellEdit = function (e) {\n if (_this.props.cellEdit.mode === _Const2['default'].CELL_EDIT_DBCLICK) {\n if (document.selection && document.selection.empty) {\n document.selection.empty();\n } else if (window.getSelection) {\n var sel = window.getSelection();\n sel.removeAllRanges();\n }\n }\n _this.props.onEdit(e.currentTarget.parentElement.rowIndex + 1, e.currentTarget.cellIndex);\n };\n }\n\n /* eslint no-unused-vars: [0, { \"args\": \"after-used\" }] */\n\n _createClass(TableColumn, [{\n key: 'shouldComponentUpdate',\n value: function shouldComponentUpdate(nextProps, nextState) {\n var children = this.props.children;\n\n var shouldUpdated = this.props.width !== nextProps.width || this.props.className !== nextProps.className || this.props.hidden !== nextProps.hidden || this.props.dataAlign !== nextProps.dataAlign || typeof children !== typeof nextProps.children || ('' + this.props.onEdit).toString() !== ('' + nextProps.onEdit).toString();\n\n if (shouldUpdated) {\n return shouldUpdated;\n }\n\n if (typeof children === 'object' && children !== null && children.props !== null) {\n if (children.props.type === 'checkbox' || children.props.type === 'radio') {\n shouldUpdated = shouldUpdated || children.props.type !== nextProps.children.props.type || children.props.checked !== nextProps.children.props.checked;\n } else {\n shouldUpdated = true;\n }\n } else {\n shouldUpdated = shouldUpdated || children !== nextProps.children;\n }\n\n if (shouldUpdated) {\n return shouldUpdated;\n }\n\n if (!(this.props.cellEdit && nextProps.cellEdit)) {\n return false;\n } else {\n return shouldUpdated || this.props.cellEdit.mode !== nextProps.cellEdit.mode;\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var tdStyle = {\n textAlign: this.props.dataAlign,\n display: this.props.hidden ? 'none' : null\n };\n\n var opts = {};\n if (this.props.cellEdit) {\n if (this.props.cellEdit.mode === _Const2['default'].CELL_EDIT_CLICK) {\n opts.onClick = this.handleCellEdit;\n } else if (this.props.cellEdit.mode === _Const2['default'].CELL_EDIT_DBCLICK) {\n opts.onDoubleClick = this.handleCellEdit;\n }\n }\n return _react2['default'].createElement(\n 'td',\n _extends({ style: tdStyle, className: this.props.className }, opts),\n this.props.children\n );\n }\n }]);\n\n return TableColumn;\n})(_react.Component);\n\nTableColumn.propTypes = {\n dataAlign: _react.PropTypes.string,\n hidden: _react.PropTypes.bool,\n className: _react.PropTypes.string,\n children: _react.PropTypes.node\n};\n\nTableColumn.defaultProps = {\n dataAlign: 'left',\n hidden: false,\n className: ''\n};\nexports['default'] = TableColumn;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvVGFibGVDb2x1bW4uanM/YjNmMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7aUNBQTRDLENBQU87Ozs7aUNBQ2pDLENBQVM7Ozs7SUFFckIsV0FBVztZQUFYLFdBQVc7O0FBRUosV0FGUCxXQUFXLENBRUgsS0FBSyxFQUFFOzs7MEJBRmYsV0FBVzs7QUFHYiwrQkFIRSxXQUFXLDZDQUdQLEtBQUssRUFBRTs7U0F3Q2YsY0FBYyxHQUFHLFdBQUMsRUFBSTtBQUNwQixVQUFJLE1BQUssS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssbUJBQU0saUJBQWlCLEVBQUU7QUFDeEQsWUFBSSxRQUFRLENBQUMsU0FBUyxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFO0FBQ2xELGtCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQzVCLE1BQU0sSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFO0FBQzlCLGNBQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNsQyxhQUFHLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDdkI7T0FDRjtBQUNELFlBQUssS0FBSyxDQUFDLE1BQU0sQ0FDZixDQUFDLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUMxQyxDQUFDLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQzlCO0dBbkRBOzs7O2VBSkcsV0FBVzs7V0FNTSwrQkFBQyxTQUFTLEVBQUUsU0FBUyxFQUFFO1VBQ2xDLFFBQVEsR0FBSyxJQUFJLENBQUMsS0FBSyxDQUF2QixRQUFROztBQUNoQixVQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsS0FBSyxJQUNuRCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsU0FBUyxJQUM1QyxJQUFJLENBQUMs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QUFNO0FBQ2pCLFFBQU0sRUFBRSxLQUFLO0FBQ2IsV0FBUyxFQUFFLEVBQUU7Q0FDZCxDQUFDO3FCQUNhLFdBQVciLCJmaWxlIjoiMTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBQcm9wVHlwZXMgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi9Db25zdCc7XG5cbmNsYXNzIFRhYmxlQ29sdW1uIGV4dGVuZHMgQ29tcG9uZW50IHtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICAvKiBlc2xpbnQgbm8tdW51c2VkLXZhcnM6IFswLCB7IFwiYXJnc1wiOiBcImFmdGVyLXVzZWRcIiB9XSAqL1xuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcbiAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSB0aGlzLnByb3BzO1xuICAgIGxldCBzaG91bGRVcGRhdGVkID0gdGhpcy5wcm9wcy53aWR0aCAhPT0gbmV4dFByb3BzLndpZHRoXG4gICAgICB8fCB0aGlzLnByb3BzLmNsYXNzTmFtZSAhPT0gbmV4dFByb3BzLmNsYXNzTmFtZVxuICAgICAgfHwgdGhpcy5wcm9wcy5oaWRkZW4gIT09IG5leHRQcm9wcy5oaWRkZW5cbiAgICAgIHx8IHRoaXMucHJvcHMuZGF0YUFsaWduICE9PSBuZXh0UHJvcHMuZGF0YUFsaWduXG4gICAgICB8fCB0eXBlb2YgY2hpbGRyZW4gIT09IHR5cGVvZiBuZXh0UHJvcHMuY2hpbGRyZW5cbiAgICAgIHx8ICgnJyArIHRoaXMucHJvcHMub25FZGl0KS50b1N0cmluZygpICE9PSAoJycgKyBuZXh0UHJvcHMub25FZGl0KS50b1N0cmluZygpO1xuXG4gICAgaWYgKHNob3VsZFVwZGF0ZWQpIHtcbiAgICAgIHJldHVybiBzaG91bGRVcGRhdGVkO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2hpbGRyZW4gPT09ICdvYmplY3QnICYmIGNoaWxkcmVuICE9PSBudWxsICYmIGNoaWxkcmVuLnByb3BzICE9PSBudWxsKSB7XG4gICAgICBpZiAoY2hpbGRyZW4ucHJvcHMudHlwZSA9PT0gJ2NoZWNrYm94JyB8fCBjaGlsZHJlbi5wcm9wcy50eXBlID09PSAncmFkaW8nKSB7XG4gICAgICAgIHNob3VsZFVwZGF0ZWQgPSBzaG91bGRVcGRhdGVkIHx8XG4gICAgICAgICAgY2hpbGRyZW4ucHJvcHMudHlwZSAhPT0gbmV4dFByb3BzLmNoaWxkcmVuLnByb3BzLnR5cGUgfHxcbiAgICAgICAgICBjaGlsZHJlbi5wcm9wcy5jaGVja2VkICE9PSBuZXh0UHJvcHMuY2hpbGRyZW4ucHJvcHMuY2hlY2tlZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNob3VsZFVwZGF0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzaG91bGRVcGRhdGVkID0gc2hvdWxkVXBkYXRlZCB8fCBjaGlsZHJlbiAhPT0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICAgIH1cblxuICAgIGlmIChzaG91bGRVcGRhdGVkKSB7XG4gICAgICByZXR1cm4gc2hvdWxkVXBkYXRlZDtcbiAgICB9XG5cbiAgICBpZiAoISh0aGlzLnByb3BzLmNlbGxFZGl0ICYmIG5leHRQcm9wcy5jZWxsRWRpdCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHNob3VsZFVwZGF0ZWRcbiAgICAgICAgfHwgdGhpcy5wcm9wcy5jZWxsRWRpdC5tb2RlICE9PSBuZXh0UHJvcHMuY2VsbEVkaXQubW9kZTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVDZWxsRWRpdCA9IGUgPT4ge1xuICAgIGlmICh0aGlzLnByb3BzLmNlbGxFZGl0Lm1vZGUgPT09IENvbnN0LkNFTExfRURJVF9EQkNMSUNLKSB7XG4gICAgICBpZiAoZG9jdW1lbnQuc2VsZWN0aW9uICYmIGRvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSkge1xuICAgICAgICBkb2N1bWVudC5zZWxlY3Rpb24uZW1wdHkoKTtcbiAgICAgIH0gZWxzZSBpZiAod2luZG93LmdldFNlbGVjdGlvbikge1xuICAgICAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5wcm9wcy5vbkVkaXQoXG4gICAgICBlLmN1cnJlbnRUYXJnZXQucGFyZW50RWxlbWVudC5yb3dJbmRleCArIDEsXG4gICAgICBlLmN1cnJlbnRUYXJnZXQuY2VsbEluZGV4KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB0ZFN0eWxlID0ge1xuICAgICAgdGV4dEFsaWduOiB0aGlzLnByb3BzLmRhdGFBbGlnbixcbiAgICAgIGRpc3BsYXk6IHRoaXMucHJvcHMuaGlkZGVuID8gJ25vbmUnIDogbnVsbFxuICAgIH07XG5cbiAgICBjb25zdCBvcHRzID0ge307XG4gICAgaWYgKHRoaXMucHJvcHMuY2VsbEVkaXQpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLmNlbGxFZGl0Lm1vZGUgPT09IENvbnN0LkNFTExfRURJVF9DTElDSykge1xuICAgICAgICBvcHRzLm9uQ2xpY2sgPSB0aGlzLmhhbmRsZUNlbGxFZGl0O1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmNlbGxFZGl0Lm1vZGUgPT09IENvbnN0LkNFTExfRURJVF9EQkNMSUNLKSB7XG4gICAgICAgIG9wdHMub25Eb3VibGVDbGljayA9IHRoaXMuaGFuZGxlQ2VsbEVkaXQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8dGQgc3R5bGU9eyB0ZFN0eWxlIH0gY2xhc3NOYW1lPXsgdGhpcy5wcm9wcy5jbGFzc05hbWUgfSB7IC4uLm9wdHMgfT5cbiAgICAgICAgeyB0aGlzLnByb3BzLmNoaWxkcmVuIH1cbiAgICAgIDwvdGQ+XG4gICAgKTtcbiAgfVxufVxuVGFibGVDb2x1bW4ucHJvcFR5cGVzID0ge1xuICBkYXRhQWxpZ246IFByb3BUeXBlcy5zdHJpbmcsXG4gIGhpZGRlbjogUHJvcFR5cGVzLmJvb2wsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlXG59O1xuXG5UYWJsZUNvbHVtbi5kZWZhdWx0UHJvcHMgPSB7XG4gIGRhdGFBbGlnbjogJ2xlZnQnLFxuICBoaWRkZW46IGZhbHNlLFxuICBjbGFzc05hbWU6ICcnXG59O1xuZXhwb3J0IGRlZmF1bHQgVGFibGVDb2x1bW47XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9UYWJsZUNvbHVtbi5qc1xuICoqLyJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _Editor = __webpack_require__(12);\n\nvar _Editor2 = _interopRequireDefault(_Editor);\n\nvar _NotificationJs = __webpack_require__(13);\n\nvar _NotificationJs2 = _interopRequireDefault(_NotificationJs);\n\nvar _classnames = __webpack_require__(6);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar TableEditColumn = (function (_Component) {\n _inherits(TableEditColumn, _Component);\n\n function TableEditColumn(props) {\n var _this = this;\n\n _classCallCheck(this, TableEditColumn);\n\n _get(Object.getPrototypeOf(TableEditColumn.prototype), 'constructor', this).call(this, props);\n\n this.handleKeyPress = function (e) {\n if (e.keyCode === 13) {\n // Pressed ENTER\n var value = e.currentTarget.type === 'checkbox' ? _this._getCheckBoxValue(e) : e.currentTarget.value;\n\n if (!_this.validator(value)) {\n return;\n }\n _this.props.completeEdit(value, _this.props.rowIndex, _this.props.colIndex);\n } else if (e.keyCode === 27) {\n _this.props.completeEdit(null, _this.props.rowIndex, _this.props.colIndex);\n }\n };\n\n this.handleBlur = function (e) {\n if (_this.props.blurToSave) {\n var value = e.currentTarget.type === 'checkbox' ? _this._getCheckBoxValue(e) : e.currentTarget.value;\n if (!_this.validator(value)) {\n return;\n }\n _this.props.completeEdit(value, _this.props.rowIndex, _this.props.colIndex);\n }\n };\n\n this.timeouteClear = 0;\n this.state = {\n shakeEditor: false\n };\n }\n\n _createClass(TableEditColumn, [{\n key: 'validator',\n value: function validator(value) {\n var ts = this;\n if (ts.props.editable.validator) {\n var valid = ts.props.editable.validator(value);\n if (!valid) {\n ts.refs.notifier.notice('error', valid, 'Pressed ESC can cancel');\n var input = ts.refs.inputRef;\n // animate input\n ts.clearTimeout();\n ts.setState({ shakeEditor: true });\n ts.timeouteClear = setTimeout(function () {\n ts.setState({ shakeEditor: false });\n }, 300);\n input.focus();\n return false;\n }\n }\n return true;\n }\n }, {\n key: 'clearTimeout',\n value: (function (_clearTimeout) {\n function clearTimeout() {\n return _clearTimeout.apply(this, arguments);\n }\n\n clearTimeout.toString = function () {\n return _clearTimeout.toString();\n };\n\n return clearTimeout;\n })(function () {\n if (this.timeouteClear !== 0) {\n clearTimeout(this.timeouteClear);\n this.timeouteClear = 0;\n }\n })\n }, {\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.refs.inputRef.focus();\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.clearTimeout();\n }\n }, {\n key: 'render',\n value: function render() {\n var _props = this.props;\n var editable = _props.editable;\n var format = _props.format;\n var children = _props.children;\n var shakeEditor = this.state.shakeEditor;\n\n var attr = {\n ref: 'inputRef',\n onKeyDown: this.handleKeyPress,\n onBlur: this.handleBlur\n };\n // put placeholder if exist\n editable.placeholder && (attr.placeholder = editable.placeholder);\n\n var editorClass = (0, _classnames2['default'])({ 'animated': shakeEditor, 'shake': shakeEditor });\n return _react2['default'].createElement(\n 'td',\n { ref: 'td', style: { position: 'relative' } },\n (0, _Editor2['default'])(editable, attr, format, editorClass, children || ''),\n _react2['default'].createElement(_NotificationJs2['default'], { ref: 'notifier' })\n );\n }\n }, {\n key: '_getCheckBoxValue',\n value: function _getCheckBoxValue(e) {\n var value = '';\n var values = e.currentTarget.value.split(':');\n value = e.currentTarget.checked ? values[0] : values[1];\n return value;\n }\n }]);\n\n return TableEditColumn;\n})(_react.Component);\n\nTableEditColumn.propTypes = {\n completeEdit: _react.PropTypes.func,\n rowIndex: _react.PropTypes.number,\n colIndex: _react.PropTypes.number,\n blurToSave: _react.PropTypes.bool,\n editable: _react.PropTypes.oneOfType([_react.PropTypes.bool, _react.PropTypes.object]),\n format: _react.PropTypes.oneOfType([_react.PropTypes.bool, _react.PropTypes.func]),\n children: _react.PropTypes.node\n};\n\nexports['default'] = TableEditColumn;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvVGFibGVFZGl0Q29sdW1uLmpzPzdiMWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztpQ0FBNEMsQ0FBTzs7OztrQ0FDaEMsRUFBVTs7OzswQ0FDUixFQUFtQjs7OztzQ0FDbkIsQ0FBWTs7OztJQUUzQixlQUFlO1lBQWYsZUFBZTs7QUFDUixXQURQLGVBQWUsQ0FDUCxLQUFLLEVBQUU7OzswQkFEZixlQUFlOztBQUVqQiwrQkFGRSxlQUFlLDZDQUVYLEtBQUssRUFBRTs7U0FPZixjQUFjLEdBQUcsV0FBQyxFQUFJO0FBQ3BCLFVBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxFQUFFLEVBQUU7O0FBRXBCLFlBQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxLQUFLLFVBQVUsR0FDakMsTUFBSyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQzs7QUFFbEUsWUFBSSxDQUFDLE1BQUssU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzFCLGlCQUFPO1NBQ1I7QUFDRCxjQUFLLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLE1BQUssS0FBSyxDQUFDLFFBQVEsRUFBRSxNQUFLLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztPQUMxRSxNQUFNLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxFQUFFLEVBQUU7QUFDM0IsY0FBSyxLQUFLLENBQUMsWUFBWSxDQUNyQixJQUFJLEVBQUUsTUFBSyxLQUFLLENBQUMsUUFBUSxFQUFFLE1BQUssS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO09BQ25EO0tBQ0Y7O1NBRUQsVUFBVSxHQUFHLFdBQUMsRUFBSTtBQUNoQixVQUFJLE1BQUssS0FBSyxDQUFDLFVBQVUsRUFBRTtBQUN6QixZQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksS0FBSyxVQUFVLEdBQ2pDLE1BQUss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QUUsQ0FBQztRQUM3RCxnRUFBVSxHQUFHLEVBQUMsVUFBVSxHQUFFO09BQ3ZCLENBQ0w7S0FDSDs7O1dBRWdCLDJCQUFDLENBQUMsRUFBRTtBQUNuQixVQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDZixVQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEQsV0FBSyxHQUFHLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsYUFBTyxLQUFLLENBQUM7S0FDZDs7O1NBL0ZHLGVBQWU7OztBQWtHckIsZUFBZSxDQUFDLFNBQVMsR0FBRztBQUMxQixjQUFZLEVBQUUsaUJBQVUsSUFBSTtBQUM1QixVQUFRLEVBQUUsaUJBQVUsTUFBTTtBQUMxQixVQUFRLEVBQUUsaUJBQVUsTUFBTTtBQUMxQixZQUFVLEVBQUUsaUJBQVUsSUFBSTtBQUMxQixVQUFRLEVBQUUsaUJBQVUsU0FBUyxDQUFDLENBQUUsaUJBQVUsSUFBSSxFQUFFLGlCQUFVLE1BQU0sQ0FBRSxDQUFDO0FBQ25FLFFBQU0sRUFBRSxpQkFBVSxTQUFTLENBQUMsQ0FBRSxpQkFBVSxJQUFJLEVBQUUsaUJBQVUsSUFBSSxDQUFFLENBQUM7QUFDL0QsVUFBUSxFQUFFLGlCQUFVLElBQUk7Q0FDekIsQ0FBQzs7cUJBR2EsZUFBZSIsImZpbGUiOiIxMS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFByb3BUeXBlcyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBlZGl0b3IgZnJvbSAnLi9FZGl0b3InO1xuaW1wb3J0IE5vdGlmaWVyIGZyb20gJy4vTm90aWZpY2F0aW9uLmpzJztcbmltcG9ydCBjbGFzc1NldCBmcm9tICdjbGFzc25hbWVzJztcblxuY2xhc3MgVGFibGVFZGl0Q29sdW1uIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy50aW1lb3V0ZUNsZWFyID0gMDtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgc2hha2VFZGl0b3I6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGhhbmRsZUtleVByZXNzID0gZSA9PiB7XG4gICAgaWYgKGUua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgIC8vIFByZXNzZWQgRU5URVJcbiAgICAgIGNvbnN0IHZhbHVlID0gZS5jdXJyZW50VGFyZ2V0LnR5cGUgPT09ICdjaGVja2JveCcgP1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2dldENoZWNrQm94VmFsdWUoZSkgOiBlLmN1cnJlbnRUYXJnZXQudmFsdWU7XG5cbiAgICAgIGlmICghdGhpcy52YWxpZGF0b3IodmFsdWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMucHJvcHMuY29tcGxldGVFZGl0KHZhbHVlLCB0aGlzLnByb3BzLnJvd0luZGV4LCB0aGlzLnByb3BzLmNvbEluZGV4KTtcbiAgICB9IGVsc2UgaWYgKGUua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgIHRoaXMucHJvcHMuY29tcGxldGVFZGl0KFxuICAgICAgICBudWxsLCB0aGlzLnByb3BzLnJvd0luZGV4LCB0aGlzLnByb3BzLmNvbEluZGV4KTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVCbHVyID0gZSA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMuYmx1clRvU2F2ZSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBlLmN1cnJlbnRUYXJnZXQudHlwZSA9PT0gJ2NoZWNrYm94JyA/XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2V0Q2hlY2tCb3hWYWx1ZShlKSA6IGUuY3VycmVudFRhcmdldC52YWx1ZTtcbiAgICAgIGlmICghdGhpcy52YWxpZGF0b3IodmFsdWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMucHJvcHMuY29tcGxldGVFZGl0KFxuICAgICAgICAgIHZhbHVlLCB0aGlzLnByb3BzLnJvd0luZGV4LCB0aGlzLnByb3BzLmNvbEluZGV4KTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0b3IodmFsdWUpIHtcbiAgICBjb25zdCB0cyA9IHRoaXM7XG4gICAgaWYgKHRzLnByb3BzLmVkaXRhYmxlLnZhbGlkYXRvcikge1xuICAgICAgY29uc3QgdmFsaWQgPSB0cy5wcm9wcy5lZGl0YWJsZS52YWxpZGF0b3IodmFsdWUpO1xuICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICB0cy5yZWZzLm5vdGlmaWVyLm5vdGljZSgnZXJyb3InLCB2YWxpZCwgJ1ByZXNzZWQgRVNDIGNhbiBjYW5jZWwnKTtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0cy5yZWZzLmlucHV0UmVmO1xuICAgICAgICAvLyBhbmltYXRlIGlucHV0XG4gICAgICAgIHRzLmNsZWFyVGltZW91dCgpO1xuICAgICAgICB0cy5zZXRTdGF0ZSh7IHNoYWtlRWRpdG9yOiB0cnVlIH0pO1xuICAgICAgICB0cy50aW1lb3V0ZUNsZWFyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdHMuc2V0U3RhdGUoeyBzaGFrZUVkaXRvcjogZmFsc2UgfSk7XG4gICAgICAgIH0sIDMwMCk7XG4gICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY2xlYXJUaW1lb3V0KCkge1xuICAgIGlmICh0aGlzLnRpbWVvdXRlQ2xlYXIgIT09IDApIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRlQ2xlYXIpO1xuICAgICAgdGhpcy50aW1lb3V0ZUNsZWFyID0gMDtcbiAgICB9XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5yZWZzLmlucHV0UmVmLmZvY3VzKCk7XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLmNsZWFyVGltZW91dCgpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgZWRpdGFibGUsIGZvcm1hdCwgY2hpbGRyZW4gfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBzaGFrZUVkaXRvciB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBhdHRyID0ge1xuICAgICAgcmVmOiAnaW5wdXRSZWYnLFxuICAgICAgb25LZXlEb3duOiB0aGlzLmhhbmRsZUtleVByZXNzLFxuICAgICAgb25CbHVyOiB0aGlzLmhhbmRsZUJsdXJcbiAgICB9O1xuICAgIC8vIHB1dCBwbGFjZWhvbGRlciBpZiBleGlzdFxuICAgIGVkaXRhYmxlLnBsYWNlaG9sZGVyICYmIChhdHRyLnBsYWNlaG9sZGVyID0gZWRpdGFibGUucGxhY2Vob2xkZXIpO1xuXG4gICAgY29uc3QgZWRpdG9yQ2xhc3MgPSBjbGFzc1NldCh7ICdhbmltYXRlZCc6IHNoYWtlRWRpdG9yLCAnc2hha2UnOiBzaGFrZUVkaXRvciB9KTtcbiAgICByZXR1cm4gKFxuICAgICAgPHRkIHJlZj0ndGQnIHN0eWxlPXsgeyBwb3NpdGlvbjogJ3JlbGF0aXZlJyB9IH0+XG4gICAgICAgIHsgZWRpdG9yKGVkaXRhYmxlLCBhdHRyLCBmb3JtYXQsIGVkaXRvckNsYXNzLCBjaGlsZHJlbiB8fCAnJykgfVxuICAgICAgICA8Tm90aWZpZXIgcmVmPSdub3RpZmllcicvPlxuICAgICAgPC90ZD5cbiAgICApO1xuICB9XG5cbiAgX2dldENoZWNrQm94VmFsdWUoZSkge1xuICAgIGxldCB2YWx1ZSA9ICcnO1xuICAgIGNvbnN0IHZhbHVlcyA9IGUuY3VycmVudFRhcmdldC52YWx1ZS5zcGxpdCgnOicpO1xuICAgIHZhbHVlID0gZS5jdXJyZW50VGFyZ2V0LmNoZWNrZWQgPyB2YWx1ZXNbMF0gOiB2YWx1ZXNbMV07XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5cblRhYmxlRWRpdENvbHVtbi5wcm9wVHlwZXMgPSB7XG4gIGNvbXBsZXRlRWRpdDogUHJvcFR5cGVzLmZ1bmMsXG4gIHJvd0luZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuICBjb2xJbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgYmx1clRvU2F2ZTogUHJvcFR5cGVzLmJvb2wsXG4gIGVkaXRhYmxlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFsgUHJvcFR5cGVzLmJvb2wsIFByb3BUeXBlcy5vYmplY3QgXSksXG4gIGZvcm1hdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbIFByb3BUeXBlcy5ib29sLCBQcm9wVHlwZXMuZnVuYyBdKSxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlXG59O1xuXG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlRWRpdENvbHVtbjtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL1RhYmxlRWRpdENvbHVtbi5qc1xuICoqLyJdLCJzb3VyY2VSb290IjoiIn0="); +},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar editor = function editor(editable, attr, format, editorClass, defaultValue) {\n if (editable === true || typeof editable === 'string') {\n // simple declare\n var type = editable ? 'text' : editable;\n return _react2['default'].createElement('input', _extends({}, attr, { type: type, defaultValue: defaultValue,\n className: (editorClass || '') + ' form-control editor edit-text' }));\n } else if (!editable) {\n var type = editable ? 'text' : editable;\n return _react2['default'].createElement('input', _extends({}, attr, { type: type, defaultValue: defaultValue,\n disabled: 'disabled',\n className: (editorClass || '') + ' form-control editor edit-text' }));\n } else if (editable.type) {\n // standard declare\n // put style if exist\n editable.style && (attr.style = editable.style);\n // put class if exist\n attr.className = (editorClass || '') + ' form-control editor edit-' + editable.type + (editable.className ? ' ' + editable.className : '');\n\n if (editable.type === 'select') {\n // process select input\n var options = [];\n var values = editable.options.values;\n if (Array.isArray(values)) {\n (function () {\n // only can use arrray data for options\n var rowValue = undefined;\n options = values.map(function (d, i) {\n rowValue = format ? format(d) : d;\n return _react2['default'].createElement(\n 'option',\n { key: 'option' + i, value: d },\n rowValue\n );\n });\n })();\n }\n return _react2['default'].createElement(\n 'select',\n _extends({}, attr, { defaultValue: defaultValue }),\n options\n );\n } else if (editable.type === 'textarea') {\n var _ret2 = (function () {\n // process textarea input\n // put other if exist\n editable.cols && (attr.cols = editable.cols);\n editable.rows && (attr.rows = editable.rows);\n var saveBtn = undefined;\n var keyUpHandler = attr.onKeyDown;\n if (keyUpHandler) {\n attr.onKeyDown = function (e) {\n if (e.keyCode !== 13) {\n // not Pressed ENTER\n keyUpHandler(e);\n }\n };\n saveBtn = _react2['default'].createElement(\n 'button',\n {\n className: 'btn btn-info btn-xs textarea-save-btn',\n onClick: keyUpHandler },\n 'save'\n );\n }\n return {\n v: _react2['default'].createElement(\n 'div',\n null,\n _react2['default'].createElement('textarea', _extends({}, attr, { defaultValue: defaultValue })),\n saveBtn\n )\n };\n })();\n\n if (typeof _ret2 === 'object') return _ret2.v;\n } else if (editable.type === 'checkbox') {\n var values = 'true:false';\n if (editable.options && editable.options.values) {\n // values = editable.options.values.split(':');\n values = editable.options.values;\n }\n attr.className = attr.className.replace('form-control', '');\n attr.className += ' checkbox pull-right';\n\n var checked = defaultValue && defaultValue.toString() === values.split(':')[0] ? true : false;\n\n return _react2['default'].createElement('input', _extends({}, attr, { type: 'checkbox',\n value: values, defaultChecked: checked }));\n } else {\n // process other input type. as password,url,email...\n return _react2['default'].createElement('input', _extends({}, attr, { type: 'text', defaultValue: defaultValue }));\n }\n }\n // default return for other case of editable\n return _react2['default'].createElement('input', _extends({}, attr, { type: 'text',\n className: (editorClass || '') + ' form-control editor edit-text' }));\n};\n\nexports['default'] = editor;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvRWRpdG9yLmpzPzcxNWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztpQ0FBa0IsQ0FBTzs7OztBQUV6QixJQUFNLE1BQU0sR0FBRyxTQUFULE1BQU0sQ0FBWSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFO0FBQ3pFLE1BQUksUUFBUSxLQUFLLElBQUksSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUU7O0FBQ3JELFFBQU0sSUFBSSxHQUFHLFFBQVEsR0FBRyxNQUFNLEdBQUcsUUFBUSxDQUFDO0FBQzFDLFdBQ0UsdURBQVksSUFBSSxJQUFHLElBQUksRUFBRyxJQUFNLEVBQUMsWUFBWSxFQUFHLFlBQWM7QUFDMUQsZUFBUyxFQUFHLENBQUUsV0FBVyxJQUFJLEVBQUUsSUFBSSxnQ0FBa0MsSUFBRyxDQUM1RTtHQUNILE1BQU0sSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUNwQixRQUFNLElBQUksR0FBRyxRQUFRLEdBQUcsTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUMxQyxXQUNJLHVEQUFZLElBQUksSUFBRyxJQUFJLEVBQUcsSUFBTSxFQUFDLFlBQVksRUFBRyxZQUFjO0FBQzVELGNBQVEsRUFBQyxVQUFVO0FBQ25CLGVBQVMsRUFBRyxDQUFFLFdBQVcsSUFBSSxFQUFFLElBQUksZ0NBQWtDLElBQUcsQ0FDNUU7R0FDSCxNQUFNLElBQUksUUFBUSxDQUFDLElBQUksRUFBRTs7O0FBRXhCLFlBQVEsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7O0FBRWhELFFBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxXQUFXLElBQUksRUFBRSxJQUNsQiw0QkFBNEIsR0FDNUIsUUFBUSxDQUFDLElBQUksSUFDWixRQUFRLENBQUMsU0FBUyxHQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsU0FBUyxHQUFJLEVBQUUsQ0FBQyxD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LCJmaWxlIjoiMTIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jb25zdCBlZGl0b3IgPSBmdW5jdGlvbihlZGl0YWJsZSwgYXR0ciwgZm9ybWF0LCBlZGl0b3JDbGFzcywgZGVmYXVsdFZhbHVlKSB7XG4gIGlmIChlZGl0YWJsZSA9PT0gdHJ1ZSB8fCB0eXBlb2YgZWRpdGFibGUgPT09ICdzdHJpbmcnKSB7IC8vIHNpbXBsZSBkZWNsYXJlXG4gICAgY29uc3QgdHlwZSA9IGVkaXRhYmxlID8gJ3RleHQnIDogZWRpdGFibGU7XG4gICAgcmV0dXJuIChcbiAgICAgIDxpbnB1dCB7IC4uLmF0dHIgfSB0eXBlPXsgdHlwZSB9IGRlZmF1bHRWYWx1ZT17IGRlZmF1bHRWYWx1ZSB9XG4gICAgICAgICAgY2xhc3NOYW1lPXsgKCBlZGl0b3JDbGFzcyB8fCAnJykgKyAnIGZvcm0tY29udHJvbCBlZGl0b3IgZWRpdC10ZXh0JyB9IC8+XG4gICAgKTtcbiAgfSBlbHNlIGlmICghZWRpdGFibGUpIHtcbiAgICBjb25zdCB0eXBlID0gZWRpdGFibGUgPyAndGV4dCcgOiBlZGl0YWJsZTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8aW5wdXQgeyAuLi5hdHRyIH0gdHlwZT17IHR5cGUgfSBkZWZhdWx0VmFsdWU9eyBkZWZhdWx0VmFsdWUgfVxuICAgICAgICAgIGRpc2FibGVkPSdkaXNhYmxlZCdcbiAgICAgICAgICBjbGFzc05hbWU9eyAoIGVkaXRvckNsYXNzIHx8ICcnKSArICcgZm9ybS1jb250cm9sIGVkaXRvciBlZGl0LXRleHQnIH0gLz5cbiAgICApO1xuICB9IGVsc2UgaWYgKGVkaXRhYmxlLnR5cGUpIHsvLyBzdGFuZGFyZCBkZWNsYXJlXG4gICAgLy8gcHV0IHN0eWxlIGlmIGV4aXN0XG4gICAgZWRpdGFibGUuc3R5bGUgJiYgKGF0dHIuc3R5bGUgPSBlZGl0YWJsZS5zdHlsZSk7XG4gICAgLy8gcHV0IGNsYXNzIGlmIGV4aXN0XG4gICAgYXR0ci5jbGFzc05hbWUgPSAoZWRpdG9yQ2xhc3MgfHwgJycpICtcbiAgICAgICAgICAgICAgICAgICAgICcgZm9ybS1jb250cm9sIGVkaXRvciBlZGl0LScgK1xuICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGUudHlwZSArXG4gICAgICAgICAgICAgICAgICAgICAoZWRpdGFibGUuY2xhc3NOYW1lID8gKCcgJyArIGVkaXRhYmxlLmNsYXNzTmFtZSkgOiAnJyk7XG5cbiAgICBpZiAoZWRpdGFibGUudHlwZSA9PT0gJ3NlbGVjdCcpIHsvLyBwcm9jZXNzIHNlbGVjdCBpbnB1dFxuICAgICAgbGV0IG9wdGlvbnMgPSBbXTtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IGVkaXRhYmxlLm9wdGlvbnMudmFsdWVzO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVzKSkgey8vIG9ubHkgY2FuIHVzZSBhcnJyYXkgZGF0YSBmb3Igb3B0aW9uc1xuICAgICAgICBsZXQgcm93VmFsdWU7XG4gICAgICAgIG9wdGlvbnMgPSB2YWx1ZXMubWFwKChkLCBpKSA9PiB7XG4gICAgICAgICAgcm93VmFsdWUgPSBmb3JtYXQgPyBmb3JtYXQoZCkgOiBkO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8b3B0aW9uIGtleT17ICdvcHRpb24nICsgaSB9IHZhbHVlPXsgZCB9Pnsgcm93VmFsdWUgfTwvb3B0aW9uPlxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHNlbGVjdCB7IC4uLmF0dHIgfSBkZWZhdWx0VmFsdWU9eyBkZWZhdWx0VmFsdWUgfT5cbiAgICAgICAgICB7IG9wdGlvbnMgfVxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChlZGl0YWJsZS50eXBlID09PSAndGV4dGFyZWEnKSB7Ly8gcHJvY2VzcyB0ZXh0YXJlYSBpbnB1dFxuICAgICAgLy8gcHV0IG90aGVyIGlmIGV4aXN0XG4gICAgICBlZGl0YWJsZS5jb2xzICYmIChhdHRyLmNvbHMgPSBlZGl0YWJsZS5jb2xzKTtcbiAgICAgIGVkaXRhYmxlLnJvd3MgJiYgKGF0dHIucm93cyA9IGVkaXRhYmxlLnJvd3MpO1xuICAgICAgbGV0IHNhdmVCdG47XG4gICAgICBjb25zdCBrZXlVcEhhbmRsZXIgPSBhdHRyLm9uS2V5RG93bjtcbiAgICAgIGlmIChrZXlVcEhhbmRsZXIpIHtcbiAgICAgICAgYXR0ci5vbktleURvd24gPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgaWYgKGUua2V5Q29kZSAhPT0gMTMpIHsgLy8gbm90IFByZXNzZWQgRU5URVJcbiAgICAgICAgICAgIGtleVVwSGFuZGxlcihlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHNhdmVCdG4gPSAoXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3NOYW1lPSdidG4gYnRuLWluZm8gYnRuLXhzIHRleHRhcmVhLXNhdmUtYnRuJ1xuICAgICAgICAgICAgb25DbGljaz17IGtleVVwSGFuZGxlciB9PlxuICAgICAgICAgICAgc2F2ZVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8dGV4dGFyZWEgeyAuLi5hdHRyIH0gZGVmYXVsdFZhbHVlPXsgZGVmYXVsdFZhbHVlIH0+PC90ZXh0YXJlYT5cbiAgICAgICAgICB7IHNhdmVCdG4gfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChlZGl0YWJsZS50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICBsZXQgdmFsdWVzID0gJ3RydWU6ZmFsc2UnO1xuICAgICAgaWYgKGVkaXRhYmxlLm9wdGlvbnMgJiYgZWRpdGFibGUub3B0aW9ucy52YWx1ZXMpIHtcbiAgICAgICAgLy8gdmFsdWVzID0gZWRpdGFibGUub3B0aW9ucy52YWx1ZXMuc3BsaXQoJzonKTtcbiAgICAgICAgdmFsdWVzID0gZWRpdGFibGUub3B0aW9ucy52YWx1ZXM7XG4gICAgICB9XG4gICAgICBhdHRyLmNsYXNzTmFtZSA9IGF0dHIuY2xhc3NOYW1lLnJlcGxhY2UoJ2Zvcm0tY29udHJvbCcsICcnKTtcbiAgICAgIGF0dHIuY2xhc3NOYW1lICs9ICcgY2hlY2tib3ggcHVsbC1yaWdodCc7XG5cbiAgICAgIGNvbnN0IGNoZWNrZWQgPSBkZWZhdWx0VmFsdWUgJiZcbiAgICAgICAgZGVmYXVsdFZhbHVlLnRvU3RyaW5nKCkgPT09IHZhbHVlcy5zcGxpdCgnOicpWzBdID8gdHJ1ZSA6IGZhbHNlO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8aW5wdXQgeyAuLi5hdHRyIH0gdHlwZT0nY2hlY2tib3gnXG4gICAgICAgICAgdmFsdWU9eyB2YWx1ZXMgfSBkZWZhdWx0Q2hlY2tlZD17IGNoZWNrZWQgfS8+XG4gICAgICApO1xuICAgIH0gZWxzZSB7Ly8gcHJvY2VzcyBvdGhlciBpbnB1dCB0eXBlLiBhcyBwYXNzd29yZCx1cmwsZW1haWwuLi5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxpbnB1dCB7IC4uLmF0dHIgfSB0eXBlPSd0ZXh0JyBkZWZhdWx0VmFsdWU9eyBkZWZhdWx0VmFsdWUgfS8+XG4gICAgICApO1xuICAgIH1cbiAgfVxuICAvLyBkZWZhdWx0IHJldHVybiBmb3Igb3RoZXIgY2FzZSBvZiBlZGl0YWJsZVxuICByZXR1cm4gKFxuICAgIDxpbnB1dCB7Li4uYXR0cn0gdHlwZT0ndGV4dCdcbiAgICAgIGNsYXNzTmFtZT17IChlZGl0b3JDbGFzcyB8fCAnJykgKyAnIGZvcm0tY29udHJvbCBlZGl0b3IgZWRpdC10ZXh0JyB9Lz5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGVkaXRvcjtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL0VkaXRvci5qc1xuICoqLyJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactToastr = __webpack_require__(14);\n\nvar ToastrMessageFactory = _react2['default'].createFactory(_reactToastr.ToastMessage.animation);\n\nvar Notification = (function (_Component) {\n _inherits(Notification, _Component);\n\n function Notification() {\n _classCallCheck(this, Notification);\n\n _get(Object.getPrototypeOf(Notification.prototype), 'constructor', this).apply(this, arguments);\n }\n\n _createClass(Notification, [{\n key: 'notice',\n\n // allow type is success,info,warning,error\n value: function notice(type, msg, title) {\n this.refs.toastr[type](msg, title, {\n mode: 'single',\n timeOut: 5000,\n extendedTimeOut: 1000,\n showAnimation: 'animated bounceIn',\n hideAnimation: 'animated bounceOut'\n });\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2['default'].createElement(_reactToastr.ToastContainer, { ref: 'toastr',\n toastMessageFactory: ToastrMessageFactory,\n id: 'toast-container',\n className: 'toast-top-right' });\n }\n }]);\n\n return Notification;\n})(_react.Component);\n\nexports['default'] = Notification;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvTm90aWZpY2F0aW9uLmpzPzNjODYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztpQ0FBaUMsQ0FBTzs7Ozt1Q0FFSyxFQUFjOztBQUczRCxJQUFNLG9CQUFvQixHQUFHLG1CQUFNLGFBQWEsQ0FBQywwQkFBYSxTQUFTLENBQUMsQ0FBQzs7SUFFbkUsWUFBWTtZQUFaLFlBQVk7O1dBQVosWUFBWTswQkFBWixZQUFZOzsrQkFBWixZQUFZOzs7ZUFBWixZQUFZOzs7O1dBRVYsZ0JBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUU7QUFDdkIsVUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQ3BCLEdBQUcsRUFBRSxLQUFLLEVBQUU7QUFDVixZQUFJLEVBQUUsUUFBUTtBQUNkLGVBQU8sRUFBRSxJQUFJO0FBQ2IsdUJBQWUsRUFBRSxJQUFJO0FBQ3JCLHFCQUFhLEVBQUUsb0JBQW9CO0FBQ25DLHFCQUFhLEVBQUUsb0JBQW9CO09BQ3BDLENBQUMsQ0FBQztLQUNOOzs7V0FFSyxrQkFBRztBQUNQLGFBQ0UsZ0VBQWdCLEdBQUcsRUFBQyxRQUFRO0FBQzFCLDJCQUFtQixFQUFHLG9CQUFzQjtBQUM1QyxVQUFFLEVBQUMsaUJBQWlCO0FBQ3BCLGlCQUFTLEVBQUMsaUJBQWlCLEdBQUUsQ0FDL0I7S0FDSDs7O1NBcEJHLFlBQVk7OztxQkF1QkgsWUFBWSIsImZpbGUiOiIxMy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7IFRvYXN0Q29udGFpbmVyLCBUb2FzdE1lc3NhZ2UgfSBmcm9tICdyZWFjdC10b2FzdHInO1xuXG5cbmNvbnN0IFRvYXN0ck1lc3NhZ2VGYWN0b3J5ID0gUmVhY3QuY3JlYXRlRmFjdG9yeShUb2FzdE1lc3NhZ2UuYW5pbWF0aW9uKTtcblxuY2xhc3MgTm90aWZpY2F0aW9uIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLy8gYWxsb3cgdHlwZSBpcyBzdWNjZXNzLGluZm8sd2FybmluZyxlcnJvclxuICBub3RpY2UodHlwZSwgbXNnLCB0aXRsZSkge1xuICAgIHRoaXMucmVmcy50b2FzdHJbdHlwZV0oXG4gICAgICBtc2csIHRpdGxlLCB7XG4gICAgICAgIG1vZGU6ICdzaW5nbGUnLFxuICAgICAgICB0aW1lT3V0OiA1MDAwLFxuICAgICAgICBleHRlbmRlZFRpbWVPdXQ6IDEwMDAsXG4gICAgICAgIHNob3dBbmltYXRpb246ICdhbmltYXRlZCAgYm91bmNlSW4nLFxuICAgICAgICBoaWRlQW5pbWF0aW9uOiAnYW5pbWF0ZWQgYm91bmNlT3V0J1xuICAgICAgfSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxUb2FzdENvbnRhaW5lciByZWY9J3RvYXN0cidcbiAgICAgICAgdG9hc3RNZXNzYWdlRmFjdG9yeT17IFRvYXN0ck1lc3NhZ2VGYWN0b3J5IH1cbiAgICAgICAgaWQ9J3RvYXN0LWNvbnRhaW5lcidcbiAgICAgICAgY2xhc3NOYW1lPSd0b2FzdC10b3AtcmlnaHQnLz5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE5vdGlmaWNhdGlvbjtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL05vdGlmaWNhdGlvbi5qc1xuICoqLyJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports,__webpack_require__){eval('"use strict";\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.ToastMessage = exports.ToastContainer = undefined;\n\nvar _ToastContainer = __webpack_require__(15);\n\nvar _ToastContainer2 = _interopRequireDefault(_ToastContainer);\n\nvar _ToastMessage = __webpack_require__(22);\n\nvar _ToastMessage2 = _interopRequireDefault(_ToastMessage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.ToastContainer = _ToastContainer2.default;\nexports.ToastMessage = _ToastMessage2.default;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXRvYXN0ci9saWIvaW5kZXguanM/ODEyNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHNDQUFzQyx1Q0FBdUMsZ0JBQWdCOztBQUU3RjtBQUNBIiwiZmlsZSI6IjE0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlRvYXN0TWVzc2FnZSA9IGV4cG9ydHMuVG9hc3RDb250YWluZXIgPSB1bmRlZmluZWQ7XG5cbnZhciBfVG9hc3RDb250YWluZXIgPSByZXF1aXJlKFwiLi9Ub2FzdENvbnRhaW5lclwiKTtcblxudmFyIF9Ub2FzdENvbnRhaW5lcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9Ub2FzdENvbnRhaW5lcik7XG5cbnZhciBfVG9hc3RNZXNzYWdlID0gcmVxdWlyZShcIi4vVG9hc3RNZXNzYWdlXCIpO1xuXG52YXIgX1RvYXN0TWVzc2FnZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9Ub2FzdE1lc3NhZ2UpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLlRvYXN0Q29udGFpbmVyID0gX1RvYXN0Q29udGFpbmVyMi5kZWZhdWx0O1xuZXhwb3J0cy5Ub2FzdE1lc3NhZ2UgPSBfVG9hc3RNZXNzYWdlMi5kZWZhdWx0O1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L3JlYWN0LXRvYXN0ci9saWIvaW5kZXguanNcbiAqKiBtb2R1bGUgaWQgPSAxNFxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ==')},function(module,exports,__webpack_require__){eval('"use strict";\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = 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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactAddonsUpdate = __webpack_require__(16);\n\nvar _reactAddonsUpdate2 = _interopRequireDefault(_reactAddonsUpdate);\n\nvar _ToastMessage = __webpack_require__(22);\n\nvar _ToastMessage2 = _interopRequireDefault(_ToastMessage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ToastContainer = function (_Component) {\n _inherits(ToastContainer, _Component);\n\n function ToastContainer() {\n var _Object$getPrototypeO;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, ToastContainer);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(ToastContainer)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.state = {\n toasts: [],\n toastId: 0,\n previousMessage: null\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(ToastContainer, [{\n key: "error",\n value: function error(message, title, optionsOverride) {\n this._notify(this.props.toastType.error, message, title, optionsOverride);\n }\n }, {\n key: "info",\n value: function info(message, title, optionsOverride) {\n this._notify(this.props.toastType.info, message, title, optionsOverride);\n }\n }, {\n key: "success",\n value: function success(message, title, optionsOverride) {\n this._notify(this.props.toastType.success, message, title, optionsOverride);\n }\n }, {\n key: "warning",\n value: function warning(message, title, optionsOverride) {\n this._notify(this.props.toastType.warning, message, title, optionsOverride);\n }\n }, {\n key: "clear",\n value: function clear() {\n var _this2 = this;\n\n Object.keys(this.refs).forEach(function (key) {\n _this2.refs[key].hideToast(false);\n });\n }\n }, {\n key: "_notify",\n value: function _notify(type, message, title) {\n var _this3 = this;\n\n var optionsOverride = arguments.length <= 3 || arguments[3] === undefined ? {} : arguments[3];\n\n if (this.props.preventDuplicates) {\n if (this.state.previousMessage === message) {\n return;\n }\n }\n var key = this.state.toastId++;\n var toastId = key;\n var newToast = (0, _reactAddonsUpdate2.default)(optionsOverride, {\n $merge: {\n type: type,\n title: title,\n message: message,\n toastId: toastId,\n key: key,\n ref: "toasts__" + key,\n handleOnClick: function handleOnClick(e) {\n if ("function" === typeof optionsOverride.handleOnClick) {\n optionsOverride.handleOnClick();\n }\n return _this3._handle_toast_on_click(e);\n },\n handleRemove: this._handle_toast_remove.bind(this)\n }\n });\n var toastOperation = _defineProperty({}, "" + (this.props.newestOnTop ? "$unshift" : "$push"), [newToast]);\n\n var nextState = (0, _reactAddonsUpdate2.default)(this.state, {\n toasts: toastOperation,\n previousMessage: { $set: message }\n });\n this.setState(nextState);\n }\n }, {\n key: "_handle_toast_on_click",\n value: function _handle_toast_on_click(event) {\n this.props.onClick(event);\n if (event.defaultPrevented) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n }\n }, {\n key: "_handle_toast_remove",\n value: function _handle_toast_remove(toastId) {\n var _this4 = this;\n\n var operationName = "" + (this.props.newestOnTop ? "reduceRight" : "reduce");\n this.state.toasts[operationName](function (found, toast, index) {\n if (found || toast.toastId !== toastId) {\n return false;\n }\n _this4.setState((0, _reactAddonsUpdate2.default)(_this4.state, {\n toasts: { $splice: [[index, 1]] }\n }));\n return true;\n }, false);\n }\n }, {\n key: "render",\n value: function render() {\n var _this5 = this;\n\n return _react2.default.createElement(\n "div",\n _extends({}, this.props, { "aria-live": "polite", role: "alert" }),\n this.state.toasts.map(function (toast) {\n return _this5.props.toastMessageFactory(toast);\n })\n );\n }\n }]);\n\n return ToastContainer;\n}(_react.Component);\n\nToastContainer.propTypes = {\n toastType: _react.PropTypes.shape({\n error: _react.PropTypes.string,\n info: _react.PropTypes.string,\n success: _react.PropTypes.string,\n warning: _react.PropTypes.string\n }).isRequired,\n id: _react.PropTypes.string.isRequired,\n toastMessageFactory: _react.PropTypes.func.isRequired,\n preventDuplicates: _react.PropTypes.bool.isRequired,\n newestOnTop: _react.PropTypes.bool.isRequired,\n onClick: _react.PropTypes.func.isRequired\n};\nToastContainer.defaultProps = {\n toastType: {\n error: "error",\n info: "info",\n success: "success",\n warning: "warning"\n },\n id: "toast-container",\n toastMessageFactory: _react2.default.createFactory(_ToastMessage2.default),\n preventDuplicates: false,\n newestOnTop: true,\n onClick: function onClick() {}\n};\nexports.default = ToastContainer;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXRvYXN0ci9saWIvVG9hc3RDb250YWluZXIuanM/MmQyYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxtREFBbUQsZ0JBQWdCLHNCQUFzQixPQUFPLDJCQUEyQiwwQkFBMEIseURBQXlELDJCQUEyQixFQUFFLEVBQUUsRUFBRSxlQUFlOztBQUU5UCxnQ0FBZ0MsMkNBQTJDLGdCQUFnQixrQkFBa0IsT0FBTywyQkFBMkIsd0RBQXdELGdDQUFnQyx1REFBdUQsMkRBQTJELEVBQUUsRUFBRSx5REFBeUQscUVBQXFFLDZEQUE2RCxvQkFBb0IsR0FBRyxFQUFFOztBQUVqakI7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsc0NBQXNDLHVDQUF1QyxnQkFBZ0I7O0FBRTdGLDJDQUEyQyxrQkFBa0Isa0NBQWtDLHFFQUFxRSxFQUFFLEVBQUUsT0FBTyxrQkFBa0IsRUFBRSxZQUFZOztBQUUvTSxpREFBaUQsMENBQTBDLDBEQUEwRCxFQUFFOztBQUV2SixpREFBaUQsYUFBYSx1RkFBdUYsRUFBRSx1RkFBdUY7O0FBRTlPLDBDQUEwQywrREFBK0QscUdBQXFHLEVBQUUseUVBQXlFLGVBQWUseUVBQXlFLEVBQUUsRUFBRSx1SEFBdUg7O0FBRTVlO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxtRUFBbUUsYUFBYTtBQUNoRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBLG9GQUFvRjs7QUFFcEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsT0FBTztBQUNQLDZDQUE2Qzs7QUFFN0M7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQixPQUFPO0FBQ1A7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQixTQUFTO0FBQ1Q7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsZUFBZSx1Q0FBdUM7QUFDekU7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX3JlYWN0ID0gcmVxdWlyZShcInJlYWN0XCIpO1xuXG52YXIgX3JlYWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlYWN0KTtcblxudmFyIF9yZWFjdEFkZG9uc1VwZGF0ZSA9IHJlcXVpcmUoXCJyZWFjdC1hZGRvbnMtdXBkYXRlXCIpO1xuXG52YXIgX3JlYWN0QWRkb25zVXBkYXRlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlYWN0QWRkb25zVXBkYXRlKTtcblxudmFyIF9Ub2FzdE1lc3NhZ2UgPSByZXF1aXJlKFwiLi9Ub2FzdE1lc3NhZ2VcIik7XG5cbnZhciBfVG9hc3RNZXNzYWdlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX1RvYXN0TWVzc2FnZSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxudmFyIFRvYXN0Q29udGFpbmVyID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFRvYXN0Q29udGFpbmVyLCBfQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBUb2FzdENvbnRhaW5lcigpIHtcbiAgICB2YXIgX09iamVjdCRnZXRQcm90b3R5cGVPO1xuXG4gICAgdmFyIF90ZW1wLCBfdGhpcywgX3JldDtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUb2FzdENvbnRhaW5lcik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3JldCA9IChfdGVtcCA9IChfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChfT2JqZWN0JGdldFByb3RvdHlwZU8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoVG9hc3RDb250YWluZXIpKS5jYWxsLmFwcGx5KF9PYmplY3QkZ2V0UHJvdG90eXBlTywgW3RoaXNdLmNvbmNhdChhcmdzKSkpLCBfdGhpcyksIF90aGlzLnN0YXRlID0ge1xuICAgICAgdG9hc3RzOiBbXSxcbiAgICAgIHRvYXN0SWQ6IDAsXG4gICAgICBwcmV2aW91c01lc3NhZ2U6IG51bGxcbiAgICB9LCBfdGVtcCksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKF90aGlzLCBfcmV0KTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhUb2FzdENvbnRhaW5lciwgW3tcbiAgICBrZXk6IFwiZXJyb3JcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZXJyb3IobWVzc2FnZSwgdGl0bGUsIG9wdGlvbnNPdmVycmlkZSkge1xuICAgICAgdGhpcy5fbm90aWZ5KHRoaXMucHJvcHMudG9hc3RUeXBlLmVycm9yLCBtZXNzYWdlLCB0aXRsZSwgb3B0aW9uc092ZXJyaWRlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaW5mb1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbmZvKG1lc3NhZ2UsIHRpdGxlLCBvcHRpb25zT3ZlcnJpZGUpIHtcbiAgICAgIHRoaXMuX25vdGlmeSh0aGlzLnByb3BzLnRvYXN0VHlwZS5pbmZvLCBtZXNzYWdlLCB0aXRsZSwgb3B0aW9uc092ZXJyaWRlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic3VjY2Vzc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzdWNjZXNzKG1lc3NhZ2UsIHRpdGxlLCBvcHRpb25zT3ZlcnJpZGUpIHtcbiAgICAgIHRoaXMuX25vdGlmeSh0aGlzLnByb3BzLnRvYXN0VHlwZS5zdWNjZXNzLCBtZXNzYWdlLCB0aXRsZSwgb3B0aW9uc092ZXJyaWRlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwid2FybmluZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB3YXJuaW5nKG1lc3NhZ2UsIHRpdGxlLCBvcHRpb25zT3ZlcnJpZGUpIHtcbiAgICAgIHRoaXMuX25vdGlmeSh0aGlzLnByb3BzLnRvYXN0VHlwZS53YXJuaW5nLCBtZXNzYWdlLCB0aXRsZSwgb3B0aW9uc092ZXJyaWRlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY2xlYXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgT2JqZWN0LmtleXModGhpcy5yZWZzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgX3RoaXMyLnJlZnNba2V5XS5oaWRlVG9hc3QoZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9ub3RpZnlcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX25vdGlmeSh0eXBlLCBtZXNzYWdlLCB0aXRsZSkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciBvcHRpb25zT3ZlcnJpZGUgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDMgfHwgYXJndW1lbnRzWzNdID09PSB1bmRlZmluZWQgPyB7fSA6IGFyZ3VtZW50c1szXTtcblxuICAgICAgaWYgKHRoaXMucHJvcHMucHJldmVudER1cGxpY2F0ZXMpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUucHJldmlvdXNNZXNzYWdlID09PSBtZXNzYWdlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIga2V5ID0gdGhpcy5zdGF0ZS50b2FzdElkKys7XG4gICAgICB2YXIgdG9hc3RJZCA9IGtleTtcbiAgICAgIHZhciBuZXdUb2FzdCA9ICgwLCBfcmVhY3RBZGRvbnNVcGRhdGUyLmRlZmF1bHQpKG9wdGlvbnNPdmVycmlkZSwge1xuICAgICAgICAkbWVyZ2U6IHtcbiAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICAgIHRvYXN0SWQ6IHRvYXN0SWQsXG4gICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgcmVmOiBcInRvYXN0c19fXCIgKyBrZXksXG4gICAgICAgICAgaGFuZGxlT25DbGljazogZnVuY3Rpb24gaGFuZGxlT25DbGljayhlKSB7XG4gICAgICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2Ygb3B0aW9uc092ZXJyaWRlLmhhbmRsZU9uQ2xpY2spIHtcbiAgICAgICAgICAgICAgb3B0aW9uc092ZXJyaWRlLmhhbmRsZU9uQ2xpY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfdGhpczMuX2hhbmRsZV90b2FzdF9vbl9jbGljayhlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhhbmRsZVJlbW92ZTogdGhpcy5faGFuZGxlX3RvYXN0X3JlbW92ZS5iaW5kKHRoaXMpXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdmFyIHRvYXN0T3BlcmF0aW9uID0gX2RlZmluZVByb3BlcnR5KHt9LCBcIlwiICsgKHRoaXMucHJvcHMubmV3ZXN0T25Ub3AgPyBcIiR1bnNoaWZ0XCIgOiBcIiRwdXNoXCIpLCBbbmV3VG9hc3RdKTtcblxuICAgICAgdmFyIG5leHRTdGF0ZSA9ICgwLCBfcmVhY3RBZGRvbnNVcGRhdGUyLmRlZmF1bHQpKHRoaXMuc3RhdGUsIHtcbiAgICAgICAgdG9hc3RzOiB0b2FzdE9wZXJhdGlvbixcbiAgICAgICAgcHJldmlvdXNNZXNzYWdlOiB7ICRzZXQ6IG1lc3NhZ2UgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLnNldFN0YXRlKG5leHRTdGF0ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9oYW5kbGVfdG9hc3Rfb25fY2xpY2tcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2hhbmRsZV90b2FzdF9vbl9jbGljayhldmVudCkge1xuICAgICAgdGhpcy5wcm9wcy5vbkNsaWNrKGV2ZW50KTtcbiAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX2hhbmRsZV90b2FzdF9yZW1vdmVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2hhbmRsZV90b2FzdF9yZW1vdmUodG9hc3RJZCkge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgIHZhciBvcGVyYXRpb25OYW1lID0gXCJcIiArICh0aGlzLnByb3BzLm5ld2VzdE9uVG9wID8gXCJyZWR1Y2VSaWdodFwiIDogXCJyZWR1Y2VcIik7XG4gICAgICB0aGlzLnN0YXRlLnRvYXN0c1tvcGVyYXRpb25OYW1lXShmdW5jdGlvbiAoZm91bmQsIHRvYXN0LCBpbmRleCkge1xuICAgICAgICBpZiAoZm91bmQgfHwgdG9hc3QudG9hc3RJZCAhPT0gdG9hc3RJZCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBfdGhpczQuc2V0U3RhdGUoKDAsIF9yZWFjdEFkZG9uc1VwZGF0ZTIuZGVmYXVsdCkoX3RoaXM0LnN0YXRlLCB7XG4gICAgICAgICAgdG9hc3RzOiB7ICRzcGxpY2U6IFtbaW5kZXgsIDFdXSB9XG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9LCBmYWxzZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgICAgcmV0dXJuIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICBfZXh0ZW5kcyh7fSwgdGhpcy5wcm9wcywgeyBcImFyaWEtbGl2ZVwiOiBcInBvbGl0ZVwiLCByb2xlOiBcImFsZXJ0XCIgfSksXG4gICAgICAgIHRoaXMuc3RhdGUudG9hc3RzLm1hcChmdW5jdGlvbiAodG9hc3QpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXM1LnByb3BzLnRvYXN0TWVzc2FnZUZhY3RvcnkodG9hc3QpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gVG9hc3RDb250YWluZXI7XG59KF9yZWFjdC5Db21wb25lbnQpO1xuXG5Ub2FzdENvbnRhaW5lci5wcm9wVHlwZXMgPSB7XG4gIHRvYXN0VHlwZTogX3JlYWN0LlByb3BUeXBlcy5zaGFwZSh7XG4gICAgZXJyb3I6IF9yZWFjdC5Qcm9wVHlwZXMuc3RyaW5nLFxuICAgIGluZm86IF9yZWFjdC5Qcm9wVHlwZXMuc3RyaW5nLFxuICAgIHN1Y2Nlc3M6IF9yZWFjdC5Qcm9wVHlwZXMuc3RyaW5nLFxuICAgIHdhcm5pbmc6IF9yZWFjdC5Qcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWQsXG4gIGlkOiBfcmVhY3QuUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICB0b2FzdE1lc3NhZ2VGYWN0b3J5OiBfcmVhY3QuUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgcHJldmVudER1cGxpY2F0ZXM6IF9yZWFjdC5Qcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBuZXdlc3RPblRvcDogX3JlYWN0LlByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIG9uQ2xpY2s6IF9yZWFjdC5Qcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG59O1xuVG9hc3RDb250YWluZXIuZGVmYXVsdFByb3BzID0ge1xuICB0b2FzdFR5cGU6IHtcbiAgICBlcnJvcjogXCJlcnJvclwiLFxuICAgIGluZm86IFwiaW5mb1wiLFxuICAgIHN1Y2Nlc3M6IFwic3VjY2Vzc1wiLFxuICAgIHdhcm5pbmc6IFwid2FybmluZ1wiXG4gIH0sXG4gIGlkOiBcInRvYXN0LWNvbnRhaW5lclwiLFxuICB0b2FzdE1lc3NhZ2VGYWN0b3J5OiBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRmFjdG9yeShfVG9hc3RNZXNzYWdlMi5kZWZhdWx0KSxcbiAgcHJldmVudER1cGxpY2F0ZXM6IGZhbHNlLFxuICBuZXdlc3RPblRvcDogdHJ1ZSxcbiAgb25DbGljazogZnVuY3Rpb24gb25DbGljaygpIHt9XG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gVG9hc3RDb250YWluZXI7XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34vcmVhY3QtdG9hc3RyL2xpYi9Ub2FzdENvbnRhaW5lci5qc1xuICoqIG1vZHVsZSBpZCA9IDE1XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9'); +},function(module,exports,__webpack_require__){eval("module.exports = __webpack_require__(17);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWFkZG9ucy11cGRhdGUvaW5kZXguanM/MDQ0OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSIsImZpbGUiOiIxNi5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgncmVhY3QvbGliL3VwZGF0ZScpO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L3JlYWN0LWFkZG9ucy11cGRhdGUvaW5kZXguanNcbiAqKiBtb2R1bGUgaWQgPSAxNlxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports,__webpack_require__){eval("/* WEBPACK VAR INJECTION */(function(process) {/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule update\n */\n\n/* global hasOwnProperty:true */\n\n'use strict';\n\nvar assign = __webpack_require__(19);\nvar keyOf = __webpack_require__(20);\nvar invariant = __webpack_require__(21);\nvar hasOwnProperty = ({}).hasOwnProperty;\n\nfunction shallowCopy(x) {\n if (Array.isArray(x)) {\n return x.concat();\n } else if (x && typeof x === 'object') {\n return assign(new x.constructor(), x);\n } else {\n return x;\n }\n}\n\nvar COMMAND_PUSH = keyOf({ $push: null });\nvar COMMAND_UNSHIFT = keyOf({ $unshift: null });\nvar COMMAND_SPLICE = keyOf({ $splice: null });\nvar COMMAND_SET = keyOf({ $set: null });\nvar COMMAND_MERGE = keyOf({ $merge: null });\nvar COMMAND_APPLY = keyOf({ $apply: null });\n\nvar ALL_COMMANDS_LIST = [COMMAND_PUSH, COMMAND_UNSHIFT, COMMAND_SPLICE, COMMAND_SET, COMMAND_MERGE, COMMAND_APPLY];\n\nvar ALL_COMMANDS_SET = {};\n\nALL_COMMANDS_LIST.forEach(function (command) {\n ALL_COMMANDS_SET[command] = true;\n});\n\nfunction invariantArrayCase(value, spec, command) {\n !Array.isArray(value) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'update(): expected target of %s to be an array; got %s.', command, value) : invariant(false) : undefined;\n var specValue = spec[command];\n !Array.isArray(specValue) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'update(): expected spec of %s to be an array; got %s. ' + 'Did you forget to wrap your parameter in an array?', command, specValue) : invariant(false) : undefined;\n}\n\nfunction update(value, spec) {\n !(typeof spec === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'update(): You provided a key path to update() that did not contain one ' + 'of %s. Did you forget to include {%s: ...}?', ALL_COMMANDS_LIST.join(', '), COMMAND_SET) : invariant(false) : undefined;\n\n if (hasOwnProperty.call(spec, COMMAND_SET)) {\n !(Object.keys(spec).length === 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot have more than one key in an object with %s', COMMAND_SET) : invariant(false) : undefined;\n\n return spec[COMMAND_SET];\n }\n\n var nextValue = shallowCopy(value);\n\n if (hasOwnProperty.call(spec, COMMAND_MERGE)) {\n var mergeObj = spec[COMMAND_MERGE];\n !(mergeObj && typeof mergeObj === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'update(): %s expects a spec of type \\'object\\'; got %s', COMMAND_MERGE, mergeObj) : invariant(false) : undefined;\n !(nextValue && typeof nextValue === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'update(): %s expects a target of type \\'object\\'; got %s', COMMAND_MERGE, nextValue) : invariant(false) : undefined;\n assign(nextValue, spec[COMMAND_MERGE]);\n }\n\n if (hasOwnProperty.call(spec, COMMAND_PUSH)) {\n invariantArrayCase(value, spec, COMMAND_PUSH);\n spec[COMMAND_PUSH].forEach(function (item) {\n nextValue.push(item);\n });\n }\n\n if (hasOwnProperty.call(spec, COMMAND_UNSHIFT)) {\n invariantArrayCase(value, spec, COMMAND_UNSHIFT);\n spec[COMMAND_UNSHIFT].forEach(function (item) {\n nextValue.unshift(item);\n });\n }\n\n if (hasOwnProperty.call(spec, COMMAND_SPLICE)) {\n !Array.isArray(value) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected %s target to be an array; got %s', COMMAND_SPLICE, value) : invariant(false) : undefined;\n !Array.isArray(spec[COMMAND_SPLICE]) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'update(): expected spec of %s to be an array of arrays; got %s. ' + 'Did you forget to wrap your parameters in an array?', COMMAND_SPLICE, spec[COMMAND_SPLICE]) : invariant(false) : undefined;\n spec[COMMAND_SPLICE].forEach(function (args) {\n !Array.isArray(args) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'update(): expected spec of %s to be an array of arrays; got %s. ' + 'Did you forget to wrap your parameters in an array?', COMMAND_SPLICE, spec[COMMAND_SPLICE]) : invariant(false) : undefined;\n nextValue.splice.apply(nextValue, args);\n });\n }\n\n if (hasOwnProperty.call(spec, COMMAND_APPLY)) {\n !(typeof spec[COMMAND_APPLY] === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'update(): expected spec of %s to be a function; got %s.', COMMAND_APPLY, spec[COMMAND_APPLY]) : invariant(false) : undefined;\n nextValue = spec[COMMAND_APPLY](nextValue);\n }\n\n for (var k in spec) {\n if (!(ALL_COMMANDS_SET.hasOwnProperty(k) && ALL_COMMANDS_SET[k])) {\n nextValue[k] = update(value[k], spec[k]);\n }\n }\n\n return nextValue;\n}\n\nmodule.exports = update;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(18)))\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L3JlYWN0L2xpYi91cGRhdGUuanM/ZTdlMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7O0FBRXhCO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUEsMEJBQTBCLGNBQWM7QUFDeEMsNkJBQTZCLGlCQUFpQjtBQUM5Qyw0QkFBNEIsZ0JBQWdCO0FBQzVDLHlCQUF5QixhQUFhO0FBQ3RDLDJCQUEyQixlQUFlO0FBQzFDLDJCQUEyQixlQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBLG1JQUFtSTtBQUNuSTtBQUNBLHFJQUFxSTtBQUNySTs7QUFFQTtBQUNBLHdNQUF3TSxRQUFROztBQUVoTjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDJKQUEySjtBQUMzSiwrSkFBK0o7QUFDL0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLHdIQUF3SDtBQUN4SCw0SkFBNEo7QUFDNUo7QUFDQSw4SUFBOEk7QUFDOUk7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSw0SkFBNEo7QUFDNUo7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsd0IiLCJmaWxlIjoiMTcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgdXBkYXRlXG4gKi9cblxuLyogZ2xvYmFsIGhhc093blByb3BlcnR5OnRydWUgKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZSgnLi9PYmplY3QuYXNzaWduJyk7XG52YXIga2V5T2YgPSByZXF1aXJlKCdmYmpzL2xpYi9rZXlPZicpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2ludmFyaWFudCcpO1xudmFyIGhhc093blByb3BlcnR5ID0gKHt9KS5oYXNPd25Qcm9wZXJ0eTtcblxuZnVuY3Rpb24gc2hhbGxvd0NvcHkoeCkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh4KSkge1xuICAgIHJldHVybiB4LmNvbmNhdCgpO1xuICB9IGVsc2UgaWYgKHggJiYgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGFzc2lnbihuZXcgeC5jb25zdHJ1Y3RvcigpLCB4KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geDtcbiAgfVxufVxuXG52YXIgQ09NTUFORF9QVVNIID0ga2V5T2YoeyAkcHVzaDogbnVsbCB9KTtcbnZhciBDT01NQU5EX1VOU0hJRlQgPSBrZXlPZih7ICR1bnNoaWZ0OiBudWxsIH0pO1xudmFyIENPTU1BTkRfU1BMSUNFID0ga2V5T2YoeyAkc3BsaWNlOiBudWxsIH0pO1xudmFyIENPTU1BTkRfU0VUID0ga2V5T2YoeyAkc2V0OiBudWxsIH0pO1xudmFyIENPTU1BTkRfTUVSR0UgPSBrZXlPZih7ICRtZXJnZTogbnVsbCB9KTtcbnZhciBDT01NQU5EX0FQUExZID0ga2V5T2YoeyAkYXBwbHk6IG51bGwgfSk7XG5cbnZhciBBTExfQ09NTUFORFNfTElTVCA9IFtDT01NQU5EX1BVU0gsIENPTU1BTkRfVU5TSElGVCwgQ09NTUFORF9TUExJQ0UsIENPTU1BTkRfU0VULCBDT01NQU5EX01FUkdFLCBDT01NQU5EX0FQUExZXTtcblxudmFyIEFMTF9DT01NQU5EU19TRVQgPSB7fTtcblxuQUxMX0NPTU1BTkRTX0xJU1QuZm9yRWFjaChmdW5jdGlvbiAoY29tbWFuZCkge1xuICBBTExfQ09NTUFORFNfU0VUW2NvbW1hbmRdID0gdHJ1ZTtcbn0pO1xuXG5mdW5jdGlvbiBpbnZhcmlhbnRBcnJheUNhc2UodmFsdWUsIHNwZWMsIGNvbW1hbmQpIHtcbiAgIUFycmF5LmlzQXJyYXkodmFsdWUpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ3VwZGF0ZSgpOiBleHBlY3RlZCB0YXJnZXQgb2YgJXMgdG8gYmUgYW4gYXJyYXk7IGdvdCAlcy4nLCBjb21tYW5kLCB2YWx1ZSkgOiBpbnZhcmlhbnQoZmFsc2UpIDogdW5kZWZpbmVkO1xuICB2YXIgc3BlY1ZhbHVlID0gc3BlY1tjb21tYW5kXTtcbiAgIUFycmF5LmlzQXJyYXkoc3BlY1ZhbHVlKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICd1cGRhdGUoKTogZXhwZWN0ZWQgc3BlYyBvZiAlcyB0byBiZSBhbiBhcnJheTsgZ290ICVzLiAnICsgJ0RpZCB5b3UgZm9yZ2V0IHRvIHdyYXAgeW91ciBwYXJhbWV0ZXIgaW4gYW4gYXJyYXk/JywgY29tbWFuZCwgc3BlY1ZhbHVlKSA6IGludmFyaWFudChmYWxzZSkgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZSh2YWx1ZSwgc3BlYykge1xuICAhKHR5cGVvZiBzcGVjID09PSAnb2JqZWN0JykgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAndXBkYXRlKCk6IFlvdSBwcm92aWRlZCBhIGtleSBwYXRoIHRvIHVwZGF0ZSgpIHRoYXQgZGlkIG5vdCBjb250YWluIG9uZSAnICsgJ29mICVzLiBEaWQgeW91IGZvcmdldCB0byBpbmNsdWRlIHslczogLi4ufT8nLCBBTExfQ09NTUFORFNfTElTVC5qb2luKCcsICcpLCBDT01NQU5EX1NFVCkgOiBpbnZhcmlhbnQoZmFsc2UpIDogdW5kZWZpbmVkO1xuXG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHNwZWMsIENPTU1BTkRfU0VUKSkge1xuICAgICEoT2JqZWN0LmtleXMoc3BlYykubGVuZ3RoID09PSAxKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdDYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIGtleSBpbiBhbiBvYmplY3Qgd2l0aCAlcycsIENPTU1BTkRfU0VUKSA6IGludmFyaWFudChmYWxzZSkgOiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4gc3BlY1tDT01NQU5EX1NFVF07XG4gIH1cblxuICB2YXIgbmV4dFZhbHVlID0gc2hhbGxvd0NvcHkodmFsdWUpO1xuXG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHNwZWMsIENPTU1BTkRfTUVSR0UpKSB7XG4gICAgdmFyIG1lcmdlT2JqID0gc3BlY1tDT01NQU5EX01FUkdFXTtcbiAgICAhKG1lcmdlT2JqICYmIHR5cGVvZiBtZXJnZU9iaiA9PT0gJ29iamVjdCcpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ3VwZGF0ZSgpOiAlcyBleHBlY3RzIGEgc3BlYyBvZiB0eXBlIFxcJ29iamVjdFxcJzsgZ290ICVzJywgQ09NTUFORF9NRVJHRSwgbWVyZ2VPYmopIDogaW52YXJpYW50KGZhbHNlKSA6IHVuZGVmaW5lZDtcbiAgICAhKG5leHRWYWx1ZSAmJiB0eXBlb2YgbmV4dFZhbHVlID09PSAnb2JqZWN0JykgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAndXBkYXRlKCk6ICVzIGV4cGVjdHMgYSB0YXJnZXQgb2YgdHlwZSBcXCdvYmplY3RcXCc7IGdvdCAlcycsIENPTU1BTkRfTUVSR0UsIG5leHRWYWx1ZSkgOiBpbnZhcmlhbnQoZmFsc2UpIDogdW5kZWZpbmVkO1xuICAgIGFzc2lnbihuZXh0VmFsdWUsIHNwZWNbQ09NTUFORF9NRVJHRV0pO1xuICB9XG5cbiAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc3BlYywgQ09NTUFORF9QVVNIKSkge1xuICAgIGludmFyaWFudEFycmF5Q2FzZSh2YWx1ZSwgc3BlYywgQ09NTUFORF9QVVNIKTtcbiAgICBzcGVjW0NPTU1BTkRfUFVTSF0uZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgbmV4dFZhbHVlLnB1c2goaXRlbSk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChzcGVjLCBDT01NQU5EX1VOU0hJRlQpKSB7XG4gICAgaW52YXJpYW50QXJyYXlDYXNlKHZhbHVlLCBzcGVjLCBDT01NQU5EX1VOU0hJRlQpO1xuICAgIHNwZWNbQ09NTUFORF9VTlNISUZUXS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICBuZXh0VmFsdWUudW5zaGlmdChpdGVtKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHNwZWMsIENPTU1BTkRfU1BMSUNFKSkge1xuICAgICFBcnJheS5pc0FycmF5KHZhbHVlKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdFeHBlY3RlZCAlcyB0YXJnZXQgdG8gYmUgYW4gYXJyYXk7IGdvdCAlcycsIENPTU1BTkRfU1BMSUNFLCB2YWx1ZSkgOiBpbnZhcmlhbnQoZmFsc2UpIDogdW5kZWZpbmVkO1xuICAgICFBcnJheS5pc0FycmF5KHNwZWNbQ09NTUFORF9TUExJQ0VdKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICd1cGRhdGUoKTogZXhwZWN0ZWQgc3BlYyBvZiAlcyB0byBiZSBhbiBhcnJheSBvZiBhcnJheXM7IGdvdCAlcy4gJyArICdEaWQgeW91IGZvcmdldCB0byB3cmFwIHlvdXIgcGFyYW1ldGVycyBpbiBhbiBhcnJheT8nLCBDT01NQU5EX1NQTElDRSwgc3BlY1tDT01NQU5EX1NQTElDRV0pIDogaW52YXJpYW50KGZhbHNlKSA6IHVuZGVmaW5lZDtcbiAgICBzcGVjW0NPTU1BTkRfU1BMSUNFXS5mb3JFYWNoKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAhQXJyYXkuaXNBcnJheShhcmdzKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICd1cGRhdGUoKTogZXhwZWN0ZWQgc3BlYyBvZiAlcyB0byBiZSBhbiBhcnJheSBvZiBhcnJheXM7IGdvdCAlcy4gJyArICdEaWQgeW91IGZvcmdldCB0byB3cmFwIHlvdXIgcGFyYW1ldGVycyBpbiBhbiBhcnJheT8nLCBDT01NQU5EX1NQTElDRSwgc3BlY1tDT01NQU5EX1NQTElDRV0pIDogaW52YXJpYW50KGZhbHNlKSA6IHVuZGVmaW5lZDtcbiAgICAgIG5leHRWYWx1ZS5zcGxpY2UuYXBwbHkobmV4dFZhbHVlLCBhcmdzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHNwZWMsIENPTU1BTkRfQVBQTFkpKSB7XG4gICAgISh0eXBlb2Ygc3BlY1tDT01NQU5EX0FQUExZXSA9PT0gJ2Z1bmN0aW9uJykgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAndXBkYXRlKCk6IGV4cGVjdGVkIHNwZWMgb2YgJXMgdG8gYmUgYSBmdW5jdGlvbjsgZ290ICVzLicsIENPTU1BTkRfQVBQTFksIHNwZWNbQ09NTUFORF9BUFBMWV0pIDogaW52YXJpYW50KGZhbHNlKSA6IHVuZGVmaW5lZDtcbiAgICBuZXh0VmFsdWUgPSBzcGVjW0NPTU1BTkRfQVBQTFldKG5leHRWYWx1ZSk7XG4gIH1cblxuICBmb3IgKHZhciBrIGluIHNwZWMpIHtcbiAgICBpZiAoIShBTExfQ09NTUFORFNfU0VULmhhc093blByb3BlcnR5KGspICYmIEFMTF9DT01NQU5EU19TRVRba10pKSB7XG4gICAgICBuZXh0VmFsdWVba10gPSB1cGRhdGUodmFsdWVba10sIHNwZWNba10pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXh0VmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdXBkYXRlO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L3JlYWN0L2xpYi91cGRhdGUuanNcbiAqKiBtb2R1bGUgaWQgPSAxN1xuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports){eval("// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L3Byb2Nlc3MvYnJvd3Nlci5qcz84MmU0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsc0JBQXNCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLFVBQVUiLCJmaWxlIjoiMTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgc2V0VGltZW91dChkcmFpblF1ZXVlLCAwKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcblxuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L3Byb2Nlc3MvYnJvd3Nlci5qc1xuICoqIG1vZHVsZSBpZCA9IDE4XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports){eval("/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule Object.assign\n */\n\n// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign\n\n'use strict';\n\nfunction assign(target, sources) {\n if (target == null) {\n throw new TypeError('Object.assign target cannot be null or undefined');\n }\n\n var to = Object(target);\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n\n for (var nextIndex = 1; nextIndex < arguments.length; nextIndex++) {\n var nextSource = arguments[nextIndex];\n if (nextSource == null) {\n continue;\n }\n\n var from = Object(nextSource);\n\n // We don't currently support accessors nor proxies. Therefore this\n // copy cannot throw. If we ever supported this then we must handle\n // exceptions and side-effects. We don't support symbols so they won't\n // be transferred.\n\n for (var key in from) {\n if (hasOwnProperty.call(from, key)) {\n to[key] = from[key];\n }\n }\n }\n\n return to;\n}\n\nmodule.exports = assign;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L3JlYWN0L2xpYi9PYmplY3QuYXNzaWduLmpzPzRhNTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx5QkFBeUIsOEJBQThCO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6IjE5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIE9iamVjdC5hc3NpZ25cbiAqL1xuXG4vLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtb2JqZWN0LmFzc2lnblxuXG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZXMpIHtcbiAgaWYgKHRhcmdldCA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiB0YXJnZXQgY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkJyk7XG4gIH1cblxuICB2YXIgdG8gPSBPYmplY3QodGFyZ2V0KTtcbiAgdmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuICBmb3IgKHZhciBuZXh0SW5kZXggPSAxOyBuZXh0SW5kZXggPCBhcmd1bWVudHMubGVuZ3RoOyBuZXh0SW5kZXgrKykge1xuICAgIHZhciBuZXh0U291cmNlID0gYXJndW1lbnRzW25leHRJbmRleF07XG4gICAgaWYgKG5leHRTb3VyY2UgPT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIGZyb20gPSBPYmplY3QobmV4dFNvdXJjZSk7XG5cbiAgICAvLyBXZSBkb24ndCBjdXJyZW50bHkgc3VwcG9ydCBhY2Nlc3NvcnMgbm9yIHByb3hpZXMuIFRoZXJlZm9yZSB0aGlzXG4gICAgLy8gY29weSBjYW5ub3QgdGhyb3cuIElmIHdlIGV2ZXIgc3VwcG9ydGVkIHRoaXMgdGhlbiB3ZSBtdXN0IGhhbmRsZVxuICAgIC8vIGV4Y2VwdGlvbnMgYW5kIHNpZGUtZWZmZWN0cy4gV2UgZG9uJ3Qgc3VwcG9ydCBzeW1ib2xzIHNvIHRoZXkgd29uJ3RcbiAgICAvLyBiZSB0cmFuc2ZlcnJlZC5cblxuICAgIGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XG4gICAgICAgIHRvW2tleV0gPSBmcm9tW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2lnbjtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vfi9yZWFjdC9saWIvT2JqZWN0LmFzc2lnbi5qc1xuICoqIG1vZHVsZSBpZCA9IDE5XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports){eval("/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule keyOf\n */\n\n/**\n * Allows extraction of a minified key. Let's the build system minify keys\n * without losing the ability to dynamically use key strings as values\n * themselves. Pass in an object with a single key/val pair and it will return\n * you the string key of that single record. Suppose you want to grab the\n * value for a key 'className' inside of an object. Key/val minification may\n * have aliased that key to be 'xa12'. keyOf({className: null}) will return\n * 'xa12' in that case. Resolve keys you want to use once at startup time, then\n * reuse those resolutions.\n */\n\"use strict\";\n\nvar keyOf = function (oneKeyObj) {\n var key;\n for (key in oneKeyObj) {\n if (!oneKeyObj.hasOwnProperty(key)) {\n continue;\n }\n return key;\n }\n return null;\n};\n\nmodule.exports = keyOf;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2ZianMvbGliL2tleU9mLmpzPzNhZDIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLGdCQUFnQjtBQUM5RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIyMC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBrZXlPZlxuICovXG5cbi8qKlxuICogQWxsb3dzIGV4dHJhY3Rpb24gb2YgYSBtaW5pZmllZCBrZXkuIExldCdzIHRoZSBidWlsZCBzeXN0ZW0gbWluaWZ5IGtleXNcbiAqIHdpdGhvdXQgbG9zaW5nIHRoZSBhYmlsaXR5IHRvIGR5bmFtaWNhbGx5IHVzZSBrZXkgc3RyaW5ncyBhcyB2YWx1ZXNcbiAqIHRoZW1zZWx2ZXMuIFBhc3MgaW4gYW4gb2JqZWN0IHdpdGggYSBzaW5nbGUga2V5L3ZhbCBwYWlyIGFuZCBpdCB3aWxsIHJldHVyblxuICogeW91IHRoZSBzdHJpbmcga2V5IG9mIHRoYXQgc2luZ2xlIHJlY29yZC4gU3VwcG9zZSB5b3Ugd2FudCB0byBncmFiIHRoZVxuICogdmFsdWUgZm9yIGEga2V5ICdjbGFzc05hbWUnIGluc2lkZSBvZiBhbiBvYmplY3QuIEtleS92YWwgbWluaWZpY2F0aW9uIG1heVxuICogaGF2ZSBhbGlhc2VkIHRoYXQga2V5IHRvIGJlICd4YTEyJy4ga2V5T2Yoe2NsYXNzTmFtZTogbnVsbH0pIHdpbGwgcmV0dXJuXG4gKiAneGExMicgaW4gdGhhdCBjYXNlLiBSZXNvbHZlIGtleXMgeW91IHdhbnQgdG8gdXNlIG9uY2UgYXQgc3RhcnR1cCB0aW1lLCB0aGVuXG4gKiByZXVzZSB0aG9zZSByZXNvbHV0aW9ucy5cbiAqL1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBrZXlPZiA9IGZ1bmN0aW9uIChvbmVLZXlPYmopIHtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gb25lS2V5T2JqKSB7XG4gICAgaWYgKCFvbmVLZXlPYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGtleU9mO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L2ZianMvbGliL2tleU9mLmpzXG4gKiogbW9kdWxlIGlkID0gMjBcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports,__webpack_require__){eval("/* WEBPACK VAR INJECTION */(function(process) {/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule invariant\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nfunction invariant(condition, format, a, b, c, d, e, f) {\n if (process.env.NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n}\n\nmodule.exports = invariant;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(18)))\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2ZianMvbGliL2ludmFyaWFudC5qcz80NTk5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQ7QUFDckQsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUEsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTs7QUFFQSwyQiIsImZpbGUiOiIyMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBpbnZhcmlhbnRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVXNlIGludmFyaWFudCgpIHRvIGFzc2VydCBzdGF0ZSB3aGljaCB5b3VyIHByb2dyYW0gYXNzdW1lcyB0byBiZSB0cnVlLlxuICpcbiAqIFByb3ZpZGUgc3ByaW50Zi1zdHlsZSBmb3JtYXQgKG9ubHkgJXMgaXMgc3VwcG9ydGVkKSBhbmQgYXJndW1lbnRzXG4gKiB0byBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgYnJva2UgYW5kIHdoYXQgeW91IHdlcmVcbiAqIGV4cGVjdGluZy5cbiAqXG4gKiBUaGUgaW52YXJpYW50IG1lc3NhZ2Ugd2lsbCBiZSBzdHJpcHBlZCBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGludmFyaWFudFxuICogd2lsbCByZW1haW4gdG8gZW5zdXJlIGxvZ2ljIGRvZXMgbm90IGRpZmZlciBpbiBwcm9kdWN0aW9uLlxuICovXG5cbmZ1bmN0aW9uIGludmFyaWFudChjb25kaXRpb24sIGZvcm1hdCwgYSwgYiwgYywgZCwgZSwgZikge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhcmlhbnQgcmVxdWlyZXMgYW4gZXJyb3IgbWVzc2FnZSBhcmd1bWVudCcpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29uZGl0aW9uKSB7XG4gICAgdmFyIGVycm9yO1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoJ01pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50ICcgKyAnZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGFyZ3MgPSBbYSwgYiwgYywgZCwgZSwgZl07XG4gICAgICB2YXIgYXJnSW5kZXggPSAwO1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107XG4gICAgICB9KSk7XG4gICAgICBlcnJvci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgIH1cblxuICAgIGVycm9yLmZyYW1lc1RvUG9wID0gMTsgLy8gd2UgZG9uJ3QgY2FyZSBhYm91dCBpbnZhcmlhbnQncyBvd24gZnJhbWVcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGludmFyaWFudDtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vfi9mYmpzL2xpYi9pbnZhcmlhbnQuanNcbiAqKiBtb2R1bGUgaWQgPSAyMVxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports,__webpack_require__){eval('"use strict";\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.jQuery = exports.animation = undefined;\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactAddonsUpdate = __webpack_require__(16);\n\nvar _reactAddonsUpdate2 = _interopRequireDefault(_reactAddonsUpdate);\n\nvar _classnames = __webpack_require__(6);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _animationMixin = __webpack_require__(23);\n\nvar _animationMixin2 = _interopRequireDefault(_animationMixin);\n\nvar _jQueryMixin = __webpack_require__(27);\n\nvar _jQueryMixin2 = _interopRequireDefault(_jQueryMixin);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction noop() {}\n\nvar ToastMessageSpec = {\n displayName: "ToastMessage",\n\n getDefaultProps: function getDefaultProps() {\n var iconClassNames = {\n error: "toast-error",\n info: "toast-info",\n success: "toast-success",\n warning: "toast-warning"\n };\n\n return {\n className: "toast",\n iconClassNames: iconClassNames,\n titleClassName: "toast-title",\n messageClassName: "toast-message",\n tapToDismiss: true,\n closeButton: false\n };\n },\n handleOnClick: function handleOnClick(event) {\n this.props.handleOnClick(event);\n if (this.props.tapToDismiss) {\n this.hideToast(true);\n }\n },\n _handle_close_button_click: function _handle_close_button_click(event) {\n event.stopPropagation();\n this.hideToast(true);\n },\n _handle_remove: function _handle_remove() {\n this.props.handleRemove(this.props.toastId);\n },\n _render_close_button: function _render_close_button() {\n return this.props.closeButton ? _react2.default.createElement("button", {\n className: "toast-close-button", role: "button",\n onClick: this._handle_close_button_click,\n dangerouslySetInnerHTML: { __html: "×" }\n }) : false;\n },\n _render_title_element: function _render_title_element() {\n return this.props.title ? _react2.default.createElement(\n "div",\n { className: this.props.titleClassName },\n this.props.title\n ) : false;\n },\n _render_message_element: function _render_message_element() {\n return this.props.message ? _react2.default.createElement(\n "div",\n { className: this.props.messageClassName },\n this.props.message\n ) : false;\n },\n render: function render() {\n var iconClassName = this.props.iconClassName || this.props.iconClassNames[this.props.type];\n\n return _react2.default.createElement(\n "div",\n {\n className: (0, _classnames2.default)(this.props.className, iconClassName),\n style: this.props.style,\n onClick: this.handleOnClick,\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave\n },\n this._render_close_button(),\n this._render_title_element(),\n this._render_message_element()\n );\n }\n};\n\nvar animation = exports.animation = _react2.default.createClass((0, _reactAddonsUpdate2.default)(ToastMessageSpec, {\n displayName: { $set: "ToastMessage.animation" },\n mixins: { $set: [_animationMixin2.default] }\n}));\n\nvar jQuery = exports.jQuery = _react2.default.createClass((0, _reactAddonsUpdate2.default)(ToastMessageSpec, {\n displayName: { $set: "ToastMessage.jQuery" },\n mixins: { $set: [_jQueryMixin2.default] }\n}));\n\n/*\n * assign default noop functions\n */\nToastMessageSpec.handleMouseEnter = noop;\nToastMessageSpec.handleMouseLeave = noop;\nToastMessageSpec.hideToast = noop;\n\nvar ToastMessage = _react2.default.createClass(ToastMessageSpec);\n\nToastMessage.animation = animation;\nToastMessage.jQuery = jQuery;\n\nexports.default = ToastMessage;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXRvYXN0ci9saWIvVG9hc3RNZXNzYWdlL2luZGV4LmpzP2NkODQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxzQ0FBc0MsdUNBQXVDLGdCQUFnQjs7QUFFN0Y7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsaUJBQWlCO0FBQ2pELEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsT0FBTyx1Q0FBdUM7QUFDOUM7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxPQUFPLHlDQUF5QztBQUNoRDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQkFBZ0IsaUNBQWlDO0FBQ2pELFdBQVc7QUFDWCxDQUFDOztBQUVEO0FBQ0EsZ0JBQWdCLDhCQUE4QjtBQUM5QyxXQUFXO0FBQ1gsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIyMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5qUXVlcnkgPSBleHBvcnRzLmFuaW1hdGlvbiA9IHVuZGVmaW5lZDtcblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcblxudmFyIF9yZWFjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdCk7XG5cbnZhciBfcmVhY3RBZGRvbnNVcGRhdGUgPSByZXF1aXJlKFwicmVhY3QtYWRkb25zLXVwZGF0ZVwiKTtcblxudmFyIF9yZWFjdEFkZG9uc1VwZGF0ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdEFkZG9uc1VwZGF0ZSk7XG5cbnZhciBfY2xhc3NuYW1lcyA9IHJlcXVpcmUoXCJjbGFzc25hbWVzXCIpO1xuXG52YXIgX2NsYXNzbmFtZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NuYW1lcyk7XG5cbnZhciBfYW5pbWF0aW9uTWl4aW4gPSByZXF1aXJlKFwiLi9hbmltYXRpb25NaXhpblwiKTtcblxudmFyIF9hbmltYXRpb25NaXhpbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hbmltYXRpb25NaXhpbik7XG5cbnZhciBfalF1ZXJ5TWl4aW4gPSByZXF1aXJlKFwiLi9qUXVlcnlNaXhpblwiKTtcblxudmFyIF9qUXVlcnlNaXhpbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9qUXVlcnlNaXhpbik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG52YXIgVG9hc3RNZXNzYWdlU3BlYyA9IHtcbiAgZGlzcGxheU5hbWU6IFwiVG9hc3RNZXNzYWdlXCIsXG5cbiAgZ2V0RGVmYXVsdFByb3BzOiBmdW5jdGlvbiBnZXREZWZhdWx0UHJvcHMoKSB7XG4gICAgdmFyIGljb25DbGFzc05hbWVzID0ge1xuICAgICAgZXJyb3I6IFwidG9hc3QtZXJyb3JcIixcbiAgICAgIGluZm86IFwidG9hc3QtaW5mb1wiLFxuICAgICAgc3VjY2VzczogXCJ0b2FzdC1zdWNjZXNzXCIsXG4gICAgICB3YXJuaW5nOiBcInRvYXN0LXdhcm5pbmdcIlxuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgY2xhc3NOYW1lOiBcInRvYXN0XCIsXG4gICAgICBpY29uQ2xhc3NOYW1lczogaWNvbkNsYXNzTmFtZXMsXG4gICAgICB0aXRsZUNsYXNzTmFtZTogXCJ0b2FzdC10aXRsZVwiLFxuICAgICAgbWVzc2FnZUNsYXNzTmFtZTogXCJ0b2FzdC1tZXNzYWdlXCIsXG4gICAgICB0YXBUb0Rpc21pc3M6IHRydWUsXG4gICAgICBjbG9zZUJ1dHRvbjogZmFsc2VcbiAgICB9O1xuICB9LFxuICBoYW5kbGVPbkNsaWNrOiBmdW5jdGlvbiBoYW5kbGVPbkNsaWNrKGV2ZW50KSB7XG4gICAgdGhpcy5wcm9wcy5oYW5kbGVPbkNsaWNrKGV2ZW50KTtcbiAgICBpZiAodGhpcy5wcm9wcy50YXBUb0Rpc21pc3MpIHtcbiAgICAgIHRoaXMuaGlkZVRvYXN0KHRydWUpO1xuICAgIH1cbiAgfSxcbiAgX2hhbmRsZV9jbG9zZV9idXR0b25fY2xpY2s6IGZ1bmN0aW9uIF9oYW5kbGVfY2xvc2VfYnV0dG9uX2NsaWNrKGV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5oaWRlVG9hc3QodHJ1ZSk7XG4gIH0sXG4gIF9oYW5kbGVfcmVtb3ZlOiBmdW5jdGlvbiBfaGFuZGxlX3JlbW92ZSgpIHtcbiAgICB0aGlzLnByb3BzLmhhbmRsZVJlbW92ZSh0aGlzLnByb3BzLnRvYXN0SWQpO1xuICB9LFxuICBfcmVuZGVyX2Nsb3NlX2J1dHRvbjogZnVuY3Rpb24gX3JlbmRlcl9jbG9zZV9idXR0b24oKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY2xvc2VCdXR0b24gPyBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwidG9hc3QtY2xvc2UtYnV0dG9uXCIsIHJvbGU6IFwiYnV0dG9uXCIsXG4gICAgICBvbkNsaWNrOiB0aGlzLl9oYW5kbGVfY2xvc2VfYnV0dG9uX2NsaWNrLFxuICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHsgX19odG1sOiBcIiZ0aW1lcztcIiB9XG4gICAgfSkgOiBmYWxzZTtcbiAgfSxcbiAgX3JlbmRlcl90aXRsZV9lbGVtZW50OiBmdW5jdGlvbiBfcmVuZGVyX3RpdGxlX2VsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMudGl0bGUgPyBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7IGNsYXNzTmFtZTogdGhpcy5wcm9wcy50aXRsZUNsYXNzTmFtZSB9LFxuICAgICAgdGhpcy5wcm9wcy50aXRsZVxuICAgICkgOiBmYWxzZTtcbiAgfSxcbiAgX3JlbmRlcl9tZXNzYWdlX2VsZW1lbnQ6IGZ1bmN0aW9uIF9yZW5kZXJfbWVzc2FnZV9lbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1lc3NhZ2UgPyBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7IGNsYXNzTmFtZTogdGhpcy5wcm9wcy5tZXNzYWdlQ2xhc3NOYW1lIH0sXG4gICAgICB0aGlzLnByb3BzLm1lc3NhZ2VcbiAgICApIDogZmFsc2U7XG4gIH0sXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBpY29uQ2xhc3NOYW1lID0gdGhpcy5wcm9wcy5pY29uQ2xhc3NOYW1lIHx8IHRoaXMucHJvcHMuaWNvbkNsYXNzTmFtZXNbdGhpcy5wcm9wcy50eXBlXTtcblxuICAgIHJldHVybiBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogKDAsIF9jbGFzc25hbWVzMi5kZWZhdWx0KSh0aGlzLnByb3BzLmNsYXNzTmFtZSwgaWNvbkNsYXNzTmFtZSksXG4gICAgICAgIHN0eWxlOiB0aGlzLnByb3BzLnN0eWxlLFxuICAgICAgICBvbkNsaWNrOiB0aGlzLmhhbmRsZU9uQ2xpY2ssXG4gICAgICAgIG9uTW91c2VFbnRlcjogdGhpcy5oYW5kbGVNb3VzZUVudGVyLFxuICAgICAgICBvbk1vdXNlTGVhdmU6IHRoaXMuaGFuZGxlTW91c2VMZWF2ZVxuICAgICAgfSxcbiAgICAgIHRoaXMuX3JlbmRlcl9jbG9zZV9idXR0b24oKSxcbiAgICAgIHRoaXMuX3JlbmRlcl90aXRsZV9lbGVtZW50KCksXG4gICAgICB0aGlzLl9yZW5kZXJfbWVzc2FnZV9lbGVtZW50KClcbiAgICApO1xuICB9XG59O1xuXG52YXIgYW5pbWF0aW9uID0gZXhwb3J0cy5hbmltYXRpb24gPSBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlQ2xhc3MoKDAsIF9yZWFjdEFkZG9uc1VwZGF0ZTIuZGVmYXVsdCkoVG9hc3RNZXNzYWdlU3BlYywge1xuICBkaXNwbGF5TmFtZTogeyAkc2V0OiBcIlRvYXN0TWVzc2FnZS5hbmltYXRpb25cIiB9LFxuICBtaXhpbnM6IHsgJHNldDogW19hbmltYXRpb25NaXhpbjIuZGVmYXVsdF0gfVxufSkpO1xuXG52YXIgalF1ZXJ5ID0gZXhwb3J0cy5qUXVlcnkgPSBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlQ2xhc3MoKDAsIF9yZWFjdEFkZG9uc1VwZGF0ZTIuZGVmYXVsdCkoVG9hc3RNZXNzYWdlU3BlYywge1xuICBkaXNwbGF5TmFtZTogeyAkc2V0OiBcIlRvYXN0TWVzc2FnZS5qUXVlcnlcIiB9LFxuICBtaXhpbnM6IHsgJHNldDogW19qUXVlcnlNaXhpbjIuZGVmYXVsdF0gfVxufSkpO1xuXG4vKlxuICogYXNzaWduIGRlZmF1bHQgbm9vcCBmdW5jdGlvbnNcbiAqL1xuVG9hc3RNZXNzYWdlU3BlYy5oYW5kbGVNb3VzZUVudGVyID0gbm9vcDtcblRvYXN0TWVzc2FnZVNwZWMuaGFuZGxlTW91c2VMZWF2ZSA9IG5vb3A7XG5Ub2FzdE1lc3NhZ2VTcGVjLmhpZGVUb2FzdCA9IG5vb3A7XG5cbnZhciBUb2FzdE1lc3NhZ2UgPSBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlQ2xhc3MoVG9hc3RNZXNzYWdlU3BlYyk7XG5cblRvYXN0TWVzc2FnZS5hbmltYXRpb24gPSBhbmltYXRpb247XG5Ub2FzdE1lc3NhZ2UualF1ZXJ5ID0galF1ZXJ5O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBUb2FzdE1lc3NhZ2U7XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34vcmVhY3QtdG9hc3RyL2xpYi9Ub2FzdE1lc3NhZ2UvaW5kZXguanNcbiAqKiBtb2R1bGUgaWQgPSAyMlxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ=='); +},function(module,exports,__webpack_require__){eval('"use strict";\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _ReactTransitionEvents = __webpack_require__(24);\n\nvar _ReactTransitionEvents2 = _interopRequireDefault(_ReactTransitionEvents);\n\nvar _reactDom = __webpack_require__(5);\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _elementClass = __webpack_require__(26);\n\nvar _elementClass2 = _interopRequireDefault(_elementClass);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar TICK = 17;\nvar toString = Object.prototype.toString;\nexports.default = {\n getDefaultProps: function getDefaultProps() {\n return {\n transition: null, // some examples defined in index.scss (scale, fadeInOut, rotate)\n showAnimation: "animated bounceIn", // or other animations from animate.css\n hideAnimation: "animated bounceOut",\n timeOut: 5000,\n extendedTimeOut: 1000\n };\n },\n componentWillMount: function componentWillMount() {\n this.classNameQueue = [];\n this.isHiding = false;\n this.intervalId = null;\n },\n componentDidMount: function componentDidMount() {\n var _this = this;\n\n this._is_mounted = true;\n this._show();\n var node = _reactDom2.default.findDOMNode(this);\n\n var onHideComplete = function onHideComplete() {\n if (_this.isHiding) {\n _this._set_is_hiding(false);\n _ReactTransitionEvents2.default.removeEndEventListener(node, onHideComplete);\n _this._handle_remove();\n }\n };\n _ReactTransitionEvents2.default.addEndEventListener(node, onHideComplete);\n\n if (this.props.timeOut > 0) {\n this._set_interval_id(setTimeout(this.hideToast, this.props.timeOut));\n }\n },\n componentWillUnmount: function componentWillUnmount() {\n this._is_mounted = false;\n if (this.intervalId) {\n clearTimeout(this.intervalId);\n }\n },\n _set_transition: function _set_transition(hide) {\n var animationType = hide ? "leave" : "enter";\n var node = _reactDom2.default.findDOMNode(this);\n var className = this.props.transition + "-" + animationType;\n var activeClassName = className + "-active";\n\n var endListener = function endListener(e) {\n if (e && e.target !== node) {\n return;\n }\n\n var classList = (0, _elementClass2.default)(node);\n classList.remove(className);\n classList.remove(activeClassName);\n\n _ReactTransitionEvents2.default.removeEndEventListener(node, endListener);\n };\n\n _ReactTransitionEvents2.default.addEndEventListener(node, endListener);\n\n (0, _elementClass2.default)(node).add(className);\n\n // Need to do this to actually trigger a transition.\n this._queue_class(activeClassName);\n },\n _clear_transition: function _clear_transition(hide) {\n var node = _reactDom2.default.findDOMNode(this);\n var animationType = hide ? "leave" : "enter";\n var className = this.props.transition + "-" + animationType;\n var activeClassName = className + "-active";\n\n var classList = (0, _elementClass2.default)(node);\n classList.remove(className);\n classList.remove(activeClassName);\n },\n _set_animation: function _set_animation(hide) {\n var node = _reactDom2.default.findDOMNode(this);\n var animations = this._get_animation_classes(hide);\n var endListener = function endListener(e) {\n if (e && e.target !== node) {\n return;\n }\n\n animations.forEach(function (anim) {\n return (0, _elementClass2.default)(node).remove(anim);\n });\n\n _ReactTransitionEvents2.default.removeEndEventListener(node, endListener);\n };\n\n _ReactTransitionEvents2.default.addEndEventListener(node, endListener);\n\n animations.forEach(function (anim) {\n return (0, _elementClass2.default)(node).add(anim);\n });\n },\n _get_animation_classes: function _get_animation_classes(hide) {\n var animations = hide ? this.props.hideAnimation : this.props.showAnimation;\n if ("[object Array]" === toString.call(animations)) {\n return animations;\n } else if ("string" === typeof animations) {\n return animations.split(" ");\n }\n },\n _clear_animation: function _clear_animation(hide) {\n var node = _reactDom2.default.findDOMNode(this);\n var animations = this._get_animation_classes(hide);\n animations.forEach(function (animation) {\n return (0, _elementClass2.default)(node).remove(animation);\n });\n },\n _queue_class: function _queue_class(className) {\n this.classNameQueue.push(className);\n\n if (!this.timeout) {\n this.timeout = setTimeout(this._flush_class_name_queue, TICK);\n }\n },\n _flush_class_name_queue: function _flush_class_name_queue() {\n var _this2 = this;\n\n if (this._is_mounted) {\n (function () {\n var node = _reactDom2.default.findDOMNode(_this2);\n _this2.classNameQueue.forEach(function (className) {\n return (0, _elementClass2.default)(node).add(className);\n });\n })();\n }\n this.classNameQueue.length = 0;\n this.timeout = null;\n },\n _show: function _show() {\n if (this.props.transition) {\n this._set_transition();\n } else if (this.props.showAnimation) {\n this._set_animation();\n }\n },\n handleMouseEnter: function handleMouseEnter() {\n clearTimeout(this.intervalId);\n this._set_interval_id(null);\n if (this.isHiding) {\n this._set_is_hiding(false);\n\n if (this.props.hideAnimation) {\n this._clear_animation(true);\n } else if (this.props.transition) {\n this._clear_transition(true);\n }\n }\n },\n handleMouseLeave: function handleMouseLeave() {\n if (!this.isHiding && (this.props.timeOut > 0 || this.props.extendedTimeOut > 0)) {\n this._set_interval_id(setTimeout(this.hideToast, this.props.extendedTimeOut));\n }\n },\n hideToast: function hideToast(override) {\n if (this.isHiding || this.intervalId === null && !override) {\n return;\n }\n\n this._set_is_hiding(true);\n if (this.props.transition) {\n this._set_transition(true);\n } else if (this.props.hideAnimation) {\n this._set_animation(true);\n } else {\n this._handle_remove();\n }\n },\n _set_interval_id: function _set_interval_id(intervalId) {\n this.intervalId = intervalId;\n },\n _set_is_hiding: function _set_is_hiding(isHiding) {\n this.isHiding = isHiding;\n }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXRvYXN0ci9saWIvVG9hc3RNZXNzYWdlL2FuaW1hdGlvbk1peGluLmpzPzM5OTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsc0NBQXNDLHVDQUF1QyxnQkFBZ0I7O0FBRTdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIyMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX1JlYWN0VHJhbnNpdGlvbkV2ZW50cyA9IHJlcXVpcmUoXCJyZWFjdC9saWIvUmVhY3RUcmFuc2l0aW9uRXZlbnRzXCIpO1xuXG52YXIgX1JlYWN0VHJhbnNpdGlvbkV2ZW50czIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9SZWFjdFRyYW5zaXRpb25FdmVudHMpO1xuXG52YXIgX3JlYWN0RG9tID0gcmVxdWlyZShcInJlYWN0LWRvbVwiKTtcblxudmFyIF9yZWFjdERvbTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdERvbSk7XG5cbnZhciBfZWxlbWVudENsYXNzID0gcmVxdWlyZShcImVsZW1lbnQtY2xhc3NcIik7XG5cbnZhciBfZWxlbWVudENsYXNzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2VsZW1lbnRDbGFzcyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBUSUNLID0gMTc7XG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICBnZXREZWZhdWx0UHJvcHM6IGZ1bmN0aW9uIGdldERlZmF1bHRQcm9wcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHJhbnNpdGlvbjogbnVsbCwgLy8gc29tZSBleGFtcGxlcyBkZWZpbmVkIGluIGluZGV4LnNjc3MgKHNjYWxlLCBmYWRlSW5PdXQsIHJvdGF0ZSlcbiAgICAgIHNob3dBbmltYXRpb246IFwiYW5pbWF0ZWQgYm91bmNlSW5cIiwgLy8gb3Igb3RoZXIgYW5pbWF0aW9ucyBmcm9tIGFuaW1hdGUuY3NzXG4gICAgICBoaWRlQW5pbWF0aW9uOiBcImFuaW1hdGVkIGJvdW5jZU91dFwiLFxuICAgICAgdGltZU91dDogNTAwMCxcbiAgICAgIGV4dGVuZGVkVGltZU91dDogMTAwMFxuICAgIH07XG4gIH0sXG4gIGNvbXBvbmVudFdpbGxNb3VudDogZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkge1xuICAgIHRoaXMuY2xhc3NOYW1lUXVldWUgPSBbXTtcbiAgICB0aGlzLmlzSGlkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5pbnRlcnZhbElkID0gbnVsbDtcbiAgfSxcbiAgY29tcG9uZW50RGlkTW91bnQ6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLl9pc19tb3VudGVkID0gdHJ1ZTtcbiAgICB0aGlzLl9zaG93KCk7XG4gICAgdmFyIG5vZGUgPSBfcmVhY3REb20yLmRlZmF1bHQuZmluZERPTU5vZGUodGhpcyk7XG5cbiAgICB2YXIgb25IaWRlQ29tcGxldGUgPSBmdW5jdGlvbiBvbkhpZGVDb21wbGV0ZSgpIHtcbiAgICAgIGlmIChfdGhpcy5pc0hpZGluZykge1xuICAgICAgICBfdGhpcy5fc2V0X2lzX2hpZGluZyhmYWxzZSk7XG4gICAgICAgIF9SZWFjdFRyYW5zaXRpb25FdmVudHMyLmRlZmF1bHQucmVtb3ZlRW5kRXZlbnRMaXN0ZW5lcihub2RlLCBvbkhpZGVDb21wbGV0ZSk7XG4gICAgICAgIF90aGlzLl9oYW5kbGVfcmVtb3ZlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBfUmVhY3RUcmFuc2l0aW9uRXZlbnRzMi5kZWZhdWx0LmFkZEVuZEV2ZW50TGlzdGVuZXIobm9kZSwgb25IaWRlQ29tcGxldGUpO1xuXG4gICAgaWYgKHRoaXMucHJvcHMudGltZU91dCA+IDApIHtcbiAgICAgIHRoaXMuX3NldF9pbnRlcnZhbF9pZChzZXRUaW1lb3V0KHRoaXMuaGlkZVRvYXN0LCB0aGlzLnByb3BzLnRpbWVPdXQpKTtcbiAgICB9XG4gIH0sXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50OiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLl9pc19tb3VudGVkID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuaW50ZXJ2YWxJZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuaW50ZXJ2YWxJZCk7XG4gICAgfVxuICB9LFxuICBfc2V0X3RyYW5zaXRpb246IGZ1bmN0aW9uIF9zZXRfdHJhbnNpdGlvbihoaWRlKSB7XG4gICAgdmFyIGFuaW1hdGlvblR5cGUgPSBoaWRlID8gXCJsZWF2ZVwiIDogXCJlbnRlclwiO1xuICAgIHZhciBub2RlID0gX3JlYWN0RG9tMi5kZWZhdWx0LmZpbmRET01Ob2RlKHRoaXMpO1xuICAgIHZhciBjbGFzc05hbWUgPSB0aGlzLnByb3BzLnRyYW5zaXRpb24gKyBcIi1cIiArIGFuaW1hdGlvblR5cGU7XG4gICAgdmFyIGFjdGl2ZUNsYXNzTmFtZSA9IGNsYXNzTmFtZSArIFwiLWFjdGl2ZVwiO1xuXG4gICAgdmFyIGVuZExpc3RlbmVyID0gZnVuY3Rpb24gZW5kTGlzdGVuZXIoZSkge1xuICAgICAgaWYgKGUgJiYgZS50YXJnZXQgIT09IG5vZGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgY2xhc3NMaXN0ID0gKDAsIF9lbGVtZW50Q2xhc3MyLmRlZmF1bHQpKG5vZGUpO1xuICAgICAgY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpO1xuICAgICAgY2xhc3NMaXN0LnJlbW92ZShhY3RpdmVDbGFzc05hbWUpO1xuXG4gICAgICBfUmVhY3RUcmFuc2l0aW9uRXZlbnRzMi5kZWZhdWx0LnJlbW92ZUVuZEV2ZW50TGlzdGVuZXIobm9kZSwgZW5kTGlzdGVuZXIpO1xuICAgIH07XG5cbiAgICBfUmVhY3RUcmFuc2l0aW9uRXZlbnRzMi5kZWZhdWx0LmFkZEVuZEV2ZW50TGlzdGVuZXIobm9kZSwgZW5kTGlzdGVuZXIpO1xuXG4gICAgKDAsIF9lbGVtZW50Q2xhc3MyLmRlZmF1bHQpKG5vZGUpLmFkZChjbGFzc05hbWUpO1xuXG4gICAgLy8gTmVlZCB0byBkbyB0aGlzIHRvIGFjdHVhbGx5IHRyaWdnZXIgYSB0cmFuc2l0aW9uLlxuICAgIHRoaXMuX3F1ZXVlX2NsYXNzKGFjdGl2ZUNsYXNzTmFtZSk7XG4gIH0sXG4gIF9jbGVhcl90cmFuc2l0aW9uOiBmdW5jdGlvbiBfY2xlYXJfdHJhbnNpdGlvbihoaWRlKSB7XG4gICAgdmFyIG5vZGUgPSBfcmVhY3REb20yLmRlZmF1bHQuZmluZERPTU5vZGUodGhpcyk7XG4gICAgdmFyIGFuaW1hdGlvblR5cGUgPSBoaWRlID8gXCJsZWF2ZVwiIDogXCJlbnRlclwiO1xuICAgIHZhciBjbGFzc05hbWUgPSB0aGlzLnByb3BzLnRyYW5zaXRpb24gKyBcIi1cIiArIGFuaW1hdGlvblR5cGU7XG4gICAgdmFyIGFjdGl2ZUNsYXNzTmFtZSA9IGNsYXNzTmFtZSArIFwiLWFjdGl2ZVwiO1xuXG4gICAgdmFyIGNsYXNzTGlzdCA9ICgwLCBfZWxlbWVudENsYXNzMi5kZWZhdWx0KShub2RlKTtcbiAgICBjbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7XG4gICAgY2xhc3NMaXN0LnJlbW92ZShhY3RpdmVDbGFzc05hbWUpO1xuICB9LFxuICBfc2V0X2FuaW1hdGlvbjogZnVuY3Rpb24gX3NldF9hbmltYXRpb24oaGlkZSkge1xuICAgIHZhciBub2RlID0gX3JlYWN0RG9tMi5kZWZhdWx0LmZpbmRET01Ob2RlKHRoaXMpO1xuICAgIHZhciBhbmltYXRpb25zID0gdGhpcy5fZ2V0X2FuaW1hdGlvbl9jbGFzc2VzKGhpZGUpO1xuICAgIHZhciBlbmRMaXN0ZW5lciA9IGZ1bmN0aW9uIGVuZExpc3RlbmVyKGUpIHtcbiAgICAgIGlmIChlICYmIGUudGFyZ2V0ICE9PSBub2RlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYW5pbWF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChhbmltKSB7XG4gICAgICAgIHJldHVybiAoMCwgX2VsZW1lbnRDbGFzczIuZGVmYXVsdCkobm9kZSkucmVtb3ZlKGFuaW0pO1xuICAgICAgfSk7XG5cbiAgICAgIF9SZWFjdFRyYW5zaXRpb25FdmVudHMyLmRlZmF1bHQucmVtb3ZlRW5kRXZlbnRMaXN0ZW5lcihub2RlLCBlbmRMaXN0ZW5lcik7XG4gICAgfTtcblxuICAgIF9SZWFjdFRyYW5zaXRpb25FdmVudHMyLmRlZmF1bHQuYWRkRW5kRXZlbnRMaXN0ZW5lcihub2RlLCBlbmRMaXN0ZW5lcik7XG5cbiAgICBhbmltYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKGFuaW0pIHtcbiAgICAgIHJldHVybiAoMCwgX2VsZW1lbnRDbGFzczIuZGVmYXVsdCkobm9kZSkuYWRkKGFuaW0pO1xuICAgIH0pO1xuICB9LFxuICBfZ2V0X2FuaW1hdGlvbl9jbGFzc2VzOiBmdW5jdGlvbiBfZ2V0X2FuaW1hdGlvbl9jbGFzc2VzKGhpZGUpIHtcbiAgICB2YXIgYW5pbWF0aW9ucyA9IGhpZGUgPyB0aGlzLnByb3BzLmhpZGVBbmltYXRpb24gOiB0aGlzLnByb3BzLnNob3dBbmltYXRpb247XG4gICAgaWYgKFwiW29iamVjdCBBcnJheV1cIiA9PT0gdG9TdHJpbmcuY2FsbChhbmltYXRpb25zKSkge1xuICAgICAgcmV0dXJuIGFuaW1hdGlvbnM7XG4gICAgfSBlbHNlIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgYW5pbWF0aW9ucykge1xuICAgICAgcmV0dXJuIGFuaW1hdGlvbnMuc3BsaXQoXCIgXCIpO1xuICAgIH1cbiAgfSxcbiAgX2NsZWFyX2FuaW1hdGlvbjogZnVuY3Rpb24gX2NsZWFyX2FuaW1hdGlvbihoaWRlKSB7XG4gICAgdmFyIG5vZGUgPSBfcmVhY3REb20yLmRlZmF1bHQuZmluZERPTU5vZGUodGhpcyk7XG4gICAgdmFyIGFuaW1hdGlvbnMgPSB0aGlzLl9nZXRfYW5pbWF0aW9uX2NsYXNzZXMoaGlkZSk7XG4gICAgYW5pbWF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChhbmltYXRpb24pIHtcbiAgICAgIHJldHVybiAoMCwgX2VsZW1lbnRDbGFzczIuZGVmYXVsdCkobm9kZSkucmVtb3ZlKGFuaW1hdGlvbik7XG4gICAgfSk7XG4gIH0sXG4gIF9xdWV1ZV9jbGFzczogZnVuY3Rpb24gX3F1ZXVlX2NsYXNzKGNsYXNzTmFtZSkge1xuICAgIHRoaXMuY2xhc3NOYW1lUXVldWUucHVzaChjbGFzc05hbWUpO1xuXG4gICAgaWYgKCF0aGlzLnRpbWVvdXQpIHtcbiAgICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQodGhpcy5fZmx1c2hfY2xhc3NfbmFtZV9xdWV1ZSwgVElDSyk7XG4gICAgfVxuICB9LFxuICBfZmx1c2hfY2xhc3NfbmFtZV9xdWV1ZTogZnVuY3Rpb24gX2ZsdXNoX2NsYXNzX25hbWVfcXVldWUoKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICBpZiAodGhpcy5faXNfbW91bnRlZCkge1xuICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBfcmVhY3REb20yLmRlZmF1bHQuZmluZERPTU5vZGUoX3RoaXMyKTtcbiAgICAgICAgX3RoaXMyLmNsYXNzTmFtZVF1ZXVlLmZvckVhY2goZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xuICAgICAgICAgIHJldHVybiAoMCwgX2VsZW1lbnRDbGFzczIuZGVmYXVsdCkobm9kZSkuYWRkKGNsYXNzTmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSkoKTtcbiAgICB9XG4gICAgdGhpcy5jbGFzc05hbWVRdWV1ZS5sZW5ndGggPSAwO1xuICAgIHRoaXMudGltZW91dCA9IG51bGw7XG4gIH0sXG4gIF9zaG93OiBmdW5jdGlvbiBfc2hvdygpIHtcbiAgICBpZiAodGhpcy5wcm9wcy50cmFuc2l0aW9uKSB7XG4gICAgICB0aGlzLl9zZXRfdHJhbnNpdGlvbigpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5zaG93QW5pbWF0aW9uKSB7XG4gICAgICB0aGlzLl9zZXRfYW5pbWF0aW9uKCk7XG4gICAgfVxuICB9LFxuICBoYW5kbGVNb3VzZUVudGVyOiBmdW5jdGlvbiBoYW5kbGVNb3VzZUVudGVyKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmludGVydmFsSWQpO1xuICAgIHRoaXMuX3NldF9pbnRlcnZhbF9pZChudWxsKTtcbiAgICBpZiAodGhpcy5pc0hpZGluZykge1xuICAgICAgdGhpcy5fc2V0X2lzX2hpZGluZyhmYWxzZSk7XG5cbiAgICAgIGlmICh0aGlzLnByb3BzLmhpZGVBbmltYXRpb24pIHtcbiAgICAgICAgdGhpcy5fY2xlYXJfYW5pbWF0aW9uKHRydWUpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnRyYW5zaXRpb24pIHtcbiAgICAgICAgdGhpcy5fY2xlYXJfdHJhbnNpdGlvbih0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGhhbmRsZU1vdXNlTGVhdmU6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlTGVhdmUoKSB7XG4gICAgaWYgKCF0aGlzLmlzSGlkaW5nICYmICh0aGlzLnByb3BzLnRpbWVPdXQgPiAwIHx8IHRoaXMucHJvcHMuZXh0ZW5kZWRUaW1lT3V0ID4gMCkpIHtcbiAgICAgIHRoaXMuX3NldF9pbnRlcnZhbF9pZChzZXRUaW1lb3V0KHRoaXMuaGlkZVRvYXN0LCB0aGlzLnByb3BzLmV4dGVuZGVkVGltZU91dCkpO1xuICAgIH1cbiAgfSxcbiAgaGlkZVRvYXN0OiBmdW5jdGlvbiBoaWRlVG9hc3Qob3ZlcnJpZGUpIHtcbiAgICBpZiAodGhpcy5pc0hpZGluZyB8fCB0aGlzLmludGVydmFsSWQgPT09IG51bGwgJiYgIW92ZXJyaWRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fc2V0X2lzX2hpZGluZyh0cnVlKTtcbiAgICBpZiAodGhpcy5wcm9wcy50cmFuc2l0aW9uKSB7XG4gICAgICB0aGlzLl9zZXRfdHJhbnNpdGlvbih0cnVlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuaGlkZUFuaW1hdGlvbikge1xuICAgICAgdGhpcy5fc2V0X2FuaW1hdGlvbih0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faGFuZGxlX3JlbW92ZSgpO1xuICAgIH1cbiAgfSxcbiAgX3NldF9pbnRlcnZhbF9pZDogZnVuY3Rpb24gX3NldF9pbnRlcnZhbF9pZChpbnRlcnZhbElkKSB7XG4gICAgdGhpcy5pbnRlcnZhbElkID0gaW50ZXJ2YWxJZDtcbiAgfSxcbiAgX3NldF9pc19oaWRpbmc6IGZ1bmN0aW9uIF9zZXRfaXNfaGlkaW5nKGlzSGlkaW5nKSB7XG4gICAgdGhpcy5pc0hpZGluZyA9IGlzSGlkaW5nO1xuICB9XG59O1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L3JlYWN0LXRvYXN0ci9saWIvVG9hc3RNZXNzYWdlL2FuaW1hdGlvbk1peGluLmpzXG4gKiogbW9kdWxlIGlkID0gMjNcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0=')},function(module,exports,__webpack_require__){eval("/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactTransitionEvents\n */\n\n'use strict';\n\nvar ExecutionEnvironment = __webpack_require__(25);\n\n/**\n * EVENT_NAME_MAP is used to determine which event fired when a\n * transition/animation ends, based on the style property used to\n * define that event.\n */\nvar EVENT_NAME_MAP = {\n transitionend: {\n 'transition': 'transitionend',\n 'WebkitTransition': 'webkitTransitionEnd',\n 'MozTransition': 'mozTransitionEnd',\n 'OTransition': 'oTransitionEnd',\n 'msTransition': 'MSTransitionEnd'\n },\n\n animationend: {\n 'animation': 'animationend',\n 'WebkitAnimation': 'webkitAnimationEnd',\n 'MozAnimation': 'mozAnimationEnd',\n 'OAnimation': 'oAnimationEnd',\n 'msAnimation': 'MSAnimationEnd'\n }\n};\n\nvar endEvents = [];\n\nfunction detectEvents() {\n var testEl = document.createElement('div');\n var style = testEl.style;\n\n // On some platforms, in particular some releases of Android 4.x,\n // the un-prefixed \"animation\" and \"transition\" properties are defined on the\n // style object but the events that fire will still be prefixed, so we need\n // to check if the un-prefixed events are useable, and if not remove them\n // from the map\n if (!('AnimationEvent' in window)) {\n delete EVENT_NAME_MAP.animationend.animation;\n }\n\n if (!('TransitionEvent' in window)) {\n delete EVENT_NAME_MAP.transitionend.transition;\n }\n\n for (var baseEventName in EVENT_NAME_MAP) {\n var baseEvents = EVENT_NAME_MAP[baseEventName];\n for (var styleName in baseEvents) {\n if (styleName in style) {\n endEvents.push(baseEvents[styleName]);\n break;\n }\n }\n }\n}\n\nif (ExecutionEnvironment.canUseDOM) {\n detectEvents();\n}\n\n// We use the raw {add|remove}EventListener() call because EventListener\n// does not know how to remove event listeners and we really should\n// clean up. Also, these events are not triggered in older browsers\n// so we should be A-OK here.\n\nfunction addEventListener(node, eventName, eventListener) {\n node.addEventListener(eventName, eventListener, false);\n}\n\nfunction removeEventListener(node, eventName, eventListener) {\n node.removeEventListener(eventName, eventListener, false);\n}\n\nvar ReactTransitionEvents = {\n addEndEventListener: function (node, eventListener) {\n if (endEvents.length === 0) {\n // If CSS transitions are not supported, trigger an \"end animation\"\n // event immediately.\n window.setTimeout(eventListener, 0);\n return;\n }\n endEvents.forEach(function (endEvent) {\n addEventListener(node, endEvent, eventListener);\n });\n },\n\n removeEndEventListener: function (node, eventListener) {\n if (endEvents.length === 0) {\n return;\n }\n endEvents.forEach(function (endEvent) {\n removeEventListener(node, endEvent, eventListener);\n });\n }\n};\n\nmodule.exports = ReactTransitionEvents;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L3JlYWN0L2xpYi9SZWFjdFRyYW5zaXRpb25FdmVudHMuanM/YjZhYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsV0FBVztBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBIiwiZmlsZSI6IjI0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0VHJhbnNpdGlvbkV2ZW50c1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZSgnZmJqcy9saWIvRXhlY3V0aW9uRW52aXJvbm1lbnQnKTtcblxuLyoqXG4gKiBFVkVOVF9OQU1FX01BUCBpcyB1c2VkIHRvIGRldGVybWluZSB3aGljaCBldmVudCBmaXJlZCB3aGVuIGFcbiAqIHRyYW5zaXRpb24vYW5pbWF0aW9uIGVuZHMsIGJhc2VkIG9uIHRoZSBzdHlsZSBwcm9wZXJ0eSB1c2VkIHRvXG4gKiBkZWZpbmUgdGhhdCBldmVudC5cbiAqL1xudmFyIEVWRU5UX05BTUVfTUFQID0ge1xuICB0cmFuc2l0aW9uZW5kOiB7XG4gICAgJ3RyYW5zaXRpb24nOiAndHJhbnNpdGlvbmVuZCcsXG4gICAgJ1dlYmtpdFRyYW5zaXRpb24nOiAnd2Via2l0VHJhbnNpdGlvbkVuZCcsXG4gICAgJ01velRyYW5zaXRpb24nOiAnbW96VHJhbnNpdGlvbkVuZCcsXG4gICAgJ09UcmFuc2l0aW9uJzogJ29UcmFuc2l0aW9uRW5kJyxcbiAgICAnbXNUcmFuc2l0aW9uJzogJ01TVHJhbnNpdGlvbkVuZCdcbiAgfSxcblxuICBhbmltYXRpb25lbmQ6IHtcbiAgICAnYW5pbWF0aW9uJzogJ2FuaW1hdGlvbmVuZCcsXG4gICAgJ1dlYmtpdEFuaW1hdGlvbic6ICd3ZWJraXRBbmltYXRpb25FbmQnLFxuICAgICdNb3pBbmltYXRpb24nOiAnbW96QW5pbWF0aW9uRW5kJyxcbiAgICAnT0FuaW1hdGlvbic6ICdvQW5pbWF0aW9uRW5kJyxcbiAgICAnbXNBbmltYXRpb24nOiAnTVNBbmltYXRpb25FbmQnXG4gIH1cbn07XG5cbnZhciBlbmRFdmVudHMgPSBbXTtcblxuZnVuY3Rpb24gZGV0ZWN0RXZlbnRzKCkge1xuICB2YXIgdGVzdEVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHZhciBzdHlsZSA9IHRlc3RFbC5zdHlsZTtcblxuICAvLyBPbiBzb21lIHBsYXRmb3JtcywgaW4gcGFydGljdWxhciBzb21lIHJlbGVhc2VzIG9mIEFuZHJvaWQgNC54LFxuICAvLyB0aGUgdW4tcHJlZml4ZWQgXCJhbmltYXRpb25cIiBhbmQgXCJ0cmFuc2l0aW9uXCIgcHJvcGVydGllcyBhcmUgZGVmaW5lZCBvbiB0aGVcbiAgLy8gc3R5bGUgb2JqZWN0IGJ1dCB0aGUgZXZlbnRzIHRoYXQgZmlyZSB3aWxsIHN0aWxsIGJlIHByZWZpeGVkLCBzbyB3ZSBuZWVkXG4gIC8vIHRvIGNoZWNrIGlmIHRoZSB1bi1wcmVmaXhlZCBldmVudHMgYXJlIHVzZWFibGUsIGFuZCBpZiBub3QgcmVtb3ZlIHRoZW1cbiAgLy8gZnJvbSB0aGUgbWFwXG4gIGlmICghKCdBbmltYXRpb25FdmVudCcgaW4gd2luZG93KSkge1xuICAgIGRlbGV0ZSBFVkVOVF9OQU1FX01BUC5hbmltYXRpb25lbmQuYW5pbWF0aW9uO1xuICB9XG5cbiAgaWYgKCEoJ1RyYW5zaXRpb25FdmVudCcgaW4gd2luZG93KSkge1xuICAgIGRlbGV0ZSBFVkVOVF9OQU1FX01BUC50cmFuc2l0aW9uZW5kLnRyYW5zaXRpb247XG4gIH1cblxuICBmb3IgKHZhciBiYXNlRXZlbnROYW1lIGluIEVWRU5UX05BTUVfTUFQKSB7XG4gICAgdmFyIGJhc2VFdmVudHMgPSBFVkVOVF9OQU1FX01BUFtiYXNlRXZlbnROYW1lXTtcbiAgICBmb3IgKHZhciBzdHlsZU5hbWUgaW4gYmFzZUV2ZW50cykge1xuICAgICAgaWYgKHN0eWxlTmFtZSBpbiBzdHlsZSkge1xuICAgICAgICBlbmRFdmVudHMucHVzaChiYXNlRXZlbnRzW3N0eWxlTmFtZV0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuaWYgKEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSkge1xuICBkZXRlY3RFdmVudHMoKTtcbn1cblxuLy8gV2UgdXNlIHRoZSByYXcge2FkZHxyZW1vdmV9RXZlbnRMaXN0ZW5lcigpIGNhbGwgYmVjYXVzZSBFdmVudExpc3RlbmVyXG4vLyBkb2VzIG5vdCBrbm93IGhvdyB0byByZW1vdmUgZXZlbnQgbGlzdGVuZXJzIGFuZCB3ZSByZWFsbHkgc2hvdWxkXG4vLyBjbGVhbiB1cC4gQWxzbywgdGhlc2UgZXZlbnRzIGFyZSBub3QgdHJpZ2dlcmVkIGluIG9sZGVyIGJyb3dzZXJzXG4vLyBzbyB3ZSBzaG91bGQgYmUgQS1PSyBoZXJlLlxuXG5mdW5jdGlvbiBhZGRFdmVudExpc3RlbmVyKG5vZGUsIGV2ZW50TmFtZSwgZXZlbnRMaXN0ZW5lcikge1xuICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBldmVudExpc3RlbmVyLCBmYWxzZSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXIobm9kZSwgZXZlbnROYW1lLCBldmVudExpc3RlbmVyKSB7XG4gIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGV2ZW50TGlzdGVuZXIsIGZhbHNlKTtcbn1cblxudmFyIFJlYWN0VHJhbnNpdGlvbkV2ZW50cyA9IHtcbiAgYWRkRW5kRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gKG5vZGUsIGV2ZW50TGlzdGVuZXIpIHtcbiAgICBpZiAoZW5kRXZlbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gSWYgQ1NTIHRyYW5zaXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkLCB0cmlnZ2VyIGFuIFwiZW5kIGFuaW1hdGlvblwiXG4gICAgICAvLyBldmVudCBpbW1lZGlhdGVseS5cbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGV2ZW50TGlzdGVuZXIsIDApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbmRFdmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZW5kRXZlbnQpIHtcbiAgICAgIGFkZEV2ZW50TGlzdGVuZXIobm9kZSwgZW5kRXZlbnQsIGV2ZW50TGlzdGVuZXIpO1xuICAgIH0pO1xuICB9LFxuXG4gIHJlbW92ZUVuZEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uIChub2RlLCBldmVudExpc3RlbmVyKSB7XG4gICAgaWYgKGVuZEV2ZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZW5kRXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGVuZEV2ZW50KSB7XG4gICAgICByZW1vdmVFdmVudExpc3RlbmVyKG5vZGUsIGVuZEV2ZW50LCBldmVudExpc3RlbmVyKTtcbiAgICB9KTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFRyYW5zaXRpb25FdmVudHM7XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34vcmVhY3QvbGliL1JlYWN0VHJhbnNpdGlvbkV2ZW50cy5qc1xuICoqIG1vZHVsZSBpZCA9IDI0XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports){eval("/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ExecutionEnvironment\n */\n\n'use strict';\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\n/**\n * Simple, lightweight module assisting with the detection and context of\n * Worker. Helps avoid circular dependencies and allows code to reason about\n * whether or not they are in a Worker, even if they never include the main\n * `ReactWorker` dependency.\n */\nvar ExecutionEnvironment = {\n\n canUseDOM: canUseDOM,\n\n canUseWorkers: typeof Worker !== 'undefined',\n\n canUseEventListeners: canUseDOM && !!(window.addEventListener || window.attachEvent),\n\n canUseViewport: canUseDOM && !!window.screen,\n\n isInWorker: !canUseDOM // For now, this is true - might change in the future.\n\n};\n\nmodule.exports = ExecutionEnvironment;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2ZianMvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50LmpzP2YwNjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEiLCJmaWxlIjoiMjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgRXhlY3V0aW9uRW52aXJvbm1lbnRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBjYW5Vc2VET00gPSAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG4vKipcbiAqIFNpbXBsZSwgbGlnaHR3ZWlnaHQgbW9kdWxlIGFzc2lzdGluZyB3aXRoIHRoZSBkZXRlY3Rpb24gYW5kIGNvbnRleHQgb2ZcbiAqIFdvcmtlci4gSGVscHMgYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGFuZCBhbGxvd3MgY29kZSB0byByZWFzb24gYWJvdXRcbiAqIHdoZXRoZXIgb3Igbm90IHRoZXkgYXJlIGluIGEgV29ya2VyLCBldmVuIGlmIHRoZXkgbmV2ZXIgaW5jbHVkZSB0aGUgbWFpblxuICogYFJlYWN0V29ya2VyYCBkZXBlbmRlbmN5LlxuICovXG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSB7XG5cbiAgY2FuVXNlRE9NOiBjYW5Vc2VET00sXG5cbiAgY2FuVXNlV29ya2VyczogdHlwZW9mIFdvcmtlciAhPT0gJ3VuZGVmaW5lZCcsXG5cbiAgY2FuVXNlRXZlbnRMaXN0ZW5lcnM6IGNhblVzZURPTSAmJiAhISh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciB8fCB3aW5kb3cuYXR0YWNoRXZlbnQpLFxuXG4gIGNhblVzZVZpZXdwb3J0OiBjYW5Vc2VET00gJiYgISF3aW5kb3cuc2NyZWVuLFxuXG4gIGlzSW5Xb3JrZXI6ICFjYW5Vc2VET00gLy8gRm9yIG5vdywgdGhpcyBpcyB0cnVlIC0gbWlnaHQgY2hhbmdlIGluIHRoZSBmdXR1cmUuXG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRXhlY3V0aW9uRW52aXJvbm1lbnQ7XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34vZmJqcy9saWIvRXhlY3V0aW9uRW52aXJvbm1lbnQuanNcbiAqKiBtb2R1bGUgaWQgPSAyNVxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports){eval("module.exports = function(opts) {\n return new ElementClass(opts)\n}\n\nfunction indexOf(arr, prop) {\n if (arr.indexOf) return arr.indexOf(prop)\n for (var i = 0, len = arr.length; i < len; i++)\n if (arr[i] === prop) return i\n return -1\n}\n\nfunction ElementClass(opts) {\n if (!(this instanceof ElementClass)) return new ElementClass(opts)\n var self = this\n if (!opts) opts = {}\n\n // similar doing instanceof HTMLElement but works in IE8\n if (opts.nodeType) opts = {el: opts}\n\n this.opts = opts\n this.el = opts.el || document.body\n if (typeof this.el !== 'object') this.el = document.querySelector(this.el)\n}\n\nElementClass.prototype.add = function(className) {\n var el = this.el\n if (!el) return\n if (el.className === \"\") return el.className = className\n var classes = el.className.split(' ')\n if (indexOf(classes, className) > -1) return classes\n classes.push(className)\n el.className = classes.join(' ')\n return classes\n}\n\nElementClass.prototype.remove = function(className) {\n var el = this.el\n if (!el) return\n if (el.className === \"\") return\n var classes = el.className.split(' ')\n var idx = indexOf(classes, className)\n if (idx > -1) classes.splice(idx, 1)\n el.className = classes.join(' ')\n return classes\n}\n\nElementClass.prototype.has = function(className) {\n var el = this.el\n if (!el) return\n var classes = el.className.split(' ')\n return indexOf(classes, className) > -1\n}\n\nElementClass.prototype.toggle = function(className) {\n var el = this.el\n if (!el) return\n if (this.has(className)) this.remove(className)\n else this.add(className)\n}\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2VsZW1lbnQtY2xhc3MvaW5kZXguanM/NDA2YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1DQUFtQyxTQUFTO0FBQzVDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZCQUE2Qjs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIyNi5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob3B0cykge1xuICByZXR1cm4gbmV3IEVsZW1lbnRDbGFzcyhvcHRzKVxufVxuXG5mdW5jdGlvbiBpbmRleE9mKGFyciwgcHJvcCkge1xuICBpZiAoYXJyLmluZGV4T2YpIHJldHVybiBhcnIuaW5kZXhPZihwcm9wKVxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gYXJyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKVxuICAgIGlmIChhcnJbaV0gPT09IHByb3ApIHJldHVybiBpXG4gIHJldHVybiAtMVxufVxuXG5mdW5jdGlvbiBFbGVtZW50Q2xhc3Mob3B0cykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRWxlbWVudENsYXNzKSkgcmV0dXJuIG5ldyBFbGVtZW50Q2xhc3Mob3B0cylcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIGlmICghb3B0cykgb3B0cyA9IHt9XG5cbiAgLy8gc2ltaWxhciBkb2luZyBpbnN0YW5jZW9mIEhUTUxFbGVtZW50IGJ1dCB3b3JrcyBpbiBJRThcbiAgaWYgKG9wdHMubm9kZVR5cGUpIG9wdHMgPSB7ZWw6IG9wdHN9XG5cbiAgdGhpcy5vcHRzID0gb3B0c1xuICB0aGlzLmVsID0gb3B0cy5lbCB8fCBkb2N1bWVudC5ib2R5XG4gIGlmICh0eXBlb2YgdGhpcy5lbCAhPT0gJ29iamVjdCcpIHRoaXMuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZWwpXG59XG5cbkVsZW1lbnRDbGFzcy5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24oY2xhc3NOYW1lKSB7XG4gIHZhciBlbCA9IHRoaXMuZWxcbiAgaWYgKCFlbCkgcmV0dXJuXG4gIGlmIChlbC5jbGFzc05hbWUgPT09IFwiXCIpIHJldHVybiBlbC5jbGFzc05hbWUgPSBjbGFzc05hbWVcbiAgdmFyIGNsYXNzZXMgPSBlbC5jbGFzc05hbWUuc3BsaXQoJyAnKVxuICBpZiAoaW5kZXhPZihjbGFzc2VzLCBjbGFzc05hbWUpID4gLTEpIHJldHVybiBjbGFzc2VzXG4gIGNsYXNzZXMucHVzaChjbGFzc05hbWUpXG4gIGVsLmNsYXNzTmFtZSA9IGNsYXNzZXMuam9pbignICcpXG4gIHJldHVybiBjbGFzc2VzXG59XG5cbkVsZW1lbnRDbGFzcy5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24oY2xhc3NOYW1lKSB7XG4gIHZhciBlbCA9IHRoaXMuZWxcbiAgaWYgKCFlbCkgcmV0dXJuXG4gIGlmIChlbC5jbGFzc05hbWUgPT09IFwiXCIpIHJldHVyblxuICB2YXIgY2xhc3NlcyA9IGVsLmNsYXNzTmFtZS5zcGxpdCgnICcpXG4gIHZhciBpZHggPSBpbmRleE9mKGNsYXNzZXMsIGNsYXNzTmFtZSlcbiAgaWYgKGlkeCA+IC0xKSBjbGFzc2VzLnNwbGljZShpZHgsIDEpXG4gIGVsLmNsYXNzTmFtZSA9IGNsYXNzZXMuam9pbignICcpXG4gIHJldHVybiBjbGFzc2VzXG59XG5cbkVsZW1lbnRDbGFzcy5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24oY2xhc3NOYW1lKSB7XG4gIHZhciBlbCA9IHRoaXMuZWxcbiAgaWYgKCFlbCkgcmV0dXJuXG4gIHZhciBjbGFzc2VzID0gZWwuY2xhc3NOYW1lLnNwbGl0KCcgJylcbiAgcmV0dXJuIGluZGV4T2YoY2xhc3NlcywgY2xhc3NOYW1lKSA+IC0xXG59XG5cbkVsZW1lbnRDbGFzcy5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24oY2xhc3NOYW1lKSB7XG4gIHZhciBlbCA9IHRoaXMuZWxcbiAgaWYgKCFlbCkgcmV0dXJuXG4gIGlmICh0aGlzLmhhcyhjbGFzc05hbWUpKSB0aGlzLnJlbW92ZShjbGFzc05hbWUpXG4gIGVsc2UgdGhpcy5hZGQoY2xhc3NOYW1lKVxufVxuXG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34vZWxlbWVudC1jbGFzcy9pbmRleC5qc1xuICoqIG1vZHVsZSBpZCA9IDI2XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9"); +},function(module,exports,__webpack_require__){eval('"use strict";\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _reactDom = __webpack_require__(5);\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction call_show_method($node, props) {\n $node[props.showMethod]({\n duration: props.showDuration,\n easing: props.showEasing\n });\n}\n\nexports.default = {\n getDefaultProps: function getDefaultProps() {\n return {\n style: {\n display: "none" },\n // effective $.hide()\n showMethod: "fadeIn", // slideDown, and show are built into jQuery\n showDuration: 300,\n showEasing: "swing", // and linear are built into jQuery\n hideMethod: "fadeOut",\n hideDuration: 1000,\n hideEasing: "swing",\n //\n timeOut: 5000,\n extendedTimeOut: 1000\n };\n },\n getInitialState: function getInitialState() {\n return {\n intervalId: null,\n isHiding: false\n };\n },\n componentDidMount: function componentDidMount() {\n call_show_method(this._get_$_node(), this.props);\n if (this.props.timeOut > 0) {\n this._set_interval_id(setTimeout(this.hideToast, this.props.timeOut));\n }\n },\n handleMouseEnter: function handleMouseEnter() {\n clearTimeout(this.state.intervalId);\n this._set_interval_id(null);\n this._set_is_hiding(false);\n\n call_show_method(this._get_$_node().stop(true, true), this.props);\n },\n handleMouseLeave: function handleMouseLeave() {\n if (!this.state.isHiding && (this.props.timeOut > 0 || this.props.extendedTimeOut > 0)) {\n this._set_interval_id(setTimeout(this.hideToast, this.props.extendedTimeOut));\n }\n },\n hideToast: function hideToast(override) {\n if (this.state.isHiding || this.state.intervalId === null && !override) {\n return;\n }\n this.setState({ isHiding: true });\n\n this._get_$_node()[this.props.hideMethod]({\n duration: this.props.hideDuration,\n easing: this.props.hideEasing,\n complete: this._handle_remove\n });\n },\n _get_$_node: function _get_$_node() {\n /* eslint-disable no-undef */\n return jQuery(_reactDom2.default.findDOMNode(this));\n /* eslint-enable no-undef */\n },\n _set_interval_id: function _set_interval_id(intervalId) {\n this.setState({\n intervalId: intervalId\n });\n },\n _set_is_hiding: function _set_is_hiding(isHiding) {\n this.setState({\n isHiding: isHiding\n });\n }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXRvYXN0ci9saWIvVG9hc3RNZXNzYWdlL2pRdWVyeU1peGluLmpzPzQ1NGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7O0FBRUEsc0NBQXNDLHVDQUF1QyxnQkFBZ0I7O0FBRTdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGlCQUFpQjs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EiLCJmaWxlIjoiMjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9yZWFjdERvbSA9IHJlcXVpcmUoXCJyZWFjdC1kb21cIik7XG5cbnZhciBfcmVhY3REb20yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3REb20pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBjYWxsX3Nob3dfbWV0aG9kKCRub2RlLCBwcm9wcykge1xuICAkbm9kZVtwcm9wcy5zaG93TWV0aG9kXSh7XG4gICAgZHVyYXRpb246IHByb3BzLnNob3dEdXJhdGlvbixcbiAgICBlYXNpbmc6IHByb3BzLnNob3dFYXNpbmdcbiAgfSk7XG59XG5cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgZ2V0RGVmYXVsdFByb3BzOiBmdW5jdGlvbiBnZXREZWZhdWx0UHJvcHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIGRpc3BsYXk6IFwibm9uZVwiIH0sXG4gICAgICAvLyBlZmZlY3RpdmUgJC5oaWRlKClcbiAgICAgIHNob3dNZXRob2Q6IFwiZmFkZUluXCIsIC8vIHNsaWRlRG93biwgYW5kIHNob3cgYXJlIGJ1aWx0IGludG8galF1ZXJ5XG4gICAgICBzaG93RHVyYXRpb246IDMwMCxcbiAgICAgIHNob3dFYXNpbmc6IFwic3dpbmdcIiwgLy8gYW5kIGxpbmVhciBhcmUgYnVpbHQgaW50byBqUXVlcnlcbiAgICAgIGhpZGVNZXRob2Q6IFwiZmFkZU91dFwiLFxuICAgICAgaGlkZUR1cmF0aW9uOiAxMDAwLFxuICAgICAgaGlkZUVhc2luZzogXCJzd2luZ1wiLFxuICAgICAgLy9cbiAgICAgIHRpbWVPdXQ6IDUwMDAsXG4gICAgICBleHRlbmRlZFRpbWVPdXQ6IDEwMDBcbiAgICB9O1xuICB9LFxuICBnZXRJbml0aWFsU3RhdGU6IGZ1bmN0aW9uIGdldEluaXRpYWxTdGF0ZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaW50ZXJ2YWxJZDogbnVsbCxcbiAgICAgIGlzSGlkaW5nOiBmYWxzZVxuICAgIH07XG4gIH0sXG4gIGNvbXBvbmVudERpZE1vdW50OiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjYWxsX3Nob3dfbWV0aG9kKHRoaXMuX2dldF8kX25vZGUoKSwgdGhpcy5wcm9wcyk7XG4gICAgaWYgKHRoaXMucHJvcHMudGltZU91dCA+IDApIHtcbiAgICAgIHRoaXMuX3NldF9pbnRlcnZhbF9pZChzZXRUaW1lb3V0KHRoaXMuaGlkZVRvYXN0LCB0aGlzLnByb3BzLnRpbWVPdXQpKTtcbiAgICB9XG4gIH0sXG4gIGhhbmRsZU1vdXNlRW50ZXI6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlRW50ZXIoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuc3RhdGUuaW50ZXJ2YWxJZCk7XG4gICAgdGhpcy5fc2V0X2ludGVydmFsX2lkKG51bGwpO1xuICAgIHRoaXMuX3NldF9pc19oaWRpbmcoZmFsc2UpO1xuXG4gICAgY2FsbF9zaG93X21ldGhvZCh0aGlzLl9nZXRfJF9ub2RlKCkuc3RvcCh0cnVlLCB0cnVlKSwgdGhpcy5wcm9wcyk7XG4gIH0sXG4gIGhhbmRsZU1vdXNlTGVhdmU6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlTGVhdmUoKSB7XG4gICAgaWYgKCF0aGlzLnN0YXRlLmlzSGlkaW5nICYmICh0aGlzLnByb3BzLnRpbWVPdXQgPiAwIHx8IHRoaXMucHJvcHMuZXh0ZW5kZWRUaW1lT3V0ID4gMCkpIHtcbiAgICAgIHRoaXMuX3NldF9pbnRlcnZhbF9pZChzZXRUaW1lb3V0KHRoaXMuaGlkZVRvYXN0LCB0aGlzLnByb3BzLmV4dGVuZGVkVGltZU91dCkpO1xuICAgIH1cbiAgfSxcbiAgaGlkZVRvYXN0OiBmdW5jdGlvbiBoaWRlVG9hc3Qob3ZlcnJpZGUpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5pc0hpZGluZyB8fCB0aGlzLnN0YXRlLmludGVydmFsSWQgPT09IG51bGwgJiYgIW92ZXJyaWRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoeyBpc0hpZGluZzogdHJ1ZSB9KTtcblxuICAgIHRoaXMuX2dldF8kX25vZGUoKVt0aGlzLnByb3BzLmhpZGVNZXRob2RdKHtcbiAgICAgIGR1cmF0aW9uOiB0aGlzLnByb3BzLmhpZGVEdXJhdGlvbixcbiAgICAgIGVhc2luZzogdGhpcy5wcm9wcy5oaWRlRWFzaW5nLFxuICAgICAgY29tcGxldGU6IHRoaXMuX2hhbmRsZV9yZW1vdmVcbiAgICB9KTtcbiAgfSxcbiAgX2dldF8kX25vZGU6IGZ1bmN0aW9uIF9nZXRfJF9ub2RlKCkge1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG4gICAgcmV0dXJuIGpRdWVyeShfcmVhY3REb20yLmRlZmF1bHQuZmluZERPTU5vZGUodGhpcykpO1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW5kZWYgKi9cbiAgfSxcbiAgX3NldF9pbnRlcnZhbF9pZDogZnVuY3Rpb24gX3NldF9pbnRlcnZhbF9pZChpbnRlcnZhbElkKSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpbnRlcnZhbElkOiBpbnRlcnZhbElkXG4gICAgfSk7XG4gIH0sXG4gIF9zZXRfaXNfaGlkaW5nOiBmdW5jdGlvbiBfc2V0X2lzX2hpZGluZyhpc0hpZGluZykge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXNIaWRpbmc6IGlzSGlkaW5nXG4gICAgfSk7XG4gIH1cbn07XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34vcmVhY3QtdG9hc3RyL2xpYi9Ub2FzdE1lc3NhZ2UvalF1ZXJ5TWl4aW4uanNcbiAqKiBtb2R1bGUgaWQgPSAyN1xuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ==')},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _PageButtonJs = __webpack_require__(29);\n\nvar _PageButtonJs2 = _interopRequireDefault(_PageButtonJs);\n\nvar _Const = __webpack_require__(3);\n\nvar _Const2 = _interopRequireDefault(_Const);\n\nvar PaginationList = (function (_Component) {\n _inherits(PaginationList, _Component);\n\n function PaginationList() {\n var _this = this;\n\n _classCallCheck(this, PaginationList);\n\n _get(Object.getPrototypeOf(PaginationList.prototype), 'constructor', this).apply(this, arguments);\n\n this.changePage = function (page) {\n var _props = _this.props;\n var prePage = _props.prePage;\n var currPage = _props.currPage;\n var nextPage = _props.nextPage;\n var lastPage = _props.lastPage;\n var firstPage = _props.firstPage;\n var sizePerPage = _props.sizePerPage;\n\n if (page === prePage) {\n page = currPage - 1 < 1 ? 1 : currPage - 1;\n } else if (page === nextPage) {\n page = currPage + 1 > _this.totalPages ? _this.totalPages : currPage + 1;\n } else if (page === lastPage) {\n page = _this.totalPages;\n } else if (page === firstPage) {\n page = 1;\n } else {\n page = parseInt(page, 10);\n }\n\n if (page !== currPage) {\n _this.props.changePage(page, sizePerPage);\n }\n };\n\n this.changeSizePerPage = function (e) {\n e.preventDefault();\n\n var selectSize = parseInt(e.currentTarget.text, 10);\n var currPage = _this.props.currPage;\n\n if (selectSize !== _this.props.sizePerPage) {\n _this.totalPages = Math.ceil(_this.props.dataSize / selectSize);\n if (currPage > _this.totalPages) currPage = _this.totalPages;\n\n _this.props.changePage(currPage, selectSize);\n if (_this.props.onSizePerPageList) {\n _this.props.onSizePerPageList(selectSize);\n }\n }\n };\n }\n\n _createClass(PaginationList, [{\n key: 'render',\n value: function render() {\n var _this2 = this;\n\n var _props2 = this.props;\n var dataSize = _props2.dataSize;\n var sizePerPage = _props2.sizePerPage;\n var sizePerPageList = _props2.sizePerPageList;\n\n this.totalPages = Math.ceil(dataSize / sizePerPage);\n var pageBtns = this.makePage();\n var pageListStyle = {\n float: 'right',\n // override the margin-top defined in .pagination class in bootstrap.\n marginTop: '0px'\n };\n\n var sizePerPageOptions = sizePerPageList.map(function (_sizePerPage) {\n return _react2['default'].createElement(\n 'li',\n { key: _sizePerPage, role: 'presentation' },\n _react2['default'].createElement(\n 'a',\n { role: 'menuitem',\n tabIndex: '-1', href: '#',\n onClick: _this2.changeSizePerPage },\n _sizePerPage\n )\n );\n });\n\n return _react2['default'].createElement(\n 'div',\n { className: 'row', style: { marginTop: 15 } },\n sizePerPageList.length > 1 ? _react2['default'].createElement(\n 'div',\n null,\n _react2['default'].createElement(\n 'div',\n { className: 'col-md-6' },\n _react2['default'].createElement(\n 'div',\n { className: 'dropdown' },\n _react2['default'].createElement(\n 'button',\n { className: 'btn btn-default dropdown-toggle',\n type: 'button', id: 'pageDropDown', 'data-toggle': 'dropdown',\n 'aria-expanded': 'true' },\n sizePerPage,\n _react2['default'].createElement(\n 'span',\n null,\n ' ',\n _react2['default'].createElement('span', { className: 'caret' })\n )\n ),\n _react2['default'].createElement(\n 'ul',\n { className: 'dropdown-menu', role: 'menu', 'aria-labelledby': 'pageDropDown' },\n sizePerPageOptions\n )\n )\n ),\n _react2['default'].createElement(\n 'div',\n { className: 'col-md-6' },\n _react2['default'].createElement(\n 'ul',\n { className: 'pagination', style: pageListStyle },\n pageBtns\n )\n )\n ) : _react2['default'].createElement(\n 'div',\n { className: 'col-md-12' },\n _react2['default'].createElement(\n 'ul',\n { className: 'pagination', style: pageListStyle },\n pageBtns\n )\n )\n );\n }\n }, {\n key: 'makePage',\n value: function makePage() {\n var pages = this.getPages();\n return pages.map(function (page) {\n var isActive = page === this.props.currPage;\n var disabled = false;\n var hidden = false;\n if (this.props.currPage === 1 && (page === this.props.firstPage || page === this.props.prePage)) {\n disabled = true;\n hidden = true;\n }\n if (this.props.currPage === this.totalPages && (page === this.props.nextPage || page === this.props.lastPage)) {\n disabled = true;\n hidden = true;\n }\n return _react2['default'].createElement(\n _PageButtonJs2['default'],\n { key: page,\n changePage: this.changePage,\n active: isActive,\n disable: disabled,\n hidden: hidden },\n page\n );\n }, this);\n }\n }, {\n key: 'getPages',\n value: function getPages() {\n var pages = undefined;\n var startPage = 1;\n var endPage = this.totalPages;\n\n startPage = Math.max(this.props.currPage - Math.floor(this.props.paginationSize / 2), 1);\n endPage = startPage + this.props.paginationSize - 1;\n\n if (endPage > this.totalPages) {\n endPage = this.totalPages;\n startPage = endPage - this.props.paginationSize + 1;\n }\n\n if (startPage !== 1 && this.totalPages > this.props.paginationSize) {\n pages = [this.props.firstPage, this.props.prePage];\n } else if (this.totalPages > 1) {\n pages = [this.props.prePage];\n } else {\n pages = [];\n }\n\n for (var i = startPage; i <= endPage; i++) {\n if (i > 0) pages.push(i);\n }\n\n if (endPage !== this.totalPages) {\n pages.push(this.props.nextPage);\n pages.push(this.props.lastPage);\n } else if (this.totalPages > 1) {\n pages.push(this.props.nextPage);\n }\n return pages;\n }\n }]);\n\n return PaginationList;\n})(_react.Component);\n\nPaginationList.propTypes = {\n currPage: _react.PropTypes.number,\n sizePerPage: _react.PropTypes.number,\n dataSize: _react.PropTypes.number,\n changePage: _react.PropTypes.func,\n sizePerPageList: _react.PropTypes.array,\n paginationSize: _react.PropTypes.number,\n remote: _react.PropTypes.bool,\n onSizePerPageList: _react.PropTypes.func,\n prePage: _react.PropTypes.string\n};\n\nPaginationList.defaultProps = {\n sizePerPage: _Const2['default'].SIZE_PER_PAGE\n};\n\nexports['default'] = PaginationList;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvcGFnaW5hdGlvbi9QYWdpbmF0aW9uTGlzdC5qcz81N2U5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7aUNBQTRDLENBQU87Ozs7d0NBQzVCLEVBQWlCOzs7O2lDQUN0QixDQUFVOzs7O0lBRXRCLGNBQWM7WUFBZCxjQUFjOztXQUFkLGNBQWM7OzswQkFBZCxjQUFjOzsrQkFBZCxjQUFjOztTQUVsQixVQUFVLEdBQUcsY0FBSSxFQUFJO21CQUN1RCxNQUFLLEtBQUs7VUFBNUUsT0FBTyxVQUFQLE9BQU87VUFBRSxRQUFRLFVBQVIsUUFBUTtVQUFFLFFBQVEsVUFBUixRQUFRO1VBQUUsUUFBUSxVQUFSLFFBQVE7VUFBRSxTQUFTLFVBQVQsU0FBUztVQUFFLFdBQVcsVUFBWCxXQUFXOztBQUNyRSxVQUFJLElBQUksS0FBSyxPQUFPLEVBQUU7QUFDcEIsWUFBSSxHQUFHLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO09BQzVDLE1BQU0sSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFO0FBQzVCLFlBQUksR0FBRyxRQUFRLEdBQUcsQ0FBQyxHQUFHLE1BQUssVUFBVSxHQUFHLE1BQUssVUFBVSxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUM7T0FDeEUsTUFBTSxJQUFJLElBQUksS0FBSyxRQUFRLEVBQUU7QUFDNUIsWUFBSSxHQUFHLE1BQUssVUFBVSxDQUFDO09BQ3hCLE1BQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO0FBQzdCLFlBQUksR0FBRyxDQUFDLENBQUM7T0FDVixNQUFNO0FBQ0wsWUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7T0FDM0I7O0FBRUQsVUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFO0FBQ3JCLGNBQUssS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7T0FD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Q0FBQyxRQUFRLENBQUMsQ0FBQztPQUNqQyxNQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUU7QUFDOUIsYUFBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO09BQ2pDO0FBQ0QsYUFBTyxLQUFLLENBQUM7S0FDZDs7O1NBMUpHLGNBQWM7OztBQTRKcEIsY0FBYyxDQUFDLFNBQVMsR0FBRztBQUN6QixVQUFRLEVBQUUsaUJBQVUsTUFBTTtBQUMxQixhQUFXLEVBQUUsaUJBQVUsTUFBTTtBQUM3QixVQUFRLEVBQUUsaUJBQVUsTUFBTTtBQUMxQixZQUFVLEVBQUUsaUJBQVUsSUFBSTtBQUMxQixpQkFBZSxFQUFFLGlCQUFVLEtBQUs7QUFDaEMsZ0JBQWMsRUFBRSxpQkFBVSxNQUFNO0FBQ2hDLFFBQU0sRUFBRSxpQkFBVSxJQUFJO0FBQ3RCLG1CQUFpQixFQUFFLGlCQUFVLElBQUk7QUFDakMsU0FBTyxFQUFFLGlCQUFVLE1BQU07Q0FDMUIsQ0FBQzs7QUFFRixjQUFjLENBQUMsWUFBWSxHQUFHO0FBQzVCLGFBQVcsRUFBRSxtQkFBTSxhQUFhO0NBQ2pDLENBQUM7O3FCQUVhLGNBQWMiLCJmaWxlIjoiMjguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBQcm9wVHlwZXMgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUGFnZUJ1dHRvbiBmcm9tICcuL1BhZ2VCdXR0b24uanMnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4uL0NvbnN0JztcblxuY2xhc3MgUGFnaW5hdGlvbkxpc3QgZXh0ZW5kcyBDb21wb25lbnQge1xuXG4gIGNoYW5nZVBhZ2UgPSBwYWdlID0+IHtcbiAgICBjb25zdCB7IHByZVBhZ2UsIGN1cnJQYWdlLCBuZXh0UGFnZSwgbGFzdFBhZ2UsIGZpcnN0UGFnZSwgc2l6ZVBlclBhZ2UgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKHBhZ2UgPT09IHByZVBhZ2UpIHtcbiAgICAgIHBhZ2UgPSBjdXJyUGFnZSAtIDEgPCAxID8gMSA6IGN1cnJQYWdlIC0gMTtcbiAgICB9IGVsc2UgaWYgKHBhZ2UgPT09IG5leHRQYWdlKSB7XG4gICAgICBwYWdlID0gY3VyclBhZ2UgKyAxID4gdGhpcy50b3RhbFBhZ2VzID8gdGhpcy50b3RhbFBhZ2VzIDogY3VyclBhZ2UgKyAxO1xuICAgIH0gZWxzZSBpZiAocGFnZSA9PT0gbGFzdFBhZ2UpIHtcbiAgICAgIHBhZ2UgPSB0aGlzLnRvdGFsUGFnZXM7XG4gICAgfSBlbHNlIGlmIChwYWdlID09PSBmaXJzdFBhZ2UpIHtcbiAgICAgIHBhZ2UgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYWdlID0gcGFyc2VJbnQocGFnZSwgMTApO1xuICAgIH1cblxuICAgIGlmIChwYWdlICE9PSBjdXJyUGFnZSkge1xuICAgICAgdGhpcy5wcm9wcy5jaGFuZ2VQYWdlKHBhZ2UsIHNpemVQZXJQYWdlKTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VTaXplUGVyUGFnZSA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0IHNlbGVjdFNpemUgPSBwYXJzZUludChlLmN1cnJlbnRUYXJnZXQudGV4dCwgMTApO1xuICAgIGxldCB7IGN1cnJQYWdlIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChzZWxlY3RTaXplICE9PSB0aGlzLnByb3BzLnNpemVQZXJQYWdlKSB7XG4gICAgICB0aGlzLnRvdGFsUGFnZXMgPSBNYXRoLmNlaWwodGhpcy5wcm9wcy5kYXRhU2l6ZSAvIHNlbGVjdFNpemUpO1xuICAgICAgaWYgKGN1cnJQYWdlID4gdGhpcy50b3RhbFBhZ2VzKSBjdXJyUGFnZSA9IHRoaXMudG90YWxQYWdlcztcblxuICAgICAgdGhpcy5wcm9wcy5jaGFuZ2VQYWdlKGN1cnJQYWdlLCBzZWxlY3RTaXplKTtcbiAgICAgIGlmICh0aGlzLnByb3BzLm9uU2l6ZVBlclBhZ2VMaXN0KSB7XG4gICAgICAgIHRoaXMucHJvcHMub25TaXplUGVyUGFnZUxpc3Qoc2VsZWN0U2l6ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgZGF0YVNpemUsIHNpemVQZXJQYWdlLCBzaXplUGVyUGFnZUxpc3QgfSA9IHRoaXMucHJvcHM7XG4gICAgdGhpcy50b3RhbFBhZ2VzID0gTWF0aC5jZWlsKGRhdGFTaXplIC8gc2l6ZVBlclBhZ2UpO1xuICAgIGNvbnN0IHBhZ2VCdG5zID0gdGhpcy5tYWtlUGFnZSgpO1xuICAgIGNvbnN0IHBhZ2VMaXN0U3R5bGUgPSB7XG4gICAgICBmbG9hdDogJ3JpZ2h0JyxcbiAgICAgIC8vIG92ZXJyaWRlIHRoZSBtYXJnaW4tdG9wIGRlZmluZWQgaW4gLnBhZ2luYXRpb24gY2xhc3MgaW4gYm9vdHN0cmFwLlxuICAgICAgbWFyZ2luVG9wOiAnMHB4J1xuICAgIH07XG5cbiAgICBjb25zdCBzaXplUGVyUGFnZU9wdGlvbnMgPSBzaXplUGVyUGFnZUxpc3QubWFwKChfc2l6ZVBlclBhZ2UpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxsaSBrZXk9eyBfc2l6ZVBlclBhZ2UgfSByb2xlPSdwcmVzZW50YXRpb24nPlxuICAgICAgICAgIDxhIHJvbGU9J21lbnVpdGVtJ1xuICAgICAgICAgICAgdGFiSW5kZXg9Jy0xJyBocmVmPScjJ1xuICAgICAgICAgICAgb25DbGljaz17IHRoaXMuY2hhbmdlU2l6ZVBlclBhZ2UgfT57IF9zaXplUGVyUGFnZSB9PC9hPlxuICAgICAgICA8L2xpPlxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93JyBzdHlsZT17IHsgbWFyZ2luVG9wOiAxNSB9IH0+XG4gICAgICAgIHtcbiAgICAgICAgICBzaXplUGVyUGFnZUxpc3QubGVuZ3RoID4gMVxuICAgICAgICAgID8gPGRpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2NvbC1tZC02Jz5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nZHJvcGRvd24nPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9J2J0biBidG4tZGVmYXVsdCBkcm9wZG93bi10b2dnbGUnXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9J2J1dHRvbicgaWQ9J3BhZ2VEcm9wRG93bicgZGF0YS10b2dnbGU9J2Ryb3Bkb3duJ1xuICAgICAgICAgICAgICAgICAgICBhcmlhLWV4cGFuZGVkPSd0cnVlJz5cbiAgICAgICAgICAgICAgICAgICAgeyBzaXplUGVyUGFnZSB9XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIHsgJyAnIH1cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9J2NhcmV0Jy8+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzTmFtZT0nZHJvcGRvd24tbWVudScgcm9sZT0nbWVudScgYXJpYS1sYWJlbGxlZGJ5PSdwYWdlRHJvcERvd24nPlxuICAgICAgICAgICAgICAgICAgICB7IHNpemVQZXJQYWdlT3B0aW9ucyB9XG4gICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2NvbC1tZC02Jz5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3NOYW1lPSdwYWdpbmF0aW9uJyBzdHlsZT17IHBhZ2VMaXN0U3R5bGUgfT5cbiAgICAgICAgICAgICAgICAgIHsgcGFnZUJ0bnMgfVxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgOiA8ZGl2IGNsYXNzTmFtZT0nY29sLW1kLTEyJz5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzTmFtZT0ncGFnaW5hdGlvbicgc3R5bGU9eyBwYWdlTGlzdFN0eWxlIH0+XG4gICAgICAgICAgICAgICAgeyBwYWdlQnRucyB9XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIG1ha2VQYWdlKCkge1xuICAgIGNvbnN0IHBhZ2VzID0gdGhpcy5nZXRQYWdlcygpO1xuICAgIHJldHVybiBwYWdlcy5tYXAoZnVuY3Rpb24ocGFnZSkge1xuICAgICAgY29uc3QgaXNBY3RpdmUgPSBwYWdlID09PSB0aGlzLnByb3BzLmN1cnJQYWdlO1xuICAgICAgbGV0IGRpc2FibGVkID0gZmFsc2U7XG4gICAgICBsZXQgaGlkZGVuID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5wcm9wcy5jdXJyUGFnZSA9PT0gMSAmJlxuICAgICAgICAocGFnZSA9PT0gdGhpcy5wcm9wcy5maXJzdFBhZ2UgfHwgcGFnZSA9PT0gdGhpcy5wcm9wcy5wcmVQYWdlKSkge1xuICAgICAgICBkaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIGhpZGRlbiA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5wcm9wcy5jdXJyUGFnZSA9PT0gdGhpcy50b3RhbFBhZ2VzICYmXG4gICAgICAgIChwYWdlID09PSB0aGlzLnByb3BzLm5leHRQYWdlIHx8IHBhZ2UgPT09IHRoaXMucHJvcHMubGFzdFBhZ2UpKSB7XG4gICAgICAgIGRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgaGlkZGVuID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxQYWdlQnV0dG9uIGtleT17IHBhZ2UgfVxuICAgICAgICAgIGNoYW5nZVBhZ2U9eyB0aGlzLmNoYW5nZVBhZ2UgfVxuICAgICAgICAgIGFjdGl2ZT17IGlzQWN0aXZlIH1cbiAgICAgICAgICBkaXNhYmxlPXsgZGlzYWJsZWQgfVxuICAgICAgICAgIGhpZGRlbj17IGhpZGRlbiB9PlxuICAgICAgICAgIHsgcGFnZSB9XG4gICAgICAgIDwvUGFnZUJ1dHRvbj5cbiAgICAgICk7XG4gICAgfSwgdGhpcyk7XG4gIH1cblxuICBnZXRQYWdlcygpIHtcbiAgICBsZXQgcGFnZXM7XG4gICAgbGV0IHN0YXJ0UGFnZSA9IDE7XG4gICAgbGV0IGVuZFBhZ2UgPSB0aGlzLnRvdGFsUGFnZXM7XG5cbiAgICBzdGFydFBhZ2UgPSBNYXRoLm1heCh0aGlzLnByb3BzLmN1cnJQYWdlIC0gTWF0aC5mbG9vcih0aGlzLnByb3BzLnBhZ2luYXRpb25TaXplIC8gMiksIDEpO1xuICAgIGVuZFBhZ2UgPSBzdGFydFBhZ2UgKyB0aGlzLnByb3BzLnBhZ2luYXRpb25TaXplIC0gMTtcblxuICAgIGlmIChlbmRQYWdlID4gdGhpcy50b3RhbFBhZ2VzKSB7XG4gICAgICBlbmRQYWdlID0gdGhpcy50b3RhbFBhZ2VzO1xuICAgICAgc3RhcnRQYWdlID0gZW5kUGFnZSAtIHRoaXMucHJvcHMucGFnaW5hdGlvblNpemUgKyAxO1xuICAgIH1cblxuICAgIGlmIChzdGFydFBhZ2UgIT09IDEgJiYgdGhpcy50b3RhbFBhZ2VzID4gdGhpcy5wcm9wcy5wYWdpbmF0aW9uU2l6ZSkge1xuICAgICAgcGFnZXMgPSBbIHRoaXMucHJvcHMuZmlyc3RQYWdlLCB0aGlzLnByb3BzLnByZVBhZ2UgXTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudG90YWxQYWdlcyA+IDEpIHtcbiAgICAgIHBhZ2VzID0gWyB0aGlzLnByb3BzLnByZVBhZ2UgXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFnZXMgPSBbXTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gc3RhcnRQYWdlOyBpIDw9IGVuZFBhZ2U7IGkrKykge1xuICAgICAgaWYgKGkgPiAwKSBwYWdlcy5wdXNoKGkpO1xuICAgIH1cblxuICAgIGlmIChlbmRQYWdlICE9PSB0aGlzLnRvdGFsUGFnZXMpIHtcbiAgICAgIHBhZ2VzLnB1c2godGhpcy5wcm9wcy5uZXh0UGFnZSk7XG4gICAgICBwYWdlcy5wdXNoKHRoaXMucHJvcHMubGFzdFBhZ2UpO1xuICAgIH0gZWxzZSBpZiAodGhpcy50b3RhbFBhZ2VzID4gMSkge1xuICAgICAgcGFnZXMucHVzaCh0aGlzLnByb3BzLm5leHRQYWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhZ2VzO1xuICB9XG59XG5QYWdpbmF0aW9uTGlzdC5wcm9wVHlwZXMgPSB7XG4gIGN1cnJQYWdlOiBQcm9wVHlwZXMubnVtYmVyLFxuICBzaXplUGVyUGFnZTogUHJvcFR5cGVzLm51bWJlcixcbiAgZGF0YVNpemU6IFByb3BUeXBlcy5udW1iZXIsXG4gIGNoYW5nZVBhZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBzaXplUGVyUGFnZUxpc3Q6IFByb3BUeXBlcy5hcnJheSxcbiAgcGFnaW5hdGlvblNpemU6IFByb3BUeXBlcy5udW1iZXIsXG4gIHJlbW90ZTogUHJvcFR5cGVzLmJvb2wsXG4gIG9uU2l6ZVBlclBhZ2VMaXN0OiBQcm9wVHlwZXMuZnVuYyxcbiAgcHJlUGFnZTogUHJvcFR5cGVzLnN0cmluZ1xufTtcblxuUGFnaW5hdGlvbkxpc3QuZGVmYXVsdFByb3BzID0ge1xuICBzaXplUGVyUGFnZTogQ29uc3QuU0laRV9QRVJfUEFHRVxufTtcblxuZXhwb3J0IGRlZmF1bHQgUGFnaW5hdGlvbkxpc3Q7XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9wYWdpbmF0aW9uL1BhZ2luYXRpb25MaXN0LmpzXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _classnames = __webpack_require__(6);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar PageButton = (function (_Component) {\n _inherits(PageButton, _Component);\n\n function PageButton(props) {\n var _this = this;\n\n _classCallCheck(this, PageButton);\n\n _get(Object.getPrototypeOf(PageButton.prototype), 'constructor', this).call(this, props);\n\n this.pageBtnClick = function (e) {\n e.preventDefault();\n _this.props.changePage(e.currentTarget.textContent);\n };\n }\n\n _createClass(PageButton, [{\n key: 'render',\n value: function render() {\n var classes = (0, _classnames2['default'])({\n 'active': this.props.active,\n 'disabled': this.props.disable,\n 'hidden': this.props.hidden\n });\n return _react2['default'].createElement(\n 'li',\n { className: classes },\n _react2['default'].createElement(\n 'a',\n { href: '#', onClick: this.pageBtnClick },\n this.props.children\n )\n );\n }\n }]);\n\n return PageButton;\n})(_react.Component);\n\nPageButton.propTypes = {\n changePage: _react.PropTypes.func,\n active: _react.PropTypes.bool,\n disable: _react.PropTypes.bool,\n hidden: _react.PropTypes.bool,\n children: _react.PropTypes.node\n};\n\nexports['default'] = PageButton;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvcGFnaW5hdGlvbi9QYWdlQnV0dG9uLmpzPzU0NGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztpQ0FBNEMsQ0FBTzs7OztzQ0FDOUIsQ0FBWTs7OztJQUUzQixVQUFVO1lBQVYsVUFBVTs7QUFFSCxXQUZQLFVBQVUsQ0FFRixLQUFLLEVBQUU7OzswQkFGZixVQUFVOztBQUdaLCtCQUhFLFVBQVUsNkNBR04sS0FBSyxFQUFFOztTQUdmLFlBQVksR0FBRyxXQUFDLEVBQUk7QUFDbEIsT0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ25CLFlBQUssS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0tBQ3BEO0dBTEE7O2VBSkcsVUFBVTs7V0FXUixrQkFBRztBQUNQLFVBQU0sT0FBTyxHQUFHLDZCQUFTO0FBQ3ZCLGdCQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO0FBQzNCLGtCQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPO0FBQzlCLGdCQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO09BQzVCLENBQUMsQ0FBQztBQUNILGFBQ0U7O1VBQUksU0FBUyxFQUFHLE9BQVM7UUFDdkI7O1lBQUcsSUFBSSxFQUFDLEdBQUcsRUFBQyxPQUFPLEVBQUcsSUFBSSxDQUFDLFlBQWM7VUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7U0FBTTtPQUNsRSxDQUNMO0tBQ0g7OztTQXRCRyxVQUFVOzs7QUF3QmhCLFVBQVUsQ0FBQyxTQUFTLEdBQUc7QUFDckIsWUFBVSxFQUFFLGlCQUFVLElBQUk7QUFDMUIsUUFBTSxFQUFFLGlCQUFVLElBQUk7QUFDdEIsU0FBTyxFQUFFLGlCQUFVLElBQUk7QUFDdkIsUUFBTSxFQUFFLGlCQUFVLElBQUk7QUFDdEIsVUFBUSxFQUFFLGlCQUFVLElBQUk7Q0FDekIsQ0FBQzs7cUJBRWEsVUFBVSIsImZpbGUiOiIyOS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFByb3BUeXBlcyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc1NldCBmcm9tICdjbGFzc25hbWVzJztcblxuY2xhc3MgUGFnZUJ1dHRvbiBleHRlbmRzIENvbXBvbmVudCB7XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICBwYWdlQnRuQ2xpY2sgPSBlID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5wcm9wcy5jaGFuZ2VQYWdlKGUuY3VycmVudFRhcmdldC50ZXh0Q29udGVudCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgY2xhc3NlcyA9IGNsYXNzU2V0KHtcbiAgICAgICdhY3RpdmUnOiB0aGlzLnByb3BzLmFjdGl2ZSxcbiAgICAgICdkaXNhYmxlZCc6IHRoaXMucHJvcHMuZGlzYWJsZSxcbiAgICAgICdoaWRkZW4nOiB0aGlzLnByb3BzLmhpZGRlblxuICAgIH0pO1xuICAgIHJldHVybiAoXG4gICAgICA8bGkgY2xhc3NOYW1lPXsgY2xhc3NlcyB9PlxuICAgICAgICA8YSBocmVmPScjJyBvbkNsaWNrPXsgdGhpcy5wYWdlQnRuQ2xpY2sgfT57IHRoaXMucHJvcHMuY2hpbGRyZW4gfTwvYT5cbiAgICAgIDwvbGk+XG4gICAgKTtcbiAgfVxufVxuUGFnZUJ1dHRvbi5wcm9wVHlwZXMgPSB7XG4gIGNoYW5nZVBhZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBhY3RpdmU6IFByb3BUeXBlcy5ib29sLFxuICBkaXNhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgaGlkZGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlXG59O1xuXG5leHBvcnQgZGVmYXVsdCBQYWdlQnV0dG9uO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvcGFnaW5hdGlvbi9QYWdlQnV0dG9uLmpzXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ=="); +},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _classnames = __webpack_require__(6);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _Const = __webpack_require__(3);\n\nvar _Const2 = _interopRequireDefault(_Const);\n\nvar _Editor = __webpack_require__(12);\n\nvar _Editor2 = _interopRequireDefault(_Editor);\n\nvar _NotificationJs = __webpack_require__(13);\n\nvar _NotificationJs2 = _interopRequireDefault(_NotificationJs);\n\nvar ToolBar = (function (_Component) {\n _inherits(ToolBar, _Component);\n\n function ToolBar(props) {\n var _this = this;\n\n _classCallCheck(this, ToolBar);\n\n _get(Object.getPrototypeOf(ToolBar.prototype), 'constructor', this).call(this, props);\n\n this.handleSaveBtnClick = function () {\n var newObj = _this.checkAndParseForm();\n if (!newObj) {\n // validate errors\n return;\n }\n var msg = _this.props.onAddRow(newObj);\n if (msg) {\n _this.refs.notifier.notice('error', msg, 'Pressed ESC can cancel');\n _this.clearTimeout();\n // shake form and hack prevent modal hide\n _this.setState({\n shakeEditor: true,\n validateState: 'this is hack for prevent bootstrap modal hide'\n });\n // clear animate class\n _this.timeouteClear = setTimeout(function () {\n _this.setState({ shakeEditor: false });\n }, 300);\n } else {\n // reset state and hide modal hide\n _this.setState({\n validateState: null,\n shakeEditor: false\n }, function () {\n document.querySelector('.modal-backdrop').click();\n document.querySelector('.' + _this.modalClassName).click();\n });\n // reset form\n _this.refs.form.reset();\n }\n };\n\n this.handleShowOnlyToggle = function () {\n _this.setState({\n showSelected: !_this.state.showSelected\n });\n _this.props.onShowOnlySelected();\n };\n\n this.handleDropRowBtnClick = function () {\n _this.props.onDropRow();\n };\n\n this.handleKeyUp = function (e) {\n _this.props.onSearch(e.currentTarget.value);\n };\n\n this.handleExportCSV = function () {\n _this.props.onExportCSV();\n };\n\n this.handleClearBtnClick = function () {\n _this.refs.seachInput.value = '';\n _this.props.onSearch('');\n };\n\n this.timeouteClear = 0;\n this.modalClassName;\n this.state = {\n isInsertRowTrigger: true,\n validateState: null,\n shakeEditor: false,\n showSelected: false\n };\n }\n\n _createClass(ToolBar, [{\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.clearTimeout();\n }\n }, {\n key: 'clearTimeout',\n value: (function (_clearTimeout) {\n function clearTimeout() {\n return _clearTimeout.apply(this, arguments);\n }\n\n clearTimeout.toString = function () {\n return _clearTimeout.toString();\n };\n\n return clearTimeout;\n })(function () {\n if (this.timeouteClear) {\n clearTimeout(this.timeouteClear);\n this.timeouteClear = 0;\n }\n })\n }, {\n key: 'checkAndParseForm',\n value: function checkAndParseForm() {\n var _this2 = this;\n\n var newObj = {};\n var validateState = {};\n var isValid = true;\n var tempValue = undefined;\n var tempMsg = undefined;\n\n this.props.columns.forEach(function (column, i) {\n if (column.autoValue) {\n // when you want same auto generate value and not allow edit, example ID field\n var time = new Date().getTime();\n tempValue = typeof column.autoValue === 'function' ? column.autoValue() : 'autovalue-' + time;\n } else {\n var dom = this.refs[column.field + i];\n tempValue = dom.value;\n\n if (column.editable && column.editable.type === 'checkbox') {\n var values = tempValue.split(':');\n tempValue = dom.checked ? values[0] : values[1];\n }\n\n if (column.editable && column.editable.validator) {\n // process validate\n tempMsg = column.editable.validator(tempValue);\n if (tempMsg !== true) {\n isValid = false;\n validateState[column.field] = tempMsg;\n }\n }\n }\n\n newObj[column.field] = tempValue;\n }, this);\n\n if (isValid) {\n return newObj;\n } else {\n this.clearTimeout();\n // show error in form and shake it\n this.setState({ validateState: validateState, shakeEditor: true });\n // notifier error\n this.refs.notifier.notice('error', 'Form validate errors, please checking!', 'Pressed ESC can cancel');\n // clear animate class\n this.timeouteClear = setTimeout(function () {\n _this2.setState({ shakeEditor: false });\n }, 300);\n return null;\n }\n }\n }, {\n key: 'handleCloseBtn',\n value: function handleCloseBtn() {\n this.refs.warning.style.display = 'none';\n }\n }, {\n key: 'render',\n value: function render() {\n this.modalClassName = 'bs-table-modal-sm' + new Date().getTime();\n var insertBtn = null;\n var deleteBtn = null;\n var exportCSV = null;\n var showSelectedOnlyBtn = null;\n\n if (this.props.enableInsert) {\n insertBtn = _react2['default'].createElement(\n 'button',\n { type: 'button',\n className: 'btn btn-info react-bs-table-add-btn',\n 'data-toggle': 'modal',\n 'data-target': '.' + this.modalClassName },\n _react2['default'].createElement('i', { className: 'glyphicon glyphicon-plus' }),\n ' New'\n );\n }\n\n if (this.props.enableDelete) {\n deleteBtn = _react2['default'].createElement(\n 'button',\n { type: 'button',\n className: 'btn btn-warning react-bs-table-del-btn',\n 'data-toggle': 'tooltip',\n 'data-placement': 'right',\n title: 'Drop selected row',\n onClick: this.handleDropRowBtnClick },\n _react2['default'].createElement('i', { className: 'glyphicon glyphicon-trash' }),\n ' Delete'\n );\n }\n\n if (this.props.enableShowOnlySelected) {\n showSelectedOnlyBtn = _react2['default'].createElement(\n 'button',\n { type: 'button',\n onClick: this.handleShowOnlyToggle,\n className: 'btn btn-primary',\n 'data-toggle': 'button',\n 'aria-pressed': 'false' },\n this.state.showSelected ? _Const2['default'].SHOW_ALL : _Const2['default'].SHOW_ONLY_SELECT\n );\n }\n\n if (this.props.enableExportCSV) {\n exportCSV = _react2['default'].createElement(\n 'button',\n { type: 'button',\n className: 'btn btn-success',\n onClick: this.handleExportCSV },\n _react2['default'].createElement('i', { className: 'glyphicon glyphicon-export' }),\n ' Export to CSV'\n );\n }\n\n var searchTextInput = this.renderSearchPanel();\n var modal = this.props.enableInsert ? this.renderInsertRowModal() : null;\n\n return _react2['default'].createElement(\n 'div',\n { className: 'row' },\n _react2['default'].createElement(\n 'div',\n { className: 'col-xs-12 col-sm-6 col-md-6 col-lg-8' },\n _react2['default'].createElement(\n 'div',\n { className: 'btn-group btn-group-sm', role: 'group' },\n exportCSV,\n insertBtn,\n deleteBtn,\n showSelectedOnlyBtn\n )\n ),\n _react2['default'].createElement(\n 'div',\n { className: 'col-xs-12 col-sm-6 col-md-6 col-lg-4' },\n searchTextInput\n ),\n _react2['default'].createElement(_NotificationJs2['default'], { ref: 'notifier' }),\n modal\n );\n }\n }, {\n key: 'renderSearchPanel',\n value: function renderSearchPanel() {\n if (this.props.enableSearch) {\n var classNames = 'form-group form-group-sm react-bs-table-search-form';\n var clearBtn = null;\n if (this.props.clearSearch) {\n clearBtn = _react2['default'].createElement(\n 'span',\n { className: 'input-group-btn' },\n _react2['default'].createElement(\n 'button',\n {\n className: 'btn btn-default',\n type: 'button',\n onClick: this.handleClearBtnClick },\n 'Clear'\n )\n );\n classNames += ' input-group input-group-sm';\n }\n\n return _react2['default'].createElement(\n 'div',\n { className: classNames },\n _react2['default'].createElement('input', { ref: 'seachInput',\n className: 'form-control',\n type: 'text',\n placeholder: this.props.searchPlaceholder ? this.props.searchPlaceholder : 'Search',\n onKeyUp: this.handleKeyUp }),\n clearBtn\n );\n } else {\n return null;\n }\n }\n }, {\n key: 'renderInsertRowModal',\n value: function renderInsertRowModal() {\n var validateState = this.state.validateState || {};\n var shakeEditor = this.state.shakeEditor;\n var inputField = this.props.columns.map(function (column, i) {\n var editable = column.editable;\n var format = column.format;\n var field = column.field;\n var name = column.name;\n var autoValue = column.autoValue;\n\n var attr = {\n ref: field + i,\n placeholder: editable.placeholder ? editable.placeholder : name\n };\n\n if (autoValue) {\n // when you want same auto generate value\n // and not allow edit, for example ID field\n return null;\n }\n var error = validateState[field] ? _react2['default'].createElement(\n 'span',\n { className: 'help-block bg-danger' },\n validateState[field]\n ) : null;\n\n // let editor = Editor(editable,attr,format);\n // if(editor.props.type && editor.props.type == 'checkbox'){\n return _react2['default'].createElement(\n 'div',\n { className: 'form-group', key: field },\n _react2['default'].createElement(\n 'label',\n null,\n name\n ),\n (0, _Editor2['default'])(editable, attr, format, ''),\n error\n );\n });\n var modalClass = (0, _classnames2['default'])('modal', 'fade', this.modalClassName, {\n // hack prevent bootstrap modal hide by reRender\n 'in': shakeEditor || this.state.validateState\n });\n var dialogClass = (0, _classnames2['default'])('modal-dialog', 'modal-sm', {\n 'animated': shakeEditor,\n 'shake': shakeEditor\n });\n return _react2['default'].createElement(\n 'div',\n { ref: 'modal', className: modalClass, tabIndex: '-1', role: 'dialog' },\n _react2['default'].createElement(\n 'div',\n { className: dialogClass },\n _react2['default'].createElement(\n 'div',\n { className: 'modal-content' },\n _react2['default'].createElement(\n 'div',\n { className: 'modal-header' },\n _react2['default'].createElement(\n 'button',\n { type: 'button',\n className: 'close',\n 'data-dismiss': 'modal',\n 'aria-label': 'Close' },\n _react2['default'].createElement(\n 'span',\n { 'aria-hidden': 'true' },\n '×'\n )\n ),\n _react2['default'].createElement(\n 'h4',\n { className: 'modal-title' },\n 'New Record'\n )\n ),\n _react2['default'].createElement(\n 'div',\n { className: 'modal-body' },\n _react2['default'].createElement(\n 'form',\n { ref: 'form' },\n inputField\n )\n ),\n _react2['default'].createElement(\n 'div',\n { className: 'modal-footer' },\n _react2['default'].createElement(\n 'button',\n { type: 'button',\n className: 'btn btn-default',\n 'data-dismiss': 'modal' },\n 'Close'\n ),\n _react2['default'].createElement(\n 'button',\n { type: 'button',\n className: 'btn btn-info',\n onClick: this.handleSaveBtnClick },\n 'Save'\n )\n )\n )\n )\n );\n }\n }]);\n\n return ToolBar;\n})(_react.Component);\n\nToolBar.propTypes = {\n onAddRow: _react.PropTypes.func,\n onDropRow: _react.PropTypes.func,\n onShowOnlySelected: _react.PropTypes.func,\n enableInsert: _react.PropTypes.bool,\n enableDelete: _react.PropTypes.bool,\n enableSearch: _react.PropTypes.bool,\n enableShowOnlySelected: _react.PropTypes.bool,\n columns: _react.PropTypes.array,\n searchPlaceholder: _react.PropTypes.string,\n clearSearch: _react.PropTypes.bool\n};\n\nToolBar.defaultProps = {\n enableInsert: false,\n enableDelete: false,\n enableSearch: false,\n enableShowOnlySelected: false,\n clearSearch: false\n};\n\nexports['default'] = ToolBar;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvdG9vbGJhci9Ub29sQmFyLmpzPzZiZjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztpQ0FBNEMsQ0FBTzs7OztzQ0FDOUIsQ0FBWTs7OztpQ0FDZixDQUFVOzs7O2tDQUNULEVBQVc7Ozs7MENBQ1QsRUFBb0I7Ozs7SUFFbkMsT0FBTztZQUFQLE9BQU87O0FBRUEsV0FGUCxPQUFPLENBRUMsS0FBSyxFQUFFOzs7MEJBRmYsT0FBTzs7QUFHVCwrQkFIRSxPQUFPLDZDQUdILEtBQUssRUFBRTs7U0E0RWYsa0JBQWtCLEdBQUcsWUFBTTtBQUN6QixVQUFNLE1BQU0sR0FBRyxNQUFLLGlCQUFpQixFQUFFLENBQUM7QUFDeEMsVUFBSSxDQUFDLE1BQU0sRUFBRTs7QUFDWCxlQUFPO09BQ1I7QUFDRCxVQUFNLEdBQUcsR0FBRyxNQUFLLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDeEMsVUFBSSxHQUFHLEVBQUU7QUFDUCxjQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztBQUNsRSxjQUFLLFlBQVksRUFBRSxDQUFDOztBQUVwQixjQUFLLFFBQVEsQ0FBQztBQUNaLHFCQUFXLEVBQUUsSUFBSTtBQUNqQix1QkFBYSxFQUFFLCtDQUErQztTQUMvRCxDQUFDLENBQUM7O0FBRUgsY0FBSyxhQUFhLEdBQUcsVUFBVSxDQUFDLFlBQU07QUFDcEMsZ0JBQUssUUFBUSxDQUFDLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDdkMsRUFBRSxHQUFHLENBQUMsQ0FBQztPQUNULE1BQU07O0FBRUwsY0FBSyxRQUFRLENBQUM7QUFDWix1QkFBYSxFQUFFLElBQUk7QUFDbkIscUJBQVcsRUFBRSxLQUFLO1NBQ25CLEVBQUUsWUFBTTtBQUNQLGtCQUFRLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFD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QkFBaUI7QUFDM0Isa0NBQWEsT0FBTzs7ZUFFYjtjQUNUOztrQkFBUSxJQUFJLEVBQUMsUUFBUTtBQUNuQiwyQkFBUyxFQUFDLGNBQWM7QUFDeEIseUJBQU8sRUFBRyxJQUFJLENBQUMsa0JBQW9COztlQUU1QjthQUNMO1dBQ0Y7U0FDRjtPQUNGLENBQ047S0FDSDs7O1NBOVRHLE9BQU87OztBQWlVYixPQUFPLENBQUMsU0FBUyxHQUFHO0FBQ2xCLFVBQVEsRUFBRSxpQkFBVSxJQUFJO0FBQ3hCLFdBQVMsRUFBRSxpQkFBVSxJQUFJO0FBQ3pCLG9CQUFrQixFQUFFLGlCQUFVLElBQUk7QUFDbEMsY0FBWSxFQUFFLGlCQUFVLElBQUk7QUFDNUIsY0FBWSxFQUFFLGlCQUFVLElBQUk7QUFDNUIsY0FBWSxFQUFFLGlCQUFVLElBQUk7QUFDNUIsd0JBQXNCLEVBQUUsaUJBQVUsSUFBSTtBQUN0QyxTQUFPLEVBQUUsaUJBQVUsS0FBSztBQUN4QixtQkFBaUIsRUFBRSxpQkFBVSxNQUFNO0FBQ25DLGFBQVcsRUFBRSxpQkFBVSxJQUFJO0NBQzVCLENBQUM7O0FBRUYsT0FBTyxDQUFDLFlBQVksR0FBRztBQUNyQixjQUFZLEVBQUUsS0FBSztBQUNuQixjQUFZLEVBQUUsS0FBSztBQUNuQixjQUFZLEVBQUUsS0FBSztBQUNuQix3QkFBc0IsRUFBRSxLQUFLO0FBQzdCLGFBQVcsRUFBRSxLQUFLO0NBQ25CLENBQUM7O3FCQUVhLE9BQU8iLCJmaWxlIjoiMzAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBQcm9wVHlwZXMgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NTZXQgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi4vQ29uc3QnO1xuaW1wb3J0IGVkaXRvciBmcm9tICcuLi9FZGl0b3InO1xuaW1wb3J0IE5vdGlmaWVyIGZyb20gJy4uL05vdGlmaWNhdGlvbi5qcyc7XG5cbmNsYXNzIFRvb2xCYXIgZXh0ZW5kcyBDb21wb25lbnQge1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMudGltZW91dGVDbGVhciA9IDA7XG4gICAgdGhpcy5tb2RhbENsYXNzTmFtZTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgaXNJbnNlcnRSb3dUcmlnZ2VyOiB0cnVlLFxuICAgICAgdmFsaWRhdGVTdGF0ZTogbnVsbCxcbiAgICAgIHNoYWtlRWRpdG9yOiBmYWxzZSxcbiAgICAgIHNob3dTZWxlY3RlZDogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5jbGVhclRpbWVvdXQoKTtcbiAgfVxuXG4gIGNsZWFyVGltZW91dCgpIHtcbiAgICBpZiAodGhpcy50aW1lb3V0ZUNsZWFyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0ZUNsZWFyKTtcbiAgICAgIHRoaXMudGltZW91dGVDbGVhciA9IDA7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tBbmRQYXJzZUZvcm0oKSB7XG4gICAgY29uc3QgbmV3T2JqID0ge307XG4gICAgY29uc3QgdmFsaWRhdGVTdGF0ZSA9IHt9O1xuICAgIGxldCBpc1ZhbGlkID0gdHJ1ZTtcbiAgICBsZXQgdGVtcFZhbHVlO1xuICAgIGxldCB0ZW1wTXNnO1xuXG4gICAgdGhpcy5wcm9wcy5jb2x1bW5zLmZvckVhY2goZnVuY3Rpb24oY29sdW1uLCBpKSB7XG4gICAgICBpZiAoY29sdW1uLmF1dG9WYWx1ZSkge1xuICAgICAgICAvLyB3aGVuIHlvdSB3YW50IHNhbWUgYXV0byBnZW5lcmF0ZSB2YWx1ZSBhbmQgbm90IGFsbG93IGVkaXQsIGV4YW1wbGUgSUQgZmllbGRcbiAgICAgICAgY29uc3QgdGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICB0ZW1wVmFsdWUgPSB0eXBlb2YgY29sdW1uLmF1dG9WYWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/XG4gICAgICAgICAgY29sdW1uLmF1dG9WYWx1ZSgpIDpcbiAgICAgICAgICAoYGF1dG92YWx1ZS0ke3RpbWV9YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBkb20gPSB0aGlzLnJlZnNbY29sdW1uLmZpZWxkICsgaV07XG4gICAgICAgIHRlbXBWYWx1ZSA9IGRvbS52YWx1ZTtcblxuICAgICAgICBpZiAoY29sdW1uLmVkaXRhYmxlICYmIGNvbHVtbi5lZGl0YWJsZS50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWVzID0gdGVtcFZhbHVlLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgdGVtcFZhbHVlID0gZG9tLmNoZWNrZWQgPyB2YWx1ZXNbMF0gOiB2YWx1ZXNbMV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29sdW1uLmVkaXRhYmxlICYmIGNvbHVtbi5lZGl0YWJsZS52YWxpZGF0b3IpIHsgLy8gcHJvY2VzcyB2YWxpZGF0ZVxuICAgICAgICAgIHRlbXBNc2cgPSBjb2x1bW4uZWRpdGFibGUudmFsaWRhdG9yKHRlbXBWYWx1ZSk7XG4gICAgICAgICAgaWYgKHRlbXBNc2cgIT09IHRydWUpIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhbGlkYXRlU3RhdGVbY29sdW1uLmZpZWxkXSA9IHRlbXBNc2c7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5ld09ialtjb2x1bW4uZmllbGRdID0gdGVtcFZhbHVlO1xuICAgIH0sIHRoaXMpO1xuXG4gICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBuZXdPYmo7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xlYXJUaW1lb3V0KCk7XG4gICAgICAvLyBzaG93IGVycm9yIGluIGZvcm0gYW5kIHNoYWtlIGl0XG4gICAgICB0aGlzLnNldFN0YXRlKHsgdmFsaWRhdGVTdGF0ZSwgc2hha2VFZGl0b3I6IHRydWUgfSk7XG4gICAgICAvLyBub3RpZmllciBlcnJvclxuICAgICAgdGhpcy5yZWZzLm5vdGlmaWVyLm5vdGljZShcbiAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgJ0Zvcm0gdmFsaWRhdGUgZXJyb3JzLCBwbGVhc2UgY2hlY2tpbmchJyxcbiAgICAgICAgJ1ByZXNzZWQgRVNDIGNhbiBjYW5jZWwnKTtcbiAgICAgIC8vIGNsZWFyIGFuaW1hdGUgY2xhc3NcbiAgICAgIHRoaXMudGltZW91dGVDbGVhciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgc2hha2VFZGl0b3I6IGZhbHNlIH0pO1xuICAgICAgfSwgMzAwKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVNhdmVCdG5DbGljayA9ICgpID0+IHtcbiAgICBjb25zdCBuZXdPYmogPSB0aGlzLmNoZWNrQW5kUGFyc2VGb3JtKCk7XG4gICAgaWYgKCFuZXdPYmopIHsgLy8gdmFsaWRhdGUgZXJyb3JzXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG1zZyA9IHRoaXMucHJvcHMub25BZGRSb3cobmV3T2JqKTtcbiAgICBpZiAobXNnKSB7XG4gICAgICB0aGlzLnJlZnMubm90aWZpZXIubm90aWNlKCdlcnJvcicsIG1zZywgJ1ByZXNzZWQgRVNDIGNhbiBjYW5jZWwnKTtcbiAgICAgIHRoaXMuY2xlYXJUaW1lb3V0KCk7XG4gICAgICAvLyBzaGFrZSBmb3JtIGFuZCBoYWNrIHByZXZlbnQgbW9kYWwgaGlkZVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHNoYWtlRWRpdG9yOiB0cnVlLFxuICAgICAgICB2YWxpZGF0ZVN0YXRlOiAndGhpcyBpcyBoYWNrIGZvciBwcmV2ZW50IGJvb3RzdHJhcCBtb2RhbCBoaWRlJ1xuICAgICAgfSk7XG4gICAgICAvLyBjbGVhciBhbmltYXRlIGNsYXNzXG4gICAgICB0aGlzLnRpbWVvdXRlQ2xlYXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHNoYWtlRWRpdG9yOiBmYWxzZSB9KTtcbiAgICAgIH0sIDMwMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJlc2V0IHN0YXRlIGFuZCBoaWRlIG1vZGFsIGhpZGVcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICB2YWxpZGF0ZVN0YXRlOiBudWxsLFxuICAgICAgICBzaGFrZUVkaXRvcjogZmFsc2VcbiAgICAgIH0sICgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1vZGFsLWJhY2tkcm9wJykuY2xpY2soKTtcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLicgKyB0aGlzLm1vZGFsQ2xhc3NOYW1lKS5jbGljaygpO1xuICAgICAgfSk7XG4gICAgICAvLyByZXNldCBmb3JtXG4gICAgICB0aGlzLnJlZnMuZm9ybS5yZXNldCgpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVNob3dPbmx5VG9nZ2xlID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgc2hvd1NlbGVjdGVkOiAhdGhpcy5zdGF0ZS5zaG93U2VsZWN0ZWRcbiAgICB9KTtcbiAgICB0aGlzLnByb3BzLm9uU2hvd09ubHlTZWxlY3RlZCgpO1xuICB9XG5cbiAgaGFuZGxlRHJvcFJvd0J0bkNsaWNrID0gKCkgPT4ge1xuICAgIHRoaXMucHJvcHMub25Ecm9wUm93KCk7XG4gIH1cblxuICBoYW5kbGVDbG9zZUJ0bigpIHtcbiAgICB0aGlzLnJlZnMud2FybmluZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICB9XG5cbiAgaGFuZGxlS2V5VXAgPSBlID0+IHtcbiAgICB0aGlzLnByb3BzLm9uU2VhcmNoKGUuY3VycmVudFRhcmdldC52YWx1ZSk7XG4gIH1cblxuICBoYW5kbGVFeHBvcnRDU1YgPSAoKSA9PiB7XG4gICAgdGhpcy5wcm9wcy5vbkV4cG9ydENTVigpO1xuICB9XG5cbiAgaGFuZGxlQ2xlYXJCdG5DbGljayA9ICgpID0+IHtcbiAgICB0aGlzLnJlZnMuc2VhY2hJbnB1dC52YWx1ZSA9ICcnO1xuICAgIHRoaXMucHJvcHMub25TZWFyY2goJycpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMubW9kYWxDbGFzc05hbWUgPSAnYnMtdGFibGUtbW9kYWwtc20nICsgbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgbGV0IGluc2VydEJ0biA9IG51bGw7XG4gICAgbGV0IGRlbGV0ZUJ0biA9IG51bGw7XG4gICAgbGV0IGV4cG9ydENTViA9IG51bGw7XG4gICAgbGV0IHNob3dTZWxlY3RlZE9ubHlCdG4gPSBudWxsO1xuXG4gICAgaWYgKHRoaXMucHJvcHMuZW5hYmxlSW5zZXJ0KSB7XG4gICAgICBpbnNlcnRCdG4gPSAoXG4gICAgICAgIDxidXR0b24gdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgIGNsYXNzTmFtZT0nYnRuIGJ0bi1pbmZvIHJlYWN0LWJzLXRhYmxlLWFkZC1idG4nXG4gICAgICAgICAgZGF0YS10b2dnbGU9J21vZGFsJ1xuICAgICAgICAgIGRhdGEtdGFyZ2V0PXsgJy4nICsgdGhpcy5tb2RhbENsYXNzTmFtZSB9PlxuICAgICAgICAgIDxpIGNsYXNzTmFtZT0nZ2x5cGhpY29uIGdseXBoaWNvbi1wbHVzJz48L2k+IE5ld1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMuZW5hYmxlRGVsZXRlKSB7XG4gICAgICBkZWxldGVCdG4gPSAoXG4gICAgICAgIDxidXR0b24gdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgIGNsYXNzTmFtZT0nYnRuIGJ0bi13YXJuaW5nIHJlYWN0LWJzLXRhYmxlLWRlbC1idG4nXG4gICAgICAgICAgZGF0YS10b2dnbGU9J3Rvb2x0aXAnXG4gICAgICAgICAgZGF0YS1wbGFjZW1lbnQ9J3JpZ2h0J1xuICAgICAgICAgIHRpdGxlPSdEcm9wIHNlbGVjdGVkIHJvdydcbiAgICAgICAgICBvbkNsaWNrPXsgdGhpcy5oYW5kbGVEcm9wUm93QnRuQ2xpY2sgfT5cbiAgICAgICAgICA8aSBjbGFzc05hbWU9J2dseXBoaWNvbiBnbHlwaGljb24tdHJhc2gnPjwvaT4gRGVsZXRlXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9wcy5lbmFibGVTaG93T25seVNlbGVjdGVkKSB7XG4gICAgICBzaG93U2VsZWN0ZWRPbmx5QnRuID0gKFxuICAgICAgICA8YnV0dG9uIHR5cGU9J2J1dHRvbidcbiAgICAgICAgICBvbkNsaWNrPXsgdGhpcy5oYW5kbGVTaG93T25seVRvZ2dsZSB9XG4gICAgICAgICAgY2xhc3NOYW1lPSdidG4gYnRuLXByaW1hcnknXG4gICAgICAgICAgZGF0YS10b2dnbGU9J2J1dHRvbidcbiAgICAgICAgICBhcmlhLXByZXNzZWQ9J2ZhbHNlJz5cbiAgICAgICAgICB7IHRoaXMuc3RhdGUuc2hvd1NlbGVjdGVkID8gQ29uc3QuU0hPV19BTEwgOiBDb25zdC5TSE9XX09OTFlfU0VMRUNUIH1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLmVuYWJsZUV4cG9ydENTVikge1xuICAgICAgZXhwb3J0Q1NWID0gKFxuICAgICAgICA8YnV0dG9uIHR5cGU9J2J1dHRvbidcbiAgICAgICAgICBjbGFzc05hbWU9J2J0biBidG4tc3VjY2VzcydcbiAgICAgICAgICBvbkNsaWNrPXsgdGhpcy5oYW5kbGVFeHBvcnRDU1YgfT5cbiAgICAgICAgICAgIDxpIGNsYXNzTmFtZT0nZ2x5cGhpY29uIGdseXBoaWNvbi1leHBvcnQnPjwvaT4gRXhwb3J0IHRvIENTVlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VhcmNoVGV4dElucHV0ID0gdGhpcy5yZW5kZXJTZWFyY2hQYW5lbCgpO1xuICAgIGNvbnN0IG1vZGFsID0gdGhpcy5wcm9wcy5lbmFibGVJbnNlcnQgPyB0aGlzLnJlbmRlckluc2VydFJvd01vZGFsKCkgOiBudWxsO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPSdyb3cnPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC02IGNvbC1sZy04Jz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nYnRuLWdyb3VwIGJ0bi1ncm91cC1zbScgcm9sZT0nZ3JvdXAnPlxuICAgICAgICAgICAgeyBleHBvcnRDU1YgfVxuICAgICAgICAgICAgeyBpbnNlcnRCdG4gfVxuICAgICAgICAgICAgeyBkZWxldGVCdG4gfVxuICAgICAgICAgICAgeyBzaG93U2VsZWN0ZWRPbmx5QnRuIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2wteHMtMTIgY29sLXNtLTYgY29sLW1kLTYgY29sLWxnLTQnPlxuICAgICAgICAgIHsgc2VhcmNoVGV4dElucHV0IH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxOb3RpZmllciByZWY9J25vdGlmaWVyJyAvPlxuICAgICAgICB7IG1vZGFsIH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZW5kZXJTZWFyY2hQYW5lbCgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5lbmFibGVTZWFyY2gpIHtcbiAgICAgIGxldCBjbGFzc05hbWVzID0gJ2Zvcm0tZ3JvdXAgZm9ybS1ncm91cC1zbSByZWFjdC1icy10YWJsZS1zZWFyY2gtZm9ybSc7XG4gICAgICBsZXQgY2xlYXJCdG4gPSBudWxsO1xuICAgICAgaWYgKHRoaXMucHJvcHMuY2xlYXJTZWFyY2gpIHtcbiAgICAgICAgY2xlYXJCdG4gPSAoXG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSdpbnB1dC1ncm91cC1idG4nPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzc05hbWU9J2J0biBidG4tZGVmYXVsdCdcbiAgICAgICAgICAgICAgdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgICAgICBvbkNsaWNrPXsgdGhpcy5oYW5kbGVDbGVhckJ0bkNsaWNrIH0+XG4gICAgICAgICAgICAgIENsZWFyXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICk7XG4gICAgICAgIGNsYXNzTmFtZXMgKz0gJyBpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zbSc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXsgY2xhc3NOYW1lcyB9PlxuICAgICAgICAgIDxpbnB1dCByZWY9J3NlYWNoSW5wdXQnXG4gICAgICAgICAgICBjbGFzc05hbWU9J2Zvcm0tY29udHJvbCdcbiAgICAgICAgICAgIHR5cGU9J3RleHQnXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17IHRoaXMucHJvcHMuc2VhcmNoUGxhY2Vob2xkZXIgPyB0aGlzLnByb3BzLnNlYXJjaFBsYWNlaG9sZGVyIDogJ1NlYXJjaCcgfVxuICAgICAgICAgICAgb25LZXlVcD17IHRoaXMuaGFuZGxlS2V5VXAgfS8+XG4gICAgICAgICAgICB7IGNsZWFyQnRuIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZW5kZXJJbnNlcnRSb3dNb2RhbCgpIHtcbiAgICBjb25zdCB2YWxpZGF0ZVN0YXRlID0gdGhpcy5zdGF0ZS52YWxpZGF0ZVN0YXRlIHx8IHt9O1xuICAgIGNvbnN0IHNoYWtlRWRpdG9yID0gdGhpcy5zdGF0ZS5zaGFrZUVkaXRvcjtcbiAgICBjb25zdCBpbnB1dEZpZWxkID0gdGhpcy5wcm9wcy5jb2x1bW5zLm1hcChmdW5jdGlvbihjb2x1bW4sIGkpIHtcbiAgICAgIGNvbnN0IHsgZWRpdGFibGUsIGZvcm1hdCwgZmllbGQsIG5hbWUsIGF1dG9WYWx1ZSB9ID0gY29sdW1uO1xuICAgICAgY29uc3QgYXR0ciA9IHtcbiAgICAgICAgcmVmOiBmaWVsZCArIGksXG4gICAgICAgIHBsYWNlaG9sZGVyOiBlZGl0YWJsZS5wbGFjZWhvbGRlciA/IGVkaXRhYmxlLnBsYWNlaG9sZGVyIDogbmFtZVxuICAgICAgfTtcblxuICAgICAgaWYgKGF1dG9WYWx1ZSkge1xuICAgICAgICAvLyB3aGVuIHlvdSB3YW50IHNhbWUgYXV0byBnZW5lcmF0ZSB2YWx1ZVxuICAgICAgICAvLyBhbmQgbm90IGFsbG93IGVkaXQsIGZvciBleGFtcGxlIElEIGZpZWxkXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgZXJyb3IgPSB2YWxpZGF0ZVN0YXRlW2ZpZWxkXSA/XG4gICAgICAgICg8c3BhbiBjbGFzc05hbWU9J2hlbHAtYmxvY2sgYmctZGFuZ2VyJz57IHZhbGlkYXRlU3RhdGVbZmllbGRdIH08L3NwYW4+KSA6XG4gICAgICAgIG51bGw7XG5cbiAgICAgIC8vIGxldCBlZGl0b3IgPSBFZGl0b3IoZWRpdGFibGUsYXR0cixmb3JtYXQpO1xuICAgICAgLy8gaWYoZWRpdG9yLnByb3BzLnR5cGUgJiYgZWRpdG9yLnByb3BzLnR5cGUgPT0gJ2NoZWNrYm94Jyl7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nZm9ybS1ncm91cCcga2V5PXsgZmllbGQgfT5cbiAgICAgICAgICA8bGFiZWw+eyBuYW1lIH08L2xhYmVsPlxuICAgICAgICAgIHsgZWRpdG9yKGVkaXRhYmxlLCBhdHRyLCBmb3JtYXQsICcnKSB9XG4gICAgICAgICAgeyBlcnJvciB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9KTtcbiAgICBjb25zdCBtb2RhbENsYXNzID0gY2xhc3NTZXQoJ21vZGFsJywgJ2ZhZGUnLCB0aGlzLm1vZGFsQ2xhc3NOYW1lLCB7XG4gICAgICAvLyBoYWNrIHByZXZlbnQgYm9vdHN0cmFwIG1vZGFsIGhpZGUgYnkgcmVSZW5kZXJcbiAgICAgICdpbic6IHNoYWtlRWRpdG9yIHx8IHRoaXMuc3RhdGUudmFsaWRhdGVTdGF0ZVxuICAgIH0pO1xuICAgIGNvbnN0IGRpYWxvZ0NsYXNzID0gY2xhc3NTZXQoJ21vZGFsLWRpYWxvZycsICdtb2RhbC1zbScsIHtcbiAgICAgICdhbmltYXRlZCc6IHNoYWtlRWRpdG9yLFxuICAgICAgJ3NoYWtlJzogc2hha2VFZGl0b3JcbiAgICB9KTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiByZWY9J21vZGFsJyBjbGFzc05hbWU9eyBtb2RhbENsYXNzIH0gdGFiSW5kZXg9Jy0xJyByb2xlPSdkaWFsb2cnPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17IGRpYWxvZ0NsYXNzIH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9J21vZGFsLWNvbnRlbnQnPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J21vZGFsLWhlYWRlcic+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT0nY2xvc2UnXG4gICAgICAgICAgICAgICAgZGF0YS1kaXNtaXNzPSdtb2RhbCdcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPSdDbG9zZSc+XG4gICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49J3RydWUnPiZ0aW1lczs8L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8aDQgY2xhc3NOYW1lPSdtb2RhbC10aXRsZSc+TmV3IFJlY29yZDwvaDQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtb2RhbC1ib2R5Jz5cbiAgICAgICAgICAgICAgPGZvcm0gcmVmPSdmb3JtJz5cbiAgICAgICAgICAgICAgeyBpbnB1dEZpZWxkIH1cbiAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbW9kYWwtZm9vdGVyJz5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSdidXR0b24nXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPSdidG4gYnRuLWRlZmF1bHQnXG4gICAgICAgICAgICAgICAgZGF0YS1kaXNtaXNzPSdtb2RhbCc+XG4gICAgICAgICAgICAgICAgQ2xvc2VcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT0nYnRuIGJ0bi1pbmZvJ1xuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyB0aGlzLmhhbmRsZVNhdmVCdG5DbGljayB9PlxuICAgICAgICAgICAgICAgIFNhdmVcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblRvb2xCYXIucHJvcFR5cGVzID0ge1xuICBvbkFkZFJvdzogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uRHJvcFJvdzogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uU2hvd09ubHlTZWxlY3RlZDogUHJvcFR5cGVzLmZ1bmMsXG4gIGVuYWJsZUluc2VydDogUHJvcFR5cGVzLmJvb2wsXG4gIGVuYWJsZURlbGV0ZTogUHJvcFR5cGVzLmJvb2wsXG4gIGVuYWJsZVNlYXJjaDogUHJvcFR5cGVzLmJvb2wsXG4gIGVuYWJsZVNob3dPbmx5U2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICBjb2x1bW5zOiBQcm9wVHlwZXMuYXJyYXksXG4gIHNlYXJjaFBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjbGVhclNlYXJjaDogUHJvcFR5cGVzLmJvb2xcbn07XG5cblRvb2xCYXIuZGVmYXVsdFByb3BzID0ge1xuICBlbmFibGVJbnNlcnQ6IGZhbHNlLFxuICBlbmFibGVEZWxldGU6IGZhbHNlLFxuICBlbmFibGVTZWFyY2g6IGZhbHNlLFxuICBlbmFibGVTaG93T25seVNlbGVjdGVkOiBmYWxzZSxcbiAgY2xlYXJTZWFyY2g6IGZhbHNlXG59O1xuXG5leHBvcnQgZGVmYXVsdCBUb29sQmFyO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvdG9vbGJhci9Ub29sQmFyLmpzXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ=="); +},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _Const = __webpack_require__(3);\n\nvar _Const2 = _interopRequireDefault(_Const);\n\nvar _classnames = __webpack_require__(6);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar TableFilter = (function (_Component) {\n _inherits(TableFilter, _Component);\n\n function TableFilter(props) {\n var _this = this;\n\n _classCallCheck(this, TableFilter);\n\n _get(Object.getPrototypeOf(TableFilter.prototype), 'constructor', this).call(this, props);\n\n this.handleKeyUp = function (e) {\n var _e$currentTarget = e.currentTarget;\n var value = _e$currentTarget.value;\n var name = _e$currentTarget.name;\n\n if (value.trim() === '') {\n delete _this.filterObj[name];\n } else {\n _this.filterObj[name] = value;\n }\n _this.props.onFilter(_this.filterObj);\n };\n\n this.filterObj = {};\n }\n\n _createClass(TableFilter, [{\n key: 'render',\n value: function render() {\n var _props = this.props;\n var striped = _props.striped;\n var condensed = _props.condensed;\n var rowSelectType = _props.rowSelectType;\n var columns = _props.columns;\n\n var tableClasses = (0, _classnames2['default'])('table', {\n 'table-striped': striped,\n 'table-condensed': condensed\n });\n var selectRowHeader = null;\n\n if (rowSelectType === _Const2['default'].ROW_SELECT_SINGLE || rowSelectType === _Const2['default'].ROW_SELECT_MULTI) {\n var style = {\n width: 35,\n paddingLeft: 0,\n paddingRight: 0\n };\n selectRowHeader = _react2['default'].createElement(\n 'th',\n { style: style, key: -1 },\n 'Filter'\n );\n }\n\n var filterField = columns.map(function (column) {\n var hidden = column.hidden;\n var width = column.width;\n var name = column.name;\n\n var thStyle = {\n display: hidden ? 'none' : null,\n width: width\n };\n return _react2['default'].createElement(\n 'th',\n { key: name, style: thStyle },\n _react2['default'].createElement(\n 'div',\n { className: 'th-inner table-header-column' },\n _react2['default'].createElement('input', { size: '10', type: 'text',\n placeholder: name, name: name, onKeyUp: this.handleKeyUp })\n )\n );\n }, this);\n\n return _react2['default'].createElement(\n 'table',\n { className: tableClasses, style: { marginTop: 5 } },\n _react2['default'].createElement(\n 'thead',\n null,\n _react2['default'].createElement(\n 'tr',\n { style: { borderBottomStyle: 'hidden' } },\n selectRowHeader,\n filterField\n )\n )\n );\n }\n }]);\n\n return TableFilter;\n})(_react.Component);\n\nTableFilter.propTypes = {\n columns: _react.PropTypes.array,\n rowSelectType: _react.PropTypes.string,\n onFilter: _react.PropTypes.func\n};\nexports['default'] = TableFilter;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvVGFibGVGaWx0ZXIuanM/MWI2OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O2lDQUE0QyxDQUFPOzs7O2lDQUNqQyxDQUFTOzs7O3NDQUNOLENBQVk7Ozs7SUFFM0IsV0FBVztZQUFYLFdBQVc7O0FBRUosV0FGUCxXQUFXLENBRUgsS0FBSyxFQUFFOzs7MEJBRmYsV0FBVzs7QUFHYiwrQkFIRSxXQUFXLDZDQUdQLEtBQUssRUFBRTs7U0FJZixXQUFXLEdBQUcsV0FBQyxFQUFJOzZCQUNPLENBQUMsQ0FBQyxhQUFhO1VBQS9CLEtBQUssb0JBQUwsS0FBSztVQUFFLElBQUksb0JBQUosSUFBSTs7QUFDbkIsVUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO0FBQ3ZCLGVBQU8sTUFBSyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDN0IsTUFBTTtBQUNMLGNBQUssU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztPQUM5QjtBQUNELFlBQUssS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFLLFNBQVMsQ0FBQyxDQUFDO0tBQ3JDOztBQVhDLFFBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0dBQ3JCOztlQUxHLFdBQVc7O1dBaUJULGtCQUFHO21CQUNnRCxJQUFJLENBQUMsS0FBSztVQUF6RCxPQUFPLFVBQVAsT0FBTztVQUFFLFNBQVMsVUFBVCxTQUFTO1VBQUUsYUFBYSxVQUFiLGFBQWE7VUFBRSxPQUFPLFVBQVAsT0FBTzs7QUFDbEQsVUFBTSxZQUFZLEdBQUcsNkJBQVMsT0FBTyxFQUFFO0FBQ3JDLHVCQUFlLEVBQUUsT0FBTztBQUN4Qix5QkFBaUIsRUFBRSxTQUFTO09BQzdCLENBQUMsQ0FBQztBQUNILFVBQUksZUFBZSxHQUFHLElBQUksQ0FBQzs7QUFFM0IsVUFBSSxhQUFhLEtBQUssbUJBQU0saUJBQWlCLElBQ3pDLGFBQWEsS0FBSyxtQkFBTSxnQkFBZ0IsRUFBRTtBQUM1QyxZQUFNLEtBQUssR0FBRztBQUNaLGVBQUssRUFBRSxFQUFFO0FBQ1QscUJBQVcsRUFBRSxDQUFDO0FBQ2Qsc0JBQVksRUFBRSxDQUFDO1NBQ2hCLENBQUM7QUFDRix1QkFBZSxHQUFJOztZQUFJLEtBQUssRUFBRyxLQUFPLEVBQUMsR0FBRyxFQUFHLENBQUMsQ0FBRzs7U0FBYSxDQUFDO09BQ2hFOztBQUVELFVBQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBUyxNQUFNLEVBQUU7WUFDdkMsTUFBTSxHQUFrQixNQUFNLENBQTlCLE1BQU07WUFBRSxLQUFLLEdBQVcsTUFBTSxDQUF0QixLQUFLO1lBQUUsSUFBSSxHQUFLLE1BQU0sQ0FBZixJQUFJOztBQUMzQixZQUFNLE9BQU8sR0FBRztBQUNkLGlCQUFPLEVBQUUsTUFBTSxHQUFHLE1BQU0sR0FBRyxJQUFJO0FBQy9CLGVBQUssRUFBTCxLQUFLO1NBQ04sQ0FBQztBQUNGLGVBQ0U7O1lBQUksR0FBRyxFQUFHLElBQU0sRUFBQyxLQUFLLEVBQUcsT0FBUztVQUNoQzs7Y0FBSyxTQUFTLEVBQUMsOEJBQThCO1lBQzNDLDRDQUFPLElBQUksRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLE1BQU07QUFDMUIseUJBQVcsRUFBRyxJQUFNLEVBQUMsSUFBSSxFQUFHLElBQU0sRUFBQyxPQUFPLEVBQUcsSUFBSSxDQUFDLFdBQWEsR0FBRTtXQUMvRDtTQUNILENBQ0w7T0FDSCxFQUFFLElBQUksQ0FBQyxDQUFDOztBQUVULGFBQ0U7O1VBQU8sU0FBUyxFQUFHLFlBQWMsRUFBQyxLQUFLLEVBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFJO1FBQzFEOzs7VUFDRTs7Y0FBSSxLQUFLLEVBQUcsRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUk7WUFDekMsZUFBZTtZQUFJLFdBQVc7V0FDN0I7U0FDQztPQUNGLENBQ1I7S0FDSDs7O1NBNURHLFdBQVc7OztBQThEakIsV0FBVyxDQUFDLFNBQVMsR0FBRztBQUN0QixTQUFPLEVBQUUsaUJBQVUsS0FBSztBQUN4QixlQUFhLEVBQUUsaUJBQVUsTUFBTTtBQUMvQixVQUFRLEVBQUUsaUJBQVUsSUFBSTtDQUN6QixDQUFDO3FCQUNhLFdBQVciLCJmaWxlIjoiMzEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBQcm9wVHlwZXMgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi9Db25zdCc7XG5pbXBvcnQgY2xhc3NTZXQgZnJvbSAnY2xhc3NuYW1lcyc7XG5cbmNsYXNzIFRhYmxlRmlsdGVyIGV4dGVuZHMgQ29tcG9uZW50IHtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmZpbHRlck9iaiA9IHt9O1xuICB9XG5cbiAgaGFuZGxlS2V5VXAgPSBlID0+IHtcbiAgICBjb25zdCB7IHZhbHVlLCBuYW1lIH0gPSBlLmN1cnJlbnRUYXJnZXQ7XG4gICAgaWYgKHZhbHVlLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmZpbHRlck9ialtuYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWx0ZXJPYmpbbmFtZV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgdGhpcy5wcm9wcy5vbkZpbHRlcih0aGlzLmZpbHRlck9iaik7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBzdHJpcGVkLCBjb25kZW5zZWQsIHJvd1NlbGVjdFR5cGUsIGNvbHVtbnMgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgdGFibGVDbGFzc2VzID0gY2xhc3NTZXQoJ3RhYmxlJywge1xuICAgICAgJ3RhYmxlLXN0cmlwZWQnOiBzdHJpcGVkLFxuICAgICAgJ3RhYmxlLWNvbmRlbnNlZCc6IGNvbmRlbnNlZFxuICAgIH0pO1xuICAgIGxldCBzZWxlY3RSb3dIZWFkZXIgPSBudWxsO1xuXG4gICAgaWYgKHJvd1NlbGVjdFR5cGUgPT09IENvbnN0LlJPV19TRUxFQ1RfU0lOR0xFIHx8XG4gICAgICAgIHJvd1NlbGVjdFR5cGUgPT09IENvbnN0LlJPV19TRUxFQ1RfTVVMVEkpIHtcbiAgICAgIGNvbnN0IHN0eWxlID0ge1xuICAgICAgICB3aWR0aDogMzUsXG4gICAgICAgIHBhZGRpbmdMZWZ0OiAwLFxuICAgICAgICBwYWRkaW5nUmlnaHQ6IDBcbiAgICAgIH07XG4gICAgICBzZWxlY3RSb3dIZWFkZXIgPSAoPHRoIHN0eWxlPXsgc3R5bGUgfSBrZXk9eyAtMSB9PkZpbHRlcjwvdGg+KTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXJGaWVsZCA9IGNvbHVtbnMubWFwKGZ1bmN0aW9uKGNvbHVtbikge1xuICAgICAgY29uc3QgeyBoaWRkZW4sIHdpZHRoLCBuYW1lIH0gPSBjb2x1bW47XG4gICAgICBjb25zdCB0aFN0eWxlID0ge1xuICAgICAgICBkaXNwbGF5OiBoaWRkZW4gPyAnbm9uZScgOiBudWxsLFxuICAgICAgICB3aWR0aFxuICAgICAgfTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDx0aCBrZXk9eyBuYW1lIH0gc3R5bGU9eyB0aFN0eWxlIH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9J3RoLWlubmVyIHRhYmxlLWhlYWRlci1jb2x1bW4nPlxuICAgICAgICAgICAgPGlucHV0IHNpemU9JzEwJyB0eXBlPSd0ZXh0J1xuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17IG5hbWUgfSBuYW1lPXsgbmFtZSB9IG9uS2V5VXA9eyB0aGlzLmhhbmRsZUtleVVwIH0vPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RoPlxuICAgICAgKTtcbiAgICB9LCB0aGlzKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8dGFibGUgY2xhc3NOYW1lPXsgdGFibGVDbGFzc2VzIH0gc3R5bGU9eyB7IG1hcmdpblRvcDogNSB9IH0+XG4gICAgICAgIDx0aGVhZD5cbiAgICAgICAgICA8dHIgc3R5bGU9eyB7IGJvcmRlckJvdHRvbVN0eWxlOiAnaGlkZGVuJyB9IH0+XG4gICAgICAgICAgICB7IHNlbGVjdFJvd0hlYWRlciB9eyBmaWx0ZXJGaWVsZCB9XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90aGVhZD5cbiAgICAgIDwvdGFibGU+XG4gICAgKTtcbiAgfVxufVxuVGFibGVGaWx0ZXIucHJvcFR5cGVzID0ge1xuICBjb2x1bW5zOiBQcm9wVHlwZXMuYXJyYXksXG4gIHJvd1NlbGVjdFR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uRmlsdGVyOiBQcm9wVHlwZXMuZnVuY1xufTtcbmV4cG9ydCBkZWZhdWx0IFRhYmxlRmlsdGVyO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvVGFibGVGaWx0ZXIuanNcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports,__webpack_require__){eval("/* eslint no-nested-ternary: 0 */\n/* eslint guard-for-in: 0 */\n/* eslint no-console: 0 */\n/* eslint eqeqeq: 0 */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _Const = __webpack_require__(3);\n\nvar _Const2 = _interopRequireDefault(_Const);\n\nvar EventEmitter = __webpack_require__(33).EventEmitter;\n\nfunction _sort(arr, sortField, order, sortFunc) {\n order = order.toLowerCase();\n arr.sort(function (a, b) {\n if (sortFunc) {\n return sortFunc(a, b, order, sortField);\n } else {\n if (order === _Const2['default'].SORT_DESC) {\n return a[sortField] > b[sortField] ? -1 : a[sortField] < b[sortField] ? 1 : 0;\n } else {\n return a[sortField] < b[sortField] ? -1 : a[sortField] > b[sortField] ? 1 : 0;\n }\n }\n });\n\n return arr;\n}\n\nvar TableDataSet = (function (_EventEmitter) {\n _inherits(TableDataSet, _EventEmitter);\n\n function TableDataSet(data) {\n _classCallCheck(this, TableDataSet);\n\n _get(Object.getPrototypeOf(TableDataSet.prototype), 'constructor', this).call(this, data);\n this.data = data;\n }\n\n _createClass(TableDataSet, [{\n key: 'setData',\n value: function setData(data) {\n this.emit('change', data);\n }\n }, {\n key: 'clear',\n value: function clear() {\n this.data = null;\n }\n }, {\n key: 'getData',\n value: function getData() {\n return this.data;\n }\n }]);\n\n return TableDataSet;\n})(EventEmitter);\n\nexports.TableDataSet = TableDataSet;\n\nvar TableDataStore = (function () {\n function TableDataStore(data) {\n _classCallCheck(this, TableDataStore);\n\n this.data = data;\n this.colInfos = null;\n this.filteredData = null;\n this.isOnFilter = false;\n this.filterObj = null;\n this.searchText = null;\n this.sortObj = null;\n this.pageObj = {};\n this.selected = [];\n this.multiColumnSearch = false;\n this.showOnlySelected = false;\n this.remote = false; // remote data\n }\n\n _createClass(TableDataStore, [{\n key: 'setProps',\n value: function setProps(props) {\n this.keyField = props.keyField;\n this.enablePagination = props.isPagination;\n this.colInfos = props.colInfos;\n this.remote = props.remote;\n this.multiColumnSearch = props.multiColumnSearch;\n }\n }, {\n key: 'setData',\n value: function setData(data) {\n this.data = data;\n if (this.isOnFilter) {\n if (this.filterObj !== null) this.filter(this.filterObj);\n if (this.searchText !== null) this.search(this.searchText);\n }\n if (this.sortObj) {\n this.sort(this.sortObj.order, this.sortObj.sortField);\n }\n }\n }, {\n key: 'getSortInfo',\n value: function getSortInfo() {\n return this.sortObj;\n }\n }, {\n key: 'setSelectedRowKey',\n value: function setSelectedRowKey(selectedRowKeys) {\n this.selected = selectedRowKeys;\n }\n }, {\n key: 'getSelectedRowKeys',\n value: function getSelectedRowKeys() {\n return this.selected;\n }\n }, {\n key: 'getCurrentDisplayData',\n value: function getCurrentDisplayData() {\n if (this.isOnFilter) return this.filteredData;else return this.data;\n }\n }, {\n key: 'ignoreNonSelected',\n value: function ignoreNonSelected() {\n var _this = this;\n\n this.showOnlySelected = !this.showOnlySelected;\n if (this.showOnlySelected) {\n this.isOnFilter = true;\n this.filteredData = this.data.filter(function (row) {\n var result = _this.selected.find(function (x) {\n return row[_this.keyField] === x;\n });\n return typeof result !== 'undefined' ? true : false;\n });\n } else {\n this.isOnFilter = false;\n }\n }\n }, {\n key: 'sort',\n value: function sort(order, sortField) {\n this.sortObj = { order: order, sortField: sortField };\n\n var currentDisplayData = this.getCurrentDisplayData();\n if (!this.colInfos[sortField]) return this;\n\n var sortFunc = this.colInfos[sortField].sortFunc;\n\n currentDisplayData = _sort(currentDisplayData, sortField, order, sortFunc);\n\n return this;\n }\n }, {\n key: 'page',\n value: function page(_page, sizePerPage) {\n this.pageObj.end = _page * sizePerPage - 1;\n this.pageObj.start = this.pageObj.end - (sizePerPage - 1);\n return this;\n }\n }, {\n key: 'edit',\n value: function edit(newVal, rowIndex, fieldName) {\n var currentDisplayData = this.getCurrentDisplayData();\n var rowKeyCache = undefined;\n if (!this.enablePagination) {\n currentDisplayData[rowIndex][fieldName] = newVal;\n rowKeyCache = currentDisplayData[rowIndex][this.keyField];\n } else {\n currentDisplayData[this.pageObj.start + rowIndex][fieldName] = newVal;\n rowKeyCache = currentDisplayData[this.pageObj.start + rowIndex][this.keyField];\n }\n if (this.isOnFilter) {\n this.data.forEach(function (row) {\n if (row[this.keyField] === rowKeyCache) {\n row[fieldName] = newVal;\n }\n }, this);\n if (this.filterObj !== null) this.filter(this.filterObj);\n if (this.searchText !== null) this.search(this.searchText);\n }\n return this;\n }\n }, {\n key: 'addAtBegin',\n value: function addAtBegin(newObj) {\n if (!newObj[this.keyField] || newObj[this.keyField].toString() === '') {\n throw this.keyField + ' can\\'t be empty value.';\n }\n var currentDisplayData = this.getCurrentDisplayData();\n currentDisplayData.forEach(function (row) {\n if (row[this.keyField].toString() === newObj[this.keyField].toString()) {\n throw this.keyField + ' ' + newObj[this.keyField] + ' already exists';\n }\n }, this);\n currentDisplayData.unshift(newObj);\n if (this.isOnFilter) {\n this.data.unshift(newObj);\n }\n }\n }, {\n key: 'add',\n value: function add(newObj) {\n if (!newObj[this.keyField] || newObj[this.keyField].toString() === '') {\n throw this.keyField + ' can\\'t be empty value.';\n }\n var currentDisplayData = this.getCurrentDisplayData();\n currentDisplayData.forEach(function (row) {\n if (row[this.keyField].toString() === newObj[this.keyField].toString()) {\n throw this.keyField + ' ' + newObj[this.keyField] + ' already exists';\n }\n }, this);\n\n currentDisplayData.push(newObj);\n if (this.isOnFilter) {\n this.data.push(newObj);\n }\n }\n }, {\n key: 'remove',\n value: function remove(rowKey) {\n var _this2 = this;\n\n var currentDisplayData = this.getCurrentDisplayData();\n var result = currentDisplayData.filter(function (row) {\n return rowKey.indexOf(row[_this2.keyField]) === -1;\n });\n\n if (this.isOnFilter) {\n this.data = this.data.filter(function (row) {\n return rowKey.indexOf(row[_this2.keyField]) === -1;\n });\n this.filteredData = result;\n } else {\n this.data = result;\n }\n }\n }, {\n key: 'filter',\n value: function filter(filterObj) {\n var _this3 = this;\n\n if (Object.keys(filterObj).length === 0) {\n this.filteredData = null;\n this.isOnFilter = false;\n this.filterObj = null;\n if (this.searchText !== null) this.search(this.searchText);\n } else {\n this.filterObj = filterObj;\n this.filteredData = this.data.filter(function (row) {\n var valid = true;\n var filterVal = undefined;\n for (var key in filterObj) {\n var targetVal = row[key];\n\n switch (filterObj[key].type) {\n case _Const2['default'].FILTER_TYPE.NUMBER:\n {\n filterVal = filterObj[key].value.number;\n break;\n }\n case _Const2['default'].FILTER_TYPE.CUSTOM:\n {\n filterVal = typeof filterObj[key].value === 'object' ? undefined : typeof filterObj[key].value === 'string' ? filterObj[key].value.toLowerCase() : filterObj[key].value;\n break;\n }\n case _Const2['default'].FILTER_TYPE.REGEX:\n {\n filterVal = filterObj[key].value;\n break;\n }\n default:\n {\n filterVal = typeof filterObj[key].value === 'string' ? filterObj[key].value.toLowerCase() : filterObj[key].value;\n if (filterVal === undefined) {\n // Support old filter\n filterVal = filterObj[key].toLowerCase();\n }\n break;\n }\n }\n\n if (_this3.colInfos[key]) {\n var _colInfos$key = _this3.colInfos[key];\n var format = _colInfos$key.format;\n var filterFormatted = _colInfos$key.filterFormatted;\n var formatExtraData = _colInfos$key.formatExtraData;\n\n if (filterFormatted && format) {\n targetVal = format(row[key], row, formatExtraData);\n }\n }\n\n switch (filterObj[key].type) {\n case _Const2['default'].FILTER_TYPE.NUMBER:\n {\n valid = _this3.filterNumber(targetVal, filterVal, filterObj[key].value.comparator);\n break;\n }\n case _Const2['default'].FILTER_TYPE.DATE:\n {\n valid = _this3.filterDate(targetVal, filterVal);\n break;\n }\n case _Const2['default'].FILTER_TYPE.REGEX:\n {\n valid = _this3.filterRegex(targetVal, filterVal);\n break;\n }\n case _Const2['default'].FILTER_TYPE.CUSTOM:\n {\n valid = _this3.filterCustom(targetVal, filterVal, filterObj[key].value);\n break;\n }\n default:\n {\n valid = _this3.filterText(targetVal, filterVal);\n break;\n }\n }\n if (!valid) {\n break;\n }\n }\n return valid;\n });\n this.isOnFilter = true;\n }\n }\n }, {\n key: 'filterNumber',\n value: function filterNumber(targetVal, filterVal, comparator) {\n var valid = true;\n switch (comparator) {\n case '=':\n {\n if (targetVal != filterVal) {\n valid = false;\n }\n break;\n }\n case '>':\n {\n if (targetVal <= filterVal) {\n valid = false;\n }\n break;\n }\n case '>=':\n {\n if (targetVal < filterVal) {\n valid = false;\n }\n break;\n }\n case '<':\n {\n if (targetVal >= filterVal) {\n valid = false;\n }\n break;\n }\n case '<=':\n {\n if (targetVal > filterVal) {\n valid = false;\n }\n break;\n }\n case '!=':\n {\n if (targetVal == filterVal) {\n valid = false;\n }\n break;\n }\n default:\n {\n console.error('Number comparator provided is not supported');\n break;\n }\n }\n return valid;\n }\n }, {\n key: 'filterDate',\n value: function filterDate(targetVal, filterVal) {\n return targetVal.getDate() === filterVal.getDate() && targetVal.getMonth() === filterVal.getMonth() && targetVal.getFullYear() === filterVal.getFullYear();\n }\n }, {\n key: 'filterRegex',\n value: function filterRegex(targetVal, filterVal) {\n try {\n return new RegExp(filterVal, 'i').test(targetVal);\n } catch (e) {\n console.error('Invalid regular expression');\n return true;\n }\n }\n }, {\n key: 'filterCustom',\n value: function filterCustom(targetVal, filterVal, callbackInfo) {\n if (callbackInfo !== null && typeof callbackInfo === 'object') {\n return callbackInfo.callback(targetVal, callbackInfo.callbackParameters);\n }\n\n return this.filterText(targetVal, filterVal);\n }\n }, {\n key: 'filterText',\n value: function filterText(targetVal, filterVal) {\n if (targetVal.toString().toLowerCase().indexOf(filterVal) === -1) {\n return false;\n }\n return true;\n }\n\n /* General search function\n * It will search for the text if the input includes that text;\n */\n }, {\n key: 'search',\n value: function search(searchText) {\n var _this4 = this;\n\n if (searchText.trim() === '') {\n this.filteredData = null;\n this.isOnFilter = false;\n this.searchText = null;\n if (this.filterObj !== null) this.filter(this.filterObj);\n } else {\n (function () {\n _this4.searchText = searchText;\n var searchTextArray = [];\n\n if (_this4.multiColumnSearch) {\n searchTextArray = searchText.split(' ');\n } else {\n searchTextArray.push(searchText);\n }\n\n var source = _this4.isOnFilter ? _this4.filteredData : _this4.data;\n\n _this4.filteredData = source.filter(function (row) {\n var keys = Object.keys(row);\n var valid = false;\n // for loops are ugly, but performance matters here.\n // And you cant break from a forEach.\n // http://jsperf.com/for-vs-foreach/66\n for (var i = 0, keysLength = keys.length; i < keysLength; i++) {\n var key = keys[i];\n if (_this4.colInfos[key] && row[key]) {\n var _colInfos$key2 = _this4.colInfos[key];\n var format = _colInfos$key2.format;\n var filterFormatted = _colInfos$key2.filterFormatted;\n var formatExtraData = _colInfos$key2.formatExtraData;\n var searchable = _colInfos$key2.searchable;\n\n var targetVal = row[key];\n if (searchable) {\n if (filterFormatted && format) {\n targetVal = format(targetVal, row, formatExtraData);\n }\n for (var j = 0, textLength = searchTextArray.length; j < textLength; j++) {\n var filterVal = searchTextArray[j].toLowerCase();\n if (targetVal.toString().toLowerCase().indexOf(filterVal) !== -1) {\n valid = true;\n break;\n }\n }\n }\n }\n }\n return valid;\n });\n _this4.isOnFilter = true;\n })();\n }\n }\n }, {\n key: 'getDataIgnoringPagination',\n value: function getDataIgnoringPagination() {\n return this.getCurrentDisplayData();\n }\n }, {\n key: 'get',\n value: function get() {\n var _data = this.getCurrentDisplayData();\n\n if (_data.length === 0) return _data;\n\n if (this.remote || !this.enablePagination) {\n return _data;\n } else {\n var result = [];\n for (var i = this.pageObj.start; i <= this.pageObj.end; i++) {\n result.push(_data[i]);\n if (i + 1 === _data.length) break;\n }\n return result;\n }\n }\n }, {\n key: 'getKeyField',\n value: function getKeyField() {\n return this.keyField;\n }\n }, {\n key: 'getDataNum',\n value: function getDataNum() {\n return this.getCurrentDisplayData().length;\n }\n }, {\n key: 'isChangedPage',\n value: function isChangedPage() {\n return this.pageObj.start && this.pageObj.end ? true : false;\n }\n }, {\n key: 'getAllRowkey',\n value: function getAllRowkey() {\n var _this5 = this;\n\n return this.data.map(function (row) {\n return row[_this5.keyField];\n });\n }\n }]);\n\n return TableDataStore;\n})();\n\nexports.TableDataStore = TableDataStore;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvc3RvcmUvVGFibGVEYXRhU3RvcmUuanM/ZDgwMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztpQ0FJa0IsQ0FBVTs7OztBQUM1QixJQUFNLFlBQVksR0FBRyxtQkFBTyxDQUFDLEVBQVEsQ0FBQyxDQUFDLFlBQVksQ0FBQzs7QUFFcEQsU0FBUyxLQUFLLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO0FBQzlDLE9BQUssR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDNUIsS0FBRyxDQUFDLElBQUksQ0FBQyxVQUFDLENBQUMsRUFBRSxDQUFDLEVBQUs7QUFDakIsUUFBSSxRQUFRLEVBQUU7QUFDWixhQUFPLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztLQUN6QyxNQUFNO0FBQ0wsVUFBSSxLQUFLLEtBQUssbUJBQU0sU0FBUyxFQUFFO0FBQzdCLGVBQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFJLENBQUMsR0FBRyxDQUFFLENBQUM7T0FDbkYsTUFBTTtBQUNMLGVBQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFJLENBQUMsR0FBRyxDQUFFLENBQUM7T0FDbkY7S0FDRjtHQUNGLENBQUMsQ0FBQzs7QUFFSCxTQUFPLEdBQUcsQ0FBQztDQUNaOztJQUVZLFlBQVk7WUFBWixZQUFZOztBQUNaLFdBREEsWUFBWSxDQUNYLElBQUksRUFBRTswQkFEUCxZQUFZOztBQUVyQiwr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V0FFWSx5QkFBRztBQUNkLGFBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQztLQUM5RDs7O1dBRVcsd0JBQUc7OztBQUNiLGFBQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBRyxFQUFJO0FBQzFCLGVBQU8sR0FBRyxDQUFDLE9BQUssUUFBUSxDQUFDLENBQUM7T0FDM0IsQ0FBQyxDQUFDO0tBQ0o7OztTQW5aVSxjQUFjIiwiZmlsZSI6IjMyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50IG5vLW5lc3RlZC10ZXJuYXJ5OiAwICovXG4vKiBlc2xpbnQgZ3VhcmQtZm9yLWluOiAwICovXG4vKiBlc2xpbnQgbm8tY29uc29sZTogMCAqL1xuLyogZXNsaW50IGVxZXFlcTogMCAqL1xuaW1wb3J0IENvbnN0IGZyb20gJy4uL0NvbnN0JztcbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlcjtcblxuZnVuY3Rpb24gX3NvcnQoYXJyLCBzb3J0RmllbGQsIG9yZGVyLCBzb3J0RnVuYykge1xuICBvcmRlciA9IG9yZGVyLnRvTG93ZXJDYXNlKCk7XG4gIGFyci5zb3J0KChhLCBiKSA9PiB7XG4gICAgaWYgKHNvcnRGdW5jKSB7XG4gICAgICByZXR1cm4gc29ydEZ1bmMoYSwgYiwgb3JkZXIsIHNvcnRGaWVsZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChvcmRlciA9PT0gQ29uc3QuU09SVF9ERVNDKSB7XG4gICAgICAgIHJldHVybiBhW3NvcnRGaWVsZF0gPiBiW3NvcnRGaWVsZF0gPyAtMSA6ICgoYVtzb3J0RmllbGRdIDwgYltzb3J0RmllbGRdKSA/IDEgOiAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhW3NvcnRGaWVsZF0gPCBiW3NvcnRGaWVsZF0gPyAtMSA6ICgoYVtzb3J0RmllbGRdID4gYltzb3J0RmllbGRdKSA/IDEgOiAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBhcnI7XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJsZURhdGFTZXQgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICBjb25zdHJ1Y3RvcihkYXRhKSB7XG4gICAgc3VwZXIoZGF0YSk7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgfVxuXG4gIHNldERhdGEoZGF0YSkge1xuICAgIHRoaXMuZW1pdCgnY2hhbmdlJywgZGF0YSk7XG4gIH1cblxuICBjbGVhcigpIHtcbiAgICB0aGlzLmRhdGEgPSBudWxsO1xuICB9XG5cbiAgZ2V0RGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJsZURhdGFTdG9yZSB7XG5cbiAgY29uc3RydWN0b3IoZGF0YSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5jb2xJbmZvcyA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJlZERhdGEgPSBudWxsO1xuICAgIHRoaXMuaXNPbkZpbHRlciA9IGZhbHNlO1xuICAgIHRoaXMuZmlsdGVyT2JqID0gbnVsbDtcbiAgICB0aGlzLnNlYXJjaFRleHQgPSBudWxsO1xuICAgIHRoaXMuc29ydE9iaiA9IG51bGw7XG4gICAgdGhpcy5wYWdlT2JqID0ge307XG4gICAgdGhpcy5zZWxlY3RlZCA9IFtdO1xuICAgIHRoaXMubXVsdGlDb2x1bW5TZWFyY2ggPSBmYWxzZTtcbiAgICB0aGlzLnNob3dPbmx5U2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnJlbW90ZSA9IGZhbHNlOyAvLyByZW1vdGUgZGF0YVxuICB9XG5cbiAgc2V0UHJvcHMocHJvcHMpIHtcbiAgICB0aGlzLmtleUZpZWxkID0gcHJvcHMua2V5RmllbGQ7XG4gICAgdGhpcy5lbmFibGVQYWdpbmF0aW9uID0gcHJvcHMuaXNQYWdpbmF0aW9uO1xuICAgIHRoaXMuY29sSW5mb3MgPSBwcm9wcy5jb2xJbmZvcztcbiAgICB0aGlzLnJlbW90ZSA9IHByb3BzLnJlbW90ZTtcbiAgICB0aGlzLm11bHRpQ29sdW1uU2VhcmNoID0gcHJvcHMubXVsdGlDb2x1bW5TZWFyY2g7XG4gIH1cblxuICBzZXREYXRhKGRhdGEpIHtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIGlmICh0aGlzLmlzT25GaWx0ZXIpIHtcbiAgICAgIGlmICh0aGlzLmZpbHRlck9iaiAhPT0gbnVsbCkgdGhpcy5maWx0ZXIodGhpcy5maWx0ZXJPYmopO1xuICAgICAgaWYgKHRoaXMuc2VhcmNoVGV4dCAhPT0gbnVsbCkgdGhpcy5zZWFyY2godGhpcy5zZWFyY2hUZXh0KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc29ydE9iaikge1xuICAgICAgdGhpcy5zb3J0KHRoaXMuc29ydE9iai5vcmRlciwgdGhpcy5zb3J0T2JqLnNvcnRGaWVsZCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0U29ydEluZm8oKSB7XG4gICAgcmV0dXJuIHRoaXMuc29ydE9iajtcbiAgfVxuXG4gIHNldFNlbGVjdGVkUm93S2V5KHNlbGVjdGVkUm93S2V5cykge1xuICAgIHRoaXMuc2VsZWN0ZWQgPSBzZWxlY3RlZFJvd0tleXM7XG4gIH1cblxuICBnZXRTZWxlY3RlZFJvd0tleXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQ7XG4gIH1cblxuICBnZXRDdXJyZW50RGlzcGxheURhdGEoKSB7XG4gICAgaWYgKHRoaXMuaXNPbkZpbHRlcikgcmV0dXJuIHRoaXMuZmlsdGVyZWREYXRhO1xuICAgIGVsc2UgcmV0dXJuIHRoaXMuZGF0YTtcbiAgfVxuXG4gIGlnbm9yZU5vblNlbGVjdGVkKCkge1xuICAgIHRoaXMuc2hvd09ubHlTZWxlY3RlZCA9ICF0aGlzLnNob3dPbmx5U2VsZWN0ZWQ7XG4gICAgaWYgKHRoaXMuc2hvd09ubHlTZWxlY3RlZCkge1xuICAgICAgdGhpcy5pc09uRmlsdGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gdGhpcy5kYXRhLmZpbHRlciggcm93ID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5zZWxlY3RlZC5maW5kKHggPT4gcm93W3RoaXMua2V5RmllbGRdID09PSB4KTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiByZXN1bHQgIT09ICd1bmRlZmluZWQnID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNPbkZpbHRlciA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHNvcnQob3JkZXIsIHNvcnRGaWVsZCkge1xuICAgIHRoaXMuc29ydE9iaiA9IHsgb3JkZXIsIHNvcnRGaWVsZCB9O1xuXG4gICAgbGV0IGN1cnJlbnREaXNwbGF5RGF0YSA9IHRoaXMuZ2V0Q3VycmVudERpc3BsYXlEYXRhKCk7XG4gICAgaWYgKCF0aGlzLmNvbEluZm9zW3NvcnRGaWVsZF0pIHJldHVybiB0aGlzO1xuXG4gICAgY29uc3QgeyBzb3J0RnVuYyB9ID0gdGhpcy5jb2xJbmZvc1tzb3J0RmllbGRdO1xuICAgIGN1cnJlbnREaXNwbGF5RGF0YSA9IF9zb3J0KGN1cnJlbnREaXNwbGF5RGF0YSwgc29ydEZpZWxkLCBvcmRlciwgc29ydEZ1bmMpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwYWdlKHBhZ2UsIHNpemVQZXJQYWdlKSB7XG4gICAgdGhpcy5wYWdlT2JqLmVuZCA9IHBhZ2UgKiBzaXplUGVyUGFnZSAtIDE7XG4gICAgdGhpcy5wYWdlT2JqLnN0YXJ0ID0gdGhpcy5wYWdlT2JqLmVuZCAtIChzaXplUGVyUGFnZSAtIDEpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZWRpdChuZXdWYWwsIHJvd0luZGV4LCBmaWVsZE5hbWUpIHtcbiAgICBjb25zdCBjdXJyZW50RGlzcGxheURhdGEgPSB0aGlzLmdldEN1cnJlbnREaXNwbGF5RGF0YSgpO1xuICAgIGxldCByb3dLZXlDYWNoZTtcbiAgICBpZiAoIXRoaXMuZW5hYmxlUGFnaW5hdGlvbikge1xuICAgICAgY3VycmVudERpc3BsYXlEYXRhW3Jvd0luZGV4XVtmaWVsZE5hbWVdID0gbmV3VmFsO1xuICAgICAgcm93S2V5Q2FjaGUgPSBjdXJyZW50RGlzcGxheURhdGFbcm93SW5kZXhdW3RoaXMua2V5RmllbGRdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50RGlzcGxheURhdGFbdGhpcy5wYWdlT2JqLnN0YXJ0ICsgcm93SW5kZXhdW2ZpZWxkTmFtZV0gPSBuZXdWYWw7XG4gICAgICByb3dLZXlDYWNoZSA9IGN1cnJlbnREaXNwbGF5RGF0YVt0aGlzLnBhZ2VPYmouc3RhcnQgKyByb3dJbmRleF1bdGhpcy5rZXlGaWVsZF07XG4gICAgfVxuICAgIGlmICh0aGlzLmlzT25GaWx0ZXIpIHtcbiAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKHJvdykge1xuICAgICAgICBpZiAocm93W3RoaXMua2V5RmllbGRdID09PSByb3dLZXlDYWNoZSkge1xuICAgICAgICAgIHJvd1tmaWVsZE5hbWVdID0gbmV3VmFsO1xuICAgICAgICB9XG4gICAgICB9LCB0aGlzKTtcbiAgICAgIGlmICh0aGlzLmZpbHRlck9iaiAhPT0gbnVsbCkgdGhpcy5maWx0ZXIodGhpcy5maWx0ZXJPYmopO1xuICAgICAgaWYgKHRoaXMuc2VhcmNoVGV4dCAhPT0gbnVsbCkgdGhpcy5zZWFyY2godGhpcy5zZWFyY2hUZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhZGRBdEJlZ2luKG5ld09iaikge1xuICAgIGlmICghbmV3T2JqW3RoaXMua2V5RmllbGRdIHx8IG5ld09ialt0aGlzLmtleUZpZWxkXS50b1N0cmluZygpID09PSAnJykge1xuICAgICAgdGhyb3cgYCR7dGhpcy5rZXlGaWVsZH0gY2FuJ3QgYmUgZW1wdHkgdmFsdWUuYDtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudERpc3BsYXlEYXRhID0gdGhpcy5nZXRDdXJyZW50RGlzcGxheURhdGEoKTtcbiAgICBjdXJyZW50RGlzcGxheURhdGEuZm9yRWFjaChmdW5jdGlvbihyb3cpIHtcbiAgICAgIGlmIChyb3dbdGhpcy5rZXlGaWVsZF0udG9TdHJpbmcoKSA9PT0gbmV3T2JqW3RoaXMua2V5RmllbGRdLnRvU3RyaW5nKCkpIHtcbiAgICAgICAgdGhyb3cgYCR7dGhpcy5rZXlGaWVsZH0gJHtuZXdPYmpbdGhpcy5rZXlGaWVsZF19IGFscmVhZHkgZXhpc3RzYDtcbiAgICAgIH1cbiAgICB9LCB0aGlzKTtcbiAgICBjdXJyZW50RGlzcGxheURhdGEudW5zaGlmdChuZXdPYmopO1xuICAgIGlmICh0aGlzLmlzT25GaWx0ZXIpIHtcbiAgICAgIHRoaXMuZGF0YS51bnNoaWZ0KG5ld09iaik7XG4gICAgfVxuICB9XG5cbiAgYWRkKG5ld09iaikge1xuICAgIGlmICghbmV3T2JqW3RoaXMua2V5RmllbGRdIHx8IG5ld09ialt0aGlzLmtleUZpZWxkXS50b1N0cmluZygpID09PSAnJykge1xuICAgICAgdGhyb3cgYCR7dGhpcy5rZXlGaWVsZH0gY2FuJ3QgYmUgZW1wdHkgdmFsdWUuYDtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudERpc3BsYXlEYXRhID0gdGhpcy5nZXRDdXJyZW50RGlzcGxheURhdGEoKTtcbiAgICBjdXJyZW50RGlzcGxheURhdGEuZm9yRWFjaChmdW5jdGlvbihyb3cpIHtcbiAgICAgIGlmIChyb3dbdGhpcy5rZXlGaWVsZF0udG9TdHJpbmcoKSA9PT0gbmV3T2JqW3RoaXMua2V5RmllbGRdLnRvU3RyaW5nKCkpIHtcbiAgICAgICAgdGhyb3cgYCR7dGhpcy5rZXlGaWVsZH0gJHtuZXdPYmpbdGhpcy5rZXlGaWVsZF19IGFscmVhZHkgZXhpc3RzYDtcbiAgICAgIH1cbiAgICB9LCB0aGlzKTtcblxuICAgIGN1cnJlbnREaXNwbGF5RGF0YS5wdXNoKG5ld09iaik7XG4gICAgaWYgKHRoaXMuaXNPbkZpbHRlcikge1xuICAgICAgdGhpcy5kYXRhLnB1c2gobmV3T2JqKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmUocm93S2V5KSB7XG4gICAgY29uc3QgY3VycmVudERpc3BsYXlEYXRhID0gdGhpcy5nZXRDdXJyZW50RGlzcGxheURhdGEoKTtcbiAgICBjb25zdCByZXN1bHQgPSBjdXJyZW50RGlzcGxheURhdGEuZmlsdGVyKHJvdyA9PiB7XG4gICAgICByZXR1cm4gcm93S2V5LmluZGV4T2Yocm93W3RoaXMua2V5RmllbGRdKSA9PT0gLTE7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5pc09uRmlsdGVyKSB7XG4gICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuZmlsdGVyKHJvdyA9PiB7XG4gICAgICAgIHJldHVybiByb3dLZXkuaW5kZXhPZihyb3dbdGhpcy5rZXlGaWVsZF0pID09PSAtMTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSByZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YSA9IHJlc3VsdDtcbiAgICB9XG4gIH1cblxuICBmaWx0ZXIoZmlsdGVyT2JqKSB7XG4gICAgaWYgKE9iamVjdC5rZXlzKGZpbHRlck9iaikubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IG51bGw7XG4gICAgICB0aGlzLmlzT25GaWx0ZXIgPSBmYWxzZTtcbiAgICAgIHRoaXMuZmlsdGVyT2JqID0gbnVsbDtcbiAgICAgIGlmICh0aGlzLnNlYXJjaFRleHQgIT09IG51bGwpIHRoaXMuc2VhcmNoKHRoaXMuc2VhcmNoVGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyT2JqID0gZmlsdGVyT2JqO1xuICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSB0aGlzLmRhdGEuZmlsdGVyKCByb3cgPT4ge1xuICAgICAgICBsZXQgdmFsaWQgPSB0cnVlO1xuICAgICAgICBsZXQgZmlsdGVyVmFsO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBmaWx0ZXJPYmopIHtcbiAgICAgICAgICBsZXQgdGFyZ2V0VmFsID0gcm93W2tleV07XG5cbiAgICAgICAgICBzd2l0Y2ggKGZpbHRlck9ialtrZXldLnR5cGUpIHtcbiAgICAgICAgICBjYXNlIENvbnN0LkZJTFRFUl9UWVBFLk5VTUJFUjoge1xuICAgICAgICAgICAgZmlsdGVyVmFsID0gZmlsdGVyT2JqW2tleV0udmFsdWUubnVtYmVyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQ29uc3QuRklMVEVSX1RZUEUuQ1VTVE9NOiB7XG4gICAgICAgICAgICBmaWx0ZXJWYWwgPSAodHlwZW9mIGZpbHRlck9ialtrZXldLnZhbHVlID09PSAnb2JqZWN0JykgP1xuICAgICAgICAgICAgICB1bmRlZmluZWQgOlxuICAgICAgICAgICAgICAodHlwZW9mIGZpbHRlck9ialtrZXldLnZhbHVlID09PSAnc3RyaW5nJykgP1xuICAgICAgICAgICAgICAgIGZpbHRlck9ialtrZXldLnZhbHVlLnRvTG93ZXJDYXNlKCkgOlxuICAgICAgICAgICAgICAgIGZpbHRlck9ialtrZXldLnZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQ29uc3QuRklMVEVSX1RZUEUuUkVHRVg6IHtcbiAgICAgICAgICAgIGZpbHRlclZhbCA9IGZpbHRlck9ialtrZXldLnZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGZpbHRlclZhbCA9ICh0eXBlb2YgZmlsdGVyT2JqW2tleV0udmFsdWUgPT09ICdzdHJpbmcnKSA/XG4gICAgICAgICAgICAgIGZpbHRlck9ialtrZXldLnZhbHVlLnRvTG93ZXJDYXNlKCkgOlxuICAgICAgICAgICAgICBmaWx0ZXJPYmpba2V5XS52YWx1ZTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJWYWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAvLyBTdXBwb3J0IG9sZCBmaWx0ZXJcbiAgICAgICAgICAgICAgZmlsdGVyVmFsID0gZmlsdGVyT2JqW2tleV0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy5jb2xJbmZvc1trZXldKSB7XG4gICAgICAgICAgICBjb25zdCB7IGZvcm1hdCwgZmlsdGVyRm9ybWF0dGVkLCBmb3JtYXRFeHRyYURhdGEgfSA9IHRoaXMuY29sSW5mb3Nba2V5XTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJGb3JtYXR0ZWQgJiYgZm9ybWF0KSB7XG4gICAgICAgICAgICAgIHRhcmdldFZhbCA9IGZvcm1hdChyb3dba2V5XSwgcm93LCBmb3JtYXRFeHRyYURhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHN3aXRjaCAoZmlsdGVyT2JqW2tleV0udHlwZSkge1xuICAgICAgICAgIGNhc2UgQ29uc3QuRklMVEVSX1RZUEUuTlVNQkVSOiB7XG4gICAgICAgICAgICB2YWxpZCA9IHRoaXMuZmlsdGVyTnVtYmVyKHRhcmdldFZhbCwgZmlsdGVyVmFsLCBmaWx0ZXJPYmpba2V5XS52YWx1ZS5jb21wYXJhdG9yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIENvbnN0LkZJTFRFUl9UWVBFLkRBVEU6IHtcbiAgICAgICAgICAgIHZhbGlkID0gdGhpcy5maWx0ZXJEYXRlKHRhcmdldFZhbCwgZmlsdGVyVmFsKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIENvbnN0LkZJTFRFUl9UWVBFLlJFR0VYOiB7XG4gICAgICAgICAgICB2YWxpZCA9IHRoaXMuZmlsdGVyUmVnZXgodGFyZ2V0VmFsLCBmaWx0ZXJWYWwpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgQ29uc3QuRklMVEVSX1RZUEUuQ1VTVE9NOiB7XG4gICAgICAgICAgICB2YWxpZCA9IHRoaXMuZmlsdGVyQ3VzdG9tKHRhcmdldFZhbCwgZmlsdGVyVmFsLCBmaWx0ZXJPYmpba2V5XS52YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgdmFsaWQgPSB0aGlzLmZpbHRlclRleHQodGFyZ2V0VmFsLCBmaWx0ZXJWYWwpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmlzT25GaWx0ZXIgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGZpbHRlck51bWJlcih0YXJnZXRWYWwsIGZpbHRlclZhbCwgY29tcGFyYXRvcikge1xuICAgIGxldCB2YWxpZCA9IHRydWU7XG4gICAgc3dpdGNoIChjb21wYXJhdG9yKSB7XG4gICAgY2FzZSAnPSc6IHtcbiAgICAgIGlmICh0YXJnZXRWYWwgIT0gZmlsdGVyVmFsKSB7XG4gICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAnPic6IHtcbiAgICAgIGlmICh0YXJnZXRWYWwgPD0gZmlsdGVyVmFsKSB7XG4gICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAnPj0nOiB7XG4gICAgICBpZiAodGFyZ2V0VmFsIDwgZmlsdGVyVmFsKSB7XG4gICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAnPCc6IHtcbiAgICAgIGlmICh0YXJnZXRWYWwgPj0gZmlsdGVyVmFsKSB7XG4gICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAnPD0nOiB7XG4gICAgICBpZiAodGFyZ2V0VmFsID4gZmlsdGVyVmFsKSB7XG4gICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAnIT0nOiB7XG4gICAgICBpZiAodGFyZ2V0VmFsID09IGZpbHRlclZhbCkge1xuICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ051bWJlciBjb21wYXJhdG9yIHByb3ZpZGVkIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkO1xuICB9XG5cbiAgZmlsdGVyRGF0ZSh0YXJnZXRWYWwsIGZpbHRlclZhbCkge1xuICAgIHJldHVybiAodGFyZ2V0VmFsLmdldERhdGUoKSA9PT0gZmlsdGVyVmFsLmdldERhdGUoKSAmJlxuICAgICAgICB0YXJnZXRWYWwuZ2V0TW9udGgoKSA9PT0gZmlsdGVyVmFsLmdldE1vbnRoKCkgJiZcbiAgICAgICAgdGFyZ2V0VmFsLmdldEZ1bGxZZWFyKCkgPT09IGZpbHRlclZhbC5nZXRGdWxsWWVhcigpKTtcbiAgfVxuXG4gIGZpbHRlclJlZ2V4KHRhcmdldFZhbCwgZmlsdGVyVmFsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBuZXcgUmVnRXhwKGZpbHRlclZhbCwgJ2knKS50ZXN0KHRhcmdldFZhbCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24nKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGZpbHRlckN1c3RvbSh0YXJnZXRWYWwsIGZpbHRlclZhbCwgY2FsbGJhY2tJbmZvKSB7XG4gICAgaWYgKGNhbGxiYWNrSW5mbyAhPT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2tJbmZvID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrSW5mby5jYWxsYmFjayh0YXJnZXRWYWwsIGNhbGxiYWNrSW5mby5jYWxsYmFja1BhcmFtZXRlcnMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmZpbHRlclRleHQodGFyZ2V0VmFsLCBmaWx0ZXJWYWwpO1xuICB9XG5cbiAgZmlsdGVyVGV4dCh0YXJnZXRWYWwsIGZpbHRlclZhbCkge1xuICAgIGlmICh0YXJnZXRWYWwudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZmlsdGVyVmFsKSA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiBHZW5lcmFsIHNlYXJjaCBmdW5jdGlvblxuICAgKiBJdCB3aWxsIHNlYXJjaCBmb3IgdGhlIHRleHQgaWYgdGhlIGlucHV0IGluY2x1ZGVzIHRoYXQgdGV4dDtcbiAgICovXG4gIHNlYXJjaChzZWFyY2hUZXh0KSB7XG4gICAgaWYgKHNlYXJjaFRleHQudHJpbSgpID09PSAnJykge1xuICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSBudWxsO1xuICAgICAgdGhpcy5pc09uRmlsdGVyID0gZmFsc2U7XG4gICAgICB0aGlzLnNlYXJjaFRleHQgPSBudWxsO1xuICAgICAgaWYgKHRoaXMuZmlsdGVyT2JqICE9PSBudWxsKSB0aGlzLmZpbHRlcih0aGlzLmZpbHRlck9iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHNlYXJjaFRleHQ7XG4gICAgICBsZXQgc2VhcmNoVGV4dEFycmF5ID0gW107XG5cbiAgICAgIGlmICh0aGlzLm11bHRpQ29sdW1uU2VhcmNoKSB7XG4gICAgICAgIHNlYXJjaFRleHRBcnJheSA9IHNlYXJjaFRleHQuc3BsaXQoJyAnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlYXJjaFRleHRBcnJheS5wdXNoKHNlYXJjaFRleHQpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzb3VyY2UgPSB0aGlzLmlzT25GaWx0ZXIgPyB0aGlzLmZpbHRlcmVkRGF0YSA6IHRoaXMuZGF0YTtcblxuICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSBzb3VyY2UuZmlsdGVyKCByb3cgPT4ge1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocm93KTtcbiAgICAgICAgbGV0IHZhbGlkID0gZmFsc2U7XG4gICAgICAgIC8vIGZvciBsb29wcyBhcmUgdWdseSwgYnV0IHBlcmZvcm1hbmNlIG1hdHRlcnMgaGVyZS5cbiAgICAgICAgLy8gQW5kIHlvdSBjYW50IGJyZWFrIGZyb20gYSBmb3JFYWNoLlxuICAgICAgICAvLyBodHRwOi8vanNwZXJmLmNvbS9mb3ItdnMtZm9yZWFjaC82NlxuICAgICAgICBmb3IgKGxldCBpID0gMCwga2V5c0xlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwga2V5c0xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICBpZiAodGhpcy5jb2xJbmZvc1trZXldICYmIHJvd1trZXldKSB7XG4gICAgICAgICAgICBjb25zdCB7IGZvcm1hdCwgZmlsdGVyRm9ybWF0dGVkLCBmb3JtYXRFeHRyYURhdGEsIHNlYXJjaGFibGUgfSA9IHRoaXMuY29sSW5mb3Nba2V5XTtcbiAgICAgICAgICAgIGxldCB0YXJnZXRWYWwgPSByb3dba2V5XTtcbiAgICAgICAgICAgIGlmIChzZWFyY2hhYmxlKSB7XG4gICAgICAgICAgICAgIGlmIChmaWx0ZXJGb3JtYXR0ZWQgJiYgZm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0VmFsID0gZm9ybWF0KHRhcmdldFZhbCwgcm93LCBmb3JtYXRFeHRyYURhdGEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGZvciAobGV0IGogPSAwLCB0ZXh0TGVuZ3RoID0gc2VhcmNoVGV4dEFycmF5Lmxlbmd0aDsgaiA8IHRleHRMZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlclZhbCA9IHNlYXJjaFRleHRBcnJheVtqXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXRWYWwudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZmlsdGVyVmFsKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgIHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsaWQ7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuaXNPbkZpbHRlciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0RGF0YUlnbm9yaW5nUGFnaW5hdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDdXJyZW50RGlzcGxheURhdGEoKTtcbiAgfVxuXG4gIGdldCgpIHtcbiAgICBjb25zdCBfZGF0YSA9IHRoaXMuZ2V0Q3VycmVudERpc3BsYXlEYXRhKCk7XG5cbiAgICBpZiAoX2RhdGEubGVuZ3RoID09PSAwKSByZXR1cm4gX2RhdGE7XG5cbiAgICBpZiAodGhpcy5yZW1vdGUgfHwgIXRoaXMuZW5hYmxlUGFnaW5hdGlvbikge1xuICAgICAgcmV0dXJuIF9kYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSB0aGlzLnBhZ2VPYmouc3RhcnQ7IGkgPD0gdGhpcy5wYWdlT2JqLmVuZDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKF9kYXRhW2ldKTtcbiAgICAgICAgaWYgKGkgKyAxID09PSBfZGF0YS5sZW5ndGgpIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cblxuICBnZXRLZXlGaWVsZCgpIHtcbiAgICByZXR1cm4gdGhpcy5rZXlGaWVsZDtcbiAgfVxuXG4gIGdldERhdGFOdW0oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q3VycmVudERpc3BsYXlEYXRhKCkubGVuZ3RoO1xuICB9XG5cbiAgaXNDaGFuZ2VkUGFnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlT2JqLnN0YXJ0ICYmIHRoaXMucGFnZU9iai5lbmQgPyB0cnVlIDogZmFsc2U7XG4gIH1cblxuICBnZXRBbGxSb3drZXkoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5tYXAocm93ID0+IHtcbiAgICAgIHJldHVybiByb3dbdGhpcy5rZXlGaWVsZF07XG4gICAgfSk7XG4gIH1cbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL3N0b3JlL1RhYmxlRGF0YVN0b3JlLmpzXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ=="); +},function(module,exports){eval("// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfunction EventEmitter() {\n this._events = this._events || {};\n this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n if (!isNumber(n) || n < 0 || isNaN(n))\n throw TypeError('n must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n var er, handler, len, args, i, listeners;\n\n if (!this._events)\n this._events = {};\n\n // If there is no 'error' event listener then throw.\n if (type === 'error') {\n if (!this._events.error ||\n (isObject(this._events.error) && !this._events.error.length)) {\n er = arguments[1];\n if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n }\n throw TypeError('Uncaught, unspecified \"error\" event.');\n }\n }\n\n handler = this._events[type];\n\n if (isUndefined(handler))\n return false;\n\n if (isFunction(handler)) {\n switch (arguments.length) {\n // fast cases\n case 1:\n handler.call(this);\n break;\n case 2:\n handler.call(this, arguments[1]);\n break;\n case 3:\n handler.call(this, arguments[1], arguments[2]);\n break;\n // slower\n default:\n len = arguments.length;\n args = new Array(len - 1);\n for (i = 1; i < len; i++)\n args[i - 1] = arguments[i];\n handler.apply(this, args);\n }\n } else if (isObject(handler)) {\n len = arguments.length;\n args = new Array(len - 1);\n for (i = 1; i < len; i++)\n args[i - 1] = arguments[i];\n\n listeners = handler.slice();\n len = listeners.length;\n for (i = 0; i < len; i++)\n listeners[i].apply(this, args);\n }\n\n return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n var m;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events)\n this._events = {};\n\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (this._events.newListener)\n this.emit('newListener', type,\n isFunction(listener.listener) ?\n listener.listener : listener);\n\n if (!this._events[type])\n // Optimize the case of one listener. Don't need the extra array object.\n this._events[type] = listener;\n else if (isObject(this._events[type]))\n // If we've already got an array, just append.\n this._events[type].push(listener);\n else\n // Adding the second element, need to change to array.\n this._events[type] = [this._events[type], listener];\n\n // Check for listener leak\n if (isObject(this._events[type]) && !this._events[type].warned) {\n var m;\n if (!isUndefined(this._maxListeners)) {\n m = this._maxListeners;\n } else {\n m = EventEmitter.defaultMaxListeners;\n }\n\n if (m && m > 0 && this._events[type].length > m) {\n this._events[type].warned = true;\n console.error('(node) warning: possible EventEmitter memory ' +\n 'leak detected. %d listeners added. ' +\n 'Use emitter.setMaxListeners() to increase limit.',\n this._events[type].length);\n if (typeof console.trace === 'function') {\n // not supported in IE 10\n console.trace();\n }\n }\n }\n\n return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n var fired = false;\n\n function g() {\n this.removeListener(type, g);\n\n if (!fired) {\n fired = true;\n listener.apply(this, arguments);\n }\n }\n\n g.listener = listener;\n this.on(type, g);\n\n return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n var list, position, length, i;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events || !this._events[type])\n return this;\n\n list = this._events[type];\n length = list.length;\n position = -1;\n\n if (list === listener ||\n (isFunction(list.listener) && list.listener === listener)) {\n delete this._events[type];\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n\n } else if (isObject(list)) {\n for (i = length; i-- > 0;) {\n if (list[i] === listener ||\n (list[i].listener && list[i].listener === listener)) {\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (list.length === 1) {\n list.length = 0;\n delete this._events[type];\n } else {\n list.splice(position, 1);\n }\n\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n }\n\n return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n var key, listeners;\n\n if (!this._events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!this._events.removeListener) {\n if (arguments.length === 0)\n this._events = {};\n else if (this._events[type])\n delete this._events[type];\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n for (key in this._events) {\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = {};\n return this;\n }\n\n listeners = this._events[type];\n\n if (isFunction(listeners)) {\n this.removeListener(type, listeners);\n } else {\n // LIFO order\n while (listeners.length)\n this.removeListener(type, listeners[listeners.length - 1]);\n }\n delete this._events[type];\n\n return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n var ret;\n if (!this._events || !this._events[type])\n ret = [];\n else if (isFunction(this._events[type]))\n ret = [this._events[type]];\n else\n ret = this._events[type].slice();\n return ret;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n var ret;\n if (!emitter._events || !emitter._events[type])\n ret = 0;\n else if (isFunction(emitter._events[type]))\n ret = 1;\n else\n ret = emitter._events[type].length;\n return ret;\n};\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2V2ZW50cy9ldmVudHMuanM/N2M3MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixTQUFTO0FBQzVCO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCOztBQUVBO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRztBQUNILG9CQUFvQixTQUFTO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsImZpbGUiOiIzMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gIHRoaXMuX2V2ZW50cyA9IHRoaXMuX2V2ZW50cyB8fCB7fTtcbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gdGhpcy5fbWF4TGlzdGVuZXJzIHx8IHVuZGVmaW5lZDtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLnhcbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDtcblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG4vLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxuRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcblxuLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMgZnVuY3Rpb24gYWxsb3dzXG4vLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9yIHVubGltaXRlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24obikge1xuICBpZiAoIWlzTnVtYmVyKG4pIHx8IG4gPCAwIHx8IGlzTmFOKG4pKVxuICAgIHRocm93IFR5cGVFcnJvcignbiBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7XG4gIHRoaXMuX21heExpc3RlbmVycyA9IG47XG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24odHlwZSkge1xuICB2YXIgZXIsIGhhbmRsZXIsIGxlbiwgYXJncywgaSwgbGlzdGVuZXJzO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKVxuICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuXG4gIC8vIElmIHRoZXJlIGlzIG5vICdlcnJvcicgZXZlbnQgbGlzdGVuZXIgdGhlbiB0aHJvdy5cbiAgaWYgKHR5cGUgPT09ICdlcnJvcicpIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50cy5lcnJvciB8fFxuICAgICAgICAoaXNPYmplY3QodGhpcy5fZXZlbnRzLmVycm9yKSAmJiAhdGhpcy5fZXZlbnRzLmVycm9yLmxlbmd0aCkpIHtcbiAgICAgIGVyID0gYXJndW1lbnRzWzFdO1xuICAgICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gICAgICB9XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ1VuY2F1Z2h0LCB1bnNwZWNpZmllZCBcImVycm9yXCIgZXZlbnQuJyk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlciA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcblxuICBpZiAoaXNVbmRlZmluZWQoaGFuZGxlcikpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChpc0Z1bmN0aW9uKGhhbmRsZXIpKSB7XG4gICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAvLyBmYXN0IGNhc2VzXG4gICAgICBjYXNlIDE6XG4gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzLCBhcmd1bWVudHNbMV0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgaGFuZGxlci5jYWxsKHRoaXMsIGFyZ3VtZW50c1sxXSwgYXJndW1lbnRzWzJdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICAvLyBzbG93ZXJcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0gMSk7XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBsZW47IGkrKylcbiAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgaGFuZGxlci5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QoaGFuZGxlcikpIHtcbiAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0gMSk7XG4gICAgZm9yIChpID0gMTsgaSA8IGxlbjsgaSsrKVxuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG5cbiAgICBsaXN0ZW5lcnMgPSBoYW5kbGVyLnNsaWNlKCk7XG4gICAgbGVuID0gbGlzdGVuZXJzLmxlbmd0aDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspXG4gICAgICBsaXN0ZW5lcnNbaV0uYXBwbHkodGhpcywgYXJncyk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgbTtcblxuICBpZiAoIWlzRnVuY3Rpb24obGlzdGVuZXIpKVxuICAgIHRocm93IFR5cGVFcnJvcignbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpXG4gICAgdGhpcy5fZXZlbnRzID0ge307XG5cbiAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PT0gXCJuZXdMaXN0ZW5lclwiISBCZWZvcmVcbiAgLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5lcnMsIGZpcnN0IGVtaXQgXCJuZXdMaXN0ZW5lclwiLlxuICBpZiAodGhpcy5fZXZlbnRzLm5ld0xpc3RlbmVyKVxuICAgIHRoaXMuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLFxuICAgICAgICAgICAgICBpc0Z1bmN0aW9uKGxpc3RlbmVyLmxpc3RlbmVyKSA/XG4gICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyIDogbGlzdGVuZXIpO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgIC8vIE9wdGltaXplIHRoZSBjYXNlIG9mIG9uZSBsaXN0ZW5lci4gRG9uJ3QgbmVlZCB0aGUgZXh0cmEgYXJyYXkgb2JqZWN0LlxuICAgIHRoaXMuX2V2ZW50c1t0eXBlXSA9IGxpc3RlbmVyO1xuICBlbHNlIGlmIChpc09iamVjdCh0aGlzLl9ldmVudHNbdHlwZV0pKVxuICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgZ290IGFuIGFycmF5LCBqdXN0IGFwcGVuZC5cbiAgICB0aGlzLl9ldmVudHNbdHlwZV0ucHVzaChsaXN0ZW5lcik7XG4gIGVsc2VcbiAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVkIHRvIGNoYW5nZSB0byBhcnJheS5cbiAgICB0aGlzLl9ldmVudHNbdHlwZV0gPSBbdGhpcy5fZXZlbnRzW3R5cGVdLCBsaXN0ZW5lcl07XG5cbiAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWtcbiAgaWYgKGlzT2JqZWN0KHRoaXMuX2V2ZW50c1t0eXBlXSkgJiYgIXRoaXMuX2V2ZW50c1t0eXBlXS53YXJuZWQpIHtcbiAgICB2YXIgbTtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKHRoaXMuX21heExpc3RlbmVycykpIHtcbiAgICAgIG0gPSB0aGlzLl9tYXhMaXN0ZW5lcnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycztcbiAgICB9XG5cbiAgICBpZiAobSAmJiBtID4gMCAmJiB0aGlzLl9ldmVudHNbdHlwZV0ubGVuZ3RoID4gbSkge1xuICAgICAgdGhpcy5fZXZlbnRzW3R5cGVdLndhcm5lZCA9IHRydWU7XG4gICAgICBjb25zb2xlLmVycm9yKCcobm9kZSkgd2FybmluZzogcG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSAnICtcbiAgICAgICAgICAgICAgICAgICAgJ2xlYWsgZGV0ZWN0ZWQuICVkIGxpc3RlbmVycyBhZGRlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICdVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdC4nLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHNbdHlwZV0ubGVuZ3RoKTtcbiAgICAgIGlmICh0eXBlb2YgY29uc29sZS50cmFjZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBub3Qgc3VwcG9ydGVkIGluIElFIDEwXG4gICAgICAgIGNvbnNvbGUudHJhY2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikge1xuICBpZiAoIWlzRnVuY3Rpb24obGlzdGVuZXIpKVxuICAgIHRocm93IFR5cGVFcnJvcignbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cbiAgdmFyIGZpcmVkID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gZygpIHtcbiAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGcpO1xuXG4gICAgaWYgKCFmaXJlZCkge1xuICAgICAgZmlyZWQgPSB0cnVlO1xuICAgICAgbGlzdGVuZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH1cblxuICBnLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHRoaXMub24odHlwZSwgZyk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBlbWl0cyBhICdyZW1vdmVMaXN0ZW5lcicgZXZlbnQgaWZmIHRoZSBsaXN0ZW5lciB3YXMgcmVtb3ZlZFxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBsaXN0LCBwb3NpdGlvbiwgbGVuZ3RoLCBpO1xuXG4gIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpXG4gICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblxuICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhdGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIGxpc3QgPSB0aGlzLl9ldmVudHNbdHlwZV07XG4gIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICBwb3NpdGlvbiA9IC0xO1xuXG4gIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fFxuICAgICAgKGlzRnVuY3Rpb24obGlzdC5saXN0ZW5lcikgJiYgbGlzdC5saXN0ZW5lciA9PT0gbGlzdGVuZXIpKSB7XG4gICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcbiAgICBpZiAodGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3RlbmVyKTtcblxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KGxpc3QpKSB7XG4gICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gPiAwOykge1xuICAgICAgaWYgKGxpc3RbaV0gPT09IGxpc3RlbmVyIHx8XG4gICAgICAgICAgKGxpc3RbaV0ubGlzdGVuZXIgJiYgbGlzdFtpXS5saXN0ZW5lciA9PT0gbGlzdGVuZXIpKSB7XG4gICAgICAgIHBvc2l0aW9uID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBvc2l0aW9uIDwgMClcbiAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgaWYgKGxpc3QubGVuZ3RoID09PSAxKSB7XG4gICAgICBsaXN0Lmxlbmd0aCA9IDA7XG4gICAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBsaXN0LnNwbGljZShwb3NpdGlvbiwgMSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcilcbiAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBsaXN0ZW5lcik7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24odHlwZSkge1xuICB2YXIga2V5LCBsaXN0ZW5lcnM7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgLy8gbm90IGxpc3RlbmluZyBmb3IgcmVtb3ZlTGlzdGVuZXIsIG5vIG5lZWQgdG8gZW1pdFxuICBpZiAoIXRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcikge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKVxuICAgICAgdGhpcy5fZXZlbnRzID0ge307XG4gICAgZWxzZSBpZiAodGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFsbCBsaXN0ZW5lcnMgb24gYWxsIGV2ZW50c1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGZvciAoa2V5IGluIHRoaXMuX2V2ZW50cykge1xuICAgICAgaWYgKGtleSA9PT0gJ3JlbW92ZUxpc3RlbmVyJykgY29udGludWU7XG4gICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhrZXkpO1xuICAgIH1cbiAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXInKTtcbiAgICB0aGlzLl9ldmVudHMgPSB7fTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcblxuICBpZiAoaXNGdW5jdGlvbihsaXN0ZW5lcnMpKSB7XG4gICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpO1xuICB9IGVsc2Uge1xuICAgIC8vIExJRk8gb3JkZXJcbiAgICB3aGlsZSAobGlzdGVuZXJzLmxlbmd0aClcbiAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2xpc3RlbmVycy5sZW5ndGggLSAxXSk7XG4gIH1cbiAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24odHlwZSkge1xuICB2YXIgcmV0O1xuICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhdGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgIHJldCA9IFtdO1xuICBlbHNlIGlmIChpc0Z1bmN0aW9uKHRoaXMuX2V2ZW50c1t0eXBlXSkpXG4gICAgcmV0ID0gW3RoaXMuX2V2ZW50c1t0eXBlXV07XG4gIGVsc2VcbiAgICByZXQgPSB0aGlzLl9ldmVudHNbdHlwZV0uc2xpY2UoKTtcbiAgcmV0dXJuIHJldDtcbn07XG5cbkV2ZW50RW1pdHRlci5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkge1xuICB2YXIgcmV0O1xuICBpZiAoIWVtaXR0ZXIuX2V2ZW50cyB8fCAhZW1pdHRlci5fZXZlbnRzW3R5cGVdKVxuICAgIHJldCA9IDA7XG4gIGVsc2UgaWYgKGlzRnVuY3Rpb24oZW1pdHRlci5fZXZlbnRzW3R5cGVdKSlcbiAgICByZXQgPSAxO1xuICBlbHNlXG4gICAgcmV0ID0gZW1pdHRlci5fZXZlbnRzW3R5cGVdLmxlbmd0aDtcbiAgcmV0dXJuIHJldDtcbn07XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBpc051bWJlcihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IHZvaWQgMDtcbn1cblxuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9+L2V2ZW50cy9ldmVudHMuanNcbiAqKiBtb2R1bGUgaWQgPSAzM1xuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _Const = __webpack_require__(3);\n\nvar _Const2 = _interopRequireDefault(_Const);\n\nvar _classnames = __webpack_require__(6);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nexports['default'] = {\n renderReactSortCaret: function renderReactSortCaret(order) {\n var orderClass = (0, _classnames2['default'])('order', {\n 'dropup': order === _Const2['default'].SORT_ASC\n });\n return _react2['default'].createElement(\n 'span',\n { className: orderClass },\n _react2['default'].createElement('span', { className: 'caret', style: { margin: '0px 5px' } })\n );\n },\n\n getScrollBarWidth: function getScrollBarWidth() {\n var inner = document.createElement('p');\n inner.style.width = '100%';\n inner.style.height = '200px';\n\n var outer = document.createElement('div');\n outer.style.position = 'absolute';\n outer.style.top = '0px';\n outer.style.left = '0px';\n outer.style.visibility = 'hidden';\n outer.style.width = '200px';\n outer.style.height = '150px';\n outer.style.overflow = 'hidden';\n outer.appendChild(inner);\n\n document.body.appendChild(outer);\n var w1 = inner.offsetWidth;\n outer.style.overflow = 'scroll';\n var w2 = inner.offsetWidth;\n if (w1 === w2) w2 = outer.clientWidth;\n\n document.body.removeChild(outer);\n\n return w1 - w2;\n },\n\n canUseDOM: function canUseDOM() {\n return typeof window !== 'undefined' && typeof window.document !== 'undefined';\n }\n};\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvdXRpbC5qcz9hZDAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O2lDQUFrQixDQUFPOzs7O2lDQUNQLENBQVM7Ozs7c0NBQ04sQ0FBWTs7OztxQkFFbEI7QUFDYixzQkFBb0IsZ0NBQUMsS0FBSyxFQUFFO0FBQzFCLFFBQU0sVUFBVSxHQUFHLDZCQUFTLE9BQU8sRUFBRTtBQUNuQyxjQUFRLEVBQUUsS0FBSyxLQUFLLG1CQUFNLFFBQVE7S0FDbkMsQ0FBQyxDQUFDO0FBQ0gsV0FDRTs7UUFBTSxTQUFTLEVBQUcsVUFBWTtNQUM1QiwyQ0FBTSxTQUFTLEVBQUMsT0FBTyxFQUFDLEtBQUssRUFBRyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUksR0FBUTtLQUMxRCxDQUNQO0dBQ0g7O0FBRUQsbUJBQWlCLCtCQUFHO0FBQ2xCLFFBQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUMsU0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQzNCLFNBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQzs7QUFFN0IsUUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QyxTQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7QUFDbEMsU0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQ3hCLFNBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN6QixTQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7QUFDbEMsU0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDO0FBQzVCLFNBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztBQUM3QixTQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDaEMsU0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7QUFFekIsWUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakMsUUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztBQUM3QixTQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDaEMsUUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztBQUMzQixRQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7O0FBRXRDLFlBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDOztBQUVqQyxXQUFRLEVBQUUsR0FBRyxFQUFFLENBQUU7R0FDbEI7O0FBRUQsV0FBUyx1QkFBRztBQUNWLFdBQU8sT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLE9BQU8sTUFBTSxDQUFDLFFBQVEsS0FBSyxXQUFXLENBQUM7R0FDaEY7Q0FDRiIsImZpbGUiOiIzNC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi9Db25zdCc7XG5pbXBvcnQgY2xhc3NTZXQgZnJvbSAnY2xhc3NuYW1lcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcmVuZGVyUmVhY3RTb3J0Q2FyZXQob3JkZXIpIHtcbiAgICBjb25zdCBvcmRlckNsYXNzID0gY2xhc3NTZXQoJ29yZGVyJywge1xuICAgICAgJ2Ryb3B1cCc6IG9yZGVyID09PSBDb25zdC5TT1JUX0FTQ1xuICAgIH0pO1xuICAgIHJldHVybiAoXG4gICAgICA8c3BhbiBjbGFzc05hbWU9eyBvcmRlckNsYXNzIH0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT0nY2FyZXQnIHN0eWxlPXsgeyBtYXJnaW46ICcwcHggNXB4JyB9IH0+PC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgICk7XG4gIH0sXG5cbiAgZ2V0U2Nyb2xsQmFyV2lkdGgoKSB7XG4gICAgY29uc3QgaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7XG4gICAgaW5uZXIuc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgaW5uZXIuc3R5bGUuaGVpZ2h0ID0gJzIwMHB4JztcblxuICAgIGNvbnN0IG91dGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgb3V0ZXIuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIG91dGVyLnN0eWxlLnRvcCA9ICcwcHgnO1xuICAgIG91dGVyLnN0eWxlLmxlZnQgPSAnMHB4JztcbiAgICBvdXRlci5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgb3V0ZXIuc3R5bGUud2lkdGggPSAnMjAwcHgnO1xuICAgIG91dGVyLnN0eWxlLmhlaWdodCA9ICcxNTBweCc7XG4gICAgb3V0ZXIuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICBvdXRlci5hcHBlbmRDaGlsZChpbm5lcik7XG5cbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG91dGVyKTtcbiAgICBjb25zdCB3MSA9IGlubmVyLm9mZnNldFdpZHRoO1xuICAgIG91dGVyLnN0eWxlLm92ZXJmbG93ID0gJ3Njcm9sbCc7XG4gICAgbGV0IHcyID0gaW5uZXIub2Zmc2V0V2lkdGg7XG4gICAgaWYgKHcxID09PSB3MikgdzIgPSBvdXRlci5jbGllbnRXaWR0aDtcblxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQob3V0ZXIpO1xuXG4gICAgcmV0dXJuICh3MSAtIHcyKTtcbiAgfSxcblxuICBjYW5Vc2VET00oKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xuICB9XG59O1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvdXRpbC5qc1xuICoqLyJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports,__webpack_require__){eval("/* eslint block-scoped-var: 0 */\n/* eslint vars-on-top: 0 */\n/* eslint no-var: 0 */\n/* eslint no-unused-vars: 0 */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nif (typeof window !== 'undefined') {\n var filesaver = __webpack_require__(36);\n var saveAs = filesaver.saveAs;\n}\n\nfunction toString(data, keys) {\n var dataString = '';\n if (data.length === 0) return dataString;\n\n dataString += keys.join(',') + '\\n';\n\n data.map(function (row) {\n keys.map(function (col, i) {\n var cell = typeof row[col] !== 'undefined' ? '\"' + row[col] + '\"' : '';\n dataString += cell;\n if (i + 1 < keys.length) dataString += ',';\n });\n\n dataString += '\\n';\n });\n\n return dataString;\n}\n\nvar exportCSV = function exportCSV(data, keys, filename) {\n var dataString = toString(data, keys);\n if (typeof window !== 'undefined') {\n saveAs(new Blob([dataString], { type: 'text/plain;charset=utf-8' }), filename || 'spreadsheet.csv');\n }\n};\n\nexports['default'] = exportCSV;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY3N2X2V4cG9ydF91dGlsLmpzPzhlY2MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBSUEsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUU7QUFDakMsTUFBTSxTQUFTLEdBQUcsbUJBQU8sQ0FBQyxFQUFhLENBQUMsQ0FBQztBQUN6QyxNQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO0NBQy9COztBQUVELFNBQVMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7QUFDNUIsTUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLE1BQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsT0FBTyxVQUFVLENBQUM7O0FBRXpDLFlBQVUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQzs7QUFFcEMsTUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFTLEdBQUcsRUFBRTtBQUNyQixRQUFJLENBQUMsR0FBRyxDQUFDLFVBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUN4QixVQUFNLElBQUksR0FBRyxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxXQUFXLEdBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUksRUFBRSxDQUFDO0FBQzNFLGdCQUFVLElBQUksSUFBSSxDQUFDO0FBQ25CLFVBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsSUFBSSxHQUFHLENBQUM7S0FDNUMsQ0FBQyxDQUFDOztBQUVILGNBQVUsSUFBSSxJQUFJLENBQUM7R0FDcEIsQ0FBQyxDQUFDOztBQUVILFNBQU8sVUFBVSxDQUFDO0NBQ25COztBQUVELElBQU0sU0FBUyxHQUFHLFNBQVosU0FBUyxDQUFZLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0FBQy9DLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEMsTUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUU7QUFDakMsVUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUUsVUFBVSxDQUFFLEVBQzFCLEVBQUUsSUFBSSxFQUFFLDBCQUEwQixFQUFFLENBQUMsRUFDckMsUUFBUSxJQUFJLGlCQUFpQixDQUFDLENBQUM7R0FDcEM7Q0FDRixDQUFDOztxQkFFYSxTQUFTIiwiZmlsZSI6IjM1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50IGJsb2NrLXNjb3BlZC12YXI6IDAgKi9cbi8qIGVzbGludCB2YXJzLW9uLXRvcDogMCAqL1xuLyogZXNsaW50IG5vLXZhcjogMCAqL1xuLyogZXNsaW50IG5vLXVudXNlZC12YXJzOiAwICovXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgY29uc3QgZmlsZXNhdmVyID0gcmVxdWlyZSgnLi9maWxlc2F2ZXInKTtcbiAgdmFyIHNhdmVBcyA9IGZpbGVzYXZlci5zYXZlQXM7XG59XG5cbmZ1bmN0aW9uIHRvU3RyaW5nKGRhdGEsIGtleXMpIHtcbiAgbGV0IGRhdGFTdHJpbmcgPSAnJztcbiAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSByZXR1cm4gZGF0YVN0cmluZztcblxuICBkYXRhU3RyaW5nICs9IGtleXMuam9pbignLCcpICsgJ1xcbic7XG5cbiAgZGF0YS5tYXAoZnVuY3Rpb24ocm93KSB7XG4gICAga2V5cy5tYXAoZnVuY3Rpb24oY29sLCBpKSB7XG4gICAgICBjb25zdCBjZWxsID0gdHlwZW9mIHJvd1tjb2xdICE9PSAndW5kZWZpbmVkJyA/ICgnXCInICsgcm93W2NvbF0gKyAnXCInKSA6ICcnO1xuICAgICAgZGF0YVN0cmluZyArPSBjZWxsO1xuICAgICAgaWYgKGkgKyAxIDwga2V5cy5sZW5ndGgpIGRhdGFTdHJpbmcgKz0gJywnO1xuICAgIH0pO1xuXG4gICAgZGF0YVN0cmluZyArPSAnXFxuJztcbiAgfSk7XG5cbiAgcmV0dXJuIGRhdGFTdHJpbmc7XG59XG5cbmNvbnN0IGV4cG9ydENTViA9IGZ1bmN0aW9uKGRhdGEsIGtleXMsIGZpbGVuYW1lKSB7XG4gIGNvbnN0IGRhdGFTdHJpbmcgPSB0b1N0cmluZyhkYXRhLCBrZXlzKTtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgc2F2ZUFzKG5ldyBCbG9iKFsgZGF0YVN0cmluZyBdLFxuICAgICAgICB7IHR5cGU6ICd0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgnIH0pLFxuICAgICAgICBmaWxlbmFtZSB8fCAnc3ByZWFkc2hlZXQuY3N2Jyk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGV4cG9ydENTVjtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2Nzdl9leHBvcnRfdXRpbC5qc1xuICoqLyJdLCJzb3VyY2VSb290IjoiIn0="); +},function(module,exports,__webpack_require__){eval('var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* FileSaver.js\n * A saveAs() FileSaver implementation.\n * 1.1.20151003\n *\n * By Eli Grey, http://eligrey.com\n * License: MIT\n * See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md\n */\n\n/*global self */\n/*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */\n\n/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */\n\n"use strict";\n\nvar saveAs = saveAs || (function (view) {\n "use strict";\n // IE <10 is explicitly unsupported\n if (typeof navigator !== "undefined" && /MSIE [1-9]\\./.test(navigator.userAgent)) {\n return;\n }\n var doc = view.document,\n \n // only get URL when necessary in case Blob.js hasn\'t overridden it yet\n get_URL = function get_URL() {\n return view.URL || view.webkitURL || view;\n },\n save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a"),\n can_use_save_link = ("download" in save_link),\n click = function click(node) {\n var event = new MouseEvent("click");\n node.dispatchEvent(event);\n },\n is_safari = /Version\\/[\\d\\.]+.*Safari/.test(navigator.userAgent),\n webkit_req_fs = view.webkitRequestFileSystem,\n req_fs = view.requestFileSystem || webkit_req_fs || view.mozRequestFileSystem,\n throw_outside = function throw_outside(ex) {\n (view.setImmediate || view.setTimeout)(function () {\n throw ex;\n }, 0);\n },\n force_saveable_type = "application/octet-stream",\n fs_min_size = 0,\n \n // See https://code.google.com/p/chromium/issues/detail?id=375297#c7 and\n // https://github.com/eligrey/FileSaver.js/commit/485930a#commitcomment-8768047\n // for the reasoning behind the timeout and revocation flow\n arbitrary_revoke_timeout = 500,\n // in ms\n revoke = function revoke(file) {\n var revoker = function revoker() {\n if (typeof file === "string") {\n // file is an object URL\n get_URL().revokeObjectURL(file);\n } else {\n // file is a File\n file.remove();\n }\n };\n if (view.chrome) {\n revoker();\n } else {\n setTimeout(revoker, arbitrary_revoke_timeout);\n }\n },\n dispatch = function dispatch(filesaver, event_types, event) {\n event_types = [].concat(event_types);\n var i = event_types.length;\n while (i--) {\n var listener = filesaver["on" + event_types[i]];\n if (typeof listener === "function") {\n try {\n listener.call(filesaver, event || filesaver);\n } catch (ex) {\n throw_outside(ex);\n }\n }\n }\n },\n auto_bom = function auto_bom(blob) {\n // prepend BOM for UTF-8 XML and text/* types (including HTML)\n if (/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(blob.type)) {\n return new Blob(["\ufeff", blob], { type: blob.type });\n }\n return blob;\n },\n FileSaver = function FileSaver(blob, name, no_auto_bom) {\n if (!no_auto_bom) {\n blob = auto_bom(blob);\n }\n // First try a.download, then web filesystem, then object URLs\n var filesaver = this,\n type = blob.type,\n blob_changed = false,\n object_url,\n target_view,\n dispatch_all = function dispatch_all() {\n dispatch(filesaver, "writestart progress write writeend".split(" "));\n },\n \n // on any filesys errors revert to saving with object URLs\n fs_error = function fs_error() {\n if (target_view && is_safari && typeof FileReader !== "undefined") {\n // Safari doesn\'t allow downloading of blob urls\n var reader = new FileReader();\n reader.onloadend = function () {\n var base64Data = reader.result;\n target_view.location.href = "data:attachment/file" + base64Data.slice(base64Data.search(/[,;]/));\n filesaver.readyState = filesaver.DONE;\n dispatch_all();\n };\n reader.readAsDataURL(blob);\n filesaver.readyState = filesaver.INIT;\n return;\n }\n // don\'t create more object URLs than needed\n if (blob_changed || !object_url) {\n object_url = get_URL().createObjectURL(blob);\n }\n if (target_view) {\n target_view.location.href = object_url;\n } else {\n var new_tab = view.open(object_url, "_blank");\n if (new_tab == undefined && is_safari) {\n //Apple do not allow window.open, see http://bit.ly/1kZffRI\n view.location.href = object_url;\n }\n }\n filesaver.readyState = filesaver.DONE;\n dispatch_all();\n revoke(object_url);\n },\n abortable = function abortable(func) {\n return function () {\n if (filesaver.readyState !== filesaver.DONE) {\n return func.apply(this, arguments);\n }\n };\n },\n create_if_not_found = { create: true, exclusive: false },\n slice;\n filesaver.readyState = filesaver.INIT;\n if (!name) {\n name = "download";\n }\n if (can_use_save_link) {\n object_url = get_URL().createObjectURL(blob);\n save_link.href = object_url;\n save_link.download = name;\n setTimeout(function () {\n click(save_link);\n dispatch_all();\n revoke(object_url);\n filesaver.readyState = filesaver.DONE;\n });\n return;\n }\n // Object and web filesystem URLs have a problem saving in Google Chrome when\n // viewed in a tab, so I force save with application/octet-stream\n // http://code.google.com/p/chromium/issues/detail?id=91158\n // Update: Google errantly closed 91158, I submitted it again:\n // https://code.google.com/p/chromium/issues/detail?id=389642\n if (view.chrome && type && type !== force_saveable_type) {\n slice = blob.slice || blob.webkitSlice;\n blob = slice.call(blob, 0, blob.size, force_saveable_type);\n blob_changed = true;\n }\n // Since I can\'t be sure that the guessed media type will trigger a download\n // in WebKit, I append .download to the filename.\n // https://bugs.webkit.org/show_bug.cgi?id=65440\n if (webkit_req_fs && name !== "download") {\n name += ".download";\n }\n if (type === force_saveable_type || webkit_req_fs) {\n target_view = view;\n }\n if (!req_fs) {\n fs_error();\n return;\n }\n fs_min_size += blob.size;\n req_fs(view.TEMPORARY, fs_min_size, abortable(function (fs) {\n fs.root.getDirectory("saved", create_if_not_found, abortable(function (dir) {\n var save = function save() {\n dir.getFile(name, create_if_not_found, abortable(function (file) {\n file.createWriter(abortable(function (writer) {\n writer.onwriteend = function (event) {\n target_view.location.href = file.toURL();\n filesaver.readyState = filesaver.DONE;\n dispatch(filesaver, "writeend", event);\n revoke(file);\n };\n writer.onerror = function () {\n var error = writer.error;\n if (error.code !== error.ABORT_ERR) {\n fs_error();\n }\n };\n "writestart progress write abort".split(" ").forEach(function (event) {\n writer["on" + event] = filesaver["on" + event];\n });\n writer.write(blob);\n filesaver.abort = function () {\n writer.abort();\n filesaver.readyState = filesaver.DONE;\n };\n filesaver.readyState = filesaver.WRITING;\n }), fs_error);\n }), fs_error);\n };\n dir.getFile(name, { create: false }, abortable(function (file) {\n // delete file if it already exists\n file.remove();\n save();\n }), abortable(function (ex) {\n if (ex.code === ex.NOT_FOUND_ERR) {\n save();\n } else {\n fs_error();\n }\n }));\n }), fs_error);\n }), fs_error);\n },\n FS_proto = FileSaver.prototype,\n saveAs = function saveAs(blob, name, no_auto_bom) {\n return new FileSaver(blob, name, no_auto_bom);\n };\n // IE 10+ (native saveAs)\n if (typeof navigator !== "undefined" && navigator.msSaveOrOpenBlob) {\n return function (blob, name, no_auto_bom) {\n if (!no_auto_bom) {\n blob = auto_bom(blob);\n }\n return navigator.msSaveOrOpenBlob(blob, name || "download");\n };\n }\n\n FS_proto.abort = function () {\n var filesaver = this;\n filesaver.readyState = filesaver.DONE;\n dispatch(filesaver, "abort");\n };\n FS_proto.readyState = FS_proto.INIT = 0;\n FS_proto.WRITING = 1;\n FS_proto.DONE = 2;\n\n FS_proto.error = FS_proto.onwritestart = FS_proto.onprogress = FS_proto.onwrite = FS_proto.onabort = FS_proto.onerror = FS_proto.onwriteend = null;\n\n return saveAs;\n})(typeof self !== "undefined" && self || typeof window !== "undefined" && window || undefined.content);\n// `self` is undefined in Firefox for Android content script context\n// while `this` is nsIContentFrameMessageManager\n// with an attribute `content` that corresponds to the window\n\nif (typeof module !== "undefined" && module.exports) {\n module.exports.saveAs = saveAs;\n} else if ("function" !== "undefined" && __webpack_require__(37) !== null && __webpack_require__(38) != null) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function () {\n return saveAs;\n }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZmlsZXNhdmVyLmpzP2NlYzIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQWNBLElBQUksTUFBTSxHQUFHLE1BQU0sSUFBSyxXQUFTLElBQUksRUFBRTtBQUN0QyxhQUFZLENBQUM7O0FBRWIsS0FBSSxPQUFPLFNBQVMsS0FBSyxXQUFXLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUU7QUFDakYsU0FBTztFQUNQO0FBQ0QsS0FDRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVE7OztBQUVuQixRQUFPLEdBQUcsU0FBVixPQUFPLEdBQWM7QUFDdEIsU0FBTyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDO0VBQzFDO0tBQ0MsU0FBUyxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsOEJBQThCLEVBQUUsR0FBRyxDQUFDO0tBQ3BFLGlCQUFpQixJQUFHLFVBQVUsSUFBSSxTQUFTO0tBQzNDLEtBQUssR0FBRyxTQUFSLEtBQUssQ0FBWSxJQUFJLEVBQUU7QUFDeEIsTUFBSSxLQUFLLEdBQUcsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDcEMsTUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztFQUMxQjtLQUNDLFNBQVMsR0FBRywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztLQUNoRSxhQUFhLEdBQUcsSUFBSSxDQUFDLHVCQUF1QjtLQUM1QyxNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixJQUFJLGFBQWEsSUFBSSxJQUFJLENBQUMsb0JBQW9CO0tBQzdFLGFBQWEsR0FBRyxTQUFoQixhQUFhLENBQVksRUFBRSxFQUFFO0FBQzlCLEdBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLFlBQVc7QUFDakQsU0FBTSxFQUFFLENBQUM7R0FD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Q2YsK0lBQUMsQ0FBQyIsImZpbGUiOiIzNi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIEZpbGVTYXZlci5qc1xuICogQSBzYXZlQXMoKSBGaWxlU2F2ZXIgaW1wbGVtZW50YXRpb24uXG4gKiAxLjEuMjAxNTEwMDNcbiAqXG4gKiBCeSBFbGkgR3JleSwgaHR0cDovL2VsaWdyZXkuY29tXG4gKiBMaWNlbnNlOiBNSVRcbiAqICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGlncmV5L0ZpbGVTYXZlci5qcy9ibG9iL21hc3Rlci9MSUNFTlNFLm1kXG4gKi9cblxuLypnbG9iYWwgc2VsZiAqL1xuLypqc2xpbnQgYml0d2lzZTogdHJ1ZSwgaW5kZW50OiA0LCBsYXhicmVhazogdHJ1ZSwgbGF4Y29tbWE6IHRydWUsIHNtYXJ0dGFiczogdHJ1ZSwgcGx1c3BsdXM6IHRydWUgKi9cblxuLyohIEBzb3VyY2UgaHR0cDovL3B1cmwuZWxpZ3JleS5jb20vZ2l0aHViL0ZpbGVTYXZlci5qcy9ibG9iL21hc3Rlci9GaWxlU2F2ZXIuanMgKi9cblxudmFyIHNhdmVBcyA9IHNhdmVBcyB8fCAoZnVuY3Rpb24odmlldykge1xuXHRcInVzZSBzdHJpY3RcIjtcblx0Ly8gSUUgPDEwIGlzIGV4cGxpY2l0bHkgdW5zdXBwb3J0ZWRcblx0aWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCIgJiYgL01TSUUgWzEtOV1cXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpIHtcblx0XHRyZXR1cm47XG5cdH1cblx0dmFyXG5cdFx0ICBkb2MgPSB2aWV3LmRvY3VtZW50XG5cdFx0ICAvLyBvbmx5IGdldCBVUkwgd2hlbiBuZWNlc3NhcnkgaW4gY2FzZSBCbG9iLmpzIGhhc24ndCBvdmVycmlkZGVuIGl0IHlldFxuXHRcdCwgZ2V0X1VSTCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHZpZXcuVVJMIHx8IHZpZXcud2Via2l0VVJMIHx8IHZpZXc7XG5cdFx0fVxuXHRcdCwgc2F2ZV9saW5rID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIiwgXCJhXCIpXG5cdFx0LCBjYW5fdXNlX3NhdmVfbGluayA9IFwiZG93bmxvYWRcIiBpbiBzYXZlX2xpbmtcblx0XHQsIGNsaWNrID0gZnVuY3Rpb24obm9kZSkge1xuXHRcdFx0dmFyIGV2ZW50ID0gbmV3IE1vdXNlRXZlbnQoXCJjbGlja1wiKTtcblx0XHRcdG5vZGUuZGlzcGF0Y2hFdmVudChldmVudCk7XG5cdFx0fVxuXHRcdCwgaXNfc2FmYXJpID0gL1ZlcnNpb25cXC9bXFxkXFwuXSsuKlNhZmFyaS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KVxuXHRcdCwgd2Via2l0X3JlcV9mcyA9IHZpZXcud2Via2l0UmVxdWVzdEZpbGVTeXN0ZW1cblx0XHQsIHJlcV9mcyA9IHZpZXcucmVxdWVzdEZpbGVTeXN0ZW0gfHwgd2Via2l0X3JlcV9mcyB8fCB2aWV3Lm1velJlcXVlc3RGaWxlU3lzdGVtXG5cdFx0LCB0aHJvd19vdXRzaWRlID0gZnVuY3Rpb24oZXgpIHtcblx0XHRcdCh2aWV3LnNldEltbWVkaWF0ZSB8fCB2aWV3LnNldFRpbWVvdXQpKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR0aHJvdyBleDtcblx0XHRcdH0sIDApO1xuXHRcdH1cblx0XHQsIGZvcmNlX3NhdmVhYmxlX3R5cGUgPSBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiXG5cdFx0LCBmc19taW5fc2l6ZSA9IDBcblx0XHQvLyBTZWUgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTM3NTI5NyNjNyBhbmRcblx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vZWxpZ3JleS9GaWxlU2F2ZXIuanMvY29tbWl0LzQ4NTkzMGEjY29tbWl0Y29tbWVudC04NzY4MDQ3XG5cdFx0Ly8gZm9yIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoZSB0aW1lb3V0IGFuZCByZXZvY2F0aW9uIGZsb3dcblx0XHQsIGFyYml0cmFyeV9yZXZva2VfdGltZW91dCA9IDUwMCAvLyBpbiBtc1xuXHRcdCwgcmV2b2tlID0gZnVuY3Rpb24oZmlsZSkge1xuXHRcdFx0dmFyIHJldm9rZXIgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBmaWxlID09PSBcInN0cmluZ1wiKSB7IC8vIGZpbGUgaXMgYW4gb2JqZWN0IFVSTFxuXHRcdFx0XHRcdGdldF9VUkwoKS5yZXZva2VPYmplY3RVUkwoZmlsZSk7XG5cdFx0XHRcdH0gZWxzZSB7IC8vIGZpbGUgaXMgYSBGaWxlXG5cdFx0XHRcdFx0ZmlsZS5yZW1vdmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdGlmICh2aWV3LmNocm9tZSkge1xuXHRcdFx0XHRyZXZva2VyKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZXRUaW1lb3V0KHJldm9rZXIsIGFyYml0cmFyeV9yZXZva2VfdGltZW91dCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdCwgZGlzcGF0Y2ggPSBmdW5jdGlvbihmaWxlc2F2ZXIsIGV2ZW50X3R5cGVzLCBldmVudCkge1xuXHRcdFx0ZXZlbnRfdHlwZXMgPSBbXS5jb25jYXQoZXZlbnRfdHlwZXMpO1xuXHRcdFx0dmFyIGkgPSBldmVudF90eXBlcy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdHZhciBsaXN0ZW5lciA9IGZpbGVzYXZlcltcIm9uXCIgKyBldmVudF90eXBlc1tpXV07XG5cdFx0XHRcdGlmICh0eXBlb2YgbGlzdGVuZXIgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRsaXN0ZW5lci5jYWxsKGZpbGVzYXZlciwgZXZlbnQgfHwgZmlsZXNhdmVyKTtcblx0XHRcdFx0XHR9IGNhdGNoIChleCkge1xuXHRcdFx0XHRcdFx0dGhyb3dfb3V0c2lkZShleCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdCwgYXV0b19ib20gPSBmdW5jdGlvbihibG9iKSB7XG5cdFx0XHQvLyBwcmVwZW5kIEJPTSBmb3IgVVRGLTggWE1MIGFuZCB0ZXh0LyogdHlwZXMgKGluY2x1ZGluZyBIVE1MKVxuXHRcdFx0aWYgKC9eXFxzKig/OnRleHRcXC9cXFMqfGFwcGxpY2F0aW9uXFwveG1sfFxcUypcXC9cXFMqXFwreG1sKVxccyo7LipjaGFyc2V0XFxzKj1cXHMqdXRmLTgvaS50ZXN0KGJsb2IudHlwZSkpIHtcblx0XHRcdFx0cmV0dXJuIG5ldyBCbG9iKFtcIlxcdWZlZmZcIiwgYmxvYl0sIHt0eXBlOiBibG9iLnR5cGV9KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBibG9iO1xuXHRcdH1cblx0XHQsIEZpbGVTYXZlciA9IGZ1bmN0aW9uKGJsb2IsIG5hbWUsIG5vX2F1dG9fYm9tKSB7XG5cdFx0XHRpZiAoIW5vX2F1dG9fYm9tKSB7XG5cdFx0XHRcdGJsb2IgPSBhdXRvX2JvbShibG9iKTtcblx0XHRcdH1cblx0XHRcdC8vIEZpcnN0IHRyeSBhLmRvd25sb2FkLCB0aGVuIHdlYiBmaWxlc3lzdGVtLCB0aGVuIG9iamVjdCBVUkxzXG5cdFx0XHR2YXJcblx0XHRcdFx0ICBmaWxlc2F2ZXIgPSB0aGlzXG5cdFx0XHRcdCwgdHlwZSA9IGJsb2IudHlwZVxuXHRcdFx0XHQsIGJsb2JfY2hhbmdlZCA9IGZhbHNlXG5cdFx0XHRcdCwgb2JqZWN0X3VybFxuXHRcdFx0XHQsIHRhcmdldF92aWV3XG5cdFx0XHRcdCwgZGlzcGF0Y2hfYWxsID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0ZGlzcGF0Y2goZmlsZXNhdmVyLCBcIndyaXRlc3RhcnQgcHJvZ3Jlc3Mgd3JpdGUgd3JpdGVlbmRcIi5zcGxpdChcIiBcIikpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIG9uIGFueSBmaWxlc3lzIGVycm9ycyByZXZlcnQgdG8gc2F2aW5nIHdpdGggb2JqZWN0IFVSTHNcblx0XHRcdFx0LCBmc19lcnJvciA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICh0YXJnZXRfdmlldyAmJiBpc19zYWZhcmkgJiYgdHlwZW9mIEZpbGVSZWFkZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdFx0XHRcdC8vIFNhZmFyaSBkb2Vzbid0IGFsbG93IGRvd25sb2FkaW5nIG9mIGJsb2IgdXJsc1xuXHRcdFx0XHRcdFx0dmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cdFx0XHRcdFx0XHRyZWFkZXIub25sb2FkZW5kID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBiYXNlNjREYXRhID0gcmVhZGVyLnJlc3VsdDtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0X3ZpZXcubG9jYXRpb24uaHJlZiA9IFwiZGF0YTphdHRhY2htZW50L2ZpbGVcIiArIGJhc2U2NERhdGEuc2xpY2UoYmFzZTY0RGF0YS5zZWFyY2goL1ssO10vKSk7XG5cdFx0XHRcdFx0XHRcdGZpbGVzYXZlci5yZWFkeVN0YXRlID0gZmlsZXNhdmVyLkRPTkU7XG5cdFx0XHRcdFx0XHRcdGRpc3BhdGNoX2FsbCgpO1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdHJlYWRlci5yZWFkQXNEYXRhVVJMKGJsb2IpO1xuXHRcdFx0XHRcdFx0ZmlsZXNhdmVyLnJlYWR5U3RhdGUgPSBmaWxlc2F2ZXIuSU5JVDtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gZG9uJ3QgY3JlYXRlIG1vcmUgb2JqZWN0IFVSTHMgdGhhbiBuZWVkZWRcblx0XHRcdFx0XHRpZiAoYmxvYl9jaGFuZ2VkIHx8ICFvYmplY3RfdXJsKSB7XG5cdFx0XHRcdFx0XHRvYmplY3RfdXJsID0gZ2V0X1VSTCgpLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKHRhcmdldF92aWV3KSB7XG5cdFx0XHRcdFx0XHR0YXJnZXRfdmlldy5sb2NhdGlvbi5ocmVmID0gb2JqZWN0X3VybDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dmFyIG5ld190YWIgPSB2aWV3Lm9wZW4ob2JqZWN0X3VybCwgXCJfYmxhbmtcIik7XG5cdFx0XHRcdFx0XHRpZiAobmV3X3RhYiA9PSB1bmRlZmluZWQgJiYgaXNfc2FmYXJpKSB7XG5cdFx0XHRcdFx0XHRcdC8vQXBwbGUgZG8gbm90IGFsbG93IHdpbmRvdy5vcGVuLCBzZWUgaHR0cDovL2JpdC5seS8xa1pmZlJJXG5cdFx0XHRcdFx0XHRcdHZpZXcubG9jYXRpb24uaHJlZiA9IG9iamVjdF91cmxcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZmlsZXNhdmVyLnJlYWR5U3RhdGUgPSBmaWxlc2F2ZXIuRE9ORTtcblx0XHRcdFx0XHRkaXNwYXRjaF9hbGwoKTtcblx0XHRcdFx0XHRyZXZva2Uob2JqZWN0X3VybCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0LCBhYm9ydGFibGUgPSBmdW5jdGlvbihmdW5jKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0aWYgKGZpbGVzYXZlci5yZWFkeVN0YXRlICE9PSBmaWxlc2F2ZXIuRE9ORSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdFx0LCBjcmVhdGVfaWZfbm90X2ZvdW5kID0ge2NyZWF0ZTogdHJ1ZSwgZXhjbHVzaXZlOiBmYWxzZX1cblx0XHRcdFx0LCBzbGljZVxuXHRcdFx0O1xuXHRcdFx0ZmlsZXNhdmVyLnJlYWR5U3RhdGUgPSBmaWxlc2F2ZXIuSU5JVDtcblx0XHRcdGlmICghbmFtZSkge1xuXHRcdFx0XHRuYW1lID0gXCJkb3dubG9hZFwiO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGNhbl91c2Vfc2F2ZV9saW5rKSB7XG5cdFx0XHRcdG9iamVjdF91cmwgPSBnZXRfVVJMKCkuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuXHRcdFx0XHRzYXZlX2xpbmsuaHJlZiA9IG9iamVjdF91cmw7XG5cdFx0XHRcdHNhdmVfbGluay5kb3dubG9hZCA9IG5hbWU7XG5cdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0Y2xpY2soc2F2ZV9saW5rKTtcblx0XHRcdFx0XHRkaXNwYXRjaF9hbGwoKTtcblx0XHRcdFx0XHRyZXZva2Uob2JqZWN0X3VybCk7XG5cdFx0XHRcdFx0ZmlsZXNhdmVyLnJlYWR5U3RhdGUgPSBmaWxlc2F2ZXIuRE9ORTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIE9iamVjdCBhbmQgd2ViIGZpbGVzeXN0ZW0gVVJMcyBoYXZlIGEgcHJvYmxlbSBzYXZpbmcgaW4gR29vZ2xlIENocm9tZSB3aGVuXG5cdFx0XHQvLyB2aWV3ZWQgaW4gYSB0YWIsIHNvIEkgZm9yY2Ugc2F2ZSB3aXRoIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVxuXHRcdFx0Ly8gaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9OTExNThcblx0XHRcdC8vIFVwZGF0ZTogR29vZ2xlIGVycmFudGx5IGNsb3NlZCA5MTE1OCwgSSBzdWJtaXR0ZWQgaXQgYWdhaW46XG5cdFx0XHQvLyBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzg5NjQyXG5cdFx0XHRpZiAodmlldy5jaHJvbWUgJiYgdHlwZSAmJiB0eXBlICE9PSBmb3JjZV9zYXZlYWJsZV90eXBlKSB7XG5cdFx0XHRcdHNsaWNlID0gYmxvYi5zbGljZSB8fCBibG9iLndlYmtpdFNsaWNlO1xuXHRcdFx0XHRibG9iID0gc2xpY2UuY2FsbChibG9iLCAwLCBibG9iLnNpemUsIGZvcmNlX3NhdmVhYmxlX3R5cGUpO1xuXHRcdFx0XHRibG9iX2NoYW5nZWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0Ly8gU2luY2UgSSBjYW4ndCBiZSBzdXJlIHRoYXQgdGhlIGd1ZXNzZWQgbWVkaWEgdHlwZSB3aWxsIHRyaWdnZXIgYSBkb3dubG9hZFxuXHRcdFx0Ly8gaW4gV2ViS2l0LCBJIGFwcGVuZCAuZG93bmxvYWQgdG8gdGhlIGZpbGVuYW1lLlxuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1NDQwXG5cdFx0XHRpZiAod2Via2l0X3JlcV9mcyAmJiBuYW1lICE9PSBcImRvd25sb2FkXCIpIHtcblx0XHRcdFx0bmFtZSArPSBcIi5kb3dubG9hZFwiO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHR5cGUgPT09IGZvcmNlX3NhdmVhYmxlX3R5cGUgfHwgd2Via2l0X3JlcV9mcykge1xuXHRcdFx0XHR0YXJnZXRfdmlldyA9IHZpZXc7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIXJlcV9mcykge1xuXHRcdFx0XHRmc19lcnJvcigpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRmc19taW5fc2l6ZSArPSBibG9iLnNpemU7XG5cdFx0XHRyZXFfZnModmlldy5URU1QT1JBUlksIGZzX21pbl9zaXplLCBhYm9ydGFibGUoZnVuY3Rpb24oZnMpIHtcblx0XHRcdFx0ZnMucm9vdC5nZXREaXJlY3RvcnkoXCJzYXZlZFwiLCBjcmVhdGVfaWZfbm90X2ZvdW5kLCBhYm9ydGFibGUoZnVuY3Rpb24oZGlyKSB7XG5cdFx0XHRcdFx0dmFyIHNhdmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGRpci5nZXRGaWxlKG5hbWUsIGNyZWF0ZV9pZl9ub3RfZm91bmQsIGFib3J0YWJsZShmdW5jdGlvbihmaWxlKSB7XG5cdFx0XHRcdFx0XHRcdGZpbGUuY3JlYXRlV3JpdGVyKGFib3J0YWJsZShmdW5jdGlvbih3cml0ZXIpIHtcblx0XHRcdFx0XHRcdFx0XHR3cml0ZXIub253cml0ZWVuZCA9IGZ1bmN0aW9uKGV2ZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0YXJnZXRfdmlldy5sb2NhdGlvbi5ocmVmID0gZmlsZS50b1VSTCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZmlsZXNhdmVyLnJlYWR5U3RhdGUgPSBmaWxlc2F2ZXIuRE9ORTtcblx0XHRcdFx0XHRcdFx0XHRcdGRpc3BhdGNoKGZpbGVzYXZlciwgXCJ3cml0ZWVuZFwiLCBldmVudCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXZva2UoZmlsZSk7XG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHR3cml0ZXIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGVycm9yID0gd3JpdGVyLmVycm9yO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGVycm9yLmNvZGUgIT09IGVycm9yLkFCT1JUX0VSUikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRmc19lcnJvcigpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0XCJ3cml0ZXN0YXJ0IHByb2dyZXNzIHdyaXRlIGFib3J0XCIuc3BsaXQoXCIgXCIpLmZvckVhY2goZnVuY3Rpb24oZXZlbnQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHdyaXRlcltcIm9uXCIgKyBldmVudF0gPSBmaWxlc2F2ZXJbXCJvblwiICsgZXZlbnRdO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdHdyaXRlci53cml0ZShibG9iKTtcblx0XHRcdFx0XHRcdFx0XHRmaWxlc2F2ZXIuYWJvcnQgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHdyaXRlci5hYm9ydCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZmlsZXNhdmVyLnJlYWR5U3RhdGUgPSBmaWxlc2F2ZXIuRE9ORTtcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdGZpbGVzYXZlci5yZWFkeVN0YXRlID0gZmlsZXNhdmVyLldSSVRJTkc7XG5cdFx0XHRcdFx0XHRcdH0pLCBmc19lcnJvcik7XG5cdFx0XHRcdFx0XHR9KSwgZnNfZXJyb3IpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0ZGlyLmdldEZpbGUobmFtZSwge2NyZWF0ZTogZmFsc2V9LCBhYm9ydGFibGUoZnVuY3Rpb24oZmlsZSkge1xuXHRcdFx0XHRcdFx0Ly8gZGVsZXRlIGZpbGUgaWYgaXQgYWxyZWFkeSBleGlzdHNcblx0XHRcdFx0XHRcdGZpbGUucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHRzYXZlKCk7XG5cdFx0XHRcdFx0fSksIGFib3J0YWJsZShmdW5jdGlvbihleCkge1xuXHRcdFx0XHRcdFx0aWYgKGV4LmNvZGUgPT09IGV4Lk5PVF9GT1VORF9FUlIpIHtcblx0XHRcdFx0XHRcdFx0c2F2ZSgpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0ZnNfZXJyb3IoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdH0pLCBmc19lcnJvcik7XG5cdFx0XHR9KSwgZnNfZXJyb3IpO1xuXHRcdH1cblx0XHQsIEZTX3Byb3RvID0gRmlsZVNhdmVyLnByb3RvdHlwZVxuXHRcdCwgc2F2ZUFzID0gZnVuY3Rpb24oYmxvYiwgbmFtZSwgbm9fYXV0b19ib20pIHtcblx0XHRcdHJldHVybiBuZXcgRmlsZVNhdmVyKGJsb2IsIG5hbWUsIG5vX2F1dG9fYm9tKTtcblx0XHR9XG5cdDtcblx0Ly8gSUUgMTArIChuYXRpdmUgc2F2ZUFzKVxuXHRpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIiAmJiBuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYikge1xuXHRcdHJldHVybiBmdW5jdGlvbihibG9iLCBuYW1lLCBub19hdXRvX2JvbSkge1xuXHRcdFx0aWYgKCFub19hdXRvX2JvbSkge1xuXHRcdFx0XHRibG9iID0gYXV0b19ib20oYmxvYik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IoYmxvYiwgbmFtZSB8fCBcImRvd25sb2FkXCIpO1xuXHRcdH07XG5cdH1cblxuXHRGU19wcm90by5hYm9ydCA9IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBmaWxlc2F2ZXIgPSB0aGlzO1xuXHRcdGZpbGVzYXZlci5yZWFkeVN0YXRlID0gZmlsZXNhdmVyLkRPTkU7XG5cdFx0ZGlzcGF0Y2goZmlsZXNhdmVyLCBcImFib3J0XCIpO1xuXHR9O1xuXHRGU19wcm90by5yZWFkeVN0YXRlID0gRlNfcHJvdG8uSU5JVCA9IDA7XG5cdEZTX3Byb3RvLldSSVRJTkcgPSAxO1xuXHRGU19wcm90by5ET05FID0gMjtcblxuXHRGU19wcm90by5lcnJvciA9XG5cdEZTX3Byb3RvLm9ud3JpdGVzdGFydCA9XG5cdEZTX3Byb3RvLm9ucHJvZ3Jlc3MgPVxuXHRGU19wcm90by5vbndyaXRlID1cblx0RlNfcHJvdG8ub25hYm9ydCA9XG5cdEZTX3Byb3RvLm9uZXJyb3IgPVxuXHRGU19wcm90by5vbndyaXRlZW5kID1cblx0XHRudWxsO1xuXG5cdHJldHVybiBzYXZlQXM7XG59KFxuXHQgICB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmXG5cdHx8IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93XG5cdHx8IHRoaXMuY29udGVudFxuKSk7XG4vLyBgc2VsZmAgaXMgdW5kZWZpbmVkIGluIEZpcmVmb3ggZm9yIEFuZHJvaWQgY29udGVudCBzY3JpcHQgY29udGV4dFxuLy8gd2hpbGUgYHRoaXNgIGlzIG5zSUNvbnRlbnRGcmFtZU1lc3NhZ2VNYW5hZ2VyXG4vLyB3aXRoIGFuIGF0dHJpYnV0ZSBgY29udGVudGAgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgd2luZG93XG5cbmlmICh0eXBlb2YgbW9kdWxlICE9PSBcInVuZGVmaW5lZFwiICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gIG1vZHVsZS5leHBvcnRzLnNhdmVBcyA9IHNhdmVBcztcbn0gZWxzZSBpZiAoKHR5cGVvZiBkZWZpbmUgIT09IFwidW5kZWZpbmVkXCIgJiYgZGVmaW5lICE9PSBudWxsKSAmJiAoZGVmaW5lLmFtZCAhPSBudWxsKSkge1xuICBkZWZpbmUoW10sIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBzYXZlQXM7XG4gIH0pO1xufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvZmlsZXNhdmVyLmpzXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ=='); +},function(module,exports){eval('module.exports = function() { throw new Error("define cannot be used indirect"); };\r\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vYW1kLWRlZmluZS5qcz8wYmJhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZCQUE2QixtREFBbUQiLCJmaWxlIjoiMzcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB0aHJvdyBuZXcgRXJyb3IoXCJkZWZpbmUgY2Fubm90IGJlIHVzZWQgaW5kaXJlY3RcIik7IH07XHJcblxuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogKHdlYnBhY2spL2J1aWxkaW4vYW1kLWRlZmluZS5qc1xuICoqIG1vZHVsZSBpZCA9IDM3XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9')},function(module,exports){eval("/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {module.exports = __webpack_amd_options__;\r\n\n/* WEBPACK VAR INJECTION */}.call(exports, {}))\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vYW1kLW9wdGlvbnMuanM/NWY3MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSIsImZpbGUiOiIzOC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX2FtZF9vcHRpb25zX187XHJcblxuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogKHdlYnBhY2spL2J1aWxkaW4vYW1kLW9wdGlvbnMuanNcbiAqKiBtb2R1bGUgaWQgPSAzOFxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _Const = __webpack_require__(3);\n\nvar _Const2 = _interopRequireDefault(_Const);\n\nvar _events = __webpack_require__(33);\n\nvar Filter = (function (_EventEmitter) {\n _inherits(Filter, _EventEmitter);\n\n function Filter(data) {\n _classCallCheck(this, Filter);\n\n _get(Object.getPrototypeOf(Filter.prototype), 'constructor', this).call(this, data);\n this.currentFilter = {};\n }\n\n _createClass(Filter, [{\n key: 'handleFilter',\n value: function handleFilter(dataField, value, type) {\n var filterType = type || _Const2['default'].FILTER_TYPE.CUSTOM;\n\n if (value !== null && typeof value === 'object') {\n // value of the filter is an object\n var hasValue = true;\n for (var prop in value) {\n if (!value[prop] || value[prop] === '') {\n hasValue = false;\n break;\n }\n }\n // if one of the object properties is undefined or empty, we remove the filter\n if (hasValue) {\n this.currentFilter[dataField] = { value: value, type: filterType };\n } else {\n delete this.currentFilter[dataField];\n }\n } else if (!value || value.trim() === '') {\n delete this.currentFilter[dataField];\n } else {\n this.currentFilter[dataField] = { value: value.trim(), type: filterType };\n }\n this.emit('onFilterChange', this.currentFilter);\n }\n }]);\n\n return Filter;\n})(_events.EventEmitter);\n\nexports.Filter = Filter;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvRmlsdGVyLmpzPzVkNzMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztpQ0FBa0IsQ0FBUzs7OztrQ0FDRSxFQUFROztJQUV4QixNQUFNO1lBQU4sTUFBTTs7QUFDTixXQURBLE1BQU0sQ0FDTCxJQUFJLEVBQUU7MEJBRFAsTUFBTTs7QUFFZiwrQkFGUyxNQUFNLDZDQUVULElBQUksRUFBRTtBQUNaLFFBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO0dBQ3pCOztlQUpVLE1BQU07O1dBTUwsc0JBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7QUFDbkMsVUFBTSxVQUFVLEdBQUcsSUFBSSxJQUFJLG1CQUFNLFdBQVcsQ0FBQyxNQUFNLENBQUM7O0FBRXBELFVBQUksS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7O0FBRS9DLFlBQUksUUFBUSxHQUFHLElBQUksQ0FBQztBQUNwQixhQUFLLElBQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtBQUN4QixjQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUU7QUFDdEMsb0JBQVEsR0FBRyxLQUFLLENBQUM7QUFDakIsa0JBQU07V0FDUDtTQUNGOztBQUVELFlBQUksUUFBUSxFQUFFO0FBQ1osY0FBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDO1NBQ3BFLE1BQU07QUFDTCxpQkFBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3RDO09BQ0YsTUFBTSxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7QUFDeEMsZUFBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO09BQ3RDLE1BQU07QUFDTCxZQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUM7T0FDM0U7QUFDRCxVQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztLQUNqRDs7O1NBOUJVLE1BQU0iLCJmaWxlIjoiMzkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29uc3QgZnJvbSAnLi9Db25zdCc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuXG5leHBvcnQgY2xhc3MgRmlsdGVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IoZGF0YSkge1xuICAgIHN1cGVyKGRhdGEpO1xuICAgIHRoaXMuY3VycmVudEZpbHRlciA9IHt9O1xuICB9XG5cbiAgaGFuZGxlRmlsdGVyKGRhdGFGaWVsZCwgdmFsdWUsIHR5cGUpIHtcbiAgICBjb25zdCBmaWx0ZXJUeXBlID0gdHlwZSB8fCBDb25zdC5GSUxURVJfVFlQRS5DVVNUT007XG5cbiAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgLy8gdmFsdWUgb2YgdGhlIGZpbHRlciBpcyBhbiBvYmplY3RcbiAgICAgIGxldCBoYXNWYWx1ZSA9IHRydWU7XG4gICAgICBmb3IgKGNvbnN0IHByb3AgaW4gdmFsdWUpIHtcbiAgICAgICAgaWYgKCF2YWx1ZVtwcm9wXSB8fCB2YWx1ZVtwcm9wXSA9PT0gJycpIHtcbiAgICAgICAgICBoYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBpZiBvbmUgb2YgdGhlIG9iamVjdCBwcm9wZXJ0aWVzIGlzIHVuZGVmaW5lZCBvciBlbXB0eSwgd2UgcmVtb3ZlIHRoZSBmaWx0ZXJcbiAgICAgIGlmIChoYXNWYWx1ZSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJbZGF0YUZpZWxkXSA9IHsgdmFsdWU6IHZhbHVlLCB0eXBlOiBmaWx0ZXJUeXBlIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdGhpcy5jdXJyZW50RmlsdGVyW2RhdGFGaWVsZF07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghdmFsdWUgfHwgdmFsdWUudHJpbSgpID09PSAnJykge1xuICAgICAgZGVsZXRlIHRoaXMuY3VycmVudEZpbHRlcltkYXRhRmllbGRdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJbZGF0YUZpZWxkXSA9IHsgdmFsdWU6IHZhbHVlLnRyaW0oKSwgdHlwZTogZmlsdGVyVHlwZSB9O1xuICAgIH1cbiAgICB0aGlzLmVtaXQoJ29uRmlsdGVyQ2hhbmdlJywgdGhpcy5jdXJyZW50RmlsdGVyKTtcbiAgfVxufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvRmlsdGVyLmpzXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports,__webpack_require__){eval("/* eslint default-case: 0 */\n/* eslint guard-for-in: 0 */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _Const = __webpack_require__(3);\n\nvar _Const2 = _interopRequireDefault(_Const);\n\nvar _util = __webpack_require__(34);\n\nvar _util2 = _interopRequireDefault(_util);\n\nvar _filtersDate = __webpack_require__(41);\n\nvar _filtersDate2 = _interopRequireDefault(_filtersDate);\n\nvar _filtersText = __webpack_require__(42);\n\nvar _filtersText2 = _interopRequireDefault(_filtersText);\n\nvar _filtersRegex = __webpack_require__(43);\n\nvar _filtersRegex2 = _interopRequireDefault(_filtersRegex);\n\nvar _filtersSelect = __webpack_require__(44);\n\nvar _filtersSelect2 = _interopRequireDefault(_filtersSelect);\n\nvar _filtersNumber = __webpack_require__(45);\n\nvar _filtersNumber2 = _interopRequireDefault(_filtersNumber);\n\nvar TableHeaderColumn = (function (_Component) {\n _inherits(TableHeaderColumn, _Component);\n\n function TableHeaderColumn(props) {\n var _this = this;\n\n _classCallCheck(this, TableHeaderColumn);\n\n _get(Object.getPrototypeOf(TableHeaderColumn.prototype), 'constructor', this).call(this, props);\n\n this.handleColumnClick = function () {\n if (!_this.props.dataSort) return;\n var order = _this.props.sort === _Const2['default'].SORT_DESC ? _Const2['default'].SORT_ASC : _Const2['default'].SORT_DESC;\n _this.props.onSort(order, _this.props.dataField);\n };\n\n this.handleFilter = this.handleFilter.bind(this);\n }\n\n _createClass(TableHeaderColumn, [{\n key: 'handleFilter',\n value: function handleFilter(value, type) {\n this.props.filter.emitter.handleFilter(this.props.dataField, value, type);\n }\n }, {\n key: 'getFilters',\n value: function getFilters() {\n switch (this.props.filter.type) {\n case _Const2['default'].FILTER_TYPE.TEXT:\n {\n return _react2['default'].createElement(_filtersText2['default'], _extends({}, this.props.filter, {\n columnName: this.props.children, filterHandler: this.handleFilter }));\n }\n case _Const2['default'].FILTER_TYPE.REGEX:\n {\n return _react2['default'].createElement(_filtersRegex2['default'], _extends({}, this.props.filter, {\n columnName: this.props.children, filterHandler: this.handleFilter }));\n }\n case _Const2['default'].FILTER_TYPE.SELECT:\n {\n return _react2['default'].createElement(_filtersSelect2['default'], _extends({}, this.props.filter, {\n columnName: this.props.children, filterHandler: this.handleFilter }));\n }\n case _Const2['default'].FILTER_TYPE.NUMBER:\n {\n return _react2['default'].createElement(_filtersNumber2['default'], _extends({}, this.props.filter, {\n columnName: this.props.children, filterHandler: this.handleFilter }));\n }\n case _Const2['default'].FILTER_TYPE.DATE:\n {\n return _react2['default'].createElement(_filtersDate2['default'], _extends({}, this.props.filter, {\n columnName: this.props.children, filterHandler: this.handleFilter }));\n }\n case _Const2['default'].FILTER_TYPE.CUSTOM:\n {\n return this.props.filter.getElement(this.handleFilter, this.props.filter.customFilterParameters);\n }\n }\n }\n }, {\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.refs['header-col'].setAttribute('data-field', this.props.dataField);\n }\n }, {\n key: 'render',\n value: function render() {\n var defaultCaret = undefined;\n var thStyle = {\n textAlign: this.props.dataAlign,\n display: this.props.hidden ? 'none' : null\n };\n if (this.props.sortIndicator) {\n defaultCaret = !this.props.dataSort ? null : _react2['default'].createElement(\n 'span',\n { className: 'order' },\n _react2['default'].createElement(\n 'span',\n { className: 'dropdown' },\n _react2['default'].createElement('span', { className: 'caret', style: { margin: '10px 0 10px 5px', color: '#ccc' } })\n ),\n _react2['default'].createElement(\n 'span',\n { className: 'dropup' },\n _react2['default'].createElement('span', { className: 'caret', style: { margin: '10px 0', color: '#ccc' } })\n )\n );\n }\n var sortCaret = this.props.sort ? _util2['default'].renderReactSortCaret(this.props.sort) : defaultCaret;\n var classes = this.props.className + ' ' + (this.props.dataSort ? 'sort-column' : '');\n\n return _react2['default'].createElement(\n 'th',\n { ref: 'header-col',\n className: classes,\n style: thStyle,\n title: this.props.children,\n onClick: this.handleColumnClick },\n this.props.children,\n sortCaret,\n _react2['default'].createElement(\n 'div',\n { onClick: function (e) {\n return e.stopPropagation();\n } },\n this.props.filter ? this.getFilters() : null\n )\n );\n }\n }]);\n\n return TableHeaderColumn;\n})(_react.Component);\n\nvar filterTypeArray = [];\nfor (var key in _Const2['default'].FILTER_TYPE) {\n filterTypeArray.push(_Const2['default'].FILTER_TYPE[key]);\n}\n\nTableHeaderColumn.propTypes = {\n dataField: _react.PropTypes.string,\n dataAlign: _react.PropTypes.string,\n dataSort: _react.PropTypes.bool,\n onSort: _react.PropTypes.func,\n dataFormat: _react.PropTypes.func,\n isKey: _react.PropTypes.bool,\n editable: _react.PropTypes.any,\n hidden: _react.PropTypes.bool,\n searchable: _react.PropTypes.bool,\n className: _react.PropTypes.string,\n width: _react.PropTypes.string,\n sortFunc: _react.PropTypes.func,\n columnClassName: _react.PropTypes.any,\n filterFormatted: _react.PropTypes.bool,\n sort: _react.PropTypes.string,\n formatExtraData: _react.PropTypes.any,\n filter: _react.PropTypes.shape({\n type: _react.PropTypes.oneOf(filterTypeArray),\n delay: _react.PropTypes.number,\n options: _react.PropTypes.oneOfType([_react.PropTypes.object, // for SelectFilter\n _react.PropTypes.arrayOf(_react.PropTypes.number) // for NumberFilter\n ]),\n numberComparators: _react.PropTypes.arrayOf(_react.PropTypes.string),\n emitter: _react.PropTypes.object,\n placeholder: _react.PropTypes.string,\n getElement: _react.PropTypes.func,\n customFilterParameters: _react.PropTypes.object\n }),\n sortIndicator: _react.PropTypes.bool\n};\n\nTableHeaderColumn.defaultProps = {\n dataAlign: 'left',\n dataSort: false,\n dataFormat: undefined,\n isKey: false,\n editable: true,\n onSort: undefined,\n hidden: false,\n searchable: true,\n className: '',\n width: null,\n sortFunc: undefined,\n columnClassName: '',\n filterFormatted: false,\n sort: undefined,\n formatExtraData: undefined,\n filter: undefined,\n sortIndicator: true\n};\n\nexports['default'] = TableHeaderColumn;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvVGFibGVIZWFkZXJDb2x1bW4uanM/YTNlNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztpQ0FFNEMsQ0FBTzs7OztpQ0FDakMsQ0FBUzs7OztnQ0FDVixFQUFROzs7O3VDQUNGLEVBQWdCOzs7O3VDQUNoQixFQUFnQjs7Ozt3Q0FDZixFQUFpQjs7Ozt5Q0FDaEIsRUFBa0I7Ozs7eUNBQ2xCLEVBQWtCOzs7O0lBRXJDLGlCQUFpQjtZQUFqQixpQkFBaUI7O0FBRVYsV0FGUCxpQkFBaUIsQ0FFVCxLQUFLLEVBQUU7OzswQkFGZixpQkFBaUI7O0FBR25CLCtCQUhFLGlCQUFpQiw2Q0FHYixLQUFLLEVBQUU7O1NBSWYsaUJBQWlCLEdBQUcsWUFBTTtBQUN4QixVQUFJLENBQUMsTUFBSyxLQUFLLENBQUMsUUFBUSxFQUFFLE9BQU87QUFDakMsVUFBTSxLQUFLLEdBQUcsTUFBSyxLQUFLLENBQUMsSUFBSSxLQUFLLG1CQUFNLFNBQVMsR0FBRyxtQkFBTSxRQUFRLEdBQUcsbUJBQU0sU0FBUyxDQUFDO0FBQ3JGLFlBQUssS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBSyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7S0FDaEQ7O0FBUEMsUUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztHQUNsRDs7ZUFMRyxpQkFBaUI7O1dBYVQsc0JBQUMsS0FBSyxFQUFFLElBQUksRUFBRTtBQUN4QixVQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztLQUMzRTs7O1dBRVMsc0JBQUc7QUFDWCxjQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUk7QUFDOUIsYUFBSyxtQkFBTSxX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RSxTQUFTO0FBQzFCLFFBQU0sRUFBRSxTQUFTO0FBQ2pCLGVBQWEsRUFBRSxJQUFJO0NBQ3BCLENBQUM7O3FCQUVhLGlCQUFpQiIsImZpbGUiOiI0MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBkZWZhdWx0LWNhc2U6IDAgKi9cbi8qIGVzbGludCBndWFyZC1mb3ItaW46IDAgKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFByb3BUeXBlcyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBDb25zdCBmcm9tICcuL0NvbnN0JztcbmltcG9ydCBVdGlsIGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgRGF0ZUZpbHRlciBmcm9tICcuL2ZpbHRlcnMvRGF0ZSc7XG5pbXBvcnQgVGV4dEZpbHRlciBmcm9tICcuL2ZpbHRlcnMvVGV4dCc7XG5pbXBvcnQgUmVnZXhGaWx0ZXIgZnJvbSAnLi9maWx0ZXJzL1JlZ2V4JztcbmltcG9ydCBTZWxlY3RGaWx0ZXIgZnJvbSAnLi9maWx0ZXJzL1NlbGVjdCc7XG5pbXBvcnQgTnVtYmVyRmlsdGVyIGZyb20gJy4vZmlsdGVycy9OdW1iZXInO1xuXG5jbGFzcyBUYWJsZUhlYWRlckNvbHVtbiBleHRlbmRzIENvbXBvbmVudCB7XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVGaWx0ZXIgPSB0aGlzLmhhbmRsZUZpbHRlci5iaW5kKHRoaXMpO1xuICB9XG5cbiAgaGFuZGxlQ29sdW1uQ2xpY2sgPSAoKSA9PiB7XG4gICAgaWYgKCF0aGlzLnByb3BzLmRhdGFTb3J0KSByZXR1cm47XG4gICAgY29uc3Qgb3JkZXIgPSB0aGlzLnByb3BzLnNvcnQgPT09IENvbnN0LlNPUlRfREVTQyA/IENvbnN0LlNPUlRfQVNDIDogQ29uc3QuU09SVF9ERVNDO1xuICAgIHRoaXMucHJvcHMub25Tb3J0KG9yZGVyLCB0aGlzLnByb3BzLmRhdGFGaWVsZCk7XG4gIH1cblxuICBoYW5kbGVGaWx0ZXIodmFsdWUsIHR5cGUpIHtcbiAgICB0aGlzLnByb3BzLmZpbHRlci5lbWl0dGVyLmhhbmRsZUZpbHRlcih0aGlzLnByb3BzLmRhdGFGaWVsZCwgdmFsdWUsIHR5cGUpO1xuICB9XG5cbiAgZ2V0RmlsdGVycygpIHtcbiAgICBzd2l0Y2ggKHRoaXMucHJvcHMuZmlsdGVyLnR5cGUpIHtcbiAgICBjYXNlIENvbnN0LkZJTFRFUl9UWVBFLlRFWFQ6IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUZXh0RmlsdGVyIHsgLi4udGhpcy5wcm9wcy5maWx0ZXIgfVxuICAgICAgICAgIGNvbHVtbk5hbWU9eyB0aGlzLnByb3BzLmNoaWxkcmVuIH0gZmlsdGVySGFuZGxlcj17IHRoaXMuaGFuZGxlRmlsdGVyIH0gLz5cbiAgICAgICk7XG4gICAgfVxuICAgIGNhc2UgQ29uc3QuRklMVEVSX1RZUEUuUkVHRVg6IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxSZWdleEZpbHRlciB7IC4uLnRoaXMucHJvcHMuZmlsdGVyIH1cbiAgICAgICAgICBjb2x1bW5OYW1lPXsgdGhpcy5wcm9wcy5jaGlsZHJlbiB9IGZpbHRlckhhbmRsZXI9eyB0aGlzLmhhbmRsZUZpbHRlciB9IC8+XG4gICAgICApO1xuICAgIH1cbiAgICBjYXNlIENvbnN0LkZJTFRFUl9UWVBFLlNFTEVDVDoge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFNlbGVjdEZpbHRlciB7IC4uLnRoaXMucHJvcHMuZmlsdGVyIH1cbiAgICAgICAgICBjb2x1bW5OYW1lPXsgdGhpcy5wcm9wcy5jaGlsZHJlbiB9IGZpbHRlckhhbmRsZXI9eyB0aGlzLmhhbmRsZUZpbHRlciB9IC8+XG4gICAgICApO1xuICAgIH1cbiAgICBjYXNlIENvbnN0LkZJTFRFUl9UWVBFLk5VTUJFUjoge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPE51bWJlckZpbHRlciB7IC4uLnRoaXMucHJvcHMuZmlsdGVyIH1cbiAgICAgICAgICBjb2x1bW5OYW1lPXsgdGhpcy5wcm9wcy5jaGlsZHJlbiB9IGZpbHRlckhhbmRsZXI9eyB0aGlzLmhhbmRsZUZpbHRlciB9IC8+XG4gICAgICApO1xuICAgIH1cbiAgICBjYXNlIENvbnN0LkZJTFRFUl9UWVBFLkRBVEU6IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxEYXRlRmlsdGVyIHsgLi4udGhpcy5wcm9wcy5maWx0ZXIgfVxuICAgICAgICAgIGNvbHVtbk5hbWU9eyB0aGlzLnByb3BzLmNoaWxkcmVuIH0gZmlsdGVySGFuZGxlcj17IHRoaXMuaGFuZGxlRmlsdGVyIH0gLz5cbiAgICAgICk7XG4gICAgfVxuICAgIGNhc2UgQ29uc3QuRklMVEVSX1RZUEUuQ1VTVE9NOiB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5maWx0ZXIuZ2V0RWxlbWVudCh0aGlzLmhhbmRsZUZpbHRlcixcbiAgICAgICAgICB0aGlzLnByb3BzLmZpbHRlci5jdXN0b21GaWx0ZXJQYXJhbWV0ZXJzKTtcbiAgICB9XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5yZWZzWydoZWFkZXItY29sJ10uc2V0QXR0cmlidXRlKCdkYXRhLWZpZWxkJywgdGhpcy5wcm9wcy5kYXRhRmllbGQpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGxldCBkZWZhdWx0Q2FyZXQ7XG4gICAgY29uc3QgdGhTdHlsZSA9IHtcbiAgICAgIHRleHRBbGlnbjogdGhpcy5wcm9wcy5kYXRhQWxpZ24sXG4gICAgICBkaXNwbGF5OiB0aGlzLnByb3BzLmhpZGRlbiA/ICdub25lJyA6IG51bGxcbiAgICB9O1xuICAgIGlmICh0aGlzLnByb3BzLnNvcnRJbmRpY2F0b3IpIHtcbiAgICAgIGRlZmF1bHRDYXJldCA9ICghdGhpcy5wcm9wcy5kYXRhU29ydCkgPyBudWxsIDogKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9J29yZGVyJz5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9J2Ryb3Bkb3duJz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0nY2FyZXQnIHN0eWxlPXsgeyBtYXJnaW46ICcxMHB4IDAgMTBweCA1cHgnLCBjb2xvcjogJyNjY2MnIH0gfT48L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0nZHJvcHVwJz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0nY2FyZXQnIHN0eWxlPXsgeyBtYXJnaW46ICcxMHB4IDAnLCBjb2xvcjogJyNjY2MnIH0gfT48L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBzb3J0Q2FyZXQgPSB0aGlzLnByb3BzLnNvcnQgPyBVdGlsLnJlbmRlclJlYWN0U29ydENhcmV0KHRoaXMucHJvcHMuc29ydCkgOiBkZWZhdWx0Q2FyZXQ7XG4gICAgY29uc3QgY2xhc3NlcyA9IHRoaXMucHJvcHMuY2xhc3NOYW1lICsgJyAnICsgKHRoaXMucHJvcHMuZGF0YVNvcnQgPyAnc29ydC1jb2x1bW4nIDogJycpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDx0aCByZWY9J2hlYWRlci1jb2wnXG4gICAgICAgICAgY2xhc3NOYW1lPXsgY2xhc3NlcyB9XG4gICAgICAgICAgc3R5bGU9eyB0aFN0eWxlIH1cbiAgICAgICAgICB0aXRsZT17IHRoaXMucHJvcHMuY2hpbGRyZW4gfVxuICAgICAgICAgIG9uQ2xpY2s9eyB0aGlzLmhhbmRsZUNvbHVtbkNsaWNrIH0+XG4gICAgICAgIHsgdGhpcy5wcm9wcy5jaGlsZHJlbiB9eyBzb3J0Q2FyZXQgfVxuICAgICAgICA8ZGl2IG9uQ2xpY2s9eyBlID0+IGUuc3RvcFByb3BhZ2F0aW9uKCkgfT5cbiAgICAgICAgICB7IHRoaXMucHJvcHMuZmlsdGVyID8gdGhpcy5nZXRGaWx0ZXJzKCkgOiBudWxsIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3RoPlxuICAgICk7XG4gIH1cbn1cblxuY29uc3QgZmlsdGVyVHlwZUFycmF5ID0gW107XG5mb3IgKGNvbnN0IGtleSBpbiBDb25zdC5GSUxURVJfVFlQRSkge1xuICBmaWx0ZXJUeXBlQXJyYXkucHVzaChDb25zdC5GSUxURVJfVFlQRVtrZXldKTtcbn1cblxuVGFibGVIZWFkZXJDb2x1bW4ucHJvcFR5cGVzID0ge1xuICBkYXRhRmllbGQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGRhdGFBbGlnbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGF0YVNvcnQ6IFByb3BUeXBlcy5ib29sLFxuICBvblNvcnQ6IFByb3BUeXBlcy5mdW5jLFxuICBkYXRhRm9ybWF0OiBQcm9wVHlwZXMuZnVuYyxcbiAgaXNLZXk6IFByb3BUeXBlcy5ib29sLFxuICBlZGl0YWJsZTogUHJvcFR5cGVzLmFueSxcbiAgaGlkZGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgc2VhcmNoYWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgd2lkdGg6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNvcnRGdW5jOiBQcm9wVHlwZXMuZnVuYyxcbiAgY29sdW1uQ2xhc3NOYW1lOiBQcm9wVHlwZXMuYW55LFxuICBmaWx0ZXJGb3JtYXR0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICBzb3J0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBmb3JtYXRFeHRyYURhdGE6IFByb3BUeXBlcy5hbnksXG4gIGZpbHRlcjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICB0eXBlOiBQcm9wVHlwZXMub25lT2YoZmlsdGVyVHlwZUFycmF5KSxcbiAgICBkZWxheTogUHJvcFR5cGVzLm51bWJlcixcbiAgICBvcHRpb25zOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbiAgICAgIFByb3BUeXBlcy5vYmplY3QsIC8vIGZvciBTZWxlY3RGaWx0ZXJcbiAgICAgIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5udW1iZXIpIC8vIGZvciBOdW1iZXJGaWx0ZXJcbiAgICBdKSxcbiAgICBudW1iZXJDb21wYXJhdG9yczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgZW1pdHRlcjogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBnZXRFbGVtZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBjdXN0b21GaWx0ZXJQYXJhbWV0ZXJzOiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICBzb3J0SW5kaWNhdG9yOiBQcm9wVHlwZXMuYm9vbFxufTtcblxuVGFibGVIZWFkZXJDb2x1bW4uZGVmYXVsdFByb3BzID0ge1xuICBkYXRhQWxpZ246ICdsZWZ0JyxcbiAgZGF0YVNvcnQ6IGZhbHNlLFxuICBkYXRhRm9ybWF0OiB1bmRlZmluZWQsXG4gIGlzS2V5OiBmYWxzZSxcbiAgZWRpdGFibGU6IHRydWUsXG4gIG9uU29ydDogdW5kZWZpbmVkLFxuICBoaWRkZW46IGZhbHNlLFxuICBzZWFyY2hhYmxlOiB0cnVlLFxuICBjbGFzc05hbWU6ICcnLFxuICB3aWR0aDogbnVsbCxcbiAgc29ydEZ1bmM6IHVuZGVmaW5lZCxcbiAgY29sdW1uQ2xhc3NOYW1lOiAnJyxcbiAgZmlsdGVyRm9ybWF0dGVkOiBmYWxzZSxcbiAgc29ydDogdW5kZWZpbmVkLFxuICBmb3JtYXRFeHRyYURhdGE6IHVuZGVmaW5lZCxcbiAgZmlsdGVyOiB1bmRlZmluZWQsXG4gIHNvcnRJbmRpY2F0b3I6IHRydWVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlSGVhZGVyQ29sdW1uO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvVGFibGVIZWFkZXJDb2x1bW4uanNcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports,__webpack_require__){eval("/* eslint quotes: 0 */\n/* eslint max-len: 0 */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _Const = __webpack_require__(3);\n\nvar _Const2 = _interopRequireDefault(_Const);\n\nvar DateFilter = (function (_Component) {\n _inherits(DateFilter, _Component);\n\n function DateFilter(props) {\n _classCallCheck(this, DateFilter);\n\n _get(Object.getPrototypeOf(DateFilter.prototype), 'constructor', this).call(this, props);\n this.filter = this.filter.bind(this);\n }\n\n _createClass(DateFilter, [{\n key: 'setDefaultDate',\n value: function setDefaultDate() {\n var defaultDate = '';\n if (this.props.defaultValue) {\n // Set the appropriate format for the input type=date, i.e. \"YYYY-MM-DD\"\n var defaultValue = new Date(this.props.defaultValue);\n defaultDate = defaultValue.getFullYear() + '-' + (\"0\" + (defaultValue.getMonth() + 1)).slice(-2) + '-' + (\"0\" + defaultValue.getDate()).slice(-2);\n }\n return defaultDate;\n }\n }, {\n key: 'filter',\n value: function filter(event) {\n var dateValue = event.target.value;\n if (dateValue) {\n this.props.filterHandler(new Date(dateValue), _Const2['default'].FILTER_TYPE.DATE);\n } else {\n this.props.filterHandler(null, _Const2['default'].FILTER_TYPE.DATE);\n }\n }\n }, {\n key: 'componentDidMount',\n value: function componentDidMount() {\n var dateValue = this.refs.inputDate.defaultValue;\n if (dateValue) {\n this.props.filterHandler(new Date(dateValue), _Const2['default'].FILTER_TYPE.DATE);\n }\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2['default'].createElement('input', { ref: 'inputDate',\n className: 'filter date-filter form-control',\n type: 'date',\n onChange: this.filter,\n defaultValue: this.setDefaultDate() });\n }\n }]);\n\n return DateFilter;\n})(_react.Component);\n\nDateFilter.propTypes = {\n filterHandler: _react.PropTypes.func.isRequired,\n defaultValue: _react.PropTypes.object,\n columnName: _react.PropTypes.string\n};\n\nexports['default'] = DateFilter;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZmlsdGVycy9EYXRlLmpzP2ExOTIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O2lDQUU0QyxDQUFPOzs7O2lDQUNqQyxDQUFVOzs7O0lBRXRCLFVBQVU7WUFBVixVQUFVOztBQUNILFdBRFAsVUFBVSxDQUNGLEtBQUssRUFBRTswQkFEZixVQUFVOztBQUVaLCtCQUZFLFVBQVUsNkNBRU4sS0FBSyxFQUFFO0FBQ2IsUUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztHQUN0Qzs7ZUFKRyxVQUFVOztXQU1BLDBCQUFHO0FBQ2YsVUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLFVBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUU7O0FBRTNCLFlBQU0sWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDdkQsbUJBQVcsR0FBTSxZQUFZLENBQUMsV0FBVyxFQUFFLFNBQUksQ0FBQyxHQUFHLElBQUksWUFBWSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFBQyxDQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFJLENBQUMsR0FBRyxHQUFHLFlBQVksQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUcsQ0FBQztPQUM5STtBQUNELGFBQU8sV0FBVyxDQUFDO0tBQ3BCOzs7V0FFSyxnQkFBQyxLQUFLLEVBQUU7QUFDWixVQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUNyQyxVQUFJLFNBQVMsRUFBRTtBQUNiLFlBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLG1CQUFNLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN2RSxNQUFNO0FBQ0wsWUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLG1CQUFNLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN4RDtLQUNGOzs7V0FFZ0IsNkJBQUc7QUFDbEIsVUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDO0FBQ25ELFVBQUksU0FBUyxFQUFFO0FBQ2IsWUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsbUJBQU0sV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ3ZFO0tBQ0Y7OztXQUVLLGtCQUFHO0FBQ1AsYUFDSSw0Q0FBTyxHQUFHLEVBQUMsV0FBVztBQUNuQixpQkFBUyxFQUFDLGlDQUFpQztBQUMzQyxZQUFJLEVBQUMsTUFBTTtBQUNYLGdCQUFRLEVBQUcsSUFBSSxDQUFDLE1BQVE7QUFDeEIsb0JBQVksRUFBRyxJQUFJLENBQUMsY0FBYyxFQUFJLEdBQUcsQ0FDOUM7S0FDSDs7O1NBeENHLFVBQVU7OztBQTJDaEIsVUFBVSxDQUFDLFNBQVMsR0FBRztBQUNyQixlQUFhLEVBQUUsaUJBQVUsSUFBSSxDQUFDLFVBQVU7QUFDeEMsY0FBWSxFQUFFLGlCQUFVLE1BQU07QUFDOUIsWUFBVSxFQUFFLGlCQUFVLE1BQU07Q0FDN0IsQ0FBQzs7cUJBRWEsVUFBVSIsImZpbGUiOiI0MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBxdW90ZXM6IDAgKi9cbi8qIGVzbGludCBtYXgtbGVuOiAwICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBQcm9wVHlwZXMgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi4vQ29uc3QnO1xuXG5jbGFzcyBEYXRlRmlsdGVyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5maWx0ZXIgPSB0aGlzLmZpbHRlci5iaW5kKHRoaXMpO1xuICB9XG5cbiAgc2V0RGVmYXVsdERhdGUoKSB7XG4gICAgbGV0IGRlZmF1bHREYXRlID0gJyc7XG4gICAgaWYgKHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIC8vIFNldCB0aGUgYXBwcm9wcmlhdGUgZm9ybWF0IGZvciB0aGUgaW5wdXQgdHlwZT1kYXRlLCBpLmUuIFwiWVlZWS1NTS1ERFwiXG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBuZXcgRGF0ZSh0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSk7XG4gICAgICBkZWZhdWx0RGF0ZSA9IGAke2RlZmF1bHRWYWx1ZS5nZXRGdWxsWWVhcigpfS0keyhcIjBcIiArIChkZWZhdWx0VmFsdWUuZ2V0TW9udGgoKSArIDEpKS5zbGljZSgtMil9LSR7KFwiMFwiICsgZGVmYXVsdFZhbHVlLmdldERhdGUoKSkuc2xpY2UoLTIpfWA7XG4gICAgfVxuICAgIHJldHVybiBkZWZhdWx0RGF0ZTtcbiAgfVxuXG4gIGZpbHRlcihldmVudCkge1xuICAgIGNvbnN0IGRhdGVWYWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICBpZiAoZGF0ZVZhbHVlKSB7XG4gICAgICB0aGlzLnByb3BzLmZpbHRlckhhbmRsZXIobmV3IERhdGUoZGF0ZVZhbHVlKSwgQ29uc3QuRklMVEVSX1RZUEUuREFURSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvcHMuZmlsdGVySGFuZGxlcihudWxsLCBDb25zdC5GSUxURVJfVFlQRS5EQVRFKTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCBkYXRlVmFsdWUgPSB0aGlzLnJlZnMuaW5wdXREYXRlLmRlZmF1bHRWYWx1ZTtcbiAgICBpZiAoZGF0ZVZhbHVlKSB7XG4gICAgICB0aGlzLnByb3BzLmZpbHRlckhhbmRsZXIobmV3IERhdGUoZGF0ZVZhbHVlKSwgQ29uc3QuRklMVEVSX1RZUEUuREFURSk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICAgIDxpbnB1dCByZWY9J2lucHV0RGF0ZSdcbiAgICAgICAgICAgY2xhc3NOYW1lPSdmaWx0ZXIgZGF0ZS1maWx0ZXIgZm9ybS1jb250cm9sJ1xuICAgICAgICAgICB0eXBlPSdkYXRlJ1xuICAgICAgICAgICBvbkNoYW5nZT17IHRoaXMuZmlsdGVyIH1cbiAgICAgICAgICAgZGVmYXVsdFZhbHVlPXsgdGhpcy5zZXREZWZhdWx0RGF0ZSgpIH0gLz5cbiAgICApO1xuICB9XG59XG5cbkRhdGVGaWx0ZXIucHJvcFR5cGVzID0ge1xuICBmaWx0ZXJIYW5kbGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5vYmplY3QsXG4gIGNvbHVtbk5hbWU6IFByb3BUeXBlcy5zdHJpbmdcbn07XG5cbmV4cG9ydCBkZWZhdWx0IERhdGVGaWx0ZXI7XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9maWx0ZXJzL0RhdGUuanNcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9"); +},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _Const = __webpack_require__(3);\n\nvar _Const2 = _interopRequireDefault(_Const);\n\nvar TextFilter = (function (_Component) {\n _inherits(TextFilter, _Component);\n\n function TextFilter(props) {\n _classCallCheck(this, TextFilter);\n\n _get(Object.getPrototypeOf(TextFilter.prototype), 'constructor', this).call(this, props);\n this.filter = this.filter.bind(this);\n this.timeout = null;\n }\n\n _createClass(TextFilter, [{\n key: 'filter',\n value: function filter(event) {\n var _this = this;\n\n if (this.timeout) {\n clearTimeout(this.timeout);\n }\n var filterValue = event.target.value;\n this.timeout = setTimeout(function () {\n _this.props.filterHandler(filterValue, _Const2['default'].FILTER_TYPE.TEXT);\n }, this.props.delay);\n }\n }, {\n key: 'componentDidMount',\n value: function componentDidMount() {\n var defaultValue = this.refs.inputText.defaultValue;\n if (defaultValue) {\n this.props.filterHandler(defaultValue, _Const2['default'].FILTER_TYPE.TEXT);\n }\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n clearTimeout(this.timeout);\n }\n }, {\n key: 'render',\n value: function render() {\n var _props = this.props;\n var placeholder = _props.placeholder;\n var columnName = _props.columnName;\n var defaultValue = _props.defaultValue;\n\n return _react2['default'].createElement('input', { ref: 'inputText',\n className: 'filter text-filter form-control',\n type: 'text',\n onChange: this.filter,\n placeholder: placeholder || 'Enter ' + columnName + '...',\n defaultValue: defaultValue ? defaultValue : '' });\n }\n }]);\n\n return TextFilter;\n})(_react.Component);\n\nTextFilter.propTypes = {\n filterHandler: _react.PropTypes.func.isRequired,\n defaultValue: _react.PropTypes.string,\n delay: _react.PropTypes.number,\n placeholder: _react.PropTypes.string,\n columnName: _react.PropTypes.string\n};\n\nTextFilter.defaultProps = {\n delay: _Const2['default'].FILTER_DELAY\n};\n\nexports['default'] = TextFilter;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZmlsdGVycy9UZXh0LmpzPzIxYWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztpQ0FBNEMsQ0FBTzs7OztpQ0FDakMsQ0FBVTs7OztJQUV0QixVQUFVO1lBQVYsVUFBVTs7QUFDSCxXQURQLFVBQVUsQ0FDRixLQUFLLEVBQUU7MEJBRGYsVUFBVTs7QUFFWiwrQkFGRSxVQUFVLDZDQUVOLEtBQUssRUFBRTtBQUNiLFFBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsUUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7R0FDckI7O2VBTEcsVUFBVTs7V0FPUixnQkFBQyxLQUFLLEVBQUU7OztBQUNaLFVBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUNoQixvQkFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztPQUM1QjtBQUNELFVBQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQ3ZDLFVBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLFlBQU07QUFDOUIsY0FBSyxLQUFLLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxtQkFBTSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDL0QsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3RCOzs7V0FFZ0IsNkJBQUc7QUFDbEIsVUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDO0FBQ3RELFVBQUksWUFBWSxFQUFFO0FBQ2hCLFlBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxtQkFBTSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDaEU7S0FDRjs7O1dBRW1CLGdDQUFHO0FBQ3JCLGtCQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQzVCOzs7V0FFSyxrQkFBRzttQkFDMkMsSUFBSSxDQUFDLEtBQUs7VUFBcEQsV0FBVyxVQUFYLFdBQVc7VUFBRSxVQUFVLFVBQVYsVUFBVTtVQUFFLFlBQVksVUFBWixZQUFZOztBQUM3QyxhQUNFLDRDQUFPLEdBQUcsRUFBQyxXQUFXO0FBQ3BCLGlCQUFTLEVBQUMsaUNBQWlDO0FBQzNDLFlBQUksRUFBQyxNQUFNO0FBQ1gsZ0JBQVEsRUFBRyxJQUFJLENBQUMsTUFBUTtBQUN4QixtQkFBVyxFQUFHLFdBQVcsZUFBYSxVQUFVLFFBQU87QUFDdkQsb0JBQVksRUFBRyxZQUFZLEdBQUcsWUFBWSxHQUFHLEVBQUksR0FBRyxDQUN0RDtLQUNIOzs7U0F0Q0csVUFBVTs7O0FBeUNoQixVQUFVLENBQUMsU0FBUyxHQUFHO0FBQ3JCLGVBQWEsRUFBRSxpQkFBVSxJQUFJLENBQUMsVUFBVTtBQUN4QyxjQUFZLEVBQUUsaUJBQVUsTUFBTTtBQUM5QixPQUFLLEVBQUUsaUJBQVUsTUFBTTtBQUN2QixhQUFXLEVBQUUsaUJBQVUsTUFBTTtBQUM3QixZQUFVLEVBQUUsaUJBQVUsTUFBTTtDQUM3QixDQUFDOztBQUVGLFVBQVUsQ0FBQyxZQUFZLEdBQUc7QUFDeEIsT0FBSyxFQUFFLG1CQUFNLFlBQVk7Q0FDMUIsQ0FBQzs7cUJBRWEsVUFBVSIsImZpbGUiOiI0Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIFByb3BUeXBlcyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBDb25zdCBmcm9tICcuLi9Db25zdCc7XG5cbmNsYXNzIFRleHRGaWx0ZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmZpbHRlciA9IHRoaXMuZmlsdGVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy50aW1lb3V0ID0gbnVsbDtcbiAgfVxuXG4gIGZpbHRlcihldmVudCkge1xuICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucHJvcHMuZmlsdGVySGFuZGxlcihmaWx0ZXJWYWx1ZSwgQ29uc3QuRklMVEVSX1RZUEUuVEVYVCk7XG4gICAgfSwgdGhpcy5wcm9wcy5kZWxheSk7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzLnJlZnMuaW5wdXRUZXh0LmRlZmF1bHRWYWx1ZTtcbiAgICBpZiAoZGVmYXVsdFZhbHVlKSB7XG4gICAgICB0aGlzLnByb3BzLmZpbHRlckhhbmRsZXIoZGVmYXVsdFZhbHVlLCBDb25zdC5GSUxURVJfVFlQRS5URVhUKTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IHBsYWNlaG9sZGVyLCBjb2x1bW5OYW1lLCBkZWZhdWx0VmFsdWUgfSA9IHRoaXMucHJvcHM7XG4gICAgcmV0dXJuIChcbiAgICAgIDxpbnB1dCByZWY9J2lucHV0VGV4dCdcbiAgICAgICAgY2xhc3NOYW1lPSdmaWx0ZXIgdGV4dC1maWx0ZXIgZm9ybS1jb250cm9sJ1xuICAgICAgICB0eXBlPSd0ZXh0J1xuICAgICAgICBvbkNoYW5nZT17IHRoaXMuZmlsdGVyIH1cbiAgICAgICAgcGxhY2Vob2xkZXI9eyBwbGFjZWhvbGRlciB8fCBgRW50ZXIgJHtjb2x1bW5OYW1lfS4uLmAgfVxuICAgICAgICBkZWZhdWx0VmFsdWU9eyBkZWZhdWx0VmFsdWUgPyBkZWZhdWx0VmFsdWUgOiAnJyB9IC8+XG4gICAgKTtcbiAgfVxufVxuXG5UZXh0RmlsdGVyLnByb3BUeXBlcyA9IHtcbiAgZmlsdGVySGFuZGxlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBkZWxheTogUHJvcFR5cGVzLm51bWJlcixcbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNvbHVtbk5hbWU6IFByb3BUeXBlcy5zdHJpbmdcbn07XG5cblRleHRGaWx0ZXIuZGVmYXVsdFByb3BzID0ge1xuICBkZWxheTogQ29uc3QuRklMVEVSX0RFTEFZXG59O1xuXG5leHBvcnQgZGVmYXVsdCBUZXh0RmlsdGVyO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvZmlsdGVycy9UZXh0LmpzXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ==")},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _Const = __webpack_require__(3);\n\nvar _Const2 = _interopRequireDefault(_Const);\n\nvar RegexFilter = (function (_Component) {\n _inherits(RegexFilter, _Component);\n\n function RegexFilter(props) {\n _classCallCheck(this, RegexFilter);\n\n _get(Object.getPrototypeOf(RegexFilter.prototype), 'constructor', this).call(this, props);\n this.filter = this.filter.bind(this);\n this.timeout = null;\n }\n\n _createClass(RegexFilter, [{\n key: 'filter',\n value: function filter(event) {\n var _this = this;\n\n if (this.timeout) {\n clearTimeout(this.timeout);\n }\n var filterValue = event.target.value;\n this.timeout = setTimeout(function () {\n _this.props.filterHandler(filterValue, _Const2['default'].FILTER_TYPE.REGEX);\n }, this.props.delay);\n }\n }, {\n key: 'componentDidMount',\n value: function componentDidMount() {\n var value = this.refs.inputText.defaultValue;\n if (value) {\n this.props.filterHandler(value, _Const2['default'].FILTER_TYPE.REGEX);\n }\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n clearTimeout(this.timeout);\n }\n }, {\n key: 'render',\n value: function render() {\n var _props = this.props;\n var defaultValue = _props.defaultValue;\n var placeholder = _props.placeholder;\n var columnName = _props.columnName;\n\n return _react2['default'].createElement('input', { ref: 'inputText',\n className: 'filter text-filter form-control',\n type: 'text',\n onChange: this.filter,\n placeholder: placeholder || 'Enter Regex for ' + columnName + '...',\n defaultValue: defaultValue ? defaultValue : '' });\n }\n }]);\n\n return RegexFilter;\n})(_react.Component);\n\nRegexFilter.propTypes = {\n filterHandler: _react.PropTypes.func.isRequired,\n defaultValue: _react.PropTypes.string,\n delay: _react.PropTypes.number,\n placeholder: _react.PropTypes.string,\n columnName: _react.PropTypes.string\n};\n\nRegexFilter.defaultProps = {\n delay: _Const2['default'].FILTER_DELAY\n};\n\nexports['default'] = RegexFilter;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZmlsdGVycy9SZWdleC5qcz8wNzY3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7aUNBQTRDLENBQU87Ozs7aUNBQ2pDLENBQVU7Ozs7SUFFdEIsV0FBVztZQUFYLFdBQVc7O0FBQ0osV0FEUCxXQUFXLENBQ0gsS0FBSyxFQUFFOzBCQURmLFdBQVc7O0FBRWIsK0JBRkUsV0FBVyw2Q0FFUCxLQUFLLEVBQUU7QUFDYixRQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JDLFFBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0dBQ3JCOztlQUxHLFdBQVc7O1dBT1QsZ0JBQUMsS0FBSyxFQUFFOzs7QUFDWixVQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDaEIsb0JBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7T0FDNUI7QUFDRCxVQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUN2QyxVQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxZQUFNO0FBQzlCLGNBQUssS0FBSyxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsbUJBQU0sV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO09BQ2hFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUN0Qjs7O1dBRWdCLDZCQUFHO0FBQ2xCLFVBQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQztBQUMvQyxVQUFJLEtBQUssRUFBRTtBQUNULFlBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxtQkFBTSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7T0FDMUQ7S0FDRjs7O1dBRW1CLGdDQUFHO0FBQ3JCLGtCQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQzVCOzs7V0FFSyxrQkFBRzttQkFDMkMsSUFBSSxDQUFDLEtBQUs7VUFBcEQsWUFBWSxVQUFaLFlBQVk7VUFBRSxXQUFXLFVBQVgsV0FBVztVQUFFLFVBQVUsVUFBVixVQUFVOztBQUM3QyxhQUNFLDRDQUFPLEdBQUcsRUFBQyxXQUFXO0FBQ2xCLGlCQUFTLEVBQUMsaUNBQWlDO0FBQzNDLFlBQUksRUFBQyxNQUFNO0FBQ1gsZ0JBQVEsRUFBRyxJQUFJLENBQUMsTUFBUTtBQUN4QixtQkFBVyxFQUFHLFdBQVcseUJBQXVCLFVBQVUsUUFBTztBQUNqRSxvQkFBWSxFQUFJLFlBQVksR0FBSSxZQUFZLEdBQUcsRUFBSSxHQUFHLENBQzFEO0tBQ0g7OztTQXRDRyxXQUFXOzs7QUF5Q2pCLFdBQVcsQ0FBQyxTQUFTLEdBQUc7QUFDdEIsZUFBYSxFQUFFLGlCQUFVLElBQUksQ0FBQyxVQUFVO0FBQ3hDLGNBQVksRUFBRSxpQkFBVSxNQUFNO0FBQzlCLE9BQUssRUFBRSxpQkFBVSxNQUFNO0FBQ3ZCLGFBQVcsRUFBRSxpQkFBVSxNQUFNO0FBQzdCLFlBQVUsRUFBRSxpQkFBVSxNQUFNO0NBQzdCLENBQUM7O0FBRUYsV0FBVyxDQUFDLFlBQVksR0FBRztBQUN6QixPQUFLLEVBQUUsbUJBQU0sWUFBWTtDQUMxQixDQUFDOztxQkFFYSxXQUFXIiwiZmlsZSI6IjQzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgUHJvcFR5cGVzIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4uL0NvbnN0JztcblxuY2xhc3MgUmVnZXhGaWx0ZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmZpbHRlciA9IHRoaXMuZmlsdGVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy50aW1lb3V0ID0gbnVsbDtcbiAgfVxuXG4gIGZpbHRlcihldmVudCkge1xuICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucHJvcHMuZmlsdGVySGFuZGxlcihmaWx0ZXJWYWx1ZSwgQ29uc3QuRklMVEVSX1RZUEUuUkVHRVgpO1xuICAgIH0sIHRoaXMucHJvcHMuZGVsYXkpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnJlZnMuaW5wdXRUZXh0LmRlZmF1bHRWYWx1ZTtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMucHJvcHMuZmlsdGVySGFuZGxlcih2YWx1ZSwgQ29uc3QuRklMVEVSX1RZUEUuUkVHRVgpO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgZGVmYXVsdFZhbHVlLCBwbGFjZWhvbGRlciwgY29sdW1uTmFtZSB9ID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4gKFxuICAgICAgPGlucHV0IHJlZj0naW5wdXRUZXh0J1xuICAgICAgICAgIGNsYXNzTmFtZT0nZmlsdGVyIHRleHQtZmlsdGVyIGZvcm0tY29udHJvbCdcbiAgICAgICAgICB0eXBlPSd0ZXh0J1xuICAgICAgICAgIG9uQ2hhbmdlPXsgdGhpcy5maWx0ZXIgfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXsgcGxhY2Vob2xkZXIgfHwgYEVudGVyIFJlZ2V4IGZvciAke2NvbHVtbk5hbWV9Li4uYCB9XG4gICAgICAgICAgZGVmYXVsdFZhbHVlPXsgKGRlZmF1bHRWYWx1ZSkgPyBkZWZhdWx0VmFsdWUgOiAnJyB9IC8+XG4gICAgKTtcbiAgfVxufVxuXG5SZWdleEZpbHRlci5wcm9wVHlwZXMgPSB7XG4gIGZpbHRlckhhbmRsZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGVsYXk6IFByb3BUeXBlcy5udW1iZXIsXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjb2x1bW5OYW1lOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG5SZWdleEZpbHRlci5kZWZhdWx0UHJvcHMgPSB7XG4gIGRlbGF5OiBDb25zdC5GSUxURVJfREVMQVlcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJlZ2V4RmlsdGVyO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvZmlsdGVycy9SZWdleC5qc1xuICoqLyJdLCJzb3VyY2VSb290IjoiIn0=")},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _classnames = __webpack_require__(6);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _Const = __webpack_require__(3);\n\nvar _Const2 = _interopRequireDefault(_Const);\n\nvar SelectFilter = (function (_Component) {\n _inherits(SelectFilter, _Component);\n\n function SelectFilter(props) {\n _classCallCheck(this, SelectFilter);\n\n _get(Object.getPrototypeOf(SelectFilter.prototype), 'constructor', this).call(this, props);\n this.filter = this.filter.bind(this);\n this.state = {\n isPlaceholderSelected: this.props.defaultValue === undefined || !this.props.options.hasOwnProperty(this.props.defaultValue)\n };\n }\n\n _createClass(SelectFilter, [{\n key: 'filter',\n value: function filter(event) {\n var value = event.target.value;\n\n this.setState({ isPlaceholderSelected: value === '' });\n this.props.filterHandler(value, _Const2['default'].FILTER_TYPE.SELECT);\n }\n }, {\n key: 'getOptions',\n value: function getOptions() {\n var optionTags = [];\n var _props = this.props;\n var options = _props.options;\n var placeholder = _props.placeholder;\n var columnName = _props.columnName;\n\n optionTags.push(_react2['default'].createElement(\n 'option',\n { key: '-1', value: '' },\n placeholder || 'Select ' + columnName + '...'\n ));\n Object.keys(options).map(function (key) {\n optionTags.push(_react2['default'].createElement(\n 'option',\n { key: key, value: key },\n options[key]\n ));\n });\n return optionTags;\n }\n }, {\n key: 'componentDidMount',\n value: function componentDidMount() {\n var value = this.refs.selectInput.value;\n if (value) {\n this.props.filterHandler(value, _Const2['default'].FILTER_TYPE.SELECT);\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var selectClass = (0, _classnames2['default'])('filter', 'select-filter', 'form-control', { 'placeholder-selected': this.state.isPlaceholderSelected });\n\n return _react2['default'].createElement(\n 'select',\n { ref: 'selectInput',\n className: selectClass,\n onChange: this.filter,\n defaultValue: this.props.defaultValue !== undefined ? this.props.defaultValue : '' },\n this.getOptions()\n );\n }\n }]);\n\n return SelectFilter;\n})(_react.Component);\n\nSelectFilter.propTypes = {\n filterHandler: _react.PropTypes.func.isRequired,\n options: _react.PropTypes.object.isRequired,\n placeholder: _react.PropTypes.string,\n columnName: _react.PropTypes.string\n};\n\nexports['default'] = SelectFilter;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZmlsdGVycy9TZWxlY3QuanM/YmYyNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O2lDQUE0QyxDQUFPOzs7O3NDQUM5QixDQUFZOzs7O2lDQUNmLENBQVU7Ozs7SUFFdEIsWUFBWTtZQUFaLFlBQVk7O0FBQ0wsV0FEUCxZQUFZLENBQ0osS0FBSyxFQUFFOzBCQURmLFlBQVk7O0FBRWQsK0JBRkUsWUFBWSw2Q0FFUixLQUFLLEVBQUU7QUFDYixRQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JDLFFBQUksQ0FBQyxLQUFLLEdBQUc7QUFDWCwyQkFBcUIsRUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksS0FBSyxTQUFTLElBQ3JELENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFFO0tBQ3JFLENBQUM7R0FDSDs7ZUFSRyxZQUFZOztXQVVWLGdCQUFDLEtBQUssRUFBRTtVQUNKLEtBQUssR0FBSyxLQUFLLENBQUMsTUFBTSxDQUF0QixLQUFLOztBQUNiLFVBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxxQkFBcUIsRUFBRyxLQUFLLEtBQUssRUFBRyxFQUFFLENBQUMsQ0FBQztBQUN6RCxVQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsbUJBQU0sV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQzNEOzs7V0FFUyxzQkFBRztBQUNYLFVBQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQzttQkFDdUIsSUFBSSxDQUFDLEtBQUs7VUFBL0MsT0FBTyxVQUFQLE9BQU87VUFBRSxXQUFXLFVBQVgsV0FBVztVQUFFLFVBQVUsVUFBVixVQUFVOztBQUN4QyxnQkFBVSxDQUFDLElBQUksQ0FDYjs7VUFBUSxHQUFHLEVBQUMsSUFBSSxFQUFDLEtBQUssRUFBQyxFQUFFO1FBQUcsV0FBVyxnQkFBYyxVQUFVLFFBQUs7T0FBVyxDQUMvRSxDQUFDO0FBQ0gsWUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsYUFBRyxFQUFJO0FBQzlCLGtCQUFVLENBQUMsSUFBSSxDQUFDOztZQUFRLEdBQUcsRUFBRyxHQUFLLEVBQUMsS0FBSyxFQUFHLEdBQUs7VUFBRyxPQUFPLENBQUMsR0FBRyxDQUFDO1NBQVcsQ0FBQyxDQUFDO09BQzlFLENBQUMsQ0FBQztBQUNILGFBQU8sVUFBVSxDQUFDO0tBQ25COzs7V0FFZ0IsNkJBQUc7QUFDbEIsVUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO0FBQzFDLFVBQUksS0FBSyxFQUFFO0FBQ1QsWUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLG1CQUFNLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztPQUMzRDtLQUNGOzs7V0FFSyxrQkFBRztBQUNQLFVBQU0sV0FBVyxHQUFHLDZCQUFTLFFBQVEsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUM1RCxFQUFFLHNCQUFzQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDOztBQUV4RSxhQUNFOztVQUFRLEdBQUcsRUFBQyxhQUFhO0FBQ3JCLG1CQUFTLEVBQUcsV0FBYTtBQUN6QixrQkFBUSxFQUFHLElBQUksQ0FBQyxNQUFRO0FBQ3hCLHNCQUFZLEVBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEtBQUssU0FBUyxHQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLEVBQUk7UUFDdkYsSUFBSSxDQUFDLFVBQVUsRUFBRTtPQUNaLENBQ1Q7S0FDSDs7O1NBL0NHLFlBQVk7OztBQWtEbEIsWUFBWSxDQUFDLFNBQVMsR0FBRztBQUN2QixlQUFhLEVBQUUsaUJBQVUsSUFBSSxDQUFDLFVBQVU7QUFDeEMsU0FBTyxFQUFFLGlCQUFVLE1BQU0sQ0FBQyxVQUFVO0FBQ3BDLGFBQVcsRUFBRSxpQkFBVSxNQUFNO0FBQzdCLFlBQVUsRUFBRSxpQkFBVSxNQUFNO0NBQzdCLENBQUM7O3FCQUVhLFlBQVkiLCJmaWxlIjoiNDQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBQcm9wVHlwZXMgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NTZXQgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi4vQ29uc3QnO1xuXG5jbGFzcyBTZWxlY3RGaWx0ZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmZpbHRlciA9IHRoaXMuZmlsdGVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGlzUGxhY2Vob2xkZXJTZWxlY3RlZDogKHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgIXRoaXMucHJvcHMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSh0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSkpXG4gICAgfTtcbiAgfVxuXG4gIGZpbHRlcihldmVudCkge1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IGV2ZW50LnRhcmdldDtcbiAgICB0aGlzLnNldFN0YXRlKHsgaXNQbGFjZWhvbGRlclNlbGVjdGVkOiAodmFsdWUgPT09ICcnKSB9KTtcbiAgICB0aGlzLnByb3BzLmZpbHRlckhhbmRsZXIodmFsdWUsIENvbnN0LkZJTFRFUl9UWVBFLlNFTEVDVCk7XG4gIH1cblxuICBnZXRPcHRpb25zKCkge1xuICAgIGNvbnN0IG9wdGlvblRhZ3MgPSBbXTtcbiAgICBjb25zdCB7IG9wdGlvbnMsIHBsYWNlaG9sZGVyLCBjb2x1bW5OYW1lIH0gPSB0aGlzLnByb3BzO1xuICAgIG9wdGlvblRhZ3MucHVzaCgoXG4gICAgICA8b3B0aW9uIGtleT0nLTEnIHZhbHVlPScnPnsgcGxhY2Vob2xkZXIgfHwgYFNlbGVjdCAke2NvbHVtbk5hbWV9Li4uYCB9PC9vcHRpb24+XG4gICAgKSk7XG4gICAgT2JqZWN0LmtleXMob3B0aW9ucykubWFwKGtleSA9PiB7XG4gICAgICBvcHRpb25UYWdzLnB1c2goPG9wdGlvbiBrZXk9eyBrZXkgfSB2YWx1ZT17IGtleSB9Pnsgb3B0aW9uc1trZXldIH08L29wdGlvbj4pO1xuICAgIH0pO1xuICAgIHJldHVybiBvcHRpb25UYWdzO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnJlZnMuc2VsZWN0SW5wdXQudmFsdWU7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLnByb3BzLmZpbHRlckhhbmRsZXIodmFsdWUsIENvbnN0LkZJTFRFUl9UWVBFLlNFTEVDVCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHNlbGVjdENsYXNzID0gY2xhc3NTZXQoJ2ZpbHRlcicsICdzZWxlY3QtZmlsdGVyJywgJ2Zvcm0tY29udHJvbCcsXG4gICAgICAgICAgICAgIHsgJ3BsYWNlaG9sZGVyLXNlbGVjdGVkJzogdGhpcy5zdGF0ZS5pc1BsYWNlaG9sZGVyU2VsZWN0ZWQgfSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPHNlbGVjdCByZWY9J3NlbGVjdElucHV0J1xuICAgICAgICAgIGNsYXNzTmFtZT17IHNlbGVjdENsYXNzIH1cbiAgICAgICAgICBvbkNoYW5nZT17IHRoaXMuZmlsdGVyIH1cbiAgICAgICAgICBkZWZhdWx0VmFsdWU9eyAodGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkgPyB0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSA6ICcnIH0gPlxuICAgICAgICB7IHRoaXMuZ2V0T3B0aW9ucygpIH1cbiAgICAgIDwvc2VsZWN0PlxuICAgICk7XG4gIH1cbn1cblxuU2VsZWN0RmlsdGVyLnByb3BUeXBlcyA9IHtcbiAgZmlsdGVySGFuZGxlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb3B0aW9uczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY29sdW1uTmFtZTogUHJvcFR5cGVzLnN0cmluZ1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2VsZWN0RmlsdGVyO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvZmlsdGVycy9TZWxlY3QuanNcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9")},function(module,exports,__webpack_require__){eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _createClass = (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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _classnames = __webpack_require__(6);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _Const = __webpack_require__(3);\n\nvar _Const2 = _interopRequireDefault(_Const);\n\nvar legalComparators = ['=', '>', '>=', '<', '<=', '!='];\n\nvar NumberFilter = (function (_Component) {\n _inherits(NumberFilter, _Component);\n\n function NumberFilter(props) {\n _classCallCheck(this, NumberFilter);\n\n _get(Object.getPrototypeOf(NumberFilter.prototype), 'constructor', this).call(this, props);\n this.numberComparators = this.props.numberComparators || legalComparators;\n this.timeout = null;\n this.state = {\n isPlaceholderSelected: this.props.defaultValue === undefined || this.props.defaultValue.number === undefined || this.props.options && this.props.options.indexOf(this.props.defaultValue.number) === -1\n };\n this.onChangeNumber = this.onChangeNumber.bind(this);\n this.onChangeNumberSet = this.onChangeNumberSet.bind(this);\n this.onChangeComparator = this.onChangeComparator.bind(this);\n }\n\n _createClass(NumberFilter, [{\n key: 'onChangeNumber',\n value: function onChangeNumber(event) {\n var _this = this;\n\n var comparator = this.refs.numberFilterComparator.value;\n if (comparator === '') {\n return;\n }\n if (this.timeout) {\n clearTimeout(this.timeout);\n }\n var filterValue = event.target.value;\n this.timeout = setTimeout(function () {\n _this.props.filterHandler({ number: filterValue, comparator: comparator }, _Const2['default'].FILTER_TYPE.NUMBER);\n }, this.props.delay);\n }\n }, {\n key: 'onChangeNumberSet',\n value: function onChangeNumberSet(event) {\n var comparator = this.refs.numberFilterComparator.value;\n var value = event.target.value;\n\n this.setState({ isPlaceholderSelected: value === '' });\n if (comparator === '') {\n return;\n }\n this.props.filterHandler({ number: value, comparator: comparator }, _Const2['default'].FILTER_TYPE.NUMBER);\n }\n }, {\n key: 'onChangeComparator',\n value: function onChangeComparator(event) {\n var value = this.refs.numberFilter.value;\n var comparator = event.target.value;\n if (value === '') {\n return;\n }\n this.props.filterHandler({ number: value, comparator: comparator }, _Const2['default'].FILTER_TYPE.NUMBER);\n }\n }, {\n key: 'getComparatorOptions',\n value: function getComparatorOptions() {\n var optionTags = [];\n optionTags.push(_react2['default'].createElement('option', { key: '-1' }));\n for (var i = 0; i < this.numberComparators.length; i++) {\n optionTags.push(_react2['default'].createElement(\n 'option',\n { key: i, value: this.numberComparators[i] },\n this.numberComparators[i]\n ));\n }\n return optionTags;\n }\n }, {\n key: 'getNumberOptions',\n value: function getNumberOptions() {\n var optionTags = [];\n var options = this.props.options;\n\n optionTags.push(_react2['default'].createElement(\n 'option',\n { key: '-1', value: '' },\n this.props.placeholder || 'Select ' + this.props.columnName + '...'\n ));\n for (var i = 0; i < options.length; i++) {\n optionTags.push(_react2['default'].createElement(\n 'option',\n { key: i, value: options[i] },\n options[i]\n ));\n }\n return optionTags;\n }\n }, {\n key: 'componentDidMount',\n value: function componentDidMount() {\n var comparator = this.refs.numberFilterComparator.value;\n var number = this.refs.numberFilter.value;\n if (comparator && number) {\n this.props.filterHandler({ number: number, comparator: comparator }, _Const2['default'].FILTER_TYPE.NUMBER);\n }\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n clearTimeout(this.timeout);\n }\n }, {\n key: 'render',\n value: function render() {\n var selectClass = (0, _classnames2['default'])('select-filter', 'number-filter-input', 'form-control', { 'placeholder-selected': this.state.isPlaceholderSelected });\n\n return _react2['default'].createElement(\n 'div',\n { className: 'filter number-filter' },\n _react2['default'].createElement(\n 'select',\n { ref: 'numberFilterComparator',\n className: 'number-filter-comparator form-control',\n onChange: this.onChangeComparator,\n defaultValue: this.props.defaultValue ? this.props.defaultValue.comparator : '' },\n this.getComparatorOptions()\n ),\n this.props.options ? _react2['default'].createElement(\n 'select',\n { ref: 'numberFilter',\n className: selectClass,\n onChange: this.onChangeNumberSet,\n defaultValue: this.props.defaultValue ? this.props.defaultValue.number : '' },\n this.getNumberOptions()\n ) : _react2['default'].createElement('input', { ref: 'numberFilter',\n type: 'number',\n className: 'number-filter-input form-control',\n placeholder: this.props.placeholder || 'Enter ' + this.props.columnName + '...',\n onChange: this.onChangeNumber,\n defaultValue: this.props.defaultValue ? this.props.defaultValue.number : '' })\n );\n }\n }]);\n\n return NumberFilter;\n})(_react.Component);\n\nNumberFilter.propTypes = {\n filterHandler: _react.PropTypes.func.isRequired,\n options: _react.PropTypes.arrayOf(_react.PropTypes.number),\n defaultValue: _react.PropTypes.shape({\n number: _react.PropTypes.number,\n comparator: _react.PropTypes.oneOf(legalComparators)\n }),\n delay: _react.PropTypes.number,\n /* eslint consistent-return: 0 */\n numberComparators: function numberComparators(props, propName) {\n if (!props[propName]) {\n return;\n }\n for (var i = 0; i < props[propName].length; i++) {\n var comparatorIsValid = false;\n for (var j = 0; j < legalComparators.length; j++) {\n if (legalComparators[j] === props[propName][i]) {\n comparatorIsValid = true;\n break;\n }\n }\n if (!comparatorIsValid) {\n return new Error('Number comparator provided is not supported.\\n Use only ' + legalComparators);\n }\n }\n },\n placeholder: _react.PropTypes.string,\n columnName: _react.PropTypes.string\n};\n\nNumberFilter.defaultProps = {\n delay: _Const2['default'].FILTER_DELAY\n};\n\nexports['default'] = NumberFilter;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZmlsdGVycy9OdW1iZXIuanM/ZmVkZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O2lDQUE0QyxDQUFPOzs7O3NDQUM5QixDQUFZOzs7O2lDQUNmLENBQVU7Ozs7QUFFNUIsSUFBTSxnQkFBZ0IsR0FBRyxDQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFFLENBQUM7O0lBRXZELFlBQVk7WUFBWixZQUFZOztBQUNMLFdBRFAsWUFBWSxDQUNKLEtBQUssRUFBRTswQkFEZixZQUFZOztBQUVkLCtCQUZFLFlBQVksNkNBRVIsS0FBSyxFQUFFO0FBQ2IsUUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLElBQUksZ0JBQWdCLENBQUM7QUFDMUUsUUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDcEIsUUFBSSxDQUFDLEtBQUssR0FBRztBQUNYLDJCQUFxQixFQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxLQUFLLFNBQVMsSUFDM0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFDM0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQ2pCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUc7S0FDeEUsQ0FBQztBQUNGLFFBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckQsUUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0QsUUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FB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QWlCLEVBQUUsMkJBQVMsS0FBSyxFQUFFLFFBQVEsRUFBRTtBQUMzQyxRQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQ3BCLGFBQU87S0FDUjtBQUNELFNBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9DLFVBQUksaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0FBQzlCLFdBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEQsWUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDOUMsMkJBQWlCLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLGdCQUFNO1NBQ1A7T0FDRjtBQUNELFVBQUksQ0FBQyxpQkFBaUIsRUFBRTtBQUN0QixlQUFPLElBQUksS0FBSyx1RUFDSCxnQkFBZ0IsQ0FBRyxDQUFDO09BQ2xDO0tBQ0Y7R0FDRjtBQUNELGFBQVcsRUFBRSxpQkFBVSxNQUFNO0FBQzdCLFlBQVUsRUFBRSxpQkFBVSxNQUFNO0NBQzdCLENBQUM7O0FBRUYsWUFBWSxDQUFDLFlBQVksR0FBRztBQUMxQixPQUFLLEVBQUUsbUJBQU0sWUFBWTtDQUMxQixDQUFDOztxQkFFYSxZQUFZIiwiZmlsZSI6IjQ1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgUHJvcFR5cGVzIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzU2V0IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4uL0NvbnN0JztcblxuY29uc3QgbGVnYWxDb21wYXJhdG9ycyA9IFsgJz0nLCAnPicsICc+PScsICc8JywgJzw9JywgJyE9JyBdO1xuXG5jbGFzcyBOdW1iZXJGaWx0ZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLm51bWJlckNvbXBhcmF0b3JzID0gdGhpcy5wcm9wcy5udW1iZXJDb21wYXJhdG9ycyB8fCBsZWdhbENvbXBhcmF0b3JzO1xuICAgIHRoaXMudGltZW91dCA9IG51bGw7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGlzUGxhY2Vob2xkZXJTZWxlY3RlZDogKHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUubnVtYmVyID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgKHRoaXMucHJvcHMub3B0aW9ucyAmJlxuICAgICAgICAgIHRoaXMucHJvcHMub3B0aW9ucy5pbmRleE9mKHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlLm51bWJlcikgPT09IC0xKSlcbiAgICB9O1xuICAgIHRoaXMub25DaGFuZ2VOdW1iZXIgPSB0aGlzLm9uQ2hhbmdlTnVtYmVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5vbkNoYW5nZU51bWJlclNldCA9IHRoaXMub25DaGFuZ2VOdW1iZXJTZXQuYmluZCh0aGlzKTtcbiAgICB0aGlzLm9uQ2hhbmdlQ29tcGFyYXRvciA9IHRoaXMub25DaGFuZ2VDb21wYXJhdG9yLmJpbmQodGhpcyk7XG4gIH1cblxuICBvbkNoYW5nZU51bWJlcihldmVudCkge1xuICAgIGNvbnN0IGNvbXBhcmF0b3IgPSB0aGlzLnJlZnMubnVtYmVyRmlsdGVyQ29tcGFyYXRvci52YWx1ZTtcbiAgICBpZiAoY29tcGFyYXRvciA9PT0gJycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlclZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy5maWx0ZXJIYW5kbGVyKHsgbnVtYmVyOiBmaWx0ZXJWYWx1ZSwgY29tcGFyYXRvciB9LCBDb25zdC5GSUxURVJfVFlQRS5OVU1CRVIpO1xuICAgIH0sIHRoaXMucHJvcHMuZGVsYXkpO1xuICB9XG5cbiAgb25DaGFuZ2VOdW1iZXJTZXQoZXZlbnQpIHtcbiAgICBjb25zdCBjb21wYXJhdG9yID0gdGhpcy5yZWZzLm51bWJlckZpbHRlckNvbXBhcmF0b3IudmFsdWU7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gZXZlbnQudGFyZ2V0O1xuICAgIHRoaXMuc2V0U3RhdGUoeyBpc1BsYWNlaG9sZGVyU2VsZWN0ZWQ6ICh2YWx1ZSA9PT0gJycpIH0pO1xuICAgIGlmIChjb21wYXJhdG9yID09PSAnJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLmZpbHRlckhhbmRsZXIoeyBudW1iZXI6IHZhbHVlLCBjb21wYXJhdG9yIH0sIENvbnN0LkZJTFRFUl9UWVBFLk5VTUJFUik7XG4gIH1cblxuICBvbkNoYW5nZUNvbXBhcmF0b3IoZXZlbnQpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMucmVmcy5udW1iZXJGaWx0ZXIudmFsdWU7XG4gICAgY29uc3QgY29tcGFyYXRvciA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucHJvcHMuZmlsdGVySGFuZGxlcih7IG51bWJlcjogdmFsdWUsIGNvbXBhcmF0b3IgfSwgQ29uc3QuRklMVEVSX1RZUEUuTlVNQkVSKTtcbiAgfVxuXG4gIGdldENvbXBhcmF0b3JPcHRpb25zKCkge1xuICAgIGNvbnN0IG9wdGlvblRhZ3MgPSBbXTtcbiAgICBvcHRpb25UYWdzLnB1c2goPG9wdGlvbiBrZXk9Jy0xJz48L29wdGlvbj4pO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5udW1iZXJDb21wYXJhdG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgb3B0aW9uVGFncy5wdXNoKFxuICAgICAgICA8b3B0aW9uIGtleT17IGkgfSB2YWx1ZT17IHRoaXMubnVtYmVyQ29tcGFyYXRvcnNbaV0gfT5cbiAgICAgICAgICB7IHRoaXMubnVtYmVyQ29tcGFyYXRvcnNbaV0gfVxuICAgICAgICA8L29wdGlvbj5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25UYWdzO1xuICB9XG5cbiAgZ2V0TnVtYmVyT3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25UYWdzID0gW107XG4gICAgY29uc3QgeyBvcHRpb25zIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgb3B0aW9uVGFncy5wdXNoKFxuICAgICAgPG9wdGlvbiBrZXk9Jy0xJyB2YWx1ZT0nJz5cbiAgICAgICAgeyB0aGlzLnByb3BzLnBsYWNlaG9sZGVyIHx8IGBTZWxlY3QgJHt0aGlzLnByb3BzLmNvbHVtbk5hbWV9Li4uYCB9XG4gICAgICA8L29wdGlvbj5cbiAgICApO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgb3B0aW9uVGFncy5wdXNoKDxvcHRpb24ga2V5PXsgaSB9IHZhbHVlPXsgb3B0aW9uc1tpXSB9Pnsgb3B0aW9uc1tpXSB9PC9vcHRpb24+KTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvblRhZ3M7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCBjb21wYXJhdG9yID0gdGhpcy5yZWZzLm51bWJlckZpbHRlckNvbXBhcmF0b3IudmFsdWU7XG4gICAgY29uc3QgbnVtYmVyID0gdGhpcy5yZWZzLm51bWJlckZpbHRlci52YWx1ZTtcbiAgICBpZiAoY29tcGFyYXRvciAmJiBudW1iZXIpIHtcbiAgICAgIHRoaXMucHJvcHMuZmlsdGVySGFuZGxlcih7IG51bWJlciwgY29tcGFyYXRvciB9LCBDb25zdC5GSUxURVJfVFlQRS5OVU1CRVIpO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHNlbGVjdENsYXNzID0gY2xhc3NTZXQoXG4gICAgICAnc2VsZWN0LWZpbHRlcicsICdudW1iZXItZmlsdGVyLWlucHV0JywgJ2Zvcm0tY29udHJvbCcsXG4gICAgICB7ICdwbGFjZWhvbGRlci1zZWxlY3RlZCc6IHRoaXMuc3RhdGUuaXNQbGFjZWhvbGRlclNlbGVjdGVkIH0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPSdmaWx0ZXIgbnVtYmVyLWZpbHRlcic+XG4gICAgICAgIDxzZWxlY3QgcmVmPSdudW1iZXJGaWx0ZXJDb21wYXJhdG9yJ1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT0nbnVtYmVyLWZpbHRlci1jb21wYXJhdG9yIGZvcm0tY29udHJvbCdcbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17IHRoaXMub25DaGFuZ2VDb21wYXJhdG9yIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e1xuICAgICAgICAgICAgICAgICAgKHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlKSA/IHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlLmNvbXBhcmF0b3IgOiAnJ1xuICAgICAgICAgICAgICAgIH0+XG4gICAgICAgICAgeyB0aGlzLmdldENvbXBhcmF0b3JPcHRpb25zKCkgfVxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAge1xuICAgICAgICAgICh0aGlzLnByb3BzLm9wdGlvbnMpID9cbiAgICAgICAgICAgIDxzZWxlY3QgcmVmPSdudW1iZXJGaWx0ZXInXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17IHNlbGVjdENsYXNzIH1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9eyB0aGlzLm9uQ2hhbmdlTnVtYmVyU2V0IH1cbiAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlPXtcbiAgICAgICAgICAgICAgICAodGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUpID8gdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUubnVtYmVyIDogJydcbiAgICAgICAgICAgICAgfT5cbiAgICAgICAgICAgICAgeyB0aGlzLmdldE51bWJlck9wdGlvbnMoKSB9XG4gICAgICAgICAgICA8L3NlbGVjdD4gOlxuICAgICAgICAgICAgPGlucHV0IHJlZj0nbnVtYmVyRmlsdGVyJ1xuICAgICAgICAgICAgICAgICAgIHR5cGU9J251bWJlcidcbiAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9J251bWJlci1maWx0ZXItaW5wdXQgZm9ybS1jb250cm9sJ1xuICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXsgdGhpcy5wcm9wcy5wbGFjZWhvbGRlciB8fCBgRW50ZXIgJHt0aGlzLnByb3BzLmNvbHVtbk5hbWV9Li4uYCB9XG4gICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyB0aGlzLm9uQ2hhbmdlTnVtYmVyIH1cbiAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e1xuICAgICAgICAgICAgICAgICAgICAgKHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlKSA/IHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlLm51bWJlciA6ICcnXG4gICAgICAgICAgICAgICAgICAgfSAvPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbk51bWJlckZpbHRlci5wcm9wVHlwZXMgPSB7XG4gIGZpbHRlckhhbmRsZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5udW1iZXIpLFxuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgbnVtYmVyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGNvbXBhcmF0b3I6IFByb3BUeXBlcy5vbmVPZihsZWdhbENvbXBhcmF0b3JzKVxuICB9KSxcbiAgZGVsYXk6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qIGVzbGludCBjb25zaXN0ZW50LXJldHVybjogMCAqL1xuICBudW1iZXJDb21wYXJhdG9yczogZnVuY3Rpb24ocHJvcHMsIHByb3BOYW1lKSB7XG4gICAgaWYgKCFwcm9wc1twcm9wTmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wc1twcm9wTmFtZV0ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBjb21wYXJhdG9ySXNWYWxpZCA9IGZhbHNlO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsZWdhbENvbXBhcmF0b3JzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChsZWdhbENvbXBhcmF0b3JzW2pdID09PSBwcm9wc1twcm9wTmFtZV1baV0pIHtcbiAgICAgICAgICBjb21wYXJhdG9ySXNWYWxpZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghY29tcGFyYXRvcklzVmFsaWQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihgTnVtYmVyIGNvbXBhcmF0b3IgcHJvdmlkZWQgaXMgbm90IHN1cHBvcnRlZC5cbiAgICAgICAgICBVc2Ugb25seSAke2xlZ2FsQ29tcGFyYXRvcnN9YCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY29sdW1uTmFtZTogUHJvcFR5cGVzLnN0cmluZ1xufTtcblxuTnVtYmVyRmlsdGVyLmRlZmF1bHRQcm9wcyA9IHtcbiAgZGVsYXk6IENvbnN0LkZJTFRFUl9ERUxBWVxufTtcblxuZXhwb3J0IGRlZmF1bHQgTnVtYmVyRmlsdGVyO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvZmlsdGVycy9OdW1iZXIuanNcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9"); }])}); \ No newline at end of file diff --git a/src/BootstrapTable.js b/src/BootstrapTable.js index 6460a1fb4..eabdb7cc2 100644 --- a/src/BootstrapTable.js +++ b/src/BootstrapTable.js @@ -337,15 +337,15 @@ class BootstrapTable extends Component { } } - handleRowMouseOut = row => { + handleRowMouseOut = (row, event) => { if (this.props.options.onRowMouseOut) { - this.props.options.onRowMouseOut(row); + this.props.options.onRowMouseOut(row, event); } } - handleRowMouseOver = row => { + handleRowMouseOver = (row, event) => { if (this.props.options.onRowMouseOver) { - this.props.options.onRowMouseOver(row); + this.props.options.onRowMouseOver(row, event); } } diff --git a/src/TableBody.js b/src/TableBody.js index 3f82ebc6e..7f1655e9c 100644 --- a/src/TableBody.js +++ b/src/TableBody.js @@ -171,14 +171,14 @@ class TableBody extends Component { ); } - handleRowMouseOut = rowIndex => { + handleRowMouseOut = (rowIndex, event) => { const targetRow = this.props.data[rowIndex]; - this.props.onRowMouseOut(targetRow); + this.props.onRowMouseOut(targetRow, event); } - handleRowMouseOver = rowIndex => { + handleRowMouseOver = (rowIndex, event) => { const targetRow = this.props.data[rowIndex]; - this.props.onRowMouseOver(targetRow); + this.props.onRowMouseOver(targetRow, event); } handleRowClick = rowIndex => { diff --git a/src/TableRow.js b/src/TableRow.js index 90ae41b01..80aac9bc5 100644 --- a/src/TableRow.js +++ b/src/TableRow.js @@ -35,13 +35,13 @@ class TableRow extends Component { rowMouseOut = e => { if (this.props.onRowMouseOut) { - this.props.onRowMouseOut(e.currentTarget.rowIndex); + this.props.onRowMouseOut(e.currentTarget.rowIndex, e); } } rowMouseOver = e => { if (this.props.onRowMouseOver) { - this.props.onRowMouseOver(e.currentTarget.rowIndex); + this.props.onRowMouseOver(e.currentTarget.rowIndex, e); } }