difenduandada
2024-12-31 34abe6963b344c882358274957f4b992456fee40
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
 
                (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