unpackage/dist/dev/app-plus/app-service.js
@@ -2391,7 +2391,7 @@
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 1);\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ 57));\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ 59));\nvar _cmdProgress = _interopRequireDefault(__webpack_require__(/*! @/components/cmd-progress/cmd-progress.vue */ 47));\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n// import {\n// \tmapState,\n// \tmapMutations,\n// \tmapActions ,\n// } from 'vuex'\nvar _default = {\n  components: {\n    cmdProgress: _cmdProgress.default\n  },\n  data: function data() {\n    //获取全局参数:url-服务器地址\n    var server = uni.getStorageSync('server');\n    var account = uni.getStorageSync('account');\n    var password = uni.getStorageSync('password');\n    var url = this.$store.state.url;\n    var username = this.$store.state.username;\n    var userpwd = this.$store.state.userpwd;\n    var ischecked = false;\n    if (!server) server = url;\n    if (!account) account = username;\n    if (account && password) ischecked = true;\n    // console.log(url);\n    return {\n      login: \"开始登录\",\n      userServer: server,\n      userName: account,\n      userPwd: password,\n      ischecked: ischecked,\n      version: \"1.0.0\",\n      downloadUrl: \"\",\n      //安卓app下载链接\n      percentage: 0,\n      //下载进度\n      showBtns: true\n    };\n  },\n  onShow: function onShow() {\n    this.query(); //版本升级\n  },\n\n  watch: {\n    //监听进度条\n    percentage: function percentage(e) {\n      // console.log(e);\n      if (e >= 100) {\n        this.$refs.promotion.close();\n      }\n    }\n  },\n  // computed: mapState({\n  // \t// 从state中拿到数据 箭头函数可使代码更简练\n  // \thasLogin: state => state.hasLogin,\n  // \tloginprovider: state => state.loginProvider,\n  // \tappinfo:state=>state.appInfo\n  // }),\n  methods: {\n    //查询当前版本号\n    query: function query() {\n      var _this2 = this;\n      plus.runtime.getProperty(plus.runtime.appid, function (wgtinfo) {\n        __f__(\"log\", wgtinfo, \" at pages/login/index.vue:268\");\n        var version = wgtinfo.version; //客户端版本号\n        // var versionCode = parseInt(wgtinfo.versionCode); //客户端版本号编码\n        _this2.check(version); //检测是否需要更新\n      });\n    },\n    //检测是否需要更新\n    check: function check(version) {\n      var _this3 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {\n        var ser, $this, url, dataInfo;\n        return _regenerator.default.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                if (_this3.userServer) {\n                  _context.next = 3;\n                  break;\n                }\n                uni.showModal({\n                  title: \"提示\",\n                  content: \"未输入网站地址,请重新配置输入!\",\n                  showCancel: false,\n                  confirmText: \"取消\"\n                });\n                return _context.abrupt(\"return\");\n              case 3:\n                ser = _this3.userServer.split('/');\n                $this = _this3;\n                if (ser[1] == 'mobox3') {\n                  //判断当前网址是否是mobox3\n                  url = 'http://' + _this3.userServer + '/Program/version.txt'; // console.log(url);\n                  uni.request({\n                    url: url,\n                    // 指定JS文件的完整路径\n                    method: 'GET',\n                    success: function success(res) {\n                      __f__(\"log\", res, \" at pages/login/index.vue:295\");\n                      if (res && res.statusCode === 200) {\n                        //获取当前版本号\n                        var VersionName = res.data; //更新包名称\n                        var versionInfo = res.data.split('_');\n                        var versionNum = versionInfo[2].replace(\".apk\", \"\"); //版本编码\n                        var VersionCode = versionInfo[2].replace(\".apk\", \"\").replace(\".\", \"\").replace(\".\", \"\"); //服务端版本号\n                        // this.downloadUrl = resp.PdaUrl+\"/\"+VersionName; //app下载链接\n                        $this.downloadUrl = \"http://\" + $this.userServer + \"/Program/\" + VersionName; //app下载链接this.\n                        var isver = $this.compare(versionNum, version);\n                        if (isver) {\n                          $this.$refs.promotion.open();\n                        } else {\n                          __f__(\"log\", '当前已是最新版本', \" at pages/login/index.vue:308\");\n                        }\n                      } else {\n                        // if(res.statusCode === 404){\n                        // \tuni.showModal({\n                        // \t\ttitle: \"提示\",\n                        // \t\tcontent: '请求失败,找不到更新包版本文档:'+url,\n                        // \t\tshowCancel: false,\n                        // \t\tconfirmText: \"取消\"\n                        // \t});\n                        // }\n                      }\n                    },\n                    fail: function fail(err) {\n                      // 错误处理逻辑\n                      uni.showModal({\n                        title: \"错误\",\n                        content: '获取' + url + '文件失败:' + err,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                    }\n                  });\n                } else {\n                  dataInfo = {\n                    server: _this3.userServer\n                  };\n                  _this3.$store.dispatch('GetApkVersionInfo', dataInfo).then(function (success) {\n                    __f__(\"log\", success, \" at pages/login/index.vue:336\");\n                    if (success.code == '00000') {\n                      var resp = success.data;\n                      if (resp) {\n                        // const obj = resp.data.filter(item => {\n                        // \treturn item.groupName == 'version'\n                        // })\n                        //获取当前版本号\n                        var VersionName = resp.VersionName; //更新包名称\n                        var VersionCode = resp.VersionCode; //版本编码\n                        var versionNum = resp.Version; //服务端版本号\n                        // this.downloadUrl = resp.PdaUrl+\"/\"+VersionName; //app下载链接\n                        $this.downloadUrl = \"http://\" + $this.userServer + \"/Program/\" + VersionName; //app下载链接this.\n                        var isver = $this.compare(versionNum, version);\n                        if (isver) {\n                          $this.$refs.promotion.open();\n                        } else {\n                          __f__(\"log\", '当前已是最新版本', \" at pages/login/index.vue:353\");\n                        }\n                      }\n                    } else {\n                      uni.showModal({\n                        title: \"错误\",\n                        content: success.msg,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                    }\n                  }).catch(function (ex) {\n                    __f__(\"log\", ex, \" at pages/login/index.vue:365\");\n                    uni.showModal({\n                      title: \"错误\",\n                      content: ex.errMsg ? ex.errMsg : ex.message,\n                      showCancel: false,\n                      confirmText: \"取消\"\n                    });\n                  });\n                }\n              case 6:\n              case \"end\":\n                return _context.stop();\n            }\n          }\n        }, _callee);\n      }))();\n    },\n    compare: function compare(curV, reqV) {\n      var arr1 = curV.toString().split('.');\n      var arr2 = reqV.toString().split('.');\n      //将两个版本号拆成数字\n      var minL = Math.min(arr1.length, arr2.length);\n      var pos = 0; //当前比较位\n      var diff = 0; //当前为位比较是否相等\n      var flag = false;\n      //逐个比较如果当前位相等则继续比较下一位\n      while (pos < minL) {\n        diff = parseInt(arr1[pos]) - parseInt(arr2[pos]);\n        if (diff == 0) {\n          pos++;\n          continue;\n        } else if (diff > 0) {\n          flag = true;\n          break;\n        } else {\n          flag = false;\n          break;\n        }\n      }\n      return flag;\n    },\n    //确认更新\n    sure: function sure() {\n      //关闭按钮\n      this.showBtns = false;\n      var sys = uni.getSystemInfoSync().platform; //检查系统\n      if (sys == \"ios\") {\n        // this.getIosInfo()\n      } else if (sys == \"android\") {\n        this.updateAPP(); // 调用下载方法app内下载\n      }\n    },\n    //取消更新\n    cancel: function cancel() {\n      this.$refs.promotion.close();\n    },\n    //链接苹果商店下载\n    // getIosInfo() {\n    // \tlet appleId = \"你的appid\"\n    // \tplus.runtime.launchApplication({\n    // \t\taction: \"itms-apps://itunes.apple.com/cn/app/id\" + appleId + \"?mt=8\"\n    // \t}, function(e) {\n    // \t\tconsole.log('Open system default browser failed: ' + e.message);\n    // \t});\n    // },\n    //安卓更新\n    updateAPP: function updateAPP() {\n      var _this = this;\n      var url = this.downloadUrl;\n      // 官方API\n      var dtask = plus.downloader.createDownload(url, {}, function (d, status) {\n        //d为下载的文件对象\n        if (status == 200) {\n          //下载成功,d.filename是文件在保存在本地的相对路径,使用下面的API可转为平台绝对路径\n          var fileSaveUrl = plus.io.convertLocalFileSystemURL(d.filename);\n          plus.runtime.openFile(d.filename); //选择软件打开文件\n          uni.showToast({\n            icon: 'none',\n            title: '更新成功'\n          });\n          _this.$refs.promotion.close();\n        } else {\n          //下载失败\n          plus.downloader.clear(); //清除下载任务\n          uni.showToast({\n            icon: 'none',\n            title: '更新失败'\n          });\n          _this.showBtns = false;\n        }\n      });\n      //开始下载\n      dtask.start();\n      //监听下载进度\n      dtask.addEventListener('statechanged', function (task) {\n        _this.percentage = parseInt(parseFloat(task.downloadedSize) / parseFloat(task.totalSize) * 100);\n        if (_this.percentage == 100) {\n          _this.$refs.promotion.close();\n        }\n        __f__(\"log\", '下载进度:' + _this.percentage, \" at pages/login/index.vue:458\");\n      });\n    },\n    // ...mapMutations({\n    // \tmutatLogin:'login'\n    // }),\n    // ...mapActions({\n    // \tactionLogin:'login'\n    // }),\n    inputDialogToggle: function inputDialogToggle() {\n      this.$refs.inputDialog.open();\n    },\n    dialogInputConfirm: function dialogInputConfirm(val) {\n      // console.log(val);\n      // uni.showLoading({\n      // \ttitle: '3秒后会关闭'\n      // })\n      // setTimeout(() => {\n      // uni.hideLoading();\n      this.userServer = val;\n      uni.setStorageSync('server', val);\n      // this.value = val\n      // 关闭窗口后,恢复默认内容\n      this.$refs.inputDialog.close();\n      this.query(); //版本升级\n      // }, 3000)\n      // }, 3000)\n    },\n    rememberPwd: function rememberPwd(e) {\n      //记住密码\n      __f__(\"log\", e.target, \" at pages/login/index.vue:488\");\n      uni.setStorageSync('account', '');\n      uni.setStorageSync('password', '');\n      if (e.target.value[0] == '1') {\n        uni.setStorageSync('account', this.userName);\n        uni.setStorageSync('password', this.userPwd);\n      }\n    },\n    // getCookie(key){\n    // \tif(document.cookie.length>0){\n    // \t\tvar start = document.cookie.indexOf(key +'=');\n    // \t\tif(start !== -1){\n    // \t\t\tstart = start+key.length+1;\n    // \t\t\tvar end = document.cookie.indexOf(';',start);\n    // \t\t\tif(end === -1) end=document.cookie.length;\n    // \t\t\treturn document.cookie.substring(start,end);\n    // \t\t}\n    // \t}\n    // \treturn '';\n    // },\n    // setCookie(cName,value,expiredays){\n    // \tvar exdate = new Date();\n    // \texdate.setDate(exdate.getDate(),expiredays)\n    // \tdocument.cookie = cName+'='+ documentURLComponent(value)+\n    // \t((expiredays==null)?'':';expires='+exdate.toGMTString());\n    // },\n    logind: function logind() {\n      var _this4 = this;\n      if (!this.userServer) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未输入网站地址,请重新配置输入!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      if (!this.userName) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未输入用户名,请重新输入!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      if (!this.userPwd) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未输入密码,请重新输入!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      //检查 \"登录状态/锁屏状态\" 结束\n      var loginInfo = {\n        server: this.userServer,\n        uname: this.userName,\n        pwd: this.userPwd,\n        cname: plus.device.model,\n        type: \"0\"\n      };\n      __f__(\"log\", loginInfo, \" at pages/login/index.vue:551\");\n      this.$data.login = \"loading......\";\n      //登录\n      this.$store.dispatch('login', loginInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/login/index.vue:556\");\n        if (success.code == '00000' || success.err_code == 0) {\n          //登录成功后清空缓存数据\n          _this4.$store.commit(\"areaFunc\", null);\n          _this4.$store.commit(\"classAttrList\", null);\n          _this4.$store.commit(\"classGridStyleInfo\", null);\n          _this4.$store.commit(\"dicValueInfo\", null);\n          _this4.$store.commit(\"subClassAttrList\", null);\n          _this4.$store.commit(\"subClassGridStyleInfo\", null);\n          //设置全局参数:user-用户信息\n          uni.setStorageSync('server', loginInfo.server);\n          uni.setStorageSync('account', loginInfo.uname);\n          uni.setStorageSync('password', loginInfo.pwd);\n          // this.mutatLogin({loginid:success});\n          _this4.$store.commit('login', {\n            loginid: success\n          });\n          uni.navigateTo({\n            url: '../index/index?args=9999999999'\n          });\n          // uni.redirectTo({\n          // \turl:'../index/index?args=9999999999'\n          // });\n          _this4.login = \"开始登录\";\n        } else {\n          uni.showModal({\n            title: \"错误\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n          _this4.login = \"开始登录\";\n        }\n      }).catch(function (ex) {\n        __f__(\"log\", ex, \" at pages/login/index.vue:591\");\n        uni.showModal({\n          title: \"错误\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        _this4.login = \"开始登录\";\n      });\n    }\n  },\n  onLoad: function onLoad() {\n    var _this5 = this;\n    plus.runtime.getProperty(plus.runtime.appid, function (info) {\n      // console.log(info);\n      _this5.$data.version = info.version;\n    });\n  }\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 18)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbG9naW4vaW5kZXgudnVlIl0sIm5hbWVzIjpbImNvbXBvbmVudHMiLCJjbWRQcm9ncmVzcyIsImRhdGEiLCJzZXJ2ZXIiLCJhY2NvdW50IiwiaXNjaGVja2VkIiwibG9naW4iLCJ1c2VyU2VydmVyIiwidXNlck5hbWUiLCJ1c2VyUHdkIiwidmVyc2lvbiIsImRvd25sb2FkVXJsIiwicGVyY2VudGFnZSIsInNob3dCdG5zIiwib25TaG93Iiwid2F0Y2giLCJtZXRob2RzIiwicXVlcnkiLCJwbHVzIiwiY2hlY2siLCJ1bmkiLCJ0aXRsZSIsImNvbnRlbnQiLCJzaG93Q2FuY2VsIiwiY29uZmlybVRleHQiLCJzZXIiLCIkdGhpcyIsInVybCIsIm1ldGhvZCIsInN1Y2Nlc3MiLCJmYWlsIiwiZGF0YUluZm8iLCJjb21wYXJlIiwiZGlmZiIsInBvcyIsImZsYWciLCJzdXJlIiwiY2FuY2VsIiwidXBkYXRlQVBQIiwiaWNvbiIsIl90aGlzIiwiZHRhc2siLCJwYXJzZUZsb2F0IiwiaW5wdXREaWFsb2dUb2dnbGUiLCJkaWFsb2dJbnB1dENvbmZpcm0iLCJyZW1lbWJlclB3ZCIsImxvZ2luZCIsInVuYW1lIiwicHdkIiwiY25hbWUiLCJ0eXBlIiwibG9naW5pZCIsIm9uTG9hZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBOE1BOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQSxlQUNBO0VBQ0FBO0lBQ0FDO0VBQ0E7RUFDQUM7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJ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O1VBQ0FDO1VBQ0FDO1VBQ0FDO1FBQ0E7UUFDQTtNQUNBO01BQ0E7UUFDQUo7VUFDQUM7VUFDQUM7VUFDQUM7VUFDQUM7UUFDQTtRQUNBO01BQ0E7TUFDQTtRQUNBSjtVQUNBQztVQUNBQztVQUNBQztVQUNBQztRQUNBO1FBQ0E7TUFDQTtNQUNBO01BQ0E7UUFDQXJCO1FBQ0E0QztRQUNBQztRQUNBQztRQUNBQztNQUNBO01BQ0E7TUFFQTtNQUNBO01BQ0E7UUFDQTtRQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBOUI7VUFDQUE7VUFDQUE7VUFDQTtVQUNBO1lBQ0ErQjtVQUNBO1VBQ0EvQjtZQUNBTztVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7UUFFQTtVQUNBUDtZQUNBQztZQUNBQztZQUNBQztZQUNBQztVQUNBO1VBQ0E7UUFDQTtNQUNBO1FBQ0E7UUFDQUo7VUFDQUM7VUFDQUM7VUFDQUM7VUFDQUM7UUFDQTtRQUNBO01BQ0E7SUFDQTtFQUNBO0VBQ0E0QjtJQUFBO0lBQ0FsQztNQUNBO01BQ0E7SUFDQTtFQUNBO0FBQ0E7QUFBQSwyQiIsImZpbGUiOiI1Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIjxzdHlsZT5cclxuXHRpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XHJcblx0XHRmb250LXNpemU6IDEycnB4O1xyXG5cdH1cclxuXHJcblx0I2hlYWRyIHtcclxuXHRcdGJhY2tncm91bmQ6ICM0MzQzNDM7XHJcblx0XHQvKiB3aWR0aDogMzc1cHg7ICovXHJcblx0XHRoZWlnaHQ6IDI1MHJweDtcclxuXHRcdHRleHQtYWxpZ246IGNlbnRlcjtcclxuXHRcdGJhY2tncm91bmQtY29sb3I6ICM0MzhFQjk7XHJcblx0XHQvKiBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vLi4vaW1hZ2VzL2xvZ2luL3Jvb3QucG5nKSAhaW1wb3J0YW50O1xyXG5cdFx0YmFja2dyb3VuZC1zaXplOiBjb3ZlciAhaW1wb3J0YW50OyBcclxuXHRcdGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQgIWltcG9ydGFudDsgKi9cclxuXHR9XHJcblxyXG5cdC5TZXRTZXJ2ZXIge1xyXG5cdFx0ZmxvYXQ6IGxlZnQ7XHJcblx0XHRtYXJnaW4tbGVmdDogMjBycHg7XHJcblx0fVxyXG5cclxuXHQuY2hlY2tfcmVtZW1iZXJQd2Qge1xyXG5cdFx0bWFyZ2luLXRvcDogMjBycHg7XHJcblx0XHRtYXJnaW4tbGVmdDogMjBycHg7XHJcblx0fVxyXG5cclxuXHQubG9nbyB7XHJcblx0XHRoZWlnaHQ6IDE4MHJweDtcclxuXHRcdHdpZHRoOiAxODBycHg7XHJcblx0XHRtYXJnaW4tdG9wOiAxNzBycHg7XHJcblx0fVxyXG5cclxuXHQubG9nb19pbnB1dCB7XHJcblx0XHRoZWlnaHQ6IDQwcnB4O1xyXG5cdFx0d2lkdGg6IDQwcnB4O1xyXG5cdFx0bWFyZ2luLWxlZnQ6IDQwcnB4O1xyXG5cdH1cclxuXHJcblx0LmxvZ29faWNvbiB7XHJcblx0XHRoZWlnaHQ6IDUwcnB4O1xyXG5cdFx0d2lkdGg6IDUwcnB4O1xyXG5cdFx0bWFyZ2luLWxlZnQ6IDE1cnB4O1xyXG5cdFx0bWFyZ2luLXRvcDogMjBycHg7XHJcblx0fVxyXG5cclxuXHQubXVpLWNvbnRlbnQge1xyXG5cdFx0aGVpZ2h0OiAxMDAlO1xyXG5cdFx0cGFkZGluZy10b3A6IDE0MHJweDtcclxuXHRcdGJhY2tncm91bmQ6ICNGRkZGRkY7XHJcblx0XHR6LWluZGV4OiAxO1xyXG5cdH1cclxuXHJcblx0Lm11aS1pbnB1dC1ncm91cCAubGFfaWNvbiB7XHJcblx0XHR3aWR0aDogMTAwcnB4O1xyXG5cdFx0dGV4dC1hbGlnbjogY2VudGVyO1xyXG5cdFx0Zm9udC1mYW1pbHk6ICdIZWx2ZXRpY2EgTmV1ZScsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcclxuXHRcdGxpbmUtaGVpZ2h0OiAxLjU7XHJcblx0XHRmbG9hdDogbGVmdDtcclxuXHRcdHBhZGRpbmc6IDdweCAxM3B4O1xyXG5cdH1cclxuXHJcblx0Lm11aS1pbnB1dC1ncm91cCAubXVpLWlucHV0LXJvdyB7XHJcblx0XHRoZWlnaHQ6IDg1cnB4O1xyXG5cdFx0cG9zaXRpb246IHJlbGF0aXZlO1xyXG5cdFx0Y2xlYXI6IGxlZnQ7XHJcblx0XHRvdmVyZmxvdzogaGlkZGVuO1xyXG5cdH1cclxuXHJcblx0Lm11aS1pbnB1dC1yb3c6Zmlyc3QtY2hpbGQge1xyXG5cdFx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNjOGM3Y2M7XHJcblx0fVxyXG5cclxuXHQubXVpLWlucHV0LXJvdzpsYXN0LWNoaWxkIHtcclxuXHRcdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjYzhjN2NjO1xyXG5cdH1cclxuXHJcblx0Lm11aS1pbnB1dC1ncm91cCAubXVpLWlucHV0LXJvdzpsYXN0LWNoaWxkOmFmdGVyIHtcclxuXHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcblx0fVxyXG5cclxuXHQubXVpLWlucHV0LWdyb3VwIC5tdWktaW5wdXQtcm93OmFmdGVyIHtcclxuXHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHRcdHJpZ2h0OiAwO1xyXG5cdFx0Ym90dG9tOiAwO1xyXG5cdFx0bGVmdDogMTVweDtcclxuXHRcdGhlaWdodDogMXB4O1xyXG5cdFx0Y29udGVudDogJyc7XHJcblx0XHR0cmFuc2Zvcm06IHNjYWxlWSguNSk7XHJcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjYzhjN2NjO1xyXG5cdH1cclxuXHJcblx0Lm11aS1pbnB1dC1yb3cgaW5wdXQge1xyXG5cdFx0Zm9udC1mYW1pbHk6ICdIZWx2ZXRpY2EgTmV1ZScsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcclxuXHRcdGZvbnQtc2l6ZTogMTVweDtcclxuXHRcdHdpZHRoOiA0ODBycHg7XHJcblx0XHQvKiBmbG9hdDogcmlnaHQ7ICovXHJcblx0XHRtYXJnaW4tYm90dG9tOiAwO1xyXG5cdFx0cGFkZGluZy1sZWZ0OiAyMHJweDtcclxuXHRcdC8qIHBhZGRpbmctcmlnaHQ6IDEwcnB4OyAqL1xyXG5cdFx0LyogbGluZS1oZWlnaHQ6IDMwcnB4OyAqL1xyXG5cdFx0aGVpZ2h0OiA4NXJweDtcclxuXHRcdC8qIHBhZGRpbmc6IDdweCA0MHB4IDdweCAwcHg7ICovXHJcblx0XHQtd2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0O1xyXG5cdFx0LyogYm9yZGVyOiAwOyAqL1xyXG5cdFx0LyogYm9yZGVyLXJhZGl1czogMDsgKi9cclxuXHRcdGJveC1zaGFkb3c6IG5vbmU7XHJcblx0XHRvdXRsaW5lOiAwO1xyXG5cdFx0YmFja2dyb3VuZDogMCAwO1xyXG5cdFx0LXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xyXG5cdH1cclxuXHJcblx0Lm11aS1pbnB1dC1ncm91cCBsYWJlbC5tdWktbmF2aWdhdGUtcmlnaHQge1xyXG5cdFx0Zm9udC1zaXplOiAyNXB4O1xyXG5cdFx0ZmxvYXQ6IHJpZ2h0O1xyXG5cdFx0cGFkZGluZzogMDtcclxuXHRcdHdpZHRoOiA4MHJweDtcclxuXHRcdG1hcmdpbi1yaWdodDogNXJweDtcclxuXHRcdG1hcmdpbi10b3A6IC04OHJweDtcclxuXHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHR9XHJcblxyXG5cdGJ1dHRvbi5idG5fbG9naW4ge1xyXG5cdFx0bWFyZ2luLXRvcDogNTBycHg7XHJcblx0XHRwYWRkaW5nOiAyMHJweDtcclxuXHRcdGxpbmUtaGVpZ2h0OiAxLjU7XHJcblx0XHRiYWNrZ3JvdW5kOiAjMjdBNkUxO1xyXG5cdFx0Ym9yZGVyOiBub25lO1xyXG5cdFx0Y29sb3I6ICNmZmY7XHJcblx0fVxyXG48L3N0eWxlPlxyXG5cclxuXHJcbjx0ZW1wbGF0ZT5cclxuXHQ8dmlldyBjbGFzcz1cIlwiIHN0eWxlPVwid2lkdGg6IDEwMHZ3O2hlaWdodDogNjR2aDtcIj5cclxuXHRcdDxkaXYgaWQ9XCJoZWFkclwiIGNsYXNzPVwibXVpLWJhciBtdWktYmFyLW5hdlwiPlxyXG5cdFx0XHQ8aW1hZ2UgY2xhc3M9XCJsb2dvXCIgc3JjPVwiLi4vLi4vaW1hZ2VzL2xvZ2luL21vYm94X2xvZ18yMDAucG5nXCI+PC9pbWFnZT5cclxuXHRcdDwvZGl2PlxyXG5cdFx0PGRpdiBjbGFzcz1cIm11aS1jb250ZW50XCI+XHJcblx0XHRcdDxmb3JtIGlkPSdsb2dpbi1mb3JtJyBjbGFzcz1cIm11aS1pbnB1dC1ncm91cFwiPlxyXG5cdFx0XHRcdDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cIlNldFNlcnZlclwiIEBjbGljaz1cImlucHV0RGlhbG9nVG9nZ2xlXCI+6YWN572uPC9hPlxyXG5cdFx0XHRcdDwhLS0gPGRpdiBjbGFzcz1cIm11aS1pbnB1dC1yb3dcIj5cclxuXHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cImxhX2ljb25cIj48aW1hZ2UgY2xhc3M9XCJsb2dvX2lucHV0XCIgc3JjPVwiLi4vLi4vaW1hZ2VzL2xvZ2luL3N2cl8zMC5wbmdcIj48L2ltYWdlPjwvbGFiZWw+XHJcblx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cIm11aS1pbnB1dFwiIHYtbW9kZWw9XCJ1c2VyU2VydmVyXCIgcGxhY2Vob2xkZXI9XCLmnI3liqHlmajlnLDlnYBcIj5cclxuXHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cIm11aS1uYXZpZ2F0ZS1yaWdodFwiIGlkPVwic2Vyc2VsXCI+PGltYWdlIGNsYXNzPVwibG9nb19pY29uXCIgc3JjPVwiLi4vLi4vaW1hZ2VzL2xvZ2luL3NlbF9sZWZ0LnBuZ1wiID48L2ltYWdlPjwvbGFiZWw+XHJcblx0XHRcdFx0PC9kaXY+IC0tPlxyXG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJtdWktaW5wdXQtcm93XCI+XHJcblx0XHRcdFx0XHQ8bGFiZWwgY2xhc3M9XCJsYV9pY29uXCI+XHJcblx0XHRcdFx0XHRcdDxpbWFnZSBjbGFzcz1cImxvZ29faW5wdXRcIiBzcmM9XCIuLi8uLi9pbWFnZXMvbG9naW4vcGVyc29uXzMwLnBuZ1wiPjwvaW1hZ2U+XHJcblx0XHRcdFx0XHQ8L2xhYmVsPlxyXG5cdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJtdWktaW5wdXRcIiB2LW1vZGVsPVwidXNlck5hbWVcIiBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpei0puWPt1wiPlxyXG5cdFx0XHRcdFx0PCEtLSA8bGFiZWwgY2xhc3M9XCJtdWktbmF2aWdhdGUtcmlnaHRcIiBpZD1cIm5hbXNlbFwiPjxpbWFnZSBjbGFzcz1cImxvZ29faWNvblwiIHNyYz1cIi4uLy4uL2ltYWdlcy9sb2dpbi91c2VyLXBob3RvLnBuZzwvaW1hZ2U+PC9sYWJlbD4gLS0+XHJcblx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PGRpdiBjbGFzcz1cIm11aS1pbnB1dC1yb3dcIj5cclxuXHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cImxhX2ljb25cIj5cclxuXHRcdFx0XHRcdFx0PGltYWdlIGNsYXNzPVwibG9nb19pbnB1dFwiIHNyYz1cIi4uLy4uL2ltYWdlcy9sb2dpbi9sb2NrXzMwLnBuZ1wiPjwvaW1hZ2U+XHJcblx0XHRcdFx0XHQ8L2xhYmVsPlxyXG5cdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJwYXNzd29yZFwiIGNsYXNzPVwibXVpLWlucHV0XCIgdi1tb2RlbD1cInVzZXJQd2RcIiBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpeWvhueggVwiPlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDxjaGVja2JveC1ncm91cCBjbGFzcz1cImNoZWNrX3JlbWVtYmVyUHdkXCIgQGNoYW5nZT1cInJlbWVtYmVyUHdkXCI+XHJcblx0XHRcdFx0XHQ8bGFiZWw+XHJcblx0XHRcdFx0XHRcdDxjaGVja2JveCB2YWx1ZT1cIjFcIiA6Y2hlY2tlZD1cImlzY2hlY2tlZFwiIC8+XHJcblx0XHRcdFx0XHRcdDx0ZXh0PuiusOS9j+WvhueggTwvdGV4dD5cclxuXHRcdFx0XHRcdDwvbGFiZWw+XHJcblx0XHRcdFx0PC9jaGVja2JveC1ncm91cD5cclxuXHRcdFx0PC9mb3JtPlxyXG5cdFx0XHQ8YnV0dG9uIGlkPSdsb2dpbicgdHlwZT1cImRlZmF1bHRcIiBAdGFwPVwibG9naW5kXCIgY2xhc3M9XCJidG5fbG9naW5cIj57e2xvZ2lufX08L2J1dHRvbj5cclxuXHRcdFx0PHAgc3R5bGU9XCJmbG9hdDpyaWdodDsgbWFyZ2luOiAxMHB4IDEwcHg7Y29sb3I6I2M4YzdjY1wiPlxyXG5cdFx0XHRcdDxzcGFuPueJiOacrOWPt++8mjwvc3Bhbj5cclxuXHRcdFx0XHQ8c3Bhbj57e3ZlcnNpb259fTwvc3Bhbj5cclxuXHRcdFx0PC9wPlxyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwiXCJcclxuXHRcdFx0XHRzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjtiYWNrZ3JvdW5kOiB3aGl0ZTtib3JkZXItdG9wOiAwcHggc29saWQgI0MwQzBDMDtjb2xvcjogIzdjZDBmODtwb3NpdGlvbjogYWJzb2x1dGU7Ym90dG9tOiAwO3dpZHRoOiAxMDAlO2hlaWdodDogMjRweDtwYWRkaW5nLXRvcDozcHg7Zm9udC1zaXplOiAxMXB4O1wiPlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdDwvZGl2PlxyXG5cdFx0PHZpZXc+XHJcblx0XHRcdDwhLS0g6L6T5YWl5qGG56S65L6LIC0tPlxyXG5cdFx0XHQ8dW5pLXBvcHVwIHJlZj1cImlucHV0RGlhbG9nXCIgdHlwZT1cImRpYWxvZ1wiPlxyXG5cdFx0XHRcdDx1bmktcG9wdXAtZGlhbG9nIHJlZj1cImlucHV0Q2xvc2VcIiBtb2RlPVwiaW5wdXRcIiB0aXRsZT1cIuiuvue9rlwiIDp2YWx1ZT1cInVzZXJTZXJ2ZXJcIiBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpeWGheWuuVwiXHJcblx0XHRcdFx0XHRAY29uZmlybT1cImRpYWxvZ0lucHV0Q29uZmlybVwiPjwvdW5pLXBvcHVwLWRpYWxvZz5cclxuXHRcdFx0PC91bmktcG9wdXA+XHJcblx0XHRcdDwhLS0g54mI5pys5Y2H57qn5by556qX5byA5aeLIC0tPlxyXG5cdFx0XHQ8dW5pLXBvcHVwIHJlZj1cInByb21vdGlvblwiIHR5cGU9XCJjZW50ZXJcIj5cclxuXHRcdFx0XHQ8dmlldyBjbGFzcz1cInByb21vdGlvblwiIHN0eWxlPVwid2lkdGg6IDcwMHJweDtwYWRkaW5nOjIwcnB4IDQwcnB4OyBiYWNrZ3JvdW5kOiB3aGl0ZTtmb250LXNpemU6IDM2cnB4O1wiPlxyXG5cdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJvcGVyYXRlc1wiIHYtaWY9XCJzaG93QnRucz09dHJ1ZVwiPlxyXG5cdFx0XHRcdFx0XHQ8dmlldyBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjtwYWRkaW5nLXRvcDoyMHJweDtwYWRkaW5nLWJvdHRvbTogNDBycHg7XCI+XHJcblx0XHRcdFx0XHRcdFx057O757uf5pyJ5paw54mI5pys77yM5piv5ZCm6ZyA6KaB5pu05pawXHJcblx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0PHRleHQgQGNsaWNrPVwiY2FuY2VsXCJcclxuXHRcdFx0XHRcdFx0XHRzdHlsZT1cImRpc3BsYXk6IGlubGluZS1ibG9jaztjb2xvcjogIzdjZDBmODt3aWR0aDogNTAlOyB0ZXh0LWFsaWduOiBjZW50ZXI7XCI+5Y+W5raIPC90ZXh0PlxyXG5cdFx0XHRcdFx0XHQ8dGV4dCBAY2xpY2s9XCJzdXJlXCJcclxuXHRcdFx0XHRcdFx0XHRzdHlsZT1cImRpc3BsYXk6IGlubGluZS1ibG9jaztjb2xvcjogIzdjZDBmODt3aWR0aDogNTAlOyB0ZXh0LWFsaWduOiBjZW50ZXI7XCI+56Gu6K6kPC90ZXh0PlxyXG5cdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0PHZpZXcgY2xhc3M9XCJvcGVyYXRlc1wiIHYtZWxzZT5cclxuXHRcdFx0XHRcdFx0PGNtZC1wcm9ncmVzcyA6cGVyY2VudD1cInBlcmNlbnRhZ2VcIiBzdHJva2UtY29sb3I9XCJsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICNlZjMyZDksICM4OWZmZmQpXCI+XHJcblx0XHRcdFx0XHRcdDwvY21kLXByb2dyZXNzPlxyXG5cdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0PC91bmktcG9wdXA+XHJcblx0XHRcdDwhLS0g54mI5pys5Y2H57qn5by556qX57uT5p2fIC0tPlxyXG5cdFx0PC92aWV3PlxyXG5cclxuXHQ8L3ZpZXc+XHJcblxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHNjcmlwdD5cclxuXHRpbXBvcnQgY21kUHJvZ3Jlc3MgZnJvbSBcIkAvY29tcG9uZW50cy9jbWQtcHJvZ3Jlc3MvY21kLXByb2dyZXNzLnZ1ZVwiXHJcblx0Ly8gaW1wb3J0IHtcclxuXHQvLyBcdG1hcFN0YXRlLFxyXG5cdC8vIFx0bWFwTXV0YXRpb25zLFxyXG5cdC8vIFx0bWFwQWN0aW9ucyAsXHJcblx0Ly8gfSBmcm9tICd2dWV4J1xyXG5cdGV4cG9ydCBkZWZhdWx0IHtcclxuXHRcdGNvbXBvbmVudHM6IHtcclxuXHRcdFx0Y21kUHJvZ3Jlc3NcclxuXHRcdH0sXHJcblx0XHRkYXRhKCkge1xyXG5cdFx0XHQvL+iOt+WPluWFqOWxgOWPguaVsO+8mnVybC3mnI3liqHlmajlnLDlnYBcclxuXHRcdFx0dmFyIHNlcnZlciA9IHVuaS5nZXRTdG9yYWdlU3luYygnc2VydmVyJyk7XHJcblx0XHRcdHZhciBhY2NvdW50ID0gdW5pLmdldFN0b3JhZ2VTeW5jKCdhY2NvdW50Jyk7XHJcblx0XHRcdHZhciBwYXNzd29yZCA9IHVuaS5nZXRTdG9yYWdlU3luYygncGFzc3dvcmQnKTtcclxuXHRcdFx0dmFyIHVybCA9IHRoaXMuJHN0b3JlLnN0YXRlLnVybDtcclxuXHRcdFx0dmFyIHVzZXJuYW1lID0gdGhpcy4kc3RvcmUuc3RhdGUudXNlcm5hbWU7XHJcblx0XHRcdHZhciB1c2VycHdkID0gdGhpcy4kc3RvcmUuc3RhdGUudXNlcnB3ZDtcclxuXHRcdFx0dmFyIGlzY2hlY2tlZCA9IGZhbHNlO1xyXG5cdFx0XHRpZiAoIXNlcnZlcilcclxuXHRcdFx0XHRzZXJ2ZXIgPSB1cmw7XHJcblx0XHRcdGlmICghYWNjb3VudClcclxuXHRcdFx0XHRhY2NvdW50ID0gdXNlcm5hbWU7XHJcblx0XHRcdGlmIChhY2NvdW50ICYmIHBhc3N3b3JkKVxyXG5cdFx0XHRcdGlzY2hlY2tlZCA9IHRydWU7XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKHVybCk7XHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0bG9naW46IFwi5byA5aeL55m75b2VXCIsXHJcblx0XHRcdFx0dXNlclNlcnZlcjogc2VydmVyLFxyXG5cdFx0XHRcdHVzZXJOYW1lOiBhY2NvdW50LFxyXG5cdFx0XHRcdHVzZXJQd2Q6IHBhc3N3b3JkLFxyXG5cdFx0XHRcdGlzY2hlY2tlZDogaXNjaGVja2VkLFxyXG5cdFx0XHRcdHZlcnNpb246IFwiMS4wLjBcIixcclxuXHRcdFx0XHRkb3dubG9hZFVybDogXCJcIiwgLy/lronljZNhcHDkuIvovb3pk77mjqVcclxuXHRcdFx0XHRwZXJjZW50YWdlOiAwLCAvL+S4i+i9vei/m+W6plxyXG5cdFx0XHRcdHNob3dCdG5zOiB0cnVlLFxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0b25TaG93KCkge1xyXG5cdFx0XHR0aGlzLnF1ZXJ5KCk7IC8v54mI5pys5Y2H57qnXHJcblx0XHR9LFxyXG5cdFx0d2F0Y2g6IHtcclxuXHRcdFx0Ly/nm5HlkKzov5vluqbmnaFcclxuXHRcdFx0cGVyY2VudGFnZShlKSB7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coZSk7XHJcblx0XHRcdFx0aWYgKGUgPj0gMTAwKSB7XHJcblx0XHRcdFx0XHR0aGlzLiRyZWZzLnByb21vdGlvbi5jbG9zZSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdC8vIGNvbXB1dGVkOiBtYXBTdGF0ZSh7XHJcblx0XHQvLyBcdC8vIOS7jnN0YXRl5Lit5ou/5Yiw5pWw5o2uIOeureWktOWHveaVsOWPr+S9v+S7o+eggeabtOeugOe7g1xyXG5cdFx0Ly8gXHRoYXNMb2dpbjogc3RhdGUgPT4gc3RhdGUuaGFzTG9naW4sXHJcblx0XHQvLyBcdGxvZ2lucHJvdmlkZXI6IHN0YXRlID0+IHN0YXRlLmxvZ2luUHJvdmlkZXIsXHJcblx0XHQvLyBcdGFwcGluZm86c3RhdGU9PnN0YXRlLmFwcEluZm9cclxuXHRcdC8vIH0pLFxyXG5cdFx0bWV0aG9kczoge1xyXG5cdFx0XHQvL+afpeivouW9k+WJjeeJiOacrOWPt1xyXG5cdFx0XHRxdWVyeSgpIHtcclxuXHRcdFx0XHQvLyAjaWZkZWYgQVBQLVBMVVNcclxuXHRcdFx0XHRwbHVzLnJ1bnRpbWUuZ2V0UHJvcGVydHkocGx1cy5ydW50aW1lLmFwcGlkLCAod2d0aW5mbykgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2cod2d0aW5mbyk7XHJcblx0XHRcdFx0XHR2YXIgdmVyc2lvbiA9IHdndGluZm8udmVyc2lvbjsgLy/lrqLmiLfnq6/niYjmnKzlj7dcclxuXHRcdFx0XHRcdC8vIHZhciB2ZXJzaW9uQ29kZSA9IHBhcnNlSW50KHdndGluZm8udmVyc2lvbkNvZGUpOyAvL+WuouaIt+err+eJiOacrOWPt+e8lueggVxyXG5cdFx0XHRcdFx0dGhpcy5jaGVjayh2ZXJzaW9uKSAvL+ajgOa1i+aYr+WQpumcgOimgeabtOaWsFxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdFx0Ly8jZW5kaWZcclxuXHRcdFx0fSxcclxuXHRcdFx0Ly/mo4DmtYvmmK/lkKbpnIDopoHmm7TmlrBcclxuXHRcdFx0YXN5bmMgY2hlY2sodmVyc2lvbikge1xyXG5cdFx0XHRcdGlmICghdGhpcy51c2VyU2VydmVyKSB7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0dGl0bGU6IFwi5o+Q56S6XCIsXHJcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IFwi5pyq6L6T5YWl572R56uZ5Zyw5Z2A77yM6K+36YeN5paw6YWN572u6L6T5YWl77yBXCIsXHJcblx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHZhciBzZXIgPSB0aGlzLnVzZXJTZXJ2ZXIuc3BsaXQoJy8nKTtcclxuXHRcdFx0XHR2YXIgJHRoaXMgPSB0aGlzO1xyXG5cdFx0XHRcdGlmKHNlclsxXSA9PSAnbW9ib3gzJyl7IC8v5Yik5pat5b2T5YmN572R5Z2A5piv5ZCm5pivbW9ib3gzXHJcblx0XHRcdFx0XHR2YXIgdXJsID0gJ2h0dHA6Ly8nK3RoaXMudXNlclNlcnZlcisnL1Byb2dyYW0vdmVyc2lvbi50eHQnO1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2codXJsKTtcclxuXHRcdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdFx0dXJsOiB1cmwsIC8vIOaMh+WumkpT5paH5Lu255qE5a6M5pW06Lev5b6EXHJcblx0XHRcdFx0XHRcdG1ldGhvZDogJ0dFVCcsXHJcblx0XHRcdFx0XHRcdHN1Y2Nlc3MocmVzKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2cocmVzKTtcclxuXHRcdFx0XHRcdFx0XHRpZiAocmVzICYmIHJlcy5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8v6I635Y+W5b2T5YmN54mI5pys5Y+3XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgVmVyc2lvbk5hbWUgPSByZXMuZGF0YTsgLy/mm7TmlrDljIXlkI3np7BcclxuXHRcdFx0XHRcdFx0XHRcdHZhciB2ZXJzaW9uSW5mbyA9IHJlcy5kYXRhLnNwbGl0KCdfJyk7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgdmVyc2lvbk51bSA9IHZlcnNpb25JbmZvWzJdLnJlcGxhY2UoXCIuYXBrXCIsIFwiXCIpOyAvL+eJiOacrOe8lueggVxyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIFZlcnNpb25Db2RlID0gdmVyc2lvbkluZm9bMl0ucmVwbGFjZShcIi5hcGtcIiwgXCJcIikucmVwbGFjZShcIi5cIiwgXCJcIikucmVwbGFjZShcIi5cIiwgXCJcIik7IC8v5pyN5Yqh56uv54mI5pys5Y+3XHJcblx0XHRcdFx0XHRcdFx0XHQvLyB0aGlzLmRvd25sb2FkVXJsID0gcmVzcC5QZGFVcmwrXCIvXCIrVmVyc2lvbk5hbWU7IC8vYXBw5LiL6L296ZO+5o6lXHJcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy5kb3dubG9hZFVybCA9IFwiaHR0cDovL1wiICsgJHRoaXMudXNlclNlcnZlciArIFwiL1Byb2dyYW0vXCIgKyBWZXJzaW9uTmFtZTsgLy9hcHDkuIvovb3pk77mjqV0aGlzLlxyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGlzdmVyID0gJHRoaXMuY29tcGFyZSh2ZXJzaW9uTnVtLHZlcnNpb24pO1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGlzdmVyKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRyZWZzLnByb21vdGlvbi5vcGVuKCk7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZygn5b2T5YmN5bey5piv5pyA5paw54mI5pysJylcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gaWYocmVzLnN0YXR1c0NvZGUgPT09IDQwNCl7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gXHRcdHRpdGxlOiBcIuaPkOekulwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gXHRcdGNvbnRlbnQ6ICfor7fmsYLlpLHotKXvvIzmib7kuI3liLDmm7TmlrDljIXniYjmnKzmlofmoaPvvJonK3VybCxcclxuXHRcdFx0XHRcdFx0XHRcdC8vIFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdC8vIFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gXHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdGZhaWwoZXJyKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8g6ZSZ6K+v5aSE55CG6YC76L6RXHJcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0XHR0aXRsZTogXCLplJnor69cIixcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6ICfojrflj5YnK3VybCsn5paH5Lu25aSx6LSl77yaJysgZXJyLFxyXG5cdFx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdHZhciBkYXRhSW5mbyA9IHtcclxuXHRcdFx0XHRcdFx0c2VydmVyOiB0aGlzLnVzZXJTZXJ2ZXJcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR0aGlzLiRzdG9yZS5kaXNwYXRjaCgnR2V0QXBrVmVyc2lvbkluZm8nLCBkYXRhSW5mbykudGhlbihzdWNjZXNzID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XHJcblx0XHRcdFx0XHRcdGlmIChzdWNjZXNzLmNvZGUgPT0gJzAwMDAwJykge1xyXG5cdFx0XHRcdFx0XHRcdGxldCByZXNwID0gc3VjY2Vzcy5kYXRhO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChyZXNwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBjb25zdCBvYmogPSByZXNwLmRhdGEuZmlsdGVyKGl0ZW0gPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gXHRyZXR1cm4gaXRlbS5ncm91cE5hbWUgPT0gJ3ZlcnNpb24nXHJcblx0XHRcdFx0XHRcdFx0XHQvLyB9KVxyXG5cdFx0XHRcdFx0XHRcdFx0Ly/ojrflj5blvZPliY3niYjmnKzlj7dcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IFZlcnNpb25OYW1lID0gcmVzcC5WZXJzaW9uTmFtZTsgLy/mm7TmlrDljIXlkI3np7BcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IFZlcnNpb25Db2RlID0gcmVzcC5WZXJzaW9uQ29kZTsgLy/niYjmnKznvJbnoIFcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHZlcnNpb25OdW0gPSByZXNwLlZlcnNpb247IC8v5pyN5Yqh56uv54mI5pys5Y+3XHJcblx0XHRcdFx0XHRcdFx0XHQvLyB0aGlzLmRvd25sb2FkVXJsID0gcmVzcC5QZGFVcmwrXCIvXCIrVmVyc2lvbk5hbWU7IC8vYXBw5LiL6L296ZO+5o6lXHJcblx0XHRcdFx0XHRcdFx0XHQkdGhpcy5kb3dubG9hZFVybCA9IFwiaHR0cDovL1wiICsgJHRoaXMudXNlclNlcnZlciArIFwiL1Byb2dyYW0vXCIgKyBWZXJzaW9uTmFtZTsgLy9hcHDkuIvovb3pk77mjqV0aGlzLlxyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGlzdmVyID0gJHRoaXMuY29tcGFyZSh2ZXJzaW9uTnVtLHZlcnNpb24pO1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGlzdmVyKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLiRyZWZzLnByb21vdGlvbi5vcGVuKCk7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZygn5b2T5YmN5bey5piv5pyA5paw54mI5pysJylcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0XHR0aXRsZTogXCLplJnor69cIixcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IHN1Y2Nlc3MubXNnLFxyXG5cdFx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KS5jYXRjaChleCA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0dGl0bGU6IFwi6ZSZ6K+vXCIsXHJcblx0XHRcdFx0XHRcdFx0Y29udGVudDogZXguZXJyTXNnID8gZXguZXJyTXNnIDogZXgubWVzc2FnZSxcclxuXHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0Y29tcGFyZShjdXJWLCByZXFWKSB7XHJcblx0XHRcdFx0dmFyIGFycjEgPSBjdXJWLnRvU3RyaW5nKCkuc3BsaXQoJy4nKTtcclxuXHRcdFx0ICAgIHZhciBhcnIyID0gcmVxVi50b1N0cmluZygpLnNwbGl0KCcuJyk7XHJcblx0XHRcdCAgICAvL+WwhuS4pOS4queJiOacrOWPt+aLhuaIkOaVsOWtl1xyXG5cdFx0XHQgICAgdmFyIG1pbkwgPSBNYXRoLm1pbihhcnIxLmxlbmd0aCwgYXJyMi5sZW5ndGgpO1xyXG5cdFx0XHQgICAgdmFyIHBvcyA9IDA7IC8v5b2T5YmN5q+U6L6D5L2NXHJcblx0XHRcdCAgICB2YXIgZGlmZiA9IDA7IC8v5b2T5YmN5Li65L2N5q+U6L6D5piv5ZCm55u4562JXHJcblx0XHRcdCAgICB2YXIgZmxhZyA9IGZhbHNlO1xyXG5cdFx0XHQgICAgLy/pgJDkuKrmr5TovoPlpoLmnpzlvZPliY3kvY3nm7jnrYnliJnnu6fnu63mr5TovoPkuIvkuIDkvY1cclxuXHRcdFx0ICAgIHdoaWxlIChwb3MgPCBtaW5MKSB7XHJcblx0XHRcdCAgICAgICAgZGlmZiA9IHBhcnNlSW50KGFycjFbcG9zXSkgLSBwYXJzZUludChhcnIyW3Bvc10pO1xyXG5cdFx0XHQgICAgICAgIGlmIChkaWZmID09IDApIHtcclxuXHRcdFx0ICAgICAgICAgICAgcG9zKys7XHJcblx0XHRcdCAgICAgICAgICAgIGNvbnRpbnVlO1xyXG5cdFx0XHQgICAgICAgIH0gZWxzZSBpZiAoZGlmZiA+IDApIHtcclxuXHRcdFx0ICAgICAgICAgICAgZmxhZyA9IHRydWU7XHJcblx0XHRcdCAgICAgICAgICAgIGJyZWFrO1xyXG5cdFx0XHQgICAgICAgIH0gZWxzZSB7XHJcblx0XHRcdCAgICAgICAgICAgIGZsYWcgPSBmYWxzZTtcclxuXHRcdFx0ICAgICAgICAgICAgYnJlYWs7XHJcblx0XHRcdCAgICAgICAgfVxyXG5cdFx0XHQgICAgfVxyXG5cdFx0XHQgICAgcmV0dXJuIGZsYWc7XHJcblx0XHRcdH0sXHJcblx0XHRcdC8v56Gu6K6k5pu05pawXHJcblx0XHRcdHN1cmUoKSB7XHJcblx0XHRcdFx0Ly/lhbPpl63mjInpkq5cclxuXHRcdFx0XHR0aGlzLnNob3dCdG5zID0gZmFsc2U7XHJcblx0XHRcdFx0bGV0IHN5cyA9IHVuaS5nZXRTeXN0ZW1JbmZvU3luYygpLnBsYXRmb3JtIC8v5qOA5p+l57O757ufXHJcblx0XHRcdFx0aWYgKHN5cyA9PSBcImlvc1wiKSB7XHJcblx0XHRcdFx0XHQvLyB0aGlzLmdldElvc0luZm8oKVxyXG5cdFx0XHRcdH0gZWxzZSBpZiAoc3lzID09IFwiYW5kcm9pZFwiKSB7XHJcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZUFQUCgpIC8vIOiwg+eUqOS4i+i9veaWueazlWFwcOWGheS4i+i9vVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0Ly/lj5bmtojmm7TmlrBcclxuXHRcdFx0Y2FuY2VsKCkge1xyXG5cdFx0XHRcdHRoaXMuJHJlZnMucHJvbW90aW9uLmNsb3NlKCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdC8v6ZO+5o6l6Iu55p6c5ZWG5bqX5LiL6L29XHJcblx0XHRcdC8vIGdldElvc0luZm8oKSB7XHJcblx0XHRcdC8vIFx0bGV0IGFwcGxlSWQgPSBcIuS9oOeahGFwcGlkXCJcclxuXHRcdFx0Ly8gXHRwbHVzLnJ1bnRpbWUubGF1bmNoQXBwbGljYXRpb24oe1xyXG5cdFx0XHQvLyBcdFx0YWN0aW9uOiBcIml0bXMtYXBwczovL2l0dW5lcy5hcHBsZS5jb20vY24vYXBwL2lkXCIgKyBhcHBsZUlkICsgXCI/bXQ9OFwiXHJcblx0XHRcdC8vIFx0fSwgZnVuY3Rpb24oZSkge1xyXG5cdFx0XHQvLyBcdFx0Y29uc29sZS5sb2coJ09wZW4gc3lzdGVtIGRlZmF1bHQgYnJvd3NlciBmYWlsZWQ6ICcgKyBlLm1lc3NhZ2UpO1xyXG5cdFx0XHQvLyBcdH0pO1xyXG5cdFx0XHQvLyB9LFxyXG5cdFx0XHQvL+WuieWNk+abtOaWsFxyXG5cdFx0XHR1cGRhdGVBUFAoKSB7XHJcblx0XHRcdFx0bGV0IF90aGlzID0gdGhpcztcclxuXHRcdFx0XHRsZXQgdXJsID0gdGhpcy5kb3dubG9hZFVybDtcclxuXHRcdFx0XHQvLyDlrpjmlrlBUElcclxuXHRcdFx0XHR2YXIgZHRhc2sgPSBwbHVzLmRvd25sb2FkZXIuY3JlYXRlRG93bmxvYWQodXJsLCB7fSwgZnVuY3Rpb24oZCwgc3RhdHVzKSB7XHJcblx0XHRcdFx0XHQvL2TkuLrkuIvovb3nmoTmlofku7blr7nosaFcclxuXHRcdFx0XHRcdGlmIChzdGF0dXMgPT0gMjAwKSB7XHJcblx0XHRcdFx0XHRcdC8v5LiL6L295oiQ5YqfLGQuZmlsZW5hbWXmmK/mlofku7blnKjkv53lrZjlnKjmnKzlnLDnmoTnm7jlr7not6/lvoTvvIzkvb/nlKjkuIvpnaLnmoRBUEnlj6/ovazkuLrlubPlj7Dnu53lr7not6/lvoRcclxuXHRcdFx0XHRcdFx0dmFyIGZpbGVTYXZlVXJsID0gcGx1cy5pby5jb252ZXJ0TG9jYWxGaWxlU3lzdGVtVVJMKGQuZmlsZW5hbWUpO1xyXG5cdFx0XHRcdFx0XHRwbHVzLnJ1bnRpbWUub3BlbkZpbGUoZC5maWxlbmFtZSk7IC8v6YCJ5oup6L2v5Lu25omT5byA5paH5Lu2XHJcblx0XHRcdFx0XHRcdHVuaS5zaG93VG9hc3Qoe1xyXG5cdFx0XHRcdFx0XHRcdGljb246ICdub25lJyxcclxuXHRcdFx0XHRcdFx0XHR0aXRsZTogJ+abtOaWsOaIkOWKnydcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdF90aGlzLiRyZWZzLnByb21vdGlvbi5jbG9zZSgpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0Ly/kuIvovb3lpLHotKVcclxuXHRcdFx0XHRcdFx0cGx1cy5kb3dubG9hZGVyLmNsZWFyKCk7IC8v5riF6Zmk5LiL6L295Lu75YqhXHJcblx0XHRcdFx0XHRcdHVuaS5zaG93VG9hc3Qoe1xyXG5cdFx0XHRcdFx0XHRcdGljb246ICdub25lJyxcclxuXHRcdFx0XHRcdFx0XHR0aXRsZTogJ+abtOaWsOWksei0pSdcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdF90aGlzLnNob3dCdG5zID0gZmFsc2U7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0XHQvL+W8gOWni+S4i+i9vVxyXG5cdFx0XHRcdGR0YXNrLnN0YXJ0KCk7XHJcblx0XHRcdFx0Ly/nm5HlkKzkuIvovb3ov5vluqZcclxuXHRcdFx0XHRkdGFzay5hZGRFdmVudExpc3RlbmVyKCdzdGF0ZWNoYW5nZWQnLCBmdW5jdGlvbih0YXNrKSB7XHJcblx0XHRcdFx0XHRfdGhpcy5wZXJjZW50YWdlID0gcGFyc2VJbnQoXHJcblx0XHRcdFx0XHRcdChwYXJzZUZsb2F0KHRhc2suZG93bmxvYWRlZFNpemUpIC8gcGFyc2VGbG9hdCh0YXNrLnRvdGFsU2l6ZSkpICogMTAwKTtcclxuXHRcdFx0XHRcdGlmIChfdGhpcy5wZXJjZW50YWdlID09IDEwMCkge1xyXG5cdFx0XHRcdFx0XHRfdGhpcy4kcmVmcy5wcm9tb3Rpb24uY2xvc2UoKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKCfkuIvovb3ov5vluqbvvJonICsgX3RoaXMucGVyY2VudGFnZSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdC8vIC4uLm1hcE11dGF0aW9ucyh7XHJcblx0XHRcdC8vIFx0bXV0YXRMb2dpbjonbG9naW4nXHJcblx0XHRcdC8vIH0pLFxyXG5cdFx0XHQvLyAuLi5tYXBBY3Rpb25zKHtcclxuXHRcdFx0Ly8gXHRhY3Rpb25Mb2dpbjonbG9naW4nXHJcblx0XHRcdC8vIH0pLFxyXG5cdFx0XHRpbnB1dERpYWxvZ1RvZ2dsZSgpIHtcclxuXHRcdFx0XHR0aGlzLiRyZWZzLmlucHV0RGlhbG9nLm9wZW4oKVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRkaWFsb2dJbnB1dENvbmZpcm0odmFsKSB7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2codmFsKTtcclxuXHRcdFx0XHQvLyB1bmkuc2hvd0xvYWRpbmcoe1xyXG5cdFx0XHRcdC8vIFx0dGl0bGU6ICcz56eS5ZCO5Lya5YWz6ZetJ1xyXG5cdFx0XHRcdC8vIH0pXHJcblx0XHRcdFx0Ly8gc2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0Ly8gdW5pLmhpZGVMb2FkaW5nKCk7XHJcblx0XHRcdFx0dGhpcy51c2VyU2VydmVyID0gdmFsO1xyXG5cdFx0XHRcdHVuaS5zZXRTdG9yYWdlU3luYygnc2VydmVyJywgdmFsKTtcclxuXHRcdFx0XHQvLyB0aGlzLnZhbHVlID0gdmFsXHJcblx0XHRcdFx0Ly8g5YWz6Zet56qX5Y+j5ZCO77yM5oGi5aSN6buY6K6k5YaF5a65XHJcblx0XHRcdFx0dGhpcy4kcmVmcy5pbnB1dERpYWxvZy5jbG9zZSgpO1xyXG5cclxuXHRcdFx0XHR0aGlzLnF1ZXJ5KCk7IC8v54mI5pys5Y2H57qnXHJcblx0XHRcdFx0Ly8gfSwgMzAwMClcclxuXHRcdFx0XHQvLyB9LCAzMDAwKVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRyZW1lbWJlclB3ZChlKSB7IC8v6K6w5L2P5a+G56CBXHJcblx0XHRcdFx0Y29uc29sZS5sb2coZS50YXJnZXQpO1xyXG5cdFx0XHRcdHVuaS5zZXRTdG9yYWdlU3luYygnYWNjb3VudCcsICcnKTtcclxuXHRcdFx0XHR1bmkuc2V0U3RvcmFnZVN5bmMoJ3Bhc3N3b3JkJywgJycpO1xyXG5cdFx0XHRcdGlmIChlLnRhcmdldC52YWx1ZVswXSA9PSAnMScpIHtcclxuXHRcdFx0XHRcdHVuaS5zZXRTdG9yYWdlU3luYygnYWNjb3VudCcsIHRoaXMudXNlck5hbWUpO1xyXG5cdFx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCdwYXNzd29yZCcsIHRoaXMudXNlclB3ZCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvLyBnZXRDb29raWUoa2V5KXtcclxuXHRcdFx0Ly8gXHRpZihkb2N1bWVudC5jb29raWUubGVuZ3RoPjApe1xyXG5cdFx0XHQvLyBcdFx0dmFyIHN0YXJ0ID0gZG9jdW1lbnQuY29va2llLmluZGV4T2Yoa2V5ICsnPScpO1xyXG5cdFx0XHQvLyBcdFx0aWYoc3RhcnQgIT09IC0xKXtcclxuXHRcdFx0Ly8gXHRcdFx0c3RhcnQgPSBzdGFydCtrZXkubGVuZ3RoKzE7XHJcblx0XHRcdC8vIFx0XHRcdHZhciBlbmQgPSBkb2N1bWVudC5jb29raWUuaW5kZXhPZignOycsc3RhcnQpO1xyXG5cdFx0XHQvLyBcdFx0XHRpZihlbmQgPT09IC0xKSBlbmQ9ZG9jdW1lbnQuY29va2llLmxlbmd0aDtcclxuXHRcdFx0Ly8gXHRcdFx0cmV0dXJuIGRvY3VtZW50LmNvb2tpZS5zdWJzdHJpbmcoc3RhcnQsZW5kKTtcclxuXHRcdFx0Ly8gXHRcdH1cclxuXHRcdFx0Ly8gXHR9XHJcblx0XHRcdC8vIFx0cmV0dXJuICcnO1xyXG5cdFx0XHQvLyB9LFxyXG5cdFx0XHQvLyBzZXRDb29raWUoY05hbWUsdmFsdWUsZXhwaXJlZGF5cyl7XHJcblx0XHRcdC8vIFx0dmFyIGV4ZGF0ZSA9IG5ldyBEYXRlKCk7XHJcblx0XHRcdC8vIFx0ZXhkYXRlLnNldERhdGUoZXhkYXRlLmdldERhdGUoKSxleHBpcmVkYXlzKVxyXG5cdFx0XHQvLyBcdGRvY3VtZW50LmNvb2tpZSA9IGNOYW1lKyc9JysgZG9jdW1lbnRVUkxDb21wb25lbnQodmFsdWUpK1xyXG5cdFx0XHQvLyBcdCgoZXhwaXJlZGF5cz09bnVsbCk/Jyc6JztleHBpcmVzPScrZXhkYXRlLnRvR01UU3RyaW5nKCkpO1xyXG5cclxuXHRcdFx0Ly8gfSxcclxuXHRcdFx0bG9naW5kKCkge1xyXG5cdFx0XHRcdGlmICghdGhpcy51c2VyU2VydmVyKSB7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0dGl0bGU6IFwi5o+Q56S6XCIsXHJcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IFwi5pyq6L6T5YWl572R56uZ5Zyw5Z2A77yM6K+36YeN5paw6YWN572u6L6T5YWl77yBXCIsXHJcblx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICghdGhpcy51c2VyTmFtZSkge1xyXG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdHRpdGxlOiBcIuaPkOekulwiLFxyXG5cdFx0XHRcdFx0XHRjb250ZW50OiBcIuacqui+k+WFpeeUqOaIt+WQje+8jOivt+mHjeaWsOi+k+WFpe+8gVwiLFxyXG5cdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IFwi5Y+W5raIXCJcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoIXRoaXMudXNlclB3ZCkge1xyXG5cdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdHRpdGxlOiBcIuaPkOekulwiLFxyXG5cdFx0XHRcdFx0XHRjb250ZW50OiBcIuacqui+k+WFpeWvhuegge+8jOivt+mHjeaWsOi+k+WFpe+8gVwiLFxyXG5cdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IFwi5Y+W5raIXCJcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvL+ajgOafpSBcIueZu+W9leeKtuaAgS/plIHlsY/nirbmgIFcIiDnu5PmnZ9cclxuXHRcdFx0XHR2YXIgbG9naW5JbmZvID0ge1xyXG5cdFx0XHRcdFx0c2VydmVyOiB0aGlzLnVzZXJTZXJ2ZXIsXHJcblx0XHRcdFx0XHR1bmFtZTogdGhpcy51c2VyTmFtZSxcclxuXHRcdFx0XHRcdHB3ZDogdGhpcy51c2VyUHdkLFxyXG5cdFx0XHRcdFx0Y25hbWU6IHBsdXMuZGV2aWNlLm1vZGVsLFxyXG5cdFx0XHRcdFx0dHlwZTogXCIwXCJcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGxvZ2luSW5mbyk7XHJcblxyXG5cdFx0XHRcdHRoaXMuJGRhdGEubG9naW4gPSBcImxvYWRpbmcuLi4uLi5cIjtcclxuXHRcdFx0XHQvL+eZu+W9lVxyXG5cdFx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdsb2dpbicsIGxvZ2luSW5mbykudGhlbihzdWNjZXNzID0+IHtcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHN1Y2Nlc3MpO1xyXG5cdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuY29kZSA9PSAnMDAwMDAnIHx8IHN1Y2Nlc3MuZXJyX2NvZGU9PTApIHtcclxuXHRcdFx0XHRcdFx0Ly/nmbvlvZXmiJDlip/lkI7muIXnqbrnvJPlrZjmlbDmja5cclxuXHRcdFx0XHRcdFx0dGhpcy4kc3RvcmUuY29tbWl0KFwiYXJlYUZ1bmNcIiwgbnVsbCk7XHJcblx0XHRcdFx0XHRcdHRoaXMuJHN0b3JlLmNvbW1pdChcImNsYXNzQXR0ckxpc3RcIiwgbnVsbCk7XHJcblx0XHRcdFx0XHRcdHRoaXMuJHN0b3JlLmNvbW1pdChcImNsYXNzR3JpZFN0eWxlSW5mb1wiLCBudWxsKTtcclxuXHRcdFx0XHRcdFx0dGhpcy4kc3RvcmUuY29tbWl0KFwiZGljVmFsdWVJbmZvXCIsIG51bGwpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLiRzdG9yZS5jb21taXQoXCJzdWJDbGFzc0F0dHJMaXN0XCIsIG51bGwpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLiRzdG9yZS5jb21taXQoXCJzdWJDbGFzc0dyaWRTdHlsZUluZm9cIiwgbnVsbCk7XHJcblx0XHRcdFx0XHRcdC8v6K6+572u5YWo5bGA5Y+C5pWw77yadXNlci3nlKjmiLfkv6Hmga9cclxuXHRcdFx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCdzZXJ2ZXInLCBsb2dpbkluZm8uc2VydmVyKTtcclxuXHRcdFx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCdhY2NvdW50JywgbG9naW5JbmZvLnVuYW1lKTtcclxuXHRcdFx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCdwYXNzd29yZCcsIGxvZ2luSW5mby5wd2QpO1xyXG5cdFx0XHRcdFx0XHQvLyB0aGlzLm11dGF0TG9naW4oe2xvZ2luaWQ6c3VjY2Vzc30pO1xyXG5cdFx0XHRcdFx0XHR0aGlzLiRzdG9yZS5jb21taXQoJ2xvZ2luJywge1xyXG5cdFx0XHRcdFx0XHRcdGxvZ2luaWQ6IHN1Y2Nlc3NcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdHVuaS5uYXZpZ2F0ZVRvKHtcclxuXHRcdFx0XHRcdFx0XHR1cmw6ICcuLi9pbmRleC9pbmRleD9hcmdzPTk5OTk5OTk5OTknXHJcblx0XHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHRcdC8vIHVuaS5yZWRpcmVjdFRvKHtcclxuXHRcdFx0XHRcdFx0Ly8gXHR1cmw6Jy4uL2luZGV4L2luZGV4P2FyZ3M9OTk5OTk5OTk5OSdcclxuXHRcdFx0XHRcdFx0Ly8gfSk7XHJcblx0XHRcdFx0XHRcdHRoaXMubG9naW4gPSBcIuW8gOWni+eZu+W9lVwiO1xyXG5cclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHRcdHRpdGxlOiBcIumUmeivr1wiLFxyXG5cdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IHN1Y2Nlc3MubXNnLFxyXG5cdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmxvZ2luID0gXCLlvIDlp4vnmbvlvZVcIjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KS5jYXRjaChleCA9PiB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhleCk7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0dGl0bGU6IFwi6ZSZ6K+vXCIsXHJcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IGV4LmVyck1zZyxcclxuXHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdHRoaXMubG9naW4gPSBcIuW8gOWni+eZu+W9lVwiO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0b25Mb2FkKCkge1xyXG5cdFx0XHRwbHVzLnJ1bnRpbWUuZ2V0UHJvcGVydHkocGx1cy5ydW50aW1lLmFwcGlkLCAoaW5mbykgPT4ge1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGluZm8pO1xyXG5cdFx0XHRcdHRoaXMuJGRhdGEudmVyc2lvbiA9IGluZm8udmVyc2lvbjtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG48L3NjcmlwdD5cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///56\n");
eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 1);\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ 57));\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ 59));\nvar _cmdProgress = _interopRequireDefault(__webpack_require__(/*! @/components/cmd-progress/cmd-progress.vue */ 47));\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n// import {\n// \tmapState,\n// \tmapMutations,\n// \tmapActions ,\n// } from 'vuex'\nvar _default = {\n  components: {\n    cmdProgress: _cmdProgress.default\n  },\n  data: function data() {\n    //获取全局参数:url-服务器地址\n    var server = uni.getStorageSync('server');\n    var account = uni.getStorageSync('account');\n    var password = uni.getStorageSync('password');\n    var url = this.$store.state.url;\n    var username = this.$store.state.username;\n    var userpwd = this.$store.state.userpwd;\n    var ischecked = false;\n    if (!server) server = url;\n    if (!account) account = username;\n    if (account && password) ischecked = true;\n    // console.log(url);\n    return {\n      login: \"开始登录\",\n      userServer: server,\n      userName: account,\n      userPwd: password,\n      ischecked: ischecked,\n      version: \"1.0.0\",\n      downloadUrl: \"\",\n      //安卓app下载链接\n      percentage: 0,\n      //下载进度\n      showBtns: true\n    };\n  },\n  onShow: function onShow() {\n    this.query(); //版本升级\n  },\n\n  watch: {\n    //监听进度条\n    percentage: function percentage(e) {\n      // console.log(e);\n      if (e >= 100) {\n        this.$refs.promotion.close();\n      }\n    }\n  },\n  // computed: mapState({\n  // \t// 从state中拿到数据 箭头函数可使代码更简练\n  // \thasLogin: state => state.hasLogin,\n  // \tloginprovider: state => state.loginProvider,\n  // \tappinfo:state=>state.appInfo\n  // }),\n  methods: {\n    //查询当前版本号\n    query: function query() {\n      var _this2 = this;\n      plus.runtime.getProperty(plus.runtime.appid, function (wgtinfo) {\n        __f__(\"log\", wgtinfo, \" at pages/login/index.vue:268\");\n        var version = wgtinfo.version; //客户端版本号\n        // var versionCode = parseInt(wgtinfo.versionCode); //客户端版本号编码\n        _this2.check(version); //检测是否需要更新\n      });\n    },\n    //检测是否需要更新\n    check: function check(version) {\n      var _this3 = this;\n      return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {\n        var ser, $this, url, dataInfo;\n        return _regenerator.default.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                if (_this3.userServer) {\n                  _context.next = 3;\n                  break;\n                }\n                uni.showModal({\n                  title: \"提示\",\n                  content: \"未输入网站地址,请重新配置输入!\",\n                  showCancel: false,\n                  confirmText: \"取消\"\n                });\n                return _context.abrupt(\"return\");\n              case 3:\n                ser = _this3.userServer.split('/');\n                $this = _this3;\n                if (ser[1] == 'mobox3') {\n                  //判断当前网址是否是mobox3\n                  url = 'http://' + _this3.userServer + '/Program/version.txt'; // console.log(url);\n                  uni.request({\n                    url: url,\n                    // 指定JS文件的完整路径\n                    method: 'GET',\n                    success: function success(res) {\n                      __f__(\"log\", res, \" at pages/login/index.vue:295\");\n                      if (res && res.statusCode === 200) {\n                        //获取当前版本号\n                        var VersionName = res.data; //更新包名称\n                        var versionInfo = res.data.split('_');\n                        var versionNum = versionInfo[2].replace(\".apk\", \"\"); //版本编码\n                        var VersionCode = versionInfo[2].replace(\".apk\", \"\").replace(\".\", \"\").replace(\".\", \"\"); //服务端版本号\n                        // this.downloadUrl = resp.PdaUrl+\"/\"+VersionName; //app下载链接\n                        $this.downloadUrl = \"http://\" + $this.userServer + \"/Program/\" + VersionName; //app下载链接this.\n                        var isver = $this.compare(versionNum, version);\n                        if (isver) {\n                          $this.$refs.promotion.open();\n                        } else {\n                          __f__(\"log\", '当前已是最新版本', \" at pages/login/index.vue:308\");\n                        }\n                      } else {\n                        // if(res.statusCode === 404){\n                        // \tuni.showModal({\n                        // \t\ttitle: \"提示\",\n                        // \t\tcontent: '请求失败,找不到更新包版本文档:'+url,\n                        // \t\tshowCancel: false,\n                        // \t\tconfirmText: \"取消\"\n                        // \t});\n                        // }\n                      }\n                    },\n                    fail: function fail(err) {\n                      // 错误处理逻辑\n                      uni.showModal({\n                        title: \"错误\",\n                        content: '获取' + url + '文件失败:' + err,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                    }\n                  });\n                } else {\n                  dataInfo = {\n                    server: _this3.userServer\n                  };\n                  _this3.$store.dispatch('GetApkVersionInfo', dataInfo).then(function (success) {\n                    __f__(\"log\", success, \" at pages/login/index.vue:336\");\n                    if (success.code == '00000') {\n                      var resp = success.data;\n                      if (resp) {\n                        // const obj = resp.data.filter(item => {\n                        // \treturn item.groupName == 'version'\n                        // })\n                        //获取当前版本号\n                        var VersionName = resp.VersionName; //更新包名称\n                        var VersionCode = resp.VersionCode; //版本编码\n                        var versionNum = resp.Version; //服务端版本号\n                        // this.downloadUrl = resp.PdaUrl+\"/\"+VersionName; //app下载链接\n                        $this.downloadUrl = \"http://\" + $this.userServer + \"/Program/\" + VersionName; //app下载链接this.\n                        var isver = $this.compare(versionNum, version);\n                        if (isver) {\n                          $this.$refs.promotion.open();\n                        } else {\n                          __f__(\"log\", '当前已是最新版本', \" at pages/login/index.vue:353\");\n                        }\n                      }\n                    } else {\n                      uni.showModal({\n                        title: \"错误\",\n                        content: success.msg,\n                        showCancel: false,\n                        confirmText: \"取消\"\n                      });\n                    }\n                  }).catch(function (ex) {\n                    __f__(\"log\", ex, \" at pages/login/index.vue:365\");\n                    uni.showModal({\n                      title: \"错误\",\n                      content: ex.errMsg ? ex.errMsg : ex.message,\n                      showCancel: false,\n                      confirmText: \"取消\"\n                    });\n                  });\n                }\n              case 6:\n              case \"end\":\n                return _context.stop();\n            }\n          }\n        }, _callee);\n      }))();\n    },\n    compare: function compare(curV, reqV) {\n      var arr1 = curV.toString().split('.');\n      var arr2 = reqV.toString().split('.');\n      //将两个版本号拆成数字\n      var minL = Math.min(arr1.length, arr2.length);\n      var pos = 0; //当前比较位\n      var diff = 0; //当前为位比较是否相等\n      var flag = false;\n      //逐个比较如果当前位相等则继续比较下一位\n      while (pos < minL) {\n        diff = parseInt(arr1[pos]) - parseInt(arr2[pos]);\n        if (diff == 0) {\n          pos++;\n          continue;\n        } else if (diff > 0) {\n          flag = true;\n          break;\n        } else {\n          flag = false;\n          break;\n        }\n      }\n      return flag;\n    },\n    //确认更新\n    sure: function sure() {\n      //关闭按钮\n      this.showBtns = false;\n      var sys = uni.getSystemInfoSync().platform; //检查系统\n      if (sys == \"ios\") {\n        // this.getIosInfo()\n      } else if (sys == \"android\") {\n        this.updateAPP(); // 调用下载方法app内下载\n      }\n    },\n    //取消更新\n    cancel: function cancel() {\n      this.$refs.promotion.close();\n    },\n    //链接苹果商店下载\n    // getIosInfo() {\n    // \tlet appleId = \"你的appid\"\n    // \tplus.runtime.launchApplication({\n    // \t\taction: \"itms-apps://itunes.apple.com/cn/app/id\" + appleId + \"?mt=8\"\n    // \t}, function(e) {\n    // \t\tconsole.log('Open system default browser failed: ' + e.message);\n    // \t});\n    // },\n    //安卓更新\n    updateAPP: function updateAPP() {\n      var _this = this;\n      var url = this.downloadUrl;\n      // 官方API\n      var dtask = plus.downloader.createDownload(url, {}, function (d, status) {\n        //d为下载的文件对象\n        if (status == 200) {\n          //下载成功,d.filename是文件在保存在本地的相对路径,使用下面的API可转为平台绝对路径\n          var fileSaveUrl = plus.io.convertLocalFileSystemURL(d.filename);\n          plus.runtime.openFile(d.filename); //选择软件打开文件\n          uni.showToast({\n            icon: 'none',\n            title: '更新成功'\n          });\n          _this.$refs.promotion.close();\n        } else {\n          //下载失败\n          plus.downloader.clear(); //清除下载任务\n          uni.showToast({\n            icon: 'none',\n            title: '更新失败'\n          });\n          _this.showBtns = false;\n        }\n      });\n      //开始下载\n      dtask.start();\n      //监听下载进度\n      dtask.addEventListener('statechanged', function (task) {\n        _this.percentage = parseInt(parseFloat(task.downloadedSize) / parseFloat(task.totalSize) * 100);\n        if (_this.percentage == 100) {\n          _this.$refs.promotion.close();\n        }\n        __f__(\"log\", '下载进度:' + _this.percentage, \" at pages/login/index.vue:458\");\n      });\n    },\n    // ...mapMutations({\n    // \tmutatLogin:'login'\n    // }),\n    // ...mapActions({\n    // \tactionLogin:'login'\n    // }),\n    inputDialogToggle: function inputDialogToggle() {\n      this.$refs.inputDialog.open();\n    },\n    dialogInputConfirm: function dialogInputConfirm(val) {\n      // console.log(val);\n      // uni.showLoading({\n      // \ttitle: '3秒后会关闭'\n      // })\n      // setTimeout(() => {\n      // uni.hideLoading();\n      this.userServer = val;\n      uni.setStorageSync('server', val);\n      // this.value = val\n      // 关闭窗口后,恢复默认内容\n      this.$refs.inputDialog.close();\n      this.query(); //版本升级\n      // }, 3000)\n      // }, 3000)\n    },\n    rememberPwd: function rememberPwd(e) {\n      //记住密码\n      __f__(\"log\", e.target, \" at pages/login/index.vue:488\");\n      uni.setStorageSync('account', '');\n      uni.setStorageSync('password', '');\n      if (e.target.value[0] == '1') {\n        uni.setStorageSync('account', this.userName);\n        uni.setStorageSync('password', this.userPwd);\n      }\n    },\n    // getCookie(key){\n    // \tif(document.cookie.length>0){\n    // \t\tvar start = document.cookie.indexOf(key +'=');\n    // \t\tif(start !== -1){\n    // \t\t\tstart = start+key.length+1;\n    // \t\t\tvar end = document.cookie.indexOf(';',start);\n    // \t\t\tif(end === -1) end=document.cookie.length;\n    // \t\t\treturn document.cookie.substring(start,end);\n    // \t\t}\n    // \t}\n    // \treturn '';\n    // },\n    // setCookie(cName,value,expiredays){\n    // \tvar exdate = new Date();\n    // \texdate.setDate(exdate.getDate(),expiredays)\n    // \tdocument.cookie = cName+'='+ documentURLComponent(value)+\n    // \t((expiredays==null)?'':';expires='+exdate.toGMTString());\n    // },\n    logind: function logind() {\n      var _this4 = this;\n      if (!this.userServer) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未输入网站地址,请重新配置输入!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      if (!this.userName) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未输入用户名,请重新输入!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      if (!this.userPwd) {\n        uni.showModal({\n          title: \"提示\",\n          content: \"未输入密码,请重新输入!\",\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        return;\n      }\n      //检查 \"登录状态/锁屏状态\" 结束\n      var loginInfo = {\n        server: this.userServer,\n        uname: this.userName,\n        pwd: this.userPwd,\n        cname: plus.device.model,\n        type: \"0\"\n      };\n      __f__(\"log\", loginInfo, \" at pages/login/index.vue:551\");\n      this.$data.login = \"loading......\";\n      //登录\n      this.$store.dispatch('login', loginInfo).then(function (success) {\n        __f__(\"log\", success, \" at pages/login/index.vue:556\");\n        if (success.code == '00000' || success.err_code == 0) {\n          //登录成功后清空缓存数据\n          _this4.$store.commit(\"areaFunc\", null);\n          _this4.$store.commit(\"classAttrList\", null);\n          _this4.$store.commit(\"classGridStyleInfo\", null);\n          _this4.$store.commit(\"dicValueInfo\", null);\n          _this4.$store.commit(\"subClassAttrList\", null);\n          _this4.$store.commit(\"subClassGridStyleInfo\", null);\n          //设置全局参数:user-用户信息\n          uni.setStorageSync('server', loginInfo.server);\n          uni.setStorageSync('account', loginInfo.uname);\n          uni.setStorageSync('password', loginInfo.pwd);\n          // this.mutatLogin({loginid:success});\n          _this4.$store.commit('login', {\n            loginid: success\n          });\n          uni.navigateTo({\n            url: '../index/index?args=9999999999'\n          });\n          // uni.redirectTo({\n          // \turl:'../index/index?args=9999999999'\n          // });\n          _this4.login = \"开始登录\";\n        } else {\n          uni.showModal({\n            title: \"错误\",\n            content: success.msg,\n            showCancel: false,\n            confirmText: \"取消\"\n          });\n          _this4.login = \"开始登录\";\n        }\n      }).catch(function (ex) {\n        __f__(\"log\", ex, \" at pages/login/index.vue:591\");\n        uni.showModal({\n          title: \"错误\",\n          content: ex.errMsg,\n          showCancel: false,\n          confirmText: \"取消\"\n        });\n        _this4.login = \"开始登录\";\n      });\n    }\n  },\n  onLoad: function onLoad() {\n    var _this5 = this;\n    //获取mac地址\n    var net = plus.android.importClass(\"java.net.NetworkInterface\");\n    var wl0 = net.getByName('wlan0');\n    var macByte = wl0.getHardwareAddress();\n    var deviceId = '';\n    //下面这段代码来自网络  \n    for (var i = 0; i < macByte.length; i++) {\n      var tmp = \"\";\n      var num = macByte[i];\n      if (num < 0) {\n        tmp = (255 + num + 1).toString(16);\n      } else {\n        tmp = num.toString(16);\n      }\n      if (tmp.length == 1) {\n        tmp = \"0\" + tmp;\n      }\n      deviceId += tmp;\n    }\n    //78b8d67511ca\n    this.$store.commit(\"setDeviceId\", deviceId);\n    __f__(\"log\", 'Android设备的deviceId:', deviceId, \" at pages/login/index.vue:624\");\n    plus.runtime.getProperty(plus.runtime.appid, function (info) {\n      // console.log(info);\n      _this5.$data.version = info.version;\n    });\n  }\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 18)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbG9naW4vaW5kZXgudnVlIl0sIm5hbWVzIjpbImNvbXBvbmVudHMiLCJjbWRQcm9ncmVzcyIsImRhdGEiLCJzZXJ2ZXIiLCJhY2NvdW50IiwiaXNjaGVja2VkIiwibG9naW4iLCJ1c2VyU2VydmVyIiwidXNlck5hbWUiLCJ1c2VyUHdkIiwidmVyc2lvbiIsImRvd25sb2FkVXJsIiwicGVyY2VudGFnZSIsInNob3dCdG5zIiwib25TaG93Iiwid2F0Y2giLCJtZXRob2RzIiwicXVlcnkiLCJwbHVzIiwiY2hlY2siLCJ1bmkiLCJ0aXRsZSIsImNvbnRlbnQiLCJzaG93Q2FuY2VsIiwiY29uZmlybVRleHQiLCJzZXIiLCIkdGhpcyIsInVybCIsIm1ldGhvZCIsInN1Y2Nlc3MiLCJmYWlsIiwiZGF0YUluZm8iLCJjb21wYXJlIiwiZGlmZiIsInBvcyIsImZsYWciLCJzdXJlIiwiY2FuY2VsIiwidXBkYXRlQVBQIiwiaWNvbiIsIl90aGlzIiwiZHRhc2siLCJwYXJzZUZsb2F0IiwiaW5wdXREaWFsb2dUb2dnbGUiLCJkaWFsb2dJbnB1dENvbmZpcm0iLCJyZW1lbWJlclB3ZCIsImxvZ2luZCIsInVuYW1lIiwicHdkIiwiY25hbWUiLCJ0eXBlIiwibG9naW5pZCIsIm9uTG9hZCIsInRtcCIsImRldmljZUlkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUE4TUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBLGVBQ0E7RUFDQUE7SUFDQUM7RUFDQTtFQUNBQztJQUNB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TUFDQTtRQUNBMUI7VUFDQUM7VUFDQUM7VUFDQUM7VUFDQUM7UUFDQTtRQUNBO01BQ0E7TUFDQTtRQUNBSjtVQUNBQztVQUNBQztVQUNBQztVQUNBQztRQUNBO1FBQ0E7TUFDQTtNQUNBO1FBQ0FKO1VBQ0FDO1VBQ0FDO1VBQ0FDO1VBQ0FDO1FBQ0E7UUFDQTtNQUNBO01BQ0E7TUFDQTtRQUNBckI7UUFDQTRDO1FBQ0FDO1FBQ0FDO1FBQ0FDO01BQ0E7TUFDQTtNQUVBO01BQ0E7TUFDQTtRQUNBO1FBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E5QjtVQUNBQTtVQUNBQTtVQUNBO1VBQ0E7WUFDQStCO1VBQ0E7VUFDQS9CO1lBQ0FPO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtRQUVBO1VBQ0FQO1lBQ0FDO1lBQ0FDO1lBQ0FDO1lBQ0FDO1VBQ0E7VUFDQTtRQUNBO01BQ0E7UUFDQTtRQUNBSjtVQUNBQztVQUNBQztVQUNBQztVQUNBQztRQUNBO1FBQ0E7TUFDQTtJQUNBO0VBQ0E7RUFDQTRCO0lBQUE7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtNQUNBO01BQ0E7TUFDQTtRQUNBQztNQUNBO1FBQ0FBO01BQ0E7TUFDQTtRQUNBQTtNQUNBO01BQ0FDO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFFQXBDO01BQ0E7TUFDQTtJQUNBO0VBQ0E7QUFDQTtBQUFBLDJCIiwiZmlsZSI6IjU2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiPHN0eWxlPlxyXG5cdGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcclxuXHRcdGZvbnQtc2l6ZTogMTJycHg7XHJcblx0fVxyXG5cclxuXHQjaGVhZHIge1xyXG5cdFx0YmFja2dyb3VuZDogIzQzNDM0MztcclxuXHRcdC8qIHdpZHRoOiAzNzVweDsgKi9cclxuXHRcdGhlaWdodDogMjUwcnB4O1xyXG5cdFx0dGV4dC1hbGlnbjogY2VudGVyO1xyXG5cdFx0YmFja2dyb3VuZC1jb2xvcjogIzQzOEVCOTtcclxuXHRcdC8qIGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi8uLi9pbWFnZXMvbG9naW4vcm9vdC5wbmcpICFpbXBvcnRhbnQ7XHJcblx0XHRiYWNrZ3JvdW5kLXNpemU6IGNvdmVyICFpbXBvcnRhbnQ7IFxyXG5cdFx0YmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdCAhaW1wb3J0YW50OyAqL1xyXG5cdH1cclxuXHJcblx0LlNldFNlcnZlciB7XHJcblx0XHRmbG9hdDogbGVmdDtcclxuXHRcdG1hcmdpbi1sZWZ0OiAyMHJweDtcclxuXHR9XHJcblxyXG5cdC5jaGVja19yZW1lbWJlclB3ZCB7XHJcblx0XHRtYXJnaW4tdG9wOiAyMHJweDtcclxuXHRcdG1hcmdpbi1sZWZ0OiAyMHJweDtcclxuXHR9XHJcblxyXG5cdC5sb2dvIHtcclxuXHRcdGhlaWdodDogMTgwcnB4O1xyXG5cdFx0d2lkdGg6IDE4MHJweDtcclxuXHRcdG1hcmdpbi10b3A6IDE3MHJweDtcclxuXHR9XHJcblxyXG5cdC5sb2dvX2lucHV0IHtcclxuXHRcdGhlaWdodDogNDBycHg7XHJcblx0XHR3aWR0aDogNDBycHg7XHJcblx0XHRtYXJnaW4tbGVmdDogNDBycHg7XHJcblx0fVxyXG5cclxuXHQubG9nb19pY29uIHtcclxuXHRcdGhlaWdodDogNTBycHg7XHJcblx0XHR3aWR0aDogNTBycHg7XHJcblx0XHRtYXJnaW4tbGVmdDogMTVycHg7XHJcblx0XHRtYXJnaW4tdG9wOiAyMHJweDtcclxuXHR9XHJcblxyXG5cdC5tdWktY29udGVudCB7XHJcblx0XHRoZWlnaHQ6IDEwMCU7XHJcblx0XHRwYWRkaW5nLXRvcDogMTQwcnB4O1xyXG5cdFx0YmFja2dyb3VuZDogI0ZGRkZGRjtcclxuXHRcdHotaW5kZXg6IDE7XHJcblx0fVxyXG5cclxuXHQubXVpLWlucHV0LWdyb3VwIC5sYV9pY29uIHtcclxuXHRcdHdpZHRoOiAxMDBycHg7XHJcblx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XHJcblx0XHRmb250LWZhbWlseTogJ0hlbHZldGljYSBOZXVlJywgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xyXG5cdFx0bGluZS1oZWlnaHQ6IDEuNTtcclxuXHRcdGZsb2F0OiBsZWZ0O1xyXG5cdFx0cGFkZGluZzogN3B4IDEzcHg7XHJcblx0fVxyXG5cclxuXHQubXVpLWlucHV0LWdyb3VwIC5tdWktaW5wdXQtcm93IHtcclxuXHRcdGhlaWdodDogODVycHg7XHJcblx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XHJcblx0XHRjbGVhcjogbGVmdDtcclxuXHRcdG92ZXJmbG93OiBoaWRkZW47XHJcblx0fVxyXG5cclxuXHQubXVpLWlucHV0LXJvdzpmaXJzdC1jaGlsZCB7XHJcblx0XHRib3JkZXItdG9wOiAxcHggc29saWQgI2M4YzdjYztcclxuXHR9XHJcblxyXG5cdC5tdWktaW5wdXQtcm93Omxhc3QtY2hpbGQge1xyXG5cdFx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNjOGM3Y2M7XHJcblx0fVxyXG5cclxuXHQubXVpLWlucHV0LWdyb3VwIC5tdWktaW5wdXQtcm93Omxhc3QtY2hpbGQ6YWZ0ZXIge1xyXG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuXHR9XHJcblxyXG5cdC5tdWktaW5wdXQtZ3JvdXAgLm11aS1pbnB1dC1yb3c6YWZ0ZXIge1xyXG5cdFx0cG9zaXRpb246IGFic29sdXRlO1xyXG5cdFx0cmlnaHQ6IDA7XHJcblx0XHRib3R0b206IDA7XHJcblx0XHRsZWZ0OiAxNXB4O1xyXG5cdFx0aGVpZ2h0OiAxcHg7XHJcblx0XHRjb250ZW50OiAnJztcclxuXHRcdHRyYW5zZm9ybTogc2NhbGVZKC41KTtcclxuXHRcdGJhY2tncm91bmQtY29sb3I6ICNjOGM3Y2M7XHJcblx0fVxyXG5cclxuXHQubXVpLWlucHV0LXJvdyBpbnB1dCB7XHJcblx0XHRmb250LWZhbWlseTogJ0hlbHZldGljYSBOZXVlJywgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xyXG5cdFx0Zm9udC1zaXplOiAxNXB4O1xyXG5cdFx0d2lkdGg6IDQ4MHJweDtcclxuXHRcdC8qIGZsb2F0OiByaWdodDsgKi9cclxuXHRcdG1hcmdpbi1ib3R0b206IDA7XHJcblx0XHRwYWRkaW5nLWxlZnQ6IDIwcnB4O1xyXG5cdFx0LyogcGFkZGluZy1yaWdodDogMTBycHg7ICovXHJcblx0XHQvKiBsaW5lLWhlaWdodDogMzBycHg7ICovXHJcblx0XHRoZWlnaHQ6IDg1cnB4O1xyXG5cdFx0LyogcGFkZGluZzogN3B4IDQwcHggN3B4IDBweDsgKi9cclxuXHRcdC13ZWJraXQtdXNlci1zZWxlY3Q6IHRleHQ7XHJcblx0XHQvKiBib3JkZXI6IDA7ICovXHJcblx0XHQvKiBib3JkZXItcmFkaXVzOiAwOyAqL1xyXG5cdFx0Ym94LXNoYWRvdzogbm9uZTtcclxuXHRcdG91dGxpbmU6IDA7XHJcblx0XHRiYWNrZ3JvdW5kOiAwIDA7XHJcblx0XHQtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XHJcblx0fVxyXG5cclxuXHQubXVpLWlucHV0LWdyb3VwIGxhYmVsLm11aS1uYXZpZ2F0ZS1yaWdodCB7XHJcblx0XHRmb250LXNpemU6IDI1cHg7XHJcblx0XHRmbG9hdDogcmlnaHQ7XHJcblx0XHRwYWRkaW5nOiAwO1xyXG5cdFx0d2lkdGg6IDgwcnB4O1xyXG5cdFx0bWFyZ2luLXJpZ2h0OiA1cnB4O1xyXG5cdFx0bWFyZ2luLXRvcDogLTg4cnB4O1xyXG5cdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdH1cclxuXHJcblx0YnV0dG9uLmJ0bl9sb2dpbiB7XHJcblx0XHRtYXJnaW4tdG9wOiA1MHJweDtcclxuXHRcdHBhZGRpbmc6IDIwcnB4O1xyXG5cdFx0bGluZS1oZWlnaHQ6IDEuNTtcclxuXHRcdGJhY2tncm91bmQ6ICMyN0E2RTE7XHJcblx0XHRib3JkZXI6IG5vbmU7XHJcblx0XHRjb2xvcjogI2ZmZjtcclxuXHR9XHJcbjwvc3R5bGU+XHJcblxyXG5cclxuPHRlbXBsYXRlPlxyXG5cdDx2aWV3IGNsYXNzPVwiXCIgc3R5bGU9XCJ3aWR0aDogMTAwdnc7aGVpZ2h0OiA2NHZoO1wiPlxyXG5cdFx0PGRpdiBpZD1cImhlYWRyXCIgY2xhc3M9XCJtdWktYmFyIG11aS1iYXItbmF2XCI+XHJcblx0XHRcdDxpbWFnZSBjbGFzcz1cImxvZ29cIiBzcmM9XCIuLi8uLi9pbWFnZXMvbG9naW4vbW9ib3hfbG9nXzIwMC5wbmdcIj48L2ltYWdlPlxyXG5cdFx0PC9kaXY+XHJcblx0XHQ8ZGl2IGNsYXNzPVwibXVpLWNvbnRlbnRcIj5cclxuXHRcdFx0PGZvcm0gaWQ9J2xvZ2luLWZvcm0nIGNsYXNzPVwibXVpLWlucHV0LWdyb3VwXCI+XHJcblx0XHRcdFx0PGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwiU2V0U2VydmVyXCIgQGNsaWNrPVwiaW5wdXREaWFsb2dUb2dnbGVcIj7phY3nva48L2E+XHJcblx0XHRcdFx0PCEtLSA8ZGl2IGNsYXNzPVwibXVpLWlucHV0LXJvd1wiPlxyXG5cdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwibGFfaWNvblwiPjxpbWFnZSBjbGFzcz1cImxvZ29faW5wdXRcIiBzcmM9XCIuLi8uLi9pbWFnZXMvbG9naW4vc3ZyXzMwLnBuZ1wiPjwvaW1hZ2U+PC9sYWJlbD5cclxuXHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwibXVpLWlucHV0XCIgdi1tb2RlbD1cInVzZXJTZXJ2ZXJcIiBwbGFjZWhvbGRlcj1cIuacjeWKoeWZqOWcsOWdgFwiPlxyXG5cdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwibXVpLW5hdmlnYXRlLXJpZ2h0XCIgaWQ9XCJzZXJzZWxcIj48aW1hZ2UgY2xhc3M9XCJsb2dvX2ljb25cIiBzcmM9XCIuLi8uLi9pbWFnZXMvbG9naW4vc2VsX2xlZnQucG5nXCIgPjwvaW1hZ2U+PC9sYWJlbD5cclxuXHRcdFx0XHQ8L2Rpdj4gLS0+XHJcblx0XHRcdFx0PGRpdiBjbGFzcz1cIm11aS1pbnB1dC1yb3dcIj5cclxuXHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cImxhX2ljb25cIj5cclxuXHRcdFx0XHRcdFx0PGltYWdlIGNsYXNzPVwibG9nb19pbnB1dFwiIHNyYz1cIi4uLy4uL2ltYWdlcy9sb2dpbi9wZXJzb25fMzAucG5nXCI+PC9pbWFnZT5cclxuXHRcdFx0XHRcdDwvbGFiZWw+XHJcblx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cIm11aS1pbnB1dFwiIHYtbW9kZWw9XCJ1c2VyTmFtZVwiIHBsYWNlaG9sZGVyPVwi6K+36L6T5YWl6LSm5Y+3XCI+XHJcblx0XHRcdFx0XHQ8IS0tIDxsYWJlbCBjbGFzcz1cIm11aS1uYXZpZ2F0ZS1yaWdodFwiIGlkPVwibmFtc2VsXCI+PGltYWdlIGNsYXNzPVwibG9nb19pY29uXCIgc3JjPVwiLi4vLi4vaW1hZ2VzL2xvZ2luL3VzZXItcGhvdG8ucG5nPC9pbWFnZT48L2xhYmVsPiAtLT5cclxuXHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwibXVpLWlucHV0LXJvd1wiPlxyXG5cdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwibGFfaWNvblwiPlxyXG5cdFx0XHRcdFx0XHQ8aW1hZ2UgY2xhc3M9XCJsb2dvX2lucHV0XCIgc3JjPVwiLi4vLi4vaW1hZ2VzL2xvZ2luL2xvY2tfMzAucG5nXCI+PC9pbWFnZT5cclxuXHRcdFx0XHRcdDwvbGFiZWw+XHJcblx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInBhc3N3b3JkXCIgY2xhc3M9XCJtdWktaW5wdXRcIiB2LW1vZGVsPVwidXNlclB3ZFwiIHBsYWNlaG9sZGVyPVwi6K+36L6T5YWl5a+G56CBXCI+XHJcblx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PGNoZWNrYm94LWdyb3VwIGNsYXNzPVwiY2hlY2tfcmVtZW1iZXJQd2RcIiBAY2hhbmdlPVwicmVtZW1iZXJQd2RcIj5cclxuXHRcdFx0XHRcdDxsYWJlbD5cclxuXHRcdFx0XHRcdFx0PGNoZWNrYm94IHZhbHVlPVwiMVwiIDpjaGVja2VkPVwiaXNjaGVja2VkXCIgLz5cclxuXHRcdFx0XHRcdFx0PHRleHQ+6K6w5L2P5a+G56CBPC90ZXh0PlxyXG5cdFx0XHRcdFx0PC9sYWJlbD5cclxuXHRcdFx0XHQ8L2NoZWNrYm94LWdyb3VwPlxyXG5cdFx0XHQ8L2Zvcm0+XHJcblx0XHRcdDxidXR0b24gaWQ9J2xvZ2luJyB0eXBlPVwiZGVmYXVsdFwiIEB0YXA9XCJsb2dpbmRcIiBjbGFzcz1cImJ0bl9sb2dpblwiPnt7bG9naW59fTwvYnV0dG9uPlxyXG5cdFx0XHQ8cCBzdHlsZT1cImZsb2F0OnJpZ2h0OyBtYXJnaW46IDEwcHggMTBweDtjb2xvcjojYzhjN2NjXCI+XHJcblx0XHRcdFx0PHNwYW4+54mI5pys5Y+377yaPC9zcGFuPlxyXG5cdFx0XHRcdDxzcGFuPnt7dmVyc2lvbn19PC9zcGFuPlxyXG5cdFx0XHQ8L3A+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJcIlxyXG5cdFx0XHRcdHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO2JhY2tncm91bmQ6IHdoaXRlO2JvcmRlci10b3A6IDBweCBzb2xpZCAjQzBDMEMwO2NvbG9yOiAjN2NkMGY4O3Bvc2l0aW9uOiBhYnNvbHV0ZTtib3R0b206IDA7d2lkdGg6IDEwMCU7aGVpZ2h0OiAyNHB4O3BhZGRpbmctdG9wOjNweDtmb250LXNpemU6IDExcHg7XCI+XHJcblx0XHRcdDwvZGl2PlxyXG5cdFx0PC9kaXY+XHJcblx0XHQ8dmlldz5cclxuXHRcdFx0PCEtLSDovpPlhaXmoYbnpLrkvosgLS0+XHJcblx0XHRcdDx1bmktcG9wdXAgcmVmPVwiaW5wdXREaWFsb2dcIiB0eXBlPVwiZGlhbG9nXCI+XHJcblx0XHRcdFx0PHVuaS1wb3B1cC1kaWFsb2cgcmVmPVwiaW5wdXRDbG9zZVwiIG1vZGU9XCJpbnB1dFwiIHRpdGxlPVwi6K6+572uXCIgOnZhbHVlPVwidXNlclNlcnZlclwiIHBsYWNlaG9sZGVyPVwi6K+36L6T5YWl5YaF5a65XCJcclxuXHRcdFx0XHRcdEBjb25maXJtPVwiZGlhbG9nSW5wdXRDb25maXJtXCI+PC91bmktcG9wdXAtZGlhbG9nPlxyXG5cdFx0XHQ8L3VuaS1wb3B1cD5cclxuXHRcdFx0PCEtLSDniYjmnKzljYfnuqflvLnnqpflvIDlp4sgLS0+XHJcblx0XHRcdDx1bmktcG9wdXAgcmVmPVwicHJvbW90aW9uXCIgdHlwZT1cImNlbnRlclwiPlxyXG5cdFx0XHRcdDx2aWV3IGNsYXNzPVwicHJvbW90aW9uXCIgc3R5bGU9XCJ3aWR0aDogNzAwcnB4O3BhZGRpbmc6MjBycHggNDBycHg7IGJhY2tncm91bmQ6IHdoaXRlO2ZvbnQtc2l6ZTogMzZycHg7XCI+XHJcblx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cIm9wZXJhdGVzXCIgdi1pZj1cInNob3dCdG5zPT10cnVlXCI+XHJcblx0XHRcdFx0XHRcdDx2aWV3IHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO3BhZGRpbmctdG9wOjIwcnB4O3BhZGRpbmctYm90dG9tOiA0MHJweDtcIj5cclxuXHRcdFx0XHRcdFx0XHTns7vnu5/mnInmlrDniYjmnKzvvIzmmK/lkKbpnIDopoHmm7TmlrBcclxuXHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHQ8dGV4dCBAY2xpY2s9XCJjYW5jZWxcIlxyXG5cdFx0XHRcdFx0XHRcdHN0eWxlPVwiZGlzcGxheTogaW5saW5lLWJsb2NrO2NvbG9yOiAjN2NkMGY4O3dpZHRoOiA1MCU7IHRleHQtYWxpZ246IGNlbnRlcjtcIj7lj5bmtog8L3RleHQ+XHJcblx0XHRcdFx0XHRcdDx0ZXh0IEBjbGljaz1cInN1cmVcIlxyXG5cdFx0XHRcdFx0XHRcdHN0eWxlPVwiZGlzcGxheTogaW5saW5lLWJsb2NrO2NvbG9yOiAjN2NkMGY4O3dpZHRoOiA1MCU7IHRleHQtYWxpZ246IGNlbnRlcjtcIj7noa7orqQ8L3RleHQ+XHJcblx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHQ8dmlldyBjbGFzcz1cIm9wZXJhdGVzXCIgdi1lbHNlPlxyXG5cdFx0XHRcdFx0XHQ8Y21kLXByb2dyZXNzIDpwZXJjZW50PVwicGVyY2VudGFnZVwiIHN0cm9rZS1jb2xvcj1cImxpbmVhci1ncmFkaWVudCh0byByaWdodCwgI2VmMzJkOSwgIzg5ZmZmZClcIj5cclxuXHRcdFx0XHRcdFx0PC9jbWQtcHJvZ3Jlc3M+XHJcblx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8L3VuaS1wb3B1cD5cclxuXHRcdFx0PCEtLSDniYjmnKzljYfnuqflvLnnqpfnu5PmnZ8gLS0+XHJcblx0XHQ8L3ZpZXc+XHJcblxyXG5cdDwvdmlldz5cclxuXHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c2NyaXB0PlxyXG5cdGltcG9ydCBjbWRQcm9ncmVzcyBmcm9tIFwiQC9jb21wb25lbnRzL2NtZC1wcm9ncmVzcy9jbWQtcHJvZ3Jlc3MudnVlXCJcclxuXHQvLyBpbXBvcnQge1xyXG5cdC8vIFx0bWFwU3RhdGUsXHJcblx0Ly8gXHRtYXBNdXRhdGlvbnMsXHJcblx0Ly8gXHRtYXBBY3Rpb25zICxcclxuXHQvLyB9IGZyb20gJ3Z1ZXgnXHJcblx0ZXhwb3J0IGRlZmF1bHQge1xyXG5cdFx0Y29tcG9uZW50czoge1xyXG5cdFx0XHRjbWRQcm9ncmVzc1xyXG5cdFx0fSxcclxuXHRcdGRhdGEoKSB7XHJcblx0XHRcdC8v6I635Y+W5YWo5bGA5Y+C5pWw77yadXJsLeacjeWKoeWZqOWcsOWdgFxyXG5cdFx0XHR2YXIgc2VydmVyID0gdW5pLmdldFN0b3JhZ2VTeW5jKCdzZXJ2ZXInKTtcclxuXHRcdFx0dmFyIGFjY291bnQgPSB1bmkuZ2V0U3RvcmFnZVN5bmMoJ2FjY291bnQnKTtcclxuXHRcdFx0dmFyIHBhc3N3b3JkID0gdW5pLmdldFN0b3JhZ2VTeW5jKCdwYXNzd29yZCcpO1xyXG5cdFx0XHR2YXIgdXJsID0gdGhpcy4kc3RvcmUuc3RhdGUudXJsO1xyXG5cdFx0XHR2YXIgdXNlcm5hbWUgPSB0aGlzLiRzdG9yZS5zdGF0ZS51c2VybmFtZTtcclxuXHRcdFx0dmFyIHVzZXJwd2QgPSB0aGlzLiRzdG9yZS5zdGF0ZS51c2VycHdkO1xyXG5cdFx0XHR2YXIgaXNjaGVja2VkID0gZmFsc2U7XHJcblx0XHRcdGlmICghc2VydmVyKVxyXG5cdFx0XHRcdHNlcnZlciA9IHVybDtcclxuXHRcdFx0aWYgKCFhY2NvdW50KVxyXG5cdFx0XHRcdGFjY291bnQgPSB1c2VybmFtZTtcclxuXHRcdFx0aWYgKGFjY291bnQgJiYgcGFzc3dvcmQpXHJcblx0XHRcdFx0aXNjaGVja2VkID0gdHJ1ZTtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2codXJsKTtcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRsb2dpbjogXCLlvIDlp4vnmbvlvZVcIixcclxuXHRcdFx0XHR1c2VyU2VydmVyOiBzZXJ2ZXIsXHJcblx0XHRcdFx0dXNlck5hbWU6IGFjY291bnQsXHJcblx0XHRcdFx0dXNlclB3ZDogcGFzc3dvcmQsXHJcblx0XHRcdFx0aXNjaGVja2VkOiBpc2NoZWNrZWQsXHJcblx0XHRcdFx0dmVyc2lvbjogXCIxLjAuMFwiLFxyXG5cdFx0XHRcdGRvd25sb2FkVXJsOiBcIlwiLCAvL+WuieWNk2FwcOS4i+i9vemTvuaOpVxyXG5cdFx0XHRcdHBlcmNlbnRhZ2U6IDAsIC8v5LiL6L296L+b5bqmXHJcblx0XHRcdFx0c2hvd0J0bnM6IHRydWUsXHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHRvblNob3coKSB7XHJcblx0XHRcdHRoaXMucXVlcnkoKTsgLy/niYjmnKzljYfnuqdcclxuXHRcdH0sXHJcblx0XHR3YXRjaDoge1xyXG5cdFx0XHQvL+ebkeWQrOi/m+W6puadoVxyXG5cdFx0XHRwZXJjZW50YWdlKGUpIHtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlKTtcclxuXHRcdFx0XHRpZiAoZSA+PSAxMDApIHtcclxuXHRcdFx0XHRcdHRoaXMuJHJlZnMucHJvbW90aW9uLmNsb3NlKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0Ly8gY29tcHV0ZWQ6IG1hcFN0YXRlKHtcclxuXHRcdC8vIFx0Ly8g5LuOc3RhdGXkuK3mi7/liLDmlbDmja4g566t5aS05Ye95pWw5Y+v5L2/5Luj56CB5pu0566A57uDXHJcblx0XHQvLyBcdGhhc0xvZ2luOiBzdGF0ZSA9PiBzdGF0ZS5oYXNMb2dpbixcclxuXHRcdC8vIFx0bG9naW5wcm92aWRlcjogc3RhdGUgPT4gc3RhdGUubG9naW5Qcm92aWRlcixcclxuXHRcdC8vIFx0YXBwaW5mbzpzdGF0ZT0+c3RhdGUuYXBwSW5mb1xyXG5cdFx0Ly8gfSksXHJcblx0XHRtZXRob2RzOiB7XHJcblx0XHRcdC8v5p+l6K+i5b2T5YmN54mI5pys5Y+3XHJcblx0XHRcdHF1ZXJ5KCkge1xyXG5cdFx0XHRcdC8vICNpZmRlZiBBUFAtUExVU1xyXG5cdFx0XHRcdHBsdXMucnVudGltZS5nZXRQcm9wZXJ0eShwbHVzLnJ1bnRpbWUuYXBwaWQsICh3Z3RpbmZvKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZyh3Z3RpbmZvKTtcclxuXHRcdFx0XHRcdHZhciB2ZXJzaW9uID0gd2d0aW5mby52ZXJzaW9uOyAvL+WuouaIt+err+eJiOacrOWPt1xyXG5cdFx0XHRcdFx0Ly8gdmFyIHZlcnNpb25Db2RlID0gcGFyc2VJbnQod2d0aW5mby52ZXJzaW9uQ29kZSk7IC8v5a6i5oi356uv54mI5pys5Y+357yW56CBXHJcblx0XHRcdFx0XHR0aGlzLmNoZWNrKHZlcnNpb24pIC8v5qOA5rWL5piv5ZCm6ZyA6KaB5pu05pawXHJcblx0XHRcdFx0fSlcclxuXHRcdFx0XHQvLyNlbmRpZlxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvL+ajgOa1i+aYr+WQpumcgOimgeabtOaWsFxyXG5cdFx0XHRhc3luYyBjaGVjayh2ZXJzaW9uKSB7XHJcblx0XHRcdFx0aWYgKCF0aGlzLnVzZXJTZXJ2ZXIpIHtcclxuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHR0aXRsZTogXCLmj5DnpLpcIixcclxuXHRcdFx0XHRcdFx0Y29udGVudDogXCLmnKrovpPlhaXnvZHnq5nlnLDlnYDvvIzor7fph43mlrDphY3nva7ovpPlhaXvvIFcIixcclxuXHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dmFyIHNlciA9IHRoaXMudXNlclNlcnZlci5zcGxpdCgnLycpO1xyXG5cdFx0XHRcdHZhciAkdGhpcyA9IHRoaXM7XHJcblx0XHRcdFx0aWYoc2VyWzFdID09ICdtb2JveDMnKXsgLy/liKTmlq3lvZPliY3nvZHlnYDmmK/lkKbmmK9tb2JveDNcclxuXHRcdFx0XHRcdHZhciB1cmwgPSAnaHR0cDovLycrdGhpcy51c2VyU2VydmVyKycvUHJvZ3JhbS92ZXJzaW9uLnR4dCc7XHJcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyh1cmwpO1xyXG5cdFx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0XHR1cmw6IHVybCwgLy8g5oyH5a6aSlPmlofku7bnmoTlrozmlbTot6/lvoRcclxuXHRcdFx0XHRcdFx0bWV0aG9kOiAnR0VUJyxcclxuXHRcdFx0XHRcdFx0c3VjY2VzcyhyZXMpIHtcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhyZXMpO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChyZXMgJiYgcmVzLnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly/ojrflj5blvZPliY3niYjmnKzlj7dcclxuXHRcdFx0XHRcdFx0XHRcdHZhciBWZXJzaW9uTmFtZSA9IHJlcy5kYXRhOyAvL+abtOaWsOWMheWQjeensFxyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHZlcnNpb25JbmZvID0gcmVzLmRhdGEuc3BsaXQoJ18nKTtcclxuXHRcdFx0XHRcdFx0XHRcdHZhciB2ZXJzaW9uTnVtID0gdmVyc2lvbkluZm9bMl0ucmVwbGFjZShcIi5hcGtcIiwgXCJcIik7IC8v54mI5pys57yW56CBXHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgVmVyc2lvbkNvZGUgPSB2ZXJzaW9uSW5mb1syXS5yZXBsYWNlKFwiLmFwa1wiLCBcIlwiKS5yZXBsYWNlKFwiLlwiLCBcIlwiKS5yZXBsYWNlKFwiLlwiLCBcIlwiKTsgLy/mnI3liqHnq6/niYjmnKzlj7dcclxuXHRcdFx0XHRcdFx0XHRcdC8vIHRoaXMuZG93bmxvYWRVcmwgPSByZXNwLlBkYVVybCtcIi9cIitWZXJzaW9uTmFtZTsgLy9hcHDkuIvovb3pk77mjqVcclxuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLmRvd25sb2FkVXJsID0gXCJodHRwOi8vXCIgKyAkdGhpcy51c2VyU2VydmVyICsgXCIvUHJvZ3JhbS9cIiArIFZlcnNpb25OYW1lOyAvL2FwcOS4i+i9vemTvuaOpXRoaXMuXHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgaXN2ZXIgPSAkdGhpcy5jb21wYXJlKHZlcnNpb25OdW0sdmVyc2lvbik7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoaXN2ZXIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJHJlZnMucHJvbW90aW9uLm9wZW4oKTtcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKCflvZPliY3lt7LmmK/mnIDmlrDniYjmnKwnKVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBpZihyZXMuc3RhdHVzQ29kZSA9PT0gNDA0KXtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBcdFx0dGl0bGU6IFwi5o+Q56S6XCIsXHJcblx0XHRcdFx0XHRcdFx0XHQvLyBcdFx0Y29udGVudDogJ+ivt+axguWksei0pe+8jOaJvuS4jeWIsOabtOaWsOWMheeJiOacrOaWh+aho++8micrdXJsLFxyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gXHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gXHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXHJcblx0XHRcdFx0XHRcdFx0XHQvLyBcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gfVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0ZmFpbChlcnIpIHtcclxuXHRcdFx0XHRcdFx0XHQvLyDplJnor6/lpITnkIbpgLvovpFcclxuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiBcIumUmeivr1wiLFxyXG5cdFx0XHRcdFx0XHRcdFx0Y29udGVudDogJ+iOt+WPlicrdXJsKyfmlofku7blpLHotKXvvJonKyBlcnIsXHJcblx0XHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0dmFyIGRhdGFJbmZvID0ge1xyXG5cdFx0XHRcdFx0XHRzZXJ2ZXI6IHRoaXMudXNlclNlcnZlclxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdHZXRBcGtWZXJzaW9uSW5mbycsIGRhdGFJbmZvKS50aGVuKHN1Y2Nlc3MgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhzdWNjZXNzKTtcclxuXHRcdFx0XHRcdFx0aWYgKHN1Y2Nlc3MuY29kZSA9PSAnMDAwMDAnKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHJlc3AgPSBzdWNjZXNzLmRhdGE7XHJcblx0XHRcdFx0XHRcdFx0aWYgKHJlc3ApIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIGNvbnN0IG9iaiA9IHJlc3AuZGF0YS5maWx0ZXIoaXRlbSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBcdHJldHVybiBpdGVtLmdyb3VwTmFtZSA9PSAndmVyc2lvbidcclxuXHRcdFx0XHRcdFx0XHRcdC8vIH0pXHJcblx0XHRcdFx0XHRcdFx0XHQvL+iOt+WPluW9k+WJjeeJiOacrOWPt1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgVmVyc2lvbk5hbWUgPSByZXNwLlZlcnNpb25OYW1lOyAvL+abtOaWsOWMheWQjeensFxyXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgVmVyc2lvbkNvZGUgPSByZXNwLlZlcnNpb25Db2RlOyAvL+eJiOacrOe8lueggVxyXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgdmVyc2lvbk51bSA9IHJlc3AuVmVyc2lvbjsgLy/mnI3liqHnq6/niYjmnKzlj7dcclxuXHRcdFx0XHRcdFx0XHRcdC8vIHRoaXMuZG93bmxvYWRVcmwgPSByZXNwLlBkYVVybCtcIi9cIitWZXJzaW9uTmFtZTsgLy9hcHDkuIvovb3pk77mjqVcclxuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLmRvd25sb2FkVXJsID0gXCJodHRwOi8vXCIgKyAkdGhpcy51c2VyU2VydmVyICsgXCIvUHJvZ3JhbS9cIiArIFZlcnNpb25OYW1lOyAvL2FwcOS4i+i9vemTvuaOpXRoaXMuXHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgaXN2ZXIgPSAkdGhpcy5jb21wYXJlKHZlcnNpb25OdW0sdmVyc2lvbik7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoaXN2ZXIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuJHJlZnMucHJvbW90aW9uLm9wZW4oKTtcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKCflvZPliY3lt7LmmK/mnIDmlrDniYjmnKwnKVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiBcIumUmeivr1wiLFxyXG5cdFx0XHRcdFx0XHRcdFx0Y29udGVudDogc3VjY2Vzcy5tc2csXHJcblx0XHRcdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pLmNhdGNoKGV4ID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZXgpO1xyXG5cdFx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0XHR0aXRsZTogXCLplJnor69cIixcclxuXHRcdFx0XHRcdFx0XHRjb250ZW50OiBleC5lcnJNc2cgPyBleC5lcnJNc2cgOiBleC5tZXNzYWdlLFxyXG5cdFx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRjb21wYXJlKGN1clYsIHJlcVYpIHtcclxuXHRcdFx0XHR2YXIgYXJyMSA9IGN1clYudG9TdHJpbmcoKS5zcGxpdCgnLicpO1xyXG5cdFx0XHQgICAgdmFyIGFycjIgPSByZXFWLnRvU3RyaW5nKCkuc3BsaXQoJy4nKTtcclxuXHRcdFx0ICAgIC8v5bCG5Lik5Liq54mI5pys5Y+35ouG5oiQ5pWw5a2XXHJcblx0XHRcdCAgICB2YXIgbWluTCA9IE1hdGgubWluKGFycjEubGVuZ3RoLCBhcnIyLmxlbmd0aCk7XHJcblx0XHRcdCAgICB2YXIgcG9zID0gMDsgLy/lvZPliY3mr5TovoPkvY1cclxuXHRcdFx0ICAgIHZhciBkaWZmID0gMDsgLy/lvZPliY3kuLrkvY3mr5TovoPmmK/lkKbnm7jnrYlcclxuXHRcdFx0ICAgIHZhciBmbGFnID0gZmFsc2U7XHJcblx0XHRcdCAgICAvL+mAkOS4quavlOi+g+WmguaenOW9k+WJjeS9jeebuOetieWImee7p+e7reavlOi+g+S4i+S4gOS9jVxyXG5cdFx0XHQgICAgd2hpbGUgKHBvcyA8IG1pbkwpIHtcclxuXHRcdFx0ICAgICAgICBkaWZmID0gcGFyc2VJbnQoYXJyMVtwb3NdKSAtIHBhcnNlSW50KGFycjJbcG9zXSk7XHJcblx0XHRcdCAgICAgICAgaWYgKGRpZmYgPT0gMCkge1xyXG5cdFx0XHQgICAgICAgICAgICBwb3MrKztcclxuXHRcdFx0ICAgICAgICAgICAgY29udGludWU7XHJcblx0XHRcdCAgICAgICAgfSBlbHNlIGlmIChkaWZmID4gMCkge1xyXG5cdFx0XHQgICAgICAgICAgICBmbGFnID0gdHJ1ZTtcclxuXHRcdFx0ICAgICAgICAgICAgYnJlYWs7XHJcblx0XHRcdCAgICAgICAgfSBlbHNlIHtcclxuXHRcdFx0ICAgICAgICAgICAgZmxhZyA9IGZhbHNlO1xyXG5cdFx0XHQgICAgICAgICAgICBicmVhaztcclxuXHRcdFx0ICAgICAgICB9XHJcblx0XHRcdCAgICB9XHJcblx0XHRcdCAgICByZXR1cm4gZmxhZztcclxuXHRcdFx0fSxcclxuXHRcdFx0Ly/noa7orqTmm7TmlrBcclxuXHRcdFx0c3VyZSgpIHtcclxuXHRcdFx0XHQvL+WFs+mXreaMiemSrlxyXG5cdFx0XHRcdHRoaXMuc2hvd0J0bnMgPSBmYWxzZTtcclxuXHRcdFx0XHRsZXQgc3lzID0gdW5pLmdldFN5c3RlbUluZm9TeW5jKCkucGxhdGZvcm0gLy/mo4Dmn6Xns7vnu59cclxuXHRcdFx0XHRpZiAoc3lzID09IFwiaW9zXCIpIHtcclxuXHRcdFx0XHRcdC8vIHRoaXMuZ2V0SW9zSW5mbygpXHJcblx0XHRcdFx0fSBlbHNlIGlmIChzeXMgPT0gXCJhbmRyb2lkXCIpIHtcclxuXHRcdFx0XHRcdHRoaXMudXBkYXRlQVBQKCkgLy8g6LCD55So5LiL6L295pa55rOVYXBw5YaF5LiL6L29XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvL+WPlua2iOabtOaWsFxyXG5cdFx0XHRjYW5jZWwoKSB7XHJcblx0XHRcdFx0dGhpcy4kcmVmcy5wcm9tb3Rpb24uY2xvc2UoKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0Ly/pk77mjqXoi7nmnpzllYblupfkuIvovb1cclxuXHRcdFx0Ly8gZ2V0SW9zSW5mbygpIHtcclxuXHRcdFx0Ly8gXHRsZXQgYXBwbGVJZCA9IFwi5L2g55qEYXBwaWRcIlxyXG5cdFx0XHQvLyBcdHBsdXMucnVudGltZS5sYXVuY2hBcHBsaWNhdGlvbih7XHJcblx0XHRcdC8vIFx0XHRhY3Rpb246IFwiaXRtcy1hcHBzOi8vaXR1bmVzLmFwcGxlLmNvbS9jbi9hcHAvaWRcIiArIGFwcGxlSWQgKyBcIj9tdD04XCJcclxuXHRcdFx0Ly8gXHR9LCBmdW5jdGlvbihlKSB7XHJcblx0XHRcdC8vIFx0XHRjb25zb2xlLmxvZygnT3BlbiBzeXN0ZW0gZGVmYXVsdCBicm93c2VyIGZhaWxlZDogJyArIGUubWVzc2FnZSk7XHJcblx0XHRcdC8vIFx0fSk7XHJcblx0XHRcdC8vIH0sXHJcblx0XHRcdC8v5a6J5Y2T5pu05pawXHJcblx0XHRcdHVwZGF0ZUFQUCgpIHtcclxuXHRcdFx0XHRsZXQgX3RoaXMgPSB0aGlzO1xyXG5cdFx0XHRcdGxldCB1cmwgPSB0aGlzLmRvd25sb2FkVXJsO1xyXG5cdFx0XHRcdC8vIOWumOaWuUFQSVxyXG5cdFx0XHRcdHZhciBkdGFzayA9IHBsdXMuZG93bmxvYWRlci5jcmVhdGVEb3dubG9hZCh1cmwsIHt9LCBmdW5jdGlvbihkLCBzdGF0dXMpIHtcclxuXHRcdFx0XHRcdC8vZOS4uuS4i+i9veeahOaWh+S7tuWvueixoVxyXG5cdFx0XHRcdFx0aWYgKHN0YXR1cyA9PSAyMDApIHtcclxuXHRcdFx0XHRcdFx0Ly/kuIvovb3miJDlip8sZC5maWxlbmFtZeaYr+aWh+S7tuWcqOS/neWtmOWcqOacrOWcsOeahOebuOWvuei3r+W+hO+8jOS9v+eUqOS4i+mdoueahEFQSeWPr+i9rOS4uuW5s+WPsOe7neWvuei3r+W+hFxyXG5cdFx0XHRcdFx0XHR2YXIgZmlsZVNhdmVVcmwgPSBwbHVzLmlvLmNvbnZlcnRMb2NhbEZpbGVTeXN0ZW1VUkwoZC5maWxlbmFtZSk7XHJcblx0XHRcdFx0XHRcdHBsdXMucnVudGltZS5vcGVuRmlsZShkLmZpbGVuYW1lKTsgLy/pgInmi6nova/ku7bmiZPlvIDmlofku7ZcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dUb2FzdCh7XHJcblx0XHRcdFx0XHRcdFx0aWNvbjogJ25vbmUnLFxyXG5cdFx0XHRcdFx0XHRcdHRpdGxlOiAn5pu05paw5oiQ5YqfJ1xyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0X3RoaXMuJHJlZnMucHJvbW90aW9uLmNsb3NlKCk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHQvL+S4i+i9veWksei0pVxyXG5cdFx0XHRcdFx0XHRwbHVzLmRvd25sb2FkZXIuY2xlYXIoKTsgLy/muIXpmaTkuIvovb3ku7vliqFcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dUb2FzdCh7XHJcblx0XHRcdFx0XHRcdFx0aWNvbjogJ25vbmUnLFxyXG5cdFx0XHRcdFx0XHRcdHRpdGxlOiAn5pu05paw5aSx6LSlJ1xyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0X3RoaXMuc2hvd0J0bnMgPSBmYWxzZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHRcdC8v5byA5aeL5LiL6L29XHJcblx0XHRcdFx0ZHRhc2suc3RhcnQoKTtcclxuXHRcdFx0XHQvL+ebkeWQrOS4i+i9vei/m+W6plxyXG5cdFx0XHRcdGR0YXNrLmFkZEV2ZW50TGlzdGVuZXIoJ3N0YXRlY2hhbmdlZCcsIGZ1bmN0aW9uKHRhc2spIHtcclxuXHRcdFx0XHRcdF90aGlzLnBlcmNlbnRhZ2UgPSBwYXJzZUludChcclxuXHRcdFx0XHRcdFx0KHBhcnNlRmxvYXQodGFzay5kb3dubG9hZGVkU2l6ZSkgLyBwYXJzZUZsb2F0KHRhc2sudG90YWxTaXplKSkgKiAxMDApO1xyXG5cdFx0XHRcdFx0aWYgKF90aGlzLnBlcmNlbnRhZ2UgPT0gMTAwKSB7XHJcblx0XHRcdFx0XHRcdF90aGlzLiRyZWZzLnByb21vdGlvbi5jbG9zZSgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJ+S4i+i9vei/m+W6pu+8micgKyBfdGhpcy5wZXJjZW50YWdlKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0Ly8gLi4ubWFwTXV0YXRpb25zKHtcclxuXHRcdFx0Ly8gXHRtdXRhdExvZ2luOidsb2dpbidcclxuXHRcdFx0Ly8gfSksXHJcblx0XHRcdC8vIC4uLm1hcEFjdGlvbnMoe1xyXG5cdFx0XHQvLyBcdGFjdGlvbkxvZ2luOidsb2dpbidcclxuXHRcdFx0Ly8gfSksXHJcblx0XHRcdGlucHV0RGlhbG9nVG9nZ2xlKCkge1xyXG5cdFx0XHRcdHRoaXMuJHJlZnMuaW5wdXREaWFsb2cub3BlbigpXHJcblx0XHRcdH0sXHJcblx0XHRcdGRpYWxvZ0lucHV0Q29uZmlybSh2YWwpIHtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyh2YWwpO1xyXG5cdFx0XHRcdC8vIHVuaS5zaG93TG9hZGluZyh7XHJcblx0XHRcdFx0Ly8gXHR0aXRsZTogJzPnp5LlkI7kvJrlhbPpl60nXHJcblx0XHRcdFx0Ly8gfSlcclxuXHRcdFx0XHQvLyBzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0XHQvLyB1bmkuaGlkZUxvYWRpbmcoKTtcclxuXHRcdFx0XHR0aGlzLnVzZXJTZXJ2ZXIgPSB2YWw7XHJcblx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCdzZXJ2ZXInLCB2YWwpO1xyXG5cdFx0XHRcdC8vIHRoaXMudmFsdWUgPSB2YWxcclxuXHRcdFx0XHQvLyDlhbPpl63nqpflj6PlkI7vvIzmgaLlpI3pu5jorqTlhoXlrrlcclxuXHRcdFx0XHR0aGlzLiRyZWZzLmlucHV0RGlhbG9nLmNsb3NlKCk7XHJcblxyXG5cdFx0XHRcdHRoaXMucXVlcnkoKTsgLy/niYjmnKzljYfnuqdcclxuXHRcdFx0XHQvLyB9LCAzMDAwKVxyXG5cdFx0XHRcdC8vIH0sIDMwMDApXHJcblx0XHRcdH0sXHJcblx0XHRcdHJlbWVtYmVyUHdkKGUpIHsgLy/orrDkvY/lr4bnoIFcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhlLnRhcmdldCk7XHJcblx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCdhY2NvdW50JywgJycpO1xyXG5cdFx0XHRcdHVuaS5zZXRTdG9yYWdlU3luYygncGFzc3dvcmQnLCAnJyk7XHJcblx0XHRcdFx0aWYgKGUudGFyZ2V0LnZhbHVlWzBdID09ICcxJykge1xyXG5cdFx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCdhY2NvdW50JywgdGhpcy51c2VyTmFtZSk7XHJcblx0XHRcdFx0XHR1bmkuc2V0U3RvcmFnZVN5bmMoJ3Bhc3N3b3JkJywgdGhpcy51c2VyUHdkKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdC8vIGdldENvb2tpZShrZXkpe1xyXG5cdFx0XHQvLyBcdGlmKGRvY3VtZW50LmNvb2tpZS5sZW5ndGg+MCl7XHJcblx0XHRcdC8vIFx0XHR2YXIgc3RhcnQgPSBkb2N1bWVudC5jb29raWUuaW5kZXhPZihrZXkgKyc9Jyk7XHJcblx0XHRcdC8vIFx0XHRpZihzdGFydCAhPT0gLTEpe1xyXG5cdFx0XHQvLyBcdFx0XHRzdGFydCA9IHN0YXJ0K2tleS5sZW5ndGgrMTtcclxuXHRcdFx0Ly8gXHRcdFx0dmFyIGVuZCA9IGRvY3VtZW50LmNvb2tpZS5pbmRleE9mKCc7JyxzdGFydCk7XHJcblx0XHRcdC8vIFx0XHRcdGlmKGVuZCA9PT0gLTEpIGVuZD1kb2N1bWVudC5jb29raWUubGVuZ3RoO1xyXG5cdFx0XHQvLyBcdFx0XHRyZXR1cm4gZG9jdW1lbnQuY29va2llLnN1YnN0cmluZyhzdGFydCxlbmQpO1xyXG5cdFx0XHQvLyBcdFx0fVxyXG5cdFx0XHQvLyBcdH1cclxuXHRcdFx0Ly8gXHRyZXR1cm4gJyc7XHJcblx0XHRcdC8vIH0sXHJcblx0XHRcdC8vIHNldENvb2tpZShjTmFtZSx2YWx1ZSxleHBpcmVkYXlzKXtcclxuXHRcdFx0Ly8gXHR2YXIgZXhkYXRlID0gbmV3IERhdGUoKTtcclxuXHRcdFx0Ly8gXHRleGRhdGUuc2V0RGF0ZShleGRhdGUuZ2V0RGF0ZSgpLGV4cGlyZWRheXMpXHJcblx0XHRcdC8vIFx0ZG9jdW1lbnQuY29va2llID0gY05hbWUrJz0nKyBkb2N1bWVudFVSTENvbXBvbmVudCh2YWx1ZSkrXHJcblx0XHRcdC8vIFx0KChleHBpcmVkYXlzPT1udWxsKT8nJzonO2V4cGlyZXM9JytleGRhdGUudG9HTVRTdHJpbmcoKSk7XHJcblxyXG5cdFx0XHQvLyB9LFxyXG5cdFx0XHRsb2dpbmQoKSB7XHJcblx0XHRcdFx0aWYgKCF0aGlzLnVzZXJTZXJ2ZXIpIHtcclxuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHR0aXRsZTogXCLmj5DnpLpcIixcclxuXHRcdFx0XHRcdFx0Y29udGVudDogXCLmnKrovpPlhaXnvZHnq5nlnLDlnYDvvIzor7fph43mlrDphY3nva7ovpPlhaXvvIFcIixcclxuXHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdGNvbmZpcm1UZXh0OiBcIuWPlua2iFwiXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKCF0aGlzLnVzZXJOYW1lKSB7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0dGl0bGU6IFwi5o+Q56S6XCIsXHJcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IFwi5pyq6L6T5YWl55So5oi35ZCN77yM6K+36YeN5paw6L6T5YWl77yBXCIsXHJcblx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICghdGhpcy51c2VyUHdkKSB7XHJcblx0XHRcdFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHRcdFx0XHRcdFx0dGl0bGU6IFwi5o+Q56S6XCIsXHJcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IFwi5pyq6L6T5YWl5a+G56CB77yM6K+36YeN5paw6L6T5YWl77yBXCIsXHJcblx0XHRcdFx0XHRcdHNob3dDYW5jZWw6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRjb25maXJtVGV4dDogXCLlj5bmtohcIlxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8v5qOA5p+lIFwi55m75b2V54q25oCBL+mUgeWxj+eKtuaAgVwiIOe7k+adn1xyXG5cdFx0XHRcdHZhciBsb2dpbkluZm8gPSB7XHJcblx0XHRcdFx0XHRzZXJ2ZXI6IHRoaXMudXNlclNlcnZlcixcclxuXHRcdFx0XHRcdHVuYW1lOiB0aGlzLnVzZXJOYW1lLFxyXG5cdFx0XHRcdFx0cHdkOiB0aGlzLnVzZXJQd2QsXHJcblx0XHRcdFx0XHRjbmFtZTogcGx1cy5kZXZpY2UubW9kZWwsXHJcblx0XHRcdFx0XHR0eXBlOiBcIjBcIlxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0Y29uc29sZS5sb2cobG9naW5JbmZvKTtcclxuXHJcblx0XHRcdFx0dGhpcy4kZGF0YS5sb2dpbiA9IFwibG9hZGluZy4uLi4uLlwiO1xyXG5cdFx0XHRcdC8v55m75b2VXHJcblx0XHRcdFx0dGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2xvZ2luJywgbG9naW5JbmZvKS50aGVuKHN1Y2Nlc3MgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coc3VjY2Vzcyk7XHJcblx0XHRcdFx0XHRpZiAoc3VjY2Vzcy5jb2RlID09ICcwMDAwMCcgfHwgc3VjY2Vzcy5lcnJfY29kZT09MCkge1xyXG5cdFx0XHRcdFx0XHQvL+eZu+W9leaIkOWKn+WQjua4heepuue8k+WtmOaVsOaNrlxyXG5cdFx0XHRcdFx0XHR0aGlzLiRzdG9yZS5jb21taXQoXCJhcmVhRnVuY1wiLCBudWxsKTtcclxuXHRcdFx0XHRcdFx0dGhpcy4kc3RvcmUuY29tbWl0KFwiY2xhc3NBdHRyTGlzdFwiLCBudWxsKTtcclxuXHRcdFx0XHRcdFx0dGhpcy4kc3RvcmUuY29tbWl0KFwiY2xhc3NHcmlkU3R5bGVJbmZvXCIsIG51bGwpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLiRzdG9yZS5jb21taXQoXCJkaWNWYWx1ZUluZm9cIiwgbnVsbCk7XHJcblx0XHRcdFx0XHRcdHRoaXMuJHN0b3JlLmNvbW1pdChcInN1YkNsYXNzQXR0ckxpc3RcIiwgbnVsbCk7XHJcblx0XHRcdFx0XHRcdHRoaXMuJHN0b3JlLmNvbW1pdChcInN1YkNsYXNzR3JpZFN0eWxlSW5mb1wiLCBudWxsKTtcclxuXHRcdFx0XHRcdFx0Ly/orr7nva7lhajlsYDlj4LmlbDvvJp1c2VyLeeUqOaIt+S/oeaBr1xyXG5cdFx0XHRcdFx0XHR1bmkuc2V0U3RvcmFnZVN5bmMoJ3NlcnZlcicsIGxvZ2luSW5mby5zZXJ2ZXIpO1xyXG5cdFx0XHRcdFx0XHR1bmkuc2V0U3RvcmFnZVN5bmMoJ2FjY291bnQnLCBsb2dpbkluZm8udW5hbWUpO1xyXG5cdFx0XHRcdFx0XHR1bmkuc2V0U3RvcmFnZVN5bmMoJ3Bhc3N3b3JkJywgbG9naW5JbmZvLnB3ZCk7XHJcblx0XHRcdFx0XHRcdC8vIHRoaXMubXV0YXRMb2dpbih7bG9naW5pZDpzdWNjZXNzfSk7XHJcblx0XHRcdFx0XHRcdHRoaXMuJHN0b3JlLmNvbW1pdCgnbG9naW4nLCB7XHJcblx0XHRcdFx0XHRcdFx0bG9naW5pZDogc3VjY2Vzc1xyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0dW5pLm5hdmlnYXRlVG8oe1xyXG5cdFx0XHRcdFx0XHRcdHVybDogJy4uL2luZGV4L2luZGV4P2FyZ3M9OTk5OTk5OTk5OSdcclxuXHRcdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdFx0Ly8gdW5pLnJlZGlyZWN0VG8oe1xyXG5cdFx0XHRcdFx0XHQvLyBcdHVybDonLi4vaW5kZXgvaW5kZXg/YXJncz05OTk5OTk5OTk5J1xyXG5cdFx0XHRcdFx0XHQvLyB9KTtcclxuXHRcdFx0XHRcdFx0dGhpcy5sb2dpbiA9IFwi5byA5aeL55m75b2VXCI7XHJcblxyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dNb2RhbCh7XHJcblx0XHRcdFx0XHRcdFx0dGl0bGU6IFwi6ZSZ6K+vXCIsXHJcblx0XHRcdFx0XHRcdFx0Y29udGVudDogc3VjY2Vzcy5tc2csXHJcblx0XHRcdFx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IFwi5Y+W5raIXCJcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdHRoaXMubG9naW4gPSBcIuW8gOWni+eZu+W9lVwiO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pLmNhdGNoKGV4ID0+IHtcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGV4KTtcclxuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHR0aXRsZTogXCLplJnor69cIixcclxuXHRcdFx0XHRcdFx0Y29udGVudDogZXguZXJyTXNnLFxyXG5cdFx0XHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0Y29uZmlybVRleHQ6IFwi5Y+W5raIXCJcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0dGhpcy5sb2dpbiA9IFwi5byA5aeL55m75b2VXCI7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHRvbkxvYWQoKSB7XHJcblx0XHRcdC8v6I635Y+WbWFj5Zyw5Z2AXHJcblx0XHRcdHZhciBuZXQgPSBwbHVzLmFuZHJvaWQuaW1wb3J0Q2xhc3MoXCJqYXZhLm5ldC5OZXR3b3JrSW50ZXJmYWNlXCIpO1xyXG5cdFx0XHR2YXIgd2wwID0gbmV0LmdldEJ5TmFtZSgnd2xhbjAnKTtcclxuXHRcdFx0dmFyIG1hY0J5dGUgPSB3bDAuZ2V0SGFyZHdhcmVBZGRyZXNzKCk7XHJcblx0XHRcdHZhciBkZXZpY2VJZCA9ICcnICBcclxuXHRcdFx0Ly/kuIvpnaLov5nmrrXku6PnoIHmnaXoh6rnvZHnu5wgIFxyXG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG1hY0J5dGUubGVuZ3RoOyBpKyspIHsgIFxyXG5cdFx0XHQgICAgdmFyIHRtcCA9IFwiXCI7ICBcclxuXHRcdFx0ICAgIHZhciBudW0gPSBtYWNCeXRlW2ldOyAgXHJcblx0XHRcdCAgICBpZiAobnVtIDwgMCkgeyAgICAgICAgXHJcblx0XHRcdCAgICAgIHRtcCA9KDI1NStudW0rMSkudG9TdHJpbmcoMTYpOyAgXHJcblx0XHRcdCAgICB9IGVsc2UgeyAgXHJcblx0XHRcdCAgICAgIHRtcCA9IG51bS50b1N0cmluZygxNik7ICBcclxuXHRcdFx0ICAgIH0gIFxyXG5cdFx0XHQgICAgaWYgKHRtcC5sZW5ndGggPT0gMSkgeyAgXHJcblx0XHRcdCAgICAgIHRtcCA9IFwiMFwiICsgdG1wOyAgXHJcblx0XHRcdCAgICB9ICBcclxuXHRcdFx0ICAgIGRldmljZUlkICs9IHRtcDsgIFxyXG5cdFx0XHR9ICBcclxuXHRcdFx0Ly83OGI4ZDY3NTExY2FcclxuXHRcdFx0dGhpcy4kc3RvcmUuY29tbWl0KFwic2V0RGV2aWNlSWRcIiwgZGV2aWNlSWQpO1xuXHRcdFx0Y29uc29sZS5sb2coJ0FuZHJvaWTorr7lpIfnmoRkZXZpY2VJZDonLCAgZGV2aWNlSWQpO1xyXG5cdFx0XHRcclxuXHRcdFx0cGx1cy5ydW50aW1lLmdldFByb3BlcnR5KHBsdXMucnVudGltZS5hcHBpZCwgKGluZm8pID0+IHtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhpbmZvKTtcclxuXHRcdFx0XHR0aGlzLiRkYXRhLnZlcnNpb24gPSBpbmZvLnZlcnNpb247XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuPC9zY3JpcHQ+XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///56\n");
/***/ }),
/* 57 */
@@ -52187,7 +52187,7 @@
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 1);\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _vue = _interopRequireDefault(__webpack_require__(/*! vue */ 127));\nvar _vuex = _interopRequireDefault(__webpack_require__(/*! vuex */ 201));\nvar _base = _interopRequireDefault(__webpack_require__(/*! ../components/js-base64/base64.js */ 65));\nvar _app = _interopRequireDefault(__webpack_require__(/*! ./modules/app */ 202));\n_vue.default.use(_vuex.default);\nvar store = new _vuex.default.Store({\n  modules: {\n    app: _app.default,\n    Base64: _base.default\n  },\n  state: {\n    hasLogin: false,\n    apkVersionInfo: \"\",\n    loginProvider: \"\",\n    areaFunc: '',\n    thisareaFuncID: '',\n    thisareaFuncSubID: '',\n    thisEditName: '',\n    thisEditSubName: '',\n    thisDictName: '',\n    _classAttrList: {},\n    _classGridStyleInfo: {},\n    _subClassAttrList: {},\n    _subClassGridStyleInfo: {},\n    _dicValueInfo: {},\n    DataObjRunCustomEventInfo: '',\n    querySelpsn: '',\n    ProjectGetAnalysisList: '',\n    addclassattr: '',\n    DelObj: '',\n    username: \"sa\",\n    userpwd: \"0000\",\n    url: \"139.159.144.10:8080/mobox3\",\n    //115.29.185.26:5000\n    OIOrgSAPI: '',\n    //115.29.185.26:5101\n    OIMoboxSAPI: '',\n    //115.29.185.26:5102\n    OIDataSAPI: '',\n    //115.29.185.26:5103\n    OIMongodbSvr: '' //115.29.185.26:5201\n  },\n\n  mutations: {\n    setUrl: function setUrl(state, url) {\n      state.url = url;\n    },\n    setOrgSApi: function setOrgSApi(state, url) {\n      state.OIOrgSAPI = url;\n    },\n    setMobxoSApi: function setMobxoSApi(state, url) {\n      state.OIMoboxSAPI = url;\n    },\n    setDataSApi: function setDataSApi(state, url) {\n      state.OIDataSAPI = url;\n    },\n    setMongodbSvr: function setMongodbSvr(state, url) {\n      state.OIMongodbSvr = url;\n    },\n    setApkVersionInfo: function setApkVersionInfo(state, ret) {\n      state.apkVersionInfo = ret;\n    },\n    login: function login(state, provider) {\n      state.hasLogin = true;\n      state.loginProvider = provider;\n    },\n    areaFunc: function areaFunc(state, ret) {\n      state.areaFunc = ret;\n    },\n    setareaFuncid: function setareaFuncid(state, id) {\n      state.thisareaFuncID = id;\n    },\n    setareaFunSubcid: function setareaFunSubcid(state, id) {\n      state.thisareaFuncSubID = id;\n    },\n    seteditName: function seteditName(state, editName) {\n      state.thisEditName = editName;\n    },\n    seteditSubName: function seteditSubName(state, editName) {\n      state.thisEditSubName = editName;\n    },\n    setDictName: function setDictName(state, dictName) {\n      state.thisDictName = dictName;\n    },\n    classAttrList: function classAttrList(state, ret) {\n      // state._classAttrList[state.thisareaFuncID] = ret;\n      _vue.default.set(state._classAttrList, state.thisareaFuncID, ret);\n    },\n    classGridStyleInfo: function classGridStyleInfo(state, ret) {\n      // state._classGridStyleInfo[state.thisareaFuncID] = ret;\n      var data = {};\n      if (state._classGridStyleInfo[state.thisareaFuncID]) data = state._classGridStyleInfo[state.thisareaFuncID];\n      _vue.default.set(data, state.thisEditName, ret);\n      _vue.default.set(state._classGridStyleInfo, state.thisareaFuncID, data);\n    },\n    subClassAttrList: function subClassAttrList(state, ret) {\n      _vue.default.set(state._subClassAttrList, state.thisareaFuncSubID, ret);\n    },\n    subClassGridStyleInfo: function subClassGridStyleInfo(state, ret) {\n      var data = {};\n      if (state._subClassGridStyleInfo[state.thisareaFuncSubID]) data = state._subClassGridStyleInfo[state.thisareaFuncSubID];\n      _vue.default.set(data, state.thisEditSubName, ret);\n      _vue.default.set(state._subClassGridStyleInfo, state.thisareaFuncSubID, data);\n    },\n    dicValueInfo: function dicValueInfo(state, ret) {\n      // state._dicValueInfo[state.thisareaFuncID] = ret;\n      _vue.default.set(state._dicValueInfo, state.thisDictName, ret);\n    },\n    DataObjRunCustomEventInfo: function DataObjRunCustomEventInfo(state, ret) {\n      state.DataObjRunCustomEventInfo = ret;\n    },\n    querySelpsn: function querySelpsn(state, ret) {\n      state.querySelpsn = ret;\n    },\n    ProjectGetAnalysisList: function ProjectGetAnalysisList(state, ret) {\n      state.ProjectGetAnalysisList = ret;\n    },\n    addclassattr: function addclassattr(state, ret) {\n      state.addclassattr = ret;\n    },\n    DelObj: function DelObj(state, ret) {\n      state.DelObj = ret;\n    },\n    logout: function logout(state) {\n      state.hasLogin = false;\n    }\n  },\n  getters: {\n    GetApkServionInfo: function GetApkServionInfo(state) {\n      return state.apkVersionInfo;\n    },\n    loginid: function loginid(state) {\n      return state.loginProvider.loginid;\n    },\n    getUrl: function getUrl(state) {\n      return state.url;\n    },\n    getOrgSApi: function getOrgSApi(state, url) {\n      return state.OIOrgSAPI;\n    },\n    getMobxoSApi: function getMobxoSApi(state, url) {\n      return state.OIMoboxSAPI;\n    },\n    getDataSApi: function getDataSApi(state, url) {\n      return state.OIDataSAPI;\n    },\n    getMongodbSvr: function getMongodbSvr(state, url) {\n      return state.OIMongodbSvr;\n    },\n    getclassAttrList: function getclassAttrList(state) {\n      return state._classAttrList[state.thisareaFuncID];\n    },\n    getclassGridStyleInfo: function getclassGridStyleInfo(state) {\n      if (state._classGridStyleInfo[state.thisareaFuncID]) return state._classGridStyleInfo[state.thisareaFuncID][state.thisEditName];else return \"\";\n    },\n    getSubClassAttrList: function getSubClassAttrList(state) {\n      return state._subClassAttrList[state.thisareaFuncSubID];\n    },\n    getSubClassGridStyleInfo: function getSubClassGridStyleInfo(state) {\n      if (state._subClassGridStyleInfo[state.thisareaFuncSubID]) return state._subClassGridStyleInfo[state.thisareaFuncSubID][state.thisEditSubName];else return \"\";\n    },\n    getdicValueInfo: function getdicValueInfo(state) {\n      return state._dicValueInfo[state.thisDictName];\n    }\n  },\n  actions: {\n    //{commit} 解构,\n    //univerifyInfo 自定义参数\n    GetApkVersionInfo: function GetApkVersionInfo(_ref, univerifyInfo) {\n      var commit = _ref.commit,\n        state = _ref.state;\n      return new Promise(function (resolve, reject) {\n        univerifyInfo = univerifyInfo || {};\n        univerifyInfo.server = univerifyInfo.server || '';\n        if (univerifyInfo.server.length == 0) {\n          reject({\n            \"errMsg\": '服务器地址不能为空!'\n          });\n        }\n        var openinfo = \"http://\" + univerifyInfo.server + \"/\"; //+\"/OrgWebS\"\n        //设置全局参数:url-服务器地址\n        commit(\"setUrl\", openinfo);\n        // var ser = univerifyInfo.server.split('/');\n        // if(ser[1] == 'mobox3'){\n        // \t// reject({\"errMsg\":\"Mobox3暂时未支持自动更新!\"});\n        // \tresolve({code:'00000',data:\"\",msg:\"\"});\n        // \treturn;\n        // }\n        uni.request({\n          url: openinfo + \"PDA/GetApkVersionInfo\",\n          data: {},\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:203\");\n            if (res.statusCode == 404) {\n              reject({\n                \"errMsg\": \"地址不对,请检查该地址:\" + openinfo + \",方法:GetApkVersionInfo,是否正确\"\n              });\n            } else if (res.statusCode == 500) {\n              reject({\n                \"errMsg\": \"未找到更新包所在目录!\"\n              });\n            }\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"setApkVersionInfo\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:218\");\n            reject(err);\n          }\n        });\n      });\n    },\n    login: function login(_ref2, univerifyInfo) {\n      var commit = _ref2.commit,\n        state = _ref2.state;\n      return new Promise(function (resolve, reject) {\n        univerifyInfo = univerifyInfo || {};\n        univerifyInfo.server = univerifyInfo.server || '';\n        univerifyInfo.uname = univerifyInfo.uname || '';\n        univerifyInfo.pwd = univerifyInfo.pwd || '';\n        if (univerifyInfo.server.length == 0) {\n          reject({\n            \"errMsg\": '服务器地址不能为空!'\n          });\n        }\n        if (univerifyInfo.uname.length < 2) {\n          reject({\n            \"errMsg\": '账号最短为 2 个字符!'\n          });\n        }\n        if (univerifyInfo.pwd.length < 1) {\n          reject({\n            \"errMsg\": '密码最短为 1个字符!'\n          });\n        }\n        var openinfo = \"http://\" + univerifyInfo.server + \"/\";\n        //设置全局参数:url-服务器地址\n        commit(\"setUrl\", openinfo);\n        var ser = univerifyInfo.server.split('/');\n        var url = openinfo + \"PDA/SignIn\";\n        var header = {\n          'content-type': 'application/x-www-form-urlencoded'\n        };\n        commit(\"setOrgSApi\", '');\n        commit(\"setMobxoSApi\", '');\n        commit(\"setDataSApi\", '');\n        commit(\"setMongodbSvr\", '');\n        if (ser[1] == 'mobox3') {\n          //判断地址是否是Mobox3\n          var orgSApi = \"http://\" + ser[0].split(':')[0] + \":5101/\";\n          var mobxoSApi = \"http://\" + ser[0].split(':')[0] + \":5102/\";\n          var dataSApi = \"http://\" + ser[0].split(':')[0] + \":5103/\";\n          var mongodbSvr = \"http://\" + ser[0].split(':')[0] + \":5201/\";\n          commit(\"setOrgSApi\", orgSApi);\n          commit(\"setMobxoSApi\", mobxoSApi);\n          commit(\"setDataSApi\", dataSApi);\n          commit(\"setMongodbSvr\", mongodbSvr);\n          url = orgSApi + 'api/user/ace/VerifyPassword';\n          univerifyInfo = {\n            app_type: \"mobox\",\n            user_login: _base.default.encode(univerifyInfo.uname),\n            user_psw: _base.default.encode(univerifyInfo.pwd)\n          };\n          header = {};\n        }\n        uni.request({\n          url: url,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: header,\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:278\");\n            var ret = res.data;\n            if (ret.code == '00000' || ret.err_code == 0) {\n              commit(\"login\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg ? ret.msg : ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:288\");\n            reject(err);\n          }\n        });\n      });\n    },\n    areaFunc: function areaFunc(_ref3, univerifyInfo) {\n      var commit = _ref3.commit,\n        state = _ref3.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.loginProvider.loginid.result.session_id);\n        univerifyInfo.loginInfo = JSON.stringify({\n          server: uni.getStorageSync('server'),\n          uname: uni.getStorageSync('account'),\n          pwd: uni.getStorageSync('password'),\n          cname: plus.device.model,\n          type: \"0\"\n        });\n        var url = state.url + \"PDA/PDAArea\";\n        var header = {\n          'content-type': 'application/x-www-form-urlencoded'\n        };\n        if (state.OIMoboxSAPI) {\n          //判断是否是Mobox3\n          url = state.OIMoboxSAPI + 'api/app/area/GetList?sessionid=' + state.loginProvider.loginid.result.session_id;\n          univerifyInfo = {\n            app_type: \"MES\"\n          };\n          header = {};\n        }\n        uni.request({\n          url: url,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: header,\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:325\");\n            if (res.statusCode == 404) {\n              reject({\n                \"errMsg\": \"地址不对,请检查该地址:\" + openinfo\n              });\n            }\n            // if(JSON.stringify(res.data).includes('Login Page - Ace Admin')){\n            // \tuni.reLaunch({\n            // \t\turl: '../login/index'\n            // \t})\n            // \treject({\"errMsg\":\"登录已过期,请重新登录\"});\n            // }\n            var ret = res.data;\n            if (ret.code == '00000' || ret.err_code == 0) {\n              commit(\"areaFunc\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg ? ret.msg : ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // Mobox3获取应用领域下的功能点\n    GetFuncTree: function GetFuncTree(_ref4, univerifyInfo) {\n      var commit = _ref4.commit,\n        state = _ref4.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.loginProvider.loginid.result.session_id);\n        uni.request({\n          url: state.OIMoboxSAPI + 'api/app/GetFuncTree?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              // commit(\"areaFunc\",ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    classAttrList: function classAttrList(_ref5, univerifyInfo) {\n      var commit = _ref5.commit,\n        state = _ref5.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        univerifyInfo.loginInfo = JSON.stringify({\n          server: uni.getStorageSync('server'),\n          uname: uni.getStorageSync('account'),\n          pwd: uni.getStorageSync('password'),\n          cname: plus.device.model,\n          type: \"0\"\n        });\n        uni.request({\n          url: state.url + \"PDA/PDAAttrList\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:403\");\n            // if(JSON.stringify(res.data).includes('Login Page - Ace Admin')){\n            // \tuni.reLaunch({\n            // \t\turl: '../login/index'\n            // \t})\n            // \treject({\"errMsg\":\"登录已过期,请重新登录\"});\n            // }\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"classAttrList\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    classGridStyleInfo: function classGridStyleInfo(_ref6, univerifyInfo) {\n      var commit = _ref6.commit,\n        state = _ref6.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        univerifyInfo.loginInfo = JSON.stringify({\n          server: uni.getStorageSync('server'),\n          uname: uni.getStorageSync('account'),\n          pwd: uni.getStorageSync('password'),\n          cname: plus.device.model,\n          type: \"0\"\n        });\n        uni.request({\n          url: state.url + \"PDA/PDAGridStyleGetInfo\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:449\");\n            // if(JSON.stringify(res.data).includes('Login Page - Ace Admin')){\n            // \tuni.reLaunch({\n            // \t\turl: '../login/index'\n            // \t})\n            // \treject({\"errMsg\":\"登录已过期,请重新登录\"});\n            // }\n            var ret = res.data;\n            if (ret.code == '00000') {\n              // var data ={};\n              // Vue.set(data,univerifyInfo.name,ret);\n              commit(\"classGridStyleInfo\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    subClassAttrList: function subClassAttrList(_ref7, univerifyInfo) {\n      var commit = _ref7.commit,\n        state = _ref7.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        univerifyInfo.loginInfo = JSON.stringify({\n          server: uni.getStorageSync('server'),\n          uname: uni.getStorageSync('account'),\n          pwd: uni.getStorageSync('password'),\n          cname: plus.device.model,\n          type: \"0\"\n        });\n        uni.request({\n          url: state.url + \"PDA/PDAAttrList\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:497\");\n            // if(JSON.stringify(res.data).includes('Login Page - Ace Admin')){\n            // \tuni.reLaunch({\n            // \t\turl: '../login/index'\n            // \t})\n            // \treject({\"errMsg\":\"登录已过期,请重新登录\"});\n            // }\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"subClassAttrList\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    subClassGridStyleInfo: function subClassGridStyleInfo(_ref8, univerifyInfo) {\n      var commit = _ref8.commit,\n        state = _ref8.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        univerifyInfo.loginInfo = JSON.stringify({\n          server: uni.getStorageSync('server'),\n          uname: uni.getStorageSync('account'),\n          pwd: uni.getStorageSync('password'),\n          cname: plus.device.model,\n          type: \"0\"\n        });\n        uni.request({\n          url: state.url + \"PDA/PDAGridStyleGetInfo\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:543\");\n            // if(JSON.stringify(res.data).includes('Login Page - Ace Admin')){\n            // \tuni.reLaunch({\n            // \t\turl: '../login/index'\n            // \t})\n            // \treject({\"errMsg\":\"登录已过期,请重新登录\"});\n            // }\n            var ret = res.data;\n            if (ret.code == '00000') {\n              // var data ={};\n              // Vue.set(data,univerifyInfo.name,ret);\n              commit(\"subClassGridStyleInfo\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    dicValueInfo: function dicValueInfo(_ref9, univerifyInfo) {\n      var commit = _ref9.commit,\n        state = _ref9.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        univerifyInfo.loginInfo = JSON.stringify({\n          server: uni.getStorageSync('server'),\n          uname: uni.getStorageSync('account'),\n          pwd: uni.getStorageSync('password'),\n          cname: plus.device.model,\n          type: \"0\"\n        });\n        uni.request({\n          url: state.url + \"PDA/PDADicValueGetInfo\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            // console.log(res);\n            var ret = res.data;\n            if (ret.code == '00000') {\n              state.thisDictName = univerifyInfo.dic_name;\n              commit(\"dicValueInfo\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:602\");\n            reject(err);\n          }\n        });\n      });\n    },\n    DataObjRunCustomEventInfo: function DataObjRunCustomEventInfo(_ref10, univerifyInfo) {\n      var commit = _ref10.commit,\n        state = _ref10.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        univerifyInfo.loginInfo = JSON.stringify({\n          server: uni.getStorageSync('server'),\n          uname: uni.getStorageSync('account'),\n          pwd: uni.getStorageSync('password'),\n          cname: plus.device.model,\n          type: \"0\"\n        });\n        uni.request({\n          url: state.url + \"PDA/PDADataObjRunCustomEvent\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            // console.log(res);\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"DataObjRunCustomEventInfo\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:641\");\n            reject(err);\n          }\n        });\n      });\n    },\n    querySelpsn: function querySelpsn(_ref11, univerifyInfo) {\n      var commit = _ref11.commit,\n        state = _ref11.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        var url = state.url + \"selpsn/queryjson\";\n        var datajson = univerifyInfo;\n        var header = {\n          'content-type': 'application/x-www-form-urlencoded'\n        };\n        if (state.OIOrgSAPI) {\n          //判断是否是Mobox3\n          url = state.OIOrgSAPI + 'api/user/query/query?sessionid=' + state.loginProvider.loginid.result.session_id;\n          datajson = {\n            query_str: univerifyInfo.jp\n          };\n          header = {};\n        }\n        uni.request({\n          url: url,\n          data: datajson,\n          method: 'POST',\n          dataType: \"json\",\n          header: header,\n          success: function success(res) {\n            // console.log(res);\n            try {\n              res = JSON.parse(res.data);\n            } catch (e) {\n              res = res.data;\n            }\n            if (res.code == '00000' || res.err_code == 0) {\n              commit(\"querySelpsn\", res);\n              resolve(res);\n            } else {\n              reject({\n                \"errMsg\": res.msg ? res.msg : res.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:685\");\n            reject(err);\n          }\n        });\n      });\n    },\n    ProjectGetAnalysisList: function ProjectGetAnalysisList(_ref12, univerifyInfo) {\n      var commit = _ref12.commit,\n        state = _ref12.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        var url = state.url + \"bpm/ProjectGetAnalysisList\";\n        var header = {\n          'content-type': 'application/x-www-form-urlencoded'\n        };\n        if (state.OIMoboxSAPI) {\n          //判断是否是Mobox3\n          // url = state.OIMoboxSAPI+'api/app/area/GetList?sessionid='+state.loginProvider.loginid.result.session_id;\n          // univerifyInfo = {\n          // \tapp_type: \"MES\",\n          // };\n          // header={};\n          reject({\n            \"errMsg\": \"Mobox3暂时未支持选择项目接口!\"\n          });\n          // resolve({code:'00000',data:\"\",msg:\"\"});\n          return;\n        }\n        uni.request({\n          url: url,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: header,\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:718\");\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"ProjectGetAnalysisList\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:728\");\n            reject(err);\n          }\n        });\n      });\n    },\n    addclassattr: function addclassattr(_ref13, univerifyInfo) {\n      var commit = _ref13.commit,\n        state = _ref13.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        univerifyInfo.loginInfo = JSON.stringify({\n          server: uni.getStorageSync('server'),\n          uname: uni.getStorageSync('account'),\n          pwd: uni.getStorageSync('password'),\n          cname: plus.device.model,\n          type: \"0\"\n        });\n        uni.request({\n          url: state.url + \"PDA/addclassattr\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            // console.log(res);\n            // if(JSON.stringify(res.data).includes('Login Page - Ace Admin')){\n            // \tuni.reLaunch({\n            // \t\turl: '../login/index'\n            // \t})\n            // \treject({\"errMsg\":\"登录已过期,请重新登录\"});\n            // }\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"addclassattr\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": JSON.stringify(ret)\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:773\");\n            reject(err);\n          }\n        });\n      });\n    },\n    DelObj: function DelObj(_ref14, univerifyInfo) {\n      var commit = _ref14.commit,\n        state = _ref14.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        uni.request({\n          url: state.url + \"PDA/DelObj\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:795\");\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"DelObj\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": JSON.stringify(ret)\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:805\");\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/class/attr/GetList?sessionid=SESSION_ID\n    // Mobox3得到数据类属性\n    classAttrGetList: function classAttrGetList(_ref15, univerifyInfo) {\n      var commit = _ref15.commit,\n        state = _ref15.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        uni.request({\n          url: state.OIDataSAPI + 'api/class/attr/GetList?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              commit(\"classAttrList\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/class/attr/GetList?sessionid=SESSION_ID\n    // Mobox3得到数据类属性\n    subClassAttrGetList: function subClassAttrGetList(_ref16, univerifyInfo) {\n      var commit = _ref16.commit,\n        state = _ref16.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        uni.request({\n          url: state.OIDataSAPI + 'api/class/attr/GetList?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              commit(\"subClassAttrList\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/dict/item/GetInfo?sessionid=SESSION_ID\n    // Mobox3得到字典项列表\n    DictItemGetList: function DictItemGetList(_ref17, univerifyInfo) {\n      var commit = _ref17.commit,\n        state = _ref17.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        uni.request({\n          url: state.OIMoboxSAPI + 'api/dict/item/GetInfo?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/dict/GetInfo2?sessionid=SESSION_ID\n    // Mobox3得到字典信息\n    DictGetInfo: function DictGetInfo(_ref18, univerifyInfo) {\n      var commit = _ref18.commit,\n        state = _ref18.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        uni.request({\n          url: state.OIMoboxSAPI + 'api/dict/GetInfo2?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/dataobj/Create?sessionid=SESSION_ID\n    // Mobox3创建数据对象\n    createDataObj: function createDataObj(_ref19, univerifyInfo) {\n      var commit = _ref19.commit,\n        state = _ref19.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        uni.request({\n          url: state.OIDataSAPI + 'api/dataobj/Create?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:955\");\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/class/uistyle/GetInfo?sessionid=SESSION_ID\n    // Mobox3得到数据类显示样式信息\n    UIStyleGetInfo: function UIStyleGetInfo(_ref20, univerifyInfo) {\n      var commit = _ref20.commit,\n        state = _ref20.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.loginProvider.loginid.result.session_id);\n        uni.request({\n          url: state.OIDataSAPI + 'api/class/uistyle/GetInfo?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            __f__(\"log\", _res, \" at store/index.js:976\");\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              // commit(\"areaFunc\",ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/dataobj/RunCustomEvent?sessionid=SESSION_ID\n    // Mobox3执行自定义脚本\n    runCustomEvent: function runCustomEvent(_ref21, univerifyInfo) {\n      var commit = _ref21.commit,\n        state = _ref21.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.loginProvider.loginid.result.session_id);\n        uni.request({\n          url: state.OIDataSAPI + 'api/dataobj/RunCustomEvent?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              // commit(\"areaFunc\",ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/dataobj/Delete?sessionid=SESSION_ID\n    // Mobox3删除数据对象\n    dataObjDel: function dataObjDel(_ref22, univerifyInfo) {\n      var commit = _ref22.commit,\n        state = _ref22.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.loginProvider.loginid.result.session_id);\n        uni.request({\n          url: state.OIDataSAPI + 'api/dataobj/Delete?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              // commit(\"areaFunc\",ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/dataobj/query/Query?sessionid=SESSION_ID\n    // Mobox3查询数据对象\n    dataObjQuery: function dataObjQuery(_ref23, univerifyInfo) {\n      var commit = _ref23.commit,\n        state = _ref23.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.loginProvider.loginid.result.session_id);\n        uni.request({\n          url: state.OIDataSAPI + 'api/dataobj/query/Query?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              // commit(\"areaFunc\",ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/app/GetInfo?sessionid=SESSION_ID\n    // Mobox3获取功能点信息\n    appGetInfo: function appGetInfo(_ref24, univerifyInfo) {\n      var commit = _ref24.commit,\n        state = _ref24.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.loginProvider.loginid.result.session_id);\n        uni.request({\n          url: state.OIMoboxSAPI + 'api/app/GetInfo?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              // commit(\"areaFunc\",ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    }\n  }\n});\nvar _default = store;\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 18)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vc3RvcmUvaW5kZXguanMiXSwibmFtZXMiOlsiVnVlIiwidXNlIiwiVnVleCIsInN0b3JlIiwiU3RvcmUiLCJtb2R1bGVzIiwiYXBwIiwiQmFzZTY0Iiwic3RhdGUiLCJoYXNMb2dpbiIsImFwa1ZlcnNpb25JbmZvIiwibG9naW5Qcm92aWRlciIsImFyZWFGdW5jIiwidGhpc2FyZWFGdW5jSUQiLCJ0aGlzYXJlYUZ1bmNTdWJJRCIsInRoaXNFZGl0TmFtZSIsInRoaXNFZGl0U3ViTmFtZSIsInRoaXNEaWN0TmFtZSIsIl9jbGFzc0F0dHJMaXN0IiwiX2NsYXNzR3JpZFN0eWxlSW5mbyIsIl9zdWJDbGFzc0F0dHJMaXN0IiwiX3N1YkNsYXNzR3JpZFN0eWxlSW5mbyIsIl9kaWNWYWx1ZUluZm8iLCJEYXRhT2JqUnVuQ3VzdG9tRXZlbnRJbmZvIiwicXVlcnlTZWxwc24iLCJQcm9qZWN0R2V0QW5hbHlzaXNMaXN0IiwiYWRkY2xhc3NhdHRyIiwiRGVsT2JqIiwidXNlcm5hbWUiLCJ1c2VycHdkIiwidXJsIiwiT0lPcmdTQVBJIiwiT0lNb2JveFNBUEkiLCJPSURhdGFTQVBJIiwiT0lNb25nb2RiU3ZyIiwibXV0YXRpb25zIiwic2V0VXJsIiwic2V0T3JnU0FwaSIsInNldE1vYnhvU0FwaSIsInNldERhdGFTQXBpIiwic2V0TW9uZ29kYlN2ciIsInNldEFwa1ZlcnNpb25JbmZvIiwicmV0IiwibG9naW4iLCJwcm92aWRlciIsInNldGFyZWFGdW5jaWQiLCJpZCIsInNldGFyZWFGdW5TdWJjaWQiLCJzZXRlZGl0TmFtZSIsImVkaXROYW1lIiwic2V0ZWRpdFN1Yk5hbWUiLCJzZXREaWN0TmFtZSIsImRpY3ROYW1lIiwiY2xhc3NBdHRyTGlzdCIsInNldCIsImNsYXNzR3JpZFN0eWxlSW5mbyIsImRhdGEiLCJzdWJDbGFzc0F0dHJMaXN0Iiwic3ViQ2xhc3NHcmlkU3R5bGVJbmZvIiwiZGljVmFsdWVJbmZvIiwibG9nb3V0IiwiZ2V0dGVycyIsIkdldEFwa1NlcnZpb25JbmZvIiwibG9naW5pZCIsImdldFVybCIsImdldE9yZ1NBcGkiLCJnZXRNb2J4b1NBcGkiLCJnZXREYXRhU0FwaSIsImdldE1vbmdvZGJTdnIiLCJnZXRjbGFzc0F0dHJMaXN0IiwiZ2V0Y2xhc3NHcmlkU3R5bGVJbmZvIiwiZ2V0U3ViQ2xhc3NBdHRyTGlzdCIsImdldFN1YkNsYXNzR3JpZFN0eWxlSW5mbyIsImdldGRpY1ZhbHVlSW5mbyIsImFjdGlvbnMiLCJHZXRBcGtWZXJzaW9uSW5mbyIsInVuaXZlcmlmeUluZm8iLCJjb21taXQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInNlcnZlciIsImxlbmd0aCIsIm9wZW5pbmZvIiwidW5pIiwicmVxdWVzdCIsIm1ldGhvZCIsImRhdGFUeXBlIiwiaGVhZGVyIiwic3VjY2VzcyIsInJlcyIsInN0YXR1c0NvZGUiLCJjb2RlIiwibXNnIiwiZmFpbCIsImVyciIsInVuYW1lIiwicHdkIiwic2VyIiwic3BsaXQiLCJvcmdTQXBpIiwibW9ieG9TQXBpIiwiZGF0YVNBcGkiLCJtb25nb2RiU3ZyIiwiYXBwX3R5cGUiLCJ1c2VyX2xvZ2luIiwiZW5jb2RlIiwidXNlcl9wc3ciLCJlcnJfY29kZSIsImVycl9tc2ciLCJsb2dpbkluZm8iLCJKU09OIiwic3RyaW5naWZ5IiwiZ2V0U3RvcmFnZVN5bmMiLCJjbmFtZSIsInBsdXMiLCJkZXZpY2UiLCJtb2RlbCIsInR5cGUiLCJyZXN1bHQiLCJzZXNzaW9uX2lkIiwiR2V0RnVuY1RyZWUiLCJfcmVzIiwiZGljX25hbWUiLCJkYXRhanNvbiIsInF1ZXJ5X3N0ciIsImpwIiwicGFyc2UiLCJlIiwiY2xhc3NBdHRyR2V0TGlzdCIsInN1YkNsYXNzQXR0ckdldExpc3QiLCJEaWN0SXRlbUdldExpc3QiLCJEaWN0R2V0SW5mbyIsImNyZWF0ZURhdGFPYmoiLCJVSVN0eWxlR2V0SW5mbyIsInJ1bkN1c3RvbUV2ZW50IiwiZGF0YU9iakRlbCIsImRhdGFPYmpRdWVyeSIsImFwcEdldElu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RWE1RixLQUFLO0FBQUEsMkIiLCJmaWxlIjoiMjAwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXHJcbmltcG9ydCBWdWV4IGZyb20gJ3Z1ZXgnXHJcbmltcG9ydCBCYXNlNjQgZnJvbSAnLi4vY29tcG9uZW50cy9qcy1iYXNlNjQvYmFzZTY0LmpzJ1xyXG5WdWUudXNlKFZ1ZXgpXHJcblxyXG5pbXBvcnQgYXBwIGZyb20gJy4vbW9kdWxlcy9hcHAnXHJcbmNvbnN0IHN0b3JlID0gbmV3IFZ1ZXguU3RvcmUoe1xyXG5cdG1vZHVsZXM6e1xyXG5cdFx0YXBwLFxyXG5cdFx0QmFzZTY0LFxyXG5cdH0sXHJcblx0c3RhdGU6IHtcclxuXHRcdGhhc0xvZ2luOiBmYWxzZSxcclxuXHRcdGFwa1ZlcnNpb25JbmZvOiBcIlwiLFxyXG5cdFx0bG9naW5Qcm92aWRlcjogXCJcIixcclxuXHRcdGFyZWFGdW5jOicnLFxyXG5cdFx0dGhpc2FyZWFGdW5jSUQ6JycsXHJcblx0XHR0aGlzYXJlYUZ1bmNTdWJJRDonJyxcclxuXHRcdHRoaXNFZGl0TmFtZTonJyxcclxuXHRcdHRoaXNFZGl0U3ViTmFtZTonJyxcclxuXHRcdHRoaXNEaWN0TmFtZTonJyxcclxuXHRcdF9jbGFzc0F0dHJMaXN0Ont9LFxyXG5cdFx0X2NsYXNzR3JpZFN0eWxlSW5mbzp7fSxcclxuXHRcdF9zdWJDbGFzc0F0dHJMaXN0Ont9LFxyXG5cdFx0X3N1YkNsYXNzR3JpZFN0eWxlSW5mbzp7fSxcclxuXHRcdF9kaWNWYWx1ZUluZm86e30sXHJcblx0XHREYXRhT2JqUnVuQ3VzdG9tRXZlbnRJbmZvOicnLFxyXG5cdFx0cXVlcnlTZWxwc246JycsXHJcblx0XHRQcm9qZWN0R2V0QW5hbHlzaXNMaXN0OicnLFxyXG5cdFx0YWRkY2xhc3NhdHRyOicnLFxyXG5cdFx0RGVsT2JqOicnLFxyXG5cdFx0dXNlcm5hbWU6XCJzYVwiLFxyXG5cdFx0dXNlcnB3ZDpcIjAwMDBcIixcclxuXHRcdHVybDpcIjEzOS4xNTkuMTQ0LjEwOjgwODAvbW9ib3gzXCIsIC8vMTE1LjI5LjE4NS4yNjo1MDAwXHJcblx0XHRPSU9yZ1NBUEk6ICcnLCAvLzExNS4yOS4xODUuMjY6NTEwMVxyXG5cdFx0T0lNb2JveFNBUEk6ICcnLCAvLzExNS4yOS4xODUuMjY6NTEwMlxyXG5cdFx0T0lEYXRhU0FQSTogJycsIC8vMTE1LjI5LjE4NS4yNjo1MTAzXHJcblx0XHRPSU1vbmdvZGJTdnI6ICcnIC8vMTE1LjI5LjE4NS4yNjo1MjAxXHJcblx0fSxcclxuXHRtdXRhdGlvbnM6IHtcclxuXHRcdHNldFVybChzdGF0ZSwgdXJsKSB7XHJcblx0XHRcdHN0YXRlLnVybCA9IHVybDtcclxuXHRcdH0sXHJcblx0XHRzZXRPcmdTQXBpKHN0YXRlLCB1cmwpIHtcclxuXHRcdFx0c3RhdGUuT0lPcmdTQVBJID0gdXJsO1xyXG5cdFx0fSxcclxuXHRcdHNldE1vYnhvU0FwaShzdGF0ZSwgdXJsKSB7XHJcblx0XHRcdHN0YXRlLk9JTW9ib3hTQVBJID0gdXJsO1xyXG5cdFx0fSxcclxuXHRcdHNldERhdGFTQXBpKHN0YXRlLCB1cmwpIHtcclxuXHRcdFx0c3RhdGUuT0lEYXRhU0FQSSA9IHVybDtcclxuXHRcdH0sXHJcblx0XHRzZXRNb25nb2RiU3ZyKHN0YXRlLCB1cmwpIHtcclxuXHRcdFx0c3RhdGUuT0lNb25nb2RiU3ZyID0gdXJsO1xyXG5cdFx0fSxcclxuXHRcdHNldEFwa1ZlcnNpb25JbmZvKHN0YXRlLCByZXQpIHtcclxuXHRcdFx0c3RhdGUuYXBrVmVyc2lvbkluZm8gPSByZXQ7XHJcblx0XHR9LFxyXG5cdFx0bG9naW4oc3RhdGUsIHByb3ZpZGVyKSB7XHJcblx0XHRcdHN0YXRlLmhhc0xvZ2luID0gdHJ1ZTtcclxuXHRcdFx0c3RhdGUubG9naW5Qcm92aWRlciA9IHByb3ZpZGVyO1xyXG5cdFx0fSxcclxuXHRcdGFyZWFGdW5jKHN0YXRlLCByZXQpIHtcclxuXHRcdFx0c3RhdGUuYXJlYUZ1bmMgPSByZXQ7XHJcblx0XHR9LFxyXG5cdFx0c2V0YXJlYUZ1bmNpZChzdGF0ZSxpZCl7XHJcblx0XHRcdHN0YXRlLnRoaXNhcmVhRnVuY0lEPWlkO1xyXG5cdFx0fSxcclxuXHRcdHNldGFyZWFGdW5TdWJjaWQoc3RhdGUsaWQpe1xyXG5cdFx0XHRzdGF0ZS50aGlzYXJlYUZ1bmNTdWJJRD1pZDtcclxuXHRcdH0sXHJcblx0XHRzZXRlZGl0TmFtZShzdGF0ZSxlZGl0TmFtZSl7XHJcblx0XHRcdHN0YXRlLnRoaXNFZGl0TmFtZT1lZGl0TmFtZTtcclxuXHRcdH0sXHJcblx0XHRzZXRlZGl0U3ViTmFtZShzdGF0ZSxlZGl0TmFtZSl7XHJcblx0XHRcdHN0YXRlLnRoaXNFZGl0U3ViTmFtZT1lZGl0TmFtZTtcclxuXHRcdH0sXHJcblx0XHRzZXREaWN0TmFtZShzdGF0ZSxkaWN0TmFtZSl7XHJcblx0XHRcdHN0YXRlLnRoaXNEaWN0TmFtZT1kaWN0TmFtZTtcclxuXHRcdH0sXHJcblx0XHRjbGFzc0F0dHJMaXN0KHN0YXRlLCByZXQpIHtcclxuXHRcdFx0Ly8gc3RhdGUuX2NsYXNzQXR0ckxpc3Rbc3RhdGUudGhpc2FyZWFGdW5jSURdID0gcmV0O1xyXG5cdFx0XHRWdWUuc2V0KHN0YXRlLl9jbGFzc0F0dHJMaXN0LHN0YXRlLnRoaXNhcmVhRnVuY0lELHJldCk7XHJcblx0XHR9LFxyXG5cdFx0Y2xhc3NHcmlkU3R5bGVJbmZvKHN0YXRlLCByZXQpIHtcclxuXHRcdFx0Ly8gc3RhdGUuX2NsYXNzR3JpZFN0eWxlSW5mb1tzdGF0ZS50aGlzYXJlYUZ1bmNJRF0gPSByZXQ7XHJcblx0XHRcdHZhciBkYXRhID0ge307XHJcblx0XHRcdGlmKHN0YXRlLl9jbGFzc0dyaWRTdHlsZUluZm9bc3RhdGUudGhpc2FyZWFGdW5jSURdKVxyXG5cdFx0XHRcdGRhdGEgPSBzdGF0ZS5fY2xhc3NHcmlkU3R5bGVJbmZvW3N0YXRlLnRoaXNhcmVhRnVuY0lEXTtcclxuXHRcdFx0VnVlLnNldChkYXRhLHN0YXRlLnRoaXNFZGl0TmFtZSxyZXQpO1xyXG5cdFx0XHRWdWUuc2V0KHN0YXRlLl9jbGFzc0dyaWRTdHlsZUluZm8sc3RhdGUudGhpc2FyZWFGdW5jSUQsZGF0YSk7XHJcblx0XHR9LFxyXG5cdFx0c3ViQ2xhc3NBdHRyTGlzdChzdGF0ZSwgcmV0KSB7XHJcblx0XHRcdFZ1ZS5zZXQoc3RhdGUuX3N1YkNsYXNzQXR0ckxpc3Qsc3RhdGUudGhpc2FyZWFGdW5jU3ViSUQscmV0KTtcclxuXHRcdH0sXHJcblx0XHRzdWJDbGFzc0dyaWRTdHlsZUluZm8oc3RhdGUsIHJldCkge1xyXG5cdFx0XHR2YXIgZGF0YSA9IHt9O1xyXG5cdFx0XHRpZihzdGF0ZS5fc3ViQ2xhc3NHcmlkU3R5bGVJbmZvW3N0YXRlLnRoaXNhcmVhRnVuY1N1YklEXSlcclxuXHRcdFx0XHRkYXRhID0gc3RhdGUuX3N1YkNsYXNzR3JpZFN0eWxlSW5mb1tzdGF0ZS50aGlzYXJlYUZ1bmNTdWJJRF07XHJcblx0XHRcdFZ1ZS5zZXQoZGF0YSxzdGF0ZS50aGlzRWRpdFN1Yk5hbWUscmV0KTtcclxuXHRcdFx0VnVlLnNldChzdGF0ZS5fc3ViQ2xhc3NHcmlkU3R5bGVJbmZvLHN0YXRlLnRoaXNhcmVhRnVuY1N1YklELGRhdGEpO1xyXG5cdFx0fSxcclxuXHRcdGRpY1ZhbHVlSW5mbyhzdGF0ZSwgcmV0KSB7XHJcblx0XHRcdC8vIHN0YXRlLl9kaWNWYWx1ZUluZm9bc3RhdGUudGhpc2FyZWFGdW5jSURdID0gcmV0O1xyXG5cdFx0XHRWdWUuc2V0KHN0YXRlLl9kaWNWYWx1ZUluZm8sc3RhdGUudGhpc0RpY3ROYW1lLHJldCk7XHJcblx0XHR9LFxyXG5cdFx0RGF0YU9ialJ1bkN1c3RvbUV2ZW50SW5mbyhzdGF0ZSwgcmV0KSB7XHJcblx0XHRcdHN0YXRlLkRhdGFPYmpSdW5DdXN0b21FdmVudEluZm8gPSByZXQ7XHJcblx0XHR9LFxyXG5cdFx0cXVlcnlTZWxwc24oc3RhdGUsIHJldCkge1xyXG5cdFx0XHRzdGF0ZS5xdWVyeVNlbHBzbiA9IHJldDtcclxuXHRcdH0sXHJcblx0XHRQcm9qZWN0R2V0QW5hbHlzaXNMaXN0KHN0YXRlLCByZXQpIHtcclxuXHRcdFx0c3RhdGUuUHJvamVjdEdldEFuYWx5c2lzTGlzdCA9IHJldDtcclxuXHRcdH0sXHJcblx0XHRhZGRjbGFzc2F0dHIoc3RhdGUsIHJldCkge1xyXG5cdFx0XHRzdGF0ZS5hZGRjbGFzc2F0dHIgPSByZXQ7XHJcblx0XHR9LFxyXG5cdFx0RGVsT2JqKHN0YXRlLCByZXQpIHtcclxuXHRcdFx0c3RhdGUuRGVsT2JqID0gcmV0O1xyXG5cdFx0fSxcclxuXHRcdGxvZ291dChzdGF0ZSkge1xyXG5cdFx0XHRzdGF0ZS5oYXNMb2dpbiA9IGZhbHNlXHJcblx0XHR9LFxyXG5cdH0sXHJcblx0Z2V0dGVyczoge1xyXG5cdFx0R2V0QXBrU2VydmlvbkluZm8oc3RhdGUpIHtcclxuXHRcdFx0cmV0dXJuIHN0YXRlLmFwa1ZlcnNpb25JbmZvXHJcblx0XHR9LFxyXG5cdFx0bG9naW5pZChzdGF0ZSkge1xyXG5cdFx0XHRyZXR1cm4gc3RhdGUubG9naW5Qcm92aWRlci5sb2dpbmlkXHJcblx0XHR9LFxyXG5cdFx0Z2V0VXJsKHN0YXRlKSB7XHJcblx0XHRcdHJldHVybiBzdGF0ZS51cmxcclxuXHRcdH0sXHJcblx0XHRnZXRPcmdTQXBpKHN0YXRlLCB1cmwpIHtcclxuXHRcdFx0cmV0dXJuIHN0YXRlLk9JT3JnU0FQSTtcclxuXHRcdH0sXHJcblx0XHRnZXRNb2J4b1NBcGkoc3RhdGUsIHVybCkge1xyXG5cdFx0XHRyZXR1cm4gc3RhdGUuT0lNb2JveFNBUEk7XHJcblx0XHR9LFxyXG5cdFx0Z2V0RGF0YVNBcGkoc3RhdGUsIHVybCkge1xyXG5cdFx0XHRyZXR1cm4gc3RhdGUuT0lEYXRhU0FQSTtcclxuXHRcdH0sXHJcblx0XHRnZXRNb25nb2RiU3ZyKHN0YXRlLCB1cmwpIHtcclxuXHRcdFx0cmV0dXJuIHN0YXRlLk9JTW9uZ29kYlN2cjtcclxuXHRcdH0sXHJcblx0XHRnZXRjbGFzc0F0dHJMaXN0KHN0YXRlKXtcclxuXHRcdFx0cmV0dXJuIHN0YXRlLl9jbGFzc0F0dHJMaXN0W3N0YXRlLnRoaXNhcmVhRnVuY0lEXTtcclxuXHRcdH0sXHJcblx0XHRnZXRjbGFzc0dyaWRTdHlsZUluZm8oc3RhdGUpe1xyXG5cdFx0XHRpZihzdGF0ZS5fY2xhc3NHcmlkU3R5bGVJbmZvW3N0YXRlLnRoaXNhcmVhRnVuY0lEXSlcclxuXHRcdFx0XHRyZXR1cm4gc3RhdGUuX2NsYXNzR3JpZFN0eWxlSW5mb1tzdGF0ZS50aGlzYXJlYUZ1bmNJRF1bc3RhdGUudGhpc0VkaXROYW1lXTtcclxuXHRcdFx0ZWxzZSBcclxuXHRcdFx0XHRyZXR1cm4gXCJcIjtcclxuXHRcdH0sXHJcblx0XHRnZXRTdWJDbGFzc0F0dHJMaXN0KHN0YXRlKXtcclxuXHRcdFx0cmV0dXJuIHN0YXRlLl9zdWJDbGFzc0F0dHJMaXN0W3N0YXRlLnRoaXNhcmVhRnVuY1N1YklEXTtcclxuXHRcdH0sXHJcblx0XHRnZXRTdWJDbGFzc0dyaWRTdHlsZUluZm8oc3RhdGUpe1xyXG5cdFx0XHRpZihzdGF0ZS5fc3ViQ2xhc3NHcmlkU3R5bGVJbmZvW3N0YXRlLnRoaXNhcmVhRnVuY1N1YklEXSlcclxuXHRcdFx0XHRyZXR1cm4gc3RhdGUuX3N1YkNsYXNzR3JpZFN0eWxlSW5mb1tzdGF0ZS50aGlzYXJlYUZ1bmNTdWJJRF1bc3RhdGUudGhpc0VkaXRTdWJOYW1lXTtcclxuXHRcdFx0ZWxzZSBcclxuXHRcdFx0XHRyZXR1cm4gXCJcIjtcclxuXHRcdH0sXHJcblx0XHRnZXRkaWNWYWx1ZUluZm8oc3RhdGUpe1xyXG5cdFx0XHRyZXR1cm4gc3RhdGUuX2RpY1ZhbHVlSW5mb1tzdGF0ZS50aGlzRGljdE5hbWVdO1xyXG5cdFx0fVxyXG5cdFx0XHJcblx0XHRcclxuXHR9LFxyXG5cdGFjdGlvbnM6IHtcclxuXHRcdC8ve2NvbW1pdH0g6Kej5p6E77yMXHJcblx0XHQvL3VuaXZlcmlmeUluZm8g6Ieq5a6a5LmJ5Y+C5pWwXHJcblx0XHRHZXRBcGtWZXJzaW9uSW5mbzogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0dW5pdmVyaWZ5SW5mbyA9IHVuaXZlcmlmeUluZm8gfHwge307XHJcblx0XHRcdFx0dW5pdmVyaWZ5SW5mby5zZXJ2ZXIgPSB1bml2ZXJpZnlJbmZvLnNlcnZlciB8fCAnJztcclxuXHRcdFx0XHRpZiAodW5pdmVyaWZ5SW5mby5zZXJ2ZXIubGVuZ3RoID09IDApIHtcclxuXHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjon5pyN5Yqh5Zmo5Zyw5Z2A5LiN6IO95Li656m6ISd9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dmFyIG9wZW5pbmZvID0gXCJodHRwOi8vXCIgKyB1bml2ZXJpZnlJbmZvLnNlcnZlciArIFwiL1wiOyAvLytcIi9PcmdXZWJTXCJcclxuXHRcdFx0XHQvL+iuvue9ruWFqOWxgOWPguaVsO+8mnVybC3mnI3liqHlmajlnLDlnYBcclxuXHRcdFx0XHRjb21taXQoXCJzZXRVcmxcIixvcGVuaW5mbyk7XHJcblx0XHRcdFx0Ly8gdmFyIHNlciA9IHVuaXZlcmlmeUluZm8uc2VydmVyLnNwbGl0KCcvJyk7XHJcblx0XHRcdFx0Ly8gaWYoc2VyWzFdID09ICdtb2JveDMnKXtcclxuXHRcdFx0XHQvLyBcdC8vIHJlamVjdCh7XCJlcnJNc2dcIjpcIk1vYm94M+aaguaXtuacquaUr+aMgeiHquWKqOabtOaWsO+8gVwifSk7XHJcblx0XHRcdFx0Ly8gXHRyZXNvbHZlKHtjb2RlOicwMDAwMCcsZGF0YTpcIlwiLG1zZzpcIlwifSk7XHJcblx0XHRcdFx0Ly8gXHRyZXR1cm47XHJcblx0XHRcdFx0Ly8gfVxyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogb3BlbmluZm8gKyBcIlBEQS9HZXRBcGtWZXJzaW9uSW5mb1wiLFxyXG5cdFx0XHRcdFx0ZGF0YToge30sXHJcblx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdGRhdGFUeXBlOlwianNvblwiLFxyXG5cdFx0XHRcdFx0aGVhZGVyOiB7XHJcblx0XHRcdFx0XHQgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhyZXMpOyBcclxuXHRcdFx0XHRcdFx0aWYocmVzLnN0YXR1c0NvZGU9PTQwNCl7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOlwi5Zyw5Z2A5LiN5a+577yM6K+35qOA5p+l6K+l5Zyw5Z2A77yaXCIrIG9wZW5pbmZvICtcIizmlrnms5XvvJpHZXRBcGtWZXJzaW9uSW5mbyzmmK/lkKbmraPnoa5cIn0pO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYocmVzLnN0YXR1c0NvZGU9PTUwMCl7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOlwi5pyq5om+5Yiw5pu05paw5YyF5omA5Zyo55uu5b2V77yBXCJ9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSByZXMuZGF0YVxyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmNvZGU9PScwMDAwMCcpIHtcclxuXHRcdFx0XHRcdFx0XHRjb21taXQoXCJzZXRBcGtWZXJzaW9uSW5mb1wiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQubXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0XHJcblx0XHRsb2dpbjogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0dW5pdmVyaWZ5SW5mbyA9IHVuaXZlcmlmeUluZm8gfHwge307XHJcblx0XHRcdFx0dW5pdmVyaWZ5SW5mby5zZXJ2ZXIgPSB1bml2ZXJpZnlJbmZvLnNlcnZlciB8fCAnJztcclxuXHRcdFx0XHR1bml2ZXJpZnlJbmZvLnVuYW1lID0gdW5pdmVyaWZ5SW5mby51bmFtZSB8fCAnJztcclxuXHRcdFx0XHR1bml2ZXJpZnlJbmZvLnB3ZCA9IHVuaXZlcmlmeUluZm8ucHdkIHx8ICcnO1xyXG5cdFx0XHRcdGlmICh1bml2ZXJpZnlJbmZvLnNlcnZlci5sZW5ndGggPT0gMCkge1xyXG5cdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOifmnI3liqHlmajlnLDlnYDkuI3og73kuLrnqbohJ30pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAodW5pdmVyaWZ5SW5mby51bmFtZS5sZW5ndGggPCAyKSB7XHJcblx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6J+i0puWPt+acgOefreS4uiAyIOS4quWtl+espiEnfSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICh1bml2ZXJpZnlJbmZvLnB3ZC5sZW5ndGggPCAxKSB7XHJcblx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6J+WvhueggeacgOefreS4uiAx5Liq5a2X56ymISd9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dmFyIG9wZW5pbmZvID0gXCJodHRwOi8vXCIgKyB1bml2ZXJpZnlJbmZvLnNlcnZlciArIFwiL1wiO1xyXG5cdFx0XHRcdC8v6K6+572u5YWo5bGA5Y+C5pWw77yadXJsLeacjeWKoeWZqOWcsOWdgFxyXG5cdFx0XHRcdGNvbW1pdChcInNldFVybFwiLG9wZW5pbmZvKTtcclxuXHRcdFx0XHR2YXIgc2VyID0gdW5pdmVyaWZ5SW5mby5zZXJ2ZXIuc3BsaXQoJy8nKTtcclxuXHRcdFx0XHR2YXIgdXJsID0gb3BlbmluZm8gKyBcIlBEQS9TaWduSW5cIjtcclxuXHRcdFx0XHR2YXIgaGVhZGVyID0geydjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ307XHJcblx0XHRcdFx0Y29tbWl0KFwic2V0T3JnU0FwaVwiLCcnKTtcclxuXHRcdFx0XHRjb21taXQoXCJzZXRNb2J4b1NBcGlcIiwnJyk7XHJcblx0XHRcdFx0Y29tbWl0KFwic2V0RGF0YVNBcGlcIiwnJyk7XHJcblx0XHRcdFx0Y29tbWl0KFwic2V0TW9uZ29kYlN2clwiLCcnKTtcclxuXHRcdFx0XHRpZihzZXJbMV0gPT0gJ21vYm94MycpeyAvL+WIpOaWreWcsOWdgOaYr+WQpuaYr01vYm94M1xyXG5cdFx0XHRcdFx0dmFyIG9yZ1NBcGkgPSBcImh0dHA6Ly9cIiArIHNlclswXS5zcGxpdCgnOicpWzBdICsgXCI6NTEwMS9cIjtcclxuXHRcdFx0XHRcdHZhciBtb2J4b1NBcGkgPSBcImh0dHA6Ly9cIiArIHNlclswXS5zcGxpdCgnOicpWzBdICsgXCI6NTEwMi9cIjtcclxuXHRcdFx0XHRcdHZhciBkYXRhU0FwaSA9IFwiaHR0cDovL1wiICsgc2VyWzBdLnNwbGl0KCc6JylbMF0gKyBcIjo1MTAzL1wiO1xyXG5cdFx0XHRcdFx0dmFyIG1vbmdvZGJTdnIgPSBcImh0dHA6Ly9cIiArIHNlclswXS5zcGxpdCgnOicpWzBdICsgXCI6NTIwMS9cIjtcclxuXHRcdFx0XHRcdGNvbW1pdChcInNldE9yZ1NBcGlcIixvcmdTQXBpKTtcclxuXHRcdFx0XHRcdGNvbW1pdChcInNldE1vYnhvU0FwaVwiLG1vYnhvU0FwaSk7XHJcblx0XHRcdFx0XHRjb21taXQoXCJzZXREYXRhU0FwaVwiLGRhdGFTQXBpKTtcclxuXHRcdFx0XHRcdGNvbW1pdChcInNldE1vbmdvZGJTdnJcIixtb25nb2RiU3ZyKTtcclxuXHRcdFx0XHRcdHVybCA9IG9yZ1NBcGkrJ2FwaS91c2VyL2FjZS9WZXJpZnlQYXNzd29yZCc7XHJcblx0XHRcdFx0XHR1bml2ZXJpZnlJbmZvID0ge1xyXG5cdFx0XHRcdFx0XHRhcHBfdHlwZTogXCJtb2JveFwiLFxyXG5cdFx0XHRcdFx0XHR1c2VyX2xvZ2luOiBCYXNlNjQuZW5jb2RlKHVuaXZlcmlmeUluZm8udW5hbWUpLFxyXG5cdFx0XHRcdFx0XHR1c2VyX3BzdzogQmFzZTY0LmVuY29kZSh1bml2ZXJpZnlJbmZvLnB3ZCksXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0aGVhZGVyPXt9O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRcclxuXHRcdFx0XHR1bmkucmVxdWVzdCh7XHJcblx0XHRcdFx0XHR1cmw6IHVybCxcclxuXHRcdFx0XHRcdGRhdGE6IHVuaXZlcmlmeUluZm8sXHJcblx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdGRhdGFUeXBlOlwianNvblwiLFxyXG5cdFx0XHRcdFx0aGVhZGVyOiBoZWFkZXIsXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKHJlcyk7IFxyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSByZXMuZGF0YVxyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmNvZGU9PScwMDAwMCcgfHwgcmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRjb21taXQoXCJsb2dpblwiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQubXNnP3JldC5tc2c6cmV0LmVycl9tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdGFyZWFGdW5jOiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQgLy8gY29uc29sZS5sb2coc3RhdGUubG9naW5Qcm92aWRlci5sb2dpbmlkLnJlc3VsdC5zZXNzaW9uX2lkKTtcclxuXHRcdFx0XHR1bml2ZXJpZnlJbmZvLmxvZ2luSW5mbyA9IEpTT04uc3RyaW5naWZ5KHtcclxuXHRcdFx0XHRcdHNlcnZlcjogdW5pLmdldFN0b3JhZ2VTeW5jKCdzZXJ2ZXInKSxcclxuXHRcdFx0XHRcdHVuYW1lOiB1bmkuZ2V0U3RvcmFnZVN5bmMoJ2FjY291bnQnKSxcclxuXHRcdFx0XHRcdHB3ZDogdW5pLmdldFN0b3JhZ2VTeW5jKCdwYXNzd29yZCcpLFxyXG5cdFx0XHRcdFx0Y25hbWU6IHBsdXMuZGV2aWNlLm1vZGVsLFxyXG5cdFx0XHRcdFx0dHlwZTogXCIwXCJcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHR2YXIgdXJsID0gc3RhdGUudXJsICsgXCJQREEvUERBQXJlYVwiO1xyXG5cdFx0XHRcdHZhciBoZWFkZXIgPSB7J2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnfTtcclxuXHRcdFx0XHRpZihzdGF0ZS5PSU1vYm94U0FQSSl7IC8v5Yik5pat5piv5ZCm5pivTW9ib3gzXHJcblx0XHRcdFx0XHR1cmwgPSBzdGF0ZS5PSU1vYm94U0FQSSsnYXBpL2FwcC9hcmVhL0dldExpc3Q/c2Vzc2lvbmlkPScrc3RhdGUubG9naW5Qcm92aWRlci5sb2dpbmlkLnJlc3VsdC5zZXNzaW9uX2lkO1xyXG5cdFx0XHRcdFx0dW5pdmVyaWZ5SW5mbyA9IHtcclxuXHRcdFx0XHRcdFx0YXBwX3R5cGU6IFwiTUVTXCIsXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0aGVhZGVyPXt9O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQgXHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiB1cmwsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdGhlYWRlcjogaGVhZGVyLFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhyZXMpO1xyXG5cdFx0XHRcdFx0XHRpZihyZXMuc3RhdHVzQ29kZT09NDA0KXtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6XCLlnLDlnYDkuI3lr7nvvIzor7fmo4Dmn6Xor6XlnLDlnYDvvJpcIisgb3BlbmluZm99KTtcclxuXHRcdFx0XHRcdFx0fSBcclxuXHRcdFx0XHRcdFx0Ly8gaWYoSlNPTi5zdHJpbmdpZnkocmVzLmRhdGEpLmluY2x1ZGVzKCdMb2dpbiBQYWdlIC0gQWNlIEFkbWluJykpe1xyXG5cdFx0XHRcdFx0XHQvLyBcdHVuaS5yZUxhdW5jaCh7XHJcblx0XHRcdFx0XHRcdC8vIFx0XHR1cmw6ICcuLi9sb2dpbi9pbmRleCdcclxuXHRcdFx0XHRcdFx0Ly8gXHR9KVxyXG5cdFx0XHRcdFx0XHQvLyBcdHJlamVjdCh7XCJlcnJNc2dcIjpcIueZu+W9leW3sui/h+acn++8jOivt+mHjeaWsOeZu+W9lVwifSk7XHJcblx0XHRcdFx0XHRcdC8vIH1cclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gcmVzLmRhdGE7XHJcblx0XHRcdFx0XHRcdGlmIChyZXQuY29kZT09JzAwMDAwJyB8fCByZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1pdChcImFyZWFGdW5jXCIscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5tc2c/cmV0Lm1zZzpyZXQuZXJyX21zZ30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdC8vIE1vYm94M+iOt+WPluW6lOeUqOmihuWfn+S4i+eahOWKn+iDveeCuVxyXG5cdFx0R2V0RnVuY1RyZWU6IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdCAvLyBjb25zb2xlLmxvZyhzdGF0ZS5sb2dpblByb3ZpZGVyLmxvZ2luaWQucmVzdWx0LnNlc3Npb25faWQpO1xyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogc3RhdGUuT0lNb2JveFNBUEkrJ2FwaS9hcHAvR2V0RnVuY1RyZWU/c2Vzc2lvbmlkPScrc3RhdGUubG9naW5Qcm92aWRlci5sb2dpbmlkLnJlc3VsdC5zZXNzaW9uX2lkLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAoX3JlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhfcmVzKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gX3Jlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIGNvbW1pdChcImFyZWFGdW5jXCIscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5lcnJfbXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0XHJcblx0XHRjbGFzc0F0dHJMaXN0OiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQgLy8gY29uc29sZS5sb2coc3RhdGUudXJsKTtcclxuXHRcdFx0XHR1bml2ZXJpZnlJbmZvLmxvZ2luSW5mbyA9IEpTT04uc3RyaW5naWZ5KHtcclxuXHRcdFx0XHRcdHNlcnZlcjogdW5pLmdldFN0b3JhZ2VTeW5jKCdzZXJ2ZXInKSxcclxuXHRcdFx0XHRcdHVuYW1lOiB1bmkuZ2V0U3RvcmFnZVN5bmMoJ2FjY291bnQnKSxcclxuXHRcdFx0XHRcdHB3ZDogdW5pLmdldFN0b3JhZ2VTeW5jKCdwYXNzd29yZCcpLFxyXG5cdFx0XHRcdFx0Y25hbWU6IHBsdXMuZGV2aWNlLm1vZGVsLFxyXG5cdFx0XHRcdFx0dHlwZTogXCIwXCJcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHR1bmkucmVxdWVzdCh7XHJcblx0XHRcdFx0XHR1cmw6IHN0YXRlLnVybCArIFwiUERBL1BEQUF0dHJMaXN0XCIsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdGhlYWRlcjoge1xyXG5cdFx0XHRcdFx0XHQnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKHJlcyk7XHJcblx0XHRcdFx0XHRcdC8vIGlmKEpTT04uc3RyaW5naWZ5KHJlcy5kYXRhKS5pbmNsdWRlcygnTG9naW4gUGFnZSAtIEFjZSBBZG1pbicpKXtcclxuXHRcdFx0XHRcdFx0Ly8gXHR1bmkucmVMYXVuY2goe1xyXG5cdFx0XHRcdFx0XHQvLyBcdFx0dXJsOiAnLi4vbG9naW4vaW5kZXgnXHJcblx0XHRcdFx0XHRcdC8vIFx0fSlcclxuXHRcdFx0XHRcdFx0Ly8gXHRyZWplY3Qoe1wiZXJyTXNnXCI6XCLnmbvlvZXlt7Lov4fmnJ/vvIzor7fph43mlrDnmbvlvZVcIn0pO1xyXG5cdFx0XHRcdFx0XHQvLyB9XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IHJlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuY29kZT09JzAwMDAwJykge1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1pdChcImNsYXNzQXR0ckxpc3RcIixyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6cmV0Lm1zZ30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdFxyXG5cdFx0Y2xhc3NHcmlkU3R5bGVJbmZvOiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQgLy8gY29uc29sZS5sb2coc3RhdGUudXJsKTtcclxuXHRcdFx0XHR1bml2ZXJpZnlJbmZvLmxvZ2luSW5mbyA9IEpTT04uc3RyaW5naWZ5KHtcclxuXHRcdFx0XHRcdHNlcnZlcjogdW5pLmdldFN0b3JhZ2VTeW5jKCdzZXJ2ZXInKSxcclxuXHRcdFx0XHRcdHVuYW1lOiB1bmkuZ2V0U3RvcmFnZVN5bmMoJ2FjY291bnQnKSxcclxuXHRcdFx0XHRcdHB3ZDogdW5pLmdldFN0b3JhZ2VTeW5jKCdwYXNzd29yZCcpLFxyXG5cdFx0XHRcdFx0Y25hbWU6IHBsdXMuZGV2aWNlLm1vZGVsLFxyXG5cdFx0XHRcdFx0dHlwZTogXCIwXCJcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHQgXHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS51cmwgKyBcIlBEQS9QREFHcmlkU3R5bGVHZXRJbmZvXCIsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdGhlYWRlcjoge1xyXG5cdFx0XHRcdFx0XHQnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKHJlcyk7XHJcblx0XHRcdFx0XHRcdC8vIGlmKEpTT04uc3RyaW5naWZ5KHJlcy5kYXRhKS5pbmNsdWRlcygnTG9naW4gUGFnZSAtIEFjZSBBZG1pbicpKXtcclxuXHRcdFx0XHRcdFx0Ly8gXHR1bmkucmVMYXVuY2goe1xyXG5cdFx0XHRcdFx0XHQvLyBcdFx0dXJsOiAnLi4vbG9naW4vaW5kZXgnXHJcblx0XHRcdFx0XHRcdC8vIFx0fSlcclxuXHRcdFx0XHRcdFx0Ly8gXHRyZWplY3Qoe1wiZXJyTXNnXCI6XCLnmbvlvZXlt7Lov4fmnJ/vvIzor7fph43mlrDnmbvlvZVcIn0pO1xyXG5cdFx0XHRcdFx0XHQvLyB9XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IHJlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuY29kZT09JzAwMDAwJykge1xyXG5cdFx0XHRcdFx0XHRcdC8vIHZhciBkYXRhID17fTtcclxuXHRcdFx0XHRcdFx0XHQvLyBWdWUuc2V0KGRhdGEsdW5pdmVyaWZ5SW5mby5uYW1lLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0Y29tbWl0KFwiY2xhc3NHcmlkU3R5bGVJbmZvXCIscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdHN1YkNsYXNzQXR0ckxpc3Q6IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdCAvLyBjb25zb2xlLmxvZyhzdGF0ZS51cmwpO1xyXG5cdFx0XHRcdHVuaXZlcmlmeUluZm8ubG9naW5JbmZvID0gSlNPTi5zdHJpbmdpZnkoe1xyXG5cdFx0XHRcdFx0c2VydmVyOiB1bmkuZ2V0U3RvcmFnZVN5bmMoJ3NlcnZlcicpLFxyXG5cdFx0XHRcdFx0dW5hbWU6IHVuaS5nZXRTdG9yYWdlU3luYygnYWNjb3VudCcpLFxyXG5cdFx0XHRcdFx0cHdkOiB1bmkuZ2V0U3RvcmFnZVN5bmMoJ3Bhc3N3b3JkJyksXHJcblx0XHRcdFx0XHRjbmFtZTogcGx1cy5kZXZpY2UubW9kZWwsXHJcblx0XHRcdFx0XHR0eXBlOiBcIjBcIlxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogc3RhdGUudXJsICsgXCJQREEvUERBQXR0ckxpc3RcIixcclxuXHRcdFx0XHRcdGRhdGE6IHVuaXZlcmlmeUluZm8sXHJcblx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdGRhdGFUeXBlOlwianNvblwiLFxyXG5cdFx0XHRcdFx0aGVhZGVyOiB7XHJcblx0XHRcdFx0XHRcdCdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChyZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2cocmVzKTtcclxuXHRcdFx0XHRcdFx0Ly8gaWYoSlNPTi5zdHJpbmdpZnkocmVzLmRhdGEpLmluY2x1ZGVzKCdMb2dpbiBQYWdlIC0gQWNlIEFkbWluJykpe1xyXG5cdFx0XHRcdFx0XHQvLyBcdHVuaS5yZUxhdW5jaCh7XHJcblx0XHRcdFx0XHRcdC8vIFx0XHR1cmw6ICcuLi9sb2dpbi9pbmRleCdcclxuXHRcdFx0XHRcdFx0Ly8gXHR9KVxyXG5cdFx0XHRcdFx0XHQvLyBcdHJlamVjdCh7XCJlcnJNc2dcIjpcIueZu+W9leW3sui/h+acn++8jOivt+mHjeaWsOeZu+W9lVwifSk7XHJcblx0XHRcdFx0XHRcdC8vIH1cclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gcmVzLmRhdGFcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5jb2RlPT0nMDAwMDAnKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29tbWl0KFwic3ViQ2xhc3NBdHRyTGlzdFwiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQubXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0XHJcblx0XHRzdWJDbGFzc0dyaWRTdHlsZUluZm86IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdCAvLyBjb25zb2xlLmxvZyhzdGF0ZS51cmwpO1xyXG5cdFx0XHRcdHVuaXZlcmlmeUluZm8ubG9naW5JbmZvID0gSlNPTi5zdHJpbmdpZnkoe1xyXG5cdFx0XHRcdFx0c2VydmVyOiB1bmkuZ2V0U3RvcmFnZVN5bmMoJ3NlcnZlcicpLFxyXG5cdFx0XHRcdFx0dW5hbWU6IHVuaS5nZXRTdG9yYWdlU3luYygnYWNjb3VudCcpLFxyXG5cdFx0XHRcdFx0cHdkOiB1bmkuZ2V0U3RvcmFnZVN5bmMoJ3Bhc3N3b3JkJyksXHJcblx0XHRcdFx0XHRjbmFtZTogcGx1cy5kZXZpY2UubW9kZWwsXHJcblx0XHRcdFx0XHR0eXBlOiBcIjBcIlxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdCBcclxuXHRcdFx0XHR1bmkucmVxdWVzdCh7XHJcblx0XHRcdFx0XHR1cmw6IHN0YXRlLnVybCArIFwiUERBL1BEQUdyaWRTdHlsZUdldEluZm9cIixcclxuXHRcdFx0XHRcdGRhdGE6IHVuaXZlcmlmeUluZm8sXHJcblx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdGRhdGFUeXBlOlwianNvblwiLFxyXG5cdFx0XHRcdFx0aGVhZGVyOiB7XHJcblx0XHRcdFx0XHRcdCdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChyZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2cocmVzKTtcclxuXHRcdFx0XHRcdFx0Ly8gaWYoSlNPTi5zdHJpbmdpZnkocmVzLmRhdGEpLmluY2x1ZGVzKCdMb2dpbiBQYWdlIC0gQWNlIEFkbWluJykpe1xyXG5cdFx0XHRcdFx0XHQvLyBcdHVuaS5yZUxhdW5jaCh7XHJcblx0XHRcdFx0XHRcdC8vIFx0XHR1cmw6ICcuLi9sb2dpbi9pbmRleCdcclxuXHRcdFx0XHRcdFx0Ly8gXHR9KVxyXG5cdFx0XHRcdFx0XHQvLyBcdHJlamVjdCh7XCJlcnJNc2dcIjpcIueZu+W9leW3sui/h+acn++8jOivt+mHjeaWsOeZu+W9lVwifSk7XHJcblx0XHRcdFx0XHRcdC8vIH1cclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gcmVzLmRhdGFcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5jb2RlPT0nMDAwMDAnKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gdmFyIGRhdGEgPXt9O1xyXG5cdFx0XHRcdFx0XHRcdC8vIFZ1ZS5zZXQoZGF0YSx1bml2ZXJpZnlJbmZvLm5hbWUscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRjb21taXQoXCJzdWJDbGFzc0dyaWRTdHlsZUluZm9cIixyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6cmV0LmVycl9tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdGRpY1ZhbHVlSW5mbzogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0IC8vIGNvbnNvbGUubG9nKHN0YXRlLnVybCk7XHJcblx0XHRcdFx0dW5pdmVyaWZ5SW5mby5sb2dpbkluZm8gPSBKU09OLnN0cmluZ2lmeSh7XHJcblx0XHRcdFx0XHRzZXJ2ZXI6IHVuaS5nZXRTdG9yYWdlU3luYygnc2VydmVyJyksXHJcblx0XHRcdFx0XHR1bmFtZTogdW5pLmdldFN0b3JhZ2VTeW5jKCdhY2NvdW50JyksXHJcblx0XHRcdFx0XHRwd2Q6IHVuaS5nZXRTdG9yYWdlU3luYygncGFzc3dvcmQnKSxcclxuXHRcdFx0XHRcdGNuYW1lOiBwbHVzLmRldmljZS5tb2RlbCxcclxuXHRcdFx0XHRcdHR5cGU6IFwiMFwiXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0IFxyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogc3RhdGUudXJsICsgXCJQREEvUERBRGljVmFsdWVHZXRJbmZvXCIsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdGhlYWRlcjoge1xyXG5cdFx0XHRcdFx0XHQnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHJlcyk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IHJlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuY29kZT09JzAwMDAwJykge1xyXG5cdFx0XHRcdFx0XHRcdHN0YXRlLnRoaXNEaWN0TmFtZSA9IHVuaXZlcmlmeUluZm8uZGljX25hbWVcclxuXHRcdFx0XHRcdFx0XHRjb21taXQoXCJkaWNWYWx1ZUluZm9cIixyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6cmV0Lm1zZ30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdFxyXG5cdFx0RGF0YU9ialJ1bkN1c3RvbUV2ZW50SW5mbzogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0IC8vIGNvbnNvbGUubG9nKHN0YXRlLnVybCk7XHJcblx0XHRcdFx0dW5pdmVyaWZ5SW5mby5sb2dpbkluZm8gPSBKU09OLnN0cmluZ2lmeSh7XHJcblx0XHRcdFx0XHRzZXJ2ZXI6IHVuaS5nZXRTdG9yYWdlU3luYygnc2VydmVyJyksXHJcblx0XHRcdFx0XHR1bmFtZTogdW5pLmdldFN0b3JhZ2VTeW5jKCdhY2NvdW50JyksXHJcblx0XHRcdFx0XHRwd2Q6IHVuaS5nZXRTdG9yYWdlU3luYygncGFzc3dvcmQnKSxcclxuXHRcdFx0XHRcdGNuYW1lOiBwbHVzLmRldmljZS5tb2RlbCxcclxuXHRcdFx0XHRcdHR5cGU6IFwiMFwiXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS51cmwgKyBcIlBEQS9QREFEYXRhT2JqUnVuQ3VzdG9tRXZlbnRcIixcclxuXHRcdFx0XHRcdGRhdGE6IHVuaXZlcmlmeUluZm8sXHJcblx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdGRhdGFUeXBlOlwianNvblwiLFxyXG5cdFx0XHRcdFx0aGVhZGVyOiB7XHJcblx0XHRcdFx0XHRcdCdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChyZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocmVzKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gcmVzLmRhdGFcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5jb2RlPT0nMDAwMDAnKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29tbWl0KFwiRGF0YU9ialJ1bkN1c3RvbUV2ZW50SW5mb1wiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQubXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0XHJcblx0XHRxdWVyeVNlbHBzbjogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0IC8vIGNvbnNvbGUubG9nKHN0YXRlLnVybCk7XHJcblx0XHRcdFx0dmFyIHVybCA9IHN0YXRlLnVybCArIFwic2VscHNuL3F1ZXJ5anNvblwiO1xyXG5cdFx0XHRcdHZhciBkYXRhanNvbiA9IHVuaXZlcmlmeUluZm87XHJcblx0XHRcdFx0dmFyIGhlYWRlciA9IHsnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCd9O1xyXG5cdFx0XHRcdGlmKHN0YXRlLk9JT3JnU0FQSSl7IC8v5Yik5pat5piv5ZCm5pivTW9ib3gzXHJcblx0XHRcdFx0IFx0dXJsID0gc3RhdGUuT0lPcmdTQVBJKydhcGkvdXNlci9xdWVyeS9xdWVyeT9zZXNzaW9uaWQ9JytzdGF0ZS5sb2dpblByb3ZpZGVyLmxvZ2luaWQucmVzdWx0LnNlc3Npb25faWQ7XHJcblx0XHRcdFx0XHRkYXRhanNvbiA9IHtcclxuXHRcdFx0XHQgXHRcdHF1ZXJ5X3N0cjogdW5pdmVyaWZ5SW5mby5qcCxcclxuXHRcdFx0XHQgXHR9O1xyXG5cdFx0XHRcdCBcdGhlYWRlcj17fTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiB1cmwsXHJcblx0XHRcdFx0XHRkYXRhOiBkYXRhanNvbixcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRoZWFkZXI6IGhlYWRlcixcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChyZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocmVzKTtcclxuXHRcdFx0XHRcdFx0dHJ5e1xyXG5cdFx0XHRcdFx0XHRcdHJlcyA9IEpTT04ucGFyc2UocmVzLmRhdGEpO1xyXG5cdFx0XHRcdFx0XHR9Y2F0Y2goZSl7IFxyXG5cdFx0XHRcdFx0XHRcdHJlcyA9IHJlcy5kYXRhO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmIChyZXMuY29kZT09JzAwMDAwJyB8fCByZXMuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1pdChcInF1ZXJ5U2VscHNuXCIscmVzKTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJlcyk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJlcy5tc2c/cmVzLm1zZzpyZXMuZXJyX21zZ30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdFxyXG5cdFx0UHJvamVjdEdldEFuYWx5c2lzTGlzdDogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0IC8vIGNvbnNvbGUubG9nKHN0YXRlLnVybCk7XHJcblx0XHRcdFx0IHZhciB1cmwgPSBzdGF0ZS51cmwgKyBcImJwbS9Qcm9qZWN0R2V0QW5hbHlzaXNMaXN0XCI7XHJcblx0XHRcdFx0IHZhciBoZWFkZXIgPSB7J2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnfTtcclxuXHRcdFx0XHQgaWYoc3RhdGUuT0lNb2JveFNBUEkpeyAvL+WIpOaWreaYr+WQpuaYr01vYm94M1xyXG5cdFx0XHRcdCBcdC8vIHVybCA9IHN0YXRlLk9JTW9ib3hTQVBJKydhcGkvYXBwL2FyZWEvR2V0TGlzdD9zZXNzaW9uaWQ9JytzdGF0ZS5sb2dpblByb3ZpZGVyLmxvZ2luaWQucmVzdWx0LnNlc3Npb25faWQ7XHJcblx0XHRcdFx0IFx0Ly8gdW5pdmVyaWZ5SW5mbyA9IHtcclxuXHRcdFx0XHQgXHQvLyBcdGFwcF90eXBlOiBcIk1FU1wiLFxyXG5cdFx0XHRcdCBcdC8vIH07XHJcblx0XHRcdFx0IFx0Ly8gaGVhZGVyPXt9O1xyXG5cdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOlwiTW9ib3gz5pqC5pe25pyq5pSv5oyB6YCJ5oup6aG555uu5o6l5Y+j77yBXCJ9KTtcclxuXHRcdFx0XHRcdC8vIHJlc29sdmUoe2NvZGU6JzAwMDAwJyxkYXRhOlwiXCIsbXNnOlwiXCJ9KTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHQgfVxyXG5cdFx0XHRcdCAgXHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiB1cmwsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdGhlYWRlcjogaGVhZGVyLFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhyZXMpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSByZXMuZGF0YTtcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5jb2RlPT0nMDAwMDAnKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29tbWl0KFwiUHJvamVjdEdldEFuYWx5c2lzTGlzdFwiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQubXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0XHJcblx0XHRhZGRjbGFzc2F0dHI6IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKHN0YXRlLnVybCk7XHJcblx0XHRcdFx0dW5pdmVyaWZ5SW5mby5sb2dpbkluZm8gPSBKU09OLnN0cmluZ2lmeSh7XHJcblx0XHRcdFx0XHRzZXJ2ZXI6IHVuaS5nZXRTdG9yYWdlU3luYygnc2VydmVyJyksXHJcblx0XHRcdFx0XHR1bmFtZTogdW5pLmdldFN0b3JhZ2VTeW5jKCdhY2NvdW50JyksXHJcblx0XHRcdFx0XHRwd2Q6IHVuaS5nZXRTdG9yYWdlU3luYygncGFzc3dvcmQnKSxcclxuXHRcdFx0XHRcdGNuYW1lOiBwbHVzLmRldmljZS5tb2RlbCxcclxuXHRcdFx0XHRcdHR5cGU6IFwiMFwiXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS51cmwgKyBcIlBEQS9hZGRjbGFzc2F0dHJcIixcclxuXHRcdFx0XHRcdGRhdGE6IHVuaXZlcmlmeUluZm8sXHJcblx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdGRhdGFUeXBlOlwianNvblwiLFxyXG5cdFx0XHRcdFx0aGVhZGVyOiB7XHJcblx0XHRcdFx0XHRcdCdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChyZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2cocmVzKTtcclxuXHRcdFx0XHRcdFx0Ly8gaWYoSlNPTi5zdHJpbmdpZnkocmVzLmRhdGEpLmluY2x1ZGVzKCdMb2dpbiBQYWdlIC0gQWNlIEFkbWluJykpe1xyXG5cdFx0XHRcdFx0XHQvLyBcdHVuaS5yZUxhdW5jaCh7XHJcblx0XHRcdFx0XHRcdC8vIFx0XHR1cmw6ICcuLi9sb2dpbi9pbmRleCdcclxuXHRcdFx0XHRcdFx0Ly8gXHR9KVxyXG5cdFx0XHRcdFx0XHQvLyBcdHJlamVjdCh7XCJlcnJNc2dcIjpcIueZu+W9leW3sui/h+acn++8jOivt+mHjeaWsOeZu+W9lVwifSk7XHJcblx0XHRcdFx0XHRcdC8vIH1cclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gcmVzLmRhdGE7XHJcblx0XHRcdFx0XHRcdGlmIChyZXQuY29kZT09JzAwMDAwJykge1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1pdChcImFkZGNsYXNzYXR0clwiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpKU09OLnN0cmluZ2lmeShyZXQpfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0XHJcblx0XHREZWxPYmo6IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdCAvLyBjb25zb2xlLmxvZyhzdGF0ZS51cmwpO1xyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogc3RhdGUudXJsICsgXCJQREEvRGVsT2JqXCIsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdGhlYWRlcjoge1xyXG5cdFx0XHRcdFx0XHQnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKHJlcyk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IHJlcy5kYXRhO1xyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmNvZGU9PScwMDAwMCcpIHtcclxuXHRcdFx0XHRcdFx0XHRjb21taXQoXCJEZWxPYmpcIixyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6SlNPTi5zdHJpbmdpZnkocmV0KX0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdFxyXG5cdFx0XHJcblx0XHQvLyBhcGkvY2xhc3MvYXR0ci9HZXRMaXN0P3Nlc3Npb25pZD1TRVNTSU9OX0lEXHJcblx0XHQvLyBNb2JveDPlvpfliLDmlbDmja7nsbvlsZ7mgKdcclxuXHRcdGNsYXNzQXR0ckdldExpc3Q6IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKHN0YXRlLnVybCk7XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS5PSURhdGFTQVBJKydhcGkvY2xhc3MvYXR0ci9HZXRMaXN0P3Nlc3Npb25pZD0nK3N0YXRlLmxvZ2luUHJvdmlkZXIubG9naW5pZC5yZXN1bHQuc2Vzc2lvbl9pZCxcclxuXHRcdFx0XHRcdGRhdGE6IHVuaXZlcmlmeUluZm8sXHJcblx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdGRhdGFUeXBlOlwianNvblwiLFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKF9yZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coX3Jlcyk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IF9yZXMuZGF0YVxyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRjb21taXQoXCJjbGFzc0F0dHJMaXN0XCIscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5lcnJfbXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0Ly8gYXBpL2NsYXNzL2F0dHIvR2V0TGlzdD9zZXNzaW9uaWQ9U0VTU0lPTl9JRFxyXG5cdFx0Ly8gTW9ib3gz5b6X5Yiw5pWw5o2u57G75bGe5oCnXHJcblx0XHRzdWJDbGFzc0F0dHJHZXRMaXN0OiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdGF0ZS51cmwpO1xyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogc3RhdGUuT0lEYXRhU0FQSSsnYXBpL2NsYXNzL2F0dHIvR2V0TGlzdD9zZXNzaW9uaWQ9JytzdGF0ZS5sb2dpblByb3ZpZGVyLmxvZ2luaWQucmVzdWx0LnNlc3Npb25faWQsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChfcmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKF9yZXMpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSBfcmVzLmRhdGFcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29tbWl0KFwic3ViQ2xhc3NBdHRyTGlzdFwiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQuZXJyX21zZ30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdC8vIGFwaS9kaWN0L2l0ZW0vR2V0SW5mbz9zZXNzaW9uaWQ9U0VTU0lPTl9JRFxyXG5cdFx0Ly8gTW9ib3gz5b6X5Yiw5a2X5YW46aG55YiX6KGoXHJcblx0XHREaWN0SXRlbUdldExpc3Q6IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKHN0YXRlLnVybCk7XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS5PSU1vYm94U0FQSSsnYXBpL2RpY3QvaXRlbS9HZXRJbmZvP3Nlc3Npb25pZD0nK3N0YXRlLmxvZ2luUHJvdmlkZXIubG9naW5pZC5yZXN1bHQuc2Vzc2lvbl9pZCxcclxuXHRcdFx0XHRcdGRhdGE6IHVuaXZlcmlmeUluZm8sXHJcblx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdGRhdGFUeXBlOlwianNvblwiLFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKF9yZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coX3Jlcyk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IF9yZXMuZGF0YVxyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5lcnJfbXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0Ly8gYXBpL2RpY3QvR2V0SW5mbzI/c2Vzc2lvbmlkPVNFU1NJT05fSURcclxuXHRcdC8vIE1vYm94M+W+l+WIsOWtl+WFuOS/oeaBr1xyXG5cdFx0RGljdEdldEluZm86IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKHN0YXRlLnVybCk7XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS5PSU1vYm94U0FQSSsnYXBpL2RpY3QvR2V0SW5mbzI/c2Vzc2lvbmlkPScrc3RhdGUubG9naW5Qcm92aWRlci5sb2dpbmlkLnJlc3VsdC5zZXNzaW9uX2lkLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAoX3JlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhfcmVzKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gX3Jlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6cmV0LmVycl9tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdC8vIGFwaS9kYXRhb2JqL0NyZWF0ZT9zZXNzaW9uaWQ9U0VTU0lPTl9JRFxyXG5cdFx0Ly8gTW9ib3gz5Yib5bu65pWw5o2u5a+56LGhXHJcblx0XHRjcmVhdGVEYXRhT2JqOiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQgLy8gY29uc29sZS5sb2coc3RhdGUudXJsKTtcclxuXHRcdFx0XHR1bmkucmVxdWVzdCh7XHJcblx0XHRcdFx0XHR1cmw6IHN0YXRlLk9JRGF0YVNBUEkrJ2FwaS9kYXRhb2JqL0NyZWF0ZT9zZXNzaW9uaWQ9JytzdGF0ZS5sb2dpblByb3ZpZGVyLmxvZ2luaWQucmVzdWx0LnNlc3Npb25faWQsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChfcmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKF9yZXMpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSBfcmVzLmRhdGFcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQuZXJyX21zZ30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdFxyXG5cdFx0Ly8gYXBpL2NsYXNzL3Vpc3R5bGUvR2V0SW5mbz9zZXNzaW9uaWQ9U0VTU0lPTl9JRFxyXG5cdFx0Ly8gTW9ib3gz5b6X5Yiw5pWw5o2u57G75pi+56S65qC35byP5L+h5oGvXHJcblx0XHRVSVN0eWxlR2V0SW5mbzogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coc3RhdGUubG9naW5Qcm92aWRlci5sb2dpbmlkLnJlc3VsdC5zZXNzaW9uX2lkKTtcclxuXHRcdFx0XHR1bmkucmVxdWVzdCh7XHJcblx0XHRcdFx0XHR1cmw6IHN0YXRlLk9JRGF0YVNBUEkrJ2FwaS9jbGFzcy91aXN0eWxlL0dldEluZm8/c2Vzc2lvbmlkPScrc3RhdGUubG9naW5Qcm92aWRlci5sb2dpbmlkLnJlc3VsdC5zZXNzaW9uX2lkLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAoX3JlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhfcmVzKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gX3Jlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIGNvbW1pdChcImFyZWFGdW5jXCIscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5lcnJfbXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0Ly8gYXBpL2RhdGFvYmovUnVuQ3VzdG9tRXZlbnQ/c2Vzc2lvbmlkPVNFU1NJT05fSURcclxuXHRcdC8vIE1vYm94M+aJp+ihjOiHquWumuS5ieiEmuacrFxyXG5cdFx0cnVuQ3VzdG9tRXZlbnQ6IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKHN0YXRlLmxvZ2luUHJvdmlkZXIubG9naW5pZC5yZXN1bHQuc2Vzc2lvbl9pZCk7XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS5PSURhdGFTQVBJKydhcGkvZGF0YW9iai9SdW5DdXN0b21FdmVudD9zZXNzaW9uaWQ9JytzdGF0ZS5sb2dpblByb3ZpZGVyLmxvZ2luaWQucmVzdWx0LnNlc3Npb25faWQsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChfcmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKF9yZXMpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSBfcmVzLmRhdGFcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gY29tbWl0KFwiYXJlYUZ1bmNcIixyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6cmV0LmVycl9tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHQvLyBhcGkvZGF0YW9iai9EZWxldGU/c2Vzc2lvbmlkPVNFU1NJT05fSURcclxuXHRcdC8vIE1vYm94M+WIoOmZpOaVsOaNruWvueixoVxyXG5cdFx0ZGF0YU9iakRlbDogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coc3RhdGUubG9naW5Qcm92aWRlci5sb2dpbmlkLnJlc3VsdC5zZXNzaW9uX2lkKTtcclxuXHRcdFx0XHR1bmkucmVxdWVzdCh7XHJcblx0XHRcdFx0XHR1cmw6IHN0YXRlLk9JRGF0YVNBUEkrJ2FwaS9kYXRhb2JqL0RlbGV0ZT9zZXNzaW9uaWQ9JytzdGF0ZS5sb2dpblByb3ZpZGVyLmxvZ2luaWQucmVzdWx0LnNlc3Npb25faWQsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChfcmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKF9yZXMpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSBfcmVzLmRhdGFcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gY29tbWl0KFwiYXJlYUZ1bmNcIixyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6cmV0LmVycl9tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHQvLyBhcGkvZGF0YW9iai9xdWVyeS9RdWVyeT9zZXNzaW9uaWQ9U0VTU0lPTl9JRFxyXG5cdFx0Ly8gTW9ib3gz5p+l6K+i5pWw5o2u5a+56LGhXHJcblx0XHRkYXRhT2JqUXVlcnk6IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKHN0YXRlLmxvZ2luUHJvdmlkZXIubG9naW5pZC5yZXN1bHQuc2Vzc2lvbl9pZCk7XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS5PSURhdGFTQVBJKydhcGkvZGF0YW9iai9xdWVyeS9RdWVyeT9zZXNzaW9uaWQ9JytzdGF0ZS5sb2dpblByb3ZpZGVyLmxvZ2luaWQucmVzdWx0LnNlc3Npb25faWQsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChfcmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKF9yZXMpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSBfcmVzLmRhdGFcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gY29tbWl0KFwiYXJlYUZ1bmNcIixyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6cmV0LmVycl9tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHQvLyBhcGkvYXBwL0dldEluZm8/c2Vzc2lvbmlkPVNFU1NJT05fSURcclxuXHRcdC8vIE1vYm94M+iOt+WPluWKn+iDveeCueS/oeaBr1xyXG5cdFx0YXBwR2V0SW5mbzogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0IC8vIGNvbnNvbGUubG9nKHN0YXRlLmxvZ2luUHJvdmlkZXIubG9naW5pZC5yZXN1bHQuc2Vzc2lvbl9pZCk7XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS5PSU1vYm94U0FQSSsnYXBpL2FwcC9HZXRJbmZvP3Nlc3Npb25pZD0nK3N0YXRlLmxvZ2luUHJvdmlkZXIubG9naW5pZC5yZXN1bHQuc2Vzc2lvbl9pZCxcclxuXHRcdFx0XHRcdGRhdGE6IHVuaXZlcmlmeUluZm8sXHJcblx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdGRhdGFUeXBlOlwianNvblwiLFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKF9yZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coX3Jlcyk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IF9yZXMuZGF0YVxyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBjb21taXQoXCJhcmVhRnVuY1wiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQuZXJyX21zZ30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdFxyXG5cdH1cclxufSlcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHN0b3JlXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///200\n");
eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 1);\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _vue = _interopRequireDefault(__webpack_require__(/*! vue */ 127));\nvar _vuex = _interopRequireDefault(__webpack_require__(/*! vuex */ 201));\nvar _base = _interopRequireDefault(__webpack_require__(/*! ../components/js-base64/base64.js */ 65));\nvar _app = _interopRequireDefault(__webpack_require__(/*! ./modules/app */ 202));\n_vue.default.use(_vuex.default);\nvar store = new _vuex.default.Store({\n  modules: {\n    app: _app.default,\n    Base64: _base.default\n  },\n  state: {\n    hasLogin: false,\n    deviceId: '',\n    apkVersionInfo: \"\",\n    loginProvider: \"\",\n    areaFunc: '',\n    thisareaFuncID: '',\n    thisareaFuncSubID: '',\n    thisEditName: '',\n    thisEditSubName: '',\n    thisDictName: '',\n    _classAttrList: {},\n    _classGridStyleInfo: {},\n    _subClassAttrList: {},\n    _subClassGridStyleInfo: {},\n    _dicValueInfo: {},\n    DataObjRunCustomEventInfo: '',\n    querySelpsn: '',\n    ProjectGetAnalysisList: '',\n    addclassattr: '',\n    DelObj: '',\n    username: \"sa\",\n    userpwd: \"0000\",\n    url: \"139.159.144.10:8080/mobox3\",\n    //115.29.185.26:5000\n    OIOrgSAPI: '',\n    //115.29.185.26:5101\n    OIMoboxSAPI: '',\n    //115.29.185.26:5102\n    OIDataSAPI: '',\n    //115.29.185.26:5103\n    OIMongodbSvr: '' //115.29.185.26:5201\n  },\n\n  mutations: {\n    setDeviceId: function setDeviceId(state, ret) {\n      state.deviceId = ret;\n    },\n    setUrl: function setUrl(state, url) {\n      state.url = url;\n    },\n    setOrgSApi: function setOrgSApi(state, url) {\n      state.OIOrgSAPI = url;\n    },\n    setMobxoSApi: function setMobxoSApi(state, url) {\n      state.OIMoboxSAPI = url;\n    },\n    setDataSApi: function setDataSApi(state, url) {\n      state.OIDataSAPI = url;\n    },\n    setMongodbSvr: function setMongodbSvr(state, url) {\n      state.OIMongodbSvr = url;\n    },\n    setApkVersionInfo: function setApkVersionInfo(state, ret) {\n      state.apkVersionInfo = ret;\n    },\n    login: function login(state, provider) {\n      state.hasLogin = true;\n      state.loginProvider = provider;\n    },\n    areaFunc: function areaFunc(state, ret) {\n      state.areaFunc = ret;\n    },\n    setareaFuncid: function setareaFuncid(state, id) {\n      state.thisareaFuncID = id;\n    },\n    setareaFunSubcid: function setareaFunSubcid(state, id) {\n      state.thisareaFuncSubID = id;\n    },\n    seteditName: function seteditName(state, editName) {\n      state.thisEditName = editName;\n    },\n    seteditSubName: function seteditSubName(state, editName) {\n      state.thisEditSubName = editName;\n    },\n    setDictName: function setDictName(state, dictName) {\n      state.thisDictName = dictName;\n    },\n    classAttrList: function classAttrList(state, ret) {\n      // state._classAttrList[state.thisareaFuncID] = ret;\n      _vue.default.set(state._classAttrList, state.thisareaFuncID, ret);\n    },\n    classGridStyleInfo: function classGridStyleInfo(state, ret) {\n      // state._classGridStyleInfo[state.thisareaFuncID] = ret;\n      var data = {};\n      if (state._classGridStyleInfo[state.thisareaFuncID]) data = state._classGridStyleInfo[state.thisareaFuncID];\n      _vue.default.set(data, state.thisEditName, ret);\n      _vue.default.set(state._classGridStyleInfo, state.thisareaFuncID, data);\n    },\n    subClassAttrList: function subClassAttrList(state, ret) {\n      _vue.default.set(state._subClassAttrList, state.thisareaFuncSubID, ret);\n    },\n    subClassGridStyleInfo: function subClassGridStyleInfo(state, ret) {\n      var data = {};\n      if (state._subClassGridStyleInfo[state.thisareaFuncSubID]) data = state._subClassGridStyleInfo[state.thisareaFuncSubID];\n      _vue.default.set(data, state.thisEditSubName, ret);\n      _vue.default.set(state._subClassGridStyleInfo, state.thisareaFuncSubID, data);\n    },\n    dicValueInfo: function dicValueInfo(state, ret) {\n      // state._dicValueInfo[state.thisareaFuncID] = ret;\n      _vue.default.set(state._dicValueInfo, state.thisDictName, ret);\n    },\n    DataObjRunCustomEventInfo: function DataObjRunCustomEventInfo(state, ret) {\n      state.DataObjRunCustomEventInfo = ret;\n    },\n    querySelpsn: function querySelpsn(state, ret) {\n      state.querySelpsn = ret;\n    },\n    ProjectGetAnalysisList: function ProjectGetAnalysisList(state, ret) {\n      state.ProjectGetAnalysisList = ret;\n    },\n    addclassattr: function addclassattr(state, ret) {\n      state.addclassattr = ret;\n    },\n    DelObj: function DelObj(state, ret) {\n      state.DelObj = ret;\n    },\n    logout: function logout(state) {\n      state.hasLogin = false;\n    }\n  },\n  getters: {\n    getDeviceId: function getDeviceId(state, ret) {\n      return state.deviceId;\n    },\n    GetApkServionInfo: function GetApkServionInfo(state) {\n      return state.apkVersionInfo;\n    },\n    loginid: function loginid(state) {\n      return state.loginProvider.loginid;\n    },\n    getUrl: function getUrl(state) {\n      return state.url;\n    },\n    getOrgSApi: function getOrgSApi(state, url) {\n      return state.OIOrgSAPI;\n    },\n    getMobxoSApi: function getMobxoSApi(state, url) {\n      return state.OIMoboxSAPI;\n    },\n    getDataSApi: function getDataSApi(state, url) {\n      return state.OIDataSAPI;\n    },\n    getMongodbSvr: function getMongodbSvr(state, url) {\n      return state.OIMongodbSvr;\n    },\n    getclassAttrList: function getclassAttrList(state) {\n      return state._classAttrList[state.thisareaFuncID];\n    },\n    getclassGridStyleInfo: function getclassGridStyleInfo(state) {\n      if (state._classGridStyleInfo[state.thisareaFuncID]) return state._classGridStyleInfo[state.thisareaFuncID][state.thisEditName];else return \"\";\n    },\n    getSubClassAttrList: function getSubClassAttrList(state) {\n      return state._subClassAttrList[state.thisareaFuncSubID];\n    },\n    getSubClassGridStyleInfo: function getSubClassGridStyleInfo(state) {\n      if (state._subClassGridStyleInfo[state.thisareaFuncSubID]) return state._subClassGridStyleInfo[state.thisareaFuncSubID][state.thisEditSubName];else return \"\";\n    },\n    getdicValueInfo: function getdicValueInfo(state) {\n      return state._dicValueInfo[state.thisDictName];\n    }\n  },\n  actions: {\n    //{commit} 解构,\n    //univerifyInfo 自定义参数\n    GetApkVersionInfo: function GetApkVersionInfo(_ref, univerifyInfo) {\n      var commit = _ref.commit,\n        state = _ref.state;\n      return new Promise(function (resolve, reject) {\n        univerifyInfo = univerifyInfo || {};\n        univerifyInfo.server = univerifyInfo.server || '';\n        if (univerifyInfo.server.length == 0) {\n          reject({\n            \"errMsg\": '服务器地址不能为空!'\n          });\n        }\n        var openinfo = \"http://\" + univerifyInfo.server + \"/\"; //+\"/OrgWebS\"\n        //设置全局参数:url-服务器地址\n        commit(\"setUrl\", openinfo);\n        // var ser = univerifyInfo.server.split('/');\n        // if(ser[1] == 'mobox3'){\n        // \t// reject({\"errMsg\":\"Mobox3暂时未支持自动更新!\"});\n        // \tresolve({code:'00000',data:\"\",msg:\"\"});\n        // \treturn;\n        // }\n        uni.request({\n          url: openinfo + \"PDA/GetApkVersionInfo\",\n          data: {},\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:210\");\n            if (res.statusCode == 404) {\n              reject({\n                \"errMsg\": \"地址不对,请检查该地址:\" + openinfo + \",方法:GetApkVersionInfo,是否正确\"\n              });\n            } else if (res.statusCode == 500) {\n              reject({\n                \"errMsg\": \"未找到更新包所在目录!\"\n              });\n            }\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"setApkVersionInfo\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:225\");\n            reject(err);\n          }\n        });\n      });\n    },\n    login: function login(_ref2, univerifyInfo) {\n      var commit = _ref2.commit,\n        state = _ref2.state;\n      return new Promise(function (resolve, reject) {\n        univerifyInfo = univerifyInfo || {};\n        univerifyInfo.server = univerifyInfo.server || '';\n        univerifyInfo.uname = univerifyInfo.uname || '';\n        univerifyInfo.pwd = univerifyInfo.pwd || '';\n        if (univerifyInfo.server.length == 0) {\n          reject({\n            \"errMsg\": '服务器地址不能为空!'\n          });\n        }\n        if (univerifyInfo.uname.length < 2) {\n          reject({\n            \"errMsg\": '账号最短为 2 个字符!'\n          });\n        }\n        if (univerifyInfo.pwd.length < 1) {\n          reject({\n            \"errMsg\": '密码最短为 1个字符!'\n          });\n        }\n        var openinfo = \"http://\" + univerifyInfo.server + \"/\";\n        //设置全局参数:url-服务器地址\n        commit(\"setUrl\", openinfo);\n        var ser = univerifyInfo.server.split('/');\n        var url = openinfo + \"PDA/SignIn\";\n        var header = {\n          'content-type': 'application/x-www-form-urlencoded'\n        };\n        commit(\"setOrgSApi\", '');\n        commit(\"setMobxoSApi\", '');\n        commit(\"setDataSApi\", '');\n        commit(\"setMongodbSvr\", '');\n        if (ser[1] == 'mobox3') {\n          //判断地址是否是Mobox3\n          var orgSApi = \"http://\" + ser[0].split(':')[0] + \":5101/\";\n          var mobxoSApi = \"http://\" + ser[0].split(':')[0] + \":5102/\";\n          var dataSApi = \"http://\" + ser[0].split(':')[0] + \":5103/\";\n          var mongodbSvr = \"http://\" + ser[0].split(':')[0] + \":5201/\";\n          commit(\"setOrgSApi\", orgSApi);\n          commit(\"setMobxoSApi\", mobxoSApi);\n          commit(\"setDataSApi\", dataSApi);\n          commit(\"setMongodbSvr\", mongodbSvr);\n          url = orgSApi + 'api/user/ace/VerifyPassword';\n          univerifyInfo = {\n            app_type: \"mobox\",\n            user_login: _base.default.encode(univerifyInfo.uname),\n            user_psw: _base.default.encode(univerifyInfo.pwd),\n            client_info: {\n              type: 3,\n              //客户端类型:0–PC,1–WEB,2–安卓,3–安卓PAD,4–iPhone, 5–iPad, 6–其它\n              num: state.deviceId //PDA的设备号\n            }\n          };\n\n          header = {};\n        }\n        __f__(\"log\", univerifyInfo, \" at store/index.js:281\");\n        uni.request({\n          url: url,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: header,\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:289\");\n            var ret = res.data;\n            if (ret.code == '00000' || ret.err_code == 0) {\n              commit(\"login\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg ? ret.msg : ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:299\");\n            reject(err);\n          }\n        });\n      });\n    },\n    areaFunc: function areaFunc(_ref3, univerifyInfo) {\n      var commit = _ref3.commit,\n        state = _ref3.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.loginProvider.loginid.result.session_id);\n        univerifyInfo.loginInfo = JSON.stringify({\n          server: uni.getStorageSync('server'),\n          uname: uni.getStorageSync('account'),\n          pwd: uni.getStorageSync('password'),\n          cname: plus.device.model,\n          type: \"0\"\n        });\n        var url = state.url + \"PDA/PDAArea\";\n        var header = {\n          'content-type': 'application/x-www-form-urlencoded'\n        };\n        if (state.OIMoboxSAPI) {\n          //判断是否是Mobox3\n          url = state.OIMoboxSAPI + 'api/app/area/GetList?sessionid=' + state.loginProvider.loginid.result.session_id;\n          univerifyInfo = {\n            app_type: \"MES\"\n          };\n          header = {};\n        }\n        uni.request({\n          url: url,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: header,\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:336\");\n            if (res.statusCode == 404) {\n              reject({\n                \"errMsg\": \"地址不对,请检查该地址:\" + openinfo\n              });\n            }\n            // if(JSON.stringify(res.data).includes('Login Page - Ace Admin')){\n            // \tuni.reLaunch({\n            // \t\turl: '../login/index'\n            // \t})\n            // \treject({\"errMsg\":\"登录已过期,请重新登录\"});\n            // }\n            var ret = res.data;\n            if (ret.code == '00000' || ret.err_code == 0) {\n              commit(\"areaFunc\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg ? ret.msg : ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // Mobox3获取应用领域下的功能点\n    GetFuncTree: function GetFuncTree(_ref4, univerifyInfo) {\n      var commit = _ref4.commit,\n        state = _ref4.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.loginProvider.loginid.result.session_id);\n        uni.request({\n          url: state.OIMoboxSAPI + 'api/app/GetFuncTree?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              // commit(\"areaFunc\",ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    classAttrList: function classAttrList(_ref5, univerifyInfo) {\n      var commit = _ref5.commit,\n        state = _ref5.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        univerifyInfo.loginInfo = JSON.stringify({\n          server: uni.getStorageSync('server'),\n          uname: uni.getStorageSync('account'),\n          pwd: uni.getStorageSync('password'),\n          cname: plus.device.model,\n          type: \"0\"\n        });\n        uni.request({\n          url: state.url + \"PDA/PDAAttrList\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:414\");\n            // if(JSON.stringify(res.data).includes('Login Page - Ace Admin')){\n            // \tuni.reLaunch({\n            // \t\turl: '../login/index'\n            // \t})\n            // \treject({\"errMsg\":\"登录已过期,请重新登录\"});\n            // }\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"classAttrList\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    classGridStyleInfo: function classGridStyleInfo(_ref6, univerifyInfo) {\n      var commit = _ref6.commit,\n        state = _ref6.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        univerifyInfo.loginInfo = JSON.stringify({\n          server: uni.getStorageSync('server'),\n          uname: uni.getStorageSync('account'),\n          pwd: uni.getStorageSync('password'),\n          cname: plus.device.model,\n          type: \"0\"\n        });\n        uni.request({\n          url: state.url + \"PDA/PDAGridStyleGetInfo\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:460\");\n            // if(JSON.stringify(res.data).includes('Login Page - Ace Admin')){\n            // \tuni.reLaunch({\n            // \t\turl: '../login/index'\n            // \t})\n            // \treject({\"errMsg\":\"登录已过期,请重新登录\"});\n            // }\n            var ret = res.data;\n            if (ret.code == '00000') {\n              // var data ={};\n              // Vue.set(data,univerifyInfo.name,ret);\n              commit(\"classGridStyleInfo\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    subClassAttrList: function subClassAttrList(_ref7, univerifyInfo) {\n      var commit = _ref7.commit,\n        state = _ref7.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        univerifyInfo.loginInfo = JSON.stringify({\n          server: uni.getStorageSync('server'),\n          uname: uni.getStorageSync('account'),\n          pwd: uni.getStorageSync('password'),\n          cname: plus.device.model,\n          type: \"0\"\n        });\n        uni.request({\n          url: state.url + \"PDA/PDAAttrList\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:508\");\n            // if(JSON.stringify(res.data).includes('Login Page - Ace Admin')){\n            // \tuni.reLaunch({\n            // \t\turl: '../login/index'\n            // \t})\n            // \treject({\"errMsg\":\"登录已过期,请重新登录\"});\n            // }\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"subClassAttrList\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    subClassGridStyleInfo: function subClassGridStyleInfo(_ref8, univerifyInfo) {\n      var commit = _ref8.commit,\n        state = _ref8.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        univerifyInfo.loginInfo = JSON.stringify({\n          server: uni.getStorageSync('server'),\n          uname: uni.getStorageSync('account'),\n          pwd: uni.getStorageSync('password'),\n          cname: plus.device.model,\n          type: \"0\"\n        });\n        uni.request({\n          url: state.url + \"PDA/PDAGridStyleGetInfo\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:554\");\n            // if(JSON.stringify(res.data).includes('Login Page - Ace Admin')){\n            // \tuni.reLaunch({\n            // \t\turl: '../login/index'\n            // \t})\n            // \treject({\"errMsg\":\"登录已过期,请重新登录\"});\n            // }\n            var ret = res.data;\n            if (ret.code == '00000') {\n              // var data ={};\n              // Vue.set(data,univerifyInfo.name,ret);\n              commit(\"subClassGridStyleInfo\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    dicValueInfo: function dicValueInfo(_ref9, univerifyInfo) {\n      var commit = _ref9.commit,\n        state = _ref9.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        univerifyInfo.loginInfo = JSON.stringify({\n          server: uni.getStorageSync('server'),\n          uname: uni.getStorageSync('account'),\n          pwd: uni.getStorageSync('password'),\n          cname: plus.device.model,\n          type: \"0\"\n        });\n        uni.request({\n          url: state.url + \"PDA/PDADicValueGetInfo\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            // console.log(res);\n            var ret = res.data;\n            if (ret.code == '00000') {\n              state.thisDictName = univerifyInfo.dic_name;\n              commit(\"dicValueInfo\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:613\");\n            reject(err);\n          }\n        });\n      });\n    },\n    DataObjRunCustomEventInfo: function DataObjRunCustomEventInfo(_ref10, univerifyInfo) {\n      var commit = _ref10.commit,\n        state = _ref10.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        univerifyInfo.loginInfo = JSON.stringify({\n          server: uni.getStorageSync('server'),\n          uname: uni.getStorageSync('account'),\n          pwd: uni.getStorageSync('password'),\n          cname: plus.device.model,\n          type: \"0\"\n        });\n        uni.request({\n          url: state.url + \"PDA/PDADataObjRunCustomEvent\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            // console.log(res);\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"DataObjRunCustomEventInfo\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:652\");\n            reject(err);\n          }\n        });\n      });\n    },\n    querySelpsn: function querySelpsn(_ref11, univerifyInfo) {\n      var commit = _ref11.commit,\n        state = _ref11.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        var url = state.url + \"selpsn/queryjson\";\n        var datajson = univerifyInfo;\n        var header = {\n          'content-type': 'application/x-www-form-urlencoded'\n        };\n        if (state.OIOrgSAPI) {\n          //判断是否是Mobox3\n          url = state.OIOrgSAPI + 'api/user/query/query?sessionid=' + state.loginProvider.loginid.result.session_id;\n          datajson = {\n            query_str: univerifyInfo.jp\n          };\n          header = {};\n        }\n        uni.request({\n          url: url,\n          data: datajson,\n          method: 'POST',\n          dataType: \"json\",\n          header: header,\n          success: function success(res) {\n            // console.log(res);\n            try {\n              res = JSON.parse(res.data);\n            } catch (e) {\n              res = res.data;\n            }\n            if (res.code == '00000' || res.err_code == 0) {\n              commit(\"querySelpsn\", res);\n              resolve(res);\n            } else {\n              reject({\n                \"errMsg\": res.msg ? res.msg : res.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:696\");\n            reject(err);\n          }\n        });\n      });\n    },\n    ProjectGetAnalysisList: function ProjectGetAnalysisList(_ref12, univerifyInfo) {\n      var commit = _ref12.commit,\n        state = _ref12.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        var url = state.url + \"bpm/ProjectGetAnalysisList\";\n        var header = {\n          'content-type': 'application/x-www-form-urlencoded'\n        };\n        if (state.OIMoboxSAPI) {\n          //判断是否是Mobox3\n          // url = state.OIMoboxSAPI+'api/app/area/GetList?sessionid='+state.loginProvider.loginid.result.session_id;\n          // univerifyInfo = {\n          // \tapp_type: \"MES\",\n          // };\n          // header={};\n          reject({\n            \"errMsg\": \"Mobox3暂时未支持选择项目接口!\"\n          });\n          // resolve({code:'00000',data:\"\",msg:\"\"});\n          return;\n        }\n        uni.request({\n          url: url,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: header,\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:729\");\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"ProjectGetAnalysisList\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:739\");\n            reject(err);\n          }\n        });\n      });\n    },\n    addclassattr: function addclassattr(_ref13, univerifyInfo) {\n      var commit = _ref13.commit,\n        state = _ref13.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        univerifyInfo.loginInfo = JSON.stringify({\n          server: uni.getStorageSync('server'),\n          uname: uni.getStorageSync('account'),\n          pwd: uni.getStorageSync('password'),\n          cname: plus.device.model,\n          type: \"0\"\n        });\n        uni.request({\n          url: state.url + \"PDA/addclassattr\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            // console.log(res);\n            // if(JSON.stringify(res.data).includes('Login Page - Ace Admin')){\n            // \tuni.reLaunch({\n            // \t\turl: '../login/index'\n            // \t})\n            // \treject({\"errMsg\":\"登录已过期,请重新登录\"});\n            // }\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"addclassattr\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": JSON.stringify(ret)\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:784\");\n            reject(err);\n          }\n        });\n      });\n    },\n    DelObj: function DelObj(_ref14, univerifyInfo) {\n      var commit = _ref14.commit,\n        state = _ref14.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        uni.request({\n          url: state.url + \"PDA/DelObj\",\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          header: {\n            'content-type': 'application/x-www-form-urlencoded'\n          },\n          success: function success(res) {\n            __f__(\"log\", res, \" at store/index.js:806\");\n            var ret = res.data;\n            if (ret.code == '00000') {\n              commit(\"DelObj\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": JSON.stringify(ret)\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:816\");\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/class/attr/GetList?sessionid=SESSION_ID\n    // Mobox3得到数据类属性\n    classAttrGetList: function classAttrGetList(_ref15, univerifyInfo) {\n      var commit = _ref15.commit,\n        state = _ref15.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        uni.request({\n          url: state.OIDataSAPI + 'api/class/attr/GetList?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              commit(\"classAttrList\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/class/attr/GetList?sessionid=SESSION_ID\n    // Mobox3得到数据类属性\n    subClassAttrGetList: function subClassAttrGetList(_ref16, univerifyInfo) {\n      var commit = _ref16.commit,\n        state = _ref16.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        uni.request({\n          url: state.OIDataSAPI + 'api/class/attr/GetList?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              commit(\"subClassAttrList\", ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/dict/item/GetInfo?sessionid=SESSION_ID\n    // Mobox3得到字典项列表\n    DictItemGetList: function DictItemGetList(_ref17, univerifyInfo) {\n      var commit = _ref17.commit,\n        state = _ref17.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        uni.request({\n          url: state.OIMoboxSAPI + 'api/dict/item/GetInfo?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/dict/GetInfo2?sessionid=SESSION_ID\n    // Mobox3得到字典信息\n    DictGetInfo: function DictGetInfo(_ref18, univerifyInfo) {\n      var commit = _ref18.commit,\n        state = _ref18.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        uni.request({\n          url: state.OIMoboxSAPI + 'api/dict/GetInfo2?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/dataobj/Create?sessionid=SESSION_ID\n    // Mobox3创建数据对象\n    createDataObj: function createDataObj(_ref19, univerifyInfo) {\n      var commit = _ref19.commit,\n        state = _ref19.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.url);\n        uni.request({\n          url: state.OIDataSAPI + 'api/dataobj/Create?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            __f__(\"log\", err, \" at store/index.js:966\");\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/class/uistyle/GetInfo?sessionid=SESSION_ID\n    // Mobox3得到数据类显示样式信息\n    UIStyleGetInfo: function UIStyleGetInfo(_ref20, univerifyInfo) {\n      var commit = _ref20.commit,\n        state = _ref20.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.loginProvider.loginid.result.session_id);\n        uni.request({\n          url: state.OIDataSAPI + 'api/class/uistyle/GetInfo?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            __f__(\"log\", _res, \" at store/index.js:987\");\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              // commit(\"areaFunc\",ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/dataobj/RunCustomEvent?sessionid=SESSION_ID\n    // Mobox3执行自定义脚本\n    runCustomEvent: function runCustomEvent(_ref21, univerifyInfo) {\n      var commit = _ref21.commit,\n        state = _ref21.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.loginProvider.loginid.result.session_id);\n        uni.request({\n          url: state.OIDataSAPI + 'api/dataobj/RunCustomEvent?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              // commit(\"areaFunc\",ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/dataobj/Delete?sessionid=SESSION_ID\n    // Mobox3删除数据对象\n    dataObjDel: function dataObjDel(_ref22, univerifyInfo) {\n      var commit = _ref22.commit,\n        state = _ref22.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.loginProvider.loginid.result.session_id);\n        uni.request({\n          url: state.OIDataSAPI + 'api/dataobj/Delete?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              // commit(\"areaFunc\",ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/dataobj/query/Query?sessionid=SESSION_ID\n    // Mobox3查询数据对象\n    dataObjQuery: function dataObjQuery(_ref23, univerifyInfo) {\n      var commit = _ref23.commit,\n        state = _ref23.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.loginProvider.loginid.result.session_id);\n        uni.request({\n          url: state.OIDataSAPI + 'api/dataobj/query/Query?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              // commit(\"areaFunc\",ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    },\n    // api/app/GetInfo?sessionid=SESSION_ID\n    // Mobox3获取功能点信息\n    appGetInfo: function appGetInfo(_ref24, univerifyInfo) {\n      var commit = _ref24.commit,\n        state = _ref24.state;\n      return new Promise(function (resolve, reject) {\n        // console.log(state.loginProvider.loginid.result.session_id);\n        uni.request({\n          url: state.OIMoboxSAPI + 'api/app/GetInfo?sessionid=' + state.loginProvider.loginid.result.session_id,\n          data: univerifyInfo,\n          method: 'POST',\n          dataType: \"json\",\n          success: function success(_res) {\n            // console.log(_res);\n            var ret = _res.data;\n            if (ret.err_code == 0) {\n              // commit(\"areaFunc\",ret);\n              resolve(ret);\n            } else {\n              reject({\n                \"errMsg\": ret.err_msg\n              });\n            }\n          },\n          fail: function fail(err) {\n            // console.log(err);\n            reject(err);\n          }\n        });\n      });\n    }\n  }\n});\nvar _default = store;\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 18)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vc3RvcmUvaW5kZXguanMiXSwibmFtZXMiOlsiVnVlIiwidXNlIiwiVnVleCIsInN0b3JlIiwiU3RvcmUiLCJtb2R1bGVzIiwiYXBwIiwiQmFzZTY0Iiwic3RhdGUiLCJoYXNMb2dpbiIsImRldmljZUlkIiwiYXBrVmVyc2lvbkluZm8iLCJsb2dpblByb3ZpZGVyIiwiYXJlYUZ1bmMiLCJ0aGlzYXJlYUZ1bmNJRCIsInRoaXNhcmVhRnVuY1N1YklEIiwidGhpc0VkaXROYW1lIiwidGhpc0VkaXRTdWJOYW1lIiwidGhpc0RpY3ROYW1lIiwiX2NsYXNzQXR0ckxpc3QiLCJfY2xhc3NHcmlkU3R5bGVJbmZvIiwiX3N1YkNsYXNzQXR0ckxpc3QiLCJfc3ViQ2xhc3NHcmlkU3R5bGVJbmZvIiwiX2RpY1ZhbHVlSW5mbyIsIkRhdGFPYmpSdW5DdXN0b21FdmVudEluZm8iLCJxdWVyeVNlbHBzbiIsIlByb2plY3RHZXRBbmFseXNpc0xpc3QiLCJhZGRjbGFzc2F0dHIiLCJEZWxPYmoiLCJ1c2VybmFtZSIsInVzZXJwd2QiLCJ1cmwiLCJPSU9yZ1NBUEkiLCJPSU1vYm94U0FQSSIsIk9JRGF0YVNBUEkiLCJPSU1vbmdvZGJTdnIiLCJtdXRhdGlvbnMiLCJzZXREZXZpY2VJZCIsInJldCIsInNldFVybCIsInNldE9yZ1NBcGkiLCJzZXRNb2J4b1NBcGkiLCJzZXREYXRhU0FwaSIsInNldE1vbmdvZGJTdnIiLCJzZXRBcGtWZXJzaW9uSW5mbyIsImxvZ2luIiwicHJvdmlkZXIiLCJzZXRhcmVhRnVuY2lkIiwiaWQiLCJzZXRhcmVhRnVuU3ViY2lkIiwic2V0ZWRpdE5hbWUiLCJlZGl0TmFtZSIsInNldGVkaXRTdWJOYW1lIiwic2V0RGljdE5hbWUiLCJkaWN0TmFtZSIsImNsYXNzQXR0ckxpc3QiLCJzZXQiLCJjbGFzc0dyaWRTdHlsZUluZm8iLCJkYXRhIiwic3ViQ2xhc3NBdHRyTGlzdCIsInN1YkNsYXNzR3JpZFN0eWxlSW5mbyIsImRpY1ZhbHVlSW5mbyIsImxvZ291dCIsImdldHRlcnMiLCJnZXREZXZpY2VJZCIsIkdldEFwa1NlcnZpb25JbmZvIiwibG9naW5pZCIsImdldFVybCIsImdldE9yZ1NBcGkiLCJnZXRNb2J4b1NBcGkiLCJnZXREYXRhU0FwaSIsImdldE1vbmdvZGJTdnIiLCJnZXRjbGFzc0F0dHJMaXN0IiwiZ2V0Y2xhc3NHcmlkU3R5bGVJbmZvIiwiZ2V0U3ViQ2xhc3NBdHRyTGlzdCIsImdldFN1YkNsYXNzR3JpZFN0eWxlSW5mbyIsImdldGRpY1ZhbHVlSW5mbyIsImFjdGlvbnMiLCJHZXRBcGtWZXJzaW9uSW5mbyIsInVuaXZlcmlmeUluZm8iLCJjb21taXQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInNlcnZlciIsImxlbmd0aCIsIm9wZW5pbmZvIiwidW5pIiwicmVxdWVzdCIsIm1ldGhvZCIsImRhdGFUeXBlIiwiaGVhZGVyIiwic3VjY2VzcyIsInJlcyIsInN0YXR1c0NvZGUiLCJjb2RlIiwibXNnIiwiZmFpbCIsImVyciIsInVuYW1lIiwicHdkIiwic2VyIiwic3BsaXQiLCJvcmdTQXBpIiwibW9ieG9TQXBpIiwiZGF0YVNBcGkiLCJtb25nb2RiU3ZyIiwiYXBwX3R5cGUiLCJ1c2VyX2xvZ2luIiwiZW5jb2RlIiwidXNlcl9wc3ciLCJjbGllbnRfaW5mbyIsInR5cGUiLCJudW0iLCJlcnJfY29kZSIsImVycl9tc2ciLCJsb2dpbkluZm8iLCJKU09OIiwic3RyaW5naWZ5IiwiZ2V0U3RvcmFnZVN5bmMiLCJjbmFtZSIsInBsdXMiLCJkZXZpY2UiLCJtb2RlbCIsInJlc3VsdCIsInNlc3Npb25faWQiLCJHZXRGdW5jVHJlZSIsIl9yZXMiLCJkaWNfbmFtZSIsImRhdGFqc29uIiwicXVlcnlfc3RyIiwianAiLCJwYXJzZSIsImUiLCJjbGFzc0F0dHJHZXRMaXN0Iiwic3ViQ2xhc3NBdHRyR2V0TGlzdCIsIkRpY3RJdGVtR2V0TGlzdCIsIkRpY3RHZXRJbmZvIiwiY3JlYXRlRGF0YU9iaiIsIlVJU3R5bGVHZXRJbmZvIiwicnVuQ3VzdG9tRXZlbnQiLCJkYXRhT2JqRGVsIiwiZGF0YU9ialF1ZXJ5IiwiYXBwR2V0SW5mbyJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUdBO0FBRkFBLFlBQUcsQ0FBQ0MsR0FBRyxDQUFDQyxhQUFJLENBQUM7QUFHYixJQUFNQyxLQUFLLEdBQUcsSUFBSUQsYUFBSSxDQUFDRSxLQUFLLENBQUM7RUFDNUJDLE9BQU8sRUFBQztJQUNQQyxHQUFHLEVBQUhBLFlBQUc7SUFDSEMsTUFBTSxFQUFOQTtFQUNELENBQUM7RUFDREMsS0FBSyxFQUFFO0lBQ05DLFFBQVEsRUFBRSxLQUFLO0lBQ2ZDLFFBQVEsRUFBQyxFQUFFO0lBQ1hDLGNBQWMsRUFBRSxFQUFFO0lBQ2xCQyxhQUFhLEVBQUUsRUFBRTtJQUNqQkMsUUFBUSxFQUFDLEVBQUU7SUFDWEMsY0FBYyxFQUFDLEVBQUU7SUFDakJDLGlCQUFpQixFQUFDLEVBQUU7SUFDcEJDLFlBQVksRUFBQyxFQUFFO0lBQ2ZDLGVBQWUsRUFBQyxFQUFFO0lBQ2xCQyxZQUFZLEVBQUMsRUFBRTtJQUNmQyxjQUFjLEVBQUMsQ0FBQyxDQUFDO0lBQ2pCQyxtQkFBbUIsRUFBQyxDQUFDLENBQUM7SUFDdEJDLGlCQUFpQixFQUFDLENBQUMsQ0FBQztJQUNwQkMsc0JBQXNCLEVBQUMsQ0FBQyxDQUFDO0lBQ3pCQyxhQUFhLEVBQUMsQ0FBQyxDQUFDO0lBQ2hCQyx5QkFBeUIsRUFBQyxFQUFFO0lBQzVCQyxXQUFXLEVBQUMsRUFBRTtJQUNkQyxzQkFBc0IsRUFBQyxFQUFFO0lBQ3pCQyxZQUFZLEVBQUMsRUFBRTtJQUNmQyxNQUFNLEVBQUMsRUFBRTtJQUNUQyxRQUFRLEVBQUMsSUFBSTtJQUNiQyxPQUFPLEVBQUMsTUFBTTtJQUNkQyxHQUFHLEVBQUMsNEJBQTRCO0lBQUU7SUFDbENDLFNBQVMsRUFBRSxFQUFFO0lBQUU7SUFDZkMsV0FBVyxFQUFFLEVBQUU7SUFBRTtJQUNqQkMsVUFBVSxFQUFFLEVBQUU7SUFBRTtJQUNoQkMsWUFB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QUFDLE1BQU07VUFDZkUsT0FBTyxFQUFFLGlCQUFDbUMsSUFBSSxFQUFLO1lBQ2xCO1lBQ0EsSUFBTXpGLEdBQUcsR0FBR3lGLElBQUksQ0FBQ3JFLElBQUk7WUFDckIsSUFBSXBCLEdBQUcsQ0FBQzRFLFFBQVEsSUFBSSxDQUFDLEVBQUU7Y0FDdEI7Y0FDQWhDLE9BQU8sQ0FBQzVDLEdBQUcsQ0FBQztZQUNiLENBQUMsTUFBTTtjQUNONkMsTUFBTSxDQUFDO2dCQUFDLFFBQVEsRUFBQzdDLEdBQUcsQ0FBQzZFO2NBQU8sQ0FBQyxDQUFDO1lBQy9CO1VBQ0QsQ0FBQztVQUNEbEIsSUFBSSxFQUFFLGNBQUNDLEdBQUcsRUFBSztZQUNkO1lBQ0FmLE1BQU0sQ0FBQ2UsR0FBRyxDQUFDO1VBQ1o7UUFDRCxDQUFDLENBQUM7TUFDSCxDQUFDLENBQUM7SUFDSDtFQUVEO0FBQ0QsQ0FBQyxDQUFDO0FBQUEsZUFFYS9GLEtBQUs7QUFBQSwyQiIsImZpbGUiOiIyMDAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcclxuaW1wb3J0IFZ1ZXggZnJvbSAndnVleCdcclxuaW1wb3J0IEJhc2U2NCBmcm9tICcuLi9jb21wb25lbnRzL2pzLWJhc2U2NC9iYXNlNjQuanMnXHJcblZ1ZS51c2UoVnVleClcclxuXHJcbmltcG9ydCBhcHAgZnJvbSAnLi9tb2R1bGVzL2FwcCdcclxuY29uc3Qgc3RvcmUgPSBuZXcgVnVleC5TdG9yZSh7XHJcblx0bW9kdWxlczp7XHJcblx0XHRhcHAsXHJcblx0XHRCYXNlNjQsXHJcblx0fSxcclxuXHRzdGF0ZToge1xyXG5cdFx0aGFzTG9naW46IGZhbHNlLFxyXG5cdFx0ZGV2aWNlSWQ6JycsXHJcblx0XHRhcGtWZXJzaW9uSW5mbzogXCJcIixcclxuXHRcdGxvZ2luUHJvdmlkZXI6IFwiXCIsXHJcblx0XHRhcmVhRnVuYzonJyxcclxuXHRcdHRoaXNhcmVhRnVuY0lEOicnLFxyXG5cdFx0dGhpc2FyZWFGdW5jU3ViSUQ6JycsXHJcblx0XHR0aGlzRWRpdE5hbWU6JycsXHJcblx0XHR0aGlzRWRpdFN1Yk5hbWU6JycsXHJcblx0XHR0aGlzRGljdE5hbWU6JycsXHJcblx0XHRfY2xhc3NBdHRyTGlzdDp7fSxcclxuXHRcdF9jbGFzc0dyaWRTdHlsZUluZm86e30sXHJcblx0XHRfc3ViQ2xhc3NBdHRyTGlzdDp7fSxcclxuXHRcdF9zdWJDbGFzc0dyaWRTdHlsZUluZm86e30sXHJcblx0XHRfZGljVmFsdWVJbmZvOnt9LFxyXG5cdFx0RGF0YU9ialJ1bkN1c3RvbUV2ZW50SW5mbzonJyxcclxuXHRcdHF1ZXJ5U2VscHNuOicnLFxyXG5cdFx0UHJvamVjdEdldEFuYWx5c2lzTGlzdDonJyxcclxuXHRcdGFkZGNsYXNzYXR0cjonJyxcclxuXHRcdERlbE9iajonJyxcclxuXHRcdHVzZXJuYW1lOlwic2FcIixcclxuXHRcdHVzZXJwd2Q6XCIwMDAwXCIsXHJcblx0XHR1cmw6XCIxMzkuMTU5LjE0NC4xMDo4MDgwL21vYm94M1wiLCAvLzExNS4yOS4xODUuMjY6NTAwMFxyXG5cdFx0T0lPcmdTQVBJOiAnJywgLy8xMTUuMjkuMTg1LjI2OjUxMDFcclxuXHRcdE9JTW9ib3hTQVBJOiAnJywgLy8xMTUuMjkuMTg1LjI2OjUxMDJcclxuXHRcdE9JRGF0YVNBUEk6ICcnLCAvLzExNS4yOS4xODUuMjY6NTEwM1xyXG5cdFx0T0lNb25nb2RiU3ZyOiAnJyAvLzExNS4yOS4xODUuMjY6NTIwMVxyXG5cdH0sXHJcblx0bXV0YXRpb25zOiB7XHJcblx0XHRzZXREZXZpY2VJZChzdGF0ZSwgcmV0KSB7XHJcblx0XHRcdHN0YXRlLmRldmljZUlkID0gcmV0O1xyXG5cdFx0fSxcclxuXHRcdHNldFVybChzdGF0ZSwgdXJsKSB7XHJcblx0XHRcdHN0YXRlLnVybCA9IHVybDtcclxuXHRcdH0sXHJcblx0XHRzZXRPcmdTQXBpKHN0YXRlLCB1cmwpIHtcclxuXHRcdFx0c3RhdGUuT0lPcmdTQVBJID0gdXJsO1xyXG5cdFx0fSxcclxuXHRcdHNldE1vYnhvU0FwaShzdGF0ZSwgdXJsKSB7XHJcblx0XHRcdHN0YXRlLk9JTW9ib3hTQVBJID0gdXJsO1xyXG5cdFx0fSxcclxuXHRcdHNldERhdGFTQXBpKHN0YXRlLCB1cmwpIHtcclxuXHRcdFx0c3RhdGUuT0lEYXRhU0FQSSA9IHVybDtcclxuXHRcdH0sXHJcblx0XHRzZXRNb25nb2RiU3ZyKHN0YXRlLCB1cmwpIHtcclxuXHRcdFx0c3RhdGUuT0lNb25nb2RiU3ZyID0gdXJsO1xyXG5cdFx0fSxcclxuXHRcdHNldEFwa1ZlcnNpb25JbmZvKHN0YXRlLCByZXQpIHtcclxuXHRcdFx0c3RhdGUuYXBrVmVyc2lvbkluZm8gPSByZXQ7XHJcblx0XHR9LFxyXG5cdFx0bG9naW4oc3RhdGUsIHByb3ZpZGVyKSB7XHJcblx0XHRcdHN0YXRlLmhhc0xvZ2luID0gdHJ1ZTtcclxuXHRcdFx0c3RhdGUubG9naW5Qcm92aWRlciA9IHByb3ZpZGVyO1xyXG5cdFx0fSxcclxuXHRcdGFyZWFGdW5jKHN0YXRlLCByZXQpIHtcclxuXHRcdFx0c3RhdGUuYXJlYUZ1bmMgPSByZXQ7XHJcblx0XHR9LFxyXG5cdFx0c2V0YXJlYUZ1bmNpZChzdGF0ZSxpZCl7XHJcblx0XHRcdHN0YXRlLnRoaXNhcmVhRnVuY0lEPWlkO1xyXG5cdFx0fSxcclxuXHRcdHNldGFyZWFGdW5TdWJjaWQoc3RhdGUsaWQpe1xyXG5cdFx0XHRzdGF0ZS50aGlzYXJlYUZ1bmNTdWJJRD1pZDtcclxuXHRcdH0sXHJcblx0XHRzZXRlZGl0TmFtZShzdGF0ZSxlZGl0TmFtZSl7XHJcblx0XHRcdHN0YXRlLnRoaXNFZGl0TmFtZT1lZGl0TmFtZTtcclxuXHRcdH0sXHJcblx0XHRzZXRlZGl0U3ViTmFtZShzdGF0ZSxlZGl0TmFtZSl7XHJcblx0XHRcdHN0YXRlLnRoaXNFZGl0U3ViTmFtZT1lZGl0TmFtZTtcclxuXHRcdH0sXHJcblx0XHRzZXREaWN0TmFtZShzdGF0ZSxkaWN0TmFtZSl7XHJcblx0XHRcdHN0YXRlLnRoaXNEaWN0TmFtZT1kaWN0TmFtZTtcclxuXHRcdH0sXHJcblx0XHRjbGFzc0F0dHJMaXN0KHN0YXRlLCByZXQpIHtcclxuXHRcdFx0Ly8gc3RhdGUuX2NsYXNzQXR0ckxpc3Rbc3RhdGUudGhpc2FyZWFGdW5jSURdID0gcmV0O1xyXG5cdFx0XHRWdWUuc2V0KHN0YXRlLl9jbGFzc0F0dHJMaXN0LHN0YXRlLnRoaXNhcmVhRnVuY0lELHJldCk7XHJcblx0XHR9LFxyXG5cdFx0Y2xhc3NHcmlkU3R5bGVJbmZvKHN0YXRlLCByZXQpIHtcclxuXHRcdFx0Ly8gc3RhdGUuX2NsYXNzR3JpZFN0eWxlSW5mb1tzdGF0ZS50aGlzYXJlYUZ1bmNJRF0gPSByZXQ7XHJcblx0XHRcdHZhciBkYXRhID0ge307XHJcblx0XHRcdGlmKHN0YXRlLl9jbGFzc0dyaWRTdHlsZUluZm9bc3RhdGUudGhpc2FyZWFGdW5jSURdKVxyXG5cdFx0XHRcdGRhdGEgPSBzdGF0ZS5fY2xhc3NHcmlkU3R5bGVJbmZvW3N0YXRlLnRoaXNhcmVhRnVuY0lEXTtcclxuXHRcdFx0VnVlLnNldChkYXRhLHN0YXRlLnRoaXNFZGl0TmFtZSxyZXQpO1xyXG5cdFx0XHRWdWUuc2V0KHN0YXRlLl9jbGFzc0dyaWRTdHlsZUluZm8sc3RhdGUudGhpc2FyZWFGdW5jSUQsZGF0YSk7XHJcblx0XHR9LFxyXG5cdFx0c3ViQ2xhc3NBdHRyTGlzdChzdGF0ZSwgcmV0KSB7XHJcblx0XHRcdFZ1ZS5zZXQoc3RhdGUuX3N1YkNsYXNzQXR0ckxpc3Qsc3RhdGUudGhpc2FyZWFGdW5jU3ViSUQscmV0KTtcclxuXHRcdH0sXHJcblx0XHRzdWJDbGFzc0dyaWRTdHlsZUluZm8oc3RhdGUsIHJldCkge1xyXG5cdFx0XHR2YXIgZGF0YSA9IHt9O1xyXG5cdFx0XHRpZihzdGF0ZS5fc3ViQ2xhc3NHcmlkU3R5bGVJbmZvW3N0YXRlLnRoaXNhcmVhRnVuY1N1YklEXSlcclxuXHRcdFx0XHRkYXRhID0gc3RhdGUuX3N1YkNsYXNzR3JpZFN0eWxlSW5mb1tzdGF0ZS50aGlzYXJlYUZ1bmNTdWJJRF07XHJcblx0XHRcdFZ1ZS5zZXQoZGF0YSxzdGF0ZS50aGlzRWRpdFN1Yk5hbWUscmV0KTtcclxuXHRcdFx0VnVlLnNldChzdGF0ZS5fc3ViQ2xhc3NHcmlkU3R5bGVJbmZvLHN0YXRlLnRoaXNhcmVhRnVuY1N1YklELGRhdGEpO1xyXG5cdFx0fSxcclxuXHRcdGRpY1ZhbHVlSW5mbyhzdGF0ZSwgcmV0KSB7XHJcblx0XHRcdC8vIHN0YXRlLl9kaWNWYWx1ZUluZm9bc3RhdGUudGhpc2FyZWFGdW5jSURdID0gcmV0O1xyXG5cdFx0XHRWdWUuc2V0KHN0YXRlLl9kaWNWYWx1ZUluZm8sc3RhdGUudGhpc0RpY3ROYW1lLHJldCk7XHJcblx0XHR9LFxyXG5cdFx0RGF0YU9ialJ1bkN1c3RvbUV2ZW50SW5mbyhzdGF0ZSwgcmV0KSB7XHJcblx0XHRcdHN0YXRlLkRhdGFPYmpSdW5DdXN0b21FdmVudEluZm8gPSByZXQ7XHJcblx0XHR9LFxyXG5cdFx0cXVlcnlTZWxwc24oc3RhdGUsIHJldCkge1xyXG5cdFx0XHRzdGF0ZS5xdWVyeVNlbHBzbiA9IHJldDtcclxuXHRcdH0sXHJcblx0XHRQcm9qZWN0R2V0QW5hbHlzaXNMaXN0KHN0YXRlLCByZXQpIHtcclxuXHRcdFx0c3RhdGUuUHJvamVjdEdldEFuYWx5c2lzTGlzdCA9IHJldDtcclxuXHRcdH0sXHJcblx0XHRhZGRjbGFzc2F0dHIoc3RhdGUsIHJldCkge1xyXG5cdFx0XHRzdGF0ZS5hZGRjbGFzc2F0dHIgPSByZXQ7XHJcblx0XHR9LFxyXG5cdFx0RGVsT2JqKHN0YXRlLCByZXQpIHtcclxuXHRcdFx0c3RhdGUuRGVsT2JqID0gcmV0O1xyXG5cdFx0fSxcclxuXHRcdGxvZ291dChzdGF0ZSkge1xyXG5cdFx0XHRzdGF0ZS5oYXNMb2dpbiA9IGZhbHNlXHJcblx0XHR9LFxyXG5cdH0sXHJcblx0Z2V0dGVyczoge1xyXG5cdFx0Z2V0RGV2aWNlSWQoc3RhdGUsIHJldCkge1xyXG5cdFx0XHRyZXR1cm4gc3RhdGUuZGV2aWNlSWRcclxuXHRcdH0sXHJcblx0XHRHZXRBcGtTZXJ2aW9uSW5mbyhzdGF0ZSkge1xyXG5cdFx0XHRyZXR1cm4gc3RhdGUuYXBrVmVyc2lvbkluZm9cclxuXHRcdH0sXHJcblx0XHRsb2dpbmlkKHN0YXRlKSB7XHJcblx0XHRcdHJldHVybiBzdGF0ZS5sb2dpblByb3ZpZGVyLmxvZ2luaWRcclxuXHRcdH0sXHJcblx0XHRnZXRVcmwoc3RhdGUpIHtcclxuXHRcdFx0cmV0dXJuIHN0YXRlLnVybFxyXG5cdFx0fSxcclxuXHRcdGdldE9yZ1NBcGkoc3RhdGUsIHVybCkge1xyXG5cdFx0XHRyZXR1cm4gc3RhdGUuT0lPcmdTQVBJO1xyXG5cdFx0fSxcclxuXHRcdGdldE1vYnhvU0FwaShzdGF0ZSwgdXJsKSB7XHJcblx0XHRcdHJldHVybiBzdGF0ZS5PSU1vYm94U0FQSTtcclxuXHRcdH0sXHJcblx0XHRnZXREYXRhU0FwaShzdGF0ZSwgdXJsKSB7XHJcblx0XHRcdHJldHVybiBzdGF0ZS5PSURhdGFTQVBJO1xyXG5cdFx0fSxcclxuXHRcdGdldE1vbmdvZGJTdnIoc3RhdGUsIHVybCkge1xyXG5cdFx0XHRyZXR1cm4gc3RhdGUuT0lNb25nb2RiU3ZyO1xyXG5cdFx0fSxcclxuXHRcdGdldGNsYXNzQXR0ckxpc3Qoc3RhdGUpe1xyXG5cdFx0XHRyZXR1cm4gc3RhdGUuX2NsYXNzQXR0ckxpc3Rbc3RhdGUudGhpc2FyZWFGdW5jSURdO1xyXG5cdFx0fSxcclxuXHRcdGdldGNsYXNzR3JpZFN0eWxlSW5mbyhzdGF0ZSl7XHJcblx0XHRcdGlmKHN0YXRlLl9jbGFzc0dyaWRTdHlsZUluZm9bc3RhdGUudGhpc2FyZWFGdW5jSURdKVxyXG5cdFx0XHRcdHJldHVybiBzdGF0ZS5fY2xhc3NHcmlkU3R5bGVJbmZvW3N0YXRlLnRoaXNhcmVhRnVuY0lEXVtzdGF0ZS50aGlzRWRpdE5hbWVdO1xyXG5cdFx0XHRlbHNlIFxyXG5cdFx0XHRcdHJldHVybiBcIlwiO1xyXG5cdFx0fSxcclxuXHRcdGdldFN1YkNsYXNzQXR0ckxpc3Qoc3RhdGUpe1xyXG5cdFx0XHRyZXR1cm4gc3RhdGUuX3N1YkNsYXNzQXR0ckxpc3Rbc3RhdGUudGhpc2FyZWFGdW5jU3ViSURdO1xyXG5cdFx0fSxcclxuXHRcdGdldFN1YkNsYXNzR3JpZFN0eWxlSW5mbyhzdGF0ZSl7XHJcblx0XHRcdGlmKHN0YXRlLl9zdWJDbGFzc0dyaWRTdHlsZUluZm9bc3RhdGUudGhpc2FyZWFGdW5jU3ViSURdKVxyXG5cdFx0XHRcdHJldHVybiBzdGF0ZS5fc3ViQ2xhc3NHcmlkU3R5bGVJbmZvW3N0YXRlLnRoaXNhcmVhRnVuY1N1YklEXVtzdGF0ZS50aGlzRWRpdFN1Yk5hbWVdO1xyXG5cdFx0XHRlbHNlIFxyXG5cdFx0XHRcdHJldHVybiBcIlwiO1xyXG5cdFx0fSxcclxuXHRcdGdldGRpY1ZhbHVlSW5mbyhzdGF0ZSl7XHJcblx0XHRcdHJldHVybiBzdGF0ZS5fZGljVmFsdWVJbmZvW3N0YXRlLnRoaXNEaWN0TmFtZV07XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdFxyXG5cdH0sXHJcblx0YWN0aW9uczoge1xyXG5cdFx0Ly97Y29tbWl0fSDop6PmnoTvvIxcclxuXHRcdC8vdW5pdmVyaWZ5SW5mbyDoh6rlrprkuYnlj4LmlbBcclxuXHRcdEdldEFwa1ZlcnNpb25JbmZvOiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHR1bml2ZXJpZnlJbmZvID0gdW5pdmVyaWZ5SW5mbyB8fCB7fTtcclxuXHRcdFx0XHR1bml2ZXJpZnlJbmZvLnNlcnZlciA9IHVuaXZlcmlmeUluZm8uc2VydmVyIHx8ICcnO1xyXG5cdFx0XHRcdGlmICh1bml2ZXJpZnlJbmZvLnNlcnZlci5sZW5ndGggPT0gMCkge1xyXG5cdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOifmnI3liqHlmajlnLDlnYDkuI3og73kuLrnqbohJ30pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR2YXIgb3BlbmluZm8gPSBcImh0dHA6Ly9cIiArIHVuaXZlcmlmeUluZm8uc2VydmVyICsgXCIvXCI7IC8vK1wiL09yZ1dlYlNcIlxyXG5cdFx0XHRcdC8v6K6+572u5YWo5bGA5Y+C5pWw77yadXJsLeacjeWKoeWZqOWcsOWdgFxyXG5cdFx0XHRcdGNvbW1pdChcInNldFVybFwiLG9wZW5pbmZvKTtcclxuXHRcdFx0XHQvLyB2YXIgc2VyID0gdW5pdmVyaWZ5SW5mby5zZXJ2ZXIuc3BsaXQoJy8nKTtcclxuXHRcdFx0XHQvLyBpZihzZXJbMV0gPT0gJ21vYm94Mycpe1xyXG5cdFx0XHRcdC8vIFx0Ly8gcmVqZWN0KHtcImVyck1zZ1wiOlwiTW9ib3gz5pqC5pe25pyq5pSv5oyB6Ieq5Yqo5pu05paw77yBXCJ9KTtcclxuXHRcdFx0XHQvLyBcdHJlc29sdmUoe2NvZGU6JzAwMDAwJyxkYXRhOlwiXCIsbXNnOlwiXCJ9KTtcclxuXHRcdFx0XHQvLyBcdHJldHVybjtcclxuXHRcdFx0XHQvLyB9XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBvcGVuaW5mbyArIFwiUERBL0dldEFwa1ZlcnNpb25JbmZvXCIsXHJcblx0XHRcdFx0XHRkYXRhOiB7fSxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRoZWFkZXI6IHtcclxuXHRcdFx0XHRcdCAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKHJlcyk7IFxyXG5cdFx0XHRcdFx0XHRpZihyZXMuc3RhdHVzQ29kZT09NDA0KXtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6XCLlnLDlnYDkuI3lr7nvvIzor7fmo4Dmn6Xor6XlnLDlnYDvvJpcIisgb3BlbmluZm8gK1wiLOaWueazle+8mkdldEFwa1ZlcnNpb25JbmZvLOaYr+WQpuato+ehrlwifSk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZihyZXMuc3RhdHVzQ29kZT09NTAwKXtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6XCLmnKrmib7liLDmm7TmlrDljIXmiYDlnKjnm67lvZXvvIFcIn0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IHJlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuY29kZT09JzAwMDAwJykge1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1pdChcInNldEFwa1ZlcnNpb25JbmZvXCIscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdGxvZ2luOiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHR1bml2ZXJpZnlJbmZvID0gdW5pdmVyaWZ5SW5mbyB8fCB7fTtcclxuXHRcdFx0XHR1bml2ZXJpZnlJbmZvLnNlcnZlciA9IHVuaXZlcmlmeUluZm8uc2VydmVyIHx8ICcnO1xyXG5cdFx0XHRcdHVuaXZlcmlmeUluZm8udW5hbWUgPSB1bml2ZXJpZnlJbmZvLnVuYW1lIHx8ICcnO1xyXG5cdFx0XHRcdHVuaXZlcmlmeUluZm8ucHdkID0gdW5pdmVyaWZ5SW5mby5wd2QgfHwgJyc7XHJcblx0XHRcdFx0aWYgKHVuaXZlcmlmeUluZm8uc2VydmVyLmxlbmd0aCA9PSAwKSB7XHJcblx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6J+acjeWKoeWZqOWcsOWdgOS4jeiDveS4uuepuiEnfSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICh1bml2ZXJpZnlJbmZvLnVuYW1lLmxlbmd0aCA8IDIpIHtcclxuXHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjon6LSm5Y+35pyA55+t5Li6IDIg5Liq5a2X56ymISd9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKHVuaXZlcmlmeUluZm8ucHdkLmxlbmd0aCA8IDEpIHtcclxuXHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjon5a+G56CB5pyA55+t5Li6IDHkuKrlrZfnrKYhJ30pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR2YXIgb3BlbmluZm8gPSBcImh0dHA6Ly9cIiArIHVuaXZlcmlmeUluZm8uc2VydmVyICsgXCIvXCI7XHJcblx0XHRcdFx0Ly/orr7nva7lhajlsYDlj4LmlbDvvJp1cmwt5pyN5Yqh5Zmo5Zyw5Z2AXHJcblx0XHRcdFx0Y29tbWl0KFwic2V0VXJsXCIsb3BlbmluZm8pO1xyXG5cdFx0XHRcdHZhciBzZXIgPSB1bml2ZXJpZnlJbmZvLnNlcnZlci5zcGxpdCgnLycpO1xyXG5cdFx0XHRcdHZhciB1cmwgPSBvcGVuaW5mbyArIFwiUERBL1NpZ25JblwiO1xyXG5cdFx0XHRcdHZhciBoZWFkZXIgPSB7J2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnfTtcclxuXHRcdFx0XHRjb21taXQoXCJzZXRPcmdTQXBpXCIsJycpO1xyXG5cdFx0XHRcdGNvbW1pdChcInNldE1vYnhvU0FwaVwiLCcnKTtcclxuXHRcdFx0XHRjb21taXQoXCJzZXREYXRhU0FwaVwiLCcnKTtcclxuXHRcdFx0XHRjb21taXQoXCJzZXRNb25nb2RiU3ZyXCIsJycpO1xyXG5cdFx0XHRcdGlmKHNlclsxXSA9PSAnbW9ib3gzJyl7IC8v5Yik5pat5Zyw5Z2A5piv5ZCm5pivTW9ib3gzXHJcblx0XHRcdFx0XHR2YXIgb3JnU0FwaSA9IFwiaHR0cDovL1wiICsgc2VyWzBdLnNwbGl0KCc6JylbMF0gKyBcIjo1MTAxL1wiO1xyXG5cdFx0XHRcdFx0dmFyIG1vYnhvU0FwaSA9IFwiaHR0cDovL1wiICsgc2VyWzBdLnNwbGl0KCc6JylbMF0gKyBcIjo1MTAyL1wiO1xyXG5cdFx0XHRcdFx0dmFyIGRhdGFTQXBpID0gXCJodHRwOi8vXCIgKyBzZXJbMF0uc3BsaXQoJzonKVswXSArIFwiOjUxMDMvXCI7XHJcblx0XHRcdFx0XHR2YXIgbW9uZ29kYlN2ciA9IFwiaHR0cDovL1wiICsgc2VyWzBdLnNwbGl0KCc6JylbMF0gKyBcIjo1MjAxL1wiO1xyXG5cdFx0XHRcdFx0Y29tbWl0KFwic2V0T3JnU0FwaVwiLG9yZ1NBcGkpO1xyXG5cdFx0XHRcdFx0Y29tbWl0KFwic2V0TW9ieG9TQXBpXCIsbW9ieG9TQXBpKTtcclxuXHRcdFx0XHRcdGNvbW1pdChcInNldERhdGFTQXBpXCIsZGF0YVNBcGkpO1xyXG5cdFx0XHRcdFx0Y29tbWl0KFwic2V0TW9uZ29kYlN2clwiLG1vbmdvZGJTdnIpO1xyXG5cdFx0XHRcdFx0dXJsID0gb3JnU0FwaSsnYXBpL3VzZXIvYWNlL1ZlcmlmeVBhc3N3b3JkJztcclxuXHRcdFx0XHRcdHVuaXZlcmlmeUluZm8gPSB7XHJcblx0XHRcdFx0XHRcdGFwcF90eXBlOiBcIm1vYm94XCIsXHJcblx0XHRcdFx0XHRcdHVzZXJfbG9naW46IEJhc2U2NC5lbmNvZGUodW5pdmVyaWZ5SW5mby51bmFtZSksXHJcblx0XHRcdFx0XHRcdHVzZXJfcHN3OiBCYXNlNjQuZW5jb2RlKHVuaXZlcmlmeUluZm8ucHdkKSxcclxuXHRcdFx0XHRcdFx0Y2xpZW50X2luZm86e1xyXG5cdFx0XHRcdFx0XHRcdHR5cGU6IDMsIC8v5a6i5oi356uv57G75Z6L77yaMOKAk1BD77yMMeKAk1dFQu+8jDLigJPlronljZPvvIwz4oCT5a6J5Y2TUEFE77yMNOKAk2lQaG9uZe+8jCA14oCTaVBhZO+8jCA24oCT5YW25a6DXHJcblx0XHRcdFx0XHRcdFx0bnVtOiBzdGF0ZS5kZXZpY2VJZCAgLy9QREHnmoTorr7lpIflj7dcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdGhlYWRlcj17fTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29uc29sZS5sb2codW5pdmVyaWZ5SW5mbyk7XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiB1cmwsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdGhlYWRlcjogaGVhZGVyLFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhyZXMpOyBcclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gcmVzLmRhdGFcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5jb2RlPT0nMDAwMDAnIHx8IHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29tbWl0KFwibG9naW5cIixyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6cmV0Lm1zZz9yZXQubXNnOnJldC5lcnJfbXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0XHJcblx0XHRhcmVhRnVuYzogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0IC8vIGNvbnNvbGUubG9nKHN0YXRlLmxvZ2luUHJvdmlkZXIubG9naW5pZC5yZXN1bHQuc2Vzc2lvbl9pZCk7XHJcblx0XHRcdFx0dW5pdmVyaWZ5SW5mby5sb2dpbkluZm8gPSBKU09OLnN0cmluZ2lmeSh7XHJcblx0XHRcdFx0XHRzZXJ2ZXI6IHVuaS5nZXRTdG9yYWdlU3luYygnc2VydmVyJyksXHJcblx0XHRcdFx0XHR1bmFtZTogdW5pLmdldFN0b3JhZ2VTeW5jKCdhY2NvdW50JyksXHJcblx0XHRcdFx0XHRwd2Q6IHVuaS5nZXRTdG9yYWdlU3luYygncGFzc3dvcmQnKSxcclxuXHRcdFx0XHRcdGNuYW1lOiBwbHVzLmRldmljZS5tb2RlbCxcclxuXHRcdFx0XHRcdHR5cGU6IFwiMFwiXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0dmFyIHVybCA9IHN0YXRlLnVybCArIFwiUERBL1BEQUFyZWFcIjtcclxuXHRcdFx0XHR2YXIgaGVhZGVyID0geydjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ307XHJcblx0XHRcdFx0aWYoc3RhdGUuT0lNb2JveFNBUEkpeyAvL+WIpOaWreaYr+WQpuaYr01vYm94M1xyXG5cdFx0XHRcdFx0dXJsID0gc3RhdGUuT0lNb2JveFNBUEkrJ2FwaS9hcHAvYXJlYS9HZXRMaXN0P3Nlc3Npb25pZD0nK3N0YXRlLmxvZ2luUHJvdmlkZXIubG9naW5pZC5yZXN1bHQuc2Vzc2lvbl9pZDtcclxuXHRcdFx0XHRcdHVuaXZlcmlmeUluZm8gPSB7XHJcblx0XHRcdFx0XHRcdGFwcF90eXBlOiBcIk1FU1wiLFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdGhlYWRlcj17fTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0IFxyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogdXJsLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRoZWFkZXI6IGhlYWRlcixcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChyZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2cocmVzKTtcclxuXHRcdFx0XHRcdFx0aWYocmVzLnN0YXR1c0NvZGU9PTQwNCl7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOlwi5Zyw5Z2A5LiN5a+577yM6K+35qOA5p+l6K+l5Zyw5Z2A77yaXCIrIG9wZW5pbmZvfSk7XHJcblx0XHRcdFx0XHRcdH0gXHJcblx0XHRcdFx0XHRcdC8vIGlmKEpTT04uc3RyaW5naWZ5KHJlcy5kYXRhKS5pbmNsdWRlcygnTG9naW4gUGFnZSAtIEFjZSBBZG1pbicpKXtcclxuXHRcdFx0XHRcdFx0Ly8gXHR1bmkucmVMYXVuY2goe1xyXG5cdFx0XHRcdFx0XHQvLyBcdFx0dXJsOiAnLi4vbG9naW4vaW5kZXgnXHJcblx0XHRcdFx0XHRcdC8vIFx0fSlcclxuXHRcdFx0XHRcdFx0Ly8gXHRyZWplY3Qoe1wiZXJyTXNnXCI6XCLnmbvlvZXlt7Lov4fmnJ/vvIzor7fph43mlrDnmbvlvZVcIn0pO1xyXG5cdFx0XHRcdFx0XHQvLyB9XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IHJlcy5kYXRhO1xyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmNvZGU9PScwMDAwMCcgfHwgcmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRjb21taXQoXCJhcmVhRnVuY1wiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQubXNnP3JldC5tc2c6cmV0LmVycl9tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHQvLyBNb2JveDPojrflj5blupTnlKjpoobln5/kuIvnmoTlip/og73ngrlcclxuXHRcdEdldEZ1bmNUcmVlOiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQgLy8gY29uc29sZS5sb2coc3RhdGUubG9naW5Qcm92aWRlci5sb2dpbmlkLnJlc3VsdC5zZXNzaW9uX2lkKTtcclxuXHRcdFx0XHR1bmkucmVxdWVzdCh7XHJcblx0XHRcdFx0XHR1cmw6IHN0YXRlLk9JTW9ib3hTQVBJKydhcGkvYXBwL0dldEZ1bmNUcmVlP3Nlc3Npb25pZD0nK3N0YXRlLmxvZ2luUHJvdmlkZXIubG9naW5pZC5yZXN1bHQuc2Vzc2lvbl9pZCxcclxuXHRcdFx0XHRcdGRhdGE6IHVuaXZlcmlmeUluZm8sXHJcblx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdGRhdGFUeXBlOlwianNvblwiLFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKF9yZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coX3Jlcyk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IF9yZXMuZGF0YVxyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBjb21taXQoXCJhcmVhRnVuY1wiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQuZXJyX21zZ30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdFxyXG5cdFx0Y2xhc3NBdHRyTGlzdDogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0IC8vIGNvbnNvbGUubG9nKHN0YXRlLnVybCk7XHJcblx0XHRcdFx0dW5pdmVyaWZ5SW5mby5sb2dpbkluZm8gPSBKU09OLnN0cmluZ2lmeSh7XHJcblx0XHRcdFx0XHRzZXJ2ZXI6IHVuaS5nZXRTdG9yYWdlU3luYygnc2VydmVyJyksXHJcblx0XHRcdFx0XHR1bmFtZTogdW5pLmdldFN0b3JhZ2VTeW5jKCdhY2NvdW50JyksXHJcblx0XHRcdFx0XHRwd2Q6IHVuaS5nZXRTdG9yYWdlU3luYygncGFzc3dvcmQnKSxcclxuXHRcdFx0XHRcdGNuYW1lOiBwbHVzLmRldmljZS5tb2RlbCxcclxuXHRcdFx0XHRcdHR5cGU6IFwiMFwiXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS51cmwgKyBcIlBEQS9QREFBdHRyTGlzdFwiLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRoZWFkZXI6IHtcclxuXHRcdFx0XHRcdFx0J2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhyZXMpO1xyXG5cdFx0XHRcdFx0XHQvLyBpZihKU09OLnN0cmluZ2lmeShyZXMuZGF0YSkuaW5jbHVkZXMoJ0xvZ2luIFBhZ2UgLSBBY2UgQWRtaW4nKSl7XHJcblx0XHRcdFx0XHRcdC8vIFx0dW5pLnJlTGF1bmNoKHtcclxuXHRcdFx0XHRcdFx0Ly8gXHRcdHVybDogJy4uL2xvZ2luL2luZGV4J1xyXG5cdFx0XHRcdFx0XHQvLyBcdH0pXHJcblx0XHRcdFx0XHRcdC8vIFx0cmVqZWN0KHtcImVyck1zZ1wiOlwi55m75b2V5bey6L+H5pyf77yM6K+36YeN5paw55m75b2VXCJ9KTtcclxuXHRcdFx0XHRcdFx0Ly8gfVxyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSByZXMuZGF0YVxyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmNvZGU9PScwMDAwMCcpIHtcclxuXHRcdFx0XHRcdFx0XHRjb21taXQoXCJjbGFzc0F0dHJMaXN0XCIscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdGNsYXNzR3JpZFN0eWxlSW5mbzogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0IC8vIGNvbnNvbGUubG9nKHN0YXRlLnVybCk7XHJcblx0XHRcdFx0dW5pdmVyaWZ5SW5mby5sb2dpbkluZm8gPSBKU09OLnN0cmluZ2lmeSh7XHJcblx0XHRcdFx0XHRzZXJ2ZXI6IHVuaS5nZXRTdG9yYWdlU3luYygnc2VydmVyJyksXHJcblx0XHRcdFx0XHR1bmFtZTogdW5pLmdldFN0b3JhZ2VTeW5jKCdhY2NvdW50JyksXHJcblx0XHRcdFx0XHRwd2Q6IHVuaS5nZXRTdG9yYWdlU3luYygncGFzc3dvcmQnKSxcclxuXHRcdFx0XHRcdGNuYW1lOiBwbHVzLmRldmljZS5tb2RlbCxcclxuXHRcdFx0XHRcdHR5cGU6IFwiMFwiXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0IFxyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogc3RhdGUudXJsICsgXCJQREEvUERBR3JpZFN0eWxlR2V0SW5mb1wiLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRoZWFkZXI6IHtcclxuXHRcdFx0XHRcdFx0J2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhyZXMpO1xyXG5cdFx0XHRcdFx0XHQvLyBpZihKU09OLnN0cmluZ2lmeShyZXMuZGF0YSkuaW5jbHVkZXMoJ0xvZ2luIFBhZ2UgLSBBY2UgQWRtaW4nKSl7XHJcblx0XHRcdFx0XHRcdC8vIFx0dW5pLnJlTGF1bmNoKHtcclxuXHRcdFx0XHRcdFx0Ly8gXHRcdHVybDogJy4uL2xvZ2luL2luZGV4J1xyXG5cdFx0XHRcdFx0XHQvLyBcdH0pXHJcblx0XHRcdFx0XHRcdC8vIFx0cmVqZWN0KHtcImVyck1zZ1wiOlwi55m75b2V5bey6L+H5pyf77yM6K+36YeN5paw55m75b2VXCJ9KTtcclxuXHRcdFx0XHRcdFx0Ly8gfVxyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSByZXMuZGF0YVxyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmNvZGU9PScwMDAwMCcpIHtcclxuXHRcdFx0XHRcdFx0XHQvLyB2YXIgZGF0YSA9e307XHJcblx0XHRcdFx0XHRcdFx0Ly8gVnVlLnNldChkYXRhLHVuaXZlcmlmeUluZm8ubmFtZSxyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1pdChcImNsYXNzR3JpZFN0eWxlSW5mb1wiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQubXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0XHJcblx0XHRzdWJDbGFzc0F0dHJMaXN0OiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQgLy8gY29uc29sZS5sb2coc3RhdGUudXJsKTtcclxuXHRcdFx0XHR1bml2ZXJpZnlJbmZvLmxvZ2luSW5mbyA9IEpTT04uc3RyaW5naWZ5KHtcclxuXHRcdFx0XHRcdHNlcnZlcjogdW5pLmdldFN0b3JhZ2VTeW5jKCdzZXJ2ZXInKSxcclxuXHRcdFx0XHRcdHVuYW1lOiB1bmkuZ2V0U3RvcmFnZVN5bmMoJ2FjY291bnQnKSxcclxuXHRcdFx0XHRcdHB3ZDogdW5pLmdldFN0b3JhZ2VTeW5jKCdwYXNzd29yZCcpLFxyXG5cdFx0XHRcdFx0Y25hbWU6IHBsdXMuZGV2aWNlLm1vZGVsLFxyXG5cdFx0XHRcdFx0dHlwZTogXCIwXCJcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHR1bmkucmVxdWVzdCh7XHJcblx0XHRcdFx0XHR1cmw6IHN0YXRlLnVybCArIFwiUERBL1BEQUF0dHJMaXN0XCIsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdGhlYWRlcjoge1xyXG5cdFx0XHRcdFx0XHQnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKHJlcyk7XHJcblx0XHRcdFx0XHRcdC8vIGlmKEpTT04uc3RyaW5naWZ5KHJlcy5kYXRhKS5pbmNsdWRlcygnTG9naW4gUGFnZSAtIEFjZSBBZG1pbicpKXtcclxuXHRcdFx0XHRcdFx0Ly8gXHR1bmkucmVMYXVuY2goe1xyXG5cdFx0XHRcdFx0XHQvLyBcdFx0dXJsOiAnLi4vbG9naW4vaW5kZXgnXHJcblx0XHRcdFx0XHRcdC8vIFx0fSlcclxuXHRcdFx0XHRcdFx0Ly8gXHRyZWplY3Qoe1wiZXJyTXNnXCI6XCLnmbvlvZXlt7Lov4fmnJ/vvIzor7fph43mlrDnmbvlvZVcIn0pO1xyXG5cdFx0XHRcdFx0XHQvLyB9XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IHJlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuY29kZT09JzAwMDAwJykge1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1pdChcInN1YkNsYXNzQXR0ckxpc3RcIixyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6cmV0Lm1zZ30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdFxyXG5cdFx0c3ViQ2xhc3NHcmlkU3R5bGVJbmZvOiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQgLy8gY29uc29sZS5sb2coc3RhdGUudXJsKTtcclxuXHRcdFx0XHR1bml2ZXJpZnlJbmZvLmxvZ2luSW5mbyA9IEpTT04uc3RyaW5naWZ5KHtcclxuXHRcdFx0XHRcdHNlcnZlcjogdW5pLmdldFN0b3JhZ2VTeW5jKCdzZXJ2ZXInKSxcclxuXHRcdFx0XHRcdHVuYW1lOiB1bmkuZ2V0U3RvcmFnZVN5bmMoJ2FjY291bnQnKSxcclxuXHRcdFx0XHRcdHB3ZDogdW5pLmdldFN0b3JhZ2VTeW5jKCdwYXNzd29yZCcpLFxyXG5cdFx0XHRcdFx0Y25hbWU6IHBsdXMuZGV2aWNlLm1vZGVsLFxyXG5cdFx0XHRcdFx0dHlwZTogXCIwXCJcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHQgXHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS51cmwgKyBcIlBEQS9QREFHcmlkU3R5bGVHZXRJbmZvXCIsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdGhlYWRlcjoge1xyXG5cdFx0XHRcdFx0XHQnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKHJlcyk7XHJcblx0XHRcdFx0XHRcdC8vIGlmKEpTT04uc3RyaW5naWZ5KHJlcy5kYXRhKS5pbmNsdWRlcygnTG9naW4gUGFnZSAtIEFjZSBBZG1pbicpKXtcclxuXHRcdFx0XHRcdFx0Ly8gXHR1bmkucmVMYXVuY2goe1xyXG5cdFx0XHRcdFx0XHQvLyBcdFx0dXJsOiAnLi4vbG9naW4vaW5kZXgnXHJcblx0XHRcdFx0XHRcdC8vIFx0fSlcclxuXHRcdFx0XHRcdFx0Ly8gXHRyZWplY3Qoe1wiZXJyTXNnXCI6XCLnmbvlvZXlt7Lov4fmnJ/vvIzor7fph43mlrDnmbvlvZVcIn0pO1xyXG5cdFx0XHRcdFx0XHQvLyB9XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IHJlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuY29kZT09JzAwMDAwJykge1xyXG5cdFx0XHRcdFx0XHRcdC8vIHZhciBkYXRhID17fTtcclxuXHRcdFx0XHRcdFx0XHQvLyBWdWUuc2V0KGRhdGEsdW5pdmVyaWZ5SW5mby5uYW1lLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0Y29tbWl0KFwic3ViQ2xhc3NHcmlkU3R5bGVJbmZvXCIscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5lcnJfbXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0XHJcblx0XHRkaWNWYWx1ZUluZm86IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdCAvLyBjb25zb2xlLmxvZyhzdGF0ZS51cmwpO1xyXG5cdFx0XHRcdHVuaXZlcmlmeUluZm8ubG9naW5JbmZvID0gSlNPTi5zdHJpbmdpZnkoe1xyXG5cdFx0XHRcdFx0c2VydmVyOiB1bmkuZ2V0U3RvcmFnZVN5bmMoJ3NlcnZlcicpLFxyXG5cdFx0XHRcdFx0dW5hbWU6IHVuaS5nZXRTdG9yYWdlU3luYygnYWNjb3VudCcpLFxyXG5cdFx0XHRcdFx0cHdkOiB1bmkuZ2V0U3RvcmFnZVN5bmMoJ3Bhc3N3b3JkJyksXHJcblx0XHRcdFx0XHRjbmFtZTogcGx1cy5kZXZpY2UubW9kZWwsXHJcblx0XHRcdFx0XHR0eXBlOiBcIjBcIlxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdCBcclxuXHRcdFx0XHR1bmkucmVxdWVzdCh7XHJcblx0XHRcdFx0XHR1cmw6IHN0YXRlLnVybCArIFwiUERBL1BEQURpY1ZhbHVlR2V0SW5mb1wiLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRoZWFkZXI6IHtcclxuXHRcdFx0XHRcdFx0J2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhyZXMpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSByZXMuZGF0YVxyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmNvZGU9PScwMDAwMCcpIHtcclxuXHRcdFx0XHRcdFx0XHRzdGF0ZS50aGlzRGljdE5hbWUgPSB1bml2ZXJpZnlJbmZvLmRpY19uYW1lXHJcblx0XHRcdFx0XHRcdFx0Y29tbWl0KFwiZGljVmFsdWVJbmZvXCIscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdERhdGFPYmpSdW5DdXN0b21FdmVudEluZm86IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdCAvLyBjb25zb2xlLmxvZyhzdGF0ZS51cmwpO1xyXG5cdFx0XHRcdHVuaXZlcmlmeUluZm8ubG9naW5JbmZvID0gSlNPTi5zdHJpbmdpZnkoe1xyXG5cdFx0XHRcdFx0c2VydmVyOiB1bmkuZ2V0U3RvcmFnZVN5bmMoJ3NlcnZlcicpLFxyXG5cdFx0XHRcdFx0dW5hbWU6IHVuaS5nZXRTdG9yYWdlU3luYygnYWNjb3VudCcpLFxyXG5cdFx0XHRcdFx0cHdkOiB1bmkuZ2V0U3RvcmFnZVN5bmMoJ3Bhc3N3b3JkJyksXHJcblx0XHRcdFx0XHRjbmFtZTogcGx1cy5kZXZpY2UubW9kZWwsXHJcblx0XHRcdFx0XHR0eXBlOiBcIjBcIlxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogc3RhdGUudXJsICsgXCJQREEvUERBRGF0YU9ialJ1bkN1c3RvbUV2ZW50XCIsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdGhlYWRlcjoge1xyXG5cdFx0XHRcdFx0XHQnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHJlcyk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IHJlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuY29kZT09JzAwMDAwJykge1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1pdChcIkRhdGFPYmpSdW5DdXN0b21FdmVudEluZm9cIixyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6cmV0Lm1zZ30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdFxyXG5cdFx0cXVlcnlTZWxwc246IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdCAvLyBjb25zb2xlLmxvZyhzdGF0ZS51cmwpO1xyXG5cdFx0XHRcdHZhciB1cmwgPSBzdGF0ZS51cmwgKyBcInNlbHBzbi9xdWVyeWpzb25cIjtcclxuXHRcdFx0XHR2YXIgZGF0YWpzb24gPSB1bml2ZXJpZnlJbmZvO1xyXG5cdFx0XHRcdHZhciBoZWFkZXIgPSB7J2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnfTtcclxuXHRcdFx0XHRpZihzdGF0ZS5PSU9yZ1NBUEkpeyAvL+WIpOaWreaYr+WQpuaYr01vYm94M1xyXG5cdFx0XHRcdCBcdHVybCA9IHN0YXRlLk9JT3JnU0FQSSsnYXBpL3VzZXIvcXVlcnkvcXVlcnk/c2Vzc2lvbmlkPScrc3RhdGUubG9naW5Qcm92aWRlci5sb2dpbmlkLnJlc3VsdC5zZXNzaW9uX2lkO1xyXG5cdFx0XHRcdFx0ZGF0YWpzb24gPSB7XHJcblx0XHRcdFx0IFx0XHRxdWVyeV9zdHI6IHVuaXZlcmlmeUluZm8uanAsXHJcblx0XHRcdFx0IFx0fTtcclxuXHRcdFx0XHQgXHRoZWFkZXI9e307XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogdXJsLFxyXG5cdFx0XHRcdFx0ZGF0YTogZGF0YWpzb24sXHJcblx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdGRhdGFUeXBlOlwianNvblwiLFxyXG5cdFx0XHRcdFx0aGVhZGVyOiBoZWFkZXIsXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHJlcyk7XHJcblx0XHRcdFx0XHRcdHRyeXtcclxuXHRcdFx0XHRcdFx0XHRyZXMgPSBKU09OLnBhcnNlKHJlcy5kYXRhKTtcclxuXHRcdFx0XHRcdFx0fWNhdGNoKGUpeyBcclxuXHRcdFx0XHRcdFx0XHRyZXMgPSByZXMuZGF0YTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAocmVzLmNvZGU9PScwMDAwMCcgfHwgcmVzLmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRjb21taXQoXCJxdWVyeVNlbHBzblwiLHJlcyk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXMpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXMubXNnP3Jlcy5tc2c6cmVzLmVycl9tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdFByb2plY3RHZXRBbmFseXNpc0xpc3Q6IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdCAvLyBjb25zb2xlLmxvZyhzdGF0ZS51cmwpO1xyXG5cdFx0XHRcdCB2YXIgdXJsID0gc3RhdGUudXJsICsgXCJicG0vUHJvamVjdEdldEFuYWx5c2lzTGlzdFwiO1xyXG5cdFx0XHRcdCB2YXIgaGVhZGVyID0geydjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ307XHJcblx0XHRcdFx0IGlmKHN0YXRlLk9JTW9ib3hTQVBJKXsgLy/liKTmlq3mmK/lkKbmmK9Nb2JveDNcclxuXHRcdFx0XHQgXHQvLyB1cmwgPSBzdGF0ZS5PSU1vYm94U0FQSSsnYXBpL2FwcC9hcmVhL0dldExpc3Q/c2Vzc2lvbmlkPScrc3RhdGUubG9naW5Qcm92aWRlci5sb2dpbmlkLnJlc3VsdC5zZXNzaW9uX2lkO1xyXG5cdFx0XHRcdCBcdC8vIHVuaXZlcmlmeUluZm8gPSB7XHJcblx0XHRcdFx0IFx0Ly8gXHRhcHBfdHlwZTogXCJNRVNcIixcclxuXHRcdFx0XHQgXHQvLyB9O1xyXG5cdFx0XHRcdCBcdC8vIGhlYWRlcj17fTtcclxuXHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpcIk1vYm94M+aaguaXtuacquaUr+aMgemAieaLqemhueebruaOpeWPo++8gVwifSk7XHJcblx0XHRcdFx0XHQvLyByZXNvbHZlKHtjb2RlOicwMDAwMCcsZGF0YTpcIlwiLG1zZzpcIlwifSk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0IH1cclxuXHRcdFx0XHQgIFxyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogdXJsLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRoZWFkZXI6IGhlYWRlcixcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChyZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2cocmVzKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gcmVzLmRhdGE7XHJcblx0XHRcdFx0XHRcdGlmIChyZXQuY29kZT09JzAwMDAwJykge1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1pdChcIlByb2plY3RHZXRBbmFseXNpc0xpc3RcIixyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6cmV0Lm1zZ30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdFxyXG5cdFx0YWRkY2xhc3NhdHRyOiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdGF0ZS51cmwpO1xyXG5cdFx0XHRcdHVuaXZlcmlmeUluZm8ubG9naW5JbmZvID0gSlNPTi5zdHJpbmdpZnkoe1xyXG5cdFx0XHRcdFx0c2VydmVyOiB1bmkuZ2V0U3RvcmFnZVN5bmMoJ3NlcnZlcicpLFxyXG5cdFx0XHRcdFx0dW5hbWU6IHVuaS5nZXRTdG9yYWdlU3luYygnYWNjb3VudCcpLFxyXG5cdFx0XHRcdFx0cHdkOiB1bmkuZ2V0U3RvcmFnZVN5bmMoJ3Bhc3N3b3JkJyksXHJcblx0XHRcdFx0XHRjbmFtZTogcGx1cy5kZXZpY2UubW9kZWwsXHJcblx0XHRcdFx0XHR0eXBlOiBcIjBcIlxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogc3RhdGUudXJsICsgXCJQREEvYWRkY2xhc3NhdHRyXCIsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdGhlYWRlcjoge1xyXG5cdFx0XHRcdFx0XHQnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKHJlcyk7XHJcblx0XHRcdFx0XHRcdC8vIGlmKEpTT04uc3RyaW5naWZ5KHJlcy5kYXRhKS5pbmNsdWRlcygnTG9naW4gUGFnZSAtIEFjZSBBZG1pbicpKXtcclxuXHRcdFx0XHRcdFx0Ly8gXHR1bmkucmVMYXVuY2goe1xyXG5cdFx0XHRcdFx0XHQvLyBcdFx0dXJsOiAnLi4vbG9naW4vaW5kZXgnXHJcblx0XHRcdFx0XHRcdC8vIFx0fSlcclxuXHRcdFx0XHRcdFx0Ly8gXHRyZWplY3Qoe1wiZXJyTXNnXCI6XCLnmbvlvZXlt7Lov4fmnJ/vvIzor7fph43mlrDnmbvlvZVcIn0pO1xyXG5cdFx0XHRcdFx0XHQvLyB9XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IHJlcy5kYXRhO1xyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmNvZGU9PScwMDAwMCcpIHtcclxuXHRcdFx0XHRcdFx0XHRjb21taXQoXCJhZGRjbGFzc2F0dHJcIixyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6SlNPTi5zdHJpbmdpZnkocmV0KX0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdFxyXG5cdFx0RGVsT2JqOiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQgLy8gY29uc29sZS5sb2coc3RhdGUudXJsKTtcclxuXHRcdFx0XHR1bmkucmVxdWVzdCh7XHJcblx0XHRcdFx0XHR1cmw6IHN0YXRlLnVybCArIFwiUERBL0RlbE9ialwiLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRoZWFkZXI6IHtcclxuXHRcdFx0XHRcdFx0J2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhyZXMpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSByZXMuZGF0YTtcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5jb2RlPT0nMDAwMDAnKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29tbWl0KFwiRGVsT2JqXCIscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOkpTT04uc3RyaW5naWZ5KHJldCl9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdFxyXG5cdFx0Ly8gYXBpL2NsYXNzL2F0dHIvR2V0TGlzdD9zZXNzaW9uaWQ9U0VTU0lPTl9JRFxyXG5cdFx0Ly8gTW9ib3gz5b6X5Yiw5pWw5o2u57G75bGe5oCnXHJcblx0XHRjbGFzc0F0dHJHZXRMaXN0OiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdGF0ZS51cmwpO1xyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogc3RhdGUuT0lEYXRhU0FQSSsnYXBpL2NsYXNzL2F0dHIvR2V0TGlzdD9zZXNzaW9uaWQ9JytzdGF0ZS5sb2dpblByb3ZpZGVyLmxvZ2luaWQucmVzdWx0LnNlc3Npb25faWQsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChfcmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKF9yZXMpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSBfcmVzLmRhdGFcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29tbWl0KFwiY2xhc3NBdHRyTGlzdFwiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQuZXJyX21zZ30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdC8vIGFwaS9jbGFzcy9hdHRyL0dldExpc3Q/c2Vzc2lvbmlkPVNFU1NJT05fSURcclxuXHRcdC8vIE1vYm94M+W+l+WIsOaVsOaNruexu+WxnuaAp1xyXG5cdFx0c3ViQ2xhc3NBdHRyR2V0TGlzdDogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coc3RhdGUudXJsKTtcclxuXHRcdFx0XHR1bmkucmVxdWVzdCh7XHJcblx0XHRcdFx0XHR1cmw6IHN0YXRlLk9JRGF0YVNBUEkrJ2FwaS9jbGFzcy9hdHRyL0dldExpc3Q/c2Vzc2lvbmlkPScrc3RhdGUubG9naW5Qcm92aWRlci5sb2dpbmlkLnJlc3VsdC5zZXNzaW9uX2lkLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAoX3JlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhfcmVzKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gX3Jlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbW1pdChcInN1YkNsYXNzQXR0ckxpc3RcIixyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6cmV0LmVycl9tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHQvLyBhcGkvZGljdC9pdGVtL0dldEluZm8/c2Vzc2lvbmlkPVNFU1NJT05fSURcclxuXHRcdC8vIE1vYm94M+W+l+WIsOWtl+WFuOmhueWIl+ihqFxyXG5cdFx0RGljdEl0ZW1HZXRMaXN0OiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdGF0ZS51cmwpO1xyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogc3RhdGUuT0lNb2JveFNBUEkrJ2FwaS9kaWN0L2l0ZW0vR2V0SW5mbz9zZXNzaW9uaWQ9JytzdGF0ZS5sb2dpblByb3ZpZGVyLmxvZ2luaWQucmVzdWx0LnNlc3Npb25faWQsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChfcmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKF9yZXMpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSBfcmVzLmRhdGFcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQuZXJyX21zZ30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdC8vIGFwaS9kaWN0L0dldEluZm8yP3Nlc3Npb25pZD1TRVNTSU9OX0lEXHJcblx0XHQvLyBNb2JveDPlvpfliLDlrZflhbjkv6Hmga9cclxuXHRcdERpY3RHZXRJbmZvOiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdGF0ZS51cmwpO1xyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogc3RhdGUuT0lNb2JveFNBUEkrJ2FwaS9kaWN0L0dldEluZm8yP3Nlc3Npb25pZD0nK3N0YXRlLmxvZ2luUHJvdmlkZXIubG9naW5pZC5yZXN1bHQuc2Vzc2lvbl9pZCxcclxuXHRcdFx0XHRcdGRhdGE6IHVuaXZlcmlmeUluZm8sXHJcblx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdGRhdGFUeXBlOlwianNvblwiLFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKF9yZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coX3Jlcyk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IF9yZXMuZGF0YVxyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5lcnJfbXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0XHJcblx0XHQvLyBhcGkvZGF0YW9iai9DcmVhdGU/c2Vzc2lvbmlkPVNFU1NJT05fSURcclxuXHRcdC8vIE1vYm94M+WIm+W7uuaVsOaNruWvueixoVxyXG5cdFx0Y3JlYXRlRGF0YU9iajogZnVuY3Rpb24oe1xyXG5cdFx0XHRjb21taXQsXHJcblx0XHRcdHN0YXRlXHJcblx0XHR9LCB1bml2ZXJpZnlJbmZvKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0IC8vIGNvbnNvbGUubG9nKHN0YXRlLnVybCk7XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS5PSURhdGFTQVBJKydhcGkvZGF0YW9iai9DcmVhdGU/c2Vzc2lvbmlkPScrc3RhdGUubG9naW5Qcm92aWRlci5sb2dpbmlkLnJlc3VsdC5zZXNzaW9uX2lkLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAoX3JlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhfcmVzKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gX3Jlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6cmV0LmVycl9tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdC8vIGFwaS9jbGFzcy91aXN0eWxlL0dldEluZm8/c2Vzc2lvbmlkPVNFU1NJT05fSURcclxuXHRcdC8vIE1vYm94M+W+l+WIsOaVsOaNruexu+aYvuekuuagt+W8j+S/oeaBr1xyXG5cdFx0VUlTdHlsZUdldEluZm86IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKHN0YXRlLmxvZ2luUHJvdmlkZXIubG9naW5pZC5yZXN1bHQuc2Vzc2lvbl9pZCk7XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS5PSURhdGFTQVBJKydhcGkvY2xhc3MvdWlzdHlsZS9HZXRJbmZvP3Nlc3Npb25pZD0nK3N0YXRlLmxvZ2luUHJvdmlkZXIubG9naW5pZC5yZXN1bHQuc2Vzc2lvbl9pZCxcclxuXHRcdFx0XHRcdGRhdGE6IHVuaXZlcmlmeUluZm8sXHJcblx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdGRhdGFUeXBlOlwianNvblwiLFxyXG5cdFx0XHRcdFx0c3VjY2VzczogKF9yZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coX3Jlcyk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldCA9IF9yZXMuZGF0YVxyXG5cdFx0XHRcdFx0XHRpZiAocmV0LmVycl9jb2RlID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBjb21taXQoXCJhcmVhRnVuY1wiLHJldCk7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShyZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdCh7XCJlcnJNc2dcIjpyZXQuZXJyX21zZ30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZmFpbDogKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhlcnIpO1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdC8vIGFwaS9kYXRhb2JqL1J1bkN1c3RvbUV2ZW50P3Nlc3Npb25pZD1TRVNTSU9OX0lEXHJcblx0XHQvLyBNb2JveDPmiafooYzoh6rlrprkuYnohJrmnKxcclxuXHRcdHJ1bkN1c3RvbUV2ZW50OiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdGF0ZS5sb2dpblByb3ZpZGVyLmxvZ2luaWQucmVzdWx0LnNlc3Npb25faWQpO1xyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogc3RhdGUuT0lEYXRhU0FQSSsnYXBpL2RhdGFvYmovUnVuQ3VzdG9tRXZlbnQ/c2Vzc2lvbmlkPScrc3RhdGUubG9naW5Qcm92aWRlci5sb2dpbmlkLnJlc3VsdC5zZXNzaW9uX2lkLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAoX3JlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhfcmVzKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gX3Jlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIGNvbW1pdChcImFyZWFGdW5jXCIscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5lcnJfbXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0Ly8gYXBpL2RhdGFvYmovRGVsZXRlP3Nlc3Npb25pZD1TRVNTSU9OX0lEXHJcblx0XHQvLyBNb2JveDPliKDpmaTmlbDmja7lr7nosaFcclxuXHRcdGRhdGFPYmpEZWw6IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKHN0YXRlLmxvZ2luUHJvdmlkZXIubG9naW5pZC5yZXN1bHQuc2Vzc2lvbl9pZCk7XHJcblx0XHRcdFx0dW5pLnJlcXVlc3Qoe1xyXG5cdFx0XHRcdFx0dXJsOiBzdGF0ZS5PSURhdGFTQVBJKydhcGkvZGF0YW9iai9EZWxldGU/c2Vzc2lvbmlkPScrc3RhdGUubG9naW5Qcm92aWRlci5sb2dpbmlkLnJlc3VsdC5zZXNzaW9uX2lkLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAoX3JlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhfcmVzKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gX3Jlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIGNvbW1pdChcImFyZWFGdW5jXCIscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5lcnJfbXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0Ly8gYXBpL2RhdGFvYmovcXVlcnkvUXVlcnk/c2Vzc2lvbmlkPVNFU1NJT05fSURcclxuXHRcdC8vIE1vYm94M+afpeivouaVsOaNruWvueixoVxyXG5cdFx0ZGF0YU9ialF1ZXJ5OiBmdW5jdGlvbih7XHJcblx0XHRcdGNvbW1pdCxcclxuXHRcdFx0c3RhdGVcclxuXHRcdH0sIHVuaXZlcmlmeUluZm8pIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhzdGF0ZS5sb2dpblByb3ZpZGVyLmxvZ2luaWQucmVzdWx0LnNlc3Npb25faWQpO1xyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogc3RhdGUuT0lEYXRhU0FQSSsnYXBpL2RhdGFvYmovcXVlcnkvUXVlcnk/c2Vzc2lvbmlkPScrc3RhdGUubG9naW5Qcm92aWRlci5sb2dpbmlkLnJlc3VsdC5zZXNzaW9uX2lkLFxyXG5cdFx0XHRcdFx0ZGF0YTogdW5pdmVyaWZ5SW5mbyxcclxuXHRcdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6XCJqc29uXCIsXHJcblx0XHRcdFx0XHRzdWNjZXNzOiAoX3JlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhfcmVzKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcmV0ID0gX3Jlcy5kYXRhXHJcblx0XHRcdFx0XHRcdGlmIChyZXQuZXJyX2NvZGUgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIGNvbW1pdChcImFyZWFGdW5jXCIscmV0KTtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJldCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcImVyck1zZ1wiOnJldC5lcnJfbXNnfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGVycik7XHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0Ly8gYXBpL2FwcC9HZXRJbmZvP3Nlc3Npb25pZD1TRVNTSU9OX0lEXHJcblx0XHQvLyBNb2JveDPojrflj5blip/og73ngrnkv6Hmga9cclxuXHRcdGFwcEdldEluZm86IGZ1bmN0aW9uKHtcclxuXHRcdFx0Y29tbWl0LFxyXG5cdFx0XHRzdGF0ZVxyXG5cdFx0fSwgdW5pdmVyaWZ5SW5mbykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdCAvLyBjb25zb2xlLmxvZyhzdGF0ZS5sb2dpblByb3ZpZGVyLmxvZ2luaWQucmVzdWx0LnNlc3Npb25faWQpO1xyXG5cdFx0XHRcdHVuaS5yZXF1ZXN0KHtcclxuXHRcdFx0XHRcdHVybDogc3RhdGUuT0lNb2JveFNBUEkrJ2FwaS9hcHAvR2V0SW5mbz9zZXNzaW9uaWQ9JytzdGF0ZS5sb2dpblByb3ZpZGVyLmxvZ2luaWQucmVzdWx0LnNlc3Npb25faWQsXHJcblx0XHRcdFx0XHRkYXRhOiB1bml2ZXJpZnlJbmZvLFxyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRkYXRhVHlwZTpcImpzb25cIixcclxuXHRcdFx0XHRcdHN1Y2Nlc3M6IChfcmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKF9yZXMpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCByZXQgPSBfcmVzLmRhdGFcclxuXHRcdFx0XHRcdFx0aWYgKHJldC5lcnJfY29kZSA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gY29tbWl0KFwiYXJlYUZ1bmNcIixyZXQpO1xyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmV0KTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1wiZXJyTXNnXCI6cmV0LmVycl9tc2d9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGZhaWw6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coZXJyKTtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KGVycik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSlcclxuXHRcdH0sXHJcblx0XHRcclxuXHR9XHJcbn0pXHJcblxyXG5leHBvcnQgZGVmYXVsdCBzdG9yZVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///200\n");
/***/ }),
/* 201 */