UNPKG

@foxone/finance-ui

Version:

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

348 lines (299 loc) 46.2 kB
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck"; import _createClass from "@babel/runtime/helpers/esm/createClass"; import _inherits from "@babel/runtime/helpers/esm/inherits"; import _possibleConstructorReturn from "@babel/runtime/helpers/esm/possibleConstructorReturn"; import _getPrototypeOf from "@babel/runtime/helpers/esm/getPrototypeOf"; import _typeof from "@babel/runtime/helpers/esm/typeof"; function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var __decorate = this && this.__decorate || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; } return c > 3 && r && Object.defineProperty(target, key, r), r; }; import { Component, Vue, Prop, PropSync, Model, Watch } from 'vue-property-decorator'; import classnames from '../utils/classnames'; import { format } from '../utils/number'; import { VLayout } from 'vuetify/lib'; import { FAssetAmountInput } from '@foxone/uikit/src/components/FAssetAmountInput'; import { FButton } from '@foxone/uikit/src/components/FButton'; import 'vue-slider-component/theme/default.css'; // avoid typescript error var VueSlider = require('vue-slider-component'); var AssetRangeInput = /*#__PURE__*/function (_Vue) { _inherits(AssetRangeInput, _Vue); var _super = _createSuper(AssetRangeInput); function AssetRangeInput() { var _this; _classCallCheck(this, AssetRangeInput); _this = _super.apply(this, arguments); _this._value_input = ''; _this._value_slider = 0; return _this; } _createClass(AssetRangeInput, [{ key: "hasInputLeftTips", get: function get() { var _a, _b, _c; return !!(((_a = this.inputTips) === null || _a === void 0 ? void 0 : _a.amount) || ((_b = this.inputTips) === null || _b === void 0 ? void 0 : _b.amountSymbol) || ((_c = this.inputTips) === null || _c === void 0 ? void 0 : _c.tipLeft)); } }, { key: "hasUpperLimit", get: function get() { return this.max && 1 / this.max; } }, { key: "isInRange", value: function isInRange(val) { return val >= this.min && (!this.hasUpperLimit || val <= this.max); } }, { key: "setSliderValueWithLimit", value: function setSliderValueWithLimit(val) { if (this.hasUpperLimit && typeof val === 'number') { var _val = val / this.max * 100; if (_val > 100) _val = 100; if (_val < 0) _val = 0; this._value_slider = format({ n: _val, p: 2 }); } } }, { key: "handleValueChange", value: function handleValueChange(val) { if (!this.isInRange(+val)) this.$emit('error:limit'); this._value_input = val; this.setSliderValueWithLimit(+val); } }, { key: "created", value: function created() { if (!this.isInRange(+this.value)) this.$emit('error:limit'); this._value_input = this.value; this.setSliderValueWithLimit(+this.value); } }, { key: "render", value: function render(h) { var _this2 = this; var _a, _b, _c, _d, _e, _f, _g, _h; var btn = this.$slots.button; var slider = this.$slots.slider; var inputTips = this.$slots.inputTips; var sliderTips = this.$slots.sliderTips; var activator = this.$scopedSlots.activator; var classes = classnames('asset-range-input'); return h(VLayout, { staticClass: classes(), "class": this.className, attrs: { column: true, 'align-center': true } }, [// top section h('div', { staticClass: classes('top') }, [// asset input h(FAssetAmountInput, { props: { value: this._value_input, assets: this.assets, asset: this.bindAsset, selectable: this.selectable, border: this.border, loading: this.loading }, attrs: Object.assign(Object.assign({}, this.$attrs), { disabled: this.disabledInput }), on: Object.assign(Object.assign({}, this.$listeners), { input: function input(val, e) { if (!_this2.isInRange(+val)) _this2.$emit('error:limit'); _this2._value_input = val; _this2.$emit('input', val); if (!_this2.value) _this2.$nextTick(function () { return _this2.$forceUpdate(); }); _this2.setSliderValueWithLimit(+val); } }), scopedSlots: { activator: activator } }), // tips inputTips !== null && inputTips !== void 0 ? inputTips : h(VLayout, { staticClass: classes('top-tips', 'mt-2 f-greyscale-3 f-caption'), attrs: { 'justify-space-between': true, 'align-center': true } }, [this.hasInputLeftTips ? h('div', { staticClass: classes('top-tips-left') }, [((_a = this.inputTips) === null || _a === void 0 ? void 0 : _a.tipLeft) ? h('span', { staticClass: classes('top-tips-left-txt', 'mr-1') }, [(_b = this.inputTips) === null || _b === void 0 ? void 0 : _b.tipLeft]) : null, ((_c = this.inputTips) === null || _c === void 0 ? void 0 : _c.amount) ? h('span', { staticClass: classes('top-tips-left-amount', 'f-greyscale-1 font-weight-bold'), on: { click: function click() { var _a, _b; if (!_this2.isInRange(+((_a = _this2.inputTips) === null || _a === void 0 ? void 0 : _a.amount))) _this2.$emit('error:limit'); _this2._value_input = "".concat((_b = _this2.inputTips) === null || _b === void 0 ? void 0 : _b.amount); _this2.setSliderValueWithLimit(+_this2._value_input); _this2.$emit('input', _this2._value_input); _this2.$emit('click:amount'); _this2.$nextTick(function () { return _this2.$forceUpdate(); }); } } }, "".concat((_d = this.inputTips) === null || _d === void 0 ? void 0 : _d.amount).concat((_f = (_e = this.inputTips) === null || _e === void 0 ? void 0 : _e.amountSymbol) !== null && _f !== void 0 ? _f : '')) : null]) : null, ((_g = this.inputTips) === null || _g === void 0 ? void 0 : _g.tipRight) ? h('div', { staticClass: classes('top-tips-right') }, [this.inputTips.tipRight]) : null]), // error this.error ? h('div', { staticClass: classes('top-error', 'f-caption pt-2') }, [typeof this.error === 'function' ? this.error(this._value_input) : this.error]) : h('div', { staticClass: classes('top-error-placeholder') })]), // slider section this.showSlider ? h('div', { staticClass: classes('mid', 'mb-8') }, slider !== null && slider !== void 0 ? slider : [sliderTips !== null && sliderTips !== void 0 ? sliderTips : h(VLayout, { staticClass: classes('mid-tips', 'mb-5 f-greyscale-3 f-body-2'), attrs: { 'justify-space-between': true, 'align-center': true } }, [h('span', this.ratioText), h('span', { staticClass: 'f-greyscale-1 font-weight-bold' }, "".concat((_h = this._value_slider) !== null && _h !== void 0 ? _h : 0, "%"))]), h(VueSlider, { props: { value: this._value_slider, height: 8, min: 0, max: 100, interval: 0.01, lazy: true, tooltip: 'none', contained: true, disabled: this.disabledSlider }, on: { change: function change(val) { _this2._value_slider = +val; if (_this2.hasUpperLimit) { _this2._value_input = format({ n: +val / 100 * _this2.max, p: 8 }); _this2.$emit('input', _this2._value_input); } _this2.$nextTick(function () { return _this2.$forceUpdate(); }); } } })]) : null, // btn section this.showBtn ? btn !== null && btn !== void 0 ? btn : h(FButton, { staticClass: 'px-8 py-4', props: { color: this.color }, attrs: { disabled: this.disabledBtn !== void 0 ? this.disabledBtn : !this.isInRange(+this._value_input) }, on: { click: function click() { _this2.$emit('click:button'); } } }, this.btnText) : null]); } }]); return AssetRangeInput; }(Vue); __decorate([Model('input', { type: [String, Number], "default": '' })], AssetRangeInput.prototype, "value", void 0); __decorate([Prop({ type: Number, "default": 0 })], AssetRangeInput.prototype, "min", void 0); __decorate([Prop({ type: Number, "default": Infinity })], AssetRangeInput.prototype, "max", void 0); __decorate([Prop({ type: String, "default": '' })], AssetRangeInput.prototype, "className", void 0); __decorate([Prop({ type: String, "default": 'primary' })], AssetRangeInput.prototype, "color", void 0); __decorate([Prop({ type: Boolean, "default": void 0 })], AssetRangeInput.prototype, "disabledInput", void 0); __decorate([Prop({ type: Boolean, "default": true })], AssetRangeInput.prototype, "selectable", void 0); __decorate([Prop({ type: Boolean, "default": false })], AssetRangeInput.prototype, "border", void 0); __decorate([Prop({ type: Boolean, "default": false })], AssetRangeInput.prototype, "loading", void 0); __decorate([Prop({ type: Array, "default": function _default() { return []; } })], AssetRangeInput.prototype, "assets", void 0); __decorate([PropSync('asset')], AssetRangeInput.prototype, "bindAsset", void 0); __decorate([Prop({ type: Object, "default": function _default() { return {}; } })], AssetRangeInput.prototype, "inputTips", void 0); __decorate([Prop({ type: [String, Function], "default": '' })], AssetRangeInput.prototype, "error", void 0); __decorate([Prop({ type: String, "default": 'Ratio' })], AssetRangeInput.prototype, "ratioText", void 0); __decorate([Prop({ type: Boolean, "default": void 0 })], AssetRangeInput.prototype, "disabledSlider", void 0); __decorate([Prop({ type: Boolean, "default": true })], AssetRangeInput.prototype, "showSlider", void 0); __decorate([Prop({ type: String, "default": 'Confirm' })], AssetRangeInput.prototype, "btnText", void 0); __decorate([Prop({ type: Boolean, "default": void 0 })], AssetRangeInput.prototype, "disabledBtn", void 0); __decorate([Prop({ type: Boolean, "default": true })], AssetRangeInput.prototype, "showBtn", void 0); __decorate([Watch('value')], AssetRangeInput.prototype, "handleValueChange", null); AssetRangeInput = __decorate([Component], AssetRangeInput); export { AssetRangeInput }; export default AssetRangeInput; //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkFzc2V0UmFuZ2VJbnB1dC9fZGVwcmVjYXRlLmpzIiwic3JjL0Fzc2V0UmFuZ2VJbnB1dC9fZGVwcmVjYXRlLnRzIl0sIm5hbWVzIjpbIl9fZGVjb3JhdGUiLCJkZWNvcmF0b3JzIiwidGFyZ2V0Iiwia2V5IiwiZGVzYyIsImMiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJyIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZCIsIlJlZmxlY3QiLCJkZWNvcmF0ZSIsImkiLCJkZWZpbmVQcm9wZXJ0eSIsIkNvbXBvbmVudCIsIlZ1ZSIsIlByb3AiLCJQcm9wU3luYyIsIk1vZGVsIiwiV2F0Y2giLCJjbGFzc25hbWVzIiwiZm9ybWF0IiwiVkxheW91dCIsIkZBc3NldEFtb3VudElucHV0IiwiRkJ1dHRvbiIsIlZ1ZVNsaWRlciIsInJlcXVpcmUiLCJBc3NldFJhbmdlSW5wdXQiLCJfdmFsdWVfaW5wdXQiLCJfdmFsdWVfc2xpZGVyIiwiX2EiLCJfYiIsIl9jIiwiaW5wdXRUaXBzIiwiYW1vdW50IiwiYW1vdW50U3ltYm9sIiwidGlwTGVmdCIsIm1heCIsInZhbCIsIm1pbiIsImhhc1VwcGVyTGltaXQiLCJfdmFsIiwibiIsInAiLCJpc0luUmFuZ2UiLCIkZW1pdCIsInNldFNsaWRlclZhbHVlV2l0aExpbWl0IiwidmFsdWUiLCJoIiwiX2QiLCJfZSIsIl9mIiwiX2ciLCJfaCIsImJ0biIsIiRzbG90cyIsImJ1dHRvbiIsInNsaWRlciIsInNsaWRlclRpcHMiLCJhY3RpdmF0b3IiLCIkc2NvcGVkU2xvdHMiLCJjbGFzc2VzIiwic3RhdGljQ2xhc3MiLCJjbGFzc05hbWUiLCJhdHRycyIsImNvbHVtbiIsInByb3BzIiwiYXNzZXRzIiwiYXNzZXQiLCJiaW5kQXNzZXQiLCJzZWxlY3RhYmxlIiwiYm9yZGVyIiwibG9hZGluZyIsImFzc2lnbiIsIiRhdHRycyIsImRpc2FibGVkIiwiZGlzYWJsZWRJbnB1dCIsIm9uIiwiJGxpc3RlbmVycyIsImlucHV0IiwiZSIsIiRuZXh0VGljayIsIiRmb3JjZVVwZGF0ZSIsInNjb3BlZFNsb3RzIiwiaGFzSW5wdXRMZWZ0VGlwcyIsImNsaWNrIiwidGlwUmlnaHQiLCJlcnJvciIsInNob3dTbGlkZXIiLCJyYXRpb1RleHQiLCJoZWlnaHQiLCJpbnRlcnZhbCIsImxhenkiLCJ0b29sdGlwIiwiY29udGFpbmVkIiwiZGlzYWJsZWRTbGlkZXIiLCJjaGFuZ2UiLCJzaG93QnRuIiwiY29sb3IiLCJkaXNhYmxlZEJ0biIsImJ0blRleHQiLCJ0eXBlIiwiU3RyaW5nIiwiTnVtYmVyIiwicHJvdG90eXBlIiwiSW5maW5pdHkiLCJCb29sZWFuIiwiQXJyYXkiLCJGdW5jdGlvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSxJQUFJQSxVQUFVLEdBQUksUUFBUSxLQUFLQSxVQUFkLElBQTZCLFVBQVVDLFVBQVYsRUFBc0JDLE1BQXRCLEVBQThCQyxHQUE5QixFQUFtQ0MsSUFBbkMsRUFBeUM7QUFDbkYsTUFBSUMsQ0FBQyxHQUFHQyxTQUFTLENBQUNDLE1BQWxCO0FBQUEsTUFBMEJDLENBQUMsR0FBR0gsQ0FBQyxHQUFHLENBQUosR0FBUUgsTUFBUixHQUFpQkUsSUFBSSxLQUFLLElBQVQsR0FBZ0JBLElBQUksR0FBR0ssTUFBTSxDQUFDQyx3QkFBUCxDQUFnQ1IsTUFBaEMsRUFBd0NDLEdBQXhDLENBQXZCLEdBQXNFQyxJQUFySDtBQUFBLE1BQTJITyxDQUEzSDtBQUNBLE1BQUksUUFBT0MsT0FBUCx5Q0FBT0EsT0FBUCxPQUFtQixRQUFuQixJQUErQixPQUFPQSxPQUFPLENBQUNDLFFBQWYsS0FBNEIsVUFBL0QsRUFBMkVMLENBQUMsR0FBR0ksT0FBTyxDQUFDQyxRQUFSLENBQWlCWixVQUFqQixFQUE2QkMsTUFBN0IsRUFBcUNDLEdBQXJDLEVBQTBDQyxJQUExQyxDQUFKLENBQTNFLEtBQ0ssS0FBSyxJQUFJVSxDQUFDLEdBQUdiLFVBQVUsQ0FBQ00sTUFBWCxHQUFvQixDQUFqQyxFQUFvQ08sQ0FBQyxJQUFJ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bnRlbnQiOlsidmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuaW1wb3J0IHsgQ29tcG9uZW50LCBWdWUsIFByb3AsIFByb3BTeW5jLCBNb2RlbCwgV2F0Y2ggfSBmcm9tICd2dWUtcHJvcGVydHktZGVjb3JhdG9yJztcbmltcG9ydCBjbGFzc25hbWVzIGZyb20gJy4uL3V0aWxzL2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAnLi4vdXRpbHMvbnVtYmVyJztcbmltcG9ydCB7IFZMYXlvdXQgfSBmcm9tICd2dWV0aWZ5L2xpYic7XG5pbXBvcnQgeyBGQXNzZXRBbW91bnRJbnB1dCB9IGZyb20gJ0Bmb3hvbmUvdWlraXQvc3JjL2NvbXBvbmVudHMvRkFzc2V0QW1vdW50SW5wdXQnO1xuaW1wb3J0IHsgRkJ1dHRvbiB9IGZyb20gJ0Bmb3hvbmUvdWlraXQvc3JjL2NvbXBvbmVudHMvRkJ1dHRvbic7XG5pbXBvcnQgJ3Z1ZS1zbGlkZXItY29tcG9uZW50L3RoZW1lL2RlZmF1bHQuY3NzJztcbi8vIGF2b2lkIHR5cGVzY3JpcHQgZXJyb3JcbmNvbnN0IFZ1ZVNsaWRlciA9IHJlcXVpcmUoJ3Z1ZS1zbGlkZXItY29tcG9uZW50Jyk7XG5sZXQgQXNzZXRSYW5nZUlucHV0ID0gY2xhc3MgQXNzZXRSYW5nZUlucHV0IGV4dGVuZHMgVnVlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5fdmFsdWVfaW5wdXQgPSAnJztcbiAgICAgICAgdGhpcy5fdmFsdWVfc2xpZGVyID0gMDtcbiAgICB9XG4gICAgZ2V0IGhhc0lucHV0TGVmdFRpcHMoKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICByZXR1cm4gISEoKChfYSA9IHRoaXMuaW5wdXRUaXBzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYW1vdW50KSB8fCAoKF9iID0gdGhpcy5pbnB1dFRpcHMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5hbW91bnRTeW1ib2wpIHx8ICgoX2MgPSB0aGlzLmlucHV0VGlwcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLnRpcExlZnQpKTtcbiAgICB9XG4gICAgZ2V0IGhhc1VwcGVyTGltaXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1heCAmJiAoMSAvIHRoaXMubWF4KTtcbiAgICB9XG4gICAgaXNJblJhbmdlKHZhbCkge1xuICAgICAgICByZXR1cm4gdmFsID49IHRoaXMubWluICYmICghdGhpcy5oYXNVcHBlckxpbWl0IHx8IHZhbCA8PSB0aGlzLm1heCk7XG4gICAgfVxuICAgIHNldFNsaWRlclZhbHVlV2l0aExpbWl0KHZhbCkge1xuICAgICAgICBpZiAodGhpcy5oYXNVcHBlckxpbWl0ICYmIHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBsZXQgX3ZhbCA9IHZhbCAvIHRoaXMubWF4ICogMTAwO1xuICAgICAgICAgICAgaWYgKF92YWwgPiAxMDApXG4gICAgICAgICAgICAgICAgX3ZhbCA9IDEwMDtcbiAgICAgICAgICAgIGlmIChfdmFsIDwgMClcbiAgICAgICAgICAgICAgICBfdmFsID0gMDtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlX3NsaWRlciA9IGZvcm1hdCh7XG4gICAgICAgICAgICAgICAgbjogX3ZhbCxcbiAgICAgICAgICAgICAgICBwOiAyXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoYW5kbGVWYWx1ZUNoYW5nZSh2YWwpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzSW5SYW5nZSgrdmFsKSlcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2Vycm9yOmxpbWl0Jyk7XG4gICAgICAgIHRoaXMuX3ZhbHVlX2lucHV0ID0gdmFsO1xuICAgICAgICB0aGlzLnNldFNsaWRlclZhbHVlV2l0aExpbWl0KCt2YWwpO1xuICAgIH1cbiAgICBjcmVhdGVkKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNJblJhbmdlKCt0aGlzLnZhbHVlKSlcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2Vycm9yOmxpbWl0Jyk7XG4gICAgICAgIHRoaXMuX3ZhbHVlX2lucHV0ID0gdGhpcy52YWx1ZTtcbiAgICAgICAgdGhpcy5zZXRTbGlkZXJWYWx1ZVdpdGhMaW1pdCgrdGhpcy52YWx1ZSk7XG4gICAgfVxuICAgIHJlbmRlcihoKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mLCBfZywgX2g7XG4gICAgICAgIGNvbnN0IGJ0biA9IHRoaXMuJHNsb3RzLmJ1dHRvbjtcbiAgICAgICAgY29uc3Qgc2xpZGVyID0gdGhpcy4kc2xvdHMuc2xpZGVyO1xuICAgICAgICBjb25zdCBpbnB1dFRpcHMgPSB0aGlzLiRzbG90cy5pbnB1dFRpcHM7XG4gICAgICAgIGNvbnN0IHNsaWRlclRpcHMgPSB0aGlzLiRzbG90cy5zbGlkZXJUaXBzO1xuICAgICAgICBjb25zdCBhY3RpdmF0b3IgPSB0aGlzLiRzY29wZWRTbG90cy5hY3RpdmF0b3I7XG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSBjbGFzc25hbWVzKCdhc3NldC1yYW5nZS1pbnB1dCcpO1xuICAgICAgICByZXR1cm4gaChWTGF5b3V0LCB7XG4gICAgICAgICAgICBzdGF0aWNDbGFzczogY2xhc3NlcygpLFxuICAgICAgICAgICAgY2xhc3M6IHRoaXMuY2xhc3NOYW1lLFxuICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICBjb2x1bW46IHRydWUsXG4gICAgICAgICAgICAgICAgJ2FsaWduLWNlbnRlcic6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgW1xuICAgICAgICAgICAgLy8gdG9wIHNlY3Rpb25cbiAgICAgICAgICAgIGgoJ2RpdicsIHtcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogY2xhc3NlcygndG9wJylcbiAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICAvLyBhc3NldCBpbnB1dFxuICAgICAgICAgICAgICAgIGgoRkFzc2V0QW1vdW50SW5wdXQsIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLl92YWx1ZV9pbnB1dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2V0czogdGhpcy5hc3NldHMsXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NldDogdGhpcy5iaW5kQXNzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiB0aGlzLnNlbGVjdGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IHRoaXMuYm9yZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGluZzogdGhpcy5sb2FkaW5nLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBhdHRyczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB0aGlzLiRhdHRycyksIHsgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRJbnB1dCB9KSxcbiAgICAgICAgICAgICAgICAgICAgb246IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdGhpcy4kbGlzdGVuZXJzKSwgeyBpbnB1dDogKHZhbCwgZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0luUmFuZ2UoK3ZhbCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2Vycm9yOmxpbWl0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVfaW5wdXQgPSB2YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gdGhpcy4kZm9yY2VVcGRhdGUoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTbGlkZXJWYWx1ZVdpdGhMaW1pdCgrdmFsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSksXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlZFNsb3RzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmF0b3JcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAvLyB0aXBzXG4gICAgICAgICAgICAgICAgaW5wdXRUaXBzICE9PSBudWxsICYmIGlucHV0VGlwcyAhPT0gdm9pZCAwID8gaW5wdXRUaXBzIDogaChWTGF5b3V0LCB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBjbGFzc2VzKCd0b3AtdGlwcycsICdtdC0yIGYtZ3JleXNjYWxlLTMgZi1jYXB0aW9uJyksXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnanVzdGlmeS1zcGFjZS1iZXR3ZWVuJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdhbGlnbi1jZW50ZXInOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzSW5wdXRMZWZ0VGlwcyA/IGgoJ2RpdicsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBjbGFzc2VzKCd0b3AtdGlwcy1sZWZ0JylcbiAgICAgICAgICAgICAgICAgICAgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgKChfYSA9IHRoaXMuaW5wdXRUaXBzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGlwTGVmdCkgPyBoKCdzcGFuJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBjbGFzc2VzKCd0b3AtdGlwcy1sZWZ0LXR4dCcsICdtci0xJylcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIFsoX2IgPSB0aGlzLmlucHV0VGlwcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnRpcExlZnRdKSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAoKF9jID0gdGhpcy5pbnB1dFRpcHMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5hbW91bnQpID8gaCgnc3BhbicsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogY2xhc3NlcygndG9wLXRpcHMtbGVmdC1hbW91bnQnLCAnZi1ncmV5c2NhbGUtMSBmb250LXdlaWdodC1ib2xkJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNJblJhbmdlKCsoKF9hID0gdGhpcy5pbnB1dFRpcHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hbW91bnQpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdlcnJvcjpsaW1pdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVfaW5wdXQgPSBgJHsoX2IgPSB0aGlzLmlucHV0VGlwcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmFtb3VudH1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTbGlkZXJWYWx1ZVdpdGhMaW1pdCgrdGhpcy5fdmFsdWVfaW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB0aGlzLl92YWx1ZV9pbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdjbGljazphbW91bnQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHRoaXMuJGZvcmNlVXBkYXRlKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgYCR7KF9kID0gdGhpcy5pbnB1dFRpcHMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5hbW91bnR9JHsoX2YgPSAoX2UgPSB0aGlzLmlucHV0VGlwcykgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lLmFtb3VudFN5bWJvbCkgIT09IG51bGwgJiYgX2YgIT09IHZvaWQgMCA/IF9mIDogJyd9YCkgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBdKSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICgoX2cgPSB0aGlzLmlucHV0VGlwcykgPT09IG51bGwgfHwgX2cgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9nLnRpcFJpZ2h0KSA/IGgoJ2RpdicsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBjbGFzc2VzKCd0b3AtdGlwcy1yaWdodCcpXG4gICAgICAgICAgICAgICAgICAgIH0sIFt0aGlzLmlucHV0VGlwcy50aXBSaWdodF0pIDogbnVsbFxuICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgIC8vIGVycm9yXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA/IGgoJ2RpdicsIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IGNsYXNzZXMoJ3RvcC1lcnJvcicsICdmLWNhcHRpb24gcHQtMicpXG4gICAgICAgICAgICAgICAgfSwgW1xuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdGhpcy5lcnJvciA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMuZXJyb3IodGhpcy5fdmFsdWVfaW5wdXQpIDogdGhpcy5lcnJvclxuICAgICAgICAgICAgICAgIF0pIDogaCgnZGl2Jywge1xuICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogY2xhc3NlcygndG9wLWVycm9yLXBsYWNlaG9sZGVyJylcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAvLyBzbGlkZXIgc2VjdGlvblxuICAgICAgICAgICAgdGhpcy5zaG93U2xpZGVyID8gaCgnZGl2Jywge1xuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBjbGFzc2VzKCdtaWQnLCAnbWItOCcpXG4gICAgICAgICAgICB9LCBzbGlkZXIgIT09IG51bGwgJiYgc2xpZGVyICE9PSB2b2lkIDAgPyBzbGlkZXIgOiBbXG4gICAgICAgICAgICAgICAgc2xpZGVyVGlwcyAhPT0gbnVsbCAmJiBzbGlkZXJUaXBzICE9PSB2b2lkIDAgPyBzbGlkZXJUaXBzIDogaChWTGF5b3V0LCB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBjbGFzc2VzKCdtaWQtdGlwcycsICdtYi01IGYtZ3JleXNjYWxlLTMgZi1ib2R5LTInKSxcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdqdXN0aWZ5LXNwYWNlLWJldHdlZW4nOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2FsaWduLWNlbnRlcic6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgaCgnc3BhbicsIHRoaXMucmF0aW9UZXh0KSxcbiAgICAgICAgICAgICAgICAgICAgaCgnc3BhbicsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAnZi1ncmV5c2NhbGUtMSBmb250LXdlaWdodC1ib2xkJyxcbiAgICAgICAgICAgICAgICAgICAgfSwgYCR7KF9oID0gdGhpcy5fdmFsdWVfc2xpZGVyKSAhPT0gbnVsbCAmJiBfaCAhPT0gdm9pZCAwID8gX2ggOiAwfSVgKVxuICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgIGgoVnVlU2xpZGVyLCB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5fdmFsdWVfc2xpZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA4LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4OiAxMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnZhbDogMC4wMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhenk6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZFNsaWRlclxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlOiB2YWwgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlX3NsaWRlciA9ICt2YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzVXBwZXJMaW1pdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZV9pbnB1dCA9IGZvcm1hdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiArdmFsIC8gMTAwICogdGhpcy5tYXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwOiA4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHRoaXMuX3ZhbHVlX2lucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gdGhpcy4kZm9yY2VVcGRhdGUoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSkgOiBudWxsLFxuICAgICAgICAgICAgLy8gYnRuIHNlY3Rpb25cbiAgICAgICAgICAgIHRoaXMuc2hvd0J0biA/IGJ0biAhPT0gbnVsbCAmJiBidG4gIT09IHZvaWQgMCA/IGJ0biA6IGgoRkJ1dHRvbiwge1xuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAncHgtOCBweS00JyxcbiAgICAgICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5jb2xvclxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRCdG4gIT09IHZvaWQgMCA/IHRoaXMuZGlzYWJsZWRCdG4gOiAhdGhpcy5pc0luUmFuZ2UoK3RoaXMuX3ZhbHVlX2lucHV0KVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgY2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2NsaWNrOmJ1dHRvbicpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdGhpcy5idG5UZXh0KSA6IG51bGxcbiAgICAgICAgXSk7XG4gICAgfVxufTtcbl9fZGVjb3JhdGUoW1xuICAgIE1vZGVsKCdpbnB1dCcsIHsgdHlwZTogW1N0cmluZywgTnVtYmVyXSwgZGVmYXVsdDogJycgfSlcbl0sIEFzc2V0UmFuZ2VJbnB1dC5wcm90b3R5cGUsIFwidmFsdWVcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIFByb3AoeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfSlcbl0sIEFzc2V0UmFuZ2VJbnB1dC5wcm90b3R5cGUsIFwibWluXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBQcm9wKHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiBJbmZpbml0eSB9KVxuXSwgQXNzZXRSYW5nZUlucHV0LnByb3RvdHlwZSwgXCJtYXhcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIFByb3AoeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0pXG5dLCBBc3NldFJhbmdlSW5wdXQucHJvdG90eXBlLCBcImNsYXNzTmFtZVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgUHJvcCh7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3ByaW1hcnknIH0pXG5dLCBBc3NldFJhbmdlSW5wdXQucHJvdG90eXBlLCBcImNvbG9yXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBQcm9wKHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdm9pZCAwIH0pXG5dLCBBc3NldFJhbmdlSW5wdXQucHJvdG90eXBlLCBcImRpc2FibGVkSW5wdXRcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIFByb3AoeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0pXG5dLCBBc3NldFJhbmdlSW5wdXQucHJvdG90eXBlLCBcInNlbGVjdGFibGVcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIFByb3AoeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9KVxuXSwgQXNzZXRSYW5nZUlucHV0LnByb3RvdHlwZSwgXCJib3JkZXJcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIFByb3AoeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9KVxuXSwgQXNzZXRSYW5nZUlucHV0LnByb3RvdHlwZSwgXCJsb2FkaW5nXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBQcm9wKHsgdHlwZTogQXJyYXksIGRlZmF1bHQ6ICgpID0+IFtdIH0pXG5dLCBBc3NldFJhbmdlSW5wdXQucHJvdG90eXBlLCBcImFzc2V0c1wiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgUHJvcFN5bmMoJ2Fzc2V0Jylcbl0sIEFzc2V0UmFuZ2VJbnB1dC5wcm90b3R5cGUsIFwiYmluZEFzc2V0XCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBQcm9wKHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0pXG5dLCBBc3NldFJhbmdlSW5wdXQucHJvdG90eXBlLCBcImlucHV0VGlwc1wiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgUHJvcCh7IHR5cGU6IFtTdHJpbmcsIEZ1bmN0aW9uXSwgZGVmYXVsdDogJycgfSlcbl0sIEFzc2V0UmFuZ2VJbnB1dC5wcm90b3R5cGUsIFwiZXJyb3JcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIFByb3AoeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdSYXRpbycgfSlcbl0sIEFzc2V0UmFuZ2VJbnB1dC5wcm90b3R5cGUsIFwicmF0aW9UZXh0XCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBQcm9wKHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdm9pZCAwIH0pXG5dLCBBc3NldFJhbmdlSW5wdXQucHJvdG90eXBlLCBcImRpc2FibGVkU2xpZGVyXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBQcm9wKHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9KVxuXSwgQXNzZXRSYW5nZUlucHV0LnByb3RvdHlwZSwgXCJzaG93U2xpZGVyXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBQcm9wKHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnQ29uZmlybScgfSlcbl0sIEFzc2V0UmFuZ2VJbnB1dC5wcm90b3R5cGUsIFwiYnRuVGV4dFwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgUHJvcCh7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHZvaWQgMCB9KVxuXSwgQXNzZXRSYW5nZUlucHV0LnByb3RvdHlwZSwgXCJkaXNhYmxlZEJ0blwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgUHJvcCh7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSlcbl0sIEFzc2V0UmFuZ2VJbnB1dC5wcm90b3R5cGUsIFwic2hvd0J0blwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgV2F0Y2goJ3ZhbHVlJylcbl0sIEFzc2V0UmFuZ2VJbnB1dC5wcm90b3R5cGUsIFwiaGFuZGxlVmFsdWVDaGFuZ2VcIiwgbnVsbCk7XG5Bc3NldFJhbmdlSW5wdXQgPSBfX2RlY29yYXRlKFtcbiAgICBDb21wb25lbnRcbl0sIEFzc2V0UmFuZ2VJbnB1dCk7XG5leHBvcnQgeyBBc3NldFJhbmdlSW5wdXQgfTtcbmV4cG9ydCBkZWZhdWx0IEFzc2V0UmFuZ2VJbnB1dDsiLG51bGxdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=