|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/sdks/sh_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, '027ebFO+T1Dk5fPGU9ZJlNI', 'sh_sdk');
|
// Scripts/sdks/sh_sdk.js
|
|
"use strict";
|
|
// window.PLATFORM = "sh_sdk"; // 平台号
|
// window.CHANNEL = ""; // 深海小游戏安卓和苹果的渠道
|
window.PACKAGE_NAME = "闪烁之光口袋版"; // 渠道号
|
// window.PACKAGE_VERSION = "0.0.18";
|
|
window.SH_SDK_PID = "0"; //深海小游戏区别安卓,苹果的pid ,
|
|
window.SH_SDK_AND_PID = "P0006089"; //诗悦-闪烁之光马包-安卓
|
|
window.SH_SDK_IOS_PID = "P0006090"; //诗悦-闪烁之光马包-ios
|
|
window.SH_SDK_FOLLOW = true; //深海小游戏关注功能显隐 true:关闭 false:开启
|
|
var ShSdk = require("shsdk");
|
|
var RoleController = require("role_controller");
|
|
var LoginController = require("login_controller");
|
|
var WelfareEvent = require("welfare_event");
|
|
var SHSDK = function SHSDK() {};
|
|
SHSDK.uid = null;
|
SHSDK.sign = null;
|
SHSDK.role_info = null; // 判断是否授权
|
|
SHSDK.initSDK = function () {
|
console.log("深海SDK相关");
|
console.log(window);
|
if (!window.wx) return;
|
this.initTopInfo();
|
var systemInfo = wx.getSystemInfoSync();
|
var systemName = systemInfo.system;
|
window.PLATFORM = "sy";
|
window.PLATFORM_NAME = "sy";
|
|
if (systemName.indexOf("iOS") > -1) {
|
SH_SDK_PID = SH_SDK_IOS_PID;
|
} else if (systemName.indexOf("Android") > -1) {
|
SH_SDK_PID = SH_SDK_AND_PID;
|
}
|
|
CHANNEL = SH_SDK_PID;
|
ShSdk.init({
|
package_code: SH_SDK_PID //这是测试的切包编号,正式的请跟我们运营要
|
// debug:true //米大师沙箱支付控制
|
|
});
|
this.dataPlacement(10000);
|
this.dataPlacement(20000);
|
ShSdk.share(function () {
|
//转发成功时调用这里代码
|
console.log("ShSdk.share success callback");
|
});
|
wx.setKeepScreenOn({
|
keepScreenOn: true
|
});
|
wx.onShow(function (res) {
|
if (res) {
|
gcore.GlobalEvent.fire(WelfareEvent.Update_SHWX_show_scene_val, res.scene);
|
}
|
|
wx.setKeepScreenOn({
|
keepScreenOn: true
|
});
|
});
|
wx.onHide(function (res) {
|
wx.setKeepScreenOn({
|
keepScreenOn: false
|
});
|
});
|
wx.getSetting({
|
success: function success(res) {
|
cc.log(res);
|
|
if (res.authSetting["scope.userInfo"]) {
|
SHSDK.login();
|
} else {
|
var info = wx.getSystemInfoSync();
|
var button = wx.createUserInfoButton({
|
type: 'text',
|
text: '',
|
style: {
|
left: 0,
|
bottom: 0,
|
width: info.screenWidth,
|
height: info.screenHeight / 2,
|
lineHeight: 40,
|
backgroundColor: '',
|
color: '#ffffff',
|
textAlign: 'center',
|
fontSize: 16,
|
borderRadius: 4
|
}
|
});
|
button.show();
|
button.onTap(function (res) {
|
button.hide();
|
ShSdk.unionId(res);
|
SHSDK.login();
|
console.log(res);
|
});
|
}
|
}
|
});
|
}, SHSDK.login = function () {
|
this.dataPlacement(30000);
|
ShSdk.login(function (data) {
|
this.dataPlacement(30001); //根据需要,做相应操作
|
|
window.SH_SDK_TOKENID = data.tokenid;
|
SHSDK.postFunc(function (result) {
|
console.log(result);
|
SHSDK.uid = result.msg.uid;
|
SHSDK.sign = result.msg.sign;
|
var login_data = {};
|
login_data.usrName = "sh_" + SHSDK.uid;
|
login_data.password = "wx123456";
|
console.log("深海小游戏初始化成功,开始请求服务器列表");
|
LoginController.getInstance().loginPlatformRequest(login_data);
|
}.bind(this));
|
});
|
};
|
|
SHSDK.postFunc = function (callback) {
|
var xhr = cc.loader.getXMLHttpRequest();
|
var url = "https://s1-h5mlf-h5sszg.shiyuegame.com/api.php/pf/diai/login/";
|
url = url + "?tokenid=" + SH_SDK_TOKENID;
|
url = url + "&cps=" + SH_SDK_PID;
|
xhr.open("POST", url); //xhr.open("GET", ServerLink+link+"?"+parm,false);
|
|
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
|
xhr.send();
|
|
xhr.onreadystatechange = function () {
|
if (xhr.readyState == 4 && xhr.status >= 200 && xhr.status <= 207) {
|
var result = JSON.parse(xhr.responseText);
|
cc.log("result==>", result);
|
|
if (result["error"] == -1) {
|
message(result["msg"]);
|
return;
|
}
|
|
SHSDK.dataPlacement(40000);
|
callback(result);
|
}
|
};
|
}; // 计算小程序菜单位置
|
|
|
SHSDK.initTopInfo = function () {
|
var menuInfo = wx.getMenuButtonBoundingClientRect();
|
var systemInfo = wx.getSystemInfoSync();
|
|
if (menuInfo.top > 30) {
|
window.WX_FIT = menuInfo.top / systemInfo.screenHeight * 0.7 || 0;
|
} else {
|
window.WX_FIT = menuInfo.top / systemInfo.screenHeight * 0.1 || 0;
|
}
|
|
console.log("微信小游戏菜单栏的适配值");
|
cc.log(WX_FIT);
|
}; // 链接游戏服,登陆游戏
|
|
|
SHSDK.loginGame = function () {
|
var login_data = [];
|
|
var _account = "sh_" + SHSDK.uid;
|
|
var sign = SHSDK.sign;
|
console.log("_account==>", _account);
|
login_data = [{
|
key: "channel",
|
val: SH_SDK_PID
|
}, {
|
key: "package_name",
|
val: PACKAGE_NAME
|
}, {
|
key: "package_version",
|
val: PACKAGE_VERSION
|
}, {
|
key: "platform",
|
val: PLATFORM
|
}, {
|
key: "account",
|
val: _account
|
}, {
|
key: "token",
|
val: SH_SDK_TOKENID
|
}, {
|
key: "sign",
|
val: sign
|
}];
|
console.log("login_data==>", login_data);
|
LoginController.getInstance().cusSDKLogin_2(login_data);
|
};
|
|
SHSDK.pay = function (money, buyNum, prodId, productName, productDesc, extension, coinNum) {
|
var payCallFunc = function () {
|
var roleVo = RoleController.getInstance().getRoleVo();
|
if (!roleVo) return; //时间戳
|
|
var date_time = Math.ceil(Date.now() / 1000); //充值订单号
|
|
var game_number = SH_SDK_PID; //游戏编号P******;
|
|
game_number = game_number + "_" + SHSDK.uid; //uid
|
|
game_number = game_number + "_" + date_time; //时间戳
|
|
cc.log("充值订单号game_number==>", game_number);
|
productName = productName || money * 10 + "钻石";
|
var loginData = LoginController.getInstance().getModel().getLoginData();
|
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 severInfo = roleVo.srv_id.split("_");
|
var platform = severInfo[0] || "";
|
var zone_id = severInfo[1];
|
var cps = SH_SDK_PID;
|
var channel = SH_SDK_PID;
|
|
var _extension = roleVo.rid + "$$" + platform + "$$" + zone_id + "$$" + channel + "$$" + prodId + "$$" + productName + "$$" + cps + "$$" + date_time;
|
|
cc.log("拓展参数_extension==>", _extension);
|
|
var base_64 = require("base64").Base64;
|
|
_extension = base_64.encode(_extension);
|
cc.log("base64拓展参数_extension==>", _extension);
|
var params = {
|
game_no: game_number,
|
//游戏订单号,由前端拼接
|
order_money: money * 100,
|
//充值金额,单位 分
|
order_name: productName,
|
//订单名称
|
role_id: roleVo.rid,
|
//角色id,必传项
|
role_name: roleVo.name,
|
//角色名,
|
role_level: roleVo.lev,
|
//角色等级,用于判断角色等级,控制充值入口,必传项
|
server_id: srv_id,
|
//区服id,必传项
|
server_name: loginData.srv_name,
|
//区服名称,必传项
|
ext: _extension //扩展信息,通知发货时会原样返回
|
|
};
|
console.log("充值数据", params);
|
ShSdk.pay(params, function (data) {
|
if (data.ret == 'SUCCESS') {
|
//前端通知,不能做为实际发货的凭证,真实情况以服务端通知为准
|
console.log("支付完成");
|
wx.showModal({
|
title: "支付成功",
|
content: "支付成功"
|
});
|
} else if (data.ret == 'YD_TIPS') {
|
wx.showModal({
|
title: "温馨提示",
|
content: data.msg //充值引导文字,由我们后台配置
|
|
});
|
} else if (data.ret == 'NOT_ALLOW') {
|
wx.showModal({
|
title: "支付失败",
|
content: "暂不支持支付"
|
});
|
} else {
|
console.log("支付取消或失败");
|
}
|
}.bind(this));
|
}.bind(this);
|
|
require("tips_controller").getInstance().showFirstCharge(payCallFunc);
|
}; //主动拉起转发 可用于游戏内按钮事件触发,分享内容由我们这边后台配置,不需要传参,【支持传参,格式如:key=111&aaa=333】
|
// 传参模式:ShSdk.goShare('key=111&aaa=333');
|
// 不传参模式:ShSdk.goShare();
|
|
|
SHSDK.goShare = function (data) {
|
if (data) {
|
ShSdk.goShare(data);
|
} else {
|
ShSdk.goShare();
|
}
|
}; // 获取公众号关注状态接口【特别说明:目前还没有公众号,所以暂时没有关注回调信息】
|
|
|
SHSDK.subscribe = function () {
|
ShSdk.subscribe(function (ret) {
|
//说明【关注状态->subscribe,1:已关注,0:取消关注,关注|取消关注时间->subscribe_time】
|
console.log('公众号关注状态获取结果', ret);
|
});
|
}; // 添加数据埋点推送方法,请在对应的节点上调用此方法
|
|
|
SHSDK.dataPlacement = function (actionId) {
|
ShSdk.dataPlacement({
|
action: actionId
|
});
|
}; // 客服
|
|
|
SHSDK.openCustomerServiceConversation = function () {
|
if (window.wx) {
|
wx.openCustomerServiceConversation();
|
}
|
};
|
|
SHSDK.setRoleInfo = function (data) {
|
var loginData = LoginController.getInstance().getModel().getLoginData();
|
if (loginData.srv_id == "") return;
|
var roleVo = RoleController.getInstance().getRoleVo() || data;
|
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;
|
}
|
|
this.role_info = {
|
role_id: roleVo && roleVo.rid || 0,
|
//角色ID
|
role_name: roleVo && roleVo.name || "",
|
//角色名
|
role_level: roleVo && roleVo.lev || 1,
|
//角色等级
|
server_id: srv_id,
|
//区服编号
|
server_name: loginData.srv_name,
|
//区服名称
|
has_gold: roleVo && roleVo.gold || 0,
|
//角色所持有货币数
|
vip_level: roleVo && roleVo.vip_lev || 0,
|
//角色vip等级 没有可以传0
|
role_power: roleVo && roleVo.power || 0,
|
//int 战力、武力之类角色的核心数值,没有可以传0
|
create_time: roleVo && roleVo.reg_time || 0 //时间戳,单位:秒
|
|
};
|
}; //角色登录提交
|
|
|
SHSDK.submitLogin = function () {
|
if (gcore.SysEnv.get("shsdk_account") == this.uid) {
|
return;
|
}
|
|
gcore.SysEnv.set("shsdk_account", this.uid);
|
this.setRoleInfo();
|
console.log("角色登录提交一次--role_info==>", this.role_info);
|
|
if (PLATFORM_TYPR == "SH_SDK") {
|
ShSdk.enterGame(this.role_info, function (ret) {
|
console.log('角色上报,返回支付情况', ret);
|
|
if (ret.data.msg.sp != null) {
|
window.IS_SHOW_CHARGE = ret.data.msg.sp;
|
}
|
|
if (ret.data.msg.follow != null) {
|
window.SH_SDK_FOLLOW = ret.data.msg.follow;
|
}
|
});
|
cc.log("登录上报方法成功-----");
|
}
|
}; //创建角色信息上报
|
|
|
SHSDK.createRole = function (data) {
|
this.dataPlacement(90200);
|
this.setRoleInfo(data);
|
cc.log("创角提交一次上报---->", this.role_info);
|
ShSdk.createRole(this.role_info, function (ret) {
|
console.log('角色上报,返回支付情况', ret);
|
|
if (ret.data.msg.sp != null) {
|
window.IS_SHOW_CHARGE = ret.data.msg.sp;
|
}
|
|
if (ret.data.msg.follow != null) {
|
window.SH_SDK_FOLLOW = ret.data.msg.follow;
|
}
|
}.bind(this));
|
}; //角色升级信息上报
|
|
|
SHSDK.roleUpLevel = function (value) {
|
this.setRoleInfo();
|
if (this.role_info && this.role_info.create_time == 0) return;
|
|
if (value != null && value > 1) {
|
this.role_info.role_level = value;
|
console.log('角色升级信息上报', this.role_info);
|
ShSdk.roleUpLevel(this.role_info, function (ret) {
|
console.log('角色上报,返回支付情况', ret);
|
|
if (ret.data.msg.sp != null) {
|
window.IS_SHOW_CHARGE = ret.data.msg.sp;
|
}
|
|
if (ret.data.msg.follow != null) {
|
window.SH_SDK_FOLLOW = ret.data.msg.follow;
|
}
|
}.bind(this));
|
cc.log("角色升级上报提交--->", this.role_info);
|
} else {
|
cc.log("角色升级上报提交失败--->", this.role_info, value);
|
}
|
};
|
|
SHSDK.sdkBackLogin = function () {};
|
|
SHSDK.getCurrChannel = function () {};
|
|
SHSDK.getSubChannel = function () {};
|
|
SHSDK.setClipboardData = function (desc) {
|
wx.setClipboardData({
|
data: desc,
|
success: function success(res) {}
|
});
|
};
|
|
module.exports = SHSDK;
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcc2Rrc1xcc2hfc2RrLmpzIl0sIm5hbWVzIjpbIndpbmRvdyIsIlBBQ0tBR0VfTkFNRSIsIlNIX1NES19QSUQiLCJTSF9TREtfQU5EX1BJRCIsIlNIX1NES19JT1NfUElEIiwiU0hfU0RLX0ZPTExPVyIsIlNoU2RrIiwicmVxdWlyZSIsIlJvbGVDb250cm9sbGVyIiwiTG9naW5Db250cm9sbGVyIiwiV2VsZmFyZUV2ZW50IiwiU0hTREsiLCJ1aWQiLCJzaWduIiwicm9sZV9pbmZvIiwiaW5pdFNESyIsImNvbnNvbGUiLCJsb2ciLCJ3eCIsImluaXRUb3BJbmZvIiwic3lzdGVtSW5mbyIsImdldFN5c3RlbUluZm9TeW5jIiwic3lzdGVtTmFtZSIsInN5c3RlbSIsIlBMQVRGT1JNIiwiUExBVEZPUk1fTkFNRSIsImluZGV4T2YiLCJDSEFOTkVMIiwiaW5pdCIsInBhY2thZ2VfY29kZSIsImRhdGFQbGFjZW1lbnQiLCJzaGFyZSIsInNldEtlZXBTY3JlZW5PbiIsImtlZXBTY3JlZW5PbiIsIm9uU2hvdyIsInJlcyIsImdjb3JlIiwiR2xvYmFsRXZlbnQiLCJmaXJlIiwiVXBkYXRlX1NIV1hfc2hvd19zY2VuZV92YWwiLCJzY2VuZSIsIm9uSGlkZSIsImdldFNldHRpbmciLCJzdWNjZXNzIiwiY2MiLCJhdXRoU2V0dGluZyIsImxvZ2luIiwiaW5mbyIsImJ1dHRvbiIsImNyZWF0ZVVzZXJJbmZvQnV0dG9uIiwidHlwZSIsInRleHQiLCJzdHlsZSIsImxlZnQiLCJib3R0b20iLCJ3aWR0aCIsInNjcmVlbldpZHRoIiwiaGVpZ2h0Iiwic2NyZWVuSGVpZ2h0IiwibGluZUhlaWdodCIsImJhY2tncm91bmRDb2xvciIsImNvbG9yIiwidGV4dEFsaWduIiwiZm9udFNpemUiLCJib3JkZXJSYWRpdXMiLCJzaG93Iiwib25UYXAiLCJoaWRlIiwidW5pb25JZCIsImRhdGEiLCJTSF9TREtfVE9LRU5JRCIsInRva2VuaWQiLCJwb3N0RnVuYyIsInJlc3VsdCIsIm1zZyIsImxvZ2luX2RhdGEiLCJ1c3JOYW1lIiwicGFzc3dvcmQiLCJnZXRJbnN0YW5jZSIsImxvZ2luUGxhdGZvcm1SZXF1ZXN0IiwiYmluZCIsImNhbGxiYWNrIiwieGhyIiwibG9hZGVyIiwiZ2V0WE1MSHR0cFJlcXVlc3QiLCJ1cmwiLCJvcGVuIiwic2V0UmVxdWVzdEhlYWRlciIsInNlbmQiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwic3RhdHVzIiwiSlNPTiIsInBhcnNlIiwicmVzcG9uc2VUZXh0IiwibWVzc2FnZSIsIm1lbnVJbmZvIiwiZ2V0TWVudUJ1dHRvbkJvdW5kaW5nQ2xpZW50UmVjdCIsInRvcCIsIldYX0ZJVCIsImxvZ2luR2FtZSIsIl9hY2NvdW50Iiwia2V5IiwidmFsIiwiUEFDS0FHRV9WRVJTSU9OIiwiY3VzU0RLTG9naW5fMiIsInBheSIsIm1vbmV5IiwiYnV5TnVtIiwicHJvZElkIiwicHJvZHVjdE5hbWUiLCJwcm9kdWN0RGVzYyIsImV4dGVuc2lvbiIsImNvaW5OdW0iLCJwYXlDYWxsRnVuYyIsInJvbGVWbyIsImdldFJvbGVWbyIsImRhdGVfdGltZSIsIk1hdGgiLCJjZWlsIiwiRGF0ZSIsIm5vdyIsImdhbWVfbnVtYmVyIiwibG9naW5EYXRhIiwiZ2V0TW9kZWwiLCJnZXRMb2dpbkRhdGEiLCJzcnZfaWQiLCJpbmRleCIsIk51bWJlciIsInNsaWNlIiwibGVuZ3RoIiwic2V2ZXJJbmZvIiwic3BsaXQiLCJwbGF0Zm9ybSIsInpvbmVfaWQiLCJjcHMiLCJjaGFubmVsIiwiX2V4dGVuc2lvbiIsInJpZCIsImJhc2VfNjQiLCJCYXNlNjQiLCJlbmNvZGUiLCJwYXJhbXMiLCJnYW1lX25vIiwib3JkZXJfbW9uZXkiLCJvcmRlcl9uYW1lIiwicm9sZV9pZCIsInJvbGVfbmFtZSIsIm5hbWUiLCJyb2xlX2xldmVsIiwibGV2Iiwic2VydmVyX2lkIiwic2VydmVyX25hbWUiLCJzcnZfbmFtZSIsImV4dCIsInJldCIsInNob3dNb2RhbCIsInRpdGxlIiwiY29udGVudCIsInNob3dGaXJzdENoYXJnZSIsImdvU2hhcmUiLCJzdWJzY3JpYmUiLCJhY3Rpb25JZCIsImFjdGlvbiIsIm9wZW5DdXN0b21lclNlcnZpY2VDb252ZXJzYXRpb24iLCJzZXRSb2xlSW5mbyIsImhhc19nb2xkIiwiZ29sZCIsInZpcF9sZXZlbCIsInZpcF9sZXYiLCJyb2xlX3Bvd2VyIiwicG93ZXIiLCJjcmVhdGVfdGltZSIsInJlZ190aW1lIiwic3VibWl0TG9naW4iLCJTeXNFbnYiLCJnZXQiLCJzZXQiLCJQTEFURk9STV9UWVBSIiwiZW50ZXJHYW1lIiwic3AiLCJJU19TSE9XX0NIQVJHRSIsImZvbGxvdyIsImNyZWF0ZVJvbGUiLCJyb2xlVXBMZXZlbCIsInZhbHVlIiwic2RrQmFja0xvZ2luIiwiZ2V0Q3VyckNoYW5uZWwiLCJnZXRTdWJDaGFubmVsIiwic2V0Q2xpcGJvYXJkRGF0YSIsImRlc2MiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQUEsTUFBTSxDQUFDQyxZQUFQLEdBQXNCLFNBQXRCLEVBQWtDO0FBQ2xDOztBQUNBRCxNQUFNLENBQUNFLFVBQVAsR0FBb0IsR0FBcEIsRUFBeUM7O0FBQ3pDRixNQUFNLENBQUNHLGNBQVAsR0FBd0IsVUFBeEIsRUFBMkM7O0FBQzNDSCxNQUFNLENBQUNJLGNBQVAsR0FBd0IsVUFBeEIsRUFBeUM7O0FBQ3pDSixNQUFNLENBQUNLLGFBQVAsR0FBdUIsSUFBdkIsRUFBNkM7O0FBRTdDLElBQUlDLEtBQUssR0FBR0MsT0FBTyxDQUFDLE9BQUQsQ0FBbkI7O0FBQ0EsSUFBSUMsY0FBYyxHQUFHRCxPQUFPLENBQUMsaUJBQUQsQ0FBNUI7O0FBQ0EsSUFBSUUsZUFBZSxHQUFHRixPQUFPLENBQUMsa0JBQUQsQ0FBN0I7O0FBQ0EsSUFBSUcsWUFBWSxHQUFHSCxPQUFPLENBQUMsZUFBRCxDQUExQjs7QUFHQSxJQUFJSSxLQUFLLEdBQUcsU0FBUkEsS0FBUSxHQUFXLENBRXRCLENBRkQ7O0FBSUFBLEtBQUssQ0FBQ0MsR0FBTixHQUFZLElBQVo7QUFDQUQsS0FBSyxDQUFDRSxJQUFOLEdBQWEsSUFBYjtBQUNBRixLQUFLLENBQUNHLFNBQU4sR0FBa0IsSUFBbEIsRUFFQTs7QUFDQUgsS0FBSyxDQUFDSSxPQUFOLEdBQWdCLFlBQVc7QUFDdkJDLEVBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZLFNBQVo7QUFDQUQsRUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVlqQixNQUFaO0FBR0UsTUFBSSxDQUFDQSxNQUFNLENBQUNrQixFQUFaLEVBQWlCO0FBRWpCLE9BQUtDLFdBQUw7QUFFQSxNQUFJQyxVQUFVLEdBQUdGLEVBQUUsQ0FBQ0csaUJBQUgsRUFBakI7QUFDQSxNQUFJQyxVQUFVLEdBQUdGLFVBQVUsQ0FBQ0csTUFBNUI7QUFFQXZCLEVBQUFBLE1BQU0sQ0FBQ3dCLFFBQVAsR0FBa0IsSUFBbEI7QUFDQXhCLEVBQUFBLE1BQU0sQ0FBQ3lCLGFBQVAsR0FBdUIsSUFBdkI7O0FBRUEsTUFBR0gsVUFBVSxDQUFDSSxPQUFYLENBQW1CLEtBQW5CLElBQTBCLENBQUMsQ0FBOUIsRUFBZ0M7QUFDOUJ4QixJQUFBQSxVQUFVLEdBQUdFLGNBQWI7QUFDRCxHQUZELE1BRU0sSUFBR2tCLFVBQVUsQ0FBQ0ksT0FBWCxDQUFtQixTQUFuQixJQUE4QixDQUFDLENBQWxDLEVBQW9DO0FBQ3hDeEIsSUFBQUEsVUFBVSxHQUFHQyxjQUFiO0FBQ0Q7O0FBQ0R3QixFQUFBQSxPQUFPLEdBQUd6QixVQUFWO0FBQ0FJLEVBQUFBLEtBQUssQ0FBQ3NCLElBQU4sQ0FBVztBQUNUQyxJQUFBQSxZQUFZLEVBQUUzQixVQURMLENBQ2lCO0FBQzFCOztBQUZTLEdBQVg7QUFLQSxPQUFLNEIsYUFBTCxDQUFtQixLQUFuQjtBQUNBLE9BQUtBLGFBQUwsQ0FBbUIsS0FBbkI7QUFFQXhCLEVBQUFBLEtBQUssQ0FBQ3lCLEtBQU4sQ0FBWSxZQUFVO0FBQ3BCO0FBQ0FmLElBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZLDhCQUFaO0FBQ0QsR0FIRDtBQUtBQyxFQUFBQSxFQUFFLENBQUNjLGVBQUgsQ0FBbUI7QUFDakJDLElBQUFBLFlBQVksRUFBRTtBQURHLEdBQW5CO0FBR0FmLEVBQUFBLEVBQUUsQ0FBQ2dCLE1BQUgsQ0FBVSxVQUFTQyxHQUFULEVBQWE7QUFDckIsUUFBR0EsR0FBSCxFQUFPO0FBQ0xDLE1BQUFBLEtBQUssQ0FBQ0MsV0FBTixDQUFrQkMsSUFBbEIsQ0FBdUI1QixZQUFZLENBQUM2QiwwQkFBcEMsRUFBK0RKLEdBQUcsQ0FBQ0ssS0FBbkU7QUFDRDs7QUFDRHRCLElBQUFBLEVBQUUsQ0FBQ2MsZUFBSCxDQUFtQjtBQUNqQkMsTUFBQUEsWUFBWSxFQUFFO0FBREcsS0FBbkI7QUFHRCxHQVBEO0FBU0FmLEVBQUFBLEVBQUUsQ0FBQ3VCLE1BQUgsQ0FBVSxVQUFTTixHQUFULEVBQWE7QUFDckJqQixJQUFBQSxFQUFFLENBQUNjLGVBQUgsQ0FBbUI7QUFDakJDLE1BQUFBLFlBQVksRUFBRTtBQURHLEtBQW5CO0FBR0QsR0FKRDtBQU1BZixFQUFBQSxFQUFFLENBQUN3QixVQUFILENBQWM7QUFDWkMsSUFBQUEsT0FBTyxFQUFFLGlCQUFTUixHQUFULEVBQWM7QUFDckJTLE1BQUFBLEVBQUUsQ0FBQzNCLEdBQUgsQ0FBT2tCLEdBQVA7O0FBQ0EsVUFBSUEsR0FBRyxDQUFDVSxXQUFKLENBQWdCLGdCQUFoQixDQUFKLEVBQXVDO0FBQ3JDbEMsUUFBQUEsS0FBSyxDQUFDbUMsS0FBTjtBQUNELE9BRkQsTUFFTztBQUNMLFlBQUlDLElBQUksR0FBRzdCLEVBQUUsQ0FBQ0csaUJBQUgsRUFBWDtBQUNBLFlBQUkyQixNQUFNLEdBQUc5QixFQUFFLENBQUMrQixvQkFBSCxDQUF3QjtBQUNqQ0MsVUFBQUEsSUFBSSxFQUFFLE1BRDJCO0FBRWpDQyxVQUFBQSxJQUFJLEVBQUUsRUFGMkI7QUFHakNDLFVBQUFBLEtBQUssRUFBRTtBQUNMQyxZQUFBQSxJQUFJLEVBQUUsQ0FERDtBQUVMQyxZQUFBQSxNQUFNLEVBQUUsQ0FGSDtBQUdMQyxZQUFBQSxLQUFLLEVBQUVSLElBQUksQ0FBQ1MsV0FIUDtBQUlMQyxZQUFBQSxNQUFNLEVBQUVWLElBQUksQ0FBQ1csWUFBTCxHQUFrQixDQUpyQjtBQUtMQyxZQUFBQSxVQUFVLEVBQUUsRUFMUDtBQU1MQyxZQUFBQSxlQUFlLEVBQUUsRUFOWjtBQU9MQyxZQUFBQSxLQUFLLEVBQUUsU0FQRjtBQVFMQyxZQUFBQSxTQUFTLEVBQUUsUUFSTjtBQVNMQyxZQUFBQSxRQUFRLEVBQUUsRUFUTDtBQVVMQyxZQUFBQSxZQUFZLEVBQUU7QUFWVDtBQUgwQixTQUF4QixDQUFiO0FBZ0JBaEIsUUFBQUEsTUFBTSxDQUFDaUIsSUFBUDtBQUNBakIsUUFBQUEsTUFBTSxDQUFDa0IsS0FBUCxDQUFhLFVBQUMvQixHQUFELEVBQU87QUFDaEJhLFVBQUFBLE1BQU0sQ0FBQ21CLElBQVA7QUFDQTdELFVBQUFBLEtBQUssQ0FBQzhELE9BQU4sQ0FBY2pDLEdBQWQ7QUFDQXhCLFVBQUFBLEtBQUssQ0FBQ21DLEtBQU47QUFDQTlCLFVBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZa0IsR0FBWjtBQUNILFNBTEQ7QUFNRDtBQUNGO0FBL0JXLEdBQWQ7QUFpQ0wsQ0FyRkQsRUF3RkF4QixLQUFLLENBQUNtQyxLQUFOLEdBQWMsWUFBVTtBQUN0QixPQUFLaEIsYUFBTCxDQUFtQixLQUFuQjtBQUNBeEIsRUFBQUEsS0FBSyxDQUFDd0MsS0FBTixDQUFZLFVBQVN1QixJQUFULEVBQWU7QUFDdkIsU0FBS3ZDLGFBQUwsQ0FBbUIsS0FBbkIsRUFEdUIsQ0FFdkI7O0FBQ0E5QixJQUFBQSxNQUFNLENBQUNzRSxjQUFQLEdBQXdCRCxJQUFJLENBQUNFLE9BQTdCO0FBR0E1RCxJQUFBQSxLQUFLLENBQUM2RCxRQUFOLENBQWUsVUFBVUMsTUFBVixFQUFrQjtBQUMvQnpELE1BQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZd0QsTUFBWjtBQUNBOUQsTUFBQUEsS0FBSyxDQUFDQyxHQUFOLEdBQVk2RCxNQUFNLENBQUNDLEdBQVAsQ0FBVzlELEdBQXZCO0FBQ0FELE1BQUFBLEtBQUssQ0FBQ0UsSUFBTixHQUFhNEQsTUFBTSxDQUFDQyxHQUFQLENBQVc3RCxJQUF4QjtBQUVBLFVBQUk4RCxVQUFVLEdBQUcsRUFBakI7QUFDQUEsTUFBQUEsVUFBVSxDQUFDQyxPQUFYLEdBQXFCLFFBQVFqRSxLQUFLLENBQUNDLEdBQW5DO0FBQ0ErRCxNQUFBQSxVQUFVLENBQUNFLFFBQVgsR0FBc0IsVUFBdEI7QUFDQTdELE1BQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZLHNCQUFaO0FBQ0FSLE1BQUFBLGVBQWUsQ0FBQ3FFLFdBQWhCLEdBQThCQyxvQkFBOUIsQ0FBbURKLFVBQW5EO0FBQ0gsS0FWZ0IsQ0FVZkssSUFWZSxDQVVWLElBVlUsQ0FBZjtBQVdILEdBakJEO0FBa0JELENBNUdEOztBQThHQXJFLEtBQUssQ0FBQzZELFFBQU4sR0FBaUIsVUFBVVMsUUFBVixFQUFvQjtBQUNuQyxNQUFJQyxHQUFHLEdBQUd0QyxFQUFFLENBQUN1QyxNQUFILENBQVVDLGlCQUFWLEVBQVY7QUFDQSxNQUFJQyxHQUFHLEdBQUcsK0RBQVY7QUFDQUEsRUFBQUEsR0FBRyxHQUFHQSxHQUFHLEdBQUcsV0FBTixHQUFvQmYsY0FBMUI7QUFDQWUsRUFBQUEsR0FBRyxHQUFHQSxHQUFHLEdBQUcsT0FBTixHQUFnQm5GLFVBQXRCO0FBQ0FnRixFQUFBQSxHQUFHLENBQUNJLElBQUosQ0FBUyxNQUFULEVBQWlCRCxHQUFqQixFQUxtQyxDQU1uQzs7QUFDQUgsRUFBQUEsR0FBRyxDQUFDSyxnQkFBSixDQUFxQixjQUFyQixFQUFxQyxtQ0FBckM7QUFDQUwsRUFBQUEsR0FBRyxDQUFDTSxJQUFKOztBQUNBTixFQUFBQSxHQUFHLENBQUNPLGtCQUFKLEdBQXlCLFlBQVk7QUFDakMsUUFBSVAsR0FBRyxDQUFDUSxVQUFKLElBQWtCLENBQWxCLElBQXdCUixHQUFHLENBQUNTLE1BQUosSUFBYyxHQUFkLElBQXFCVCxHQUFHLENBQUNTLE1BQUosSUFBYyxHQUEvRCxFQUFxRTtBQUNqRSxVQUFJbEIsTUFBTSxHQUFHbUIsSUFBSSxDQUFDQyxLQUFMLENBQVdYLEdBQUcsQ0FBQ1ksWUFBZixDQUFiO0FBQ0FsRCxNQUFBQSxFQUFFLENBQUMzQixHQUFILENBQU8sV0FBUCxFQUFvQndELE1BQXBCOztBQUNBLFVBQUlBLE1BQU0sQ0FBQyxPQUFELENBQU4sSUFBbUIsQ0FBQyxDQUF4QixFQUEyQjtBQUN2QnNCLFFBQUFBLE9BQU8sQ0FBQ3RCLE1BQU0sQ0FBQyxLQUFELENBQVAsQ0FBUDtBQUNBO0FBQ0g7O0FBQ0Q5RCxNQUFBQSxLQUFLLENBQUNtQixhQUFOLENBQW9CLEtBQXBCO0FBQ0FtRCxNQUFBQSxRQUFRLENBQUNSLE1BQUQsQ0FBUjtBQUNIO0FBQ0osR0FYRDtBQVlELENBckJELEVBdUJBOzs7QUFDQTlELEtBQUssQ0FBQ1EsV0FBTixHQUFvQixZQUFXO0FBQzNCLE1BQUk2RSxRQUFRLEdBQUc5RSxFQUFFLENBQUMrRSwrQkFBSCxFQUFmO0FBRUEsTUFBSTdFLFVBQVUsR0FBR0YsRUFBRSxDQUFDRyxpQkFBSCxFQUFqQjs7QUFDQSxNQUFHMkUsUUFBUSxDQUFDRSxHQUFULEdBQWEsRUFBaEIsRUFBbUI7QUFDakJsRyxJQUFBQSxNQUFNLENBQUNtRyxNQUFQLEdBQWdCSCxRQUFRLENBQUNFLEdBQVQsR0FBZTlFLFVBQVUsQ0FBQ3NDLFlBQTFCLEdBQXdDLEdBQXhDLElBQStDLENBQS9EO0FBQ0QsR0FGRCxNQUVLO0FBQ0gxRCxJQUFBQSxNQUFNLENBQUNtRyxNQUFQLEdBQWdCSCxRQUFRLENBQUNFLEdBQVQsR0FBZTlFLFVBQVUsQ0FBQ3NDLFlBQTFCLEdBQXdDLEdBQXhDLElBQStDLENBQS9EO0FBQ0Q7O0FBRUQxQyxFQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWSxjQUFaO0FBQ0EyQixFQUFBQSxFQUFFLENBQUMzQixHQUFILENBQU9rRixNQUFQO0FBQ0gsQ0FaRCxFQWNBOzs7QUFDQXhGLEtBQUssQ0FBQ3lGLFNBQU4sR0FBa0IsWUFBWTtBQUM1QixNQUFJekIsVUFBVSxHQUFHLEVBQWpCOztBQUNBLE1BQUkwQixRQUFRLEdBQUcsUUFBUTFGLEtBQUssQ0FBQ0MsR0FBN0I7O0FBQ0EsTUFBSUMsSUFBSSxHQUFHRixLQUFLLENBQUNFLElBQWpCO0FBQ0FHLEVBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZLGFBQVosRUFBMkJvRixRQUEzQjtBQUVBMUIsRUFBQUEsVUFBVSxHQUFHLENBQ1Q7QUFBRTJCLElBQUFBLEdBQUcsRUFBRSxTQUFQO0FBQWtCQyxJQUFBQSxHQUFHLEVBQUVyRztBQUF2QixHQURTLEVBRVQ7QUFBRW9HLElBQUFBLEdBQUcsRUFBRSxjQUFQO0FBQXVCQyxJQUFBQSxHQUFHLEVBQUV0RztBQUE1QixHQUZTLEVBR1Q7QUFBRXFHLElBQUFBLEdBQUcsRUFBRSxpQkFBUDtBQUEwQkMsSUFBQUEsR0FBRyxFQUFFQztBQUEvQixHQUhTLEVBSVQ7QUFBRUYsSUFBQUEsR0FBRyxFQUFFLFVBQVA7QUFBbUJDLElBQUFBLEdBQUcsRUFBRS9FO0FBQXhCLEdBSlMsRUFLVDtBQUFFOEUsSUFBQUEsR0FBRyxFQUFFLFNBQVA7QUFBa0JDLElBQUFBLEdBQUcsRUFBRUY7QUFBdkIsR0FMUyxFQU1UO0FBQUVDLElBQUFBLEdBQUcsRUFBRSxPQUFQO0FBQWdCQyxJQUFBQSxHQUFHLEVBQUVqQztBQUFyQixHQU5TLEVBT1Q7QUFBRWdDLElBQUFBLEdBQUcsRUFBRSxNQUFQO0FBQWVDLElBQUFBLEdBQUcsRUFBRTFGO0FBQXBCLEdBUFMsQ0FBYjtBQVVBRyxFQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWSxlQUFaLEVBQTZCMEQsVUFBN0I7QUFFQWxFLEVBQUFBLGVBQWUsQ0FBQ3FFLFdBQWhCLEdBQThCMkIsYUFBOUIsQ0FBNEM5QixVQUE1QztBQUNELENBbkJEOztBQXFCQWhFLEtBQUssQ0FBQytGLEdBQU4sR0FBWSxVQUFTQyxLQUFULEVBQWdCQyxNQUFoQixFQUF3QkMsTUFBeEIsRUFBZ0NDLFdBQWhDLEVBQTZDQyxXQUE3QyxFQUEwREMsU0FBMUQsRUFBcUVDLE9BQXJFLEVBQThFO0FBRXRGLE1BQUlDLFdBQVcsR0FBRyxZQUFVO0FBQzFCLFFBQUlDLE1BQU0sR0FBRzNHLGNBQWMsQ0FBQ3NFLFdBQWYsR0FBNkJzQyxTQUE3QixFQUFiO0FBQ0EsUUFBSSxDQUFDRCxNQUFMLEVBQWEsT0FGYSxDQUkxQjs7QUFDQSxRQUFJRSxTQUFTLEdBQUdDLElBQUksQ0FBQ0MsSUFBTCxDQUFVQyxJQUFJLENBQUNDLEdBQUwsS0FBYSxJQUF2QixDQUFoQixDQUwwQixDQU8xQjs7QUFDQSxRQUFJQyxXQUFXLEdBQUd4SCxVQUFsQixDQVIwQixDQVFHOztBQUM3QndILElBQUFBLFdBQVcsR0FBR0EsV0FBVyxHQUFHLEdBQWQsR0FBb0IvRyxLQUFLLENBQUNDLEdBQXhDLENBVDBCLENBU3NCOztBQUNoRDhHLElBQUFBLFdBQVcsR0FBR0EsV0FBVyxHQUFHLEdBQWQsR0FBb0JMLFNBQWxDLENBVjBCLENBVXNCOztBQUNoRHpFLElBQUFBLEVBQUUsQ0FBQzNCLEdBQUgsQ0FBTyxxQkFBUCxFQUE4QnlHLFdBQTlCO0FBRUFaLElBQUFBLFdBQVcsR0FBR0EsV0FBVyxJQUFLSCxLQUFLLEdBQUcsRUFBVCxHQUFlLElBQTVDO0FBQ0EsUUFBSWdCLFNBQVMsR0FBR2xILGVBQWUsQ0FBQ3FFLFdBQWhCLEdBQThCOEMsUUFBOUIsR0FBeUNDLFlBQXpDLEVBQWhCO0FBQ0EsUUFBSUMsTUFBTSxHQUFHLEVBQWI7O0FBQ0EsUUFBSVgsTUFBTSxJQUFJQSxNQUFNLENBQUNXLE1BQXJCLEVBQTZCO0FBQ3pCQSxNQUFBQSxNQUFNLEdBQUdYLE1BQU0sQ0FBQ1csTUFBaEI7QUFDSCxLQUZELE1BRU8sSUFBSUgsU0FBUyxDQUFDRyxNQUFkLEVBQXNCO0FBQ3pCQSxNQUFBQSxNQUFNLEdBQUdILFNBQVMsQ0FBQ0csTUFBbkI7QUFDSDs7QUFDRCxRQUFJQyxLQUFLLEdBQUdELE1BQU0sQ0FBQ3BHLE9BQVAsQ0FBZSxHQUFmLENBQVo7O0FBQ0EsUUFBSXFHLEtBQUssSUFBSSxDQUFDLENBQWQsRUFBaUI7QUFDYkQsTUFBQUEsTUFBTSxHQUFHRSxNQUFNLENBQUNGLE1BQU0sQ0FBQ0csS0FBUCxDQUFhRixLQUFLLEdBQUcsQ0FBckIsRUFBd0JELE1BQU0sQ0FBQ0ksTUFBL0IsQ0FBRCxDQUFmO0FBQ0gsS0FGRCxNQUVPO0FBQ0hKLE1BQUFBLE1BQU0sR0FBRyxDQUFUO0FBQ0gsS0ExQnlCLENBNEIxQjs7O0FBQ0EsUUFBSUssU0FBUyxHQUFHaEIsTUFBTSxDQUFDVyxNQUFQLENBQWNNLEtBQWQsQ0FBb0IsR0FBcEIsQ0FBaEI7QUFDQSxRQUFJQyxRQUFRLEdBQUdGLFNBQVMsQ0FBQyxDQUFELENBQVQsSUFBZ0IsRUFBL0I7QUFDQSxRQUFJRyxPQUFPLEdBQUdILFNBQVMsQ0FBQyxDQUFELENBQXZCO0FBQ0EsUUFBSUksR0FBRyxHQUFHckksVUFBVjtBQUNBLFFBQUlzSSxPQUFPLEdBQUd0SSxVQUFkOztBQUVBLFFBQUl1SSxVQUFVLEdBQUd0QixNQUFNLENBQUN1QixHQUFQLEdBQWEsSUFBYixHQUFvQkwsUUFBcEIsR0FBK0IsSUFBL0IsR0FBc0NDLE9BQXRDLEdBQ2IsSUFEYSxHQUNORSxPQURNLEdBQ0ksSUFESixHQUNXM0IsTUFEWCxHQUNvQixJQURwQixHQUMyQkMsV0FEM0IsR0FDeUMsSUFEekMsR0FDZ0R5QixHQURoRCxHQUNzRCxJQUR0RCxHQUM2RGxCLFNBRDlFOztBQUVBekUsSUFBQUEsRUFBRSxDQUFDM0IsR0FBSCxDQUFPLG1CQUFQLEVBQTRCd0gsVUFBNUI7O0FBQ0EsUUFBSUUsT0FBTyxHQUFHcEksT0FBTyxDQUFDLFFBQUQsQ0FBUCxDQUFrQnFJLE1BQWhDOztBQUNBSCxJQUFBQSxVQUFVLEdBQUdFLE9BQU8sQ0FBQ0UsTUFBUixDQUFlSixVQUFmLENBQWI7QUFDQTdGLElBQUFBLEVBQUUsQ0FBQzNCLEdBQUgsQ0FBTyx5QkFBUCxFQUFrQ3dILFVBQWxDO0FBSUEsUUFBSUssTUFBTSxHQUFHO0FBQ1RDLE1BQUFBLE9BQU8sRUFBRXJCLFdBREE7QUFDZTtBQUN4QnNCLE1BQUFBLFdBQVcsRUFBRXJDLEtBQUssR0FBRyxHQUZaO0FBRXNDO0FBQy9Dc0MsTUFBQUEsVUFBVSxFQUFFbkMsV0FISDtBQUc0QjtBQUNyQ29DLE1BQUFBLE9BQU8sRUFBRS9CLE1BQU0sQ0FBQ3VCLEdBSlA7QUFJa0M7QUFDM0NTLE1BQUFBLFNBQVMsRUFBRWhDLE1BQU0sQ0FBQ2lDLElBTFQ7QUFLa0M7QUFDM0NDLE1BQUFBLFVBQVUsRUFBRWxDLE1BQU0sQ0FBQ21DLEdBTlY7QUFNb0M7QUFDN0NDLE1BQUFBLFNBQVMsRUFBRXpCLE1BUEY7QUFPaUM7QUFDMUMwQixNQUFBQSxXQUFXLEVBQUU3QixTQUFTLENBQUM4QixRQVJkO0FBUXFDO0FBQzlDQyxNQUFBQSxHQUFHLEVBQUVqQixVQVRJLENBU2lDOztBQVRqQyxLQUFiO0FBWUF6SCxJQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWSxNQUFaLEVBQW1CNkgsTUFBbkI7QUFFQXhJLElBQUFBLEtBQUssQ0FBQ29HLEdBQU4sQ0FBVW9DLE1BQVYsRUFDSSxVQUFTekUsSUFBVCxFQUFlO0FBQ1gsVUFBSUEsSUFBSSxDQUFDc0YsR0FBTCxJQUFZLFNBQWhCLEVBQTJCO0FBQUU7QUFDekIzSSxRQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWSxNQUFaO0FBQ0FDLFFBQUFBLEVBQUUsQ0FBQzBJLFNBQUgsQ0FBYTtBQUNYQyxVQUFBQSxLQUFLLEVBQUUsTUFESTtBQUVYQyxVQUFBQSxPQUFPLEVBQUU7QUFGRSxTQUFiO0FBSUgsT0FORCxNQU1PLElBQUl6RixJQUFJLENBQUNzRixHQUFMLElBQVksU0FBaEIsRUFBMkI7QUFDaEN6SSxRQUFBQSxFQUFFLENBQUMwSSxTQUFILENBQWE7QUFDWEMsVUFBQUEsS0FBSyxFQUFFLE1BREk7QUFFWEMsVUFBQUEsT0FBTyxFQUFFekYsSUFBSSxDQUFDSyxHQUZILENBRVE7O0FBRlIsU0FBYjtBQUlELE9BTE0sTUFLQSxJQUFJTCxJQUFJLENBQUNzRixHQUFMLElBQVcsV0FBZixFQUEyQjtBQUNoQ3pJLFFBQUFBLEVBQUUsQ0FBQzBJLFNBQUgsQ0FBYTtBQUNYQyxVQUFBQSxLQUFLLEVBQUUsTUFESTtBQUVYQyxVQUFBQSxPQUFPLEVBQUU7QUFGRSxTQUFiO0FBSUQsT0FMTSxNQU1GO0FBQ0Q5SSxRQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWSxTQUFaO0FBQ0g7QUFDSixLQXJCRCxDQXFCRStELElBckJGLENBcUJPLElBckJQLENBREo7QUF3QkQsR0FsRmlCLENBa0ZoQkEsSUFsRmdCLENBa0ZYLElBbEZXLENBQWxCOztBQW1GQXpFLEVBQUFBLE9BQU8sQ0FBQyxpQkFBRCxDQUFQLENBQTJCdUUsV0FBM0IsR0FBeUNpRixlQUF6QyxDQUF5RDdDLFdBQXpEO0FBQ0gsQ0F0RkQsRUF3RkE7QUFDQTtBQUNBOzs7QUFDQXZHLEtBQUssQ0FBQ3FKLE9BQU4sR0FBZ0IsVUFBVTNGLElBQVYsRUFBZ0I7QUFDOUIsTUFBR0EsSUFBSCxFQUFRO0FBQ04vRCxJQUFBQSxLQUFLLENBQUMwSixPQUFOLENBQWMzRixJQUFkO0FBQ0QsR0FGRCxNQUVLO0FBQ0gvRCxJQUFBQSxLQUFLLENBQUMwSixPQUFOO0FBQ0Q7QUFDRixDQU5ELEVBUUE7OztBQUNBckosS0FBSyxDQUFDc0osU0FBTixHQUFrQixZQUFZO0FBQzVCM0osRUFBQUEsS0FBSyxDQUFDMkosU0FBTixDQUFnQixVQUFTTixHQUFULEVBQWE7QUFDM0I7QUFDQTNJLElBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZLGFBQVosRUFBMEIwSSxHQUExQjtBQUNELEdBSEQ7QUFJRCxDQUxELEVBT0E7OztBQUNBaEosS0FBSyxDQUFDbUIsYUFBTixHQUFzQixVQUFVb0ksUUFBVixFQUFvQjtBQUN4QzVKLEVBQUFBLEtBQUssQ0FBQ3dCLGFBQU4sQ0FBb0I7QUFDbEJxSSxJQUFBQSxNQUFNLEVBQUVEO0FBRFUsR0FBcEI7QUFHRCxDQUpELEVBTUE7OztBQUNBdkosS0FBSyxDQUFDeUosK0JBQU4sR0FBd0MsWUFBWTtBQUNsRCxNQUFHcEssTUFBTSxDQUFDa0IsRUFBVixFQUFhO0FBQ1hBLElBQUFBLEVBQUUsQ0FBQ2tKLCtCQUFIO0FBQ0Q7QUFDRixDQUpEOztBQVFBekosS0FBSyxDQUFDMEosV0FBTixHQUFvQixVQUFVaEcsSUFBVixFQUFnQjtBQUNsQyxNQUFJc0QsU0FBUyxHQUFHbEgsZUFBZSxDQUFDcUUsV0FBaEIsR0FBOEI4QyxRQUE5QixHQUF5Q0MsWUFBekMsRUFBaEI7QUFDQSxNQUFJRixTQUFTLENBQUNHLE1BQVYsSUFBb0IsRUFBeEIsRUFBNEI7QUFDNUIsTUFBSVgsTUFBTSxHQUFHM0csY0FBYyxDQUFDc0UsV0FBZixHQUE2QnNDLFNBQTdCLE1BQTRDL0MsSUFBekQ7QUFDQSxNQUFJeUQsTUFBSjs7QUFDQSxNQUFJWCxNQUFNLElBQUlBLE1BQU0sQ0FBQ1csTUFBckIsRUFBNkI7QUFDekJBLElBQUFBLE1BQU0sR0FBR1gsTUFBTSxDQUFDVyxNQUFoQjtBQUNILEdBRkQsTUFFTyxJQUFJSCxTQUFTLENBQUNHLE1BQWQsRUFBc0I7QUFDekJBLElBQUFBLE1BQU0sR0FBR0gsU0FBUyxDQUFDRyxNQUFuQjtBQUNIOztBQUNELE1BQUlDLEtBQUssR0FBR0QsTUFBTSxDQUFDcEcsT0FBUCxDQUFlLEdBQWYsQ0FBWjs7QUFDQSxNQUFJcUcsS0FBSyxJQUFJLENBQUMsQ0FBZCxFQUFpQjtBQUNiRCxJQUFBQSxNQUFNLEdBQUdFLE1BQU0sQ0FBQ0YsTUFBTSxDQUFDRyxLQUFQLENBQWFGLEtBQUssR0FBRyxDQUFyQixFQUF3QkQsTUFBTSxDQUFDSSxNQUEvQixDQUFELENBQWY7QUFDSCxHQUZELE1BRU87QUFDSEosSUFBQUEsTUFBTSxHQUFHLENBQVQ7QUFDSDs7QUFFRCxPQUFLaEgsU0FBTCxHQUFpQjtBQUNib0ksSUFBQUEsT0FBTyxFQUFFL0IsTUFBTSxJQUFJQSxNQUFNLENBQUN1QixHQUFqQixJQUF3QixDQURwQjtBQUMrQjtBQUM1Q1MsSUFBQUEsU0FBUyxFQUFFaEMsTUFBTSxJQUFJQSxNQUFNLENBQUNpQyxJQUFqQixJQUF5QixFQUZ2QjtBQUVrQztBQUMvQ0MsSUFBQUEsVUFBVSxFQUFFbEMsTUFBTSxJQUFJQSxNQUFNLENBQUNtQyxHQUFqQixJQUF3QixDQUh2QjtBQUdzQztBQUNuREMsSUFBQUEsU0FBUyxFQUFFekIsTUFKRTtBQUlpQjtBQUM5QjBCLElBQUFBLFdBQVcsRUFBRTdCLFNBQVMsQ0FBQzhCLFFBTFY7QUFLdUI7QUFDcENhLElBQUFBLFFBQVEsRUFBRW5ELE1BQU0sSUFBSUEsTUFBTSxDQUFDb0QsSUFBakIsSUFBeUIsQ0FOdEI7QUFNbUM7QUFDaERDLElBQUFBLFNBQVMsRUFBRXJELE1BQU0sSUFBSUEsTUFBTSxDQUFDc0QsT0FBakIsSUFBNEIsQ0FQMUI7QUFPMEM7QUFDdkRDLElBQUFBLFVBQVUsRUFBRXZELE1BQU0sSUFBSUEsTUFBTSxDQUFDd0QsS0FBakIsSUFBMEIsQ0FSekI7QUFRdUM7QUFDcERDLElBQUFBLFdBQVcsRUFBRXpELE1BQU0sSUFBSUEsTUFBTSxDQUFDMEQsUUFBakIsSUFBNkIsQ0FUN0IsQ0FTaUM7O0FBVGpDLEdBQWpCO0FBV0QsQ0E1QkQsRUE4QkE7OztBQUNBbEssS0FBSyxDQUFDbUssV0FBTixHQUFvQixZQUFZO0FBQzlCLE1BQUkxSSxLQUFLLENBQUMySSxNQUFOLENBQWFDLEdBQWIsQ0FBaUIsZUFBakIsS0FBcUMsS0FBS3BLLEdBQTlDLEVBQW1EO0FBQy9DO0FBQ0g7O0FBQ0R3QixFQUFBQSxLQUFLLENBQUMySSxNQUFOLENBQWFFLEdBQWIsQ0FBaUIsZUFBakIsRUFBa0MsS0FBS3JLLEdBQXZDO0FBRUEsT0FBS3lKLFdBQUw7QUFFQXJKLEVBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZLHdCQUFaLEVBQXNDLEtBQUtILFNBQTNDOztBQUVBLE1BQUlvSyxhQUFhLElBQUksUUFBckIsRUFBK0I7QUFDN0I1SyxJQUFBQSxLQUFLLENBQUM2SyxTQUFOLENBQWdCLEtBQUtySyxTQUFyQixFQUFnQyxVQUFVNkksR0FBVixFQUFlO0FBQzdDM0ksTUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVksYUFBWixFQUEyQjBJLEdBQTNCOztBQUNBLFVBQUdBLEdBQUcsQ0FBQ3RGLElBQUosQ0FBU0ssR0FBVCxDQUFhMEcsRUFBYixJQUFpQixJQUFwQixFQUF5QjtBQUN2QnBMLFFBQUFBLE1BQU0sQ0FBQ3FMLGNBQVAsR0FBd0IxQixHQUFHLENBQUN0RixJQUFKLENBQVNLLEdBQVQsQ0FBYTBHLEVBQXJDO0FBQ0Q7O0FBQ0QsVUFBR3pCLEdBQUcsQ0FBQ3RGLElBQUosQ0FBU0ssR0FBVCxDQUFhNEcsTUFBYixJQUFxQixJQUF4QixFQUE2QjtBQUMzQnRMLFFBQUFBLE1BQU0sQ0FBQ0ssYUFBUCxHQUF1QnNKLEdBQUcsQ0FBQ3RGLElBQUosQ0FBU0ssR0FBVCxDQUFhNEcsTUFBcEM7QUFDRDtBQUNGLEtBUkQ7QUFTQTFJLElBQUFBLEVBQUUsQ0FBQzNCLEdBQUgsQ0FBTyxlQUFQO0FBQ0Q7QUFDRixDQXRCRCxFQXdCQTs7O0FBQ0FOLEtBQUssQ0FBQzRLLFVBQU4sR0FBbUIsVUFBVWxILElBQVYsRUFBZ0I7QUFDakMsT0FBS3ZDLGFBQUwsQ0FBbUIsS0FBbkI7QUFDQSxPQUFLdUksV0FBTCxDQUFpQmhHLElBQWpCO0FBRUF6QixFQUFBQSxFQUFFLENBQUMzQixHQUFILENBQU8sZUFBUCxFQUF3QixLQUFLSCxTQUE3QjtBQUVBUixFQUFBQSxLQUFLLENBQUNpTCxVQUFOLENBQWlCLEtBQUt6SyxTQUF0QixFQUFpQyxVQUFVNkksR0FBVixFQUFlO0FBQzlDM0ksSUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVksYUFBWixFQUEyQjBJLEdBQTNCOztBQUNBLFFBQUdBLEdBQUcsQ0FBQ3RGLElBQUosQ0FBU0ssR0FBVCxDQUFhMEcsRUFBYixJQUFpQixJQUFwQixFQUF5QjtBQUN2QnBMLE1BQUFBLE1BQU0sQ0FBQ3FMLGNBQVAsR0FBd0IxQixHQUFHLENBQUN0RixJQUFKLENBQVNLLEdBQVQsQ0FBYTBHLEVBQXJDO0FBQ0Q7O0FBQ0QsUUFBR3pCLEdBQUcsQ0FBQ3RGLElBQUosQ0FBU0ssR0FBVCxDQUFhNEcsTUFBYixJQUFxQixJQUF4QixFQUE2QjtBQUMzQnRMLE1BQUFBLE1BQU0sQ0FBQ0ssYUFBUCxHQUF1QnNKLEdBQUcsQ0FBQ3RGLElBQUosQ0FBU0ssR0FBVCxDQUFhNEcsTUFBcEM7QUFDRDtBQUNGLEdBUmdDLENBUS9CdEcsSUFSK0IsQ0FRMUIsSUFSMEIsQ0FBakM7QUFTRCxDQWZELEVBaUJBOzs7QUFDQXJFLEtBQUssQ0FBQzZLLFdBQU4sR0FBb0IsVUFBVUMsS0FBVixFQUFpQjtBQUNuQyxPQUFLcEIsV0FBTDtBQUNBLE1BQUksS0FBS3ZKLFNBQUwsSUFBa0IsS0FBS0EsU0FBTCxDQUFlOEosV0FBZixJQUE4QixDQUFwRCxFQUF1RDs7QUFFdkQsTUFBSWEsS0FBSyxJQUFJLElBQVQsSUFBaUJBLEtBQUssR0FBRyxDQUE3QixFQUFnQztBQUM1QixTQUFLM0ssU0FBTCxDQUFldUksVUFBZixHQUE0Qm9DLEtBQTVCO0FBQ0F6SyxJQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWSxVQUFaLEVBQXdCLEtBQUtILFNBQTdCO0FBQ0FSLElBQUFBLEtBQUssQ0FBQ2tMLFdBQU4sQ0FBa0IsS0FBSzFLLFNBQXZCLEVBQWtDLFVBQVU2SSxHQUFWLEVBQWU7QUFDL0MzSSxNQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWSxhQUFaLEVBQTJCMEksR0FBM0I7O0FBQ0EsVUFBR0EsR0FBRyxDQUFDdEYsSUFBSixDQUFTSyxHQUFULENBQWEwRyxFQUFiLElBQWlCLElBQXBCLEVBQXlCO0FBQ3ZCcEwsUUFBQUEsTUFBTSxDQUFDcUwsY0FBUCxHQUF3QjFCLEdBQUcsQ0FBQ3RGLElBQUosQ0FBU0ssR0FBVCxDQUFhMEcsRUFBckM7QUFDRDs7QUFFRCxVQUFHekIsR0FBRyxDQUFDdEYsSUFBSixDQUFTSyxHQUFULENBQWE0RyxNQUFiLElBQXFCLElBQXhCLEVBQTZCO0FBQzNCdEwsUUFBQUEsTUFBTSxDQUFDSyxhQUFQLEdBQXVCc0osR0FBRyxDQUFDdEYsSUFBSixDQUFTSyxHQUFULENBQWE0RyxNQUFwQztBQUNEO0FBQ0YsS0FUaUMsQ0FTaEN0RyxJQVRnQyxDQVMzQixJQVQyQixDQUFsQztBQVVBcEMsSUFBQUEsRUFBRSxDQUFDM0IsR0FBSCxDQUFPLGNBQVAsRUFBdUIsS0FBS0gsU0FBNUI7QUFDSCxHQWRELE1BY087QUFDSDhCLElBQUFBLEVBQUUsQ0FBQzNCLEdBQUgsQ0FBTyxnQkFBUCxFQUF5QixLQUFLSCxTQUE5QixFQUF5QzJLLEtBQXpDO0FBQ0g7QUFDRixDQXJCRDs7QUF1QkE5SyxLQUFLLENBQUMrSyxZQUFOLEdBQXFCLFlBQVksQ0FDaEMsQ0FERDs7QUFHQS9LLEtBQUssQ0FBQ2dMLGNBQU4sR0FBdUIsWUFBWSxDQUVsQyxDQUZEOztBQUlBaEwsS0FBSyxDQUFDaUwsYUFBTixHQUFzQixZQUFZLENBRWpDLENBRkQ7O0FBSUFqTCxLQUFLLENBQUNrTCxnQkFBTixHQUF5QixVQUFVQyxJQUFWLEVBQWdCO0FBQ3ZDNUssRUFBQUEsRUFBRSxDQUFDMkssZ0JBQUgsQ0FBb0I7QUFDbEJ4SCxJQUFBQSxJQUFJLEVBQUV5SCxJQURZO0FBRWxCbkosSUFBQUEsT0FGa0IsbUJBRVRSLEdBRlMsRUFFSixDQUViO0FBSmlCLEdBQXBCO0FBTUQsQ0FQRDs7QUFXQTRKLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQnJMLEtBQWpCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyB3aW5kb3cuUExBVEZPUk0gPSBcInNoX3Nka1wiOyAgICAgICAgICAgICAgICAgLy8g5bmz5Y+w5Y+3XHJcbi8vIHdpbmRvdy5DSEFOTkVMID0gXCJcIjsgICAgICAgICAgICAgICAvLyDmt7HmtbflsI/muLjmiI/lronljZPlkozoi7nmnpznmoTmuKDpgZNcclxud2luZG93LlBBQ0tBR0VfTkFNRSA9IFwi6Zeq54OB5LmL5YWJ5Y+j6KKL54mIXCI7ICAvLyDmuKDpgZPlj7dcclxuLy8gd2luZG93LlBBQ0tBR0VfVkVSU0lPTiA9IFwiMC4wLjE4XCI7XHJcbndpbmRvdy5TSF9TREtfUElEID0gXCIwXCI7ICAgICAgICAgICAgICAgICAvL+a3sea1t+Wwj+a4uOaIj+WMuuWIq+WuieWNk++8jOiLueaenOeahHBpZCDvvIwgXHJcbndpbmRvdy5TSF9TREtfQU5EX1BJRCA9IFwiUDAwMDYwODlcIjsgICAgICAgIC8v6K+X5oKmLemXqueDgeS5i+WFiemprOWMhS3lronljZNcclxud2luZG93LlNIX1NES19JT1NfUElEID0gXCJQMDAwNjA5MFwiOyAgICAgIC8v6K+X5oKmLemXqueDgeS5i+WFiemprOWMhS1pb3Ncclxud2luZG93LlNIX1NES19GT0xMT1cgPSB0cnVlOyAgICAgICAgICAgICAgICAgLy/mt7HmtbflsI/muLjmiI/lhbPms6jlip/og73mmL7pmpAgdHJ1ZTrlhbPpl60gIGZhbHNl77ya5byA5ZCvIFxyXG5cclxudmFyIFNoU2RrID0gcmVxdWlyZShcInNoc2RrXCIpO1xyXG52YXIgUm9sZUNvbnRyb2xsZXIgPSByZXF1aXJlKFwicm9sZV9jb250cm9sbGVyXCIpO1xyXG52YXIgTG9naW5Db250cm9sbGVyID0gcmVxdWlyZShcImxvZ2luX2NvbnRyb2xsZXJcIik7XHJcbnZhciBXZWxmYXJlRXZlbnQgPSByZXF1aXJlKFwid2VsZmFyZV9ldmVudFwiKTtcclxuXHJcblxyXG52YXIgU0hTREsgPSBmdW5jdGlvbigpIHtcclxuXHJcbn1cclxuXHJcblNIU0RLLnVpZCA9IG51bGw7XHJcblNIU0RLLnNpZ24gPSBudWxsO1xyXG5TSFNESy5yb2xlX2luZm8gPSBudWxsO1xyXG5cclxuLy8g5Yik5pat5piv5ZCm5o6I5p2DXHJcblNIU0RLLmluaXRTREsgPSBmdW5jdGlvbigpIHtcclxuICAgIGNvbnNvbGUubG9nKFwi5rex5rW3U0RL55u45YWzXCIpO1xyXG4gICAgY29uc29sZS5sb2cod2luZG93KTtcclxuXHJcbiAgIFxyXG4gICAgICBpZiAoIXdpbmRvdy53eCkgIHJldHVybjtcclxuICBcclxuICAgICAgdGhpcy5pbml0VG9wSW5mbygpO1xyXG5cclxuICAgICAgdmFyIHN5c3RlbUluZm8gPSB3eC5nZXRTeXN0ZW1JbmZvU3luYygpO1xyXG4gICAgICB2YXIgc3lzdGVtTmFtZSA9IHN5c3RlbUluZm8uc3lzdGVtO1xyXG4gICAgICBcclxuICAgICAgd2luZG93LlBMQVRGT1JNID0gXCJzeVwiO1xyXG4gICAgICB3aW5kb3cuUExBVEZPUk1fTkFNRSA9IFwic3lcIjtcclxuXHJcbiAgICAgIGlmKHN5c3RlbU5hbWUuaW5kZXhPZihcImlPU1wiKT4tMSl7XHJcbiAgICAgICAgU0hfU0RLX1BJRCA9IFNIX1NES19JT1NfUElEO1xyXG4gICAgICB9ZWxzZSBpZihzeXN0ZW1OYW1lLmluZGV4T2YoXCJBbmRyb2lkXCIpPi0xKXtcclxuICAgICAgICBTSF9TREtfUElEID0gU0hfU0RLX0FORF9QSUQ7XHJcbiAgICAgIH1cclxuICAgICAgQ0hBTk5FTCA9IFNIX1NES19QSUQ7XHJcbiAgICAgIFNoU2RrLmluaXQoe1xyXG4gICAgICAgIHBhY2thZ2VfY29kZTogU0hfU0RLX1BJRCwgLy/ov5nmmK/mtYvor5XnmoTliIfljIXnvJblj7fvvIzmraPlvI/nmoTor7fot5/miJHku6zov5DokKXopoFcclxuICAgICAgICAvLyBkZWJ1Zzp0cnVlXHRcdC8v57Gz5aSn5biI5rKZ566x5pSv5LuY5o6n5Yi2XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5kYXRhUGxhY2VtZW50KDEwMDAwKTtcclxuICAgICAgdGhpcy5kYXRhUGxhY2VtZW50KDIwMDAwKTtcclxuXHJcbiAgICAgIFNoU2RrLnNoYXJlKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgLy/ovazlj5HmiJDlip/ml7bosIPnlKjov5nph4zku6PnoIFcclxuICAgICAgICBjb25zb2xlLmxvZyhcIlNoU2RrLnNoYXJlIHN1Y2Nlc3MgY2FsbGJhY2tcIik7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgd3guc2V0S2VlcFNjcmVlbk9uKHtcclxuICAgICAgICBrZWVwU2NyZWVuT246IHRydWVcclxuICAgICAgfSlcclxuICAgICAgd3gub25TaG93KGZ1bmN0aW9uKHJlcyl7XHJcbiAgICAgICAgaWYocmVzKXtcclxuICAgICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoV2VsZmFyZUV2ZW50LlVwZGF0ZV9TSFdYX3Nob3dfc2NlbmVfdmFsLHJlcy5zY2VuZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHd4LnNldEtlZXBTY3JlZW5Pbih7XHJcbiAgICAgICAgICBrZWVwU2NyZWVuT246IHRydWVcclxuICAgICAgICB9KVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHd4Lm9uSGlkZShmdW5jdGlvbihyZXMpe1xyXG4gICAgICAgIHd4LnNldEtlZXBTY3JlZW5Pbih7XHJcbiAgICAgICAgICBrZWVwU2NyZWVuT246IGZhbHNlXHJcbiAgICAgICAgfSlcclxuICAgICAgfSk7XHJcbiAgICAgIFxyXG4gICAgICB3eC5nZXRTZXR0aW5nKHtcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXMpIHtcclxuICAgICAgICAgIGNjLmxvZyhyZXMpO1xyXG4gICAgICAgICAgaWYgKHJlcy5hdXRoU2V0dGluZ1tcInNjb3BlLnVzZXJJbmZvXCJdKSB7XHJcbiAgICAgICAgICAgIFNIU0RLLmxvZ2luKCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgaW5mbyA9IHd4LmdldFN5c3RlbUluZm9TeW5jKCk7XHJcbiAgICAgICAgICAgIHZhciBidXR0b24gPSB3eC5jcmVhdGVVc2VySW5mb0J1dHRvbih7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXHJcbiAgICAgICAgICAgICAgICB0ZXh0OiAnJyxcclxuICAgICAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgIGxlZnQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgIGJvdHRvbTogMCxcclxuICAgICAgICAgICAgICAgICAgd2lkdGg6IGluZm8uc2NyZWVuV2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogaW5mby5zY3JlZW5IZWlnaHQvMixcclxuICAgICAgICAgICAgICAgICAgbGluZUhlaWdodDogNDAsXHJcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJycsXHJcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZmZmZicsXHJcbiAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXHJcbiAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAxNixcclxuICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiA0LFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBidXR0b24uc2hvdygpO1xyXG4gICAgICAgICAgICBidXR0b24ub25UYXAoKHJlcyk9PntcclxuICAgICAgICAgICAgICAgIGJ1dHRvbi5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICBTaFNkay51bmlvbklkKHJlcyk7XHJcbiAgICAgICAgICAgICAgICBTSFNESy5sb2dpbigpO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbn0sXHJcblxyXG5cclxuU0hTREsubG9naW4gPSBmdW5jdGlvbigpe1xyXG4gIHRoaXMuZGF0YVBsYWNlbWVudCgzMDAwMCk7XHJcbiAgU2hTZGsubG9naW4oZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgICB0aGlzLmRhdGFQbGFjZW1lbnQoMzAwMDEpO1xyXG4gICAgICAvL+agueaNrumcgOimge+8jOWBmuebuOW6lOaTjeS9nFxyXG4gICAgICB3aW5kb3cuU0hfU0RLX1RPS0VOSUQgPSBkYXRhLnRva2VuaWQ7XHJcbiAgICAgIFxyXG4gICAgICBcclxuICAgICAgU0hTREsucG9zdEZ1bmMoZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdClcclxuICAgICAgICBTSFNESy51aWQgPSByZXN1bHQubXNnLnVpZDtcclxuICAgICAgICBTSFNESy5zaWduID0gcmVzdWx0Lm1zZy5zaWduO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHZhciBsb2dpbl9kYXRhID0ge307XHJcbiAgICAgICAgbG9naW5fZGF0YS51c3JOYW1lID0gXCJzaF9cIiArIFNIU0RLLnVpZDtcclxuICAgICAgICBsb2dpbl9kYXRhLnBhc3N3b3JkID0gXCJ3eDEyMzQ1NlwiO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwi5rex5rW35bCP5ri45oiP5Yid5aeL5YyW5oiQ5Yqf77yM5byA5aeL6K+35rGC5pyN5Yqh5Zmo5YiX6KGoXCIpO1xyXG4gICAgICAgIExvZ2luQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmxvZ2luUGxhdGZvcm1SZXF1ZXN0KGxvZ2luX2RhdGEpO1xyXG4gICAgfS5iaW5kKHRoaXMpKVxyXG4gIH0pO1xyXG59XHJcblxyXG5TSFNESy5wb3N0RnVuYyA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xyXG4gIHZhciB4aHIgPSBjYy5sb2FkZXIuZ2V0WE1MSHR0cFJlcXVlc3QoKTtcclxuICB2YXIgdXJsID0gXCJodHRwczovL3MxLWg1bWxmLWg1c3N6Zy5zaGl5dWVnYW1lLmNvbS9hcGkucGhwL3BmL2RpYWkvbG9naW4vXCI7XHJcbiAgdXJsID0gdXJsICsgXCI/dG9rZW5pZD1cIiArIFNIX1NES19UT0tFTklEO1xyXG4gIHVybCA9IHVybCArIFwiJmNwcz1cIiArIFNIX1NES19QSUQ7XHJcbiAgeGhyLm9wZW4oXCJQT1NUXCIsIHVybCk7XHJcbiAgLy94aHIub3BlbihcIkdFVFwiLCBTZXJ2ZXJMaW5rK2xpbmsrXCI/XCIrcGFybSxmYWxzZSk7XHJcbiAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIik7XHJcbiAgeGhyLnNlbmQoKTtcclxuICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0gNCAmJiAoeGhyLnN0YXR1cyA+PSAyMDAgJiYgeGhyLnN0YXR1cyA8PSAyMDcpKSB7XHJcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICAgIGNjLmxvZyhcInJlc3VsdD09PlwiLCByZXN1bHQpXHJcbiAgICAgICAgICBpZiAocmVzdWx0W1wiZXJyb3JcIl0gPT0gLTEpIHtcclxuICAgICAgICAgICAgICBtZXNzYWdlKHJlc3VsdFtcIm1zZ1wiXSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgU0hTREsuZGF0YVBsYWNlbWVudCg0MDAwMCk7XHJcbiAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpO1xyXG4gICAgICB9XHJcbiAgfTtcclxufVxyXG5cclxuLy8g6K6h566X5bCP56iL5bqP6I+c5Y2V5L2N572uXHJcblNIU0RLLmluaXRUb3BJbmZvID0gZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgbWVudUluZm8gPSB3eC5nZXRNZW51QnV0dG9uQm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICBcclxuICAgIHZhciBzeXN0ZW1JbmZvID0gd3guZ2V0U3lzdGVtSW5mb1N5bmMoKTtcclxuICAgIGlmKG1lbnVJbmZvLnRvcD4zMCl7XHJcbiAgICAgIHdpbmRvdy5XWF9GSVQgPSBtZW51SW5mby50b3AgLyBzeXN0ZW1JbmZvLnNjcmVlbkhlaWdodCAqMC43IHx8IDA7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgd2luZG93LldYX0ZJVCA9IG1lbnVJbmZvLnRvcCAvIHN5c3RlbUluZm8uc2NyZWVuSGVpZ2h0ICowLjEgfHwgMDtcclxuICAgIH1cclxuICAgIFxyXG4gICAgY29uc29sZS5sb2coXCLlvq7kv6HlsI/muLjmiI/oj5zljZXmoI/nmoTpgILphY3lgLxcIik7XHJcbiAgICBjYy5sb2coV1hfRklUKTtcclxufVxyXG5cclxuLy8g6ZO+5o6l5ri45oiP5pyN77yM55m76ZmG5ri45oiPXHJcblNIU0RLLmxvZ2luR2FtZSA9IGZ1bmN0aW9uICgpIHtcclxuICB2YXIgbG9naW5fZGF0YSA9IFtdO1xyXG4gIHZhciBfYWNjb3VudCA9IFwic2hfXCIgKyBTSFNESy51aWQ7XHJcbiAgdmFyIHNpZ24gPSBTSFNESy5zaWduO1xyXG4gIGNvbnNvbGUubG9nKFwiX2FjY291bnQ9PT5cIiwgX2FjY291bnQpO1xyXG5cclxuICBsb2dpbl9kYXRhID0gW1xyXG4gICAgICB7IGtleTogXCJjaGFubmVsXCIsIHZhbDogU0hfU0RLX1BJRCB9LFxyXG4gICAgICB7IGtleTogXCJwYWNrYWdlX25hbWVcIiwgdmFsOiBQQUNLQUdFX05BTUUgfSxcclxuICAgICAgeyBrZXk6IFwicGFja2FnZV92ZXJzaW9uXCIsIHZhbDogUEFDS0FHRV9WRVJTSU9OIH0sXHJcbiAgICAgIHsga2V5OiBcInBsYXRmb3JtXCIsIHZhbDogUExBVEZPUk0gfSxcclxuICAgICAgeyBrZXk6IFwiYWNjb3VudFwiLCB2YWw6IF9hY2NvdW50IH0sXHJcbiAgICAgIHsga2V5OiBcInRva2VuXCIsIHZhbDogU0hfU0RLX1RPS0VOSUQgfSxcclxuICAgICAgeyBrZXk6IFwic2lnblwiLCB2YWw6IHNpZ24gfVxyXG4gIF07XHJcblxyXG4gIGNvbnNvbGUubG9nKFwibG9naW5fZGF0YT09PlwiLCBsb2dpbl9kYXRhKTtcclxuXHJcbiAgTG9naW5Db250cm9sbGVyLmdldEluc3RhbmNlKCkuY3VzU0RLTG9naW5fMihsb2dpbl9kYXRhKTtcclxufVxyXG5cclxuU0hTREsucGF5ID0gZnVuY3Rpb24obW9uZXksIGJ1eU51bSwgcHJvZElkLCBwcm9kdWN0TmFtZSwgcHJvZHVjdERlc2MsIGV4dGVuc2lvbiwgY29pbk51bSkge1xyXG4gICAgXHJcbiAgICB2YXIgcGF5Q2FsbEZ1bmMgPSBmdW5jdGlvbigpe1xyXG4gICAgICB2YXIgcm9sZVZvID0gUm9sZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRSb2xlVm8oKTtcclxuICAgICAgaWYgKCFyb2xlVm8pIHJldHVybjtcclxuICAgICAgXHJcbiAgICAgIC8v5pe26Ze05oizXHJcbiAgICAgIHZhciBkYXRlX3RpbWUgPSBNYXRoLmNlaWwoRGF0ZS5ub3coKSAvIDEwMDApO1xyXG5cclxuICAgICAgLy/lhYXlgLzorqLljZXlj7dcclxuICAgICAgdmFyIGdhbWVfbnVtYmVyID0gU0hfU0RLX1BJRDsvL+a4uOaIj+e8luWPt1AqKioqKio7XHJcbiAgICAgIGdhbWVfbnVtYmVyID0gZ2FtZV9udW1iZXIgKyBcIl9cIiArIFNIU0RLLnVpZDsgICAgLy91aWRcclxuICAgICAgZ2FtZV9udW1iZXIgPSBnYW1lX251bWJlciArIFwiX1wiICsgZGF0ZV90aW1lOyAgICAvL+aXtumXtOaIs1xyXG4gICAgICBjYy5sb2coXCLlhYXlgLzorqLljZXlj7dnYW1lX251bWJlcj09PlwiLCBnYW1lX251bWJlcilcclxuXHJcbiAgICAgIHByb2R1Y3ROYW1lID0gcHJvZHVjdE5hbWUgfHwgKG1vbmV5ICogMTApICsgXCLpkrvnn7NcIjtcclxuICAgICAgbGV0IGxvZ2luRGF0YSA9IExvZ2luQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldE1vZGVsKCkuZ2V0TG9naW5EYXRhKCk7XHJcbiAgICAgIGxldCBzcnZfaWQgPSBcIlwiO1xyXG4gICAgICBpZiAocm9sZVZvICYmIHJvbGVWby5zcnZfaWQpIHtcclxuICAgICAgICAgIHNydl9pZCA9IHJvbGVWby5zcnZfaWQ7XHJcbiAgICAgIH0gZWxzZSBpZiAobG9naW5EYXRhLnNydl9pZCkge1xyXG4gICAgICAgICAgc3J2X2lkID0gbG9naW5EYXRhLnNydl9pZDtcclxuICAgICAgfVxyXG4gICAgICBsZXQgaW5kZXggPSBzcnZfaWQuaW5kZXhPZihcIl9cIik7XHJcbiAgICAgIGlmIChpbmRleCAhPSAtMSkge1xyXG4gICAgICAgICAgc3J2X2lkID0gTnVtYmVyKHNydl9pZC5zbGljZShpbmRleCArIDEsIHNydl9pZC5sZW5ndGgpKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHNydl9pZCA9IDA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8v5YWF5YC85ouT5bGV5YaF5a65XHJcbiAgICAgIHZhciBzZXZlckluZm8gPSByb2xlVm8uc3J2X2lkLnNwbGl0KFwiX1wiKTtcclxuICAgICAgdmFyIHBsYXRmb3JtID0gc2V2ZXJJbmZvWzBdIHx8IFwiXCI7XHJcbiAgICAgIHZhciB6b25lX2lkID0gc2V2ZXJJbmZvWzFdO1xyXG4gICAgICB2YXIgY3BzID0gU0hfU0RLX1BJRDtcclxuICAgICAgdmFyIGNoYW5uZWwgPSBTSF9TREtfUElEO1xyXG5cclxuICAgICAgdmFyIF9leHRlbnNpb24gPSByb2xlVm8ucmlkICsgXCIkJFwiICsgcGxhdGZvcm0gKyBcIiQkXCIgKyB6b25lX2lkICtcclxuICAgICAgICAgIFwiJCRcIiArIGNoYW5uZWwgKyBcIiQkXCIgKyBwcm9kSWQgKyBcIiQkXCIgKyBwcm9kdWN0TmFtZSArIFwiJCRcIiArIGNwcyArIFwiJCRcIiArIGRhdGVfdGltZTtcclxuICAgICAgY2MubG9nKFwi5ouT5bGV5Y+C5pWwX2V4dGVuc2lvbj09PlwiLCBfZXh0ZW5zaW9uKVxyXG4gICAgICB2YXIgYmFzZV82NCA9IHJlcXVpcmUoXCJiYXNlNjRcIikuQmFzZTY0O1xyXG4gICAgICBfZXh0ZW5zaW9uID0gYmFzZV82NC5lbmNvZGUoX2V4dGVuc2lvbik7XHJcbiAgICAgIGNjLmxvZyhcImJhc2U2NOaLk+WxleWPguaVsF9leHRlbnNpb249PT5cIiwgX2V4dGVuc2lvbik7XHJcblxyXG4gICAgICBcclxuICAgICAgXHJcbiAgICAgIHZhciBwYXJhbXMgPSB7XHJcbiAgICAgICAgICBnYW1lX25vOiBnYW1lX251bWJlciwgICAvL+a4uOaIj+iuouWNleWPt++8jOeUseWJjeerr+aLvOaOpVxyXG4gICAgICAgICAgb3JkZXJfbW9uZXk6IG1vbmV5ICogMTAwLCAgICAgICAgICAgICAgICAgICAgICAvL+WFheWAvOmHkemine+8jOWNleS9jSDliIZcclxuICAgICAgICAgIG9yZGVyX25hbWU6IHByb2R1Y3ROYW1lLCAgICAgICAgICAgICAvL+iuouWNleWQjeensFxyXG4gICAgICAgICAgcm9sZV9pZDogcm9sZVZvLnJpZCwgICAgICAgICAgICAgICAgICAgICAgIC8v6KeS6ImyaWTvvIzlv4XkvKDpoblcclxuICAgICAgICAgIHJvbGVfbmFtZTogcm9sZVZvLm5hbWUsICAgICAgICAgICAgICAgICAgICAvL+inkuiJsuWQjSxcclxuICAgICAgICAgIHJvbGVfbGV2ZWw6IHJvbGVWby5sZXYsICAgICAgICAgICAgICAgICAgICAgIC8v6KeS6Imy562J57qn77yM55So5LqO5Yik5pat6KeS6Imy562J57qn77yM5o6n5Yi25YWF5YC85YWl5Y+j77yM5b+F5Lyg6aG5XHJcbiAgICAgICAgICBzZXJ2ZXJfaWQ6IHNydl9pZCwgICAgICAgICAgICAgICAgICAgICAgICAvL+WMuuacjWlk77yM5b+F5Lyg6aG5XHJcbiAgICAgICAgICBzZXJ2ZXJfbmFtZTogbG9naW5EYXRhLnNydl9uYW1lLCAgICAgICAgICAgICAgLy/ljLrmnI3lkI3np7DvvIzlv4XkvKDpoblcclxuICAgICAgICAgIGV4dDogX2V4dGVuc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v5omp5bGV5L+h5oGv77yM6YCa55+l5Y+R6LSn5pe25Lya5Y6f5qC36L+U5ZueXHJcbiAgICAgICAgfTtcclxuICAgICAgXHJcbiAgICAgIGNvbnNvbGUubG9nKFwi5YWF5YC85pWw5o2uXCIscGFyYW1zKTtcclxuICAgICAgXHJcbiAgICAgIFNoU2RrLnBheShwYXJhbXMsXHJcbiAgICAgICAgICBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGRhdGEucmV0ID09ICdTVUNDRVNTJykgeyAvL+WJjeerr+mAmuefpe+8jOS4jeiDveWBmuS4uuWunumZheWPkei0p+eahOWHreivge+8jOecn+WunuaDheWGteS7peacjeWKoeerr+mAmuefpeS4uuWHhlxyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIuaUr+S7mOWujOaIkFwiKTtcclxuICAgICAgICAgICAgICAgICAgd3guc2hvd01vZGFsKHtcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCLmlK/ku5jmiJDlip9cIixcclxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBcIuaUr+S7mOaIkOWKn1wiXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5yZXQgPT0gJ1lEX1RJUFMnKSB7XHJcbiAgICAgICAgICAgICAgICB3eC5zaG93TW9kYWwoe1xyXG4gICAgICAgICAgICAgICAgICB0aXRsZTogXCLmuKnppqjmj5DnpLpcIixcclxuICAgICAgICAgICAgICAgICAgY29udGVudDogZGF0YS5tc2cgIC8v5YWF5YC85byV5a+85paH5a2X77yM55Sx5oiR5Lus5ZCO5Y+w6YWN572uXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEucmV0ID09J05PVF9BTExPVycpe1xyXG4gICAgICAgICAgICAgICAgd3guc2hvd01vZGFsKHtcclxuICAgICAgICAgICAgICAgICAgdGl0bGU6IFwi5pSv5LuY5aSx6LSlXCIsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFwi5pqC5LiN5pSv5oyB5pSv5LuYXCJcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLmlK/ku5jlj5bmtojmiJblpLHotKVcIik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICk7XHJcbiAgICB9LmJpbmQodGhpcylcclxuICAgIHJlcXVpcmUoXCJ0aXBzX2NvbnRyb2xsZXJcIikuZ2V0SW5zdGFuY2UoKS5zaG93Rmlyc3RDaGFyZ2UocGF5Q2FsbEZ1bmMpO1xyXG59XHJcblxyXG4vL+S4u+WKqOaLiei1t+i9rOWPkSDlj6/nlKjkuo7muLjmiI/lhoXmjInpkq7kuovku7bop6blj5HvvIzliIbkuqvlhoXlrrnnlLHmiJHku6zov5novrnlkI7lj7DphY3nva7vvIzkuI3pnIDopoHkvKDlj4LvvIzjgJDmlK/mjIHkvKDlj4LvvIzmoLzlvI/lpoLvvJprZXk9MTExJmFhYT0zMzPjgJFcclxuLy8g5Lyg5Y+C5qih5byP77yaU2hTZGsuZ29TaGFyZSgna2V5PTExMSZhYWE9MzMzJyk7XHJcbi8vIOS4jeS8oOWPguaooeW8j++8mlNoU2RrLmdvU2hhcmUoKTtcclxuU0hTREsuZ29TaGFyZSA9IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgaWYoZGF0YSl7XHJcbiAgICBTaFNkay5nb1NoYXJlKGRhdGEpO1xyXG4gIH1lbHNle1xyXG4gICAgU2hTZGsuZ29TaGFyZSgpO1xyXG4gIH1cclxufVxyXG5cclxuLy8g6I635Y+W5YWs5LyX5Y+35YWz5rOo54q25oCB5o6l5Y+j44CQ54m55Yir6K+05piO77ya55uu5YmN6L+Y5rKh5pyJ5YWs5LyX5Y+377yM5omA5Lul5pqC5pe25rKh5pyJ5YWz5rOo5Zue6LCD5L+h5oGv44CRXHJcblNIU0RLLnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcclxuICBTaFNkay5zdWJzY3JpYmUoZnVuY3Rpb24ocmV0KXtcclxuICAgIC8v6K+05piO44CQ5YWz5rOo54q25oCBLT5zdWJzY3JpYmXvvIwx77ya5bey5YWz5rOo77yMMO+8muWPlua2iOWFs+azqO+8jOWFs+azqHzlj5bmtojlhbPms6jml7bpl7QtPnN1YnNjcmliZV90aW1l44CRXHJcbiAgICBjb25zb2xlLmxvZygn5YWs5LyX5Y+35YWz5rOo54q25oCB6I635Y+W57uT5p6cJyxyZXQpO1xyXG4gIH0pO1xyXG59XHJcblxyXG4vLyDmt7vliqDmlbDmja7ln4vngrnmjqjpgIHmlrnms5XvvIzor7flnKjlr7nlupTnmoToioLngrnkuIrosIPnlKjmraTmlrnms5VcclxuU0hTREsuZGF0YVBsYWNlbWVudCA9IGZ1bmN0aW9uIChhY3Rpb25JZCkge1xyXG4gIFNoU2RrLmRhdGFQbGFjZW1lbnQoe1xyXG4gICAgYWN0aW9uOiBhY3Rpb25JZCxcclxuICB9KTtcclxufVxyXG5cclxuLy8g5a6i5pyNXHJcblNIU0RLLm9wZW5DdXN0b21lclNlcnZpY2VDb252ZXJzYXRpb24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgaWYod2luZG93Lnd4KXtcclxuICAgIHd4Lm9wZW5DdXN0b21lclNlcnZpY2VDb252ZXJzYXRpb24oKTtcclxuICB9XHJcbn1cclxuXHJcblxyXG5cclxuU0hTREsuc2V0Um9sZUluZm8gPSBmdW5jdGlvbiAoZGF0YSkge1xyXG4gIGxldCBsb2dpbkRhdGEgPSBMb2dpbkNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRNb2RlbCgpLmdldExvZ2luRGF0YSgpO1xyXG4gIGlmIChsb2dpbkRhdGEuc3J2X2lkID09IFwiXCIpIHJldHVybjtcclxuICBsZXQgcm9sZVZvID0gUm9sZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRSb2xlVm8oKSB8fCBkYXRhO1xyXG4gIGxldCBzcnZfaWQ7XHJcbiAgaWYgKHJvbGVWbyAmJiByb2xlVm8uc3J2X2lkKSB7XHJcbiAgICAgIHNydl9pZCA9IHJvbGVWby5zcnZfaWQ7XHJcbiAgfSBlbHNlIGlmIChsb2dpbkRhdGEuc3J2X2lkKSB7XHJcbiAgICAgIHNydl9pZCA9IGxvZ2luRGF0YS5zcnZfaWQ7XHJcbiAgfVxyXG4gIGxldCBpbmRleCA9IHNydl9pZC5pbmRleE9mKFwiX1wiKTtcclxuICBpZiAoaW5kZXggIT0gLTEpIHtcclxuICAgICAgc3J2X2lkID0gTnVtYmVyKHNydl9pZC5zbGljZShpbmRleCArIDEsIHNydl9pZC5sZW5ndGgpKTtcclxuICB9IGVsc2Uge1xyXG4gICAgICBzcnZfaWQgPSAwO1xyXG4gIH1cclxuICBcclxuICB0aGlzLnJvbGVfaW5mbyA9IHtcclxuICAgICAgcm9sZV9pZDogcm9sZVZvICYmIHJvbGVWby5yaWQgfHwgMCxcdFx0XHRcdFx0XHRcdFx0XHQvL+inkuiJsklEXHJcbiAgICAgIHJvbGVfbmFtZTogcm9sZVZvICYmIHJvbGVWby5uYW1lIHx8IFwiXCIsXHRcdFx0XHRcdFx0XHRcdC8v6KeS6Imy5ZCNXHJcbiAgICAgIHJvbGVfbGV2ZWw6IHJvbGVWbyAmJiByb2xlVm8ubGV2IHx8IDEsXHRcdFx0XHRcdFx0XHRcdFx0ICAgIC8v6KeS6Imy562J57qnXHJcbiAgICAgIHNlcnZlcl9pZDogc3J2X2lkLFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8v5Yy65pyN57yW5Y+3XHJcbiAgICAgIHNlcnZlcl9uYW1lOiBsb2dpbkRhdGEuc3J2X25hbWUsIFx0XHRcdC8v5Yy65pyN5ZCN56ewXHJcbiAgICAgIGhhc19nb2xkOiByb2xlVm8gJiYgcm9sZVZvLmdvbGQgfHwgMCxcdFx0XHRcdFx0XHRcdFx0XHQgIC8v6KeS6Imy5omA5oyB5pyJ6LSn5biB5pWwXHJcbiAgICAgIHZpcF9sZXZlbDogcm9sZVZvICYmIHJvbGVWby52aXBfbGV2IHx8IDAsXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAvL+inkuiJsnZpcOetiee6pyDmsqHmnInlj6/ku6XkvKAwXHJcbiAgICAgIHJvbGVfcG93ZXI6IHJvbGVWbyAmJiByb2xlVm8ucG93ZXIgfHwgMCwgXHRcdFx0XHRcdFx0XHRcdFx0ICAvL2ludCDmiJjlipvjgIHmrablipvkuYvnsbvop5LoibLnmoTmoLjlv4PmlbDlgLzvvIzmsqHmnInlj6/ku6XkvKAwXHJcbiAgICAgIGNyZWF0ZV90aW1lOiByb2xlVm8gJiYgcm9sZVZvLnJlZ190aW1lIHx8IDAgICAvL+aXtumXtOaIs++8jOWNleS9je+8muenklxyXG4gIH07XHJcbn1cclxuXHJcbi8v6KeS6Imy55m75b2V5o+Q5LqkXHJcblNIU0RLLnN1Ym1pdExvZ2luID0gZnVuY3Rpb24gKCkge1xyXG4gIGlmIChnY29yZS5TeXNFbnYuZ2V0KFwic2hzZGtfYWNjb3VudFwiKSA9PSB0aGlzLnVpZCkge1xyXG4gICAgICByZXR1cm5cclxuICB9XHJcbiAgZ2NvcmUuU3lzRW52LnNldChcInNoc2RrX2FjY291bnRcIiwgdGhpcy51aWQpO1xyXG5cclxuICB0aGlzLnNldFJvbGVJbmZvKCk7XHJcblxyXG4gIGNvbnNvbGUubG9nKFwi6KeS6Imy55m75b2V5o+Q5Lqk5LiA5qyhLS1yb2xlX2luZm89PT5cIiwgdGhpcy5yb2xlX2luZm8pO1xyXG5cclxuICBpZiAoUExBVEZPUk1fVFlQUiA9PSBcIlNIX1NES1wiKSB7XHJcbiAgICBTaFNkay5lbnRlckdhbWUodGhpcy5yb2xlX2luZm8sIGZ1bmN0aW9uIChyZXQpIHtcclxuICAgICAgY29uc29sZS5sb2coJ+inkuiJsuS4iuaKpe+8jOi/lOWbnuaUr+S7mOaDheWGtScsIHJldCk7XHJcbiAgICAgIGlmKHJldC5kYXRhLm1zZy5zcCE9bnVsbCl7XHJcbiAgICAgICAgd2luZG93LklTX1NIT1dfQ0hBUkdFID0gcmV0LmRhdGEubXNnLnNwO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKHJldC5kYXRhLm1zZy5mb2xsb3chPW51bGwpe1xyXG4gICAgICAgIHdpbmRvdy5TSF9TREtfRk9MTE9XID0gcmV0LmRhdGEubXNnLmZvbGxvdztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBjYy5sb2coXCLnmbvlvZXkuIrmiqXmlrnms5XmiJDlip8tLS0tLVwiKVxyXG4gIH1cclxufVxyXG5cclxuLy/liJvlu7rop5LoibLkv6Hmga/kuIrmiqVcclxuU0hTREsuY3JlYXRlUm9sZSA9IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgdGhpcy5kYXRhUGxhY2VtZW50KDkwMjAwKTtcclxuICB0aGlzLnNldFJvbGVJbmZvKGRhdGEpO1xyXG5cclxuICBjYy5sb2coXCLliJvop5Lmj5DkuqTkuIDmrKHkuIrmiqUtLS0tPlwiLCB0aGlzLnJvbGVfaW5mbyk7XHJcbiAgXHJcbiAgU2hTZGsuY3JlYXRlUm9sZSh0aGlzLnJvbGVfaW5mbywgZnVuY3Rpb24gKHJldCkge1xyXG4gICAgY29uc29sZS5sb2coJ+inkuiJsuS4iuaKpe+8jOi/lOWbnuaUr+S7mOaDheWGtScsIHJldCk7XHJcbiAgICBpZihyZXQuZGF0YS5tc2cuc3AhPW51bGwpe1xyXG4gICAgICB3aW5kb3cuSVNfU0hPV19DSEFSR0UgPSByZXQuZGF0YS5tc2cuc3A7XHJcbiAgICB9XHJcbiAgICBpZihyZXQuZGF0YS5tc2cuZm9sbG93IT1udWxsKXtcclxuICAgICAgd2luZG93LlNIX1NES19GT0xMT1cgPSByZXQuZGF0YS5tc2cuZm9sbG93O1xyXG4gICAgfVxyXG4gIH0uYmluZCh0aGlzKSk7XHJcbn1cclxuXHJcbi8v6KeS6Imy5Y2H57qn5L+h5oGv5LiK5oqlXHJcblNIU0RLLnJvbGVVcExldmVsID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgdGhpcy5zZXRSb2xlSW5mbygpO1xyXG4gIGlmICh0aGlzLnJvbGVfaW5mbyAmJiB0aGlzLnJvbGVfaW5mby5jcmVhdGVfdGltZSA9PSAwKSByZXR1cm5cclxuXHJcbiAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgPiAxKSB7XHJcbiAgICAgIHRoaXMucm9sZV9pbmZvLnJvbGVfbGV2ZWwgPSB2YWx1ZTtcclxuICAgICAgY29uc29sZS5sb2coJ+inkuiJsuWNh+e6p+S/oeaBr+S4iuaKpScsIHRoaXMucm9sZV9pbmZvKTtcclxuICAgICAgU2hTZGsucm9sZVVwTGV2ZWwodGhpcy5yb2xlX2luZm8sIGZ1bmN0aW9uIChyZXQpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygn6KeS6Imy5LiK5oql77yM6L+U5Zue5pSv5LuY5oOF5Ya1JywgcmV0KTtcclxuICAgICAgICBpZihyZXQuZGF0YS5tc2cuc3AhPW51bGwpe1xyXG4gICAgICAgICAgd2luZG93LklTX1NIT1dfQ0hBUkdFID0gcmV0LmRhdGEubXNnLnNwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBpZihyZXQuZGF0YS5tc2cuZm9sbG93IT1udWxsKXtcclxuICAgICAgICAgIHdpbmRvdy5TSF9TREtfRk9MTE9XID0gcmV0LmRhdGEubXNnLmZvbGxvdztcclxuICAgICAgICB9XHJcbiAgICAgIH0uYmluZCh0aGlzKSk7XHJcbiAgICAgIGNjLmxvZyhcIuinkuiJsuWNh+e6p+S4iuaKpeaPkOS6pC0tLT5cIiwgdGhpcy5yb2xlX2luZm8pO1xyXG4gIH0gZWxzZSB7XHJcbiAgICAgIGNjLmxvZyhcIuinkuiJsuWNh+e6p+S4iuaKpeaPkOS6pOWksei0pS0tLT5cIiwgdGhpcy5yb2xlX2luZm8sIHZhbHVlKTtcclxuICB9XHJcbn1cclxuXHJcblNIU0RLLnNka0JhY2tMb2dpbiA9IGZ1bmN0aW9uICgpIHtcclxufVxyXG5cclxuU0hTREsuZ2V0Q3VyckNoYW5uZWwgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG59XHJcblxyXG5TSFNESy5nZXRTdWJDaGFubmVsID0gZnVuY3Rpb24gKCkge1xyXG5cclxufVxyXG5cclxuU0hTREsuc2V0Q2xpcGJvYXJkRGF0YSA9IGZ1bmN0aW9uIChkZXNjKSB7XHJcbiAgd3guc2V0Q2xpcGJvYXJkRGF0YSh7XHJcbiAgICBkYXRhOiBkZXNjLFxyXG4gICAgc3VjY2VzcyAocmVzKSB7XHJcbiAgICAgIFxyXG4gICAgfVxyXG4gIH0pXHJcbn1cclxuXHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTSFNESztcclxuIl19
|