|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/welfare/welfare_controller.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, 'ed0a5fimtFPirDnn8tnfqpv', 'welfare_controller');
|
// Scripts/mod/welfare/welfare_controller.js
|
|
"use strict";
|
|
var _cc$Class;
|
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
// --------------------------------------------------------------------
|
// @author: xxx@syg.com(必填, 创建模块的人员)
|
// @description:
|
// 福利
|
// <br/>Create: 2018-12-19 10:57:29
|
// --------------------------------------------------------------------
|
var RoleController = require("role_controller");
|
|
var MainuiController = require("mainui_controller");
|
|
var MainuiConst = require("mainui_const");
|
|
var WelfareEvent = require("welfare_event");
|
|
var WelfareConst = require("welfare_const"); // var ActionConst = require("action_const");
|
|
|
var SHOW_BAIDU_TIEBA = true; // 是否显示百度贴吧
|
|
var SHOW_SINGLE_INVICODE = true; // 是否显示个人推荐码
|
|
var SHOW_BIND_PHONE = true; // 是否需要显示手机绑定界面
|
|
var SHOW_WECHAT_CERTIFY = true; // 是否显示微信公众号
|
|
var SHOW_GAME_SHARE = true; // 游戏分享
|
|
var WelfareController = cc.Class((_cc$Class = {
|
"extends": BaseController,
|
ctor: function ctor() {},
|
// 初始化配置数据
|
initConfig: function initConfig() {
|
var WelfareModel = require("welfare_model");
|
|
this.model = new WelfareModel();
|
this.model.initConfig();
|
this.welfare_list = {};
|
this.welfare_status_list = {}; //福利状态列表
|
|
this.welfare_cache_red = {}; //福利缓存红点状态
|
},
|
// 返回当前的model
|
getModel: function getModel() {
|
return this.model;
|
},
|
// 注册监听事件
|
registerEvents: function registerEvents() {
|
if (this.init_role_event == null) {
|
this.init_role_event = gcore.GlobalEvent.bind(EventId.EVT_ROLE_CREATE_SUCCESS, function () {
|
gcore.GlobalEvent.unbind(this.init_role_event);
|
this.init_role_event = null; // this.requestInitProto();
|
|
this.role_vo = RoleController.getInstance().getRoleVo();
|
|
if (this.role_assets_event == null) {
|
this.role_assets_event = this.role_vo.bind(EventId.UPDATE_ROLE_ATTRIBUTE, function (key, value) {
|
if (key == "lev") {
|
this.updateWelfareRedStatus(value);
|
}
|
}, this);
|
}
|
}, this);
|
} //断线重连请求月卡
|
|
|
if (this.re_link_game_event == null) {
|
this.re_link_game_event = gcore.GlobalEvent.bind(EventId.EVT_RE_LINK_GAME, function () {
|
var GuideController = require("guide_controller");
|
|
if (!GuideController.getInstance().isInGuide()) this.openMainWindow(false); //判断精彩活动图标在不在,请求精彩活动的数据
|
|
var vo = MainuiController.getInstance().getFunctionIconById(MainuiConst.icon.welfare);
|
|
if (vo != null) {
|
this.sender16705();
|
}
|
}, this);
|
}
|
},
|
// 注册协议接受事件
|
registerProtocals: function registerProtocals() {
|
this.RegisterProtocal(14100, this.handle14100); //签到信息
|
|
this.RegisterProtocal(14101, this.handle14101); //领取签到奖励
|
|
this.RegisterProtocal(16705, this.handle16705); //月卡信息
|
|
this.RegisterProtocal(16706, this.handle16706); //领取月卡
|
|
this.RegisterProtocal(21002, this.handle21002); //今日充值次数
|
//调查问卷
|
|
this.RegisterProtocal(24600, this.handle24600);
|
this.RegisterProtocal(24601, this.handle24601);
|
this.RegisterProtocal(24602, this.handle24602);
|
this.RegisterProtocal(24603, this.handle24603);
|
this.RegisterProtocal(24604, this.handle24604);
|
this.RegisterProtocal(21007, this.handle21007); // 每日礼
|
|
this.RegisterProtocal(21008, this.handle21008);
|
this.RegisterProtocal(21009, this.handle21009); // 手机绑定奖励状态
|
|
this.RegisterProtocal(16635, this.handle16635);
|
this.RegisterProtocal(16636, this.handle16636);
|
this.RegisterProtocal(16697, this.handle16697);
|
this.RegisterProtocal(16698, this.handle16698); // 微信公众号
|
|
this.RegisterProtocal(16633, this.handle16633);
|
this.RegisterProtocal(16634, this.handle16634); //爱微游分享和关注
|
|
this.RegisterProtocal(16691, this.handle16691);
|
this.RegisterProtocal(16693, this.handle16693);
|
this.RegisterProtocal(16692, this.handle16692);
|
this.RegisterProtocal(16694, this.handle16694); //深海小游戏收藏
|
|
this.RegisterProtocal(16695, this.handle16695);
|
this.RegisterProtocal(16696, this.handle16696);
|
},
|
//登录请求的协议
|
requestInitProto: function requestInitProto() {
|
this.sender14100(); //签到红点
|
|
this.sender16705(); //月卡信息
|
|
this.sender24600(); //问卷
|
|
this.sender21008(); //每日礼
|
|
this.sender16635(); //手机绑定奖励状态
|
|
this.sender16633();
|
this.send16693();
|
this.send16691();
|
},
|
//签到信息
|
sender14100: function sender14100() {
|
var protocal = {};
|
this.SendProtocal(14100, protocal);
|
},
|
//月卡信息
|
sender16705: function sender16705() {
|
var protocal = {};
|
this.SendProtocal(16705, protocal);
|
},
|
//调查问卷状态
|
sender24600: function sender24600() {
|
this.SendProtocal(24600, {});
|
},
|
//请求每日礼状态
|
sender21008: function sender21008() {
|
this.SendProtocal(21008, {});
|
},
|
//请求手机绑定信息
|
sender16635: function sender16635() {
|
this.SendProtocal(16635, {});
|
},
|
sender16633: function sender16633() {
|
this.SendProtocal(16633, {});
|
},
|
handle14100: function handle14100(data) {
|
gcore.GlobalEvent.fire(WelfareEvent.Update_Sign_Info, data);
|
var is_show = false;
|
var recharge_count = this.model.getRechargeCount();
|
|
if (data.status == 0 || recharge_count > 0 && data.status == 1) {
|
is_show = true;
|
}
|
|
this.setWelfareStatus(WelfareConst.WelfareIcon.sign, is_show);
|
},
|
//领取签到奖励
|
sender14101: function sender14101() {
|
var protocal = {};
|
this.SendProtocal(14101, protocal);
|
},
|
handle14101: function handle14101(data) {
|
message(data.msg);
|
|
if (data.code == 1) {
|
gcore.GlobalEvent.fire(WelfareEvent.Sign_Success, data);
|
var is_show = false;
|
var recharge_count = this.model.getRechargeCount();
|
|
if (data.status == 0 || recharge_count > 0 && data.status == 1) {
|
is_show = true;
|
}
|
|
this.setWelfareStatus(WelfareConst.WelfareIcon.sign, is_show);
|
}
|
},
|
handle16705: function handle16705(data) {
|
this.model.setYueka(data);
|
gcore.GlobalEvent.fire(WelfareEvent.Update_Yueka, data);
|
var supre_status = false; //至尊月卡
|
|
var honor_status = false; //荣耀月卡
|
|
if (data.card1_is_reward == 1) {
|
supre_status = true;
|
}
|
|
if (data.card2_is_reward == 1) {
|
honor_status = true;
|
}
|
|
this.setWelfareStatus(WelfareConst.WelfareIcon.supre_yueka, supre_status);
|
this.setWelfareStatus(WelfareConst.WelfareIcon.honor_yueka, honor_status);
|
},
|
sender16706: function sender16706(card_type) {
|
var protocal = {};
|
protocal.card_type = card_type;
|
this.SendProtocal(16706, protocal);
|
},
|
handle16706: function handle16706(data) {
|
message(data.msg);
|
|
if (data.code == 1) {
|
gcore.GlobalEvent.fire(WelfareEvent.Update_Get_Yueka, data.card_type);
|
|
if (data.card_type == 1) {
|
this.setWelfareStatus(WelfareConst.WelfareIcon.supre_yueka, false);
|
} else if (data.card_type == 2) {
|
this.setWelfareStatus(WelfareConst.WelfareIcon.honor_yueka, false);
|
}
|
}
|
},
|
//今日充值次数
|
sender21002: function sender21002() {
|
var protocal = {};
|
this.SendProtocal(21002, protocal);
|
},
|
handle21002: function handle21002(data) {
|
this.model.setRechargeCount(data.count);
|
this.sender14100(); //更新下签到红点
|
},
|
//判断一个福利是否开启了
|
checkCanAdd: function checkCanAdd(bid) {
|
var config = gdata("holiday_client_data", "data_info", [bid]);
|
if (config == null) return false;
|
var role_vo = RoleController.getInstance().getRoleVo();
|
if (role_vo.lev < config.open_lev) return false;
|
var is_verifyios = config.is_verifyios;
|
if (is_verifyios == 1) return true; //如果是提审服都要显示
|
|
if (bid == WelfareConst.WelfareIcon.bindphone) {
|
return SHOW_BIND_PHONE;
|
} else if (bid == WelfareConst.WelfareIcon.wechat) {
|
return SHOW_WECHAT_CERTIFY;
|
} else if (bid == WelfareConst.WelfareIcon.poste) {
|
return SHOW_BAIDU_TIEBA;
|
} else if (bid == WelfareConst.WelfareIcon.invicode) {
|
return SHOW_SINGLE_INVICODE;
|
} else if (bid == WelfareConst.WelfareIcon.share_game) {
|
return SHOW_GAME_SHARE;
|
} else {
|
return IS_SHOW_CHARGE;
|
}
|
},
|
//打开福利主界面 bid取WelfareConstants WelfareIcon 跳转指定标签页
|
openMainWindow: function openMainWindow(status, bid) {
|
if (status == true) {
|
if (IS_SHOW_CHARGE == false) //福利面板在不可充值不要打开了
|
return;
|
var role_vo = RoleController.getInstance().getRoleVo();
|
var data_info = Config.holiday_client_data.data_info;
|
|
if (data_info && data_info[bid]) {
|
if (role_vo.lev < data_info[bid].open_lev) {
|
message(cc.js.formatStr(Utils.TI18N("人物等级%s开启"), data_info[bid].open_lev));
|
return;
|
}
|
} //默认福利
|
//这里重新设置一下标签
|
|
|
var sub_vo = null;
|
|
for (var k in Config.holiday_client_data.data_info) {
|
var v = gdata("holiday_client_data", "data_info", [k]);
|
|
if (this.welfare_list[v.bid] == null) {
|
if (this.checkCanAdd(v.bid)) {
|
var WelfareSubTabVo = require("welfare_sub_tab_vo");
|
|
sub_vo = new WelfareSubTabVo();
|
|
if (sub_vo.update != null) {
|
sub_vo.update(v);
|
}
|
|
this.welfare_list[v.bid] = sub_vo;
|
}
|
}
|
}
|
|
if (!this.welfare_win) {
|
this.welfare_win = Utils.createClass("welfare_main_window");
|
}
|
|
this.welfare_win.open(bid);
|
} else {
|
if (this.welfare_win != null) {
|
this.welfare_win.close();
|
this.welfare_win = null;
|
}
|
}
|
},
|
//获取福利标签列表
|
getWelfareSubList: function getWelfareSubList() {
|
var welfare_sub_list = [];
|
|
var ActionController = require("action_controller");
|
|
if (this.welfare_list != null && Utils.next(this.welfare_list) != null) {
|
for (var k in this.welfare_list) {
|
var v = this.welfare_list[k];
|
var need_add = true;
|
|
if (ActionController.getInstance().isSpecialBid(v.bid)) {
|
var vo = ActionController.getInstance().getActionSubTabVo(v.bid);
|
|
if (vo == null) {
|
need_add = false;
|
}
|
} else if (v.bid == WelfareConst.WelfareIcon.quest) {
|
var open = this.model.getQuestOpenData();
|
|
if (open && open.status == 0) {
|
need_add = false;
|
}
|
} else if (v.bid == WelfareConst.WelfareIcon.bindphone) {
|
var is_over = this.checkBindPhoneStatus();
|
|
if (is_over == true) {
|
need_add = false;
|
}
|
} else if (v.bid == WelfareConst.WelfareIcon.wechat) {
|
//官微福利
|
// if (PLATFORM_TYPR == "SH_RH") { //已关注并且领取了奖励
|
// if (window.SH_RH_IS_SUBSCRIBE == true && this.model.getSubscriptionAwardStatus() == 1) {
|
// need_add = false;
|
// }
|
// }
|
if (USE_SDK == true && (PLATFORM_TYPR == "QQ_SDK" || PLATFORM_TYPR == "SH_SDK")) {
|
need_add = false;
|
} else if (PLATFORM_TYPR == "SH_RH" && SH_RH_IS_SHOW_SUBSCRIBE == false) {
|
need_add = false;
|
} else if (PLATFORM_TYPR == "SH_RH" && SH_RH_IS_SHOW_SUBSCRIBE == false) {
|
need_add = false;
|
}
|
} else if (v.bid == WelfareConst.WelfareIcon.invicode) {
|
//推荐码
|
if (USE_SDK == true && PLATFORM_TYPR == "QQ_SDK") {
|
need_add = false;
|
}
|
} else if (v.bid == WelfareConst.WelfareIcon.poste) {
|
//贴吧
|
if (USE_SDK == true && PLATFORM_TYPR == "QQ_SDK") {
|
need_add = false;
|
}
|
} else if (v.bid == WelfareConst.WelfareIcon.share_game) {
|
//邀请好友
|
if (USE_SDK == true && (PLATFORM_TYPR == "QQ_SDK" || PLATFORM_TYPR == "SH_SDK")) {
|
need_add = false;
|
} else if (PLATFORM_TYPR == "SH_RH" && SH_RH_IS_SHOW_SHARE == false) {
|
need_add = false;
|
} else if (PLATFORM_TYPR == "SH_RH" && SH_RH_IS_SHOW_SHARE == false) {
|
need_add = false;
|
}
|
} else if (v.bid == WelfareConst.WelfareIcon.qq_notice) {
|
//QQ公告
|
if (USE_SDK == false || PLATFORM_TYPR != "QQ_SDK") {
|
need_add = false;
|
}
|
} else if (v.bid == WelfareConst.WelfareIcon.sh_share_game || v.bid == WelfareConst.WelfareIcon.sh_collect) {
|
//深海小程序游戏分享 深海小程序微信公众号 收藏有礼
|
if (USE_SDK == false || PLATFORM_TYPR != "SH_SDK") {
|
need_add = false;
|
}
|
} else if (v.bid == WelfareConst.WelfareIcon.sh_wechat) {
|
//深海小程序微信公众号
|
if (USE_SDK == false || PLATFORM_TYPR != "SH_SDK" || window.SH_SDK_FOLLOW == true) {
|
need_add = false;
|
}
|
}
|
|
if (need_add == true) {
|
welfare_sub_list.push(v);
|
}
|
}
|
}
|
|
if (Utils.next(welfare_sub_list) != null) {
|
welfare_sub_list.sort(Utils.tableLowerSorter(["sort_val"]));
|
}
|
|
return welfare_sub_list;
|
},
|
//升级的时候判断红点
|
updateWelfareRedStatus: function updateWelfareRedStatus(level) {
|
if (level == null) return;
|
if (this.welfare_cache_red == null || this.welfare_cache_red[level] == null) return;
|
var list = this.welfare_cache_red[level];
|
|
for (var k in list) {
|
this.setWelfareStatus(k, list[k]);
|
}
|
},
|
//设置福利图标的状态,如果图标没有开启 应该不需要设置红点
|
setWelfareStatus: function setWelfareStatus(bid, status) {
|
if (this.checkCanAdd(bid) == false) {
|
var config = gdata("holiday_client_data", "data_info", [bid]);
|
|
if (config) {
|
if (this.welfare_cache_red[config.open_lev] == null) {
|
this.welfare_cache_red[config.open_lev] = {};
|
}
|
|
this.welfare_cache_red[config.open_lev][bid] = status;
|
}
|
} else {
|
if (this.welfare_status_list == null) {
|
this.welfare_status_list = [];
|
}
|
|
var num = 0;
|
if (status == true) num = 1;
|
var vo = {
|
bid: bid,
|
num: num
|
};
|
var vo1 = {
|
bid: bid,
|
status: status
|
};
|
this.welfare_status_list[bid] = vo1; //贴吧的红点(由于没有用到协议只能特殊处理)
|
|
this.setPosteWelfareStatus(true); //这是福利功能图标红点
|
|
MainuiController.getInstance().setFunctionTipsStatus(MainuiConst.icon.welfare, vo); //福利标签的面板
|
|
gcore.GlobalEvent.fire(WelfareEvent.UPDATE_WELFARE_TAB_STATUS, vo1);
|
}
|
},
|
///贴吧的红点
|
setPosteWelfareStatus: function setPosteWelfareStatus(status) {},
|
//根据id获取福利的标签页状态,主要是获取是否有红点
|
getWelfareStatusByID: function getWelfareStatusByID(id) {
|
if (this.welfare_status_list) return this.welfare_status_list[id];
|
},
|
handle21008: function handle21008(data) {
|
this.model.setDailyAwardStatus(data.status);
|
gcore.GlobalEvent.fire(WelfareEvent.Update_Daily_Awawd_Data);
|
},
|
//请求领取每日礼
|
sender21009: function sender21009() {
|
this.SendProtocal(21009, {});
|
},
|
handle21009: function handle21009(data) {
|
message(data.msg);
|
},
|
openSureveyQuestView: function openSureveyQuestView(status) {
|
if (status == true) {
|
if (!this.sureveyQuestWindow) {
|
this.sureveyQuestWindow = Utils.createClass("sureveyquest_window", this);
|
}
|
|
this.sureveyQuestWindow.open();
|
} else {
|
if (this.sureveyQuestWindow) {
|
this.sureveyQuestWindow.close();
|
this.sureveyQuestWindow = null;
|
}
|
}
|
},
|
//调查问卷协议
|
handle24600: function handle24600(data) {
|
if (data.status == 1 && (data.flag == 0 || data.flag == 1)) {
|
this.setWelfareStatus(WelfareConst.WelfareIcon.quest, true);
|
} else {
|
this.setWelfareStatus(WelfareConst.WelfareIcon.quest, false);
|
}
|
|
this.model.setQuestOpenData(data);
|
},
|
//获取答卷基本内容
|
sender24601: function sender24601() {
|
this.SendProtocal(24601, {});
|
},
|
handle24601: function handle24601(data) {
|
gcore.GlobalEvent.fire(WelfareEvent.Get_SureveyQuest_Basic, data);
|
},
|
//获取答卷题目信息
|
sender24602: function sender24602() {
|
this.SendProtocal(24602, {});
|
},
|
handle24602: function handle24602(data) {
|
gcore.GlobalEvent.fire(WelfareEvent.Get_SureveyQuest_Topic_Content, data);
|
},
|
//答卷
|
sender24603: function sender24603(list) {
|
var protocal = {};
|
protocal.ret_list = list;
|
this.SendProtocal(24603, protocal);
|
},
|
handle24603: function handle24603(data) {
|
message(data.msg);
|
|
if (data.code == 1) {
|
gcore.GlobalEvent.fire(WelfareEvent.SureveyQuest_Submit, data);
|
}
|
},
|
//领取奖励
|
sender24604: function sender24604() {
|
this.SendProtocal(24604, {});
|
},
|
handle24604: function handle24604(data) {
|
message(data.msg);
|
|
if (data.code == 1) {
|
gcore.GlobalEvent.fire(WelfareEvent.Get_SureveyQuest_Get_Reward, data);
|
}
|
},
|
//周、月礼包
|
sender21007: function sender21007(index) {
|
var protocal = {};
|
protocal.type = index || 1;
|
this.SendProtocal(21007, protocal);
|
},
|
handle21007: function handle21007(data) {
|
gcore.GlobalEvent.fire(WelfareEvent.Updata_Week_Month_Data, data);
|
}
|
}, _defineProperty(_cc$Class, "handle21008", function handle21008(data) {
|
this.model.setDailyAwardStatus(data.status);
|
gcore.GlobalEvent.fire(WelfareEvent.Update_Daily_Awawd_Data);
|
}), _defineProperty(_cc$Class, "sender21009", function sender21009() {
|
var protocal = {};
|
this.SendProtocal(21009, protocal);
|
}), _defineProperty(_cc$Class, "handle21009", function handle21009(data) {
|
message(data.msg);
|
}), _defineProperty(_cc$Class, "openCertifyBindPhoneWindow", function openCertifyBindPhoneWindow(status) {
|
if (!status) {
|
if (this.certify_phone) {
|
this.certify_phone.close();
|
this.certify_phone = null;
|
}
|
} else {
|
if (this.certify_phone == null) {
|
this.certify_phone = Utils.createClass("certify_bind_phone_window");
|
}
|
|
this.certify_phone.open();
|
}
|
}), _defineProperty(_cc$Class, "checkBindPhoneStatus", function checkBindPhoneStatus() {
|
if (PLATFORM_TYPR == "SH_RH" && SH_RH_IS_SHOW_BINDPHONE == false && PLATFORM_NAME == "shmix") {
|
return true;
|
}
|
|
if (this.bind_phone_data == null || this.bind_phone_data.code != 0 || USE_SDK == true && (PLATFORM_TYPR == "QQ_SDK" || PLATFORM_TYPR == "SH_SDK")) {
|
return true;
|
}
|
|
return false;
|
}), _defineProperty(_cc$Class, "getBindPhoneData", function getBindPhoneData() {
|
return this.bind_phone_data;
|
}), _defineProperty(_cc$Class, "handle16635", function handle16635(data) {
|
if (PLATFORM_TYPR == "SH_RH" && SH_RH_IS_SHOW_BINDPHONE == false && PLATFORM_NAME == "shmix") {
|
this.setWelfareStatus(WelfareConst.WelfareIcon.bindphone, false);
|
return;
|
}
|
|
this.bind_phone_data = data;
|
this.bind_phone_data.status = data.code;
|
|
if (data.code == 0 && SHOW_BIND_PHONE) {
|
//未绑定的时候显示红点
|
this.setWelfareStatus(WelfareConst.WelfareIcon.bindphone, true);
|
}
|
}), _defineProperty(_cc$Class, "requestBindPhone", function requestBindPhone(number, code) {
|
var protocal = {};
|
protocal.number = number;
|
protocal.code = code;
|
|
if (PLATFORM_TYPR == "SH_RH" && SH_RH_IS_SHOW_BINDPHONE == false && PLATFORM_NAME == "shmix") {
|
return;
|
}
|
|
this.SendProtocal(16636, protocal);
|
}), _defineProperty(_cc$Class, "handle16636", function handle16636(data) {
|
if (PLATFORM_TYPR == "SH_RH" && SH_RH_IS_SHOW_BINDPHONE == false && PLATFORM_NAME == "shmix") {
|
return;
|
}
|
|
if (this.bind_phone_data == null) return;
|
message(data.msg);
|
this.bind_phone_data.status = data.code; //0:失败 1:领取奖励成功 2:发送验证码成功
|
|
if (data.code != 0) {
|
//发送手机验证完成
|
if (data.code == 1) {
|
this.bind_phone_data.code = 1;
|
this.openCertifyBindPhoneWindow(false);
|
}
|
|
gcore.GlobalEvent.fire(WelfareEvent.UpdateBindPhoneStatus, this.bind_phone_data);
|
}
|
}), _defineProperty(_cc$Class, "handle16633", function handle16633(data) {// if (SHOW_WECHAT_CERTIFY) {
|
// this.wechat_subscription_data = data;
|
// if (data.code == 0) {
|
// this.setWelfareStatus(WelfareConst.WelfareIcon.wechat, true)
|
// }
|
// }
|
// if (PLATFORM_TYPR == "SH_RH") {
|
// this.setWelfareStatus(WelfareConst.WelfareIcon.wechat, this.model.getSubscriptionAwardStatus() == 0);
|
// }
|
}), _defineProperty(_cc$Class, "tellServerWechatStatus", function tellServerWechatStatus() {// if (this.wechat_subscription_data && this.wechat_subscription_data.code == 1) return
|
// this.SendProtocal(16634, {});
|
}), _defineProperty(_cc$Class, "handle16634", function handle16634(data) {// if (this.wechat_subscription_data) {
|
// this.wechat_subscription_data.code = 1;
|
// this.setWelfareStatus(WelfareConst.WelfareIcon.wechat, false)
|
// }
|
// if (PLATFORM_TYPR == "SH_RH") {
|
// this.setWelfareStatus(WelfareConst.WelfareIcon.wechat, false);
|
// }
|
}), _defineProperty(_cc$Class, "getWechatData", function getWechatData() {
|
return this.wechat_subscription_data;
|
}), _defineProperty(_cc$Class, "getWelfareRoot", function getWelfareRoot() {
|
if (this.welfare_win) return this.welfare_win.root_wnd;
|
}), _defineProperty(_cc$Class, "send16691", function send16691() {
|
this.SendProtocal(16691, {});
|
}), _defineProperty(_cc$Class, "handle16691", function handle16691(data) {
|
// cc.log("16691", data)
|
if (data) {
|
this.model.setShareAward(data.items);
|
this.model.setShareAwardStatus(data.code);
|
|
if (data.code == 1) {
|
if (PLATFORM_TYPR == "SH_SDK") {
|
MainuiController.getInstance().removeFunctionIconById(MainuiConst.icon.shwx_share);
|
} else {
|
MainuiController.getInstance().removeFunctionIconById(MainuiConst.icon.shrh_share);
|
}
|
}
|
}
|
}), _defineProperty(_cc$Class, "send16692", function send16692(id) {
|
var protocal = {};
|
protocal.id = id;
|
this.SendProtocal(16692, protocal);
|
}), _defineProperty(_cc$Class, "handle16692", function handle16692(data) {
|
// cc.log("16692", data)
|
message(data.msg);
|
|
if (data && data.code == 1) {
|
this.model.setShareAwardStatus(data.code);
|
gcore.GlobalEvent.fire(WelfareEvent.Update_get_SHRH_share_award_status, data.code);
|
|
if (PLATFORM_TYPR == "SH_SDK") {
|
MainuiController.getInstance().removeFunctionIconById(MainuiConst.icon.shwx_share);
|
} else {
|
MainuiController.getInstance().removeFunctionIconById(MainuiConst.icon.shrh_share);
|
}
|
}
|
}), _defineProperty(_cc$Class, "send16693", function send16693() {
|
this.SendProtocal(16693, {});
|
}), _defineProperty(_cc$Class, "handle16693", function handle16693(data) {
|
// cc.log("16693", data)
|
if (data) {
|
this.model.setSubscriptionAward(data.items);
|
this.model.setSubscriptionAwardStatus(data.code);
|
|
if (data.code == 1) {
|
if (PLATFORM_TYPR == "SH_SDK") {
|
MainuiController.getInstance().removeFunctionIconById(MainuiConst.icon.shwx_sub);
|
} else {
|
MainuiController.getInstance().removeFunctionIconById(MainuiConst.icon.shrh_sub);
|
} // this.SendProtocal(16634, {});
|
|
}
|
}
|
}), _defineProperty(_cc$Class, "send16694", function send16694(id) {
|
var protocal = {};
|
protocal.id = id;
|
this.SendProtocal(16694, protocal); // RoleController.getInstance().sender10945(str)
|
}), _defineProperty(_cc$Class, "handle16694", function handle16694(data) {
|
// cc.log("16694", data)
|
message(data.msg);
|
|
if (data && data.code == 1) {
|
gcore.GlobalEvent.fire(WelfareEvent.Update_SHRH_Award_Status, 1);
|
this.model.setSubscriptionAwardStatus(data.code); // this.SendProtocal(16634, {});
|
|
if (PLATFORM_TYPR == "SH_SDK") {
|
MainuiController.getInstance().removeFunctionIconById(MainuiConst.icon.shwx_sub);
|
} else {
|
MainuiController.getInstance().removeFunctionIconById(MainuiConst.icon.shrh_sub);
|
}
|
}
|
}), _defineProperty(_cc$Class, "send16695", function send16695() {
|
var protocal = {};
|
this.SendProtocal(16695, protocal);
|
}), _defineProperty(_cc$Class, "handle16695", function handle16695(data) {
|
if (data) {
|
this.model.setCollectAward(data.items);
|
this.model.setCollectAwardStatus(data.code);
|
|
if (data.code == 1) {
|
MainuiController.getInstance().removeFunctionIconById(MainuiConst.icon.shwx_collect);
|
}
|
}
|
}), _defineProperty(_cc$Class, "send16696", function send16696() {
|
var protocal = {};
|
this.SendProtocal(16696, protocal);
|
}), _defineProperty(_cc$Class, "handle16696", function handle16696(data) {
|
message(data.msg);
|
|
if (data && data.code == 1) {
|
this.model.setCollectAwardStatus(data.code);
|
gcore.GlobalEvent.fire(WelfareEvent.Update_get_SHWX_collect_award_status, 1);
|
MainuiController.getInstance().removeFunctionIconById(MainuiConst.icon.shwx_collect);
|
}
|
}), _defineProperty(_cc$Class, "shrhShareStatus", function shrhShareStatus(status, data) {
|
// message("分享成功!!!!", data)
|
gcore.GlobalEvent.fire(WelfareEvent.Update_get_SHRH_share_award_status, 2);
|
}), _defineProperty(_cc$Class, "shrhRealNameStatus", function shrhRealNameStatus(status) {
|
if (status) {
|
MainuiController.getInstance().removeFunctionIconById(MainuiConst.icon.shrh_realname);
|
}
|
}), _defineProperty(_cc$Class, "send16697", function send16697() {
|
this.SendProtocal(16697, {});
|
}), _defineProperty(_cc$Class, "handle16697", function handle16697(data) {
|
if (PLATFORM_TYPR == "SH_RH" && SH_RH_IS_SHOW_BINDPHONE == false && PLATFORM_NAME == "shmix") {
|
this.setWelfareStatus(WelfareConst.WelfareIcon.bindphone, false);
|
return;
|
}
|
|
if (data && PLATFORM_NAME == "shmix") {
|
this.bind_phone_data = data;
|
this.bind_phone_data.status = data.code;
|
|
if (data.code == 0 && SHOW_BIND_PHONE) {
|
//未绑定的时候显示红点
|
this.setWelfareStatus(WelfareConst.WelfareIcon.bindphone, true);
|
}
|
}
|
}), _defineProperty(_cc$Class, "send16698", function send16698() {
|
var protocal = {};
|
this.SendProtocal(16698, protocal);
|
}), _defineProperty(_cc$Class, "handle16698", function handle16698(data) {
|
message(data.msg);
|
this.bind_phone_data.status = data.code;
|
|
if (data && data.code == 1) {
|
this.bind_phone_data.code = data.code;
|
gcore.GlobalEvent.fire(WelfareEvent.UpdateBindPhoneStatus, 1);
|
}
|
}), _cc$Class));
|
module.exports = WelfareController;
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFx3ZWxmYXJlXFx3ZWxmYXJlX2NvbnRyb2xsZXIuanMiXSwibmFtZXMiOlsiUm9sZUNvbnRyb2xsZXIiLCJyZXF1aXJlIiwiTWFpbnVpQ29udHJvbGxlciIsIk1haW51aUNvbnN0IiwiV2VsZmFyZUV2ZW50IiwiV2VsZmFyZUNvbnN0IiwiU0hPV19CQUlEVV9USUVCQSIsIlNIT1dfU0lOR0xFX0lOVklDT0RFIiwiU0hPV19CSU5EX1BIT05FIiwiU0hPV19XRUNIQVRfQ0VSVElGWSIsIlNIT1dfR0FNRV9TSEFSRSIsIldlbGZhcmVDb250cm9sbGVyIiwiY2MiLCJDbGFzcyIsIkJhc2VDb250cm9sbGVyIiwiY3RvciIsImluaXRDb25maWciLCJXZWxmYXJlTW9kZWwiLCJtb2RlbCIsIndlbGZhcmVfbGlzdCIsIndlbGZhcmVfc3RhdHVzX2xpc3QiLCJ3ZWxmYXJlX2NhY2hlX3JlZCIsImdldE1vZGVsIiwicmVnaXN0ZXJFdmVudHMiLCJpbml0X3JvbGVfZXZlbnQiLCJnY29yZSIsIkdsb2JhbEV2ZW50IiwiYmluZCIsIkV2ZW50SWQiLCJFVlRfUk9MRV9DUkVBVEVfU1VDQ0VTUyIsInVuYmluZCIsInJvbGVfdm8iLCJnZXRJbnN0YW5jZSIsImdldFJvbGVWbyIsInJvbGVfYXNzZXRzX2V2ZW50IiwiVVBEQVRFX1JPTEVfQVRUUklCVVRFIiwia2V5IiwidmFsdWUiLCJ1cGRhdGVXZWxmYXJlUmVkU3RhdHVzIiwicmVfbGlua19nYW1lX2V2ZW50IiwiRVZUX1JFX0xJTktfR0FNRSIsIkd1aWRlQ29udHJvbGxlciIsImlzSW5HdWlkZSIsIm9wZW5NYWluV2luZG93Iiwidm8iLCJnZXRGdW5jdGlvbkljb25CeUlkIiwiaWNvbiIsIndlbGZhcmUiLCJzZW5kZXIxNjcwNSIsInJlZ2lzdGVyUHJvdG9jYWxzIiwiUmVnaXN0ZXJQcm90b2NhbCIsImhhbmRsZTE0MTAwIiwiaGFuZGxlMTQxMDEiLCJoYW5kbGUxNjcwNSIsImhhbmRsZTE2NzA2IiwiaGFuZGxlMjEwMDIiLCJoYW5kbGUyNDYwMCIsImhhbmRsZTI0NjAxIiwiaGFuZGxlMjQ2MDIiLCJoYW5kbGUyNDYwMyIsImhhbmRsZTI0NjA0IiwiaGFuZGxlMjEwMDciLCJoYW5kbGUyMTAwOCIsImhhbmRsZTIxMDA5IiwiaGFuZGxlMTY2MzUiLCJoYW5kbGUxNjYzNiIsImhhbmRsZTE2Njk3IiwiaGFuZGxlMTY2OTgiLCJoYW5kbGUxNjYzMyIsImhhbmRsZTE2NjM0IiwiaGFuZGxlMTY2OTEiLCJoYW5kbGUxNjY5MyIsImhhbmRsZTE2NjkyIiwiaGFuZGxlMTY2OTQiLCJoYW5kbGUxNjY5NSIsImhhbmRsZTE2Njk2IiwicmVxdWVzdEluaXRQcm90byIsInNlbmRlcjE0MTAwIiwic2VuZGVyMjQ2MDAiLCJzZW5kZXIyMTAwOCIsInNlbmRlcjE2NjM1Iiwic2VuZGVyMTY2MzMiLCJzZW5kMTY2OTMiLCJzZW5kMTY2OTEiLCJwcm90b2NhbCIsIlNlbmRQcm90b2NhbCIsImRhdGEiLCJmaXJlIiwiVXBkYXRlX1NpZ25fSW5mbyIsImlzX3Nob3ciLCJyZWNoYXJnZV9jb3VudCIsImdldFJlY2hhcmdlQ291bnQiLCJzdGF0dXMiLCJzZXRXZWxmYXJlU3RhdHVzIiwiV2VsZmFyZUljb24iLCJzaWduIiwic2VuZGVyMTQxMDEiLCJtZXNzYWdlIiwibXNnIiwiY29kZSIsIlNpZ25fU3VjY2VzcyIsInNldFl1ZWthIiwiVXBkYXRlX1l1ZWthIiwic3VwcmVfc3RhdHVzIiwiaG9ub3Jfc3RhdHVzIiwiY2FyZDFfaXNfcmV3YXJkIiwiY2FyZDJfaXNfcmV3YXJkIiwic3VwcmVfeXVla2EiLCJob25vcl95dWVrYSIsInNlbmRlcjE2NzA2IiwiY2FyZF90eXBlIiwiVXBkYXRlX0dldF9ZdWVrYSIsInNlbmRlcjIxMDAyIiwic2V0UmVjaGFyZ2VDb3VudCIsImNvdW50IiwiY2hlY2tDYW5BZGQiLCJiaWQiLCJjb25maWciLCJnZGF0YSIsImxldiIsIm9wZW5fbGV2IiwiaXNfdmVyaWZ5aW9zIiwiYmluZHBob25lIiwid2VjaGF0IiwicG9zdGUiLCJpbnZpY29kZSIsInNoYXJlX2dhbWUiLCJJU19TSE9XX0NIQVJHRSIsImRhdGFfaW5mbyIsIkNvbmZpZyIsImhvbGlkYXlfY2xpZW50X2RhdGEiLCJqcyIsImZvcm1hdFN0ciIsIlV0aWxzIiwiVEkxOE4iLCJzdWJfdm8iLCJrIiwidiIsIldlbGZhcmVTdWJUYWJWbyIsInVwZGF0ZSIsIndlbGZhcmVfd2luIiwiY3JlYXRlQ2xhc3MiLCJvcGVuIiwiY2xvc2UiLCJnZXRXZWxmYXJlU3ViTGlzdCIsIndlbGZhcmVfc3ViX2xpc3QiLCJBY3Rpb25Db250cm9sbGVyIiwibmV4dCIsIm5lZWRfYWRkIiwiaXNTcGVjaWFsQmlkIiwiZ2V0QWN0aW9uU3ViVGFiVm8iLCJxdWVzdCIsImdldFF1ZXN0T3BlbkRhdGEiLCJpc19vdmVyIiwiY2hlY2tCaW5kUGhvbmVTdGF0dXMiLCJVU0VfU0RLIiwiUExBVEZPUk1fVFlQUiIsIlNIX1JIX0lTX1NIT1dfU1VCU0NSSUJFIiwiU0hfUkhfSVNfU0hPV19TSEFSRSIsInFxX25vdGljZSIsInNoX3NoYXJlX2dhbWUiLCJzaF9jb2xsZWN0Iiwic2hfd2VjaGF0Iiwid2luZG93IiwiU0hfU0RLX0ZPTExPVyIsInB1c2giLCJzb3J0IiwidGFibGVMb3dlclNvcnRlciIsImxldmVsIiwibGlzdCIsIm51bSIsInZvMSIsInNldFBvc3RlV2VsZmFyZVN0YXR1cyIsInNldEZ1bmN0aW9uVGlwc1N0YXR1cyIsIlVQREFURV9XRUxGQVJFX1RBQl9TVEFUVVMiLCJnZXRXZWxmYXJlU3RhdHVzQnlJRCIsImlkIiwic2V0RGFpbHlBd2FyZFN0YXR1cyIsIlVwZGF0ZV9EYWlseV9Bd2F3ZF9EYXRhIiwic2VuZGVyMjEwMDkiLCJvcGVuU3VyZXZleVF1ZXN0VmlldyIsInN1cmV2ZXlRdWVzdFdpbmRvdyIsImZsYWciLCJzZXRRdWVzdE9wZW5EYXRhIiwic2VuZGVyMjQ2MDEiLCJHZXRfU3VyZXZleVF1ZXN0X0Jhc2ljIiwic2VuZGVyMjQ2MDIiLCJHZXRfU3VyZXZleVF1ZXN0X1RvcGljX0NvbnRlbnQiLCJzZW5kZXIyNDYwMyIsInJldF9saXN0IiwiU3VyZXZleVF1ZXN0X1N1Ym1pdCIsInNlbmRlcjI0NjA0IiwiR2V0X1N1cmV2ZXlRdWVzdF9HZXRfUmV3YXJkIiwic2VuZGVyMjEwMDciLCJpbmRleCIsInR5cGUiLCJVcGRhdGFfV2Vla19Nb250aF9EYXRhIiwiY2VydGlmeV9waG9uZSIsIlNIX1JIX0lTX1NIT1dfQklORFBIT05FIiwiUExBVEZPUk1fTkFNRSIsImJpbmRfcGhvbmVfZGF0YSIsIm51bWJlciIsIm9wZW5DZXJ0aWZ5QmluZFBob25lV2luZG93IiwiVXBkYXRlQmluZFBob25lU3RhdHVzIiwid2VjaGF0X3N1YnNjcmlwdGlvbl9kYXRhIiwicm9vdF93bmQiLCJzZXRTaGFyZUF3YXJkIiwiaXRlbXMiLCJzZXRTaGFyZUF3YXJkU3RhdHVzIiwicmVtb3ZlRnVuY3Rpb25JY29uQnlJZCIsInNod3hfc2hhcmUiLCJzaHJoX3NoYXJlIiwiVXBkYXRlX2dldF9TSFJIX3NoYXJlX2F3YXJkX3N0YXR1cyIsInNldFN1YnNjcmlwdGlvbkF3YXJkIiwic2V0U3Vic2NyaXB0aW9uQXdhcmRTdGF0dXMiLCJzaHd4X3N1YiIsInNocmhfc3ViIiwiVXBkYXRlX1NIUkhfQXdhcmRfU3RhdHVzIiwic2V0Q29sbGVjdEF3YXJkIiwic2V0Q29sbGVjdEF3YXJkU3RhdHVzIiwic2h3eF9jb2xsZWN0IiwiVXBkYXRlX2dldF9TSFdYX2NvbGxlY3RfYXdhcmRfc3RhdHVzIiwic2hyaF9yZWFsbmFtZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLGNBQWMsR0FBR0MsT0FBTyxDQUFDLGlCQUFELENBQTVCOztBQUNBLElBQUlDLGdCQUFnQixHQUFHRCxPQUFPLENBQUMsbUJBQUQsQ0FBOUI7O0FBQ0EsSUFBSUUsV0FBVyxHQUFHRixP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eEI7QUFtekJBb0IsTUFBTSxDQUFDQyxPQUFQLEdBQWlCck4saUJBQWpCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogeHh4QHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXG4vLyBAZGVzY3JpcHRpb246XG4vLyAgICAg56aP5YipXG4vLyA8YnIvPkNyZWF0ZTogMjAxOC0xMi0xOSAxMDo1NzoyOVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnZhciBSb2xlQ29udHJvbGxlciA9IHJlcXVpcmUoXCJyb2xlX2NvbnRyb2xsZXJcIik7XG52YXIgTWFpbnVpQ29udHJvbGxlciA9IHJlcXVpcmUoXCJtYWludWlfY29udHJvbGxlclwiKTtcbnZhciBNYWludWlDb25zdCA9IHJlcXVpcmUoXCJtYWludWlfY29uc3RcIik7XG52YXIgV2VsZmFyZUV2ZW50ID0gcmVxdWlyZShcIndlbGZhcmVfZXZlbnRcIik7XG52YXIgV2VsZmFyZUNvbnN0ID0gcmVxdWlyZShcIndlbGZhcmVfY29uc3RcIik7XG4vLyB2YXIgQWN0aW9uQ29uc3QgPSByZXF1aXJlKFwiYWN0aW9uX2NvbnN0XCIpO1xuXG52YXIgU0hPV19CQUlEVV9USUVCQSA9IHRydWUgICAgICAgICAgICAgICAgICAvLyDmmK/lkKbmmL7npLrnmb7luqbotLTlkKdcbnZhciBTSE9XX1NJTkdMRV9JTlZJQ09ERSA9IHRydWUgICAgICAgICAgICAgIC8vIOaYr+WQpuaYvuekuuS4quS6uuaOqOiNkOeggVxudmFyIFNIT1dfQklORF9QSE9ORSA9IHRydWUgICAgICAgICAgICAgICAgICAvLyDmmK/lkKbpnIDopoHmmL7npLrmiYvmnLrnu5HlrprnlYzpnaJcbnZhciBTSE9XX1dFQ0hBVF9DRVJUSUZZID0gdHJ1ZSAgICAgICAgICAgICAgIC8vIOaYr+WQpuaYvuekuuW+ruS/oeWFrOS8l+WPt1xudmFyIFNIT1dfR0FNRV9TSEFSRSA9IHRydWUgICAgICAgICAgICAgICAgICAgLy8g5ri45oiP5YiG5LqrXG5cbnZhciBXZWxmYXJlQ29udHJvbGxlciA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlQ29udHJvbGxlcixcbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgfSxcblxuICAgIC8vIOWIneWni+WMlumFjee9ruaVsOaNrlxuICAgIGluaXRDb25maWc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIFdlbGZhcmVNb2RlbCA9IHJlcXVpcmUoXCJ3ZWxmYXJlX21vZGVsXCIpO1xuXG4gICAgICAgIHRoaXMubW9kZWwgPSBuZXcgV2VsZmFyZU1vZGVsKCk7XG4gICAgICAgIHRoaXMubW9kZWwuaW5pdENvbmZpZygpO1xuXG4gICAgICAgIHRoaXMud2VsZmFyZV9saXN0ID0ge307XG4gICAgICAgIHRoaXMud2VsZmFyZV9zdGF0dXNfbGlzdCA9IHt9ICAvL+emj+WIqeeKtuaAgeWIl+ihqFxuICAgICAgICB0aGlzLndlbGZhcmVfY2FjaGVfcmVkID0ge307ICAgIC8v56aP5Yip57yT5a2Y57qi54K554q25oCBXG4gICAgfSxcblxuICAgIC8vIOi/lOWbnuW9k+WJjeeahG1vZGVsXG4gICAgZ2V0TW9kZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gICAgfSxcblxuICAgIC8vIOazqOWGjOebkeWQrOS6i+S7tlxuICAgIHJlZ2lzdGVyRXZlbnRzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmluaXRfcm9sZV9ldmVudCA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRfcm9sZV9ldmVudCA9IGdjb3JlLkdsb2JhbEV2ZW50LmJpbmQoRXZlbnRJZC5FVlRfUk9MRV9DUkVBVEVfU1VDQ0VTUywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LnVuYmluZCh0aGlzLmluaXRfcm9sZV9ldmVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0X3JvbGVfZXZlbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgIC8vIHRoaXMucmVxdWVzdEluaXRQcm90bygpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5yb2xlX3ZvID0gUm9sZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRSb2xlVm8oKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yb2xlX2Fzc2V0c19ldmVudCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm9sZV9hc3NldHNfZXZlbnQgPSB0aGlzLnJvbGVfdm8uYmluZChFdmVudElkLlVQREFURV9ST0xFX0FUVFJJQlVURSwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT0gXCJsZXZcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlV2VsZmFyZVJlZFN0YXR1cyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sIHRoaXMpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdGhpcylcbiAgICAgICAgfVxuXG4gICAgICAgIC8v5pat57q/6YeN6L+e6K+35rGC5pyI5Y2hXG4gICAgICAgIGlmICh0aGlzLnJlX2xpbmtfZ2FtZV9ldmVudCA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnJlX2xpbmtfZ2FtZV9ldmVudCA9IGdjb3JlLkdsb2JhbEV2ZW50LmJpbmQoRXZlbnRJZC5FVlRfUkVfTElOS19HQU1FLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIEd1aWRlQ29udHJvbGxlciA9IHJlcXVpcmUoXCJndWlkZV9jb250cm9sbGVyXCIpO1xuICAgICAgICAgICAgICAgIGlmICghR3VpZGVDb250cm9sbGVyLmdldEluc3RhbmNlKCkuaXNJbkd1aWRlKCkpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3Blbk1haW5XaW5kb3coZmFsc2UpO1xuICAgICAgICAgICAgICAgIC8v5Yik5pat57K+5b2p5rS75Yqo5Zu+5qCH5Zyo5LiN5ZyoLOivt+axgueyvuW9qea0u+WKqOeahOaVsOaNrlxuICAgICAgICAgICAgICAgIHZhciB2byA9IE1haW51aUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRGdW5jdGlvbkljb25CeUlkKE1haW51aUNvbnN0Lmljb24ud2VsZmFyZSk7XG4gICAgICAgICAgICAgICAgaWYgKHZvICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZW5kZXIxNjcwNSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHRoaXMpXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g5rOo5YaM5Y2P6K6u5o6l5Y+X5LqL5Lu2XG4gICAgcmVnaXN0ZXJQcm90b2NhbHM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDE0MTAwLCB0aGlzLmhhbmRsZTE0MTAwKSAgICAgLy/nrb7liLDkv6Hmga9cbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDE0MTAxLCB0aGlzLmhhbmRsZTE0MTAxKSAgICAgLy/pooblj5bnrb7liLDlpZblirFcblxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTY3MDUsIHRoaXMuaGFuZGxlMTY3MDUpICAgICAvL+aciOWNoeS/oeaBr1xuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTY3MDYsIHRoaXMuaGFuZGxlMTY3MDYpICAgICAvL+mihuWPluaciOWNoVxuXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgyMTAwMiwgdGhpcy5oYW5kbGUyMTAwMikgICAgIC8v5LuK5pel5YWF5YC85qyh5pWwXG5cblxuICAgICAgICAvL+iwg+afpemXruWNt1xuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMjQ2MDAsIHRoaXMuaGFuZGxlMjQ2MDApXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgyNDYwMSwgdGhpcy5oYW5kbGUyNDYwMSlcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDI0NjAyLCB0aGlzLmhhbmRsZTI0NjAyKVxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMjQ2MDMsIHRoaXMuaGFuZGxlMjQ2MDMpXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgyNDYwNCwgdGhpcy5oYW5kbGUyNDYwNClcblxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMjEwMDcsIHRoaXMuaGFuZGxlMjEwMDcpXG5cbiAgICAgICAgLy8g5q+P5pel56S8XG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgyMTAwOCwgdGhpcy5oYW5kbGUyMTAwOClcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDIxMDA5LCB0aGlzLmhhbmRsZTIxMDA5KVxuXG4gICAgICAgIC8vIOaJi+acuue7keWumuWlluWKseeKtuaAgVxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTY2MzUsIHRoaXMuaGFuZGxlMTY2MzUpXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxNjYzNiwgdGhpcy5oYW5kbGUxNjYzNilcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDE2Njk3LCB0aGlzLmhhbmRsZTE2Njk3KVxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTY2OTgsIHRoaXMuaGFuZGxlMTY2OTgpXG5cbiAgICAgICAgLy8g5b6u5L+h5YWs5LyX5Y+3XG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxNjYzMywgdGhpcy5oYW5kbGUxNjYzMylcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDE2NjM0LCB0aGlzLmhhbmRsZTE2NjM0KVxuXG4gICAgICAgIC8v54ix5b6u5ri45YiG5Lqr5ZKM5YWz5rOoXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxNjY5MSwgdGhpcy5oYW5kbGUxNjY5MSlcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDE2NjkzLCB0aGlzLmhhbmRsZTE2NjkzKVxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTY2OTIsIHRoaXMuaGFuZGxlMTY2OTIpXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxNjY5NCwgdGhpcy5oYW5kbGUxNjY5NClcblxuICAgICAgICAvL+a3sea1t+Wwj+a4uOaIj+aUtuiXj1xuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTY2OTUsIHRoaXMuaGFuZGxlMTY2OTUpXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxNjY5NiwgdGhpcy5oYW5kbGUxNjY5NilcbiAgICB9LFxuXG4gICAgLy/nmbvlvZXor7fmsYLnmoTljY/orq5cbiAgICByZXF1ZXN0SW5pdFByb3RvOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuc2VuZGVyMTQxMDAoKSAvL+etvuWIsOe6oueCuVxuICAgICAgICB0aGlzLnNlbmRlcjE2NzA1KCkgLy/mnIjljaHkv6Hmga9cbiAgICAgICAgdGhpcy5zZW5kZXIyNDYwMCgpIC8v6Zeu5Y23XG4gICAgICAgIHRoaXMuc2VuZGVyMjEwMDgoKSAvL+avj+aXpeekvFxuICAgICAgICB0aGlzLnNlbmRlcjE2NjM1KCkgLy/miYvmnLrnu5HlrprlpZblirHnirbmgIFcbiAgICAgICAgdGhpcy5zZW5kZXIxNjYzMygpXG4gICAgICAgIHRoaXMuc2VuZDE2NjkzKCk7XG4gICAgICAgIHRoaXMuc2VuZDE2NjkxKCk7XG4gICAgfSxcblxuICAgIC8v562+5Yiw5L+h5oGvXG4gICAgc2VuZGVyMTQxMDA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHByb3RvY2FsID0ge307XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDE0MTAwLCBwcm90b2NhbCk7XG4gICAgfSxcblxuICAgIC8v5pyI5Y2h5L+h5oGvXG4gICAgc2VuZGVyMTY3MDU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHByb3RvY2FsID0ge307XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDE2NzA1LCBwcm90b2NhbCk7XG4gICAgfSxcblxuICAgIC8v6LCD5p+l6Zeu5Y2354q25oCBXG4gICAgc2VuZGVyMjQ2MDA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMjQ2MDAsIHt9KTtcbiAgICB9LFxuXG4gICAgLy/or7fmsYLmr4/ml6XnpLznirbmgIFcbiAgICBzZW5kZXIyMTAwODogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyMTAwOCwge30pO1xuICAgIH0sXG5cbiAgICAvL+ivt+axguaJi+acuue7keWumuS/oeaBr1xuICAgIHNlbmRlcjE2NjM1OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDE2NjM1LCB7fSk7XG4gICAgfSxcblxuICAgIHNlbmRlcjE2NjMzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDE2NjMzLCB7fSk7XG4gICAgfSxcblxuICAgIGhhbmRsZTE0MTAwOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKFdlbGZhcmVFdmVudC5VcGRhdGVfU2lnbl9JbmZvLCBkYXRhKTtcbiAgICAgICAgdmFyIGlzX3Nob3cgPSBmYWxzZTtcbiAgICAgICAgdmFyIHJlY2hhcmdlX2NvdW50ID0gdGhpcy5tb2RlbC5nZXRSZWNoYXJnZUNvdW50KCk7XG4gICAgICAgIGlmIChkYXRhLnN0YXR1cyA9PSAwIHx8IChyZWNoYXJnZV9jb3VudCA+IDAgJiYgZGF0YS5zdGF0dXMgPT0gMSkpIHtcbiAgICAgICAgICAgIGlzX3Nob3cgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0V2VsZmFyZVN0YXR1cyhXZWxmYXJlQ29uc3QuV2VsZmFyZUljb24uc2lnbiwgaXNfc2hvdyk7XG4gICAgfSxcblxuICAgIC8v6aKG5Y+W562+5Yiw5aWW5YqxXG4gICAgc2VuZGVyMTQxMDE6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHByb3RvY2FsID0ge307XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDE0MTAxLCBwcm90b2NhbCk7XG4gICAgfSxcblxuICAgIGhhbmRsZTE0MTAxOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBtZXNzYWdlKGRhdGEubXNnKTtcbiAgICAgICAgaWYgKGRhdGEuY29kZSA9PSAxKSB7XG4gICAgICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKFdlbGZhcmVFdmVudC5TaWduX1N1Y2Nlc3MsIGRhdGEpO1xuICAgICAgICAgICAgdmFyIGlzX3Nob3cgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciByZWNoYXJnZV9jb3VudCA9IHRoaXMubW9kZWwuZ2V0UmVjaGFyZ2VDb3VudCgpO1xuICAgICAgICAgICAgaWYgKGRhdGEuc3RhdHVzID09IDAgfHwgKHJlY2hhcmdlX2NvdW50ID4gMCAmJiBkYXRhLnN0YXR1cyA9PSAxKSkge1xuICAgICAgICAgICAgICAgIGlzX3Nob3cgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXRXZWxmYXJlU3RhdHVzKFdlbGZhcmVDb25zdC5XZWxmYXJlSWNvbi5zaWduLCBpc19zaG93KVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIGhhbmRsZTE2NzA1OiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICB0aGlzLm1vZGVsLnNldFl1ZWthKGRhdGEpO1xuICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKFdlbGZhcmVFdmVudC5VcGRhdGVfWXVla2EsIGRhdGEpO1xuXG4gICAgICAgIHZhciBzdXByZV9zdGF0dXMgPSBmYWxzZTsvL+iHs+WwiuaciOWNoVxuICAgICAgICB2YXIgaG9ub3Jfc3RhdHVzID0gZmFsc2U7Ly/ojaPogIDmnIjljaFcbiAgICAgICAgaWYgKGRhdGEuY2FyZDFfaXNfcmV3YXJkID09IDEpIHtcbiAgICAgICAgICAgIHN1cHJlX3N0YXR1cyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGEuY2FyZDJfaXNfcmV3YXJkID09IDEpIHtcbiAgICAgICAgICAgIGhvbm9yX3N0YXR1cyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRXZWxmYXJlU3RhdHVzKFdlbGZhcmVDb25zdC5XZWxmYXJlSWNvbi5zdXByZV95dWVrYSwgc3VwcmVfc3RhdHVzKTtcbiAgICAgICAgdGhpcy5zZXRXZWxmYXJlU3RhdHVzKFdlbGZhcmVDb25zdC5XZWxmYXJlSWNvbi5ob25vcl95dWVrYSwgaG9ub3Jfc3RhdHVzKTtcbiAgICB9LFxuXG4gICAgc2VuZGVyMTY3MDY6IGZ1bmN0aW9uIChjYXJkX3R5cGUpIHtcbiAgICAgICAgdmFyIHByb3RvY2FsID0ge307XG4gICAgICAgIHByb3RvY2FsLmNhcmRfdHlwZSA9IGNhcmRfdHlwZTtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMTY3MDYsIHByb3RvY2FsKVxuICAgIH0sXG5cbiAgICBoYW5kbGUxNjcwNjogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgbWVzc2FnZShkYXRhLm1zZyk7XG4gICAgICAgIGlmIChkYXRhLmNvZGUgPT0gMSkge1xuICAgICAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShXZWxmYXJlRXZlbnQuVXBkYXRlX0dldF9ZdWVrYSwgZGF0YS5jYXJkX3R5cGUpO1xuICAgICAgICAgICAgaWYgKGRhdGEuY2FyZF90eXBlID09IDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFdlbGZhcmVTdGF0dXMoV2VsZmFyZUNvbnN0LldlbGZhcmVJY29uLnN1cHJlX3l1ZWthLCBmYWxzZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEuY2FyZF90eXBlID09IDIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFdlbGZhcmVTdGF0dXMoV2VsZmFyZUNvbnN0LldlbGZhcmVJY29uLmhvbm9yX3l1ZWthLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy/ku4rml6XlhYXlgLzmrKHmlbBcbiAgICBzZW5kZXIyMTAwMjogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcHJvdG9jYWwgPSB7fTtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMjEwMDIsIHByb3RvY2FsKTtcbiAgICB9LFxuXG4gICAgaGFuZGxlMjEwMDI6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHRoaXMubW9kZWwuc2V0UmVjaGFyZ2VDb3VudChkYXRhLmNvdW50KTtcbiAgICAgICAgdGhpcy5zZW5kZXIxNDEwMCgpIC8v5pu05paw5LiL562+5Yiw57qi54K5XG4gICAgfSxcblxuICAgIC8v5Yik5pat5LiA5Liq56aP5Yip5piv5ZCm5byA5ZCv5LqGXG4gICAgY2hlY2tDYW5BZGQ6IGZ1bmN0aW9uIChiaWQpIHtcbiAgICAgICAgdmFyIGNvbmZpZyA9IGdkYXRhKFwiaG9saWRheV9jbGllbnRfZGF0YVwiLCBcImRhdGFfaW5mb1wiLCBbYmlkXSk7XG4gICAgICAgIGlmIChjb25maWcgPT0gbnVsbCkgcmV0dXJuIGZhbHNlXG4gICAgICAgIHZhciByb2xlX3ZvID0gUm9sZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRSb2xlVm8oKTtcbiAgICAgICAgaWYgKHJvbGVfdm8ubGV2IDwgY29uZmlnLm9wZW5fbGV2KSByZXR1cm4gZmFsc2VcbiAgICAgICAgdmFyIGlzX3ZlcmlmeWlvcyA9IGNvbmZpZy5pc192ZXJpZnlpb3M7XG4gICAgICAgIGlmIChpc192ZXJpZnlpb3MgPT0gMSkgcmV0dXJuIHRydWUvL+WmguaenOaYr+aPkOWuoeacjemDveimgeaYvuekulxuICAgICAgICBpZiAoYmlkID09IFdlbGZhcmVDb25zdC5XZWxmYXJlSWNvbi5iaW5kcGhvbmUpIHtcbiAgICAgICAgICAgIHJldHVybiBTSE9XX0JJTkRfUEhPTkVcbiAgICAgICAgfSBlbHNlIGlmIChiaWQgPT0gV2VsZmFyZUNvbnN0LldlbGZhcmVJY29uLndlY2hhdCkge1xuICAgICAgICAgICAgcmV0dXJuIFNIT1dfV0VDSEFUX0NFUlRJRllcbiAgICAgICAgfSBlbHNlIGlmIChiaWQgPT0gV2VsZmFyZUNvbnN0LldlbGZhcmVJY29uLnBvc3RlKSB7XG4gICAgICAgICAgICByZXR1cm4gU0hPV19CQUlEVV9USUVCQVxuICAgICAgICB9IGVsc2UgaWYgKGJpZCA9PSBXZWxmYXJlQ29uc3QuV2VsZmFyZUljb24uaW52aWNvZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBTSE9XX1NJTkdMRV9JTlZJQ09ERVxuICAgICAgICB9IGVsc2UgaWYgKGJpZCA9PSBXZWxmYXJlQ29uc3QuV2VsZmFyZUljb24uc2hhcmVfZ2FtZSkge1xuICAgICAgICAgICAgcmV0dXJuIFNIT1dfR0FNRV9TSEFSRVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIElTX1NIT1dfQ0hBUkdFO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8v5omT5byA56aP5Yip5Li755WM6Z2iIGJpZOWPlldlbGZhcmVDb25zdGFudHMgV2VsZmFyZUljb24g6Lez6L2s5oyH5a6a5qCH562+6aG1IFxuICAgIG9wZW5NYWluV2luZG93OiBmdW5jdGlvbiAoc3RhdHVzLCBiaWQpIHtcbiAgICAgICAgaWYgKHN0YXR1cyA9PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoSVNfU0hPV19DSEFSR0UgPT0gZmFsc2UpIC8v56aP5Yip6Z2i5p2/5Zyo5LiN5Y+v5YWF5YC85LiN6KaB5omT5byA5LqGXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB2YXIgcm9sZV92byA9IFJvbGVDb250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0Um9sZVZvKCk7XG4gICAgICAgICAgICB2YXIgZGF0YV9pbmZvID0gQ29uZmlnLmhvbGlkYXlfY2xpZW50X2RhdGEuZGF0YV9pbmZvO1xuICAgICAgICAgICAgaWYgKGRhdGFfaW5mbyAmJiBkYXRhX2luZm9bYmlkXSkge1xuICAgICAgICAgICAgICAgIGlmIChyb2xlX3ZvLmxldiA8IGRhdGFfaW5mb1tiaWRdLm9wZW5fbGV2KSB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UoY2MuanMuZm9ybWF0U3RyKFV0aWxzLlRJMThOKFwi5Lq654mp562J57qnJXPlvIDlkK9cIiksIGRhdGFfaW5mb1tiaWRdLm9wZW5fbGV2KSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8v6buY6K6k56aP5YipXG4gICAgICAgICAgICAvL+i/memHjOmHjeaWsOiuvue9ruS4gOS4i+agh+etvlxuICAgICAgICAgICAgdmFyIHN1Yl92byA9IG51bGw7XG4gICAgICAgICAgICBmb3IgKHZhciBrIGluIENvbmZpZy5ob2xpZGF5X2NsaWVudF9kYXRhLmRhdGFfaW5mbykge1xuICAgICAgICAgICAgICAgIHZhciB2ID0gZ2RhdGEoXCJob2xpZGF5X2NsaWVudF9kYXRhXCIsIFwiZGF0YV9pbmZvXCIsIFtrXSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMud2VsZmFyZV9saXN0W3YuYmlkXSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrQ2FuQWRkKHYuYmlkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFdlbGZhcmVTdWJUYWJWbyA9IHJlcXVpcmUoXCJ3ZWxmYXJlX3N1Yl90YWJfdm9cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJfdm8gPSBuZXcgV2VsZmFyZVN1YlRhYlZvKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViX3ZvLnVwZGF0ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViX3ZvLnVwZGF0ZSh2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2VsZmFyZV9saXN0W3YuYmlkXSA9IHN1Yl92bztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLndlbGZhcmVfd2luKSB7XG4gICAgICAgICAgICAgICAgdGhpcy53ZWxmYXJlX3dpbiA9IFV0aWxzLmNyZWF0ZUNsYXNzKFwid2VsZmFyZV9tYWluX3dpbmRvd1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMud2VsZmFyZV93aW4ub3BlbihiaWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMud2VsZmFyZV93aW4gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMud2VsZmFyZV93aW4uY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLndlbGZhcmVfd2luID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvL+iOt+WPluemj+WIqeagh+etvuWIl+ihqFxuICAgIGdldFdlbGZhcmVTdWJMaXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB3ZWxmYXJlX3N1Yl9saXN0ID0gW107XG4gICAgICAgIHZhciBBY3Rpb25Db250cm9sbGVyID0gcmVxdWlyZShcImFjdGlvbl9jb250cm9sbGVyXCIpO1xuXG4gICAgICAgIGlmICh0aGlzLndlbGZhcmVfbGlzdCAhPSBudWxsICYmIFV0aWxzLm5leHQodGhpcy53ZWxmYXJlX2xpc3QpICE9IG51bGwpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGsgaW4gdGhpcy53ZWxmYXJlX2xpc3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgdiA9IHRoaXMud2VsZmFyZV9saXN0W2tdO1xuICAgICAgICAgICAgICAgIHZhciBuZWVkX2FkZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKEFjdGlvbkNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5pc1NwZWNpYWxCaWQodi5iaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2byA9IEFjdGlvbkNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRBY3Rpb25TdWJUYWJWbyh2LmJpZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2byA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZWVkX2FkZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2LmJpZCA9PSBXZWxmYXJlQ29uc3QuV2VsZmFyZUljb24ucXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9wZW4gPSB0aGlzLm1vZGVsLmdldFF1ZXN0T3BlbkRhdGEoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wZW4gJiYgb3Blbi5zdGF0dXMgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmVlZF9hZGQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodi5iaWQgPT0gV2VsZmFyZUNvbnN0LldlbGZhcmVJY29uLmJpbmRwaG9uZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaXNfb3ZlciA9IHRoaXMuY2hlY2tCaW5kUGhvbmVTdGF0dXMoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzX292ZXIgPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmVlZF9hZGQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodi5iaWQgPT0gV2VsZmFyZUNvbnN0LldlbGZhcmVJY29uLndlY2hhdCkgey8v5a6Y5b6u56aP5YipXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIChQTEFURk9STV9UWVBSID09IFwiU0hfUkhcIikgeyAgIC8v5bey5YWz5rOo5bm25LiU6aKG5Y+W5LqG5aWW5YqxXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICBpZiAod2luZG93LlNIX1JIX0lTX1NVQlNDUklCRSA9PSB0cnVlICYmIHRoaXMubW9kZWwuZ2V0U3Vic2NyaXB0aW9uQXdhcmRTdGF0dXMoKSA9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgbmVlZF9hZGQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgICAgICBpZiAoVVNFX1NESyA9PSB0cnVlICYmIChQTEFURk9STV9UWVBSID09IFwiUVFfU0RLXCIgfHwgUExBVEZPUk1fVFlQUiA9PSBcIlNIX1NES1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmVlZF9hZGQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChQTEFURk9STV9UWVBSID09IFwiU0hfUkhcIiAmJiBTSF9SSF9JU19TSE9XX1NVQlNDUklCRSA9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmVlZF9hZGQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYgKFBMQVRGT1JNX1RZUFIgPT0gXCJTSF9SSFwiICYmIFNIX1JIX0lTX1NIT1dfU1VCU0NSSUJFID09IGZhbHNlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRfYWRkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHYuYmlkID09IFdlbGZhcmVDb25zdC5XZWxmYXJlSWNvbi5pbnZpY29kZSkgey8v5o6o6I2Q56CBXG4gICAgICAgICAgICAgICAgICAgIGlmIChVU0VfU0RLID09IHRydWUgJiYgUExBVEZPUk1fVFlQUiA9PSBcIlFRX1NES1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZWVkX2FkZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2LmJpZCA9PSBXZWxmYXJlQ29uc3QuV2VsZmFyZUljb24ucG9zdGUpIHsvL+i0tOWQp1xuICAgICAgICAgICAgICAgICAgICBpZiAoVVNFX1NESyA9PSB0cnVlICYmIFBMQVRGT1JNX1RZUFIgPT0gXCJRUV9TREtcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmVlZF9hZGQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodi5iaWQgPT0gV2VsZmFyZUNvbnN0LldlbGZhcmVJY29uLnNoYXJlX2dhbWUpIHsvL+mCgOivt+WlveWPi1xuICAgICAgICAgICAgICAgICAgICBpZiAoVVNFX1NESyA9PSB0cnVlICYmIChQTEFURk9STV9UWVBSID09IFwiUVFfU0RLXCIgfHwgUExBVEZPUk1fVFlQUiA9PSBcIlNIX1NES1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmVlZF9hZGQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChQTEFURk9STV9UWVBSID09IFwiU0hfUkhcIiAmJiBTSF9SSF9JU19TSE9XX1NIQVJFID09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZWVkX2FkZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZiAoUExBVEZPUk1fVFlQUiA9PSBcIlNIX1JIXCIgJiYgU0hfUkhfSVNfU0hPV19TSEFSRSA9PSBmYWxzZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZWVkX2FkZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2LmJpZCA9PSBXZWxmYXJlQ29uc3QuV2VsZmFyZUljb24ucXFfbm90aWNlKSB7Ly9RUeWFrOWRilxuICAgICAgICAgICAgICAgICAgICBpZiAoVVNFX1NESyA9PSBmYWxzZSB8fCBQTEFURk9STV9UWVBSICE9IFwiUVFfU0RLXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRfYWRkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHYuYmlkID09IFdlbGZhcmVDb25zdC5XZWxmYXJlSWNvbi5zaF9zaGFyZV9nYW1lIHx8IHYuYmlkID09IFdlbGZhcmVDb25zdC5XZWxmYXJlSWNvbi5zaF9jb2xsZWN0KSB7Ly/mt7HmtbflsI/nqIvluo/muLjmiI/liIbkuqsg5rex5rW35bCP56iL5bqP5b6u5L+h5YWs5LyX5Y+3IOaUtuiXj+acieekvFxuICAgICAgICAgICAgICAgICAgICBpZiAoVVNFX1NESyA9PSBmYWxzZSB8fCBQTEFURk9STV9UWVBSICE9IFwiU0hfU0RLXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRfYWRkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9ZWxzZSBpZih2LmJpZCA9PSBXZWxmYXJlQ29uc3QuV2VsZmFyZUljb24uc2hfd2VjaGF0KXsvL+a3sea1t+Wwj+eoi+W6j+W+ruS/oeWFrOS8l+WPt1xuICAgICAgICAgICAgICAgICAgICBpZiAoVVNFX1NESyA9PSBmYWxzZSB8fCBQTEFURk9STV9UWVBSICE9IFwiU0hfU0RLXCIgfHwgd2luZG93LlNIX1NES19GT0xMT1cgPT0gdHJ1ZSkgeyBcbiAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRfYWRkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobmVlZF9hZGQgPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICB3ZWxmYXJlX3N1Yl9saXN0LnB1c2godik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChVdGlscy5uZXh0KHdlbGZhcmVfc3ViX2xpc3QpICE9IG51bGwpIHtcbiAgICAgICAgICAgIHdlbGZhcmVfc3ViX2xpc3Quc29ydChVdGlscy50YWJsZUxvd2VyU29ydGVyKFtcInNvcnRfdmFsXCJdKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdlbGZhcmVfc3ViX2xpc3Q7XG4gICAgfSxcblxuICAgIC8v5Y2H57qn55qE5pe25YCZ5Yik5pat57qi54K5XG4gICAgdXBkYXRlV2VsZmFyZVJlZFN0YXR1czogZnVuY3Rpb24gKGxldmVsKSB7XG4gICAgICAgIGlmIChsZXZlbCA9PSBudWxsKSByZXR1cm5cbiAgICAgICAgaWYgKHRoaXMud2VsZmFyZV9jYWNoZV9yZWQgPT0gbnVsbCB8fCB0aGlzLndlbGZhcmVfY2FjaGVfcmVkW2xldmVsXSA9PSBudWxsKSByZXR1cm5cbiAgICAgICAgdmFyIGxpc3QgPSB0aGlzLndlbGZhcmVfY2FjaGVfcmVkW2xldmVsXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBsaXN0KSB7XG4gICAgICAgICAgICB0aGlzLnNldFdlbGZhcmVTdGF0dXMoaywgbGlzdFtrXSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy/orr7nva7npo/liKnlm77moIfnmoTnirbmgIEs5aaC5p6c5Zu+5qCH5rKh5pyJ5byA5ZCvIOW6lOivpeS4jemcgOimgeiuvue9rue6oueCuVxuICAgIHNldFdlbGZhcmVTdGF0dXM6IGZ1bmN0aW9uIChiaWQsIHN0YXR1cykge1xuICAgICAgICBpZiAodGhpcy5jaGVja0NhbkFkZChiaWQpID09IGZhbHNlKSB7XG4gICAgICAgICAgICB2YXIgY29uZmlnID0gZ2RhdGEoXCJob2xpZGF5X2NsaWVudF9kYXRhXCIsIFwiZGF0YV9pbmZvXCIsIFtiaWRdKTtcbiAgICAgICAgICAgIGlmIChjb25maWcpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy53ZWxmYXJlX2NhY2hlX3JlZFtjb25maWcub3Blbl9sZXZdID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWxmYXJlX2NhY2hlX3JlZFtjb25maWcub3Blbl9sZXZdID0ge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMud2VsZmFyZV9jYWNoZV9yZWRbY29uZmlnLm9wZW5fbGV2XVtiaWRdID0gc3RhdHVzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMud2VsZmFyZV9zdGF0dXNfbGlzdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy53ZWxmYXJlX3N0YXR1c19saXN0ID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgbnVtID0gMDtcbiAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gdHJ1ZSkgbnVtID0gMTtcbiAgICAgICAgICAgIHZhciB2byA9IHtcbiAgICAgICAgICAgICAgICBiaWQ6IGJpZCxcbiAgICAgICAgICAgICAgICBudW06IG51bVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHZvMSA9IHtcbiAgICAgICAgICAgICAgICBiaWQ6IGJpZCxcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1c1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy53ZWxmYXJlX3N0YXR1c19saXN0W2JpZF0gPSB2bzE7XG5cbiAgICAgICAgICAgIC8v6LS05ZCn55qE57qi54K5KOeUseS6juayoeacieeUqOWIsOWNj+iuruWPquiDveeJueauiuWkhOeQhilcbiAgICAgICAgICAgIHRoaXMuc2V0UG9zdGVXZWxmYXJlU3RhdHVzKHRydWUpO1xuXG4gICAgICAgICAgICAvL+i/meaYr+emj+WIqeWKn+iDveWbvuagh+e6oueCuVxuICAgICAgICAgICAgTWFpbnVpQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLnNldEZ1bmN0aW9uVGlwc1N0YXR1cyhNYWludWlDb25zdC5pY29uLndlbGZhcmUsIHZvKVxuXG4gICAgICAgICAgICAvL+emj+WIqeagh+etvueahOmdouadv1xuICAgICAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShXZWxmYXJlRXZlbnQuVVBEQVRFX1dFTEZBUkVfVEFCX1NUQVRVUywgdm8xKTtcbiAgICAgICAgfVxuXG4gICAgfSxcblxuICAgIC8vL+i0tOWQp+eahOe6oueCuVxuICAgIHNldFBvc3RlV2VsZmFyZVN0YXR1czogZnVuY3Rpb24gKHN0YXR1cykge1xuXG4gICAgfSxcblxuICAgIC8v5qC55o2uaWTojrflj5bnpo/liKnnmoTmoIfnrb7pobXnirbmgIEs5Li76KaB5piv6I635Y+W5piv5ZCm5pyJ57qi54K5XG4gICAgZ2V0V2VsZmFyZVN0YXR1c0J5SUQ6IGZ1bmN0aW9uIChpZCkge1xuICAgICAgICBpZiAodGhpcy53ZWxmYXJlX3N0YXR1c19saXN0KVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMud2VsZmFyZV9zdGF0dXNfbGlzdFtpZF07XG4gICAgfSxcblxuICAgIGhhbmRsZTIxMDA4OiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICB0aGlzLm1vZGVsLnNldERhaWx5QXdhcmRTdGF0dXMoZGF0YS5zdGF0dXMpO1xuICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKFdlbGZhcmVFdmVudC5VcGRhdGVfRGFpbHlfQXdhd2RfRGF0YSk7XG4gICAgfSxcblxuICAgIC8v6K+35rGC6aKG5Y+W5q+P5pel56S8XG4gICAgc2VuZGVyMjEwMDk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMjEwMDksIHt9KVxuICAgIH0sXG5cbiAgICBoYW5kbGUyMTAwOTogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgbWVzc2FnZShkYXRhLm1zZylcbiAgICB9LFxuXG5cbiAgICBvcGVuU3VyZXZleVF1ZXN0VmlldzogZnVuY3Rpb24gKHN0YXR1cykge1xuICAgICAgICBpZiAoc3RhdHVzID09IHRydWUpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5zdXJldmV5UXVlc3RXaW5kb3cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1cmV2ZXlRdWVzdFdpbmRvdyA9IFV0aWxzLmNyZWF0ZUNsYXNzKFwic3VyZXZleXF1ZXN0X3dpbmRvd1wiLCB0aGlzKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdXJldmV5UXVlc3RXaW5kb3cub3BlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuc3VyZXZleVF1ZXN0V2luZG93KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdXJldmV5UXVlc3RXaW5kb3cuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN1cmV2ZXlRdWVzdFdpbmRvdyA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy/osIPmn6Xpl67ljbfljY/orq5cbiAgICBoYW5kbGUyNDYwMDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEuc3RhdHVzID09IDEgJiYgKGRhdGEuZmxhZyA9PSAwIHx8IGRhdGEuZmxhZyA9PSAxKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRXZWxmYXJlU3RhdHVzKFdlbGZhcmVDb25zdC5XZWxmYXJlSWNvbi5xdWVzdCwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFdlbGZhcmVTdGF0dXMoV2VsZmFyZUNvbnN0LldlbGZhcmVJY29uLnF1ZXN0LCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tb2RlbC5zZXRRdWVzdE9wZW5EYXRhKGRhdGEpO1xuICAgIH0sXG5cbiAgICAvL+iOt+WPluetlOWNt+WfuuacrOWGheWuuVxuICAgIHNlbmRlcjI0NjAxOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDI0NjAxLCB7fSk7XG4gICAgfSxcblxuICAgIGhhbmRsZTI0NjAxOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKFdlbGZhcmVFdmVudC5HZXRfU3VyZXZleVF1ZXN0X0Jhc2ljLCBkYXRhKVxuICAgIH0sXG5cbiAgICAvL+iOt+WPluetlOWNt+mimOebruS/oeaBr1xuICAgIHNlbmRlcjI0NjAyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDI0NjAyLCB7fSk7XG4gICAgfSxcblxuICAgIGhhbmRsZTI0NjAyOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKFdlbGZhcmVFdmVudC5HZXRfU3VyZXZleVF1ZXN0X1RvcGljX0NvbnRlbnQsIGRhdGEpXG4gICAgfSxcblxuICAgIC8v562U5Y23XG4gICAgc2VuZGVyMjQ2MDM6IGZ1bmN0aW9uIChsaXN0KSB7XG4gICAgICAgIHZhciBwcm90b2NhbCA9IHt9O1xuICAgICAgICBwcm90b2NhbC5yZXRfbGlzdCA9IGxpc3Q7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDI0NjAzLCBwcm90b2NhbCk7XG4gICAgfSxcblxuICAgIGhhbmRsZTI0NjAzOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBtZXNzYWdlKGRhdGEubXNnKTtcbiAgICAgICAgaWYgKGRhdGEuY29kZSA9PSAxKSB7XG4gICAgICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKFdlbGZhcmVFdmVudC5TdXJldmV5UXVlc3RfU3VibWl0LCBkYXRhKVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8v6aKG5Y+W5aWW5YqxXG4gICAgc2VuZGVyMjQ2MDQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMjQ2MDQsIHt9KTtcbiAgICB9LFxuXG4gICAgaGFuZGxlMjQ2MDQ6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIG1lc3NhZ2UoZGF0YS5tc2cpO1xuICAgICAgICBpZiAoZGF0YS5jb2RlID09IDEpIHtcbiAgICAgICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoV2VsZmFyZUV2ZW50LkdldF9TdXJldmV5UXVlc3RfR2V0X1Jld2FyZCwgZGF0YSlcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvL+WRqOOAgeaciOekvOWMhVxuICAgIHNlbmRlcjIxMDA3OiBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgdmFyIHByb3RvY2FsID0ge307XG4gICAgICAgIHByb3RvY2FsLnR5cGUgPSBpbmRleCB8fCAxO1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyMTAwNywgcHJvdG9jYWwpO1xuICAgIH0sXG5cbiAgICBoYW5kbGUyMTAwNzogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShXZWxmYXJlRXZlbnQuVXBkYXRhX1dlZWtfTW9udGhfRGF0YSwgZGF0YSlcbiAgICB9LFxuXG4gICAgaGFuZGxlMjEwMDg6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHRoaXMubW9kZWwuc2V0RGFpbHlBd2FyZFN0YXR1cyhkYXRhLnN0YXR1cyk7XG4gICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoV2VsZmFyZUV2ZW50LlVwZGF0ZV9EYWlseV9Bd2F3ZF9EYXRhKVxuICAgIH0sXG5cbiAgICAvL+ivt+axgumihuWPluavj+aXpeekvFxuICAgIHNlbmRlcjIxMDA5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwcm90b2NhbCA9IHt9O1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyMTAwOSwgcHJvdG9jYWwpO1xuICAgIH0sXG5cbiAgICBoYW5kbGUyMTAwOTogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgbWVzc2FnZShkYXRhLm1zZylcbiAgICB9LFxuXG4gICAgb3BlbkNlcnRpZnlCaW5kUGhvbmVXaW5kb3c6IGZ1bmN0aW9uIChzdGF0dXMpIHtcbiAgICAgICAgaWYgKCFzdGF0dXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNlcnRpZnlfcGhvbmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNlcnRpZnlfcGhvbmUuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNlcnRpZnlfcGhvbmUgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2VydGlmeV9waG9uZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jZXJ0aWZ5X3Bob25lID0gVXRpbHMuY3JlYXRlQ2xhc3MoXCJjZXJ0aWZ5X2JpbmRfcGhvbmVfd2luZG93XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jZXJ0aWZ5X3Bob25lLm9wZW4oKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvL+WIpOaWreaYr+WQpumcgOimgeaYvuekuue7keWumuaJi+acuuagh+etvlxuICAgIGNoZWNrQmluZFBob25lU3RhdHVzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChQTEFURk9STV9UWVBSID09IFwiU0hfUkhcIiAmJiBTSF9SSF9JU19TSE9XX0JJTkRQSE9ORSA9PSBmYWxzZSAmJiBQTEFURk9STV9OQU1FID09IFwic2htaXhcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5iaW5kX3Bob25lX2RhdGEgPT0gbnVsbCB8fCB0aGlzLmJpbmRfcGhvbmVfZGF0YS5jb2RlICE9IDAgfHwgKFVTRV9TREsgPT0gdHJ1ZSAmJiAoUExBVEZPUk1fVFlQUiA9PSBcIlFRX1NES1wiIHx8IFBMQVRGT1JNX1RZUFIgPT0gXCJTSF9TREtcIikpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICAvL+aJi+acuue7keWumuS/oeaBr1xuICAgIGdldEJpbmRQaG9uZURhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmluZF9waG9uZV9kYXRhXG4gICAgfSxcblxuICAgIC8v5omL5py657uR5a6aXG4gICAgaGFuZGxlMTY2MzU6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGlmIChQTEFURk9STV9UWVBSID09IFwiU0hfUkhcIiAmJiBTSF9SSF9JU19TSE9XX0JJTkRQSE9ORSA9PSBmYWxzZSAmJiBQTEFURk9STV9OQU1FID09IFwic2htaXhcIikge1xuICAgICAgICAgICAgdGhpcy5zZXRXZWxmYXJlU3RhdHVzKFdlbGZhcmVDb25zdC5XZWxmYXJlSWNvbi5iaW5kcGhvbmUsIGZhbHNlKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5iaW5kX3Bob25lX2RhdGEgPSBkYXRhO1xuICAgICAgICB0aGlzLmJpbmRfcGhvbmVfZGF0YS5zdGF0dXMgPSBkYXRhLmNvZGU7XG4gICAgICAgIGlmIChkYXRhLmNvZGUgPT0gMCAmJiBTSE9XX0JJTkRfUEhPTkUpIHsvL+acque7keWumueahOaXtuWAmeaYvuekuue6oueCuVxuICAgICAgICAgICAgdGhpcy5zZXRXZWxmYXJlU3RhdHVzKFdlbGZhcmVDb25zdC5XZWxmYXJlSWNvbi5iaW5kcGhvbmUsIHRydWUpXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy/or7fmsYLnu5HlrprmiYvmnLpcbiAgICByZXF1ZXN0QmluZFBob25lOiBmdW5jdGlvbiAobnVtYmVyLCBjb2RlKSB7XG4gICAgICAgIHZhciBwcm90b2NhbCA9IHt9O1xuICAgICAgICBwcm90b2NhbC5udW1iZXIgPSBudW1iZXI7XG4gICAgICAgIHByb3RvY2FsLmNvZGUgPSBjb2RlO1xuICAgICAgICBpZiAoUExBVEZPUk1fVFlQUiA9PSBcIlNIX1JIXCIgJiYgU0hfUkhfSVNfU0hPV19CSU5EUEhPTkUgPT0gZmFsc2UgJiYgUExBVEZPUk1fTkFNRSA9PSBcInNobWl4XCIpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDE2NjM2LCBwcm90b2NhbCk7XG4gICAgfSxcblxuICAgIC8v6aKG5Y+W5omL5py65aWW5Yqx6L+U5ZueXG4gICAgaGFuZGxlMTY2MzY6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGlmIChQTEFURk9STV9UWVBSID09IFwiU0hfUkhcIiAmJiBTSF9SSF9JU19TSE9XX0JJTkRQSE9ORSA9PSBmYWxzZSAmJiBQTEFURk9STV9OQU1FID09IFwic2htaXhcIikge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYmluZF9waG9uZV9kYXRhID09IG51bGwpIHJldHVyblxuICAgICAgICBtZXNzYWdlKGRhdGEubXNnKTtcbiAgICAgICAgdGhpcy5iaW5kX3Bob25lX2RhdGEuc3RhdHVzID0gZGF0YS5jb2RlOyAgICAvLzA65aSx6LSlIDE66aKG5Y+W5aWW5Yqx5oiQ5YqfIDI65Y+R6YCB6aqM6K+B56CB5oiQ5YqfXG4gICAgICAgIGlmIChkYXRhLmNvZGUgIT0gMCkge1xuICAgICAgICAgICAgLy/lj5HpgIHmiYvmnLrpqozor4HlrozmiJBcbiAgICAgICAgICAgIGlmIChkYXRhLmNvZGUgPT0gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYmluZF9waG9uZV9kYXRhLmNvZGUgPSAxO1xuICAgICAgICAgICAgICAgIHRoaXMub3BlbkNlcnRpZnlCaW5kUGhvbmVXaW5kb3coZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShXZWxmYXJlRXZlbnQuVXBkYXRlQmluZFBob25lU3RhdHVzLCB0aGlzLmJpbmRfcGhvbmVfZGF0YSlcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLy0tLS0tLS0tLS0tLS0t5b6u5L+h5YWs5LyX5Y+3XG4gICAgaGFuZGxlMTY2MzM6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIC8vIGlmIChTSE9XX1dFQ0hBVF9DRVJUSUZZKSB7XG4gICAgICAgIC8vICAgICB0aGlzLndlY2hhdF9zdWJzY3JpcHRpb25fZGF0YSA9IGRhdGE7XG4gICAgICAgIC8vICAgICBpZiAoZGF0YS5jb2RlID09IDApIHtcbiAgICAgICAgLy8gICAgICAgICB0aGlzLnNldFdlbGZhcmVTdGF0dXMoV2VsZmFyZUNvbnN0LldlbGZhcmVJY29uLndlY2hhdCwgdHJ1ZSlcbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gfVxuICAgICAgICAvLyBpZiAoUExBVEZPUk1fVFlQUiA9PSBcIlNIX1JIXCIpIHtcbiAgICAgICAgLy8gICAgIHRoaXMuc2V0V2VsZmFyZVN0YXR1cyhXZWxmYXJlQ29uc3QuV2VsZmFyZUljb24ud2VjaGF0LCB0aGlzLm1vZGVsLmdldFN1YnNjcmlwdGlvbkF3YXJkU3RhdHVzKCkgPT0gMCk7XG4gICAgICAgIC8vIH1cbiAgICB9LFxuXG4gICAgLy/pgJrnn6XmnI3liqHnq6/lt7Lnu4/mv4DmtLvmn6XnnIvlvq7kv6HlhazkvJflj7fkuoZcbiAgICB0ZWxsU2VydmVyV2VjaGF0U3RhdHVzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIGlmICh0aGlzLndlY2hhdF9zdWJzY3JpcHRpb25fZGF0YSAmJiB0aGlzLndlY2hhdF9zdWJzY3JpcHRpb25fZGF0YS5jb2RlID09IDEpIHJldHVyblxuICAgICAgICAvLyB0aGlzLlNlbmRQcm90b2NhbCgxNjYzNCwge30pO1xuICAgIH0sXG5cbiAgICBoYW5kbGUxNjYzNDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgLy8gaWYgKHRoaXMud2VjaGF0X3N1YnNjcmlwdGlvbl9kYXRhKSB7XG4gICAgICAgIC8vICAgICB0aGlzLndlY2hhdF9zdWJzY3JpcHRpb25fZGF0YS5jb2RlID0gMTtcbiAgICAgICAgLy8gICAgIHRoaXMuc2V0V2VsZmFyZVN0YXR1cyhXZWxmYXJlQ29uc3QuV2VsZmFyZUljb24ud2VjaGF0LCBmYWxzZSlcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyBpZiAoUExBVEZPUk1fVFlQUiA9PSBcIlNIX1JIXCIpIHtcbiAgICAgICAgLy8gICAgIHRoaXMuc2V0V2VsZmFyZVN0YXR1cyhXZWxmYXJlQ29uc3QuV2VsZmFyZUljb24ud2VjaGF0LCBmYWxzZSk7XG4gICAgICAgIC8vIH1cbiAgICB9LFxuXG4gICAgZ2V0V2VjaGF0RGF0YTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy53ZWNoYXRfc3Vic2NyaXB0aW9uX2RhdGE7XG4gICAgfSxcblxuICAgIGdldFdlbGZhcmVSb290OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLndlbGZhcmVfd2luKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMud2VsZmFyZV93aW4ucm9vdF93bmQ7XG4gICAgfSxcblxuXG5cbiAgICAvL+a3sea1t3Nka+eUqOWIsOeahOWIhuS6q+WSjOWFs+azqC0tLS0tLS0tLS0tLVxuICAgIC8v6K+35rGC5YiG5Lqr5aWW5Yqx5YaF5a655ZKM54q25oCBXG4gICAgc2VuZDE2NjkxOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDE2NjkxLCB7fSk7XG4gICAgfSxcblxuICAgIC8v5YiG5Lqr5aWW5Yqx5YaF5a65XG4gICAgaGFuZGxlMTY2OTE6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIC8vIGNjLmxvZyhcIjE2NjkxXCIsIGRhdGEpXG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNldFNoYXJlQXdhcmQoZGF0YS5pdGVtcylcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2V0U2hhcmVBd2FyZFN0YXR1cyhkYXRhLmNvZGUpO1xuICAgICAgICAgICAgaWYgKGRhdGEuY29kZSA9PSAxKSB7XG4gICAgICAgICAgICAgICAgaWYgKFBMQVRGT1JNX1RZUFIgPT0gXCJTSF9TREtcIikge1xuICAgICAgICAgICAgICAgICAgICBNYWludWlDb250cm9sbGVyLmdldEluc3RhbmNlKCkucmVtb3ZlRnVuY3Rpb25JY29uQnlJZChNYWludWlDb25zdC5pY29uLnNod3hfc2hhcmUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIE1haW51aUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5yZW1vdmVGdW5jdGlvbkljb25CeUlkKE1haW51aUNvbnN0Lmljb24uc2hyaF9zaGFyZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8v6K+35rGC6aKG5Y+W5YiG5Lqr5aWW5YqxXG4gICAgc2VuZDE2NjkyOiBmdW5jdGlvbiAoaWQpIHtcbiAgICAgICAgdmFyIHByb3RvY2FsID0ge307XG4gICAgICAgIHByb3RvY2FsLmlkID0gaWQ7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDE2NjkyLCBwcm90b2NhbCk7XG4gICAgfSxcblxuICAgIC8v5YiG5Lqr6aKG5Y+W5aWW5Yqx6L+U5ZueXG4gICAgaGFuZGxlMTY2OTI6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIC8vIGNjLmxvZyhcIjE2NjkyXCIsIGRhdGEpXG4gICAgICAgIG1lc3NhZ2UoZGF0YS5tc2cpO1xuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLmNvZGUgPT0gMSkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZXRTaGFyZUF3YXJkU3RhdHVzKGRhdGEuY29kZSk7XG4gICAgICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKFdlbGZhcmVFdmVudC5VcGRhdGVfZ2V0X1NIUkhfc2hhcmVfYXdhcmRfc3RhdHVzLCBkYXRhLmNvZGUpXG4gICAgICAgICAgICBpZiAoUExBVEZPUk1fVFlQUiA9PSBcIlNIX1NES1wiKSB7XG4gICAgICAgICAgICAgICAgTWFpbnVpQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLnJlbW92ZUZ1bmN0aW9uSWNvbkJ5SWQoTWFpbnVpQ29uc3QuaWNvbi5zaHd4X3NoYXJlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgTWFpbnVpQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLnJlbW92ZUZ1bmN0aW9uSWNvbkJ5SWQoTWFpbnVpQ29uc3QuaWNvbi5zaHJoX3NoYXJlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvL+ivt+axguWFs+azqOWlluWKseWGheWuueWSjOeKtuaAgVxuICAgIHNlbmQxNjY5MzogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgxNjY5Mywge30pO1xuICAgIH0sXG5cbiAgICAvL+WFs+azqOWlluWKseWGheWuuVxuICAgIGhhbmRsZTE2NjkzOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAvLyBjYy5sb2coXCIxNjY5M1wiLCBkYXRhKVxuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZXRTdWJzY3JpcHRpb25Bd2FyZChkYXRhLml0ZW1zKVxuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZXRTdWJzY3JpcHRpb25Bd2FyZFN0YXR1cyhkYXRhLmNvZGUpO1xuICAgICAgICAgICAgaWYgKGRhdGEuY29kZSA9PSAxKSB7XG4gICAgICAgICAgICAgICAgaWYgKFBMQVRGT1JNX1RZUFIgPT0gXCJTSF9TREtcIikge1xuICAgICAgICAgICAgICAgICAgICBNYWludWlDb250cm9sbGVyLmdldEluc3RhbmNlKCkucmVtb3ZlRnVuY3Rpb25JY29uQnlJZChNYWludWlDb25zdC5pY29uLnNod3hfc3ViKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBNYWludWlDb250cm9sbGVyLmdldEluc3RhbmNlKCkucmVtb3ZlRnVuY3Rpb25JY29uQnlJZChNYWludWlDb25zdC5pY29uLnNocmhfc3ViKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gdGhpcy5TZW5kUHJvdG9jYWwoMTY2MzQsIHt9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvL+ivt+axgumihuWPluWFs+azqOWlluWKsVxuICAgIHNlbmQxNjY5NDogZnVuY3Rpb24gKGlkKSB7XG4gICAgICAgIHZhciBwcm90b2NhbCA9IHt9O1xuICAgICAgICBwcm90b2NhbC5pZCA9IGlkO1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgxNjY5NCwgcHJvdG9jYWwpO1xuICAgICAgICAvLyBSb2xlQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLnNlbmRlcjEwOTQ1KHN0cilcbiAgICB9LFxuXG4gICAgLy/lhbPms6jpooblj5blpZblirHov5Tlm55cbiAgICBoYW5kbGUxNjY5NDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgLy8gY2MubG9nKFwiMTY2OTRcIiwgZGF0YSlcbiAgICAgICAgbWVzc2FnZShkYXRhLm1zZyk7XG4gICAgICAgIGlmIChkYXRhICYmIGRhdGEuY29kZSA9PSAxKSB7XG4gICAgICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKFdlbGZhcmVFdmVudC5VcGRhdGVfU0hSSF9Bd2FyZF9TdGF0dXMsIDEpO1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZXRTdWJzY3JpcHRpb25Bd2FyZFN0YXR1cyhkYXRhLmNvZGUpO1xuICAgICAgICAgICAgLy8gdGhpcy5TZW5kUHJvdG9jYWwoMTY2MzQsIHt9KTtcbiAgICAgICAgICAgIGlmIChQTEFURk9STV9UWVBSID09IFwiU0hfU0RLXCIpIHtcbiAgICAgICAgICAgICAgICBNYWludWlDb250cm9sbGVyLmdldEluc3RhbmNlKCkucmVtb3ZlRnVuY3Rpb25JY29uQnlJZChNYWludWlDb25zdC5pY29uLnNod3hfc3ViKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgTWFpbnVpQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLnJlbW92ZUZ1bmN0aW9uSWNvbkJ5SWQoTWFpbnVpQ29uc3QuaWNvbi5zaHJoX3N1Yik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy/or7fmsYLmlLbol4/lpZblirHlhoXlrrlcbiAgICBzZW5kMTY2OTU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHByb3RvY2FsID0ge307XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDE2Njk1LCBwcm90b2NhbCk7XG4gICAgfSxcblxuICAgIC8v6aKG5Y+W5pS26JeP5YaF5a656L+U5ZueXG4gICAgaGFuZGxlMTY2OTU6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNldENvbGxlY3RBd2FyZChkYXRhLml0ZW1zKVxuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZXRDb2xsZWN0QXdhcmRTdGF0dXMoZGF0YS5jb2RlKTtcbiAgICAgICAgICAgIGlmIChkYXRhLmNvZGUgPT0gMSkge1xuICAgICAgICAgICAgICAgIE1haW51aUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5yZW1vdmVGdW5jdGlvbkljb25CeUlkKE1haW51aUNvbnN0Lmljb24uc2h3eF9jb2xsZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvL+ivt+axgumihuWPluaUtuiXj+WlluWKsVxuICAgIHNlbmQxNjY5NjogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcHJvdG9jYWwgPSB7fTtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMTY2OTYsIHByb3RvY2FsKTtcbiAgICB9LFxuXG4gICAgLy/pooblj5bmlLbol4/ov5Tlm55cbiAgICBoYW5kbGUxNjY5NjogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgbWVzc2FnZShkYXRhLm1zZyk7XG4gICAgICAgIGlmIChkYXRhICYmIGRhdGEuY29kZSA9PSAxKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNldENvbGxlY3RBd2FyZFN0YXR1cyhkYXRhLmNvZGUpO1xuICAgICAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShXZWxmYXJlRXZlbnQuVXBkYXRlX2dldF9TSFdYX2NvbGxlY3RfYXdhcmRfc3RhdHVzLCAxKTtcbiAgICAgICAgICAgIE1haW51aUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5yZW1vdmVGdW5jdGlvbkljb25CeUlkKE1haW51aUNvbnN0Lmljb24uc2h3eF9jb2xsZWN0KTtcbiAgICAgICAgfVxuICAgIH0sXG5cblxuXG5cblxuICAgIC8v5rex5rW36J6N5ZCI5YiG5Lqr54q25oCBXG4gICAgc2hyaFNoYXJlU3RhdHVzOiBmdW5jdGlvbiAoc3RhdHVzLCBkYXRhKSB7XG4gICAgICAgIC8vIG1lc3NhZ2UoXCLliIbkuqvmiJDlip/vvIHvvIHvvIHvvIFcIiwgZGF0YSlcbiAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShXZWxmYXJlRXZlbnQuVXBkYXRlX2dldF9TSFJIX3NoYXJlX2F3YXJkX3N0YXR1cywgMilcbiAgICB9LFxuXG4gICAgLy/mt7Hmtbfono3lkIjlrp7lkI3mg4XlhrVcbiAgICBzaHJoUmVhbE5hbWVTdGF0dXM6IGZ1bmN0aW9uIChzdGF0dXMpIHtcbiAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgTWFpbnVpQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLnJlbW92ZUZ1bmN0aW9uSWNvbkJ5SWQoTWFpbnVpQ29uc3QuaWNvbi5zaHJoX3JlYWxuYW1lKTtcbiAgICAgICAgfVxuICAgIH0sXG5cblxuICAgIC8v6K+35rGC5omL5py657uR5a6a5aWW5Yqx5YaF5a655ZKM54q25oCBXG4gICAgc2VuZDE2Njk3OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDE2Njk3LCB7fSk7XG4gICAgfSxcblxuICAgIC8v5omL5py657uR5a6a5aWW5Yqx5YaF5a65XG4gICAgaGFuZGxlMTY2OTc6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGlmIChQTEFURk9STV9UWVBSID09IFwiU0hfUkhcIiAmJiBTSF9SSF9JU19TSE9XX0JJTkRQSE9ORSA9PSBmYWxzZSAmJiBQTEFURk9STV9OQU1FID09IFwic2htaXhcIikge1xuICAgICAgICAgICAgdGhpcy5zZXRXZWxmYXJlU3RhdHVzKFdlbGZhcmVDb25zdC5XZWxmYXJlSWNvbi5iaW5kcGhvbmUsIGZhbHNlKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGEgJiYgUExBVEZPUk1fTkFNRSA9PSBcInNobWl4XCIpIHtcbiAgICAgICAgICAgIHRoaXMuYmluZF9waG9uZV9kYXRhID0gZGF0YTtcbiAgICAgICAgICAgIHRoaXMuYmluZF9waG9uZV9kYXRhLnN0YXR1cyA9IGRhdGEuY29kZTtcbiAgICAgICAgICAgIGlmIChkYXRhLmNvZGUgPT0gMCAmJiBTSE9XX0JJTkRfUEhPTkUpIHsvL+acque7keWumueahOaXtuWAmeaYvuekuue6oueCuVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0V2VsZmFyZVN0YXR1cyhXZWxmYXJlQ29uc3QuV2VsZmFyZUljb24uYmluZHBob25lLCB0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8v6K+35rGC6aKG5Y+W5omL5py657uR5a6a5aWW5YqxXG4gICAgc2VuZDE2Njk4OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwcm90b2NhbCA9IHt9O1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgxNjY5OCwgcHJvdG9jYWwpO1xuICAgIH0sXG5cbiAgICAvL+aJi+acuue7keWumumihuWPluWlluWKsei/lOWbnlxuICAgIGhhbmRsZTE2Njk4OiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBtZXNzYWdlKGRhdGEubXNnKTtcbiAgICAgICAgdGhpcy5iaW5kX3Bob25lX2RhdGEuc3RhdHVzID0gZGF0YS5jb2RlO1xuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLmNvZGUgPT0gMSkge1xuICAgICAgICAgICAgdGhpcy5iaW5kX3Bob25lX2RhdGEuY29kZSA9IGRhdGEuY29kZTtcbiAgICAgICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoV2VsZmFyZUV2ZW50LlVwZGF0ZUJpbmRQaG9uZVN0YXR1cywgMSk7XG4gICAgICAgIH1cbiAgICB9LFxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gV2VsZmFyZUNvbnRyb2xsZXI7Il19
|