UNPKG

@foxone/finance-ui

Version:

The Financial UI Component Library Based on @foxone/uikit and vuetify

343 lines (311 loc) 39.3 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _babelHelperVueJsxMergeProps = _interopRequireDefault(require("@vue/babel-helper-vue-jsx-merge-props")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _compositionApi = require("@vue/composition-api"); var _lib = require("vuetify/lib"); var _FButton = require("@foxone/uikit/src/components/FButton"); var _classnames = _interopRequireDefault(require("../utils/classnames")); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } var _default2 = (0, _compositionApi.defineComponent)({ name: 'RiskInfo', model: { prop: 'value', event: 'change' }, props: { value: { type: Boolean, "default": false }, prefixCls: { type: String, "default": 'risk-info' }, impact: { type: String, "default": '?%' }, assetLeft: { type: Object, "default": function _default() { return {}; } }, assetRight: { type: Object, "default": function _default() { return {}; } }, countdown: { type: Number, "default": 0 }, customText: { type: Object, "default": function _default() { return { "continue": {}, confirm: {} }; } }, customColor: { type: Object, "default": function _default() { return { "continue": {}, confirm: {} }; } } }, setup: function setup(props) { var classes = (0, _classnames["default"])(props.prefixCls); var isContinue = false; var isShow = false; var timer = null; var count = void 0; (0, _compositionApi.onMounted)(function () { console.info('RiskInfo mounted!'); }); return { classes: classes, isContinue: isContinue, isShow: isShow, timer: timer, count: count }; }, computed: { hasAssets: function hasAssets() { var res = false; try { res = this.assetLeft && JSON.stringify(this.assetLeft) !== '{}' && this.assetRight && JSON.stringify(this.assetRight) !== '{}'; } catch (error) { res = false; } return res; } }, watch: { value: function value(val) { this.isShow = val; if (val && this.timer === null) this.onCountDown(); } }, created: function created() { this.isShow = this.value; }, beforeDestroy: function beforeDestroy() { if (this.timer) { clearTimeout(this.timer); this.timer = null; } }, methods: { onCountDown: function onCountDown() { var _this = this; if (this.count === void 0) { this.count = this.countdown; this.$emit('countdown:init', this.count); } if (this.count <= 0) { this.timer = null; return; } this.timer = setTimeout(function () { if (_this.count === void 0) return; _this.count--; _this.$emit('countdown:update', _this.count); _this.$nextTick(function () { return _this.$forceUpdate(); }); _this.onCountDown(); }, 1000); }, resetTimer: function resetTimer() { var _this2 = this; setTimeout(function () { if (_this2.timer) { clearTimeout(_this2.timer); _this2.timer = null; } _this2.count = void 0; }, 300); }, handleInput: function handleInput(val) { if (val && this.timer === null) this.onCountDown(); this.isShow = val; this.$emit('change', val); }, handleContinueClick: function handleContinueClick(evt) { if (evt === 'continue') { this.isContinue = true; } else { this.isShow = false; this.$emit('change', false); } this.$emit(evt); }, handleConfirmClick: function handleConfirmClick(evt) { var _this3 = this; this.isShow = false; this.$emit('change', false); this.$emit(evt); setTimeout(function () { return _this3.isContinue = false; }, 300); } }, render: function render(h) { var _this4 = this; var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m; var scopedSlots = { activator: this.$scopedSlots.activator }; var customContinueText = (_a = this.customText["continue"]) !== null && _a !== void 0 ? _a : {}; var customConfirmText = (_b = this.customText.confirm) !== null && _b !== void 0 ? _b : {}; var customContinueColor = (_c = this.customColor["continue"]) !== null && _c !== void 0 ? _c : {}; var customConfirmColor = (_d = this.customColor.confirm) !== null && _d !== void 0 ? _d : {}; return h(_lib.VDialog, { "attrs": { "contentClass": this.classes(), "overlayOpacity": 0.9 }, "scopedSlots": scopedSlots, "model": { value: _this4.isShow, callback: function callback($$v) { _this4.isShow = $$v; } }, "on": _objectSpread({}, { "input": function input($event) { for (var _len = arguments.length, attrs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { attrs[_key - 1] = arguments[_key]; } _this4.handleInput.apply(_this4, [$event].concat(attrs)); } }) }, [h(_lib.VCard, { "class": this.classes('card') }, [h(_lib.VCardTitle, { "class": this.classes('card-title', 'justify-center') }, [h("div", { "class": this.classes('title', 'f-greyscale-1 f-title-1') }, [this.isContinue ? customConfirmText.title || 'Warning' : customContinueText.title || 'Confirm transaction'])]), h(_lib.VCardText, { "class": 'pa-0 px-8' }, [this.isContinue ? h("div", { "class": 'd-flex justify-center' }, [h("div", { "class": 'text-center f-body-1' }, [customConfirmText.content || 'Once the transaction is executed, it is irrevocable, please pay after confirmation carefully.'])]) : h("div", { "class": 'd-flex flex-column align-center' }, [h("div", { "class": this.classes('highlight', 'pa-4') }, [h("h3", { "class": this.classes('highlight-text', 'f-title-3') }, [(_f = (_e = customContinueText.highlights) === null || _e === void 0 ? void 0 : _e[0]) !== null && _f !== void 0 ? _f : 'Price impact reached']), h("h3", { "class": this.classes('highlight-impact') }, [this.impact || '%']), h("h4", { "class": this.classes('highlight-text', 'f-title-3') }, [(_h = (_g = customContinueText.highlights) === null || _g === void 0 ? void 0 : _g[1]) !== null && _h !== void 0 ? _h : 'It may cause a serious result.'])]), this.hasAssets ? h("div", { "class": this.classes('assets', 'd-flex justify-space-between mt-6') }, [h("div", { "class": this.classes('assets-left', 'd-inline-flex flex-column justify-left') }, [h("span", { "class": this.classes('assets-left-symbol', 'f-greyscale-1 f-body-2') }, [(_j = this.assetLeft) === null || _j === void 0 ? void 0 : _j.symbol]), h("span", { "class": this.classes('assets-left-amount', 'f-greyscale-3 f-caption text-truncate') }, [(_k = this.assetLeft) === null || _k === void 0 ? void 0 : _k.amount])]), h("div", { "class": this.classes('assets-right', 'd-inline-flex flex-column justify-center') }, [h("span", { "class": this.classes('assets-right-symbol', 'f-greyscale-1 f-body-2') }, [(_l = this.assetRight) === null || _l === void 0 ? void 0 : _l.symbol]), h("span", { "class": this.classes('assets-right-amount', 'f-greyscale-3 f-caption text-truncate') }, [(_m = this.assetRight) === null || _m === void 0 ? void 0 : _m.amount])])]) : null])]), h(_lib.VCardActions, { "class": 'mt-6 pa-0 align-center justify-center' }, [this.isContinue ? h("div", { "class": 'd-flex align-center' }, [h(_FButton.FButton, { "class": this.classes('action-confirm-btn-cancel', 'pt-6 pb-8'), "attrs": { "type": 'text', "color": (customConfirmColor === null || customConfirmColor === void 0 ? void 0 : customConfirmColor.btn_cancel) || 'f-greyscale-6' }, "on": _objectSpread({}, { "click": function click($event) { for (var _len2 = arguments.length, attrs = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { attrs[_key2 - 1] = arguments[_key2]; } (function () { return _this4.handleConfirmClick('cancel:confirm'); }).apply(void 0, [$event].concat(attrs)); } }) }, [(customConfirmText === null || customConfirmText === void 0 ? void 0 : customConfirmText.btn_cancel) || 'Cancel']), h(_FButton.FButton, { "class": this.classes('action-confirm-btn-confirm', 'pt-6 pb-8'), "attrs": { "type": 'text', "color": (customConfirmColor === null || customConfirmColor === void 0 ? void 0 : customConfirmColor.btn_confirm) || 'error' }, "on": _objectSpread({}, { "click": function click($event) { for (var _len3 = arguments.length, attrs = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { attrs[_key3 - 1] = arguments[_key3]; } (function () { return _this4.handleConfirmClick('confirm'); }).apply(void 0, [$event].concat(attrs)); } }) }, [(customConfirmText === null || customConfirmText === void 0 ? void 0 : customConfirmText.btn_confirm) || 'Confirm'])]) : h("div", { "class": 'd-flex flex-column align-center justify-center' }, [h(_FButton.FButton, { "class": this.classes('action-continue-btn-cancel', (customContinueColor === null || customContinueColor === void 0 ? void 0 : customContinueColor.btn_cancel) ? 'f-greyscale-6' : 'white--text'), "attrs": { "color": (customContinueColor === null || customContinueColor === void 0 ? void 0 : customContinueColor.btn_cancel) || 'pink' }, "on": _objectSpread({}, { "click": function click($event) { for (var _len4 = arguments.length, attrs = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) { attrs[_key4 - 1] = arguments[_key4]; } (function () { return _this4.handleContinueClick('cancel:continue'); }).apply(void 0, [$event].concat(attrs)); } }) }, [(customContinueText === null || customContinueText === void 0 ? void 0 : customContinueText.btn_cancel) || 'Cancel']), h(_FButton.FButton, (0, _babelHelperVueJsxMergeProps["default"])([{ "class": this.classes('action-continue-btn-continue', 'py-8') }, { "attrs": { disabled: this.count !== void 0 && this.count > 0 } }, { "attrs": { "type": 'text', "color": (customContinueColor === null || customContinueColor === void 0 ? void 0 : customContinueColor.btn_continue) || 'f-greyscale-1' }, "on": _objectSpread({}, { "click": function click($event) { for (var _len5 = arguments.length, attrs = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) { attrs[_key5 - 1] = arguments[_key5]; } (function () { return _this4.handleContinueClick('continue'); }).apply(void 0, [$event].concat(attrs)); } }) }]), ["".concat((customContinueText === null || customContinueText === void 0 ? void 0 : customContinueText.btn_continue) || 'Continue').concat(this.count !== void 0 && this.count > 0 ? "(".concat(this.count, "s)") : '').trim()])])])])]); } }); exports["default"] = _default2; //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9SaXNrSW5mby9SaXNrSW5mby50c3giLCJSaXNrSW5mby9SaXNrSW5mby5qc3giXSwibmFtZXMiOlsibmFtZSIsIm1vZGVsIiwicHJvcCIsImV2ZW50IiwicHJvcHMiLCJ2YWx1ZSIsInR5cGUiLCJCb29sZWFuIiwicHJlZml4Q2xzIiwiU3RyaW5nIiwiaW1wYWN0IiwiYXNzZXRMZWZ0IiwiT2JqZWN0IiwiYXNzZXRSaWdodCIsImNvdW50ZG93biIsIk51bWJlciIsImN1c3RvbVRleHQiLCJjb25maXJtIiwiY3VzdG9tQ29sb3IiLCJzZXR1cCIsImNsYXNzZXMiLCJpc0NvbnRpbnVlIiwiaXNTaG93IiwidGltZXIiLCJjb3VudCIsImNvbnNvbGUiLCJpbmZvIiwiY29tcHV0ZWQiLCJoYXNBc3NldHMiLCJyZXMiLCJKU09OIiwic3RyaW5naWZ5IiwiZXJyb3IiLCJ3YXRjaCIsInZhbCIsIm9uQ291bnREb3duIiwiY3JlYXRlZCIsImJlZm9yZURlc3Ryb3kiLCJjbGVhclRpbWVvdXQiLCJtZXRob2RzIiwiJGVtaXQiLCJzZXRUaW1lb3V0IiwiJG5leHRUaWNrIiwiJGZvcmNlVXBkYXRlIiwicmVzZXRUaW1lciIsImhhbmRsZUlucHV0IiwiaGFuZGxlQ29udGludWVDbGljayIsImV2dCIsImhhbmRsZUNvbmZpcm1DbGljayIsInJlbmRlciIsImgiLCJfYSIsIl9iIiwiX2MiLCJfZCIsIl9lIiwiX2YiLCJfZyIsIl9oIiwiX2oiLCJfayIsIl9sIiwiX20iLCJzY29wZWRTbG90cyIsImFjdGl2YXRvciIsIiRzY29wZWRTbG90cyIsImN1c3RvbUNvbnRpbnVlVGV4dCIsImN1c3RvbUNvbmZpcm1UZXh0IiwiY3VzdG9tQ29udGludWVDb2xvciIsImN1c3RvbUNvbmZpcm1Db2xvciIsInRpdGxlIiwiY29udGVudCIsImhpZ2hsaWdodHMiLCJzeW1ib2wiLCJhbW91bnQiLCJidG5fY2FuY2VsIiwiYnRuX2NvbmZpcm0iLCJkaXNhYmxlZCIsImJ0bl9jb250aW51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QW1CLEtBQUEsS0FBQSxDQUFuQixHQUFtQixLQUFBLENBQW5CLEdBQUFBLG1CQUFtQixDQUFFVSxZQUFyQixLQUFxQztBQS9CbEQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBLFdBZ0NpQjtBQUFBLG1CQUFNLE1BQUksQ0FBQ2hDLG1CQUFMLENBQXlCLFVBQXpCLENBQU47QUFBQSxXQWhDakI7QUFBQTtBQUFBO0FBQUEsVUFrQ1EsVUFBRyxDQUFBb0Isa0JBQWtCLEtBQUEsSUFBbEIsSUFBQUEsa0JBQWtCLEtBQUEsS0FBQSxDQUFsQixHQUFrQixLQUFBLENBQWxCLEdBQUFBLGtCQUFrQixDQUFFWSxZQUFwQixLQUFvQyxVQUF2QyxTQUFvRCxLQUFLdEQsS0FBTCxLQUFlLEtBQUssQ0FBcEIsSUFBeUIsS0FBS0EsS0FBTCxHQUFhLENBQXRDLGNBQThDLEtBQUtBLEtBQW5ELFVBQStELEVBQW5ILEVBQXdIdUQsSUFBeEgsRUFsQ1IsSUFoRVY7QUEwR0Q7QUF4UDRCLENBQWhCLEMiLCJmaWxlIjoiUmlza0luZm8vUmlza0luZm8uanMiLCJzb3VyY2VzQ29udGVudCI6W251bGwsImltcG9ydCB7IGRlZmluZUNvbXBvbmVudCwgb25Nb3VudGVkIH0gZnJvbSAnQHZ1ZS9jb21wb3NpdGlvbi1hcGknO1xuaW1wb3J0IHsgVkRpYWxvZywgVkNhcmQsIFZDYXJkVGV4dCwgVkNhcmRBY3Rpb25zLCBWQ2FyZFRpdGxlIH0gZnJvbSAndnVldGlmeS9saWInO1xuaW1wb3J0IHsgRkJ1dHRvbiB9IGZyb20gJ0Bmb3hvbmUvdWlraXQvc3JjL2NvbXBvbmVudHMvRkJ1dHRvbic7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICcuLi91dGlscy9jbGFzc25hbWVzJztcbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbXBvbmVudCh7XG4gICAgbmFtZTogJ1Jpc2tJbmZvJyxcbiAgICBtb2RlbDoge1xuICAgICAgICBwcm9wOiAndmFsdWUnLFxuICAgICAgICBldmVudDogJ2NoYW5nZSdcbiAgICB9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgcHJlZml4Q2xzOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICBkZWZhdWx0OiAncmlzay1pbmZvJ1xuICAgICAgICB9LFxuICAgICAgICBpbXBhY3Q6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICc/JSdcbiAgICAgICAgfSxcbiAgICAgICAgYXNzZXRMZWZ0OiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICBkZWZhdWx0OiAoKSA9PiAoe30pXG4gICAgICAgIH0sXG4gICAgICAgIGFzc2V0UmlnaHQ6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICgpID0+ICh7fSlcbiAgICAgICAgfSxcbiAgICAgICAgY291bnRkb3duOiB7XG4gICAgICAgICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICAgICAgICBkZWZhdWx0OiAwXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbVRleHQ6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICgpID0+ICh7IGNvbnRpbnVlOiB7fSwgY29uZmlybToge30gfSlcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tQ29sb3I6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICgpID0+ICh7IGNvbnRpbnVlOiB7fSwgY29uZmlybToge30gfSlcbiAgICAgICAgfVxuICAgIH0sXG4gICAgc2V0dXAocHJvcHMpIHtcbiAgICAgICAgY29uc3QgY2xhc3NlcyA9IGNsYXNzbmFtZXMocHJvcHMucHJlZml4Q2xzKTtcbiAgICAgICAgY29uc3QgaXNDb250aW51ZSA9IGZhbHNlO1xuICAgICAgICBjb25zdCBpc1Nob3cgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgdGltZXIgPSBudWxsO1xuICAgICAgICBjb25zdCBjb3VudCA9IHZvaWQgMDtcbiAgICAgICAgb25Nb3VudGVkKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbygnUmlza0luZm8gbW91bnRlZCEnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjbGFzc2VzLFxuICAgICAgICAgICAgaXNDb250aW51ZSxcbiAgICAgICAgICAgIGlzU2hvdyxcbiAgICAgICAgICAgIHRpbWVyLFxuICAgICAgICAgICAgY291bnRcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIGNvbXB1dGVkOiB7XG4gICAgICAgIGhhc0Fzc2V0cygpIHtcbiAgICAgICAgICAgIGxldCByZXMgPSBmYWxzZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzID0gdGhpcy5hc3NldExlZnQgJiYgSlNPTi5zdHJpbmdpZnkodGhpcy5hc3NldExlZnQpICE9PSAne30nICYmIHRoaXMuYXNzZXRSaWdodCAmJiBKU09OLnN0cmluZ2lmeSh0aGlzLmFzc2V0UmlnaHQpICE9PSAne30nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmVzID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgfSxcbiAgICB3YXRjaDoge1xuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5pc1Nob3cgPSB2YWw7XG4gICAgICAgICAgICBpZiAodmFsICYmIHRoaXMudGltZXIgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgdGhpcy5vbkNvdW50RG93bigpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGVkKCkge1xuICAgICAgICB0aGlzLmlzU2hvdyA9IHRoaXMudmFsdWU7XG4gICAgfSxcbiAgICBiZWZvcmVEZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy50aW1lcikge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xuICAgICAgICAgICAgdGhpcy50aW1lciA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgb25Db3VudERvd24oKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jb3VudCA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb3VudCA9IHRoaXMuY291bnRkb3duO1xuICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2NvdW50ZG93bjppbml0JywgdGhpcy5jb3VudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jb3VudCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50aW1lciA9IG51bGw7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvdW50ID09PSB2b2lkIDApXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB0aGlzLmNvdW50LS07XG4gICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgnY291bnRkb3duOnVwZGF0ZScsIHRoaXMuY291bnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHRoaXMuJGZvcmNlVXBkYXRlKCkpO1xuICAgICAgICAgICAgICAgIHRoaXMub25Db3VudERvd24oKTtcbiAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICB9LFxuICAgICAgICByZXNldFRpbWVyKCkge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudGltZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRpbWVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jb3VudCA9IHZvaWQgMDtcbiAgICAgICAgICAgIH0sIDMwMCk7XG4gICAgICAgIH0sXG4gICAgICAgIGhhbmRsZUlucHV0KHZhbCkge1xuICAgICAgICAgICAgaWYgKHZhbCAmJiB0aGlzLnRpbWVyID09PSBudWxsKVxuICAgICAgICAgICAgICAgIHRoaXMub25Db3VudERvd24oKTtcbiAgICAgICAgICAgIHRoaXMuaXNTaG93ID0gdmFsO1xuICAgICAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgaGFuZGxlQ29udGludWVDbGljayhldnQpIHtcbiAgICAgICAgICAgIGlmIChldnQgPT09ICdjb250aW51ZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzQ29udGludWUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1Nob3cgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLiRlbWl0KGV2dCk7XG4gICAgICAgIH0sXG4gICAgICAgIGhhbmRsZUNvbmZpcm1DbGljayhldnQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLiRlbWl0KGV2dCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+ICh0aGlzLmlzQ29udGludWUgPSBmYWxzZSksIDMwMCk7XG4gICAgICAgIH0sXG4gICAgfSxcbiAgICByZW5kZXIoaCkge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZiwgX2csIF9oLCBfaiwgX2ssIF9sLCBfbTtcbiAgICAgICAgY29uc3Qgc2NvcGVkU2xvdHMgPSB7XG4gICAgICAgICAgICBhY3RpdmF0b3I6IHRoaXMuJHNjb3BlZFNsb3RzLmFjdGl2YXRvclxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjdXN0b21Db250aW51ZVRleHQgPSAoX2EgPSB0aGlzLmN1c3RvbVRleHQuY29udGludWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9O1xuICAgICAgICBjb25zdCBjdXN0b21Db25maXJtVGV4dCA9IChfYiA9IHRoaXMuY3VzdG9tVGV4dC5jb25maXJtKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiB7fTtcbiAgICAgICAgY29uc3QgY3VzdG9tQ29udGludWVDb2xvciA9IChfYyA9IHRoaXMuY3VzdG9tQ29sb3IuY29udGludWUpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IHt9O1xuICAgICAgICBjb25zdCBjdXN0b21Db25maXJtQ29sb3IgPSAoX2QgPSB0aGlzLmN1c3RvbUNvbG9yLmNvbmZpcm0pICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IHt9O1xuICAgICAgICByZXR1cm4gKDxWRGlhbG9nIGNvbnRlbnRDbGFzcz17dGhpcy5jbGFzc2VzKCl9IHNjb3BlZFNsb3RzPXtzY29wZWRTbG90c30gdk1vZGVsPXt0aGlzLmlzU2hvd30gb3ZlcmxheU9wYWNpdHk9ezAuOX0gdk9uOmlucHV0PXt0aGlzLmhhbmRsZUlucHV0fT5cbiAgICAgICAgPFZDYXJkIGNsYXNzPXt0aGlzLmNsYXNzZXMoJ2NhcmQnKX0+XG4gICAgICAgICAgPFZDYXJkVGl0bGUgY2xhc3M9e3RoaXMuY2xhc3NlcygnY2FyZC10aXRsZScsICdqdXN0aWZ5LWNlbnRlcicpfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9e3RoaXMuY2xhc3NlcygndGl0bGUnLCAnZi1ncmV5c2NhbGUtMSBmLXRpdGxlLTEnKX0+XG4gICAgICAgICAgICAgIHt0aGlzLmlzQ29udGludWVcbiAgICAgICAgICAgICAgICA/IGN1c3RvbUNvbmZpcm1UZXh0LnRpdGxlIHx8ICdXYXJuaW5nJ1xuICAgICAgICAgICAgICAgIDogY3VzdG9tQ29udGludWVUZXh0LnRpdGxlIHx8ICdDb25maXJtIHRyYW5zYWN0aW9uJ31cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvVkNhcmRUaXRsZT5cbiAgICAgICAgICA8VkNhcmRUZXh0IGNsYXNzPSdwYS0wIHB4LTgnPlxuICAgICAgICAgICAge3RoaXMuaXNDb250aW51ZVxuICAgICAgICAgICAgICAgID8gPGRpdiBjbGFzcz0nZC1mbGV4IGp1c3RpZnktY2VudGVyJz5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J3RleHQtY2VudGVyIGYtYm9keS0xJz5cbiAgICAgICAgICAgICAgICAgICAge2N1c3RvbUNvbmZpcm1UZXh0LmNvbnRlbnQgfHwgJ09uY2UgdGhlIHRyYW5zYWN0aW9uIGlzIGV4ZWN1dGVkLCBpdCBpcyBpcnJldm9jYWJsZSwgcGxlYXNlIHBheSBhZnRlciBjb25maXJtYXRpb24gY2FyZWZ1bGx5Lid9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA6IDxkaXYgY2xhc3M9J2QtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1jZW50ZXInPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17dGhpcy5jbGFzc2VzKCdoaWdobGlnaHQnLCAncGEtNCcpfT5cbiAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPXt0aGlzLmNsYXNzZXMoJ2hpZ2hsaWdodC10ZXh0JywgJ2YtdGl0bGUtMycpfT5cbiAgICAgICAgICAgICAgICAgICAgICB7KF9mID0gKF9lID0gY3VzdG9tQ29udGludWVUZXh0LmhpZ2hsaWdodHMpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZVswXSkgIT09IG51bGwgJiYgX2YgIT09IHZvaWQgMCA/IF9mIDogJ1ByaWNlIGltcGFjdCByZWFjaGVkJ31cbiAgICAgICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPXt0aGlzLmNsYXNzZXMoJ2hpZ2hsaWdodC1pbXBhY3QnKX0+XG4gICAgICAgICAgICAgICAgICAgICAge3RoaXMuaW1wYWN0IHx8ICclJ31cbiAgICAgICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPXt0aGlzLmNsYXNzZXMoJ2hpZ2hsaWdodC10ZXh0JywgJ2YtdGl0bGUtMycpfT5cbiAgICAgICAgICAgICAgICAgICAgICB7KF9oID0gKF9nID0gY3VzdG9tQ29udGludWVUZXh0LmhpZ2hsaWdodHMpID09PSBudWxsIHx8IF9nID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZ1sxXSkgIT09IG51bGwgJiYgX2ggIT09IHZvaWQgMCA/IF9oIDogJ0l0IG1heSBjYXVzZSBhIHNlcmlvdXMgcmVzdWx0Lid9XG4gICAgICAgICAgICAgICAgICAgIDwvaDQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIHt0aGlzLmhhc0Fzc2V0c1xuICAgICAgICAgICAgICAgICAgICAgICAgPyA8ZGl2IGNsYXNzPXt0aGlzLmNsYXNzZXMoJ2Fzc2V0cycsICdkLWZsZXgganVzdGlmeS1zcGFjZS1iZXR3ZWVuIG10LTYnKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXt0aGlzLmNsYXNzZXMoJ2Fzc2V0cy1sZWZ0JywgJ2QtaW5saW5lLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1sZWZ0Jyl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz17dGhpcy5jbGFzc2VzKCdhc3NldHMtbGVmdC1zeW1ib2wnLCAnZi1ncmV5c2NhbGUtMSBmLWJvZHktMicpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KF9qID0gdGhpcy5hc3NldExlZnQpID09PSBudWxsIHx8IF9qID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfai5zeW1ib2x9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9e3RoaXMuY2xhc3NlcygnYXNzZXRzLWxlZnQtYW1vdW50JywgJ2YtZ3JleXNjYWxlLTMgZi1jYXB0aW9uIHRleHQtdHJ1bmNhdGUnKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyhfayA9IHRoaXMuYXNzZXRMZWZ0KSA9PT0gbnVsbCB8fCBfayA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2suYW1vdW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e3RoaXMuY2xhc3NlcygnYXNzZXRzLXJpZ2h0JywgJ2QtaW5saW5lLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jZW50ZXInKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPXt0aGlzLmNsYXNzZXMoJ2Fzc2V0cy1yaWdodC1zeW1ib2wnLCAnZi1ncmV5c2NhbGUtMSBmLWJvZHktMicpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KF9sID0gdGhpcy5hc3NldFJpZ2h0KSA9PT0gbnVsbCB8fCBfbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2wuc3ltYm9sfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPXt0aGlzLmNsYXNzZXMoJ2Fzc2V0cy1yaWdodC1hbW91bnQnLCAnZi1ncmV5c2NhbGUtMyBmLWNhcHRpb24gdGV4dC10cnVuY2F0ZScpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KF9tID0gdGhpcy5hc3NldFJpZ2h0KSA9PT0gbnVsbCB8fCBfbSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX20uYW1vdW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbH1cbiAgICAgICAgICAgICAgICA8L2Rpdj59XG4gICAgICAgICAgPC9WQ2FyZFRleHQ+XG4gICAgICAgICAgPFZDYXJkQWN0aW9ucyBjbGFzcz0nbXQtNiBwYS0wIGFsaWduLWNlbnRlciBqdXN0aWZ5LWNlbnRlcic+XG4gICAgICAgICAgICB7dGhpcy5pc0NvbnRpbnVlXG4gICAgICAgICAgICAgICAgPyA8ZGl2IGNsYXNzPSdkLWZsZXggYWxpZ24tY2VudGVyJz5cbiAgICAgICAgICAgICAgICAgIDxGQnV0dG9uIGNsYXNzPXt0aGlzLmNsYXNzZXMoJ2FjdGlvbi1jb25maXJtLWJ0bi1jYW5jZWwnLCAncHQtNiBwYi04Jyl9IHR5cGU9J3RleHQnIGNvbG9yPXsoY3VzdG9tQ29uZmlybUNvbG9yID09PSBudWxsIHx8IGN1c3RvbUNvbmZpcm1Db2xvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3VzdG9tQ29uZmlybUNvbG9yLmJ0bl9jYW5jZWwpIHx8ICdmLWdyZXlzY2FsZS02J30gdk9uOmNsaWNrPXsoKSA9PiB0aGlzLmhhbmRsZUNvbmZpcm1DbGljaygnY2FuY2VsOmNvbmZpcm0nKX0+XG4gICAgICAgICAgICAgICAgICAgIHsoY3VzdG9tQ29uZmlybVRleHQgPT09IG51bGwgfHwgY3VzdG9tQ29uZmlybVRleHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGN1c3RvbUNvbmZpcm1UZXh0LmJ0bl9jYW5jZWwpIHx8ICdDYW5jZWwnfVxuICAgICAgICAgICAgICAgICAgPC9GQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPEZCdXR0b24gY2xhc3M9e3RoaXMuY2xhc3NlcygnYWN0aW9uLWNvbmZpcm0tYnRuLWNvbmZpcm0nLCAncHQtNiBwYi04Jyl9IHR5cGU9J3RleHQnIGNvbG9yPXsoY3VzdG9tQ29uZmlybUNvbG9yID09PSBudWxsIHx8IGN1c3RvbUNvbmZpcm1Db2xvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3VzdG9tQ29uZmlybUNvbG9yLmJ0bl9jb25maXJtKSB8fCAnZXJyb3InfSB2T246Y2xpY2s9eygpID0+IHRoaXMuaGFuZGxlQ29uZmlybUNsaWNrKCdjb25maXJtJyl9PlxuICAgICAgICAgICAgICAgICAgICB7KGN1c3RvbUNvbmZpcm1UZXh0ID09PSBudWxsIHx8IGN1c3RvbUNvbmZpcm1UZXh0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjdXN0b21Db25maXJtVGV4dC5idG5fY29uZmlybSkgfHwgJ0NvbmZpcm0nfVxuICAgICAgICAgICAgICAgICAgPC9GQnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDogPGRpdiBjbGFzcz0nZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWNlbnRlciBqdXN0aWZ5LWNlbnRlcic+XG4gICAgICAgICAgICAgICAgICA8RkJ1dHRvbiBjbGFzcz17dGhpcy5jbGFzc2VzKCdhY3Rpb24tY29udGludWUtYnRuLWNhbmNlbCcsIChjdXN0b21Db250aW51ZUNvbG9yID09PSBudWxsIHx8IGN1c3RvbUNvbnRpbnVlQ29sb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGN1c3RvbUNvbnRpbnVlQ29sb3IuYnRuX2NhbmNlbCkgPyAnZi1ncmV5c2NhbGUtNicgOiAnd2hpdGUtLXRleHQnKX0gY29sb3I9eyhjdXN0b21Db250aW51ZUNvbG9yID09PSBudWxsIHx8IGN1c3RvbUNvbnRpbnVlQ29sb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGN1c3RvbUNvbnRpbnVlQ29sb3IuYnRuX2NhbmNlbCkgfHwgJ3BpbmsnfSB2T246Y2xpY2s9eygpID0+IHRoaXMuaGFuZGxlQ29udGludWVDbGljaygnY2FuY2VsOmNvbnRpbnVlJyl9PlxuICAgICAgICAgICAgICAgICAgICB7KGN1c3RvbUNvbnRpbnVlVGV4dCA9PT0gbnVsbCB8fCBjdXN0b21Db250aW51ZVRleHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGN1c3RvbUNvbnRpbnVlVGV4dC5idG5fY2FuY2VsKSB8fCAnQ2FuY2VsJ31cbiAgICAgICAgICAgICAgICAgIDwvRkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxGQnV0dG9uIGNsYXNzPXt0aGlzLmNsYXNzZXMoJ2FjdGlvbi1jb250aW51ZS1idG4tY29udGludWUnLCAncHktOCcpfSBhdHRycz17eyBkaXNhYmxlZDogdGhpcy5jb3VudCAhPT0gdm9pZCAwICYmIHRoaXMuY291bnQgPiAwIH19IHR5cGU9J3RleHQnIGNvbG9yPXsoY3VzdG9tQ29udGludWVDb2xvciA9PT0gbnVsbCB8fCBjdXN0b21Db250aW51ZUNvbG9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjdXN0b21Db250aW51ZUNvbG9yLmJ0bl9jb250aW51ZSkgfHwgJ2YtZ3JleXNjYWxlLTEnfSB2T246Y2xpY2s9eygpID0+IHRoaXMuaGFuZGxlQ29udGludWVDbGljaygnY29udGludWUnKX0+XG4gICAgICAgICAgICAgICAgICAgIHtgJHsoY3VzdG9tQ29udGludWVUZXh0ID09PSBudWxsIHx8IGN1c3RvbUNvbnRpbnVlVGV4dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3VzdG9tQ29udGludWVUZXh0LmJ0bl9jb250aW51ZSkgfHwgJ0NvbnRpbnVlJ30ke3RoaXMuY291bnQgIT09IHZvaWQgMCAmJiB0aGlzLmNvdW50ID4gMCA/IGAoJHt0aGlzLmNvdW50fXMpYCA6ICcnfWAudHJpbSgpfVxuICAgICAgICAgICAgICAgICAgPC9GQnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2Pn1cbiAgICAgICAgICA8L1ZDYXJkQWN0aW9ucz5cbiAgICAgICAgPC9WQ2FyZD5cbiAgICAgIDwvVkRpYWxvZz4pO1xuICAgIH1cbn0pOyJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=