|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/partnersummon/view/partnersummon_gain_window.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, '1f4502T3qVFapFZQ5PPUam2', 'partnersummon_gain_window');
|
// Scripts/mod/partnersummon/view/partnersummon_gain_window.js
|
|
"use strict";
|
|
// --------------------------------------------------------------------
|
// @author: xxx@syg.com(必填, 创建模块的人员)
|
// @description:
|
// 这里是描述这个窗体的作用的
|
// <br/>Create: 2019-01-16 10:06:06
|
// --------------------------------------------------------------------
|
var PathTool = require("pathtool");
|
|
var SummonConst = require("partnersummon_const");
|
|
var RoleController = require("role_controller");
|
|
var BackpackController = require("backpack_controller");
|
|
var TimesummonController = require("timesummon_controller");
|
|
var PartnersummonGainWindow = cc.Class({
|
"extends": BaseView,
|
ctor: function ctor() {
|
this.prefabPath = PathTool.getPrefabPath("partnersummon", "partnersummon_gain_window");
|
this.viewTag = SCENE_TAG.dialogue; // 该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
|
|
this.win_type = WinType.Full; // 是否是全屏窗体 WinType.Full, WinType.Big, WinType.Mini, WinType.Tips
|
|
this.can_show = false;
|
this.ctrl = arguments[0];
|
this.modle = this.ctrl.getModel();
|
this.recruit_data = this.modle.getRecruitData();
|
},
|
initConfig: function initConfig() {
|
this.partnersummon_config = Config.recruit_data.data_partnersummon_data;
|
},
|
openCallBack: function openCallBack() {
|
this.summon_bg_sp = this.seekChild("summon_bg", cc.Sprite);
|
this.bg_effect_sk = this.seekChild("bg_effect", sp.Skeleton);
|
this.partnersummon_bg = this.seekChild("partnersummon_bg");
|
this.summon_bg_nd = this.seekChild("summon_bg");
|
this.partnersummon_bg.scale = FIT_SCALE;
|
this.summon_bg_nd.scale = FIT_SCALE;
|
this.get_des_nd = this.seekChild("get_des");
|
this.items_content_nd = this.seekChild("items_content");
|
this.again_btn_nd = this.seekChild("again_btn");
|
this.confirm_btn_nd = this.seekChild("confirm_btn");
|
this.again_one_txt_nd = this.seekChild("again_one_txt");
|
this.again_ten_txt_nd = this.seekChild("again_ten_txt");
|
this.again_need_nd = this.seekChild("again_need");
|
this.goods_num_lb = this.seekChild("goods_num", cc.RichText);
|
this.goods_sp = this.seekChild("goods", cc.Sprite);
|
this.confirm_btn_nd.on(cc.Node.EventType.TOUCH_END, this.didClickConfirmBtn, this);
|
this.again_btn_nd.on(cc.Node.EventType.TOUCH_END, this.didClickAgainBtn, this);
|
},
|
registerEvent: function registerEvent() {},
|
closeCallBack: function closeCallBack() {
|
if (this.item_nds) {
|
for (var i = 0; i < this.item_nds.length; ++i) {
|
if (this.item_nds[i]) {
|
this.item_nds[i].deleteMe();
|
this.item_nds[i] = null;
|
}
|
}
|
|
this.item_nds = null;
|
}
|
|
var GuideEvent = require("guide_event");
|
|
gcore.GlobalEvent.fire(GuideEvent.CloseTaskEffect);
|
|
if (this.get_des_nd && this.get_des_nd.isValid) {
|
this.get_des_nd.stopAllActions();
|
}
|
|
this.ctrl.openSummonGainWindow(false);
|
},
|
openRootWnd: function openRootWnd(params) {
|
if (!this.recruit_data) return;
|
this.udpateWidgets();
|
this.createGetItems();
|
this.analyseRecruitData();
|
},
|
udpateWidgets: function udpateWidgets() {
|
this.type_flag = this.recruit_data.flag; // 背景
|
|
if (this.type_flag == 0) {
|
this.partnersummon_config = Config.recruit_data.data_partnersummon_data;
|
} else if (this.type_flag == 1) {
|
this.partnersummon_config = Config.recruit_holiday_data.data_summon;
|
} else if (this.type_flag == 2) {
|
this.partnersummon_config = Config.recruit_holiday_elite_data.data_summon;
|
}
|
|
var summon_cfg_item = this.partnersummon_config[this.recruit_data.group_id];
|
var resources_id = "partnersummon_call_bg_100";
|
if (summon_cfg_item) resources_id = summon_cfg_item.call_bg;
|
var bg_path = PathTool.getUIIconPath("bigbg/partnersummon", resources_id);
|
this.loadRes(bg_path, function (bigbg_sf) {
|
this.summon_bg_sp.spriteFrame = bigbg_sf;
|
}.bind(this)); // 背景动画
|
// var bg_effect_id = "140"
|
// if (summon_cfg_item)
|
// bg_effect_id = summon_cfg_item.call_bg_action;
|
// var effect_res = PathTool.getEffectRes(bg_effect_id);
|
// var effect_path = PathTool.getSpinePath(effect_res, "action");
|
// this.loadRes(effect_path, function(bg_sd) {
|
// this.bg_effect_sk.skeletonData = bg_sd;
|
// this.bg_effect_sk.setAnimation(0, "action", true);
|
// }.bind(this));
|
// 按钮
|
|
if (this.recruit_data.times === 1) {
|
this.again_one_txt_nd.active = true;
|
this.again_ten_txt_nd.active = false;
|
} else {
|
this.again_one_txt_nd.active = false;
|
this.again_ten_txt_nd.active = true;
|
} // 道具提示
|
|
|
this.need_item_id = null;
|
this.item_enough = false;
|
var need_count;
|
var have_count;
|
|
if (this.recruit_data.group_id != SummonConst.Summon_Type.Score) {
|
if (this.type_flag == 0) {
|
if (this.recruit_data.times === 1) {
|
this.need_item_id = summon_cfg_item.item_once[0][0];
|
need_count = summon_cfg_item.item_once[0][1];
|
} else {
|
this.need_item_id = summon_cfg_item.item_five[0][0];
|
need_count = summon_cfg_item.item_five[0][1];
|
}
|
} else if (this.type_flag == 1) {
|
if (this.recruit_data.times === 1) {
|
this.need_item_id = summon_cfg_item.loss_item_once[0][0];
|
need_count = summon_cfg_item.loss_item_once[0][1];
|
} else {
|
this.need_item_id = summon_cfg_item.loss_item_ten[0][0];
|
need_count = summon_cfg_item.loss_item_ten[0][1];
|
}
|
} else if (this.type_flag == 2) {
|
if (this.recruit_data.times === 1) {
|
this.need_item_id = summon_cfg_item.loss_item_once[0][0];
|
need_count = summon_cfg_item.loss_item_once[0][1];
|
} else {
|
this.need_item_id = summon_cfg_item.loss_item_ten[0][0];
|
need_count = summon_cfg_item.loss_item_ten[0][1];
|
}
|
}
|
} else {}
|
|
if (this.recruit_data.group_id === SummonConst.Summon_Type.Friend) {
|
var role_vo = RoleController.getInstance().getRoleVo();
|
have_count = role_vo.friend_point;
|
} else {
|
have_count = BackpackController.getInstance().getModel().getBackPackItemNumByBid(this.need_item_id);
|
}
|
|
if (this.recruit_data.group_id === SummonConst.Summon_Type.Score) {
|
this.again_need_nd.active = false;
|
this.again_btn_nd.active = false;
|
this.confirm_btn_nd.x = this.root_wnd.width * 0.5;
|
} else {
|
this.again_need_nd.active = true;
|
this.again_btn_nd.active = true;
|
this.confirm_btn_nd.x = 530;
|
var good_res_config = Utils.getItemConfig(this.need_item_id);
|
var good_res_path = PathTool.getItemRes(good_res_config.icon); // var item_res_path = PathTool.getIconPath("item", this.need_item_id);
|
|
this.loadRes(good_res_path, function (item_sf) {
|
this.goods_sp.spriteFrame = item_sf;
|
}.bind(this));
|
var label_str = "";
|
|
if (have_count < need_count) {
|
this.item_enough = false;
|
label_str = cc.js.formatStr("<color=#e14737><outline color=#000000 width=2>%s</outline></color><color=#ffffff><outline color=#000000 width=2>/%s</outline></color>", have_count, need_count);
|
} else {
|
this.item_enough = true;
|
label_str = cc.js.formatStr("<color=#35ff14><outline color=#000000 width=2>%s</outline></color><color=#ffffff><outline color=#000000 width=2>/%s</outline></color>", have_count, need_count);
|
}
|
|
this.goods_num_lb.string = label_str;
|
}
|
},
|
showItems: function showItems() {
|
if (!this.get_des_nd || !this.get_des_nd.isValid) return;
|
this.get_des_nd.scale = 1.5;
|
|
if (!this.get_action) {
|
var delay_act = cc.delayTime(0.1);
|
var scale_act = cc.scaleTo(0.1, 1);
|
this.get_action = cc.sequence(delay_act, scale_act);
|
}
|
|
this.get_des_nd.runAction(this.get_action);
|
this.can_show = true;
|
|
if (this.items_init) {
|
this.addGetItems();
|
}
|
},
|
addGetItems: function addGetItems() {
|
Utils.playEffectSound(AUDIO_TYPE.Recruit, "result_01");
|
if (this.item_nds == null) return;
|
|
for (var item_i = 0; item_i < this.item_nds.length; item_i++) {
|
this.items_content_nd.addChild(this.item_nds[item_i].root_wnd);
|
this.item_nds[item_i].playShowAction(item_i); // this.item_nds[item_i].showEffect();
|
}
|
},
|
createGetItems: function createGetItems() {
|
if (!this.recruit_data) return;
|
this.rewards = this.recruit_data.rewards;
|
this.init_num = 0;
|
this.item_nds = [];
|
var scheIndex = 0;
|
|
var HeroExhibitionItem = require("hero_get_item");
|
|
var create_item_sch = gcore.Timer.set(function () {
|
var hero_item = new HeroExhibitionItem(this.rewards[scheIndex], scheIndex, this.itemFinishCreate.bind(this));
|
if (this.item_nds == null) return;
|
this.item_nds.push(hero_item);
|
++scheIndex;
|
}.bind(this), 50, this.rewards.length);
|
},
|
itemFinishCreate: function itemFinishCreate(index, root_wn) {
|
++this.init_num;
|
|
if (this.init_num == this.rewards.length) {
|
if (this.item_nds == null) return;
|
|
if (this.item_nds.length > 5) {
|
this.items_content_nd.width = 120 * 5 + 20 * 4;
|
} else {
|
this.items_content_nd.width = 120 * this.item_nds.length + (20 * this.item_nds.length - 1);
|
}
|
|
this.items_init = true;
|
if (this.can_show) this.addGetItems();
|
}
|
},
|
analyseRecruitData: function analyseRecruitData() {
|
if (this.finish_cb) this.finish_cb(); // return
|
|
var show_bids = []; // 需要召唤的高级英雄
|
|
if (this.recruit_data.partner_bids) {
|
var bid_info = null;
|
|
for (var bid_i in this.recruit_data.partner_bids) {
|
bid_info = this.recruit_data.partner_bids[bid_i];
|
var par_config = Config.partner_data.data_partner_base[bid_info.partner_bid];
|
if (par_config.show_effect) show_bids.push(bid_info);
|
}
|
}
|
|
if (show_bids.length > 0) {
|
this.ctrl.openSummonGainShowWindow(true, show_bids, this.showItems.bind(this));
|
} else {
|
this.showItems();
|
}
|
},
|
didClickConfirmBtn: function didClickConfirmBtn(event) {
|
// var show_bids = [{partner_bid: 40403, init_star: 4}, {partner_bid: 20504, init_star: 5}, {partner_bid: 30402, init_star: 4}];
|
// this.ctrl.openSummonGainShowWindow(true, show_bids, this.showItems.bind(this));
|
this.ctrl.openSummonGainWindow(false);
|
},
|
didClickAgainBtn: function didClickAgainBtn(event) {
|
// 判断英雄背包空间
|
var HeroController = require("hero_controller");
|
|
var hero_model = HeroController.getInstance().getModel();
|
var hero_bag_info = hero_model.getHeroMaxCount();
|
var limit_num = hero_bag_info.max_count - hero_bag_info.have_coutn;
|
|
if (this.recruit_data.times > limit_num) {
|
var str = Utils.TI18N("英雄列表已满,可通过提升贵族等级或购买增加英雄携带数量,是否前往购买?");
|
|
var CommonAlert = require("commonalert");
|
|
CommonAlert.show(str, Utils.TI18N("确定"), function () {
|
var MainuiConst = require("mainui_const");
|
|
var ActionController = require("action_controller");
|
|
var MainuiController = require("mainui_controller");
|
|
MainuiController.getInstance().changeMainUIStatus(MainuiConst.btn_index.partner);
|
ActionController.getInstance().openActionMainPanel(false);
|
}, Utils.TI18N("取消"), function () {});
|
return;
|
}
|
|
if (this.type_flag == 0) {
|
if (!this.item_enough) {
|
if (this.recruit_data.group_id == SummonConst.Summon_Type.Advanced) {
|
this.showGoldTips(this.recruit_data.times);
|
return;
|
}
|
|
BackpackController.getInstance().openTipsSource(true, this.need_item_id);
|
} else {
|
this.ctrl.againRecruit();
|
|
if (this.modle.getClickStatus()) {
|
this.modle.clickIntervalStatus(false);
|
} else {
|
this.ctrl.openSummonGainWindow(false);
|
}
|
}
|
} else {
|
if (this.item_enough) {
|
if (this.type_flag == 1) {
|
this.ctrl.openSummonGainWindow(false);
|
TimesummonController.getInstance().requestTimeSummon(this.recruit_data.times, 4);
|
} else if (this.type_flag == 2) {
|
this.ctrl.openSummonGainWindow(false);
|
|
var ElitesummonController = require("elitesummon_controller");
|
|
ElitesummonController.getInstance().send23221(this.recruit_data.times, 4);
|
}
|
|
return;
|
}
|
|
this.showGoldTips(this.recruit_data.times);
|
}
|
},
|
showGoldTips: function showGoldTips(times) {
|
var config_data;
|
|
if (this.type_flag == 0) {
|
config_data = Config.recruit_data.data_partnersummon_data["300"];
|
} else if (this.type_flag == 1) {
|
config_data = Config.recruit_holiday_data.data_summon[this.recruit_data.group_id];
|
} else if (this.type_flag == 2) {
|
config_data = Config.recruit_holiday_elite_data.data_summon[this.recruit_data.group_id];
|
}
|
|
var recruit_data = this.modle.getSummonProtoDataByGroupID(300);
|
|
var RoleController = require("role_controller");
|
|
var role_vo = RoleController.getInstance().getRoleVo();
|
var need_num, val_str, val_num, call_num;
|
|
if (this.type_flag == 0) {
|
// good_res_config = Utils.getItemConfig(config_data.exchange_once[0][0]);
|
need_num = config_data.exchange_once[0][1];
|
val_str = Utils.getItemConfig(config_data.exchange_once_gain[0][0]).name;
|
val_num = config_data.exchange_once_gain[0][1];
|
call_num = recruit_data.draw_list[1].times || 1;
|
} else if (this.type_flag == 1 || this.type_flag == 2) {
|
// good_res_config = Utils.getItemConfig(config_data.loss_gold_once[0][0]);
|
need_num = config_data.loss_gold_once[0][1];
|
val_str = Utils.getItemConfig(config_data.gain_once[0][0]).name;
|
val_num = config_data.gain_once[0][1];
|
call_num = this.recruit_data.times;
|
}
|
|
var good_res_path = "3";
|
var hvae_num = role_vo.gold;
|
|
if (times === 10) {
|
if (this.type_flag == 0) {
|
need_num = config_data.exchange_five[0][1];
|
val_str = Utils.getItemConfig(config_data.exchange_five_gain[0][0]).name;
|
val_num = config_data.exchange_once_gain[0][1];
|
call_num = recruit_data.draw_list[0].times || 10;
|
} else if (this.type_flag == 1 || this.type_flag == 2) {
|
need_num = config_data.loss_gold_ten[0][1];
|
val_str = Utils.getItemConfig(config_data.gain_ten[0][0]).name;
|
val_num = config_data.gain_once[0][1];
|
call_num = this.recruit_data.times;
|
}
|
}
|
|
var buy_ori = cc.js.formatStr(StringUtil.parseStr(Lang.DIAMOND_CONSUME).string, good_res_path, need_num, hvae_num);
|
var get_ori = cc.js.formatStr(StringUtil.parseStr(Lang.BUY_DES).string, val_str, val_num, call_num);
|
var des_str = buy_ori + get_ori;
|
var frame_arrays = [];
|
var good_path = PathTool.getIconPath("item", "3");
|
frame_arrays.push(good_path);
|
|
var CommonAlert = require("commonalert");
|
|
var common_aler_view = CommonAlert.show(des_str, "确定", this.configUseGold.bind(this, times), "取消", null, null, null, {
|
resArr: frame_arrays,
|
maxWidth: 450,
|
align: cc.macro.TextAlignment.LEFT
|
});
|
},
|
configUseGold: function configUseGold() {
|
if (this.type_flag == 0) {
|
var group_id = 300;
|
var times = this.recruit_data.times;
|
var recruit_type = 3;
|
this.ctrl.recurit(group_id, times, recruit_type);
|
this.ctrl.openSummonGainWindow(false);
|
} else if (this.type_flag == 1) {
|
TimesummonController.getInstance().requestTimeSummon(this.recruit_data.times, 3);
|
this.ctrl.openSummonGainWindow(false);
|
} else if (this.type_flag == 2) {
|
var ElitesummonController = require("elitesummon_controller");
|
|
ElitesummonController.getInstance().send23221(this.recruit_data.times, 3);
|
this.ctrl.openSummonGainWindow(false);
|
} // if (this.recruit_cb) this.recruit_cb(group_id, times, recruit_type);
|
|
}
|
});
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxwYXJ0bmVyc3VtbW9uXFx2aWV3XFxwYXJ0bmVyc3VtbW9uX2dhaW5fd2luZG93LmpzIl0sIm5hbWVzIjpbIlBhdGhUb29sIiwicmVxdWlyZSIsIlN1bW1vbkNvbnN0IiwiUm9sZUNvbnRyb2xsZXIiLCJCYWNrcGFja0NvbnRyb2xsZXIiLCJUaW1lc3VtbW9uQ29udHJvbGxlciIsIlBhcnRuZXJzdW1tb25HYWluV2luZG93IiwiY2MiLCJDbGFzcyIsIkJhc2VWaWV3IiwiY3RvciIsInByZWZhYlBhdGgiLCJnZXRQcmVmYWJQYXRoIiwidmlld1RhZyIsIlNDRU5FX1RBRyIsImRpYWxvZ3VlIiwid2luX3R5cGUiLCJXaW5UeXBlIiwiRnVsbCIsImNhbl9zaG93IiwiY3RybCIsImFyZ3VtZW50cyIsIm1vZGxlIiwiZ2V0TW9kZWwiLCJyZWNydWl0X2RhdGEiLCJnZXRSZWNydWl0RGF0YSIsImluaXRDb25maWciLCJwYXJ0bmVyc3VtbW9uX2NvbmZpZyIsIkNvbmZpZyIsImRhdGFfcGFydG5lcnN1bW1vbl9kYXRhIiwib3BlbkNhbGxCYWNrIiwic3VtbW9uX2JnX3NwIiwic2Vla0NoaWxkIiwiU3ByaXRlIiwiYmdfZWZmZWN0X3NrIiwic3AiLCJTa2VsZXRvbiIsInBhcnRuZXJzdW1tb25fYmciLCJzdW1tb25fYmdfbmQiLCJzY2FsZSIsIkZJVF9TQ0FMRSIsImdldF9kZXNfbmQiLCJpdGVtc19jb250ZW50X25kIiwiYWdhaW5fYnRuX25kIiwiY29uZmlybV9idG5fbmQiLCJhZ2Fpbl9vbmVfdHh0X25kIiwiYWdhaW5fdGVuX3R4dF9uZCIsImFnYWluX25lZWRfbmQiLCJnb29kc19udW1fbGIiLCJSaWNoVGV4dCIsImdvb2RzX3NwIiwib24iLCJOb2RlIiwiRXZlbnRUeXBlIiwiVE9VQ0hfRU5EIiwiZGlkQ2xpY2tDb25maXJtQnRuIiwiZGlkQ2xpY2tBZ2FpbkJ0biIsInJlZ2lzdGVyRXZlbnQiLCJjbG9zZUNhbGxCYWNrIiwiaXRlbV9uZHMiLCJpIiwibGVuZ3RoIiwiZGVsZXRlTWUiLCJHdWlkZUV2ZW50IiwiZ2NvcmUiLCJHbG9iYWxFdmVudCIsImZpcmUiLCJDbG9zZVRhc2tFZmZlY3QiLCJpc1ZhbGlkIiwic3RvcEFsbEFjdGlvbnMiLCJvcGVuU3VtbW9uR2FpbldpbmRvdyIsIm9wZW5Sb290V25kIiwicGFyYW1zIiwidWRwYXRlV2lkZ2V0cyIsImNyZWF0ZUdldEl0ZW1zIiwiYW5hbHlzZVJlY3J1aXREYXRhIiwidHlwZV9mbGFnIiwiZmxhZyIsInJlY3J1aXRfaG9saWRheV9kYXRhIiwiZGF0YV9zdW1tb24iLCJyZWNydWl0X2hvbGlkYXlfZWxpdGVfZGF0YSIsInN1bW1vbl9jZmdfaXRlbSIsImdyb3VwX2lkIiwicmVzb3VyY2VzX2lkIiwiY2FsbF9iZyIsImJnX3BhdGgiLCJnZXRVSUljb25QYXRoIiwibG9hZFJlcyIsImJpZ2JnX3NmIiwic3ByaXRlRnJhbWUiLCJiaW5kIiwidGltZXMiLCJhY3RpdmUiLCJuZWVkX2l0ZW1faWQiLCJpdGVtX2Vub3VnaCIsIm5lZWRfY291bnQiLCJoYXZlX2NvdW50IiwiU3VtbW9uX1R5cGUiLCJTY29yZSIsIml0ZW1fb25jZSIsIml0ZW1fZml2ZSIsImxvc3NfaXRlbV9vbmNlIiwibG9zc19pdGVtX3RlbiIsIkZyaWVuZCIsInJvbGVfdm8iLCJnZXRJbnN0YW5jZSIsImdldFJvbGVWbyIsImZyaWVuZF9wb2ludCIsImdldEJhY2tQYWNrSXRlbU51bUJ5QmlkIiwieCIsInJvb3Rfd25kIiwid2lkdGgiLCJnb29kX3Jlc19jb25maWciLCJVdGlscyIsImdldEl0ZW1Db25maWciLCJnb29kX3Jlc19wYXRoIiwiZ2V0SXRlbVJlcyIsImljb24iLCJpdGVtX3NmIiwibGFiZWxfc3RyIiwianMiLCJmb3JtYXRTdHIiLCJzdHJpbmciLCJzaG93SXRlbXMiLCJnZXRfYWN0aW9uIiwiZGVsYXlfYWN0IiwiZGVsYXlUaW1lIiwic2NhbGVfYWN0Iiwic2NhbGVUbyIsInNlcXVlbmNlIiwicnVuQWN0aW9uIiwiaXRlbXNfaW5pdCIsImFkZEdldEl0ZW1zIiwicGxheUVmZmVjdFNvdW5kIiwiQVVESU9fVFlQRSIsIlJlY3J1aXQiLCJpdGVtX2kiLCJhZGRDaGlsZCIsInBsYXlTaG93QWN0aW9uIiwicmV3YXJkcyIsImluaXRfbnVtIiwic2NoZUluZGV4IiwiSGVyb0V4aGliaXRpb25JdGVtIiwiY3JlYXRlX2l0ZW1fc2NoIiwiVGltZXIiLCJzZXQiLCJoZXJvX2l0ZW0iLCJpdGVtRmluaXNoQ3JlYXRlIiwicHVzaCIsImluZGV4Iiwicm9vdF93biIsImZpbmlzaF9jYiIsInNob3dfYmlkcyIsInBhcnRuZXJfYmlkcyIsImJpZF9pbmZvIiwiYmlkX2kiLCJwYXJfY29uZmlnIiwicGFydG5lcl9kYXRhIiwiZGF0YV9wYXJ0bmVyX2Jhc2UiLCJwYXJ0bmVyX2JpZCIsInNob3dfZWZmZWN0Iiwib3BlblN1bW1vbkdhaW5TaG93V2luZG93IiwiZXZlbnQiLCJIZXJvQ29udHJvbGxlciIsImhlcm9fbW9kZWwiLCJoZXJvX2JhZ19pbmZvIiwiZ2V0SGVyb01heENvdW50IiwibGltaXRfbnVtIiwibWF4X2NvdW50IiwiaGF2ZV9jb3V0biIsInN0ciIsIlRJMThOIiwiQ29tbW9uQWxlcnQiLCJzaG93IiwiTWFpbnVpQ29uc3QiLCJBY3Rpb25Db250cm9sbGVyIiwiTWFpbnVpQ29udHJvbGxlciIsImNoYW5nZU1haW5VSVN0YXR1cyIsImJ0bl9pbmRleCIsInBhcnRuZXIiLCJvcGVuQWN0aW9uTWFpblBhbmVsIiwiQWR2YW5jZWQiLCJzaG93R29sZFRpcHMiLCJvcGVuVGlwc1NvdXJjZSIsImFnYWluUmVjcnVpdCIsImdldENsaWNrU3RhdHVzIiwiY2xpY2tJbnRlcnZhbFN0YXR1cyIsInJlcXVlc3RUaW1lU3VtbW9uIiwiRWxpdGVzdW1tb25Db250cm9sbGVyIiwic2VuZDIzMjIxIiwiY29uZmlnX2RhdGEiLCJnZXRTdW1tb25Qcm90b0RhdGFCeUdyb3VwSUQiLCJuZWVkX251bSIsInZhbF9zdHIiLCJ2YWxfbnVtIiwiY2FsbF9udW0iLCJleGNoYW5nZV9vbmNlIiwiZXhjaGFuZ2Vfb25jZV9nYWluIiwibmFtZSIsImRyYXdfbGlzdCIsImxvc3NfZ29sZF9vbmNlIiwiZ2Fpbl9vbmNlIiwiaHZhZV9udW0iLCJnb2xkIiwiZXhjaGFuZ2VfZml2ZSIsImV4Y2hhbmdlX2ZpdmVfZ2FpbiIsImxvc3NfZ29sZF90ZW4iLCJnYWluX3RlbiIsImJ1eV9vcmkiLCJTdHJpbmdVdGlsIiwicGFyc2VTdHIiLCJMYW5nIiwiRElBTU9ORF9DT05TVU1FIiwiZ2V0X29yaSIsIkJVWV9ERVMiLCJkZXNfc3RyIiwiZnJhbWVfYXJyYXlzIiwiZ29vZF9wYXRoIiwiZ2V0SWNvblBhdGgiLCJjb21tb25fYWxlcl92aWV3IiwiY29uZmlnVXNlR29sZCIsInJlc0FyciIsIm1heFdpZHRoIiwiYWxpZ24iLCJtYWNybyIsIlRleHRBbGlnbm1lbnQiLCJMRUZUIiwicmVjcnVpdF90eXBlIiwicmVjdXJpdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxRQUFRLEdBQWFDLE9BQU8sQ0FBQyxVQUFELENBQWhDOztBQUNBLElBQUlDLFdBQVcsR0FBVUQsT0FBTyxDQUFDLHFCQUFELENBQWhDOztBQUNBLElBQUlFLGNBQWMsR0FBT0YsT0FBTyxDQUFDLGlCQUFELENBQWhDOztBQUNBLElBQUlHLGtCQUFrQixHQUFHSCxPQUFPLENBQUMscUJBQUQsQ0FBaEM7O0FBQ0EsSUFBSUksb0JBQW9CLEdBQUdKLE9BQU8sQ0FBQyx1QkFBRCxDQUFsQzs7QUFDQSxJQUFJSyx1QkFBdUIsR0FBR0MsRUFBRSxDQUFDQyxLQUFILENBQVM7QUFDbkMsYUFBU0MsUUFEMEI7QUFFbkNDLEVBQUFBLElBQUksRUFBRSxnQkFBWTtBQUNkLFNBQUtDLFVBQUwsR0FBa0JYLFFBQVEsQ0FBQ1ksYUFBVCxDQUF1QixlQUF2QixFQUF3QywyQkFBeEMsQ0FBbEI7QUFDQSxTQUFLQyxPQUFM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b0JBQW9CLENBQUNvRyxXQUFyQixHQUFtQ2tGLGlCQUFuQyxDQUFxRCxLQUFLbkssWUFBTCxDQUFrQm1FLEtBQXZFLEVBQTZFLENBQTdFO0FBQ0EsV0FBS3ZFLElBQUwsQ0FBVWtELG9CQUFWLENBQStCLEtBQS9CO0FBQ0gsS0FISyxNQUdBLElBQUcsS0FBS00sU0FBTCxJQUFrQixDQUFyQixFQUF1QjtBQUN6QixVQUFJZ0gscUJBQXFCLEdBQUczTCxPQUFPLENBQUMsd0JBQUQsQ0FBbkM7O0FBQ0EyTCxNQUFBQSxxQkFBcUIsQ0FBQ25GLFdBQXRCLEdBQW9Db0YsU0FBcEMsQ0FBK0MsS0FBS3JLLFlBQUwsQ0FBa0JtRSxLQUFqRSxFQUF3RSxDQUF4RTtBQUNBLFdBQUt2RSxJQUFMLENBQVVrRCxvQkFBVixDQUErQixLQUEvQjtBQUNILEtBZnFCLENBaUJ0Qjs7QUFDSDtBQXZZa0MsQ0FBVCxDQUE5QiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEBhdXRob3I6IHh4eEBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgIOi/memHjOaYr+aPj+i/sOi/meS4queql+S9k+eahOS9nOeUqOeahFxuLy8gPGJyLz5DcmVhdGU6IDIwMTktMDEtMTYgMTA6MDY6MDZcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgUGF0aFRvb2wgICAgICAgICAgID0gcmVxdWlyZShcInBhdGh0b29sXCIpO1xudmFyIFN1bW1vbkNvbnN0ICAgICAgICA9IHJlcXVpcmUoXCJwYXJ0bmVyc3VtbW9uX2NvbnN0XCIpO1xudmFyIFJvbGVDb250cm9sbGVyICAgICA9IHJlcXVpcmUoXCJyb2xlX2NvbnRyb2xsZXJcIik7XG52YXIgQmFja3BhY2tDb250cm9sbGVyID0gcmVxdWlyZShcImJhY2twYWNrX2NvbnRyb2xsZXJcIik7XG52YXIgVGltZXN1bW1vbkNvbnRyb2xsZXIgPSByZXF1aXJlKFwidGltZXN1bW1vbl9jb250cm9sbGVyXCIpXG52YXIgUGFydG5lcnN1bW1vbkdhaW5XaW5kb3cgPSBjYy5DbGFzcyh7XG4gICAgZXh0ZW5kczogQmFzZVZpZXcsXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnByZWZhYlBhdGggPSBQYXRoVG9vbC5nZXRQcmVmYWJQYXRoKFwicGFydG5lcnN1bW1vblwiLCBcInBhcnRuZXJzdW1tb25fZ2Fpbl93aW5kb3dcIik7XG4gICAgICAgIHRoaXMudmlld1RhZyA9IFNDRU5FX1RBRy5kaWFsb2d1ZTsgICAgICAgICAgLy8g6K+l56qX5L2T5omA5bGedWnlsYLnuqcs5YWo5bGPdWnpnIDopoHlnKh1aeWxgizpnZ7lhajlsY91aeWcqGRpYWxvZ3Vl5bGCLOi/meS4quimgeazqOaEj1xuICAgICAgICB0aGlzLndpbl90eXBlID0gV2luVHlwZS5GdWxsOyAgICAgICAgICAgICAgIC8vIOaYr+WQpuaYr+WFqOWxj+eql+S9kyAgV2luVHlwZS5GdWxsLCBXaW5UeXBlLkJpZywgV2luVHlwZS5NaW5pLCBXaW5UeXBlLlRpcHNcbiAgICAgICAgdGhpcy5jYW5fc2hvdyA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuY3RybCA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgdGhpcy5tb2RsZSA9IHRoaXMuY3RybC5nZXRNb2RlbCgpO1xuICAgICAgICB0aGlzLnJlY3J1aXRfZGF0YSA9IHRoaXMubW9kbGUuZ2V0UmVjcnVpdERhdGEoKTtcbiAgICB9LFxuXG4gICAgaW5pdENvbmZpZzpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLnBhcnRuZXJzdW1tb25fY29uZmlnID0gQ29uZmlnLnJlY3J1aXRfZGF0YS5kYXRhX3BhcnRuZXJzdW1tb25fZGF0YTtcbiAgICB9LFxuXG4gICAgb3BlbkNhbGxCYWNrOmZ1bmN0aW9uKCl7XG4gICAgICAgIHRoaXMuc3VtbW9uX2JnX3NwICAgICAgICAgICA9IHRoaXMuc2Vla0NoaWxkKFwic3VtbW9uX2JnXCIsIGNjLlNwcml0ZSk7XG4gICAgICAgIHRoaXMuYmdfZWZmZWN0X3NrICAgICAgICAgICA9IHRoaXMuc2Vla0NoaWxkKFwiYmdfZWZmZWN0XCIsIHNwLlNrZWxldG9uKTtcbiAgICAgICAgdGhpcy5wYXJ0bmVyc3VtbW9uX2JnICAgICAgID0gdGhpcy5zZWVrQ2hpbGQoXCJwYXJ0bmVyc3VtbW9uX2JnXCIpO1xuICAgICAgICB0aGlzLnN1bW1vbl9iZ19uZCAgICAgICAgICAgPSB0aGlzLnNlZWtDaGlsZChcInN1bW1vbl9iZ1wiKTtcbiAgICAgICAgdGhpcy5wYXJ0bmVyc3VtbW9uX2JnLnNjYWxlID0gRklUX1NDQUxFO1xuICAgICAgICB0aGlzLnN1bW1vbl9iZ19uZC5zY2FsZSAgICAgPSBGSVRfU0NBTEVcbiAgICAgICAgXG4gICAgICAgIHRoaXMuZ2V0X2Rlc19uZCAgICAgICAgICAgICA9IHRoaXMuc2Vla0NoaWxkKFwiZ2V0X2Rlc1wiKTtcbiAgICAgICAgdGhpcy5pdGVtc19jb250ZW50X25kICAgICAgID0gdGhpcy5zZWVrQ2hpbGQoXCJpdGVtc19jb250ZW50XCIpO1xuICAgICAgICB0aGlzLmFnYWluX2J0bl9uZCAgICAgICAgICAgPSB0aGlzLnNlZWtDaGlsZChcImFnYWluX2J0blwiKTtcbiAgICAgICAgdGhpcy5jb25maXJtX2J0bl9uZCAgICAgICAgID0gdGhpcy5zZWVrQ2hpbGQoXCJjb25maXJtX2J0blwiKTtcbiAgICAgICAgdGhpcy5hZ2Fpbl9vbmVfdHh0X25kICAgICAgID0gdGhpcy5zZWVrQ2hpbGQoXCJhZ2Fpbl9vbmVfdHh0XCIpOyAgICAgICAgXG4gICAgICAgIHRoaXMuYWdhaW5fdGVuX3R4dF9uZCAgICAgICA9IHRoaXMuc2Vla0NoaWxkKFwiYWdhaW5fdGVuX3R4dFwiKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuYWdhaW5fbmVlZF9uZCAgICAgICAgICA9IHRoaXMuc2Vla0NoaWxkKFwiYWdhaW5fbmVlZFwiKTtcbiAgICAgICAgdGhpcy5nb29kc19udW1fbGIgICAgICAgICAgID0gdGhpcy5zZWVrQ2hpbGQoXCJnb29kc19udW1cIiwgY2MuUmljaFRleHQpO1xuICAgICAgICB0aGlzLmdvb2RzX3NwICAgICAgICAgICAgICAgPSB0aGlzLnNlZWtDaGlsZChcImdvb2RzXCIsIGNjLlNwcml0ZSk7XG5cbiAgICAgICAgdGhpcy5jb25maXJtX2J0bl9uZC5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9FTkQsIHRoaXMuZGlkQ2xpY2tDb25maXJtQnRuLCB0aGlzKTtcbiAgICAgICAgdGhpcy5hZ2Fpbl9idG5fbmQub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfRU5ELCB0aGlzLmRpZENsaWNrQWdhaW5CdG4sIHRoaXMpO1xuICAgIH0sXG5cbiAgICByZWdpc3RlckV2ZW50OmZ1bmN0aW9uKCl7XG5cbiAgICB9LFxuXG4gICAgY2xvc2VDYWxsQmFjazpmdW5jdGlvbigpe1xuICAgICAgICBpZih0aGlzLml0ZW1fbmRzKXtcbiAgICAgICAgICAgIGZvcihsZXQgaT0wO2k8dGhpcy5pdGVtX25kcy5sZW5ndGg7KytpKXtcbiAgICAgICAgICAgICAgICBpZih0aGlzLml0ZW1fbmRzW2ldKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtX25kc1tpXS5kZWxldGVNZSgpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbV9uZHNbaV0gPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaXRlbV9uZHMgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHZhciBHdWlkZUV2ZW50ID0gcmVxdWlyZShcImd1aWRlX2V2ZW50XCIpO1xuICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKEd1aWRlRXZlbnQuQ2xvc2VUYXNrRWZmZWN0KTtcbiAgICAgICAgaWYodGhpcy5nZXRfZGVzX25kICYmIHRoaXMuZ2V0X2Rlc19uZC5pc1ZhbGlkKXtcbiAgICAgICAgICAgIHRoaXMuZ2V0X2Rlc19uZC5zdG9wQWxsQWN0aW9ucygpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdHJsLm9wZW5TdW1tb25HYWluV2luZG93KGZhbHNlKVxuICAgIH0sXG5cbiAgICBvcGVuUm9vdFduZDpmdW5jdGlvbihwYXJhbXMpe1xuICAgICAgICBpZiAoIXRoaXMucmVjcnVpdF9kYXRhKSByZXR1cm47XG4gICAgICAgIHRoaXMudWRwYXRlV2lkZ2V0cygpO1xuICAgICAgICB0aGlzLmNyZWF0ZUdldEl0ZW1zKCk7XG4gICAgICAgIHRoaXMuYW5hbHlzZVJlY3J1aXREYXRhKCk7XG4gICAgfSxcblxuICAgIHVkcGF0ZVdpZGdldHM6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnR5cGVfZmxhZz0gdGhpcy5yZWNydWl0X2RhdGEuZmxhZ1xuICAgICAgICAvLyDog4zmma9cbiAgICAgICAgaWYodGhpcy50eXBlX2ZsYWcgPT0gMCl7XG4gICAgICAgICAgICB0aGlzLnBhcnRuZXJzdW1tb25fY29uZmlnID0gQ29uZmlnLnJlY3J1aXRfZGF0YS5kYXRhX3BhcnRuZXJzdW1tb25fZGF0YTtcbiAgICAgICAgfWVsc2UgaWYodGhpcy50eXBlX2ZsYWcgPT0gMSl7XG4gICAgICAgICAgICB0aGlzLnBhcnRuZXJzdW1tb25fY29uZmlnID0gQ29uZmlnLnJlY3J1aXRfaG9saWRheV9kYXRhLmRhdGFfc3VtbW9uXG4gICAgICAgIH1lbHNlIGlmKHRoaXMudHlwZV9mbGFnID09IDIpe1xuICAgICAgICAgICAgdGhpcy5wYXJ0bmVyc3VtbW9uX2NvbmZpZyA9IENvbmZpZy5yZWNydWl0X2hvbGlkYXlfZWxpdGVfZGF0YS5kYXRhX3N1bW1vblxuICAgICAgICB9XG4gICAgICAgIHZhciBzdW1tb25fY2ZnX2l0ZW0gPSB0aGlzLnBhcnRuZXJzdW1tb25fY29uZmlnW3RoaXMucmVjcnVpdF9kYXRhLmdyb3VwX2lkXTtcbiAgICAgICAgdmFyIHJlc291cmNlc19pZCA9IFwicGFydG5lcnN1bW1vbl9jYWxsX2JnXzEwMFwiO1xuICAgICAgICBpZiAoc3VtbW9uX2NmZ19pdGVtKVxuICAgICAgICAgICAgcmVzb3VyY2VzX2lkID0gc3VtbW9uX2NmZ19pdGVtLmNhbGxfYmc7XG4gICAgICAgIHZhciBiZ19wYXRoID0gUGF0aFRvb2wuZ2V0VUlJY29uUGF0aChcImJpZ2JnL3BhcnRuZXJzdW1tb25cIiwgcmVzb3VyY2VzX2lkKTtcbiAgICAgICAgdGhpcy5sb2FkUmVzKGJnX3BhdGgsIGZ1bmN0aW9uKGJpZ2JnX3NmKSB7XG4gICAgICAgICAgICB0aGlzLnN1bW1vbl9iZ19zcC5zcHJpdGVGcmFtZSA9IGJpZ2JnX3NmO1xuICAgICAgICB9LmJpbmQodGhpcykpO1xuXG4gICAgICAgIC8vIOiDjOaZr+WKqOeUu1xuICAgICAgICAvLyB2YXIgYmdfZWZmZWN0X2lkID0gXCIxNDBcIlxuICAgICAgICAvLyBpZiAoc3VtbW9uX2NmZ19pdGVtKVxuICAgICAgICAvLyAgICAgYmdfZWZmZWN0X2lkID0gc3VtbW9uX2NmZ19pdGVtLmNhbGxfYmdfYWN0aW9uO1xuXG4gICAgICAgIC8vIHZhciBlZmZlY3RfcmVzID0gUGF0aFRvb2wuZ2V0RWZmZWN0UmVzKGJnX2VmZmVjdF9pZCk7XG4gICAgICAgIC8vIHZhciBlZmZlY3RfcGF0aCA9IFBhdGhUb29sLmdldFNwaW5lUGF0aChlZmZlY3RfcmVzLCBcImFjdGlvblwiKTtcblxuICAgICAgICAvLyB0aGlzLmxvYWRSZXMoZWZmZWN0X3BhdGgsIGZ1bmN0aW9uKGJnX3NkKSB7XG4gICAgICAgIC8vICAgICB0aGlzLmJnX2VmZmVjdF9zay5za2VsZXRvbkRhdGEgPSBiZ19zZDtcbiAgICAgICAgLy8gICAgIHRoaXMuYmdfZWZmZWN0X3NrLnNldEFuaW1hdGlvbigwLCBcImFjdGlvblwiLCB0cnVlKTtcbiAgICAgICAgLy8gfS5iaW5kKHRoaXMpKTtcblxuICAgICAgICAvLyDmjInpkq5cbiAgICAgICAgaWYgKHRoaXMucmVjcnVpdF9kYXRhLnRpbWVzID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLmFnYWluX29uZV90eHRfbmQuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuYWdhaW5fdGVuX3R4dF9uZC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWdhaW5fb25lX3R4dF9uZC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuYWdhaW5fdGVuX3R4dF9uZC5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g6YGT5YW35o+Q56S6XG4gICAgICAgIHRoaXMubmVlZF9pdGVtX2lkID0gbnVsbDtcbiAgICAgICAgdGhpcy5pdGVtX2Vub3VnaCA9IGZhbHNlO1xuICAgICAgICB2YXIgbmVlZF9jb3VudDtcbiAgICAgICAgdmFyIGhhdmVfY291bnQ7XG5cbiAgICAgICAgaWYgKHRoaXMucmVjcnVpdF9kYXRhLmdyb3VwX2lkICE9IFN1bW1vbkNvbnN0LlN1bW1vbl9UeXBlLlNjb3JlKSB7XG4gICAgICAgICAgICBpZih0aGlzLnR5cGVfZmxhZyA9PSAwKXtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWNydWl0X2RhdGEudGltZXMgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZWVkX2l0ZW1faWQgPSBzdW1tb25fY2ZnX2l0ZW0uaXRlbV9vbmNlWzBdWzBdO1xuICAgICAgICAgICAgICAgICAgICBuZWVkX2NvdW50ID0gc3VtbW9uX2NmZ19pdGVtLml0ZW1fb25jZVswXVsxXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5lZWRfaXRlbV9pZCA9IHN1bW1vbl9jZmdfaXRlbS5pdGVtX2ZpdmVbMF1bMF07XG4gICAgICAgICAgICAgICAgICAgIG5lZWRfY291bnQgPSBzdW1tb25fY2ZnX2l0ZW0uaXRlbV9maXZlWzBdWzFdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1lbHNlIGlmKHRoaXMudHlwZV9mbGFnID09IDEpe1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlY3J1aXRfZGF0YS50aW1lcyA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5lZWRfaXRlbV9pZCA9IHN1bW1vbl9jZmdfaXRlbS5sb3NzX2l0ZW1fb25jZVswXVswXTtcbiAgICAgICAgICAgICAgICAgICAgbmVlZF9jb3VudCA9IHN1bW1vbl9jZmdfaXRlbS5sb3NzX2l0ZW1fb25jZVswXVsxXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5lZWRfaXRlbV9pZCA9IHN1bW1vbl9jZmdfaXRlbS5sb3NzX2l0ZW1fdGVuWzBdWzBdO1xuICAgICAgICAgICAgICAgICAgICBuZWVkX2NvdW50ID0gc3VtbW9uX2NmZ19pdGVtLmxvc3NfaXRlbV90ZW5bMF1bMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfWVsc2UgaWYodGhpcy50eXBlX2ZsYWcgPT0gMil7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVjcnVpdF9kYXRhLnRpbWVzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmVlZF9pdGVtX2lkID0gc3VtbW9uX2NmZ19pdGVtLmxvc3NfaXRlbV9vbmNlWzBdWzBdO1xuICAgICAgICAgICAgICAgICAgICBuZWVkX2NvdW50ID0gc3VtbW9uX2NmZ19pdGVtLmxvc3NfaXRlbV9vbmNlWzBdWzFdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmVlZF9pdGVtX2lkID0gc3VtbW9uX2NmZ19pdGVtLmxvc3NfaXRlbV90ZW5bMF1bMF07XG4gICAgICAgICAgICAgICAgICAgIG5lZWRfY291bnQgPSBzdW1tb25fY2ZnX2l0ZW0ubG9zc19pdGVtX3RlblswXVsxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgIFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucmVjcnVpdF9kYXRhLmdyb3VwX2lkID09PSBTdW1tb25Db25zdC5TdW1tb25fVHlwZS5GcmllbmQpIHtcbiAgICAgICAgICAgIHZhciByb2xlX3ZvID0gUm9sZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRSb2xlVm8oKTtcbiAgICAgICAgICAgIGhhdmVfY291bnQgPSByb2xlX3ZvLmZyaWVuZF9wb2ludDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGhhdmVfY291bnQgPSBCYWNrcGFja0NvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRNb2RlbCgpLmdldEJhY2tQYWNrSXRlbU51bUJ5QmlkKHRoaXMubmVlZF9pdGVtX2lkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnJlY3J1aXRfZGF0YS5ncm91cF9pZCA9PT0gU3VtbW9uQ29uc3QuU3VtbW9uX1R5cGUuU2NvcmUpIHtcbiAgICAgICAgICAgIHRoaXMuYWdhaW5fbmVlZF9uZC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuYWdhaW5fYnRuX25kLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jb25maXJtX2J0bl9uZC54ID0gdGhpcy5yb290X3duZC53aWR0aCAqIDAuNTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWdhaW5fbmVlZF9uZC5hY3RpdmUgPSB0cnVlOyAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5hZ2Fpbl9idG5fbmQuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY29uZmlybV9idG5fbmQueCA9IDUzMDtcbiAgICAgICAgICAgIHZhciBnb29kX3Jlc19jb25maWcgPSBVdGlscy5nZXRJdGVtQ29uZmlnKHRoaXMubmVlZF9pdGVtX2lkKTtcbiAgICAgICAgICAgIHZhciBnb29kX3Jlc19wYXRoID0gUGF0aFRvb2wuZ2V0SXRlbVJlcyhnb29kX3Jlc19jb25maWcuaWNvbilcbiAgICAgICAgICAgIC8vIHZhciBpdGVtX3Jlc19wYXRoID0gUGF0aFRvb2wuZ2V0SWNvblBhdGgoXCJpdGVtXCIsIHRoaXMubmVlZF9pdGVtX2lkKTtcbiAgICAgICAgICAgIHRoaXMubG9hZFJlcyhnb29kX3Jlc19wYXRoLCBmdW5jdGlvbihpdGVtX3NmKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nb29kc19zcC5zcHJpdGVGcmFtZSA9IGl0ZW1fc2Y7XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuXG4gICAgICAgICAgICB2YXIgbGFiZWxfc3RyID0gXCJcIjtcbiAgICAgICAgICAgIGlmIChoYXZlX2NvdW50IDwgbmVlZF9jb3VudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXRlbV9lbm91Z2ggPSBmYWxzZTsgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgbGFiZWxfc3RyID0gY2MuanMuZm9ybWF0U3RyKFwiPGNvbG9yPSNlMTQ3Mzc+PG91dGxpbmUgY29sb3I9IzAwMDAwMCB3aWR0aD0yPiVzPC9vdXRsaW5lPjwvY29sb3I+PGNvbG9yPSNmZmZmZmY+PG91dGxpbmUgY29sb3I9IzAwMDAwMCB3aWR0aD0yPi8lczwvb3V0bGluZT48L2NvbG9yPlwiLCBoYXZlX2NvdW50LCBuZWVkX2NvdW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtX2Vub3VnaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgbGFiZWxfc3RyID0gY2MuanMuZm9ybWF0U3RyKFwiPGNvbG9yPSMzNWZmMTQ+PG91dGxpbmUgY29sb3I9IzAwMDAwMCB3aWR0aD0yPiVzPC9vdXRsaW5lPjwvY29sb3I+PGNvbG9yPSNmZmZmZmY+PG91dGxpbmUgY29sb3I9IzAwMDAwMCB3aWR0aD0yPi8lczwvb3V0bGluZT48L2NvbG9yPlwiLCBoYXZlX2NvdW50LCBuZWVkX2NvdW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZ29vZHNfbnVtX2xiLnN0cmluZyA9IGxhYmVsX3N0cjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBzaG93SXRlbXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZighdGhpcy5nZXRfZGVzX25kIHx8ICF0aGlzLmdldF9kZXNfbmQuaXNWYWxpZClyZXR1cm5cbiAgICAgICAgdGhpcy5nZXRfZGVzX25kLnNjYWxlID0gMS41O1xuICAgICAgICBpZiAoIXRoaXMuZ2V0X2FjdGlvbikgeyAgICAgICAgXG4gICAgICAgICAgICB2YXIgZGVsYXlfYWN0ID0gY2MuZGVsYXlUaW1lKDAuMSk7XG4gICAgICAgICAgICB2YXIgc2NhbGVfYWN0ID0gY2Muc2NhbGVUbygwLjEsIDEpO1xuICAgICAgICAgICAgdGhpcy5nZXRfYWN0aW9uID0gY2Muc2VxdWVuY2UoZGVsYXlfYWN0LCBzY2FsZV9hY3QpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2V0X2Rlc19uZC5ydW5BY3Rpb24odGhpcy5nZXRfYWN0aW9uKTtcbiAgICAgICAgdGhpcy5jYW5fc2hvdyA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLml0ZW1zX2luaXQpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkR2V0SXRlbXMoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBhZGRHZXRJdGVtczogZnVuY3Rpb24oKSB7XG4gICAgICAgIFV0aWxzLnBsYXlFZmZlY3RTb3VuZChBVURJT19UWVBFLlJlY3J1aXQsIFwicmVzdWx0XzAxXCIpO1xuICAgICAgICBpZih0aGlzLml0ZW1fbmRzPT1udWxsKXJldHVyblxuICAgICAgICBmb3IgKHZhciBpdGVtX2kgPSAwOyBpdGVtX2kgPCB0aGlzLml0ZW1fbmRzLmxlbmd0aDsgaXRlbV9pKyspIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbXNfY29udGVudF9uZC5hZGRDaGlsZCh0aGlzLml0ZW1fbmRzW2l0ZW1faV0ucm9vdF93bmQpO1xuICAgICAgICAgICAgdGhpcy5pdGVtX25kc1tpdGVtX2ldLnBsYXlTaG93QWN0aW9uKGl0ZW1faSk7XG4gICAgICAgICAgICAvLyB0aGlzLml0ZW1fbmRzW2l0ZW1faV0uc2hvd0VmZmVjdCgpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGNyZWF0ZUdldEl0ZW1zOiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJlY3J1aXRfZGF0YSkgcmV0dXJuO1xuICAgICAgICB0aGlzLnJld2FyZHMgPSB0aGlzLnJlY3J1aXRfZGF0YS5yZXdhcmRzO1xuICAgICAgICB0aGlzLmluaXRfbnVtID0gMDtcbiAgICAgICAgdGhpcy5pdGVtX25kcyA9IFtdO1xuICAgICAgICB2YXIgc2NoZUluZGV4ID0gMDtcblxuICAgICAgICB2YXIgSGVyb0V4aGliaXRpb25JdGVtID0gcmVxdWlyZShcImhlcm9fZ2V0X2l0ZW1cIik7XG4gICAgICAgIHZhciBjcmVhdGVfaXRlbV9zY2ggPSBnY29yZS5UaW1lci5zZXQoKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICB2YXIgaGVyb19pdGVtID0gbmV3IEhlcm9FeGhpYml0aW9uSXRlbSh0aGlzLnJld2FyZHNbc2NoZUluZGV4XSwgc2NoZUluZGV4LCB0aGlzLml0ZW1GaW5pc2hDcmVhdGUuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICBpZih0aGlzLml0ZW1fbmRzPT1udWxsKXJldHVyblxuICAgICAgICAgICAgdGhpcy5pdGVtX25kcy5wdXNoKGhlcm9faXRlbSk7XG4gICAgICAgICAgICArK3NjaGVJbmRleDtcbiAgICAgICAgfS5iaW5kKHRoaXMpKSwgNTAsIHRoaXMucmV3YXJkcy5sZW5ndGgpO1xuICAgIH0sXG5cbiAgICBpdGVtRmluaXNoQ3JlYXRlOiBmdW5jdGlvbihpbmRleCwgcm9vdF93bikge1xuICAgICAgICArK3RoaXMuaW5pdF9udW1cbiAgICAgICAgaWYgKHRoaXMuaW5pdF9udW0gPT0gdGhpcy5yZXdhcmRzLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYodGhpcy5pdGVtX25kcz09bnVsbClyZXR1cm5cbiAgICAgICAgICAgIGlmICh0aGlzLml0ZW1fbmRzLmxlbmd0aCA+IDUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zX2NvbnRlbnRfbmQud2lkdGggPSAxMjAgKiA1ICsgMjAgKiA0XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNfY29udGVudF9uZC53aWR0aCA9IDEyMCAqIHRoaXMuaXRlbV9uZHMubGVuZ3RoICsgKDIwICogdGhpcy5pdGVtX25kcy5sZW5ndGggLSAxKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pdGVtc19pbml0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbl9zaG93KVxuICAgICAgICAgICAgICAgIHRoaXMuYWRkR2V0SXRlbXMoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBhbmFseXNlUmVjcnVpdERhdGE6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5maW5pc2hfY2IpIHRoaXMuZmluaXNoX2NiKCk7XG4gICAgICAgIC8vIHJldHVyblxuICAgICAgICB2YXIgc2hvd19iaWRzID0gW107ICAgICAvLyDpnIDopoHlj6zllKTnmoTpq5jnuqfoi7Hpm4QgXG4gICAgICAgIGlmICh0aGlzLnJlY3J1aXRfZGF0YS5wYXJ0bmVyX2JpZHMpIHtcbiAgICAgICAgICAgIHZhciBiaWRfaW5mbyA9IG51bGw7XG4gICAgICAgICAgICBmb3IgKHZhciBiaWRfaSBpbiB0aGlzLnJlY3J1aXRfZGF0YS5wYXJ0bmVyX2JpZHMpIHtcbiAgICAgICAgICAgICAgICBiaWRfaW5mbyA9IHRoaXMucmVjcnVpdF9kYXRhLnBhcnRuZXJfYmlkc1tiaWRfaV07XG4gICAgICAgICAgICAgICAgdmFyIHBhcl9jb25maWcgPSBDb25maWcucGFydG5lcl9kYXRhLmRhdGFfcGFydG5lcl9iYXNlW2JpZF9pbmZvLnBhcnRuZXJfYmlkXVxuICAgICAgICAgICAgICAgIGlmIChwYXJfY29uZmlnLnNob3dfZWZmZWN0KSBzaG93X2JpZHMucHVzaChiaWRfaW5mbyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2hvd19iaWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY3RybC5vcGVuU3VtbW9uR2FpblNob3dXaW5kb3codHJ1ZSwgc2hvd19iaWRzLCB0aGlzLnNob3dJdGVtcy5iaW5kKHRoaXMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0l0ZW1zKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgZGlkQ2xpY2tDb25maXJtQnRuOiBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAvLyB2YXIgc2hvd19iaWRzID0gW3twYXJ0bmVyX2JpZDogNDA0MDMsIGluaXRfc3RhcjogNH0sIHtwYXJ0bmVyX2JpZDogMjA1MDQsIGluaXRfc3RhcjogNX0sIHtwYXJ0bmVyX2JpZDogMzA0MDIsIGluaXRfc3RhcjogNH1dO1xuICAgICAgICAvLyB0aGlzLmN0cmwub3BlblN1bW1vbkdhaW5TaG93V2luZG93KHRydWUsIHNob3dfYmlkcywgdGhpcy5zaG93SXRlbXMuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuY3RybC5vcGVuU3VtbW9uR2FpbldpbmRvdyhmYWxzZSk7XG4gICAgfSxcblxuICAgIGRpZENsaWNrQWdhaW5CdG46IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgIC8vIOWIpOaWreiLsembhOiDjOWMheepuumXtFxuICAgICAgICB2YXIgSGVyb0NvbnRyb2xsZXIgPSByZXF1aXJlKFwiaGVyb19jb250cm9sbGVyXCIpO1xuICAgICAgICB2YXIgaGVyb19tb2RlbCA9IEhlcm9Db250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0TW9kZWwoKTtcbiAgICAgICAgdmFyIGhlcm9fYmFnX2luZm8gPSBoZXJvX21vZGVsLmdldEhlcm9NYXhDb3VudCgpO1xuICAgICAgICB2YXIgbGltaXRfbnVtID0gaGVyb19iYWdfaW5mby5tYXhfY291bnQgLSBoZXJvX2JhZ19pbmZvLmhhdmVfY291dG47XG4gICAgICAgIGlmKHRoaXMucmVjcnVpdF9kYXRhLnRpbWVzID4gbGltaXRfbnVtKXtcbiAgICAgICAgICAgIHZhciBzdHIgPSBVdGlscy5USTE4TihcIuiLsembhOWIl+ihqOW3sua7oe+8jOWPr+mAmui/h+aPkOWNh+i0teaXj+etiee6p+aIlui0reS5sOWinuWKoOiLsembhOaQuuW4puaVsOmHj++8jOaYr+WQpuWJjeW+gOi0reS5sO+8n1wiKVxuICAgICAgICAgICAgdmFyIENvbW1vbkFsZXJ0ID0gcmVxdWlyZShcImNvbW1vbmFsZXJ0XCIpO1xuICAgICAgICAgICAgQ29tbW9uQWxlcnQuc2hvdyhzdHIsIFV0aWxzLlRJMThOKFwi56Gu5a6aXCIpLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgTWFpbnVpQ29uc3QgPSByZXF1aXJlKFwibWFpbnVpX2NvbnN0XCIpXG4gICAgICAgICAgICAgICAgdmFyIEFjdGlvbkNvbnRyb2xsZXIgPSByZXF1aXJlKFwiYWN0aW9uX2NvbnRyb2xsZXJcIilcbiAgICAgICAgICAgICAgICB2YXIgTWFpbnVpQ29udHJvbGxlciA9IHJlcXVpcmUoXCJtYWludWlfY29udHJvbGxlclwiKVxuICAgICAgICAgICAgICAgIE1haW51aUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5jaGFuZ2VNYWluVUlTdGF0dXMoTWFpbnVpQ29uc3QuYnRuX2luZGV4LnBhcnRuZXIpXG4gICAgICAgICAgICAgICAgQWN0aW9uQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLm9wZW5BY3Rpb25NYWluUGFuZWwoZmFsc2UpXG4gICAgICAgICAgICB9LCBVdGlscy5USTE4TihcIuWPlua2iFwiKSwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaWYodGhpcy50eXBlX2ZsYWcgPT0gMCl7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXRlbV9lbm91Z2gpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWNydWl0X2RhdGEuZ3JvdXBfaWQgPT0gU3VtbW9uQ29uc3QuU3VtbW9uX1R5cGUuQWR2YW5jZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93R29sZFRpcHModGhpcy5yZWNydWl0X2RhdGEudGltZXMpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgQmFja3BhY2tDb250cm9sbGVyLmdldEluc3RhbmNlKCkub3BlblRpcHNTb3VyY2UodHJ1ZSwgdGhpcy5uZWVkX2l0ZW1faWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN0cmwuYWdhaW5SZWNydWl0KCk7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5tb2RsZS5nZXRDbGlja1N0YXR1cygpKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RsZS5jbGlja0ludGVydmFsU3RhdHVzKGZhbHNlKVxuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN0cmwub3BlblN1bW1vbkdhaW5XaW5kb3coZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBpZih0aGlzLml0ZW1fZW5vdWdoKXtcbiAgICAgICAgICAgICAgICBpZih0aGlzLnR5cGVfZmxhZyA9PSAxKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHJsLm9wZW5TdW1tb25HYWluV2luZG93KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgVGltZXN1bW1vbkNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5yZXF1ZXN0VGltZVN1bW1vbiggdGhpcy5yZWNydWl0X2RhdGEudGltZXMsIDQgKVxuICAgICAgICAgICAgICAgIH1lbHNlIGlmKHRoaXMudHlwZV9mbGFnID09IDIpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN0cmwub3BlblN1bW1vbkdhaW5XaW5kb3coZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgRWxpdGVzdW1tb25Db250cm9sbGVyID0gcmVxdWlyZShcImVsaXRlc3VtbW9uX2NvbnRyb2xsZXJcIilcbiAgICAgICAgICAgICAgICAgICAgRWxpdGVzdW1tb25Db250cm9sbGVyLmdldEluc3RhbmNlKCkuc2VuZDIzMjIxKCB0aGlzLnJlY3J1aXRfZGF0YS50aW1lcywgNCApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zaG93R29sZFRpcHModGhpcy5yZWNydWl0X2RhdGEudGltZXMpXG4gICAgICAgICAgICBcbiAgICAgICAgfVxuXG4gICAgfSxcbiAgICBcbiAgICBzaG93R29sZFRpcHM6IGZ1bmN0aW9uKHRpbWVzKSB7XG4gICAgICAgIHZhciBjb25maWdfZGF0YSBcbiAgICAgICAgaWYodGhpcy50eXBlX2ZsYWcgPT0gMCl7XG4gICAgICAgICAgICBjb25maWdfZGF0YSA9IENvbmZpZy5yZWNydWl0X2RhdGEuZGF0YV9wYXJ0bmVyc3VtbW9uX2RhdGFbXCIzMDBcIl07XG4gICAgICAgIH1lbHNlIGlmKHRoaXMudHlwZV9mbGFnID09IDEpe1xuICAgICAgICAgICAgY29uZmlnX2RhdGEgPSBDb25maWcucmVjcnVpdF9ob2xpZGF5X2RhdGEuZGF0YV9zdW1tb25bdGhpcy5yZWNydWl0X2RhdGEuZ3JvdXBfaWRdO1xuICAgICAgICB9ZWxzZSBpZih0aGlzLnR5cGVfZmxhZyA9PSAyKXtcbiAgICAgICAgICAgIGNvbmZpZ19kYXRhID0gQ29uZmlnLnJlY3J1aXRfaG9saWRheV9lbGl0ZV9kYXRhLmRhdGFfc3VtbW9uW3RoaXMucmVjcnVpdF9kYXRhLmdyb3VwX2lkXVxuICAgICAgICB9XG4gICAgICAgICBcbiAgICAgICAgdmFyIHJlY3J1aXRfZGF0YSA9IHRoaXMubW9kbGUuZ2V0U3VtbW9uUHJvdG9EYXRhQnlHcm91cElEKDMwMCk7XG5cbiAgICAgICAgdmFyIFJvbGVDb250cm9sbGVyID0gcmVxdWlyZShcInJvbGVfY29udHJvbGxlclwiKVxuICAgICAgICB2YXIgcm9sZV92byA9IFJvbGVDb250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0Um9sZVZvKCk7XG4gICAgICAgIHZhciBuZWVkX251bSx2YWxfc3RyLHZhbF9udW0sY2FsbF9udW1cbiAgICAgICAgaWYodGhpcy50eXBlX2ZsYWcgPT0gMCl7XG4gICAgICAgICAgICAvLyBnb29kX3Jlc19jb25maWcgPSBVdGlscy5nZXRJdGVtQ29uZmlnKGNvbmZpZ19kYXRhLmV4Y2hhbmdlX29uY2VbMF1bMF0pO1xuICAgICAgICAgICAgbmVlZF9udW0gPSBjb25maWdfZGF0YS5leGNoYW5nZV9vbmNlWzBdWzFdO1xuICAgICAgICAgICAgdmFsX3N0ciA9IFV0aWxzLmdldEl0ZW1Db25maWcoY29uZmlnX2RhdGEuZXhjaGFuZ2Vfb25jZV9nYWluWzBdWzBdKS5uYW1lXG4gICAgICAgICAgICB2YWxfbnVtID0gY29uZmlnX2RhdGEuZXhjaGFuZ2Vfb25jZV9nYWluWzBdWzFdO1xuICAgICAgICAgICAgY2FsbF9udW0gPSByZWNydWl0X2RhdGEuZHJhd19saXN0WzFdLnRpbWVzIHx8IDE7XG4gICAgICAgIH1lbHNlIGlmKHRoaXMudHlwZV9mbGFnID09IDEgfHwgdGhpcy50eXBlX2ZsYWcgPT0gMil7XG4gICAgICAgICAgICAvLyBnb29kX3Jlc19jb25maWcgPSBVdGlscy5nZXRJdGVtQ29uZmlnKGNvbmZpZ19kYXRhLmxvc3NfZ29sZF9vbmNlWzBdWzBdKTtcbiAgICAgICAgICAgIG5lZWRfbnVtID0gY29uZmlnX2RhdGEubG9zc19nb2xkX29uY2VbMF1bMV1cbiAgICAgICAgICAgIHZhbF9zdHIgPSBVdGlscy5nZXRJdGVtQ29uZmlnKGNvbmZpZ19kYXRhLmdhaW5fb25jZVswXVswXSkubmFtZVxuICAgICAgICAgICAgdmFsX251bSA9IGNvbmZpZ19kYXRhLmdhaW5fb25jZVswXVsxXTtcbiAgICAgICAgICAgIGNhbGxfbnVtID0gdGhpcy5yZWNydWl0X2RhdGEudGltZXNcbiAgICAgICAgfSBcbiAgICAgICAgdmFyIGdvb2RfcmVzX3BhdGggICA9IFwiM1wiO1xuICAgICAgICB2YXIgaHZhZV9udW0gICAgICAgID0gcm9sZV92by5nb2xkO1xuXG4gICAgICAgIGlmICh0aW1lcyA9PT0gMTApIHtcbiAgICAgICAgICAgIGlmKHRoaXMudHlwZV9mbGFnID09IDApe1xuICAgICAgICAgICAgICAgIG5lZWRfbnVtID0gY29uZmlnX2RhdGEuZXhjaGFuZ2VfZml2ZVswXVsxXTtcbiAgICAgICAgICAgICAgICB2YWxfc3RyICA9IFV0aWxzLmdldEl0ZW1Db25maWcoY29uZmlnX2RhdGEuZXhjaGFuZ2VfZml2ZV9nYWluWzBdWzBdKS5uYW1lICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdmFsX251bSAgPSBjb25maWdfZGF0YS5leGNoYW5nZV9vbmNlX2dhaW5bMF1bMV07XG4gICAgICAgICAgICAgICAgY2FsbF9udW0gPSByZWNydWl0X2RhdGEuZHJhd19saXN0WzBdLnRpbWVzIHx8IDEwO1xuICAgICAgICAgICAgfWVsc2UgaWYodGhpcy50eXBlX2ZsYWcgPT0gMSB8fCB0aGlzLnR5cGVfZmxhZyA9PSAyKXtcbiAgICAgICAgICAgICAgICBuZWVkX251bSA9IGNvbmZpZ19kYXRhLmxvc3NfZ29sZF90ZW5bMF1bMV07XG4gICAgICAgICAgICAgICAgdmFsX3N0ciAgPSBVdGlscy5nZXRJdGVtQ29uZmlnKGNvbmZpZ19kYXRhLmdhaW5fdGVuWzBdWzBdKS5uYW1lICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdmFsX251bSAgPSBjb25maWdfZGF0YS5nYWluX29uY2VbMF1bMV07XG4gICAgICAgICAgICAgICAgY2FsbF9udW0gPSB0aGlzLnJlY3J1aXRfZGF0YS50aW1lcztcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGJ1eV9vcmkgPSBjYy5qcy5mb3JtYXRTdHIoU3RyaW5nVXRpbC5wYXJzZVN0cihMYW5nLkRJQU1PTkRfQ09OU1VNRSkuc3RyaW5nLCBnb29kX3Jlc19wYXRoLCBuZWVkX251bSwgaHZhZV9udW0pO1xuICAgICAgICB2YXIgZ2V0X29yaSA9IGNjLmpzLmZvcm1hdFN0cihTdHJpbmdVdGlsLnBhcnNlU3RyKExhbmcuQlVZX0RFUykuc3RyaW5nLCB2YWxfc3RyLCB2YWxfbnVtLCBjYWxsX251bSk7XG4gICAgICAgIHZhciBkZXNfc3RyID0gYnV5X29yaSArIGdldF9vcmk7XG5cbiAgICAgICAgdmFyIGZyYW1lX2FycmF5cyA9IFtdO1xuICAgICAgICB2YXIgZ29vZF9wYXRoID0gUGF0aFRvb2wuZ2V0SWNvblBhdGgoXCJpdGVtXCIsIFwiM1wiKTtcbiAgICAgICAgZnJhbWVfYXJyYXlzLnB1c2goZ29vZF9wYXRoKTtcblxuICAgICAgICB2YXIgQ29tbW9uQWxlcnQgPSByZXF1aXJlKFwiY29tbW9uYWxlcnRcIik7XG4gICAgICAgIHZhciBjb21tb25fYWxlcl92aWV3ID0gQ29tbW9uQWxlcnQuc2hvdyhkZXNfc3RyLCBcIuehruWumlwiLCB0aGlzLmNvbmZpZ1VzZUdvbGQuYmluZCh0aGlzLCB0aW1lcyksIFwi5Y+W5raIXCIsIG51bGwsIG51bGwsIG51bGwsIHtyZXNBcnI6IGZyYW1lX2FycmF5cyxtYXhXaWR0aDo0NTAsYWxpZ246Y2MubWFjcm8uVGV4dEFsaWdubWVudC5MRUZUfSk7XG4gICAgfSxcblxuICAgIGNvbmZpZ1VzZUdvbGQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZih0aGlzLnR5cGVfZmxhZyA9PSAwKXtcbiAgICAgICAgICAgIHZhciBncm91cF9pZCA9IDMwMDtcbiAgICAgICAgICAgIHZhciB0aW1lcyA9IHRoaXMucmVjcnVpdF9kYXRhLnRpbWVzO1xuICAgICAgICAgICAgdmFyIHJlY3J1aXRfdHlwZSA9IDM7XG4gICAgXG4gICAgICAgICAgICB0aGlzLmN0cmwucmVjdXJpdChncm91cF9pZCwgdGltZXMsIHJlY3J1aXRfdHlwZSk7XG4gICAgICAgICAgICB0aGlzLmN0cmwub3BlblN1bW1vbkdhaW5XaW5kb3coZmFsc2UpO1xuICAgICAgICB9ZWxzZSBpZih0aGlzLnR5cGVfZmxhZyA9PSAxKXtcbiAgICAgICAgICAgIFRpbWVzdW1tb25Db250cm9sbGVyLmdldEluc3RhbmNlKCkucmVxdWVzdFRpbWVTdW1tb24odGhpcy5yZWNydWl0X2RhdGEudGltZXMsMylcbiAgICAgICAgICAgIHRoaXMuY3RybC5vcGVuU3VtbW9uR2FpbldpbmRvdyhmYWxzZSk7XG4gICAgICAgIH1lbHNlIGlmKHRoaXMudHlwZV9mbGFnID09IDIpe1xuICAgICAgICAgICAgdmFyIEVsaXRlc3VtbW9uQ29udHJvbGxlciA9IHJlcXVpcmUoXCJlbGl0ZXN1bW1vbl9jb250cm9sbGVyXCIpXG4gICAgICAgICAgICBFbGl0ZXN1bW1vbkNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5zZW5kMjMyMjEoIHRoaXMucmVjcnVpdF9kYXRhLnRpbWVzLCAzIClcbiAgICAgICAgICAgIHRoaXMuY3RybC5vcGVuU3VtbW9uR2FpbldpbmRvdyhmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiAodGhpcy5yZWNydWl0X2NiKSB0aGlzLnJlY3J1aXRfY2IoZ3JvdXBfaWQsIHRpbWVzLCByZWNydWl0X3R5cGUpO1xuICAgIH0sXG59KSJdfQ==
|