属性:
属性 | 描述 | 类型 | 默认值 |
show | 是否显示验证码弹框 | Boolean | false |
canvasWidth | 主图区域的宽度 | Number | 310 |
canvasHeight | 主图区域的高度 | Number | 160 |
imgs | 自定义图片 | Array | null |
successText | 验证成功时的提示文字 | String | 验证通过! |
failText | 验证失败时的提示文字 | String | 验证失败,请重试 |
sliderText | 下方滑动条里的文字 | String | 拖动滑块完成拼图 |
事件:
事件名 | 描述 | 返回值 |
success | 验证通过时会触发 | 偏差值px,移动的距离px(需修改源码) |
fail | 主图区域的宽度 | 偏差值px |
close | 用户点击遮罩层的回调 | null |
reset(需修改源码) | 用户点击刷新按钮和失败后重新刷新的回调 | 偏差值px |
1、安装vue-puzzle-vcode
npm i -S vue-puzzle-vcode
2、实现代码
登录
效果:
前端和后端一起结合调取接口的时候,框架原本的success和fail和close已经不满足我们使用,所以我们要修改框架的源码我们加一个reset事件和成功之后多返回一个移动的距离px~
修改后的源码main.js:
!function(t, e) { true ? module.exports = e() : undefined }(this, (function() { return function() { "use strict"; var t = { 358: function(t, e, n) { var i = n(81) , s = n.n(i) , a = n(645) , o = n.n(a)()(s()); o.push([t.id, ".vue-puzzle-vcode {\n position: fixed;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n background-color: rgba(0, 0, 0, 0.3);\n z-index: 999;\n opacity: 0;\n pointer-events: none;\n -webkit-transition: opacity 200ms;\n transition: opacity 200ms;\n}\n.vue-puzzle-vcode.show_ {\n opacity: 1;\n pointer-events: auto;\n}\n.vue-auth-box_ {\n position: absolute;\n top: 40%;\n left: 50%;\n -webkit-transform: translate(-50%, -50%);\n transform: translate(-50%, -50%);\n padding: 20px;\n background: #fff;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n border-radius: 3px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);\n}\n.vue-auth-box_ .auth-body_ {\n position: relative;\n overflow: hidden;\n border-radius: 3px;\n}\n.vue-auth-box_ .auth-body_ .loading-box_ {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n background-color: rgba(0, 0, 0, 0.8);\n z-index: 20;\n opacity: 1;\n -webkit-transition: opacity 200ms;\n transition: opacity 200ms;\n display: -webkit-box;\n display: -webkit-flex;\n display: flex;\n -webkit-box-align: center;\n -webkit-align-items: center;\n align-items: center;\n -webkit-box-pack: center;\n -webkit-justify-content: center;\n justify-content: center;\n}\n.vue-auth-box_ .auth-body_ .loading-box_.hide_ {\n opacity: 0;\n pointer-events: none;\n}\n.vue-auth-box_ .auth-body_ .loading-box_.hide_ .loading-gif_ span {\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.vue-auth-box_ .auth-body_ .loading-box_ .loading-gif_ {\n -webkit-box-flex: 0;\n -webkit-flex: none;\n flex: none;\n height: 5px;\n line-height: 0;\n}\n@-webkit-keyframes load {\n0% {\n opacity: 1;\n -webkit-transform: scale(1.3);\n transform: scale(1.3);\n}\n100% {\n opacity: 0.2;\n -webkit-transform: scale(0.3);\n transform: scale(0.3);\n}\n}\n@keyframes load {\n0% {\n opacity: 1;\n -webkit-transform: scale(1.3);\n transform: scale(1.3);\n}\n100% {\n opacity: 0.2;\n -webkit-transform: scale(0.3);\n transform: scale(0.3);\n}\n}\n.vue-auth-box_ .auth-body_ .loading-box_ .loading-gif_ span {\n display: inline-block;\n width: 5px;\n height: 100%;\n margin-left: 2px;\n border-radius: 50%;\n background-color: #888;\n -webkit-animation: load 1.04s ease infinite;\n animation: load 1.04s ease infinite;\n}\n.vue-auth-box_ .auth-body_ .loading-box_ .loading-gif_ span:nth-child(1) {\n margin-left: 0;\n}\n.vue-auth-box_ .auth-body_ .loading-box_ .loading-gif_ span:nth-child(2) {\n -webkit-animation-delay: 0.13s;\n animation-delay: 0.13s;\n}\n.vue-auth-box_ .auth-body_ .loading-box_ .loading-gif_ span:nth-child(3) {\n -webkit-animation-delay: 0.26s;\n animation-delay: 0.26s;\n}\n.vue-auth-box_ .auth-body_ .loading-box_ .loading-gif_ span:nth-child(4) {\n -webkit-animation-delay: 0.39s;\n animation-delay: 0.39s;\n}\n.vue-auth-box_ .auth-body_ .loading-box_ .loading-gif_ span:nth-child(5) {\n -webkit-animation-delay: 0.52s;\n animation-delay: 0.52s;\n}\n.vue-auth-box_ .auth-body_ .info-box_ {\n position: absolute;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 24px;\n line-height: 24px;\n text-align: center;\n overflow: hidden;\n font-size: 13px;\n background-color: #83ce3f;\n opacity: 0;\n -webkit-transform: translateY(24px);\n transform: translateY(24px);\n -webkit-transition: all 200ms;\n transition: all 200ms;\n color: #fff;\n z-index: 10;\n}\n.vue-auth-box_ .auth-body_ .info-box_.show {\n opacity: 0.95;\n -webkit-transform: translateY(0);\n transform: translateY(0);\n}\n.vue-auth-box_ .auth-body_ .info-box_.fail {\n background-color: #ce594b;\n}\n.vue-auth-box_ .auth-body_ .auth-canvas2_ {\n position: absolute;\n top: 0;\n left: 0;\n width: 60px;\n height: 100%;\n z-index: 2;\n}\n.vue-auth-box_ .auth-body_ .auth-canvas3_ {\n position: absolute;\n top: 0;\n left: 0;\n opacity: 0;\n -webkit-transition: opacity 600ms;\n transition: opacity 600ms;\n z-index: 3;\n}\n.vue-auth-box_ .auth-body_ .auth-canvas3_.show {\n opacity: 1;\n}\n.vue-auth-box_ .auth-body_ .flash_ {\n position: absolute;\n top: 0;\n left: 0;\n width: 30px;\n height: 100%;\n background-color: rgba(255, 255, 255, 0.1);\n z-index: 3;\n}\n.vue-auth-box_ .auth-body_ .flash_.show {\n -webkit-transition: -webkit-transform 600ms;\n transition: -webkit-transform 600ms;\n transition: transform 600ms;\n transition: transform 600ms, -webkit-transform 600ms;\n}\n.vue-auth-box_ .auth-body_ .reset_ {\n position: absolute;\n top: 2px;\n right: 2px;\n width: 35px;\n height: auto;\n z-index: 12;\n cursor: pointer;\n -webkit-transition: -webkit-transform 200ms;\n transition: -webkit-transform 200ms;\n transition: transform 200ms;\n transition: transform 200ms, -webkit-transform 200ms;\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n}\n.vue-auth-box_ .auth-body_ .reset_:hover {\n -webkit-transform: rotate(-90deg);\n transform: rotate(-90deg);\n}\n.vue-auth-box_ .auth-control_ .range-box {\n position: relative;\n width: 100%;\n background-color: #eef1f8;\n margin-top: 20px;\n border-radius: 3px;\n box-shadow: 0 0 8px rgba(240, 240, 240, 0.6) inset;\n}\n.vue-auth-box_ .auth-control_ .range-box .range-text {\n position: absolute;\n top: 50%;\n left: 50%;\n -webkit-transform: translate(-50%, -50%);\n transform: translate(-50%, -50%);\n font-size: 14px;\n color: #b7bcd1;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n text-align: center;\n width: 100%;\n}\n.vue-auth-box_ .auth-control_ .range-box .range-slider {\n position: absolute;\n height: 100%;\n width: 50px;\n background-color: rgba(106, 160, 255, 0.8);\n border-radius: 3px;\n}\n.vue-auth-box_ .auth-control_ .range-box .range-slider .range-btn {\n position: absolute;\n display: -webkit-box;\n display: -webkit-flex;\n display: flex;\n -webkit-box-align: center;\n -webkit-align-items: center;\n align-items: center;\n -webkit-box-pack: center;\n -webkit-justify-content: center;\n justify-content: center;\n right: 0;\n width: 50px;\n height: 100%;\n background-color: #fff;\n border-radius: 3px;\n box-shadow: 0 0 4px #ccc;\n cursor: pointer;\n}\n.vue-auth-box_ .auth-control_ .range-box .range-slider .range-btn > div {\n width: 0;\n height: 40%;\n -webkit-transition: all 200ms;\n transition: all 200ms;\n border: solid 1px #6aa0ff;\n}\n.vue-auth-box_ .auth-control_ .range-box .range-slider .range-btn > div:nth-child(2) {\n margin: 0 4px;\n}\n.vue-auth-box_ .auth-control_ .range-box .range-slider .range-btn:hover > div:first-child,\n.vue-auth-box_ .auth-control_ .range-box .range-slider .range-btn.isDown > div:first-child {\n border: solid 4px transparent;\n height: 0;\n border-right-color: #6aa0ff;\n}\n.vue-auth-box_ .auth-control_ .range-box .range-slider .range-btn:hover > div:nth-child(2),\n.vue-auth-box_ .auth-control_ .range-box .range-slider .range-btn.isDown > div:nth-child(2) {\n border-width: 3px;\n height: 0;\n border-radius: 3px;\n margin: 0 6px;\n border-right-color: #6aa0ff;\n}\n.vue-auth-box_ .auth-control_ .range-box .range-slider .range-btn:hover > div:nth-child(3),\n.vue-auth-box_ .auth-control_ .range-box .range-slider .range-btn.isDown > div:nth-child(3) {\n border: solid 4px transparent;\n height: 0;\n border-left-color: #6aa0ff;\n}\n.vue-puzzle-overflow {\n overflow: hidden !important;\n}\n", ""]), e.Z = o }, 645: function(t) { t.exports = function(t) { var e = []; return e.toString = function() { return this.map((function(e) { var n = "" , i = void 0 !== e[5]; return e[4] && (n += "@supports (".concat(e[4], ") {")), e[2] && (n += "@media ".concat(e[2], " {")), i && (n += "@layer".concat(e[5].length > 0 ? " ".concat(e[5]) : "", " {")), n += t(e), i && (n += "}"), e[2] && (n += "}"), e[4] && (n += "}"), n } )).join("") } , e.i = function(t, n, i, s, a) { "string" == typeof t && (t = [[null, t, void 0]]); var o = {}; if (i) for (var r = 0; r < this.length; r++) { var h = this[r][0]; null != h && (o[h] = !0) } for (var l = 0; l < t.length; l++) { var c = [].concat(t[l]); i && o[c[0]] || (void 0 !== a && (void 0 === c[5] || (c[1] = "@layer".concat(c[5].length > 0 ? " ".concat(c[5]) : "", " {").concat(c[1], "}")), c[5] = a), n && (c[2] ? (c[1] = "@media ".concat(c[2], " {").concat(c[1], "}"), c[2] = n) : c[2] = n), s && (c[4] ? (c[1] = "@supports (".concat(c[4], ") {").concat(c[1], "}"), c[4] = s) : c[4] = "".concat(s)), e.push(c)) } } , e } }, 81: function(t) { t.exports = function(t) { return t[1] } }, 379: function(t) { var e = []; function n(t) { for (var n = -1, i = 0; i < e.length; i++) if (e[i].identifier === t) { n = i; break } return n } function i(t, i) { for (var a = {}, o = [], r = 0; r < t.length; r++) { var h = t[r] , l = i.base ? h[0] + i.base : h[0] , c = a[l] || 0 , d = "".concat(l, " ").concat(c); a[l] = c + 1; var u = n(d) , p = { css: h[1], media: h[2], sourceMap: h[3], supports: h[4], layer: h[5] }; if (-1 !== u) e[u].references++, e[u].updater(p); else { var f = s(p, i); i.byIndex = r, e.splice(r, 0, { identifier: d, updater: f, references: 1 }) } o.push(d) } return o } function s(t, e) { var n = e.domAPI(e); return n.update(t), function(e) { if (e) { if (e.css === t.css && e.media === t.media && e.sourceMap === t.sourceMap && e.supports === t.supports && e.layer === t.layer) return; n.update(t = e) } else n.remove() } } t.exports = function(t, s) { var a = i(t = t || [], s = s || {}); return function(t) { t = t || []; for (var o = 0; o < a.length; o++) { var r = n(a[o]); e[r].references-- } for (var h = i(t, s), l = 0; l < a.length; l++) { var c = n(a[l]); 0 === e[c].references && (e[c].updater(), e.splice(c, 1)) } a = h } } }, 569: function(t) { var e = {}; t.exports = function(t, n) { var i = function(t) { if (void 0 === e[t]) { var n = document.querySelector(t); if (window.HTMLIFrameElement && n instanceof window.HTMLIFrameElement) try { n = n.contentDocument.head } catch (t) { n = null } e[t] = n } return e[t] }(t); if (!i) throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid."); i.appendChild(n) } }, 216: function(t) { t.exports = function(t) { var e = document.createElement("style"); return t.setAttributes(e, t.attributes), t.insert(e, t.options), e } }, 565: function(t, e, n) { t.exports = function(t) { var e = n.nc; e && t.setAttribute("nonce", e) } }, 795: function(t) { t.exports = function(t) { var e = t.insertStyleElement(t); return { update: function(n) { !function(t, e, n) { var i = ""; n.supports && (i += "@supports (".concat(n.supports, ") {")), n.media && (i += "@media ".concat(n.media, " {")); var s = void 0 !== n.layer; s && (i += "@layer".concat(n.layer.length > 0 ? " ".concat(n.layer) : "", " {")), i += n.css, s && (i += "}"), n.media && (i += "}"), n.supports && (i += "}"); var a = n.sourceMap; a && "undefined" != typeof btoa && (i += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(a)))), " */")), e.styleTagTransform(i, t, e.options) }(e, t, n) }, remove: function() { !function(t) { if (null === t.parentNode) return !1; t.parentNode.removeChild(t) }(e) } } } }, 589: function(t) { t.exports = function(t, e) { if (e.styleSheet) e.styleSheet.cssText = t; else { for (; e.firstChild; ) e.removeChild(e.firstChild); e.appendChild(document.createTextNode(t)) } } } } , e = {}; function n(i) { var s = e[i]; if (void 0 !== s) return s.exports; var a = e[i] = { id: i, exports: {} }; return t[i](a, a.exports, n), a.exports } n.n = function(t) { var e = t && t.__esModule ? function() { return t.default } : function() { return t } ; return n.d(e, { a: e }), e } , n.d = function(t, e) { for (var i in e) n.o(e, i) && !n.o(t, i) && Object.defineProperty(t, i, { enumerable: !0, get: e[i] }) } , n.o = function(t, e) { return Object.prototype.hasOwnProperty.call(t, e) } , n.r = function(t) { "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(t, "__esModule", { value: !0 }) } ; var i = {}; return function() { n.r(i), n.d(i, { default: function() { return x } }); var t = function() { var t = this , e = t.$createElement , n = t._self._c || e; return n("div", { class: ["vue-puzzle-vcode", { show_: t.show }], on: { mousedown: t.onCloseMouseDown, mouseup: t.onCloseMouseUp, touchstart: t.onCloseMouseDown, touchend: t.onCloseMouseUp } }, [n("div", { staticClass: "vue-auth-box_", on: { mousedown: function(t) { t.stopPropagation() }, touchstart: function(t) { t.stopPropagation() } } }, [n("div", { staticClass: "auth-body_", style: "height: " + t.canvasHeight + "px" }, [n("canvas", { ref: "canvas1", style: "width:" + t.canvasWidth + "px;height:" + t.canvasHeight + "px", attrs: { width: t.canvasWidth, height: t.canvasHeight } }), t._v(" "), n("canvas", { ref: "canvas3", class: ["auth-canvas3_", { show: t.isSuccess }], style: "width:" + t.canvasWidth + "px;height:" + t.canvasHeight + "px", attrs: { width: t.canvasWidth, height: t.canvasHeight } }), t._v(" "), n("canvas", { ref: "canvas2", staticClass: "auth-canvas2_", style: "width:" + t.puzzleBaseSize + "px;height:" + t.canvasHeight + "px;transform:translateX(" + (t.styleWidth - t.sliderBaseSize - (t.puzzleBaseSize - t.sliderBaseSize) * ((t.styleWidth - t.sliderBaseSize) / (t.canvasWidth - t.sliderBaseSize))) + "px)", attrs: { width: t.puzzleBaseSize, height: t.canvasHeight } }), t._v(" "), n("div", { class: ["loading-box_", { hide_: !t.loading }] }, [t._m(0)]), t._v(" "), n("div", { class: ["info-box_", { show: t.infoBoxShow }, { fail: t.infoBoxFail }] }, [t._v("\n " + t._s(t.infoText) + "\n ")]), t._v(" "), n("div", { class: ["flash_", { show: t.isSuccess }], style: "transform: translateX(" + (t.isSuccess ? t.canvasWidth + .578 * t.canvasHeight + "px" : "-" + .578 * t.canvasHeight + "px") + ") skew(-30deg, 0);" }), t._v(" "), n("img", { staticClass: "reset_", attrs: { src: t.resetSvg }, on: { click: t.reset } })]), t._v(" "), n("div", { staticClass: "auth-control_" }, [n("div", { staticClass: "range-box", style: "height:" + t.sliderBaseSize + "px" }, [n("div", { staticClass: "range-text" }, [t._v(t._s(t.sliderText))]), t._v(" "), n("div", { ref: "range-slider", staticClass: "range-slider", style: "width:" + t.styleWidth + "px" }, [n("div", { class: ["range-btn", { isDown: t.mouseDown }], style: "width:" + t.sliderBaseSize + "px", on: { mousedown: function(e) { return t.onRangeMouseDown(e) }, touchstart: function(e) { return t.onRangeMouseDown(e) } } }, [n("div"), t._v(" "), n("div"), t._v(" "), n("div")])])])])])]) }; t._withStripped = !0; var e = { props: { canvasWidth: { type: Number, default: 310 }, canvasHeight: { type: Number, default: 160 }, show: { type: Boolean, default: !1 }, puzzleScale: { type: Number, default: 1 }, sliderSize: { type: Number, default: 50 }, range: { type: Number, default: 10 }, imgs: { type: Array }, successText: { type: String, default: "验证通过!" }, failText: { type: String, default: "验证失败,请重试" }, sliderText: { type: String, default: "拖动滑块完成拼图" } }, data: ()=>({ mouseDown: !1, startWidth: 50, startX: 0, newX: 0, pinX: 0, pinY: 0, loading: !1, isCanSlide: !1, error: !1, infoBoxShow: !1, infoText: "", infoBoxFail: !1, timer1: null, closeDown: !1, isSuccess: !1, imgIndex: -1, isSubmting: !1, resetSvg: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAELklEQVRYR+2YW2wUZRTH//9vtlCoF9IoIklT3PqgPGi326hoetuaGEhIr9SgCYkkgt2WGOQVCca+GavWdr0GjD4YhG3RB3hply1LQA1tEQIxEXapGI2pEkys9LIzx2ylYWfY6e5sF0oi+7hzzvl+3/9855xvhrjNf7zN+XAHcL4Z+n8o6JWTeYt++W25S596AIZy6TB+n3yo+Nchlk8vmIIVowdXU9c3Q1gDSilBlQwjgBAYFGDvdF58/4milqvZwDpOcXWsb5Uh8hmBqkwXFMhlCN8aX5LXNbRy/T+Z+iXsHAFWRXs3QGQPyLucLDJrK5DgUXdTsxPfjAEro8E3Ce50EtxsKxPTwCPH3U2jTmJkBJgWTnAMxDeGMEoa0xQ+LJQnCD4HYFkCyAC3RdwN3U7gMkpxRTTYrMD91sCJIgCxV5R6O1Jcfy7VwonqLoj9/CqB2kF341qncGkBvRe+ureAWpRgoalCBecMFzcdK24YymZRJz5zprgq1tsJwXYL3CVZGvdGHmwZc7JQtra2gE+f712ep2QUYP714DJhaJrXLqXZQszlZwtYdSHoB9ljVk/ePVrSZFL0ZkAlxzQBVseCT8WhZhRThtFB8plk9Zi/qCi8cv0fNxvKFrDy4oF11NXXIFy2EII4iBcG3Y03VLZT8OqRd5aFPduvOEpxRayvXolxAKB2g6NgEhobBlc1HHYKY7WvHf5wtVAPgegIlbbZ9seUZ7AyFnwewi9pGoUyDmhrB931kfnC1ZwOeKlLP8GZJi6QLSFP2yep4toXSbT3ZQAfX3O6omt8Nhd9r/aHQAUMOQywYBZo5uZD2ThQ2rbPCjlnH6yI9rUryE5DU75ctJaake46Be4DuDjF8dFBNA94/AdtiySVxIlpMlTS8td801o70vMigM9huTda2lhcKHVHPO2HZv/P6LIwX7hk/+qzPSvUJGMkrg8AQYTkroRdXMlE+HH/twsG6BsOdJHYZlaO/lBZ6weOiiSXqs3Gqj0TeAxx+T75DIpgwjC0onD51pQD4JaluPrkR/cpFT9DcoVp84LOgTL/DjtBbglgou+puHwB8lEznPxJw1XSX77VtgizBvQNBw4RMqB7xt4Lc3c8lQKJaQHoO4R8ydz0/7MWoCXk8c85MrMC9J3qaafw/WtQlwXST+F3BnAeYB4obgJ1BJIuG+YtiKAjVOZ/Pd1ZdwzoG+4uBtSPpjaRbhXLcwF3hzytb2TilgVgT5BkYybBrTYC+Rvg5nRpdTRJrIs8+VPXPQXj2i4ItxC4O2NQQUQnN4U9rRcz9nH64p4ceM2lziX5Y4s3KHCdUHwE77ecMkMEp6BwhIa2Z6DslZRvfulgHafYLuCas58WLp2aLCFUga70qxOFU6dPFL2W1feYeaU43Y5z/TxnCuYabMEuC043ckdBp4pZ7f8FE5psOI1g6fwAAAAASUVORK5CYII=" }), mounted() { document.body.appendChild(this.$el), document.addEventListener("mousemove", this.onRangeMouseMove, !1), document.addEventListener("mouseup", this.onRangeMouseUp, !1), document.addEventListener("touchmove", this.onRangeMouseMove, { passive: !1 }), document.addEventListener("touchend", this.onRangeMouseUp, !1), this.show && (document.body.classList.add("vue-puzzle-overflow"), this.reset()) }, beforeDestroy() { clearTimeout(this.timer1), document.body.removeChild(this.$el), document.removeEventListener("mousemove", this.onRangeMouseMove, !1), document.removeEventListener("mouseup", this.onRangeMouseUp, !1), document.removeEventListener("touchmove", this.onRangeMouseMove, { passive: !1 }), document.removeEventListener("touchend", this.onRangeMouseUp, !1) }, watch: { show(t) { t ? (document.body.classList.add("vue-puzzle-overflow"), this.reset()) : (this.isSubmting = !1, this.isSuccess = !1, this.infoBoxShow = !1, document.body.classList.remove("vue-puzzle-overflow")) } }, computed: { styleWidth() { const t = this.startWidth + this.newX - this.startX; return t < this.sliderBaseSize ? this.sliderBaseSize : t > this.canvasWidth ? this.canvasWidth : t }, puzzleBaseSize() { return Math.round(52.5 * Math.max(Math.min(this.puzzleScale, 2), .2) + 6) }, sliderBaseSize() { return Math.max(Math.min(Math.round(this.sliderSize), Math.round(.5 * this.canvasWidth)), 10) } }, methods: { onClose() { this.mouseDown || this.isSubmting || (clearTimeout(this.timer1), this.$emit("close")) }, onCloseMouseDown() { this.closeDown = !0 }, onCloseMouseUp() { this.closeDown && this.onClose(), this.closeDown = !1 }, onRangeMouseDown(t) { this.isCanSlide && (this.mouseDown = !0, this.startWidth = this.$refs["range-slider"].clientWidth, this.newX = t.clientX || t.changedTouches[0].clientX, this.startX = t.clientX || t.changedTouches[0].clientX) }, onRangeMouseMove(t) { this.mouseDown && (t.preventDefault(), this.newX = t.clientX || t.changedTouches[0].clientX) }, onRangeMouseUp() { this.mouseDown && (this.mouseDown = !1, this.submit()) }, init(t) { if (this.loading && !t) return; this.loading = !0, this.isCanSlide = !1; const e = this.$refs.canvas1 , n = this.$refs.canvas2 , i = this.$refs.canvas3 , s = e.getContext("2d") , a = n.getContext("2d") , o = i.getContext("2d") , r = navigator.userAgent.indexOf("Firefox") >= 0 && navigator.userAgent.indexOf("Windows") >= 0 , h = document.createElement("img"); if (s.fillStyle = "rgba(255,255,255,1)", o.fillStyle = "rgba(255,255,255,1)", s.clearRect(0, 0, this.canvasWidth, this.canvasHeight), a.clearRect(0, 0, this.canvasWidth, this.canvasHeight), this.pinX = this.getRandom(this.puzzleBaseSize, this.canvasWidth - this.puzzleBaseSize - 20), this.pinY = this.getRandom(20, this.canvasHeight - this.puzzleBaseSize - 20), h.crossOrigin = "anonymous", h.onload = ()=>{ const [t,e,n,i] = this.makeImgSize(h); s.save(), this.paintBrick(s), s.closePath(), r ? (s.clip(), s.save(), s.shadowOffsetX = 0, s.shadowOffsetY = 0, s.shadowColor = "#000", s.shadowBlur = 3, s.fill(), s.restore()) : (s.shadowOffsetX = 0, s.shadowOffsetY = 0, s.shadowColor = "#000", s.shadowBlur = 3, s.fill(), s.clip()), s.drawImage(h, t, e, n, i), o.fillRect(0, 0, this.canvasWidth, this.canvasHeight), o.drawImage(h, t, e, n, i), s.globalCompositeOperation = "source-atop", this.paintBrick(s), s.arc(this.pinX + Math.ceil(this.puzzleBaseSize / 2), this.pinY + Math.ceil(this.puzzleBaseSize / 2), 1.2 * this.puzzleBaseSize, 0, 2 * Math.PI, !0), s.closePath(), s.shadowColor = "rgba(255, 255, 255, .8)", s.shadowOffsetX = -1, s.shadowOffsetY = -1, s.shadowBlur = Math.min(Math.ceil(8 * this.puzzleScale), 12), s.fillStyle = "#ffffaa", s.fill(); const l = s.getImageData(this.pinX - 3, this.pinY - 20, this.pinX + this.puzzleBaseSize + 5, this.pinY + this.puzzleBaseSize + 5); a.putImageData(l, 0, this.pinY - 20), s.restore(), s.clearRect(0, 0, this.canvasWidth, this.canvasHeight), s.save(), this.paintBrick(s), s.globalAlpha = .8, s.fillStyle = "#ffffff", s.fill(), s.restore(), s.save(), s.globalCompositeOperation = "source-atop", this.paintBrick(s), s.arc(this.pinX + Math.ceil(this.puzzleBaseSize / 2), this.pinY + Math.ceil(this.puzzleBaseSize / 2), 1.2 * this.puzzleBaseSize, 0, 2 * Math.PI, !0), s.shadowColor = "#000", s.shadowOffsetX = 2, s.shadowOffsetY = 2, s.shadowBlur = 16, s.fill(), s.restore(), s.save(), s.globalCompositeOperation = "destination-over", s.drawImage(h, t, e, n, i), s.restore(), this.loading = !1, this.isCanSlide = !0 } , h.onerror = ()=>{ this.init(!0) } , !t && this.imgs && this.imgs.length) { let t = this.getRandom(0, this.imgs.length - 1); t === this.imgIndex && (t === this.imgs.length - 1 ? t = 0 : t++), this.imgIndex = t, h.src = this.imgs[t] } else h.src = this.makeImgWithCanvas() }, getRandom: (t,e)=>Math.ceil(Math.random() * (e - t) + t), makeImgSize(t) { const e = t.width / t.height; let n = 0 , i = 0 , s = 0 , a = 0; return e > this.canvasWidth / this.canvasHeight ? (a = this.canvasHeight, s = e * a, i = 0, n = (this.canvasWidth - s) / 2) : (s = this.canvasWidth, a = s / e, n = 0, i = (this.canvasHeight - a) / 2), [n, i, s, a] }, paintBrick(t) { const e = Math.ceil(15 * this.puzzleScale); t.beginPath(), t.moveTo(this.pinX, this.pinY), t.lineTo(this.pinX + e, this.pinY), t.arcTo(this.pinX + e, this.pinY - e / 2, this.pinX + e + e / 2, this.pinY - e / 2, e / 2), t.arcTo(this.pinX + e + e, this.pinY - e / 2, this.pinX + e + e, this.pinY, e / 2), t.lineTo(this.pinX + e + e + e, this.pinY), t.lineTo(this.pinX + e + e + e, this.pinY + e), t.arcTo(this.pinX + e + e + e + e / 2, this.pinY + e, this.pinX + e + e + e + e / 2, this.pinY + e + e / 2, e / 2), t.arcTo(this.pinX + e + e + e + e / 2, this.pinY + e + e, this.pinX + e + e + e, this.pinY + e + e, e / 2), t.lineTo(this.pinX + e + e + e, this.pinY + e + e + e), t.lineTo(this.pinX, this.pinY + e + e + e), t.lineTo(this.pinX, this.pinY + e + e), t.arcTo(this.pinX + e / 2, this.pinY + e + e, this.pinX + e / 2, this.pinY + e + e / 2, e / 2), t.arcTo(this.pinX + e / 2, this.pinY + e, this.pinX, this.pinY + e, e / 2), t.lineTo(this.pinX, this.pinY) }, makeImgWithCanvas() { const t = document.createElement("canvas") , e = t.getContext("2d"); t.width = this.canvasWidth, t.height = this.canvasHeight, e.fillStyle = `rgb(${this.getRandom(100, 255)},${this.getRandom(100, 255)},${this.getRandom(100, 255)})`, e.fillRect(0, 0, this.canvasWidth, this.canvasHeight); for (let n = 0; n < 12; n++) if (e.fillStyle = `rgb(${this.getRandom(100, 255)},${this.getRandom(100, 255)},${this.getRandom(100, 255)})`, e.strokeStyle = `rgb(${this.getRandom(100, 255)},${this.getRandom(100, 255)},${this.getRandom(100, 255)})`, this.getRandom(0, 2) > 1) e.save(), e.rotate(this.getRandom(-90, 90) * Math.PI / 180), e.fillRect(this.getRandom(-20, t.width - 20), this.getRandom(-20, t.height - 20), this.getRandom(10, t.width / 2 + 10), this.getRandom(10, t.height / 2 + 10)), e.restore(); else { e.beginPath(); const n = this.getRandom(-Math.PI, Math.PI); e.arc(this.getRandom(0, t.width), this.getRandom(0, t.height), this.getRandom(10, t.height / 2 + 10), n, n + 1.5 * Math.PI), e.closePath(), e.fill() } return t.toDataURL("image/png") }, submit() { this.isSubmting = !0; const t = Math.abs(this.pinX - (this.styleWidth - this.sliderBaseSize) + (this.puzzleBaseSize - this.sliderBaseSize) * ((this.styleWidth - this.sliderBaseSize) / (this.canvasWidth - this.sliderBaseSize)) - 3); t < this.range ? (this.infoText = this.successText, this.infoBoxFail = !1, this.infoBoxShow = !0, this.isCanSlide = !1, this.isSuccess = !0, clearTimeout(this.timer1), this.timer1 = setTimeout((()=>{ this.isSubmting = !1, this.$emit("success", t, this.pinX) } ), 800)) : (this.infoText = this.failText, this.infoBoxFail = !0, this.infoBoxShow = !0, this.isCanSlide = !1, this.$emit("fail", t), clearTimeout(this.timer1), this.timer1 = setTimeout((()=>{ this.isSubmting = !1, this.reset() } ), 800)) }, resetState() { this.infoBoxFail = !1, this.infoBoxShow = !1, this.isCanSlide = !1, this.isSuccess = !1, this.startWidth = this.sliderBaseSize, this.startX = 0, this.newX = 0 }, reset() { this.$emit("reset", t), this.isSubmting || (this.resetState(), this.init()) } } } , s = n(379) , a = n.n(s) , o = n(795) , r = n.n(o) , h = n(569) , l = n.n(h) , c = n(565) , d = n.n(c) , u = n(216) , p = n.n(u) , f = n(589) , g = n.n(f) , v = n(358) , b = {}; b.styleTagTransform = g(), b.setAttributes = d(), b.insert = l().bind(null, "head"), b.domAPI = r(), b.insertStyleElement = p(), a()(v.Z, b), v.Z && v.Z.locals && v.Z.locals; var m = function(t, e, n, i, s, a, o, r) { var h, l = "function" == typeof t ? t.options : t; if (e && (l.render = e, l.staticRenderFns = [function() { var t = this , e = t.$createElement , n = t._self._c || e; return n("div", { staticClass: "loading-gif_" }, [n("span"), t._v(" "), n("span"), t._v(" "), n("span"), t._v(" "), n("span"), t._v(" "), n("span")]) } ], l._compiled = !0), h) if (l.functional) { l._injectStyles = h; var c = l.render; l.render = function(t, e) { return h.call(e), c(t, e) } } else { var d = l.beforeCreate; l.beforeCreate = d ? [].concat(d, h) : [h] } return { exports: t, options: l } }(e, t); m.options.__file = "src/app.vue"; var x = m.exports }(), i }() } )); //# sourceURL=[module] //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdnVlLXB1enpsZS12Y29kZS9kaXN0L21haW4uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdnVlLXB1enpsZS12Y29kZS9kaXN0L21haW4uanM/MTA2OSJdLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24odCxlKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXSxlKTpcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cz9leHBvcnRzW1widnVlLXB1enpsZS12Y29kZVwiXT1lKCk6dFtcInZ1ZS1wdXp6bGUtdmNvZGVcIl09ZSgpfSh0aGlzLChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciB0PXszNTg6ZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4oODEpLHM9bi5uKGkpLGE9big2NDUpLG89bi5uKGEpKCkocygpKTtvLnB1c2goW3QuaWQsXCIudnVlLXB1enpsZS12Y29kZSB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMyk7XFxuICB6LWluZGV4OiA5OTk7XFxuICBvcGFjaXR5OiAwO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICAtd2Via2l0LXRyYW5zaXRpb246IG9wYWNpdHkgMjAwbXM7XFxuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDIwMG1zO1xcbn1cXG4udnVlLXB1enpsZS12Y29kZS5zaG93XyB7XFxuICBvcGFjaXR5OiAxO1xcbiAgcG9pbnRlci1ldmVudHM6IGF1dG87XFxufVxcbi52dWUtYXV0aC1ib3hfIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogNDAlO1xcbiAgbGVmdDogNTAlO1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XFxuICBwYWRkaW5nOiAyMHB4O1xcbiAgYmFja2dyb3VuZDogI2ZmZjtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjMpO1xcbn1cXG4udnVlLWF1dGgtYm94XyAuYXV0aC1ib2R5XyB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbn1cXG4udnVlLWF1dGgtYm94XyAuYXV0aC1ib2R5XyAubG9hZGluZy1ib3hfIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICBib3R0b206IDA7XFxuICByaWdodDogMDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44KTtcXG4gIHotaW5kZXg6IDIwO1xcbiAgb3BhY2l0eTogMTtcXG4gIC13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAyMDBtcztcXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMjAwbXM7XFxuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcXG4gIGRpc3BsYXk6IC13ZWJraXQtZmxleDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xcbiAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xcbiAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxufVxcbi52dWUtYXV0aC1ib3hfIC5hdXRoLWJvZHlfIC5sb2FkaW5nLWJveF8uaGlkZV8ge1xcbiAgb3BhY2l0eTogMDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG4udnVlLWF1dGgtYm94XyAuYXV0aC1ib2R5XyAubG9hZGluZy1ib3hfLmhpZGVfIC5sb2FkaW5nLWdpZl8gc3BhbiB7XFxuICAtd2Via2l0LWFuaW1hdGlvbi1wbGF5LXN0YXRlOiBwYXVzZWQ7XFxuICAgICAgICAgIGFuaW1hdGlvbi1wbGF5LXN0YXRlOiBwYXVzZWQ7XFxufVxcbi52dWUtYXV0aC1ib3hfIC5hdXRoLWJvZHlfIC5sb2FkaW5nLWJveF8gLmxvYWRpbmctZ2lmXyB7XFxuICAtd2Via2l0LWJveC1mbGV4OiAwO1xcbiAgLXdlYmtpdC1mbGV4OiBub25lO1xcbiAgICAgICAgICBmbGV4OiBub25lO1xcbiAgaGVpZ2h0OiA1cHg7XFxuICBsaW5lLWhlaWdodDogMDtcXG59XFxuQC13ZWJraXQta2V5ZnJhbWVzIGxvYWQge1xcbjAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEuMyk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjMpO1xcbn1cXG4xMDAlIHtcXG4gICAgb3BhY2l0eTogMC4yO1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMC4zKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMyk7XFxufVxcbn1cXG5Aa2V5ZnJhbWVzIGxvYWQge1xcbjAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEuMyk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjMpO1xcbn1cXG4xMDAlIHtcXG4gICAgb3BhY2l0eTogMC4yO1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMC4zKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMyk7XFxufVxcbn1cXG4udnVlLWF1dGgtYm94XyAuYXV0aC1ib2R5XyAubG9hZGluZy1ib3hfIC5sb2FkaW5nLWdpZl8gc3BhbiB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB3aWR0aDogNXB4O1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgbWFyZ2luLWxlZnQ6IDJweDtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4ODg7XFxuICAtd2Via2l0LWFuaW1hdGlvbjogbG9hZCAxLjA0cyBlYXNlIGluZmluaXRlO1xcbiAgICAgICAgICBhbmltYXRpb246IGxvYWQgMS4wNHMgZWFzZSBpbmZpbml0ZTtcXG59XFxuLnZ1ZS1hdXRoLWJveF8gLmF1dGgtYm9keV8gLmxvYWRpbmctYm94XyAubG9hZGluZy1naWZfIHNwYW46bnRoLWNoaWxkKDEpIHtcXG4gIG1hcmdpbi1sZWZ0OiAwO1xcbn1cXG4udnVlLWF1dGgtYm94XyAuYXV0aC1ib2R5XyAubG9hZGluZy1ib3hfIC5sb2FkaW5nLWdpZl8gc3BhbjpudGgtY2hpbGQoMikge1xcbiAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IDAuMTNzO1xcbiAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IDAuMTNzO1xcbn1cXG4udnVlLWF1dGgtYm94XyAuYXV0aC1ib2R5XyAubG9hZGluZy1ib3hfIC5sb2FkaW5nLWdpZl8gc3BhbjpudGgtY2hpbGQoMykge1xcbiAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IDAuMjZzO1xcbiAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IDAuMjZzO1xcbn1cXG4udnVlLWF1dGgtYm94XyAuYXV0aC1ib2R5XyAubG9hZGluZy1ib3hfIC5sb2FkaW5nLWdpZl8gc3BhbjpudGgtY2hpbGQoNCkge1xcbiAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IDAuMzlzO1xcbiAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IDAuMzlzO1xcbn1cXG4udnVlLWF1dGgtYm94XyAuYXV0aC1ib2R5XyAubG9hZGluZy1ib3hfIC5sb2FkaW5nLWdpZl8gc3BhbjpudGgtY2hpbGQoNSkge1xcbiAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IDAuNTJzO1xcbiAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IDAuNTJzO1xcbn1cXG4udnVlLWF1dGgtYm94XyAuYXV0aC1ib2R5XyAuaW5mby1ib3hfIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMjRweDtcXG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGZvbnQtc2l6ZTogMTNweDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM4M2NlM2Y7XFxuICBvcGFjaXR5OiAwO1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMjRweCk7XFxuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgyNHB4KTtcXG4gIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIDIwMG1zO1xcbiAgdHJhbnNpdGlvbjogYWxsIDIwMG1zO1xcbiAgY29sb3I6ICNmZmY7XFxuICB6LWluZGV4OiAxMDtcXG59XFxuLnZ1ZS1hdXRoLWJveF8gLmF1dGgtYm9keV8gLmluZm8tYm94Xy5zaG93IHtcXG4gIG9wYWNpdHk6IDAuOTU7XFxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xcbn1cXG4udnVlLWF1dGgtYm94XyAuYXV0aC1ib2R5XyAuaW5mby1ib3hfLmZhaWwge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2NlNTk0YjtcXG59XFxuLnZ1ZS1hdXRoLWJveF8gLmF1dGgtYm9keV8gLmF1dGgtY2FudmFzMl8ge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIHdpZHRoOiA2MHB4O1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgei1pbmRleDogMjtcXG59XFxuLnZ1ZS1hdXRoLWJveF8gLmF1dGgtYm9keV8gLmF1dGgtY2FudmFzM18ge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIG9wYWNpdHk6IDA7XFxuICAtd2Via2l0LXRyYW5zaXRpb246IG9wYWNpdHkgNjAwbXM7XFxuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDYwMG1zO1xcbiAgei1pbmRleDogMztcXG59XFxuLnZ1ZS1hdXRoLWJveF8gLmF1dGgtYm9keV8gLmF1dGgtY2FudmFzM18uc2hvdyB7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG4udnVlLWF1dGgtYm94XyAuYXV0aC1ib2R5XyAuZmxhc2hfIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICB3aWR0aDogMzBweDtcXG4gIGhlaWdodDogMTAwJTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTtcXG4gIHotaW5kZXg6IDM7XFxufVxcbi52dWUtYXV0aC1ib3hfIC5hdXRoLWJvZHlfIC5mbGFzaF8uc2hvdyB7XFxuICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDYwMG1zO1xcbiAgdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gNjAwbXM7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gNjAwbXM7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gNjAwbXMsIC13ZWJraXQtdHJhbnNmb3JtIDYwMG1zO1xcbn1cXG4udnVlLWF1dGgtYm94XyAuYXV0aC1ib2R5XyAucmVzZXRfIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMnB4O1xcbiAgcmlnaHQ6IDJweDtcXG4gIHdpZHRoOiAzNXB4O1xcbiAgaGVpZ2h0OiBhdXRvO1xcbiAgei1pbmRleDogMTI7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDIwMG1zO1xcbiAgdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMjAwbXM7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjAwbXM7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjAwbXMsIC13ZWJraXQtdHJhbnNmb3JtIDIwMG1zO1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcXG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XFxufVxcbi52dWUtYXV0aC1ib3hfIC5hdXRoLWJvZHlfIC5yZXNldF86aG92ZXIge1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtOTBkZWcpO1xcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtOTBkZWcpO1xcbn1cXG4udnVlLWF1dGgtYm94XyAuYXV0aC1jb250cm9sXyAucmFuZ2UtYm94IHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZjFmODtcXG4gIG1hcmdpbi10b3A6IDIwcHg7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBib3gtc2hhZG93OiAwIDAgOHB4IHJnYmEoMjQwLCAyNDAsIDI0MCwgMC42KSBpbnNldDtcXG59XFxuLnZ1ZS1hdXRoLWJveF8gLmF1dGgtY29udHJvbF8gLnJhbmdlLWJveCAucmFuZ2UtdGV4dCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDUwJTtcXG4gIGxlZnQ6IDUwJTtcXG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XFxuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgY29sb3I6ICNiN2JjZDE7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcbi52dWUtYXV0aC1ib3hfIC5hdXRoLWNvbnRyb2xfIC5yYW5nZS1ib3ggLnJhbmdlLXNsaWRlciB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICB3aWR0aDogNTBweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMTA2LCAxNjAsIDI1NSwgMC44KTtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG59XFxuLnZ1ZS1hdXRoLWJveF8gLmF1dGgtY29udHJvbF8gLnJhbmdlLWJveCAucmFuZ2Utc2xpZGVyIC5yYW5nZS1idG4ge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XFxuICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcXG4gIC13ZWJraXQtYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcXG4gIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgcmlnaHQ6IDA7XFxuICB3aWR0aDogNTBweDtcXG4gIGhlaWdodDogMTAwJTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBib3gtc2hhZG93OiAwIDAgNHB4ICNjY2M7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi52dWUtYXV0aC1ib3hfIC5hdXRoLWNvbnRyb2xfIC5yYW5nZS1ib3ggLnJhbmdlLXNsaWRlciAucmFuZ2UtYnRuID4gZGl2IHtcXG4gIHdpZHRoOiAwO1xcbiAgaGVpZ2h0OiA0MCU7XFxuICAtd2Via2l0LXRyYW5zaXRpb246IGFsbCAyMDBtcztcXG4gIHRyYW5zaXRpb246IGFsbCAyMDBtcztcXG4gIGJvcmRlcjogc29saWQgMXB4ICM2YWEwZmY7XFxufVxcbi52dWUtYXV0aC1ib3hfIC5hdXRoLWNvbnRyb2xfIC5yYW5nZS1ib3ggLnJhbmdlLXNsaWRlciAucmFuZ2UtYnRuID4gZGl2Om50aC1jaGlsZCgyKSB7XFxuICBtYXJnaW46IDAgNHB4O1xcbn1cXG4udnVlLWF1dGgtYm94XyAuYXV0aC1jb250cm9sXyAucmFuZ2UtYm94IC5yYW5nZS1zbGlkZXIgLnJhbmdlLWJ0bjpob3ZlciA+IGRpdjpmaXJzdC1jaGlsZCxcXG4udnVlLWF1dGgtYm94XyAuYXV0aC1jb250cm9sXyAucmFuZ2UtYm94IC5yYW5nZS1zbGlkZXIgLnJhbmdlLWJ0bi5pc0Rvd24gPiBkaXY6Zmlyc3QtY2hpbGQge1xcbiAgYm9yZGVyOiBzb2xpZCA0cHggdHJhbnNwYXJlbnQ7XFxuICBoZWlnaHQ6IDA7XFxuICBib3JkZXItcmlnaHQtY29sb3I6ICM2YWEwZmY7XFxufVxcbi52dWUtYXV0aC1ib3hfIC5hdXRoLWNvbnRyb2xfIC5yYW5nZS1ib3ggLnJhbmdlLXNsaWRlciAucmFuZ2UtYnRuOmhvdmVyID4gZGl2Om50aC1jaGlsZCgyKSxcXG4udnVlLWF1dGgtYm94XyAuYXV0aC1jb250cm9sXyAucmFuZ2UtYm94IC5yYW5nZS1zbGlkZXIgLnJhbmdlLWJ0bi5pc0Rvd24gPiBkaXY6bnRoLWNoaWxkKDIpIHtcXG4gIGJvcmRlci13aWR0aDogM3B4O1xcbiAgaGVpZ2h0OiAwO1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgbWFyZ2luOiAwIDZweDtcXG4gIGJvcmRlci1yaWdodC1jb2xvcjogIzZhYTBmZjtcXG59XFxuLnZ1ZS1hdXRoLWJveF8gLmF1dGgtY29udHJvbF8gLnJhbmdlLWJveCAucmFuZ2Utc2xpZGVyIC5yYW5nZS1idG46aG92ZXIgPiBkaXY6bnRoLWNoaWxkKDMpLFxcbi52dWUtYXV0aC1ib3hfIC5hdXRoLWNvbnRyb2xfIC5yYW5nZS1ib3ggLnJhbmdlLXNsaWRlciAucmFuZ2UtYnRuLmlzRG93biA+IGRpdjpudGgtY2hpbGQoMykge1xcbiAgYm9yZGVyOiBzb2xpZCA0cHggdHJhbnNwYXJlbnQ7XFxuICBoZWlnaHQ6IDA7XFxuICBib3JkZXItbGVmdC1jb2xvcjogIzZhYTBmZjtcXG59XFxuLnZ1ZS1wdXp6bGUtb3ZlcmZsb3cge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O1xcbn1cXG5cIixcIlwiXSksZS5aPW99LDY0NTpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoKGZ1bmN0aW9uKGUpe3ZhciBuPVwiXCIsaT12b2lkIDAhPT1lWzVdO3JldHVybiBlWzRdJiYobis9XCJAc3VwcG9ydHMgKFwiLmNvbmNhdChlWzRdLFwiKSB7XCIpKSxlWzJdJiYobis9XCJAbWVkaWEgXCIuY29uY2F0KGVbMl0sXCIge1wiKSksaSYmKG4rPVwiQGxheWVyXCIuY29uY2F0KGVbNV0ubGVuZ3RoPjA/XCIgXCIuY29uY2F0KGVbNV0pOlwiXCIsXCIge1wiKSksbis9dChlKSxpJiYobis9XCJ9XCIpLGVbMl0mJihuKz1cIn1cIiksZVs0XSYmKG4rPVwifVwiKSxufSkpLmpvaW4oXCJcIil9LGUuaT1mdW5jdGlvbih0LG4saSxzLGEpe1wic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1bW251bGwsdCx2b2lkIDBdXSk7dmFyIG89e307aWYoaSlmb3IodmFyIHI9MDtyPHRoaXMubGVuZ3RoO3IrKyl7dmFyIGg9dGhpc1tyXVswXTtudWxsIT1oJiYob1toXT0hMCl9Zm9yKHZhciBsPTA7bDx0Lmxlbmd0aDtsKyspe3ZhciBjPVtdLmNvbmNhdCh0W2xdKTtpJiZvW2NbMF1dfHwodm9pZCAwIT09YSYmKHZvaWQgMD09PWNbNV18fChjWzFdPVwiQGxheWVyXCIuY29uY2F0KGNbNV0ubGVuZ3RoPjA/XCIgXCIuY29uY2F0KGNbNV0pOlwiXCIsXCIge1wiKS5jb25jYXQoY1sxXSxcIn1cIikpLGNbNV09YSksbiYmKGNbMl0/KGNbMV09XCJAbWVkaWEgXCIuY29uY2F0KGNbMl0sXCIge1wiKS5jb25jYXQoY1sxXSxcIn1cIiksY1syXT1uKTpjWzJdPW4pLHMmJihjWzRdPyhjWzFdPVwiQHN1cHBvcnRzIChcIi5jb25jYXQoY1s0XSxcIikge1wiKS5jb25jYXQoY1sxXSxcIn1cIiksY1s0XT1zKTpjWzRdPVwiXCIuY29uY2F0KHMpKSxlLnB1c2goYykpfX0sZX19LDgxOmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdFsxXX19LDM3OTpmdW5jdGlvbih0KXt2YXIgZT1bXTtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgbj0tMSxpPTA7aTxlLmxlbmd0aDtpKyspaWYoZVtpXS5pZGVudGlmaWVyPT09dCl7bj1pO2JyZWFrfXJldHVybiBufWZ1bmN0aW9uIGkodCxpKXtmb3IodmFyIGE9e30sbz1bXSxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBoPXRbcl0sbD1pLmJhc2U/aFswXStpLmJhc2U6aFswXSxjPWFbbF18fDAsZD1cIlwiLmNvbmNhdChsLFwiIFwiKS5jb25jYXQoYyk7YVtsXT1jKzE7dmFyIHU9bihkKSxwPXtjc3M6aFsxXSxtZWRpYTpoWzJdLHNvdXJjZU1hcDpoWzNdLHN1cHBvcnRzOmhbNF0sbGF5ZXI6aFs1XX07aWYoLTEhPT11KWVbdV0ucmVmZXJlbmNlcysrLGVbdV0udXBkYXRlcihwKTtlbHNle3ZhciBmPXMocCxpKTtpLmJ5SW5kZXg9cixlLnNwbGljZShyLDAse2lkZW50aWZpZXI6ZCx1cGRhdGVyOmYscmVmZXJlbmNlczoxfSl9by5wdXNoKGQpfXJldHVybiBvfWZ1bmN0aW9uIHModCxlKXt2YXIgbj1lLmRvbUFQSShlKTtyZXR1cm4gbi51cGRhdGUodCksZnVuY3Rpb24oZSl7aWYoZSl7aWYoZS5jc3M9PT10LmNzcyYmZS5tZWRpYT09PXQubWVkaWEmJmUuc291cmNlTWFwPT09dC5zb3VyY2VNYXAmJmUuc3VwcG9ydHM9PT10LnN1cHBvcnRzJiZlLmxheWVyPT09dC5sYXllcilyZXR1cm47bi51cGRhdGUodD1lKX1lbHNlIG4ucmVtb3ZlKCl9fXQuZXhwb3J0cz1mdW5jdGlvbih0LHMpe3ZhciBhPWkodD10fHxbXSxzPXN8fHt9KTtyZXR1cm4gZnVuY3Rpb24odCl7dD10fHxbXTtmb3IodmFyIG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHI9bihhW29dKTtlW3JdLnJlZmVyZW5jZXMtLX1mb3IodmFyIGg9aSh0LHMpLGw9MDtsPGEubGVuZ3RoO2wrKyl7dmFyIGM9bihhW2xdKTswPT09ZVtjXS5yZWZlcmVuY2VzJiYoZVtjXS51cGRhdGVyKCksZS5zcGxpY2UoYywxKSl9YT1ofX19LDU2OTpmdW5jdGlvbih0KXt2YXIgZT17fTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXt2YXIgaT1mdW5jdGlvbih0KXtpZih2b2lkIDA9PT1lW3RdKXt2YXIgbj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpO2lmKHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCYmbiBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCl0cnl7bj1uLmNvbnRlbnREb2N1bWVudC5oZWFkfWNhdGNoKHQpe249bnVsbH1lW3RdPW59cmV0dXJuIGVbdF19KHQpO2lmKCFpKXRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0JyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7aS5hcHBlbmRDaGlsZChuKX19LDIxNjpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO3JldHVybiB0LnNldEF0dHJpYnV0ZXMoZSx0LmF0dHJpYnV0ZXMpLHQuaW5zZXJ0KGUsdC5vcHRpb25zKSxlfX0sNTY1OmZ1bmN0aW9uKHQsZSxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bi5uYztlJiZ0LnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsZSl9fSw3OTU6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5zZXJ0U3R5bGVFbGVtZW50KHQpO3JldHVybnt1cGRhdGU6ZnVuY3Rpb24obil7IWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1cIlwiO24uc3VwcG9ydHMmJihpKz1cIkBzdXBwb3J0cyAoXCIuY29uY2F0KG4uc3VwcG9ydHMsXCIpIHtcIikpLG4ubWVkaWEmJihpKz1cIkBtZWRpYSBcIi5jb25jYXQobi5tZWRpYSxcIiB7XCIpKTt2YXIgcz12b2lkIDAhPT1uLmxheWVyO3MmJihpKz1cIkBsYXllclwiLmNvbmNhdChuLmxheWVyLmxlbmd0aD4wP1wiIFwiLmNvbmNhdChuLmxheWVyKTpcIlwiLFwiIHtcIikpLGkrPW4uY3NzLHMmJihpKz1cIn1cIiksbi5tZWRpYSYmKGkrPVwifVwiKSxuLnN1cHBvcnRzJiYoaSs9XCJ9XCIpO3ZhciBhPW4uc291cmNlTWFwO2EmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBidG9hJiYoaSs9XCJcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LFwiLmNvbmNhdChidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShhKSkpKSxcIiAqL1wiKSksZS5zdHlsZVRhZ1RyYW5zZm9ybShpLHQsZS5vcHRpb25zKX0oZSx0LG4pfSxyZW1vdmU6ZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7aWYobnVsbD09PXQucGFyZW50Tm9kZSlyZXR1cm4hMTt0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9KGUpfX19fSw1ODk6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoZS5zdHlsZVNoZWV0KWUuc3R5bGVTaGVldC5jc3NUZXh0PXQ7ZWxzZXtmb3IoO2UuZmlyc3RDaGlsZDspZS5yZW1vdmVDaGlsZChlLmZpcnN0Q2hpbGQpO2UuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodCkpfX19fSxlPXt9O2Z1bmN0aW9uIG4oaSl7dmFyIHM9ZVtpXTtpZih2b2lkIDAhPT1zKXJldHVybiBzLmV4cG9ydHM7dmFyIGE9ZVtpXT17aWQ6aSxleHBvcnRzOnt9fTtyZXR1cm4gdFtpXShhLGEuZXhwb3J0cyxuKSxhLmV4cG9ydHN9bi5uPWZ1bmN0aW9uKHQpe3ZhciBlPXQmJnQuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiB0LmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIHR9O3JldHVybiBuLmQoZSx7YTplfSksZX0sbi5kPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBpIGluIGUpbi5vKGUsaSkmJiFuLm8odCxpKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsaSx7ZW51bWVyYWJsZTohMCxnZXQ6ZVtpXX0pfSxuLm89ZnVuY3Rpb24odCxlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSl9LG4ucj1mdW5jdGlvbih0KXtcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfTt2YXIgaT17fTtyZXR1cm4gZnVuY3Rpb24oKXtuLnIoaSksbi5kKGkse2RlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm4geH19KTt2YXIgdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10LiRjcmVhdGVFbGVtZW50LG49dC5fc2VsZi5fY3x8ZTtyZXR1cm4gbihcImRpdlwiLHtjbGFzczpbXCJ2dWUtcHV6emxlLXZjb2RlXCIse3Nob3dfOnQuc2hvd31dLG9uOnttb3VzZWRvd246dC5vbkNsb3NlTW91c2VEb3duLG1vdXNldXA6dC5vbkNsb3NlTW91c2VVcCx0b3VjaHN0YXJ0OnQub25DbG9zZU1vdXNlRG93bix0b3VjaGVuZDp0Lm9uQ2xvc2VNb3VzZVVwfX0sW24oXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJ2dWUtYXV0aC1ib3hfXCIsb246e21vdXNlZG93bjpmdW5jdGlvbih0KXt0LnN0b3BQcm9wYWdhdGlvbigpfSx0b3VjaHN0YXJ0OmZ1bmN0aW9uKHQpe3Quc3RvcFByb3BhZ2F0aW9uKCl9fX0sW24oXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJhdXRoLWJvZHlfXCIsc3R5bGU6XCJoZWlnaHQ6IFwiK3QuY2FudmFzSGVpZ2h0K1wicHhcIn0sW24oXCJjYW52YXNcIix7cmVmOlwiY2FudmFzMVwiLHN0eWxlOlwid2lkdGg6XCIrdC5jYW52YXNXaWR0aCtcInB4O2hlaWdodDpcIit0LmNhbnZhc0hlaWdodCtcInB4XCIsYXR0cnM6e3dpZHRoOnQuY2FudmFzV2lkdGgsaGVpZ2h0OnQuY2FudmFzSGVpZ2h0fX0pLHQuX3YoXCIgXCIpLG4oXCJjYW52YXNcIix7cmVmOlwiY2FudmFzM1wiLGNsYXNzOltcImF1dGgtY2FudmFzM19cIix7c2hvdzp0LmlzU3VjY2Vzc31dLHN0eWxlOlwid2lkdGg6XCIrdC5jYW52YXNXaWR0aCtcInB4O2hlaWdodDpcIit0LmNhbnZhc0hlaWdodCtcInB4XCIsYXR0cnM6e3dpZHRoOnQuY2FudmFzV2lkdGgsaGVpZ2h0OnQuY2FudmFzSGVpZ2h0fX0pLHQuX3YoXCIgXCIpLG4oXCJjYW52YXNcIix7cmVmOlwiY2FudmFzMlwiLHN0YXRpY0NsYXNzOlwiYXV0aC1jYW52YXMyX1wiLHN0eWxlOlwid2lkdGg6XCIrdC5wdXp6bGVCYXNlU2l6ZStcInB4O2hlaWdodDpcIit0LmNhbnZhc0hlaWdodCtcInB4O3RyYW5zZm9ybTp0cmFuc2xhdGVYKFwiKyh0LnN0eWxlV2lkdGgtdC5zbGlkZXJCYXNlU2l6ZS0odC5wdXp6bGVCYXNlU2l6ZS10LnNsaWRlckJhc2VTaXplKSooKHQuc3R5bGVXaWR0aC10LnNsaWRlckJhc2VTaXplKS8odC5jYW52YXNXaWR0aC10LnNsaWRlckJhc2VTaXplKSkpK1wicHgpXCIsYXR0cnM6e3dpZHRoOnQucHV6emxlQmFzZVNpemUsaGVpZ2h0OnQuY2FudmFzSGVpZ2h0fX0pLHQuX3YoXCIgXCIpLG4oXCJkaXZcIix7Y2xhc3M6W1wibG9hZGluZy1ib3hfXCIse2hpZGVfOiF0LmxvYWRpbmd9XX0sW3QuX20oMCldKSx0Ll92KFwiIFwiKSxuKFwiZGl2XCIse2NsYXNzOltcImluZm8tYm94X1wiLHtzaG93OnQuaW5mb0JveFNob3d9LHtmYWlsOnQuaW5mb0JveEZhaWx9XX0sW3QuX3YoXCJcXG4gICAgICAgIFwiK3QuX3ModC5pbmZvVGV4dCkrXCJcXG4gICAgICBcIildKSx0Ll92KFwiIFwiKSxuKFwiZGl2XCIse2NsYXNzOltcImZsYXNoX1wiLHtzaG93OnQuaXNTdWNjZXNzfV0sc3R5bGU6XCJ0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoXCIrKHQuaXNTdWNjZXNzP3QuY2FudmFzV2lkdGgrLjU3OCp0LmNhbnZhc0hlaWdodCtcInB4XCI6XCItXCIrLjU3OCp0LmNhbnZhc0hlaWdodCtcInB4XCIpK1wiKSBza2V3KC0zMGRlZywgMCk7XCJ9KSx0Ll92KFwiIFwiKSxuKFwiaW1nXCIse3N0YXRpY0NsYXNzOlwicmVzZXRfXCIsYXR0cnM6e3NyYzp0LnJlc2V0U3ZnfSxvbjp7Y2xpY2s6dC5yZXNldH19KV0pLHQuX3YoXCIgXCIpLG4oXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJhdXRoLWNvbnRyb2xfXCJ9LFtuKFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicmFuZ2UtYm94XCIsc3R5bGU6XCJoZWlnaHQ6XCIrdC5zbGlkZXJCYXNlU2l6ZStcInB4XCJ9LFtuKFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicmFuZ2UtdGV4dFwifSxbdC5fdih0Ll9zKHQuc2xpZGVyVGV4dCkpXSksdC5fdihcIiBcIiksbihcImRpdlwiLHtyZWY6XCJyYW5nZS1zbGlkZXJcIixzdGF0aWNDbGFzczpcInJhbmdlLXNsaWRlclwiLHN0eWxlOlwid2lkdGg6XCIrdC5zdHlsZVdpZHRoK1wicHhcIn0sW24oXCJkaXZcIix7Y2xhc3M6W1wicmFuZ2UtYnRuXCIse2lzRG93bjp0Lm1vdXNlRG93bn1dLHN0eWxlOlwid2lkdGg6XCIrdC5zbGlkZXJCYXNlU2l6ZStcInB4XCIsb246e21vdXNlZG93bjpmdW5jdGlvbihlKXtyZXR1cm4gdC5vblJhbmdlTW91c2VEb3duKGUpfSx0b3VjaHN0YXJ0OmZ1bmN0aW9uKGUpe3JldHVybiB0Lm9uUmFuZ2VNb3VzZURvd24oZSl9fX0sW24oXCJkaXZcIiksdC5fdihcIiBcIiksbihcImRpdlwiKSx0Ll92KFwiIFwiKSxuKFwiZGl2XCIpXSldKV0pXSldKV0pfTt0Ll93aXRoU3RyaXBwZWQ9ITA7dmFyIGU9e3Byb3BzOntjYW52YXNXaWR0aDp7dHlwZTpOdW1iZXIsZGVmYXVsdDozMTB9LGNhbnZhc0hlaWdodDp7dHlwZTpOdW1iZXIsZGVmYXVsdDoxNjB9LHNob3c6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxwdXp6bGVTY2FsZTp7dHlwZTpOdW1iZXIsZGVmYXVsdDoxfSxzbGlkZXJTaXplOnt0eXBlOk51bWJlcixkZWZhdWx0OjUwfSxyYW5nZTp7dHlwZTpOdW1iZXIsZGVmYXVsdDoxMH0saW1nczp7dHlwZTpBcnJheX0sc3VjY2Vzc1RleHQ6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCLpqozor4HpgJrov4fvvIFcIn0sZmFpbFRleHQ6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCLpqozor4HlpLHotKXvvIzor7fph43or5VcIn0sc2xpZGVyVGV4dDp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcIuaLluWKqOa7keWdl+WujOaIkOaLvOWbvlwifX0sZGF0YTooKT0+KHttb3VzZURvd246ITEsc3RhcnRXaWR0aDo1MCxzdGFydFg6MCxuZXdYOjAscGluWDowLHBpblk6MCxsb2FkaW5nOiExLGlzQ2FuU2xpZGU6ITEsZXJyb3I6ITEsaW5mb0JveFNob3c6ITEsaW5mb1RleHQ6XCJcIixpbmZvQm94RmFpbDohMSx0aW1lcjE6bnVsbCxjbG9zZURvd246ITEsaXNTdWNjZXNzOiExLGltZ0luZGV4Oi0xLGlzU3VibXRpbmc6ITEscmVzZXRTdmc6XCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUNnQUFBQW9DQVlBQUFDTS9yaHRBQUFFTGtsRVFWUllSKzJZVzJ3VVpSVEgvLzl2dGxDb0Y5SW9Ja2xUM1BxZ1BHaTMyNmhvZXR1YUdFaElyOVNnQ1lra2d0MldHT1FWQ2NhK0dhdldkcjBHakQ0WWhHM1JCM2hwbHkxTFFBMXRFUUl4RVhhcEdJMnBFa3lzOUxJengyeWxZV2ZZNmU1c0Ywb2krN2h6enZsKzMvOTg1NXh2aHJqTmY3ek4rWEFIY0w0WituOG82SldUZVl0KytXMjVTNTk2QUlaeTZUQituM3lvK05jaGxrOHZtSUlWb3dkWFU5YzNRMWdEU2lsQmxRd2pnQkFZRkdEdmRGNTgvNG1pbHF2WndEcE9jWFdzYjVVaDhobUJxa3dYRk1obENOOGFYNUxYTmJSeS9UK1oraVhzSEFGV1JYczNRR1FQeUx1Y0xESnJLNURnVVhkVHN4UGZqQUVybzhFM0NlNTBFdHhzS3hQVHdDUEgzVTJqVG1Ka0JKZ1dUbkFNeERlR01Fb2EweFErTEpRbkNENEhZRmtDeUFDM1Jkd04zVTdnTWtweFJUVFlyTUQ5MXNDSklnQ3hWNVI2TzFKY2Z5N1Z3b25xTG9qOS9DcUIya0YzNDFxbmNHa0J2UmUrdXJlQVdwUmdvYWxDQmVjTUZ6Y2RLMjRZeW1aUkp6NXpwcmdxMXRzSndYWUwzQ1ZaR3ZkR0htd1pjN0pRdHJhMmdFK2Y3MTJlcDJRVVlQNzE0REpoYUpyWExxWFpRc3psWnd0WWRTSG9COWxqVmsvZVBWclNaRkwwWmtBbHh6UUJWc2VDVDhXaFpoUlRodEZCOHBsazlaaS9xQ2k4Y3YwZk54dktGckR5NG9GMTFOWFhJRnkyRUlJNGlCY0czWTAzVkxaVDhPcVJkNWFGUGR1dk9FcHhSYXl2WG9seEFLQjJnNk5nRWhvYkJsYzFISFlLWTdXdkhmNXd0VkFQZ2VnSWxiYlo5c2VVWjdBeUZud2V3aTlwR29VeURtaHJCOTMxa2ZuQzFad09lS2xMUDhHWkppNlFMU0ZQMnllcDR0b1hTYlQzWlFBZlgzTzZvbXQ4TmhkOXIvYUhRQVVNT1F5d1lCWm81dVpEMlRoUTJyYlBDamxuSDZ5STlyVXJ5RTVEVTc1Y3RKYWFrZTQ2QmU0RHVEakY4ZEZCTkE5NC9BZHRpeVNWeElscE1sVFM4dGQ4MDFvNzB2TWlnTTlodVRkYTJsaGNLSFZIUE8ySFp2L1A2TEl3WDdoay8rcXpQU3ZVSkdNa3JnOEFRWVRrcm9SZFhNbEUrSEgvdHdzRzZCc09kSkhZWmxhTy9sQlo2d2VPaWlTWHFzM0dxajBUZUF4eCtUNzVESXBnd2pDMG9uRDUxcFFENEphbHVQcmtSL2NwRlQ5RGNvVnA4NExPZ1RML0RqdEJiZ2xnb3UrcHVId0I4bEV6blB4SncxWFNYNzdWdGdpekJ2UU5CdzRSTXFCN3h0NExjM2M4bFFLSmFRSG9PNFI4eWR6MC83TVdvQ1hrOGM4NU1yTUM5SjNxYWFmdy9XdFFsd1hTVCtGM0JuQWVZQjRvYmdKMUJKSXVHK1l0aUtBalZPWi9QZDFaZHd6b0crNHVCdFNQcGphUmJoWExjd0YzaHp5dGIyVGlsZ1ZnVDVCa1l5YkJyVFlDK1J2ZzVuUnBkVFJKcklzOCtWUFhQUVhqMmk0SXR4QzRPMk5RUVVRbk40VTlyUmN6OW5INjRwNGNlTTJsemlYNVk0czNLSENkVUh3RTc3ZWNNa01FcDZCd2hJYTJaNkRzbFpSdmZ1bGdIYWZZTHVDYXM1OFdMcDJhTENGVWdhNzBxeE9GVTZkUEZMMlcxZmVZZWFVNDNZNXovVHhuQ3VZYWJNRXVDMDQzY2tkQnA0cFo3ZjhGRTVwc09JMWc2ZndBQUFBQVNVVk9SSzVDWUlJPVwifSksbW91bnRlZCgpe2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy4kZWwpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIix0aGlzLm9uUmFuZ2VNb3VzZU1vdmUsITEpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsdGhpcy5vblJhbmdlTW91c2VVcCwhMSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLHRoaXMub25SYW5nZU1vdXNlTW92ZSx7cGFzc2l2ZTohMX0pLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLHRoaXMub25SYW5nZU1vdXNlVXAsITEpLHRoaXMuc2hvdyYmKGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChcInZ1ZS1wdXp6bGUtb3ZlcmZsb3dcIiksdGhpcy5yZXNldCgpKX0sYmVmb3JlRGVzdHJveSgpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyMSksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0aGlzLiRlbCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHRoaXMub25SYW5nZU1vdXNlTW92ZSwhMSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIix0aGlzLm9uUmFuZ2VNb3VzZVVwLCExKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsdGhpcy5vblJhbmdlTW91c2VNb3ZlLHtwYXNzaXZlOiExfSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsdGhpcy5vblJhbmdlTW91c2VVcCwhMSl9LHdhdGNoOntzaG93KHQpe3Q/KGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChcInZ1ZS1wdXp6bGUtb3ZlcmZsb3dcIiksdGhpcy5yZXNldCgpKToodGhpcy5pc1N1Ym10aW5nPSExLHRoaXMuaXNTdWNjZXNzPSExLHRoaXMuaW5mb0JveFNob3c9ITEsZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKFwidnVlLXB1enpsZS1vdmVyZmxvd1wiKSl9fSxjb21wdXRlZDp7c3R5bGVXaWR0aCgpe2NvbnN0IHQ9dGhpcy5zdGFydFdpZHRoK3RoaXMubmV3WC10aGlzLnN0YXJ0WDtyZXR1cm4gdDx0aGlzLnNsaWRlckJhc2VTaXplP3RoaXMuc2xpZGVyQmFzZVNpemU6dD50aGlzLmNhbnZhc1dpZHRoP3RoaXMuY2FudmFzV2lkdGg6dH0scHV6emxlQmFzZVNpemUoKXtyZXR1cm4gTWF0aC5yb3VuZCg1Mi41Kk1hdGgubWF4KE1hdGgubWluKHRoaXMucHV6emxlU2NhbGUsMiksLjIpKzYpfSxzbGlkZXJCYXNlU2l6ZSgpe3JldHVybiBNYXRoLm1heChNYXRoLm1pbihNYXRoLnJvdW5kKHRoaXMuc2xpZGVyU2l6ZSksTWF0aC5yb3VuZCguNSp0aGlzLmNhbnZhc1dpZHRoKSksMTApfX0sbWV0aG9kczp7b25DbG9zZSgpe3RoaXMubW91c2VEb3dufHx0aGlzLmlzU3VibXRpbmd8fChjbGVhclRpbWVvdXQodGhpcy50aW1lcjEpLHRoaXMuJGVtaXQoXCJjbG9zZVwiKSl9LG9uQ2xvc2VNb3VzZURvd24oKXt0aGlzLmNsb3NlRG93bj0hMH0sb25DbG9zZU1vdXNlVXAoKXt0aGlzLmNsb3NlRG93biYmdGhpcy5vbkNsb3NlKCksdGhpcy5jbG9zZURvd249ITF9LG9uUmFuZ2VNb3VzZURvd24odCl7dGhpcy5pc0NhblNsaWRlJiYodGhpcy5tb3VzZURvd249ITAsdGhpcy5zdGFydFdpZHRoPXRoaXMuJHJlZnNbXCJyYW5nZS1zbGlkZXJcIl0uY2xpZW50V2lkdGgsdGhpcy5uZXdYPXQuY2xpZW50WHx8dC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYLHRoaXMuc3RhcnRYPXQuY2xpZW50WHx8dC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYKX0sb25SYW5nZU1vdXNlTW92ZSh0KXt0aGlzLm1vdXNlRG93biYmKHQucHJldmVudERlZmF1bHQoKSx0aGlzLm5ld1g9dC5jbGllbnRYfHx0LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFgpfSxvblJhbmdlTW91c2VVcCgpe3RoaXMubW91c2VEb3duJiYodGhpcy5tb3VzZURvd249ITEsdGhpcy5zdWJtaXQoKSl9LGluaXQodCl7aWYodGhpcy5sb2FkaW5nJiYhdClyZXR1cm47dGhpcy5sb2FkaW5nPSEwLHRoaXMuaXNDYW5TbGlkZT0hMTtjb25zdCBlPXRoaXMuJHJlZnMuY2FudmFzMSxuPXRoaXMuJHJlZnMuY2FudmFzMixpPXRoaXMuJHJlZnMuY2FudmFzMyxzPWUuZ2V0Q29udGV4dChcIjJkXCIpLGE9bi5nZXRDb250ZXh0KFwiMmRcIiksbz1pLmdldENvbnRleHQoXCIyZFwiKSxyPW5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZihcIkZpcmVmb3hcIik+PTAmJm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZihcIldpbmRvd3NcIik+PTAsaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO2lmKHMuZmlsbFN0eWxlPVwicmdiYSgyNTUsMjU1LDI1NSwxKVwiLG8uZmlsbFN0eWxlPVwicmdiYSgyNTUsMjU1LDI1NSwxKVwiLHMuY2xlYXJSZWN0KDAsMCx0aGlzLmNhbnZhc1dpZHRoLHRoaXMuY2FudmFzSGVpZ2h0KSxhLmNsZWFyUmVjdCgwLDAsdGhpcy5jYW52YXNXaWR0aCx0aGlzLmNhbnZhc0hlaWdodCksdGhpcy5waW5YPXRoaXMuZ2V0UmFuZG9tKHRoaXMucHV6emxlQmFzZVNpemUsdGhpcy5jYW52YXNXaWR0aC10aGlzLnB1enpsZUJhc2VTaXplLTIwKSx0aGlzLnBpblk9dGhpcy5nZXRSYW5kb20oMjAsdGhpcy5jYW52YXNIZWlnaHQtdGhpcy5wdXp6bGVCYXNlU2l6ZS0yMCksaC5jcm9zc09yaWdpbj1cImFub255bW91c1wiLGgub25sb2FkPSgpPT57Y29uc3RbdCxlLG4saV09dGhpcy5tYWtlSW1nU2l6ZShoKTtzLnNhdmUoKSx0aGlzLnBhaW50QnJpY2socykscy5jbG9zZVBhdGgoKSxyPyhzLmNsaXAoKSxzLnNhdmUoKSxzLnNoYWRvd09mZnNldFg9MCxzLnNoYWRvd09mZnNldFk9MCxzLnNoYWRvd0NvbG9yPVwiIzAwMFwiLHMuc2hhZG93Qmx1cj0zLHMuZmlsbCgpLHMucmVzdG9yZSgpKToocy5zaGFkb3dPZmZzZXRYPTAscy5zaGFkb3dPZmZzZXRZPTAscy5zaGFkb3dDb2xvcj1cIiMwMDBcIixzLnNoYWRvd0JsdXI9MyxzLmZpbGwoKSxzLmNsaXAoKSkscy5kcmF3SW1hZ2UoaCx0LGUsbixpKSxvLmZpbGxSZWN0KDAsMCx0aGlzLmNhbnZhc1dpZHRoLHRoaXMuY2FudmFzSGVpZ2h0KSxvLmRyYXdJbWFnZShoLHQsZSxuLGkpLHMuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPVwic291cmNlLWF0b3BcIix0aGlzLnBhaW50QnJpY2socykscy5hcmModGhpcy5waW5YK01hdGguY2VpbCh0aGlzLnB1enpsZUJhc2VTaXplLzIpLHRoaXMucGluWStNYXRoLmNlaWwodGhpcy5wdXp6bGVCYXNlU2l6ZS8yKSwxLjIqdGhpcy5wdXp6bGVCYXNlU2l6ZSwwLDIqTWF0aC5QSSwhMCkscy5jbG9zZVBhdGgoKSxzLnNoYWRvd0NvbG9yPVwicmdiYSgyNTUsIDI1NSwgMjU1LCAuOClcIixzLnNoYWRvd09mZnNldFg9LTEscy5zaGFkb3dPZmZzZXRZPS0xLHMuc2hhZG93Qmx1cj1NYXRoLm1pbihNYXRoLmNlaWwoOCp0aGlzLnB1enpsZVNjYWxlKSwxMikscy5maWxsU3R5bGU9XCIjZmZmZmFhXCIscy5maWxsKCk7Y29uc3QgbD1zLmdldEltYWdlRGF0YSh0aGlzLnBpblgtMyx0aGlzLnBpblktMjAsdGhpcy5waW5YK3RoaXMucHV6emxlQmFzZVNpemUrNSx0aGlzLnBpblkrdGhpcy5wdXp6bGVCYXNlU2l6ZSs1KTthLnB1dEltYWdlRGF0YShsLDAsdGhpcy5waW5ZLTIwKSxzLnJlc3RvcmUoKSxzLmNsZWFyUmVjdCgwLDAsdGhpcy5jYW52YXNXaWR0aCx0aGlzLmNhbnZhc0hlaWdodCkscy5zYXZlKCksdGhpcy5wYWludEJyaWNrKHMpLHMuZ2xvYmFsQWxwaGE9Ljgscy5maWxsU3R5bGU9XCIjZmZmZmZmXCIscy5maWxsKCkscy5yZXN0b3JlKCkscy5zYXZlKCkscy5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249XCJzb3VyY2UtYXRvcFwiLHRoaXMucGFpbnRCcmljayhzKSxzLmFyYyh0aGlzLnBpblgrTWF0aC5jZWlsKHRoaXMucHV6emxlQmFzZVNpemUvMiksdGhpcy5waW5ZK01hdGguY2VpbCh0aGlzLnB1enpsZUJhc2VTaXplLzIpLDEuMip0aGlzLnB1enpsZUJhc2VTaXplLDAsMipNYXRoLlBJLCEwKSxzLnNoYWRvd0NvbG9yPVwiIzAwMFwiLHMuc2hhZG93T2Zmc2V0WD0yLHMuc2hhZG93T2Zmc2V0WT0yLHMuc2hhZG93Qmx1cj0xNixzLmZpbGwoKSxzLnJlc3RvcmUoKSxzLnNhdmUoKSxzLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1cImRlc3RpbmF0aW9uLW92ZXJcIixzLmRyYXdJbWFnZShoLHQsZSxuLGkpLHMucmVzdG9yZSgpLHRoaXMubG9hZGluZz0hMSx0aGlzLmlzQ2FuU2xpZGU9ITB9LGgub25lcnJvcj0oKT0+e3RoaXMuaW5pdCghMCl9LCF0JiZ0aGlzLmltZ3MmJnRoaXMuaW1ncy5sZW5ndGgpe2xldCB0PXRoaXMuZ2V0UmFuZG9tKDAsdGhpcy5pbWdzLmxlbmd0aC0xKTt0PT09dGhpcy5pbWdJbmRleCYmKHQ9PT10aGlzLmltZ3MubGVuZ3RoLTE/dD0wOnQrKyksdGhpcy5pbWdJbmRleD10LGguc3JjPXRoaXMuaW1nc1t0XX1lbHNlIGguc3JjPXRoaXMubWFrZUltZ1dpdGhDYW52YXMoKX0sZ2V0UmFuZG9tOih0LGUpPT5NYXRoLmNlaWwoTWF0aC5yYW5kb20oKSooZS10KSt0KSxtYWtlSW1nU2l6ZSh0KXtjb25zdCBlPXQud2lkdGgvdC5oZWlnaHQ7bGV0IG49MCxpPTAscz0wLGE9MDtyZXR1cm4gZT50aGlzLmNhbnZhc1dpZHRoL3RoaXMuY2FudmFzSGVpZ2h0PyhhPXRoaXMuY2FudmFzSGVpZ2h0LHM9ZSphLGk9MCxuPSh0aGlzLmNhbnZhc1dpZHRoLXMpLzIpOihzPXRoaXMuY2FudmFzV2lkdGgsYT1zL2Usbj0wLGk9KHRoaXMuY2FudmFzSGVpZ2h0LWEpLzIpLFtuLGkscyxhXX0scGFpbnRCcmljayh0KXtjb25zdCBlPU1hdGguY2VpbCgxNSp0aGlzLnB1enpsZVNjYWxlKTt0LmJlZ2luUGF0aCgpLHQubW92ZVRvKHRoaXMucGluWCx0aGlzLnBpblkpLHQubGluZVRvKHRoaXMucGluWCtlLHRoaXMucGluWSksdC5hcmNUbyh0aGlzLnBpblgrZSx0aGlzLnBpblktZS8yLHRoaXMucGluWCtlK2UvMix0aGlzLnBpblktZS8yLGUvMiksdC5hcmNUbyh0aGlzLnBpblgrZStlLHRoaXMucGluWS1lLzIsdGhpcy5waW5YK2UrZSx0aGlzLnBpblksZS8yKSx0LmxpbmVUbyh0aGlzLnBpblgrZStlK2UsdGhpcy5waW5ZKSx0LmxpbmVUbyh0aGlzLnBpblgrZStlK2UsdGhpcy5waW5ZK2UpLHQuYXJjVG8odGhpcy5waW5YK2UrZStlK2UvMix0aGlzLnBpblkrZSx0aGlzLnBpblgrZStlK2UrZS8yLHRoaXMucGluWStlK2UvMixlLzIpLHQuYXJjVG8odGhpcy5waW5YK2UrZStlK2UvMix0aGlzLnBpblkrZStlLHRoaXMucGluWCtlK2UrZSx0aGlzLnBpblkrZStlLGUvMiksdC5saW5lVG8odGhpcy5waW5YK2UrZStlLHRoaXMucGluWStlK2UrZSksdC5saW5lVG8odGhpcy5waW5YLHRoaXMucGluWStlK2UrZSksdC5saW5lVG8odGhpcy5waW5YLHRoaXMucGluWStlK2UpLHQuYXJjVG8odGhpcy5waW5YK2UvMix0aGlzLnBpblkrZStlLHRoaXMucGluWCtlLzIsdGhpcy5waW5ZK2UrZS8yLGUvMiksdC5hcmNUbyh0aGlzLnBpblgrZS8yLHRoaXMucGluWStlLHRoaXMucGluWCx0aGlzLnBpblkrZSxlLzIpLHQubGluZVRvKHRoaXMucGluWCx0aGlzLnBpblkpfSxtYWtlSW1nV2l0aENhbnZhcygpe2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSxlPXQuZ2V0Q29udGV4dChcIjJkXCIpO3Qud2lkdGg9dGhpcy5jYW52YXNXaWR0aCx0LmhlaWdodD10aGlzLmNhbnZhc0hlaWdodCxlLmZpbGxTdHlsZT1gcmdiKCR7dGhpcy5nZXRSYW5kb20oMTAwLDI1NSl9LCR7dGhpcy5nZXRSYW5kb20oMTAwLDI1NSl9LCR7dGhpcy5nZXRSYW5kb20oMTAwLDI1NSl9KWAsZS5maWxsUmVjdCgwLDAsdGhpcy5jYW52YXNXaWR0aCx0aGlzLmNhbnZhc0hlaWdodCk7Zm9yKGxldCBuPTA7bjwxMjtuKyspaWYoZS5maWxsU3R5bGU9YHJnYigke3RoaXMuZ2V0UmFuZG9tKDEwMCwyNTUpfSwke3RoaXMuZ2V0UmFuZG9tKDEwMCwyNTUpfSwke3RoaXMuZ2V0UmFuZG9tKDEwMCwyNTUpfSlgLGUuc3Ryb2tlU3R5bGU9YHJnYigke3RoaXMuZ2V0UmFuZG9tKDEwMCwyNTUpfSwke3RoaXMuZ2V0UmFuZG9tKDEwMCwyNTUpfSwke3RoaXMuZ2V0UmFuZG9tKDEwMCwyNTUpfSlgLHRoaXMuZ2V0UmFuZG9tKDAsMik+MSllLnNhdmUoKSxlLnJvdGF0ZSh0aGlzLmdldFJhbmRvbSgtOTAsOTApKk1hdGguUEkvMTgwKSxlLmZpbGxSZWN0KHRoaXMuZ2V0UmFuZG9tKC0yMCx0LndpZHRoLTIwKSx0aGlzLmdldFJhbmRvbSgtMjAsdC5oZWlnaHQtMjApLHRoaXMuZ2V0UmFuZG9tKDEwLHQud2lkdGgvMisxMCksdGhpcy5nZXRSYW5kb20oMTAsdC5oZWlnaHQvMisxMCkpLGUucmVzdG9yZSgpO2Vsc2V7ZS5iZWdpblBhdGgoKTtjb25zdCBuPXRoaXMuZ2V0UmFuZG9tKC1NYXRoLlBJLE1hdGguUEkpO2UuYXJjKHRoaXMuZ2V0UmFuZG9tKDAsdC53aWR0aCksdGhpcy5nZXRSYW5kb20oMCx0LmhlaWdodCksdGhpcy5nZXRSYW5kb20oMTAsdC5oZWlnaHQvMisxMCksbixuKzEuNSpNYXRoLlBJKSxlLmNsb3NlUGF0aCgpLGUuZmlsbCgpfXJldHVybiB0LnRvRGF0YVVSTChcImltYWdlL3BuZ1wiKX0sc3VibWl0KCl7dGhpcy5pc1N1Ym10aW5nPSEwO2NvbnN0IHQ9TWF0aC5hYnModGhpcy5waW5YLSh0aGlzLnN0eWxlV2lkdGgtdGhpcy5zbGlkZXJCYXNlU2l6ZSkrKHRoaXMucHV6emxlQmFzZVNpemUtdGhpcy5zbGlkZXJCYXNlU2l6ZSkqKCh0aGlzLnN0eWxlV2lkdGgtdGhpcy5zbGlkZXJCYXNlU2l6ZSkvKHRoaXMuY2FudmFzV2lkdGgtdGhpcy5zbGlkZXJCYXNlU2l6ZSkpLTMpO3Q8dGhpcy5yYW5nZT8odGhpcy5pbmZvVGV4dD10aGlzLnN1Y2Nlc3NUZXh0LHRoaXMuaW5mb0JveEZhaWw9ITEsdGhpcy5pbmZvQm94U2hvdz0hMCx0aGlzLmlzQ2FuU2xpZGU9ITEsdGhpcy5pc1N1Y2Nlc3M9ITAsY2xlYXJUaW1lb3V0KHRoaXMudGltZXIxKSx0aGlzLnRpbWVyMT1zZXRUaW1lb3V0KCgoKT0+e3RoaXMuaXNTdWJtdGluZz0hMSx0aGlzLiRlbWl0KFwic3VjY2Vzc1wiLHQpfSksODAwKSk6KHRoaXMuaW5mb1RleHQ9dGhpcy5mYWlsVGV4dCx0aGlzLmluZm9Cb3hGYWlsPSEwLHRoaXMuaW5mb0JveFNob3c9ITAsdGhpcy5pc0NhblNsaWRlPSExLHRoaXMuJGVtaXQoXCJmYWlsXCIsdCksY2xlYXJUaW1lb3V0KHRoaXMudGltZXIxKSx0aGlzLnRpbWVyMT1zZXRUaW1lb3V0KCgoKT0+e3RoaXMuaXNTdWJtdGluZz0hMSx0aGlzLnJlc2V0KCl9KSw4MDApKX0scmVzZXRTdGF0ZSgpe3RoaXMuaW5mb0JveEZhaWw9ITEsdGhpcy5pbmZvQm94U2hvdz0hMSx0aGlzLmlzQ2FuU2xpZGU9ITEsdGhpcy5pc1N1Y2Nlc3M9ITEsdGhpcy5zdGFydFdpZHRoPXRoaXMuc2xpZGVyQmFzZVNpemUsdGhpcy5zdGFydFg9MCx0aGlzLm5ld1g9MH0scmVzZXQoKXt0aGlzLmlzU3VibXRpbmd8fCh0aGlzLnJlc2V0U3RhdGUoKSx0aGlzLmluaXQoKSl9fX0scz1uKDM3OSksYT1uLm4ocyksbz1uKDc5NSkscj1uLm4obyksaD1uKDU2OSksbD1uLm4oaCksYz1uKDU2NSksZD1uLm4oYyksdT1uKDIxNikscD1uLm4odSksZj1uKDU4OSksZz1uLm4oZiksdj1uKDM1OCksYj17fTtiLnN0eWxlVGFnVHJhbnNmb3JtPWcoKSxiLnNldEF0dHJpYnV0ZXM9ZCgpLGIuaW5zZXJ0PWwoKS5iaW5kKG51bGwsXCJoZWFkXCIpLGIuZG9tQVBJPXIoKSxiLmluc2VydFN0eWxlRWxlbWVudD1wKCksYSgpKHYuWixiKSx2LlomJnYuWi5sb2NhbHMmJnYuWi5sb2NhbHM7dmFyIG09ZnVuY3Rpb24odCxlLG4saSxzLGEsbyxyKXt2YXIgaCxsPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dC5vcHRpb25zOnQ7aWYoZSYmKGwucmVuZGVyPWUsbC5zdGF0aWNSZW5kZXJGbnM9W2Z1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQuJGNyZWF0ZUVsZW1lbnQsbj10Ll9zZWxmLl9jfHxlO3JldHVybiBuKFwiZGl2XCIse3N0YXRpY0NsYXNzOlwibG9hZGluZy1naWZfXCJ9LFtuKFwic3BhblwiKSx0Ll92KFwiIFwiKSxuKFwic3BhblwiKSx0Ll92KFwiIFwiKSxuKFwic3BhblwiKSx0Ll92KFwiIFwiKSxuKFwic3BhblwiKSx0Ll92KFwiIFwiKSxuKFwic3BhblwiKV0pfV0sbC5fY29tcGlsZWQ9ITApLGgpaWYobC5mdW5jdGlvbmFsKXtsLl9pbmplY3RTdHlsZXM9aDt2YXIgYz1sLnJlbmRlcjtsLnJlbmRlcj1mdW5jdGlvbih0LGUpe3JldHVybiBoLmNhbGwoZSksYyh0LGUpfX1lbHNle3ZhciBkPWwuYmVmb3JlQ3JlYXRlO2wuYmVmb3JlQ3JlYXRlPWQ/W10uY29uY2F0KGQsaCk6W2hdfXJldHVybntleHBvcnRzOnQsb3B0aW9uczpsfX0oZSx0KTttLm9wdGlvbnMuX19maWxlPVwic3JjL2FwcC52dWVcIjt2YXIgeD1tLmV4cG9ydHN9KCksaX0oKX0pKTsiXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9 //# sourceURL=webpack-internal:///./node_modules/vue-puzzle-vcode/dist/main.js
还没有评论,来说两句吧...