(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/Scripts/sdks/sdk.js'; var __require = nodeEnv ? function (request) { return cc.require(request); } : function (request) { return __quick_compile_project__.require(request, __filename); }; function __define (exports, require, module) { if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict"; cc._RF.push(module, '113d5GFUD1LTKcVrX4uzUW9', 'sdk'); // Scripts/sdks/sdk.js "use strict"; // 原声anddroid原声SDK var LoginPlatform = require("login_platform"); var LoginController = require("login_controller"); var RoleController = require("role_controller"); var SDK = function SDK() { this._down_apk_url_ret = null; }; var proto = SDK.prototype; // 界面加载完成之后初始化SDK SDK.initSDK = function () { cc.log("初始化SDK"); if (PLATFORM_TYPR == "ANDROID_SDK") { // Android原生SDK if (window.control) { window.control.initSDK(); } } }; // 初始化成功回调 SDK.sdkInitBack = function (result) { cc.log("SDK初始化结果"); cc.log(result); if (result == 1) { // 初始化成功 this.sdkLogin(); } else if (result === 2) { cc.log("SDK初始化失败"); } }; // 调起SDK登录界面 SDK.sdkLogin = function () { cc.log("初始化登陆"); if (PLATFORM_TYPR == "ANDROID_SDK") { // Android原生SDK if (window.control) { window.control.sdkLogin(); } } }; // SDK登录成功回调 SDK.sdkBackLogin = function (loginData) { if (loginData) { // 登录成功回调 cc.log("登录成功回调"); cc.log(loginData); var jons_data = JSON.parse(loginData); cc.log(jons_data); LoginPlatform.getInstance().onLoginInfo(jons_data); } }; // SDK登录成功回调 SDK.sdkBackLoginTest = function () { var loginData = {}; loginData.extension = null; loginData.sdkUserID = "2174939"; loginData.sdkUsername = "UQ555438"; loginData.suc = true; loginData.timestamp = "1561184589"; loginData.token = "24a56a77b9988712869728f22a896b92"; loginData.userID = 525886; loginData.uid = 525886; if (loginData) { // 登录成功回调 cc.log("登录成功回调"); cc.log(loginData); LoginPlatform.getInstance().onLoginInfo(loginData); } }; // 请求SDK进行支付 SDK.pay = function (money, buyNum, prodId, productName, productDesc, extension, coinNum) { var loginData = LoginController.getInstance().getModel().getLoginData(); var roleVo = RoleController.getInstance().getRoleVo(); if (!roleVo || !loginData) return; var srvData = LoginController.getInstance().getModel().findServer(roleVo.srv_id); if (!srvData || srvData.srv_id != roleVo.srv_id) srvData = loginData; var config = Config.charge_data.data_charge_data[prodId]; if (config && config.val != money) return; var productId = prodId; productName = productName || money * 10 + "钻石"; productDesc = productDesc || productName; var price = money; buyNum = buyNum || 1; var channel = LoginPlatform.getInstance().getChannel() || ""; var gold = roleVo.gold; var severInfo = roleVo.srv_id.split("_"); var platform = severInfo[0] || ""; var serverId = severInfo[1]; var serverName = srvData.srv_name; var roleId = roleVo.rid; var roleName = roleVo.name; var roleLev = roleVo.lev; var coinNum = roleVo.coin; var vip = "vip" + roleVo.vip_lev; var finalChannelId = LoginPlatform.getInstance().getFinalChannel(); var ext = roleVo.rid + "$$" + platform + "$$" + serverId + "$$" + finalChannelId + "$$" + prodId + "$$" + productName; var host = srvData.host; // var testData = {}; // testData.money = 6; // testData.buyNum = 4; // testData.prodId = "id222" var payData = { productId: productId, productName: productName, productDesc: productDesc, price: price, buyNum: buyNum, coinNum: coinNum, serverID: serverId, serverName: serverName, roleID: roleId, roleName: roleName, roleLevel: roleLev, vip: vip, extension: ext, host: host }; cc.log("支付参数"); cc.log(payData); if (PLATFORM_TYPR == "ANDROID_SDK") { // Android原生SDK if (window.control) { window.control.sdkPay(JSON.stringify(payData)); } } }; // 请求SDK退出界面 SDK.exitAPP = function () {}; // 请求SDK上报用户数据 SDK.sdkSubmitUserData = function (dataType, rdata) { var loginData = LoginController.getInstance().getModel().getLoginData(); if (loginData.srv_id == "") return; if (dataType == 1) { if (cli_log && cli_log.log_select_server) { cli_log.log_select_server(login_data.usrName); } ; if (!this.log_select_flag) return; this.log_select_flag = true; } else if (dataType == 2) { if (cli_log && cli_log.log_create_role) { cli_log.log_create_role(login_data.usrName); } ; } var account = LoginPlatForm.getInstance().getInfo().openid; var roleVo = RoleController.getInstance().getRoleVo() || rdata; var srv_id; if (roleVo && roleVo.srv_id) { srv_id = roleVo.srv_id; } else if (loginData.srv_id) { srv_id = loginData.srv_id; } var index = srv_id.indexOf("_"); if (index != -1) { srv_id = Number(srv_id.slice(index + 1, srv_id.length)); } else { srv_id = 0; } var serverId = srv_id; //serverId(roleVo && roleVo.srv_id || loginData.srv_id) var serverName = loginData.srv_name; var roleId = roleVo && roleVo.rid || 0; var roleName = roleVo && roleVo.name || ""; var roleCTime = roleVo && roleVo.reg_time || 0; var roleLev = roleVo && roleVo.lev || 1; var vipLev = roleVo && roleVo.vip_lev || 0; var gold = roleVo && roleVo.gold || 0; var power = roleVo && roleVo.power || 0; var data_info = { dataType: dataType, gold: gold, roleId: roleID, roleName: roleName, roleLev: roleLev, serverId: serverId, vipLev: vipLev, roleCTime: roleCTime }; cc.log("数据提交参数"); cc.log(data_info); if (PLATFORM_TYPR == "ANDROID_SDK") { // Android原生SDK if (window.control) { window.control.submitExtraData(JSON.stringify(data_info)); } } // let info = table.concat({dataType, serverId, serverName, roleId, roleName, roleCTime, roleLev, gold, vipLev, power, account}, "#") // sdkCallFunc("submitExtraData", info) }; // SDK提示信息 SDK.sdkBackInfo = function () {}; // SDK弹窗 SDK.sdkAlert = function () {}; SDK.testJSON = function (data) { if (data) { cc.log(data); cc.log("JJJJJJJJJJJJJJJJJJJJ"); var jons_data = JSON.parse(data); cc.log(jons_data); } }; // 判断SDK能否切换账号 SDK.sdkCanSwitchAccount = function () {}; // SDK切换账号请求 SDK.sdkOnSwitchAccount = function () {}; // 判断能否显示用户中心 SDK.sdkCanShowAccountCenter = function () {}; // 显示用户中心请求 SDK.sdkShowAccountCenter = function () {}; // 显示用户中心请求 SDK.sdkSubmitUserData = function (dataType, rdata) {}; SDK.getCurrChannel = function () { var cur_channel = null; if (PLATFORM_TYPR == "ANDROID_SDK") { if (window.control) { cur_channel = window.control.getCurrChannel(); } } cc.log("获取渠道id" + cur_channel); return cur_channel; }; SDK.getSubChannel = function () { var sub_channel = null; if (PLATFORM_TYPR == "ANDROID_SDK") { if (window.control) { sub_channel = window.control.getSubChannel(); } } cc.log("获取子渠道id" + sub_channel); return sub_channel; }; SDK.loginGame = function () { LoginController.getInstance().sdkLogin(); }; /**********二维码处理相关***********/ SDK.download_qrcode_png = function () {// var apk_data = RoleController.getInstance().getApkData(); // if(apk_data){ // SDK.download_qrcode_png(apk_data.message.qrcode_url,function(img){ // var spriteFrame = new cc.SpriteFrame(); // cc.log(spriteFrame) // spriteFrame.setTexture(img); // this.erweima_img_sp.spriteFrame = spriteFrame; // }.bind(this)) // } }; module.exports = SDK; cc._RF.pop(); } if (nodeEnv) { __define(__module.exports, __require, __module); } else { __quick_compile_project__.registerModuleFunc(__filename, function () { __define(__module.exports, __require, __module); }); } })(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcc2Rrc1xcc2RrLmpzIl0sIm5hbWVzIjpbIkxvZ2luUGxhdGZvcm0iLCJyZXF1aXJlIiwiTG9naW5Db250cm9sbGVyIiwiUm9sZUNvbnRyb2xsZXIiLCJTREsiLCJfZG93bl9hcGtfdXJsX3JldCIsInByb3RvIiwicHJvdG90eXBlIiwiaW5pdFNESyIsImNjIiwibG9nIiwiUExBVEZPUk1fVFlQUiIsIndpbmRvdyIsImNvbnRyb2wiLCJzZGtJbml0QmFjayIsInJlc3VsdCIsInNka0xvZ2luIiwic2RrQmFja0xvZ2luIiwibG9naW5EYXRhIiwiam9uc19kYXRhIiwiSlNPTiIsInBhcnNlIiwiZ2V0SW5zdGFuY2UiLCJvbkxvZ2luSW5mbyIsInNka0JhY2tMb2dpblRlc3QiLCJleHRlbnNpb24iLCJzZGtVc2VySUQiLCJzZGtVc2VybmFtZSIsInN1YyIsInRpbWVzdGFtcCIsInRva2VuIiwidXNlcklEIiwidWlkIiwicGF5IiwibW9uZXkiLCJidXlOdW0iLCJwcm9kSWQiLCJwcm9kdWN0TmFtZSIsInByb2R1Y3REZXNjIiwiY29pbk51bSIsImdldE1vZGVsIiwiZ2V0TG9naW5EYXRhIiwicm9sZVZvIiwiZ2V0Um9sZVZvIiwic3J2RGF0YSIsImZpbmRTZXJ2ZXIiLCJzcnZfaWQiLCJjb25maWciLCJDb25maWciLCJjaGFyZ2VfZGF0YSIsImRhdGFfY2hhcmdlX2RhdGEiLCJ2YWwiLCJwcm9kdWN0SWQiLCJwcmljZSIsImNoYW5uZWwiLCJnZXRDaGFubmVsIiwiZ29sZCIsInNldmVySW5mbyIsInNwbGl0IiwicGxhdGZvcm0iLCJzZXJ2ZXJJZCIsInNlcnZlck5hbWUiLCJzcnZfbmFtZSIsInJvbGVJZCIsInJpZCIsInJvbGVOYW1lIiwibmFtZSIsInJvbGVMZXYiLCJsZXYiLCJjb2luIiwidmlwIiwidmlwX2xldiIsImZpbmFsQ2hhbm5lbElkIiwiZ2V0RmluYWxDaGFubmVsIiwiZXh0IiwiaG9zdCIsInBheURhdGEiLCJzZXJ2ZXJJRCIsInJvbGVJRCIsInJvbGVMZXZlbCIsInNka1BheSIsInN0cmluZ2lmeSIsImV4aXRBUFAiLCJzZGtTdWJtaXRVc2VyRGF0YSIsImRhdGFUeXBlIiwicmRhdGEiLCJjbGlfbG9nIiwibG9nX3NlbGVjdF9zZXJ2ZXIiLCJsb2dpbl9kYXRhIiwidXNyTmFtZSIsImxvZ19zZWxlY3RfZmxhZyIsImxvZ19jcmVhdGVfcm9sZSIsImFjY291bnQiLCJMb2dpblBsYXRGb3JtIiwiZ2V0SW5mbyIsIm9wZW5pZCIsImluZGV4IiwiaW5kZXhPZiIsIk51bWJlciIsInNsaWNlIiwibGVuZ3RoIiwicm9sZUNUaW1lIiwicmVnX3RpbWUiLCJ2aXBMZXYiLCJwb3dlciIsImRhdGFfaW5mbyIsInN1Ym1pdEV4dHJhRGF0YSIsInNka0JhY2tJbmZvIiwic2RrQWxlcnQiLCJ0ZXN0SlNPTiIsImRhdGEiLCJzZGtDYW5Td2l0Y2hBY2NvdW50Iiwic2RrT25Td2l0Y2hBY2NvdW50Iiwic2RrQ2FuU2hvd0FjY291bnRDZW50ZXIiLCJzZGtTaG93QWNjb3VudENlbnRlciIsImdldEN1cnJDaGFubmVsIiwiY3VyX2NoYW5uZWwiLCJnZXRTdWJDaGFubmVsIiwic3ViX2NoYW5uZWwiLCJsb2dpbkdhbWUiLCJkb3dubG9hZF9xcmNvZGVfcG5nIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUVBLElBQUlBLGFBQWEsR0FBR0MsT0FBTyxDQUFDLGdCQUFELENBQTNCOztBQUNBLElBQUlDLGVBQWUsR0FBR0QsT0FBTyxDQUFDLGtCQUFELENBQTdCOztBQUNBLElBQUlFLGNBQWMsR0FBR0YsT0FBTyxDQUFDLGlCQUFELENBQTVCOztBQUVBLElBQUlHLEdBQUcsR0FBRyxTQUFOQSxHQUFNLEdBQVc7QUFDakIsT0FBS0MsaUJBQUwsR0FBeUIsSUFBekI7QUFDSCxDQUZEOztBQUlBLElBQUlDLEtBQUssR0FBR0YsR0FBRyxDQUFDRyxTQUFoQixFQUdBOztBQUNBSCxHQUFHLENB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OztBQUNBLE1BQUkzRyxhQUFhLElBQUksYUFBckIsRUFBb0M7QUFDaEMsUUFBSUMsTUFBTSxDQUFDQyxPQUFYLEVBQW9CO0FBQ2hCeUcsTUFBQUEsV0FBVyxHQUFHMUcsTUFBTSxDQUFDQyxPQUFQLENBQWV3RyxhQUFmLEVBQWQ7QUFDSDtBQUNEOztBQUNENUcsRUFBQUEsRUFBRSxDQUFDQyxHQUFILENBQU8sWUFBWTRHLFdBQW5CO0FBQ0EsU0FBT0EsV0FBUDtBQUNILENBVEQ7O0FBV0FsSCxHQUFHLENBQUNtSCxTQUFKLEdBQWdCLFlBQVc7QUFDdkJySCxFQUFBQSxlQUFlLENBQUNvQixXQUFoQixHQUE4Qk4sUUFBOUI7QUFDSCxDQUZEO0FBS0E7OztBQUVBWixHQUFHLENBQUNvSCxtQkFBSixHQUEwQixZQUFXLENBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNILENBVkQ7O0FBWUFDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQnRILEdBQWpCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyDljp/lo7BhbmRkcm9pZOWOn+WjsFNES1xyXG5cclxudmFyIExvZ2luUGxhdGZvcm0gPSByZXF1aXJlKFwibG9naW5fcGxhdGZvcm1cIilcclxudmFyIExvZ2luQ29udHJvbGxlciA9IHJlcXVpcmUoXCJsb2dpbl9jb250cm9sbGVyXCIpO1xyXG52YXIgUm9sZUNvbnRyb2xsZXIgPSByZXF1aXJlKFwicm9sZV9jb250cm9sbGVyXCIpO1xyXG5cclxudmFyIFNESyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5fZG93bl9hcGtfdXJsX3JldCA9IG51bGw7XHJcbn07XHJcblxyXG52YXIgcHJvdG8gPSBTREsucHJvdG90eXBlO1xyXG5cclxuXHJcbi8vIOeVjOmdouWKoOi9veWujOaIkOS5i+WQjuWIneWni+WMllNES1xyXG5TREsuaW5pdFNESyA9IGZ1bmN0aW9uKCkge1xyXG5cdGNjLmxvZyhcIuWIneWni+WMllNES1wiKTtcclxuXHRpZiAoUExBVEZPUk1fVFlQUiA9PSBcIkFORFJPSURfU0RLXCIpIHsgIC8vIEFuZHJvaWTljp/nlJ9TREtcclxuICAgICAgICBpZiAod2luZG93LmNvbnRyb2wpIHtcclxuICAgICAgICAgICAgd2luZG93LmNvbnRyb2wuaW5pdFNESygpXHJcbiAgICAgICAgfVxyXG5cdH1cclxufVxyXG5cclxuLy8g5Yid5aeL5YyW5oiQ5Yqf5Zue6LCDXHJcblNESy5zZGtJbml0QmFjayA9IGZ1bmN0aW9uKHJlc3VsdCkge1xyXG5cdGNjLmxvZyhcIlNES+WIneWni+WMlue7k+aenFwiKTtcclxuXHRjYy5sb2cocmVzdWx0KTtcclxuXHRpZiAocmVzdWx0ID09IDEpIHsgICAgICAgICAgICAgIC8vIOWIneWni+WMluaIkOWKn1xyXG5cdFx0dGhpcy5zZGtMb2dpbigpO1xyXG5cdH0gZWxzZSBpZiAocmVzdWx0ID09PSAyKSB7XHJcblx0XHRjYy5sb2coXCJTREvliJ3lp4vljJblpLHotKVcIik7XHJcblx0fVxyXG59XHJcblxyXG4vLyDosIPotbdTREvnmbvlvZXnlYzpnaJcclxuU0RLLnNka0xvZ2luID0gZnVuY3Rpb24oKSB7XHJcblx0Y2MubG9nKFwi5Yid5aeL5YyW55m76ZmGXCIpO1xyXG5cdGlmIChQTEFURk9STV9UWVBSID09IFwiQU5EUk9JRF9TREtcIikgeyAgLy8gQW5kcm9pZOWOn+eUn1NES1xyXG5cdCAgICBpZiAod2luZG93LmNvbnRyb2wpIHtcclxuXHQgICAgICAgIHdpbmRvdy5jb250cm9sLnNka0xvZ2luKClcclxuXHQgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4vLyBTREvnmbvlvZXmiJDlip/lm57osINcclxuU0RLLnNka0JhY2tMb2dpbiA9IGZ1bmN0aW9uKGxvZ2luRGF0YSkge1xyXG5cdGlmIChsb2dpbkRhdGEpIHtcclxuXHRcdC8vIOeZu+W9leaIkOWKn+Wbnuiwg1xyXG5cdFx0Y2MubG9nKFwi55m75b2V5oiQ5Yqf5Zue6LCDXCIpO1xyXG5cdFx0Y2MubG9nKGxvZ2luRGF0YSk7XHJcblx0XHR2YXIgam9uc19kYXRhID0gSlNPTi5wYXJzZShsb2dpbkRhdGEpO1xyXG5cdFx0Y2MubG9nKGpvbnNfZGF0YSlcclxuXHRcdExvZ2luUGxhdGZvcm0uZ2V0SW5zdGFuY2UoKS5vbkxvZ2luSW5mbyhqb25zX2RhdGEpO1xyXG5cdH1cclxufVxyXG5cclxuLy8gU0RL55m75b2V5oiQ5Yqf5Zue6LCDXHJcblNESy5zZGtCYWNrTG9naW5UZXN0ID0gZnVuY3Rpb24oKSB7XHJcblx0dmFyIGxvZ2luRGF0YSA9IHt9O1xyXG5cdGxvZ2luRGF0YS5leHRlbnNpb24gPSBudWxsO1xyXG5cdGxvZ2luRGF0YS5zZGtVc2VySUQgPSBcIjIxNzQ5MzlcIjtcclxuXHRsb2dpbkRhdGEuc2RrVXNlcm5hbWUgPSBcIlVRNTU1NDM4XCI7XHJcblx0bG9naW5EYXRhLnN1YyA9IHRydWU7XHJcblx0bG9naW5EYXRhLnRpbWVzdGFtcCA9IFwiMTU2MTE4NDU4OVwiO1xyXG5cdGxvZ2luRGF0YS50b2tlbiA9IFwiMjRhNTZhNzdiOTk4ODcxMjg2OTcyOGYyMmE4OTZiOTJcIjtcclxuXHRsb2dpbkRhdGEudXNlcklEID0gNTI1ODg2O1xyXG5cdGxvZ2luRGF0YS51aWQgPSA1MjU4ODY7XHJcblxyXG5cdGlmIChsb2dpbkRhdGEpIHtcclxuXHRcdC8vIOeZu+W9leaIkOWKn+Wbnuiwg1xyXG5cdFx0Y2MubG9nKFwi55m75b2V5oiQ5Yqf5Zue6LCDXCIpO1xyXG5cdFx0Y2MubG9nKGxvZ2luRGF0YSk7XHJcblx0XHRMb2dpblBsYXRmb3JtLmdldEluc3RhbmNlKCkub25Mb2dpbkluZm8obG9naW5EYXRhKTtcclxuXHR9XHJcbn1cclxuXHJcbi8vIOivt+axglNES+i/m+ihjOaUr+S7mFxyXG5TREsucGF5ID0gZnVuY3Rpb24obW9uZXksIGJ1eU51bSwgcHJvZElkLCBwcm9kdWN0TmFtZSwgcHJvZHVjdERlc2MsIGV4dGVuc2lvbiwgY29pbk51bSkge1xyXG4gICAgdmFyIGxvZ2luRGF0YSA9IExvZ2luQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldE1vZGVsKCkuZ2V0TG9naW5EYXRhKCk7XHJcbiAgICB2YXIgcm9sZVZvID0gUm9sZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRSb2xlVm8oKTtcclxuICAgIGlmICghcm9sZVZvIHx8ICFsb2dpbkRhdGEpIHJldHVybjtcclxuICAgIHZhciBzcnZEYXRhID0gTG9naW5Db250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0TW9kZWwoKS5maW5kU2VydmVyKHJvbGVWby5zcnZfaWQpO1xyXG4gICAgaWYgKCFzcnZEYXRhIHx8IHNydkRhdGEuc3J2X2lkICE9IHJvbGVWby5zcnZfaWQpXHJcbiAgICBcdHNydkRhdGEgPSBsb2dpbkRhdGE7XHJcbiAgICB2YXIgY29uZmlnID0gQ29uZmlnLmNoYXJnZV9kYXRhLmRhdGFfY2hhcmdlX2RhdGFbcHJvZElkXTtcclxuICAgIGlmIChjb25maWcgJiYgY29uZmlnLnZhbCAhPSBtb25leSkgcmV0dXJuO1xyXG5cclxuXHJcbiAgICB2YXIgcHJvZHVjdElkID0gcHJvZElkO1xyXG4gICAgcHJvZHVjdE5hbWUgPSBwcm9kdWN0TmFtZSB8fCAobW9uZXkgKiAxMCkgKyBcIumSu+efs1wiO1xyXG4gICAgcHJvZHVjdERlc2MgPSBwcm9kdWN0RGVzYyB8fCBwcm9kdWN0TmFtZTtcclxuXHR2YXIgcHJpY2UgPSBtb25leTtcclxuICAgIGJ1eU51bSA9IGJ1eU51bSB8fCAxO1xyXG5cclxuICAgIHZhciBjaGFubmVsID0gTG9naW5QbGF0Zm9ybS5nZXRJbnN0YW5jZSgpLmdldENoYW5uZWwoKSB8fCBcIlwiO1xyXG4gICAgdmFyIGdvbGQgPSByb2xlVm8uZ29sZDtcclxuICAgIHZhciBzZXZlckluZm8gPSByb2xlVm8uc3J2X2lkLnNwbGl0KFwiX1wiKTtcclxuICAgIHZhciBwbGF0Zm9ybSA9IHNldmVySW5mb1swXSB8fCBcIlwiO1xyXG4gICAgdmFyIHNlcnZlcklkID0gc2V2ZXJJbmZvWzFdO1xyXG4gICAgdmFyIHNlcnZlck5hbWUgPSBzcnZEYXRhLnNydl9uYW1lO1xyXG4gICAgdmFyIHJvbGVJZCA9IHJvbGVWby5yaWQ7XHJcbiAgICB2YXIgcm9sZU5hbWUgPSByb2xlVm8ubmFtZTtcclxuICAgIHZhciByb2xlTGV2ID0gcm9sZVZvLmxldjtcclxuICAgIHZhciBjb2luTnVtID0gcm9sZVZvLmNvaW47XHJcbiAgICB2YXIgdmlwID0gXCJ2aXBcIiArIHJvbGVWby52aXBfbGV2O1xyXG4gICAgdmFyIGZpbmFsQ2hhbm5lbElkID0gTG9naW5QbGF0Zm9ybS5nZXRJbnN0YW5jZSgpLmdldEZpbmFsQ2hhbm5lbCgpO1xyXG4gICAgdmFyIGV4dCA9IHJvbGVWby5yaWQgKyBcIiQkXCIgKyBwbGF0Zm9ybSArIFwiJCRcIiArIHNlcnZlcklkICsgXCIkJFwiICsgZmluYWxDaGFubmVsSWQgKyBcIiQkXCIgKyBwcm9kSWQgKyBcIiQkXCIgKyBwcm9kdWN0TmFtZTtcclxuICAgIHZhciBob3N0ID0gc3J2RGF0YS5ob3N0XHJcblx0Ly8gdmFyIHRlc3REYXRhID0ge307XHJcblx0Ly8gdGVzdERhdGEubW9uZXkgPSA2O1xyXG5cdC8vIHRlc3REYXRhLmJ1eU51bSA9IDQ7XHJcblx0Ly8gdGVzdERhdGEucHJvZElkID0gXCJpZDIyMlwiXHJcbiAgICB2YXIgcGF5RGF0YSA9IHtwcm9kdWN0SWQ6IHByb2R1Y3RJZCwgcHJvZHVjdE5hbWU6IHByb2R1Y3ROYW1lLCBwcm9kdWN0RGVzYzogcHJvZHVjdERlc2MsIHByaWNlOiBwcmljZSwgYnV5TnVtOiBidXlOdW0sIGNvaW5OdW06IGNvaW5OdW0sIHNlcnZlcklEOiBzZXJ2ZXJJZCwgc2VydmVyTmFtZTogc2VydmVyTmFtZSwgcm9sZUlEOiByb2xlSWQsIHJvbGVOYW1lOiByb2xlTmFtZSwgcm9sZUxldmVsOiByb2xlTGV2LCB2aXA6IHZpcCwgZXh0ZW5zaW9uOiBleHQsIGhvc3Q6IGhvc3R9XHJcbiAgICBjYy5sb2coXCLmlK/ku5jlj4LmlbBcIik7XHJcbiAgICBjYy5sb2cocGF5RGF0YSk7XHJcblxyXG5cdGlmIChQTEFURk9STV9UWVBSID09IFwiQU5EUk9JRF9TREtcIikgeyAgLy8gQW5kcm9pZOWOn+eUn1NES1xyXG5cdCAgICBpZiAod2luZG93LmNvbnRyb2wpIHtcclxuXHQgICAgICAgIHdpbmRvdy5jb250cm9sLnNka1BheShKU09OLnN0cmluZ2lmeShwYXlEYXRhKSlcclxuXHQgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4vLyDor7fmsYJTREvpgIDlh7rnlYzpnaJcclxuU0RLLmV4aXRBUFAgPSBmdW5jdGlvbigpIHtcclxuXHJcbn1cclxuXHJcbi8vIOivt+axglNES+S4iuaKpeeUqOaIt+aVsOaNrlxyXG5TREsuc2RrU3VibWl0VXNlckRhdGEgPSBmdW5jdGlvbihkYXRhVHlwZSwgcmRhdGEpIHtcclxuXHRsZXQgbG9naW5EYXRhID0gTG9naW5Db250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0TW9kZWwoKS5nZXRMb2dpbkRhdGEoKSA7XHJcbiAgICBpZihsb2dpbkRhdGEuc3J2X2lkID09IFwiXCIpICByZXR1cm47XHJcbiAgICBpZiAoZGF0YVR5cGUgPT0gMSkge1xyXG4gICAgICAgIGlmIChjbGlfbG9nICYmIGNsaV9sb2cubG9nX3NlbGVjdF9zZXJ2ZXIpIHtcclxuICAgICAgICAgICAgY2xpX2xvZy5sb2dfc2VsZWN0X3NlcnZlcihsb2dpbl9kYXRhLnVzck5hbWUpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKCF0aGlzLmxvZ19zZWxlY3RfZmxhZykgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5sb2dfc2VsZWN0X2ZsYWcgPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmIChkYXRhVHlwZSA9PSAyKSB7XHJcbiAgICAgICAgaWYgKGNsaV9sb2cgJiYgY2xpX2xvZy5sb2dfY3JlYXRlX3JvbGUpIHtcclxuICAgICAgICAgICAgY2xpX2xvZy5sb2dfY3JlYXRlX3JvbGUobG9naW5fZGF0YS51c3JOYW1lKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgbGV0IGFjY291bnQgPSBMb2dpblBsYXRGb3JtLmdldEluc3RhbmNlKCkuZ2V0SW5mbygpLm9wZW5pZDtcclxuXHRsZXQgcm9sZVZvID0gUm9sZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRSb2xlVm8oKSB8fCByZGF0YTtcclxuXHRsZXQgc3J2X2lkIDtcclxuXHRpZihyb2xlVm8gJiYgcm9sZVZvLnNydl9pZCl7XHJcblx0XHRzcnZfaWQgPSByb2xlVm8uc3J2X2lkO1xyXG5cdH1lbHNlIGlmKGxvZ2luRGF0YS5zcnZfaWQpe1xyXG5cdFx0c3J2X2lkID0gbG9naW5EYXRhLnNydl9pZDtcclxuXHR9XHJcblx0bGV0IGluZGV4ID0gc3J2X2lkLmluZGV4T2YoXCJfXCIpO1xyXG5cdGlmKGluZGV4ICE9IC0xKXtcclxuXHRcdHNydl9pZCA9IE51bWJlcihzcnZfaWQuc2xpY2UoaW5kZXgrMSxzcnZfaWQubGVuZ3RoKSkgO1xyXG5cdH1lbHNle1xyXG5cdFx0c3J2X2lkID0gMDtcclxuXHR9XHJcbiAgICBsZXQgc2VydmVySWQgPSBzcnZfaWQ7ICAvL3NlcnZlcklkKHJvbGVWbyAmJiByb2xlVm8uc3J2X2lkIHx8IGxvZ2luRGF0YS5zcnZfaWQpXHJcbiAgICBsZXQgc2VydmVyTmFtZSA9IGxvZ2luRGF0YS5zcnZfbmFtZTtcclxuICAgIGxldCByb2xlSWQgPSByb2xlVm8gJiYgcm9sZVZvLnJpZCB8fCAwO1xyXG4gICAgbGV0IHJvbGVOYW1lID0gcm9sZVZvICYmIHJvbGVWby5uYW1lIHx8IFwiXCI7XHJcbiAgICBsZXQgcm9sZUNUaW1lID0gcm9sZVZvICYmIHJvbGVWby5yZWdfdGltZSB8fCAwO1xyXG4gICAgbGV0IHJvbGVMZXYgPSByb2xlVm8gJiYgcm9sZVZvLmxldiB8fCAxO1xyXG4gICAgbGV0IHZpcExldiA9IHJvbGVWbyAmJiByb2xlVm8udmlwX2xldiB8fCAwO1xyXG4gICAgbGV0IGdvbGQgPSByb2xlVm8gJiYgcm9sZVZvLmdvbGQgfHwgMDtcclxuICAgIGxldCBwb3dlciA9IHJvbGVWbyAmJiByb2xlVm8ucG93ZXIgfHwgMDtcclxuICAgIHZhciBkYXRhX2luZm8gPSB7ZGF0YVR5cGU6ZGF0YVR5cGUsIGdvbGQ6IGdvbGQsIHJvbGVJZDogcm9sZUlELCByb2xlTmFtZTogcm9sZU5hbWUsIHJvbGVMZXY6IHJvbGVMZXYsIHNlcnZlcklkOiBzZXJ2ZXJJZCwgdmlwTGV2OiB2aXBMZXYsIHJvbGVDVGltZTogcm9sZUNUaW1lLH07XHJcblxyXG4gICAgY2MubG9nKFwi5pWw5o2u5o+Q5Lqk5Y+C5pWwXCIpO1xyXG4gICAgY2MubG9nKGRhdGFfaW5mbyk7XHJcblxyXG5cdGlmIChQTEFURk9STV9UWVBSID09IFwiQU5EUk9JRF9TREtcIikgeyAgLy8gQW5kcm9pZOWOn+eUn1NES1xyXG5cdCAgICBpZiAod2luZG93LmNvbnRyb2wpIHtcclxuXHQgICAgICAgIHdpbmRvdy5jb250cm9sLnN1Ym1pdEV4dHJhRGF0YShKU09OLnN0cmluZ2lmeShkYXRhX2luZm8pKTtcclxuXHQgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gbGV0IGluZm8gPSB0YWJsZS5jb25jYXQoe2RhdGFUeXBlLCBzZXJ2ZXJJZCwgc2VydmVyTmFtZSwgcm9sZUlkLCByb2xlTmFtZSwgcm9sZUNUaW1lLCByb2xlTGV2LCBnb2xkLCB2aXBMZXYsIHBvd2VyLCBhY2NvdW50fSwgXCIjXCIpXHJcbiAgICAvLyBzZGtDYWxsRnVuYyhcInN1Ym1pdEV4dHJhRGF0YVwiLCBpbmZvKVxyXG59XHJcblxyXG4vLyBTREvmj5DnpLrkv6Hmga9cclxuU0RLLnNka0JhY2tJbmZvID0gZnVuY3Rpb24oKSB7XHJcblxyXG59XHJcblxyXG4vLyBTREvlvLnnqpdcclxuU0RLLnNka0FsZXJ0ID0gZnVuY3Rpb24oKSB7XHJcblxyXG59XHJcblxyXG5TREsudGVzdEpTT04gPSBmdW5jdGlvbihkYXRhKSB7XHJcblx0aWYgKGRhdGEpIHtcclxuXHRcdGNjLmxvZyhkYXRhKTtcclxuXHRcdGNjLmxvZyhcIkpKSkpKSkpKSkpKSkpKSkpKSkpKXCIpO1xyXG5cdFx0dmFyIGpvbnNfZGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7XHJcblx0XHRjYy5sb2coam9uc19kYXRhKTtcclxuXHR9XHJcbn1cclxuXHJcblxyXG4vLyDliKTmlq1TREvog73lkKbliIfmjaLotKblj7dcclxuU0RLLnNka0NhblN3aXRjaEFjY291bnQgPSBmdW5jdGlvbigpIHtcclxuXHJcbn1cclxuXHJcbi8vIFNES+WIh+aNoui0puWPt+ivt+axglxyXG5TREsuc2RrT25Td2l0Y2hBY2NvdW50ID0gZnVuY3Rpb24oKSB7XHJcblxyXG59XHJcblxyXG4vLyDliKTmlq3og73lkKbmmL7npLrnlKjmiLfkuK3lv4NcclxuU0RLLnNka0NhblNob3dBY2NvdW50Q2VudGVyID0gZnVuY3Rpb24oKSB7XHJcblxyXG59XHJcblxyXG4vLyDmmL7npLrnlKjmiLfkuK3lv4Por7fmsYJcclxuU0RLLnNka1Nob3dBY2NvdW50Q2VudGVyID0gZnVuY3Rpb24oKSB7XHJcblxyXG59XHJcblxyXG4vLyDmmL7npLrnlKjmiLfkuK3lv4Por7fmsYJcclxuU0RLLnNka1N1Ym1pdFVzZXJEYXRhID0gZnVuY3Rpb24oZGF0YVR5cGUsIHJkYXRhKSB7XHJcblx0XHJcbn1cclxuXHJcblNESy5nZXRDdXJyQ2hhbm5lbCA9IGZ1bmN0aW9uKCkge1xyXG5cdHZhciBjdXJfY2hhbm5lbCA9IG51bGw7XHJcblx0aWYgKFBMQVRGT1JNX1RZUFIgPT0gXCJBTkRST0lEX1NES1wiKSB7XHJcblx0ICAgIGlmICh3aW5kb3cuY29udHJvbCkge1xyXG5cdCAgICAgICAgY3VyX2NoYW5uZWwgPSB3aW5kb3cuY29udHJvbC5nZXRDdXJyQ2hhbm5lbCgpXHJcblx0ICAgIH1cclxuICAgIH1cclxuICAgIGNjLmxvZyhcIuiOt+WPlua4oOmBk2lkXCIgKyBjdXJfY2hhbm5lbCk7XHJcbiAgICByZXR1cm4gY3VyX2NoYW5uZWw7XHJcbn1cclxuXHJcblNESy5nZXRTdWJDaGFubmVsID0gZnVuY3Rpb24oKSB7XHJcblx0dmFyIHN1Yl9jaGFubmVsID0gbnVsbDtcclxuXHRpZiAoUExBVEZPUk1fVFlQUiA9PSBcIkFORFJPSURfU0RLXCIpIHtcclxuXHQgICAgaWYgKHdpbmRvdy5jb250cm9sKSB7XHJcblx0ICAgICAgICBzdWJfY2hhbm5lbCA9IHdpbmRvdy5jb250cm9sLmdldFN1YkNoYW5uZWwoKTtcclxuXHQgICAgfVxyXG4gICAgfVxyXG4gICAgY2MubG9nKFwi6I635Y+W5a2Q5rig6YGTaWRcIiArIHN1Yl9jaGFubmVsKTtcclxuICAgIHJldHVybiBzdWJfY2hhbm5lbDtcclxufVxyXG5cclxuU0RLLmxvZ2luR2FtZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgTG9naW5Db250cm9sbGVyLmdldEluc3RhbmNlKCkuc2RrTG9naW4oKTtcclxufVxyXG5cclxuXHJcbi8qKioqKioqKioq5LqM57u056CB5aSE55CG55u45YWzKioqKioqKioqKiovXHJcblxyXG5TREsuZG93bmxvYWRfcXJjb2RlX3BuZyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgLy8gdmFyIGFwa19kYXRhID0gUm9sZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRBcGtEYXRhKCk7XHJcbiAgICAvLyBpZihhcGtfZGF0YSl7XHJcbiAgICAvLyAgICAgU0RLLmRvd25sb2FkX3FyY29kZV9wbmcoYXBrX2RhdGEubWVzc2FnZS5xcmNvZGVfdXJsLGZ1bmN0aW9uKGltZyl7XHJcbiAgICAvLyAgICAgICAgIHZhciBzcHJpdGVGcmFtZSA9IG5ldyBjYy5TcHJpdGVGcmFtZSgpO1xyXG4gICAgLy8gICAgICAgICBjYy5sb2coc3ByaXRlRnJhbWUpXHJcbiAgICAvLyAgICAgICAgIHNwcml0ZUZyYW1lLnNldFRleHR1cmUoaW1nKTtcclxuICAgIC8vICAgICAgICAgdGhpcy5lcndlaW1hX2ltZ19zcC5zcHJpdGVGcmFtZSA9IHNwcml0ZUZyYW1lO1xyXG4gICAgLy8gICAgIH0uYmluZCh0aGlzKSlcclxuICAgIC8vIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTREs7Il19