|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/limitexercise/view/limitexercise_change_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, '701d9osPbtPM4uKA0jC/rqE', 'limitexercise_change_window');
|
// Scripts/mod/limitexercise/view/limitexercise_change_window.js
|
|
"use strict";
|
|
// --------------------------------------------------------------------
|
// @author: xxx@syg.com(必填, 创建模块的人员)
|
// @description:
|
// 这里是描述这个窗体的作用的
|
// <br/>Create: 2019-09-10 09:45:10
|
// --------------------------------------------------------------------
|
var PathTool = require("pathtool");
|
|
var LimitExerciseEvent = require("limitexercise_event");
|
|
var TimeTool = require("timetool");
|
|
var LimitExerciseConstants = require("limitExercise_const");
|
|
var LimitExerciseChangeItem = require("limitexercise_change_item_panel");
|
|
var MainuiController = require("mainui_controller");
|
|
var Limitexercise_changeWindow = cc.Class({
|
"extends": BaseView,
|
ctor: function ctor() {
|
this.prefabPath = PathTool.getPrefabPath("limitexercise", "limitexercise_change_window"); // this.viewTag = SCENE_TAG.ui; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
|
|
this.win_type = WinType.Full; //是否是全屏窗体 WinType.Full, WinType.Big, WinType.Mini, WinType.Tips
|
|
this.ctrl = arguments[0];
|
this.model = this.ctrl.getModel();
|
},
|
// 初始化一些配置数据,可以用于声明一些变量之类的
|
initConfig: function initConfig() {
|
this.reward_list = Config.holiday_boss_new_data.data_lev_reward_list;
|
this.change_boss_list = Config.holiday_boss_new_data.data_change_boss_list;
|
this.cur_order_type = null;
|
this.cur_order_id = null;
|
this.cur_box_status = null;
|
this.scrollview_bar = null;
|
this.item_list_panel = [];
|
this.pos_interval = [[0, 320], [320, 1047], [1047, 1500]];
|
},
|
// 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件
|
openCallBack: function openCallBack() {
|
var main_container = this.root_wnd.getChildByName("main_container");
|
var load_bg = main_container.getChildByName("bg").getComponent(cc.Sprite);
|
load_bg.node.scale = FIT_SCALE;
|
var bg_res = PathTool.getUIIconPath("bigbg/limitexercise", "limit_exercise_bg1", "jpg");
|
this.loadRes(bg_res, function (res) {
|
load_bg.spriteFrame = res;
|
});
|
main_container.getChildByName("Text_10").getComponent(cc.Label).string = Utils.TI18N("本轮挑战剩余:");
|
this.ramain_time = main_container.getChildByName("ramain_time").getComponent(cc.Label);
|
this.ramain_time.string = "";
|
this.level_area_text = main_container.getChildByName("level_area_text").getComponent(cc.Label);
|
this.level_area_text.string = ""; // --左边滑动
|
|
this.left_scrollview_pos = {};
|
|
for (var i = 1; i <= 3; ++i) {
|
var spr = main_container.getChildByName("sroll_spr_" + i);
|
this.left_scrollview_pos[i] = spr.y;
|
}
|
|
this.sroll_main_spr = main_container.getChildByName("sroll_main_spr");
|
this.sroll_main_spr.opacity = 0; // --难度
|
|
this.level_num = main_container.getChildByName("level_num").getComponent(cc.Label);
|
this.level_num.string = "";
|
main_container.getChildByName("level_area_text_0_0").getComponent(cc.Label).string = Utils.TI18N("难度");
|
this.item_area = main_container.getChildByName("item_area"); // --关卡信息
|
|
this.level_msg = main_container.getChildByName("level_msg");
|
this.btn_change = this.level_msg.getChildByName("btn_change");
|
this.btn_change_btn = this.btn_change.getComponent(cc.Button);
|
this.btn_change_text = this.btn_change.getChildByName("Text_4").getComponent(cc.Label);
|
this.btn_change_text.string = Utils.TI18N("挑战");
|
this.change_outline = this.btn_change.getChildByName("Text_4").getComponent(cc.LabelOutline);
|
this.btn_box = this.level_msg.getChildByName("btn_box");
|
this.box_sprite = this.btn_box.getChildByName("box_sprite").getComponent(cc.Sprite); // this.box_sprite:setAnchorPoint(0.5,0.5)
|
// this.box_sprite:setPositionY(49)
|
|
this.level_msg.getChildByName("Text_8").getComponent(cc.Label).string = Utils.TI18N("下一阶段奖励");
|
this.level_text = this.level_msg.getChildByName("level_text").getComponent(cc.Label); //第几关
|
|
this.level_text.string = "";
|
this.level_msg.getChildByName("level_tips_text").getComponent(cc.Label).string = Utils.TI18N("关卡效果");
|
this.level_effect_desc = this.level_msg.getChildByName("level_effect_desc").getComponent(cc.Label);
|
this.power = this.level_msg.getChildByName("power").getComponent(cc.Label);
|
this.power.string = Utils.TI18N("推荐战力:");
|
this.change_item = this.level_msg.getChildByName("change_item");
|
this.change_item_content = this.change_item.getChildByName("content"); // this.change_item:setScrollBarEnabled(false)
|
|
this.btn_rule = main_container.getChildByName("btn_rule");
|
var bottom_panel = main_container.getChildByName("bottom_panel");
|
bottom_panel.getChildByName("count_title").getComponent(cc.Label).string = Utils.TI18N("挑战次数:");
|
this.remain_count = bottom_panel.getChildByName("remain_count").getComponent(cc.Label);
|
this.remain_count.string = "剩余购买次数:";
|
this.change_count = bottom_panel.getChildByName("count_label").getComponent(cc.Label);
|
this.change_count.string = "";
|
this.add_btn = bottom_panel.getChildByName("add_btn");
|
this.btn_close = bottom_panel.getChildByName("btn_close");
|
this.item_scrollview = this.item_area.getComponent(cc.ScrollView);
|
this.item_area.on('scrolling', this.updateSlideShowByVertical, this);
|
},
|
// 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
|
registerEvent: function registerEvent() {
|
this.btn_change.on('click', function () {
|
var HeroController = require("hero_controller");
|
|
var PartnerConst = require("partner_const");
|
|
HeroController.getInstance().openFormGoFightPanel(true, PartnerConst.Fun_Form.LimitExercise);
|
}, this);
|
this.btn_box.on('click', function () {
|
if (this.model.getBoxStatus() == 1) {
|
this.ctrl.send25412();
|
} else {
|
this.ctrl.openLimitExerciseRewardView(true);
|
}
|
}, this);
|
this.btn_rule.on('click', function () {
|
MainuiController.getInstance().openCommonExplainView(true, Config.holiday_boss_new_data.data_explain, Utils.TI18N("规则说明"));
|
}, this);
|
this.btn_close.on("click", function () {
|
this.ctrl.openLimitExerciseChangeView(false);
|
Utils.playButtonSound(2);
|
}, this);
|
this.add_btn.on('click', function () {
|
Utils.playButtonSound(1);
|
var const_data = Config.holiday_boss_new_data.data_const;
|
if (!const_data) return;
|
var cur_count = this.model.getDayBuyCount();
|
var max_count = const_data.fight_buy_max_count.val;
|
|
if (cur_count >= max_count) {
|
message(Utils.TI18N("已达今日购买最大值"));
|
return;
|
}
|
|
var CommonAlert = require("commonalert");
|
|
var str = cc.js.formatStr("是否花费<img src='%s' scale=0.3 />%s购买一次挑战次数?", Config.item_data.data_assets_label2id.gold, const_data.action_num_espensive.val);
|
var res = PathTool.getItemRes(Config.item_data.data_assets_label2id.gold);
|
|
var call_back = function () {
|
this.ctrl.send25411();
|
}.bind(this);
|
|
CommonAlert.show(str, Utils.TI18N("确认"), call_back, Utils.TI18N("取消"), null, 2, null, {
|
resArr: [res]
|
});
|
}, this);
|
this.addGlobalEvent(LimitExerciseEvent.LimitExercise_Message_Event, function (data) {
|
this.setRoundHero(data.difficulty, data.count);
|
this.remainBuyCount(data.buy_count);
|
this.setCountDownTime(this.ramain_time, data.endtime - gcore.SmartSocket.getTime());
|
this.levelBoxStatus(data.status, data.order);
|
this.showBossMessageItem(data.difficulty);
|
this.getLevelMessage(data.order_type, data.order);
|
}.bind(this));
|
this.addGlobalEvent(LimitExerciseEvent.LimitExercise_BuyCount_Event, function (data) {
|
if (data) {
|
var difficulty = this.model.getCurrentDiff();
|
this.setRoundHero(difficulty, data.count);
|
this.remainBuyCount(data.buy_count);
|
}
|
}.bind(this));
|
this.addGlobalEvent(LimitExerciseEvent.LimitExercise_GetBox_Event, function (data) {
|
if (data) {
|
if (data.code == 1) {
|
this.levelBoxStatus(2, 15);
|
}
|
}
|
}.bind(this));
|
},
|
// 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了
|
openRootWnd: function openRootWnd(params) {
|
if (this.model.getLimitExerciseData() == null) {
|
this.ctrl.send25410();
|
} else {
|
var data = this.model.getLimitExerciseData();
|
this.setRoundHero(data.difficulty, data.count);
|
this.remainBuyCount(data.buy_count);
|
this.setCountDownTime(data.endtime - gcore.SmartSocket.getTime());
|
this.levelBoxStatus(data.status, data.order);
|
this.showBossMessageItem(data.difficulty);
|
var container_y = this.item_scrollview.content.y;
|
var cur_pos = this.getCurrentPos(Math.abs(container_y));
|
this.scrollviewSprintBar(cur_pos);
|
}
|
|
this.ctrl.send25414();
|
},
|
createAreaList: function createAreaList() {
|
if (this.item_list_panel.length == 0) {
|
this.timer = this.startUpdate(this.area_list.length, function (index) {
|
var item = new LimitExerciseChangeItem();
|
item.setParent(this.item_scrollview.content);
|
item.show();
|
item.setPosition(0, index * item.HeightItem);
|
item.setData(this.area_list[index]);
|
item.addCallBack(function (cell, order_type, order_id, index) {
|
this.onCellTouched(cell, order_type, order_id, index);
|
}.bind(this));
|
this.item_list_panel.push(item);
|
}.bind(this), 100);
|
} else {
|
for (var i = 0; i < this.area_list.length; ++i) {
|
var item = this.item_list_panel[i];
|
|
if (!item) {
|
var _item = new LimitExerciseChangeItem();
|
|
_item.setParent(this.item_scrollview.content);
|
|
_item.show();
|
|
_item.setPosition(0, index * _item.HeightItem);
|
|
_item.addCallBack(function (cell, order_type, order_id, index) {
|
this.onCellTouched(cell, order_type, order_id, index);
|
}.bind(this));
|
|
this.item_list_panel[i] = _item;
|
}
|
|
item.setData(this.area_list[i]);
|
item.setItemIndex();
|
}
|
}
|
|
this.item_scrollview.content.height = this.area_list.length * 568;
|
},
|
setRoundHero: function setRoundHero(change_id, count) {
|
this.level_num.string = change_id || 1;
|
this.change_count.string = count || 0;
|
},
|
//剩余购买次数
|
remainBuyCount: function remainBuyCount(buy_count) {
|
buy_count = buy_count || 0;
|
|
if (this.remain_count) {
|
var count = 0;
|
var const_data = Config.holiday_boss_new_data.data_const.fight_buy_max_count;
|
|
if (const_data && const_data.val) {
|
count = const_data.val - buy_count;
|
|
if (count <= 0) {
|
count = 0;
|
}
|
|
this.remain_count.string = "剩余购买次数:" + count;
|
}
|
}
|
},
|
setCountDownTime: function setCountDownTime(less_time) {
|
if (this.ramain_time) {
|
if (this.time_tichet) {
|
gcore.Timer.del(this.time_tichet);
|
this.time_tichet = null;
|
}
|
|
if (less_time > 0) {
|
this.setTimeFormatString(less_time);
|
this.time_tichet = gcore.Timer.set(function () {
|
less_time--;
|
|
if (less_time < 0) {
|
gcore.Timer.del(this.time_tichet);
|
this.time_tichet = null;
|
this.ramain_time.string = "00:00:00";
|
} else {
|
this.setTimeFormatString(less_time);
|
}
|
}.bind(this), 1000, -1);
|
} else {
|
this.setTimeFormatString(less_time);
|
}
|
}
|
},
|
setTimeFormatString: function setTimeFormatString(time) {
|
if (time > 0) {
|
this.ramain_time.string = TimeTool.getTimeFormatDay(time);
|
} else {
|
this.ramain_time.string = "00:00:00";
|
}
|
},
|
//宝箱状态
|
levelBoxStatus: function levelBoxStatus(status, ord_id) {
|
if (this.cur_box_status == status) return;
|
this.cur_box_status = status;
|
var id = this.getBoxRewardID(ord_id);
|
this.loadRes(PathTool.getUIIconPath("limitexercise", "limitexercise_box" + id), function (res) {
|
this.box_sprite.spriteFrame = res;
|
}.bind(this));
|
|
if (status == 1) {
|
this.box_sprite.node.stopAllActions();
|
var skewto_1 = cc.rotateTo(0.1, 10);
|
var skewto_2 = cc.rotateTo(0.1, -10);
|
var skewto_3 = cc.rotateTo(0.1, 0);
|
var seq = cc.sequence(skewto_1, skewto_2, skewto_1, skewto_2, skewto_1, skewto_2, skewto_3, cc.delayTime(1));
|
var repeatForever = cc.repeatForever(seq);
|
this.box_sprite.node.runAction(repeatForever);
|
} else if (status == 2) {
|
this.box_sprite.node.stopAllActions();
|
}
|
},
|
getBoxRewardID: function getBoxRewardID(ord_id) {
|
var diff = this.model.getCurrentDiff(ord_id);
|
var count = 1;
|
|
if (this.reward_list[diff]) {
|
for (var i = 1; i <= 3; ++i) {
|
if (ord_id <= this.reward_list[diff][1].order_id) {
|
count = 1;
|
} else if (ord_id > this.reward_list[diff][1].order_id && ord_id <= this.reward_list[diff][2].order_id) {
|
count = 2;
|
} else if (ord_id > this.reward_list[diff][2].order_id) {
|
count = 3;
|
}
|
}
|
}
|
|
return count;
|
},
|
//显示boss信息 轮次,难度
|
showBossMessageItem: function showBossMessageItem(diff) {
|
var round = this.model.getCurrentRound();
|
diff = diff || 1;
|
|
if (this.item_scrollview) {
|
if (this.change_boss_list[round] && this.change_boss_list[round][diff]) {
|
this.area_list = [];
|
|
for (var i in this.change_boss_list[round][diff]) {
|
var v = this.change_boss_list[round][diff][i];
|
this.area_list.push(v);
|
}
|
|
cc.log(this.area_list);
|
var level_type = this.model.getCurrentType();
|
var count = 1;
|
|
if (level_type) {
|
count = level_type;
|
}
|
|
this.item_scrollview.content.y = (count - 1) * -568;
|
this.sroll_main_spr.y = this.left_scrollview_pos[count];
|
}
|
}
|
|
this.createAreaList();
|
},
|
//关卡信息 (关卡类型、关卡id)
|
getLevelMessage: function getLevelMessage(ord_type, ord_id) {
|
ord_type = ord_type || 1;
|
ord_id = ord_id || this.model.getCurrentChangeID();
|
|
if (this.cur_order_type == ord_type && this.cur_order_id == ord_id) {
|
return;
|
}
|
|
var round = this.model.getCurrentRound();
|
var diff = this.model.getCurrentDiff();
|
if (!round) return;
|
this.level_area_text.string = LimitExerciseConstants.type[ord_type];
|
|
if (this.change_boss_list[round] && this.change_boss_list[round][diff]) {
|
var lev_data = this.change_boss_list[round][diff];
|
|
if (ord_id >= 15) {
|
ord_id = 15;
|
}
|
|
if (lev_data[ord_type] && lev_data[ord_type][ord_id]) {
|
var lev_count = lev_data[ord_type][ord_id].order_id;
|
this.level_text.string = Utils.TI18N("第") + lev_count + Utils.TI18N("关");
|
|
if (lev_count == this.model.getCurrentChangeID()) {
|
this.btn_change_btn.interactable = true;
|
this.btn_change_btn.enableAutoGrayEffect = false;
|
this.change_outline.enabled = true;
|
} else {
|
this.btn_change_btn.interactable = false;
|
this.btn_change_btn.enableAutoGrayEffect = true;
|
this.change_outline.enabled = false;
|
}
|
|
var str = "";
|
var desc = lev_data[ord_type][ord_id].add_skill_decs || [];
|
|
for (var i = 0; i < desc.length; ++i) {
|
str = str + desc[i] + "\n";
|
}
|
|
this.level_effect_desc.string = str;
|
var power = lev_data[ord_type][ord_id].power || 0;
|
this.power.string = Utils.TI18N("推荐战力:") + power;
|
|
if (this.cur_order_type != ord_type) {
|
var count = this.getBoxRewardID(ord_id);
|
|
if (this.reward_list[diff] && this.reward_list[diff][count]) {
|
//获取奖励
|
var data_list = this.reward_list[diff][count].reward || [];
|
var setting = {};
|
setting.scale = 0.6;
|
setting.max_count = 3;
|
setting.is_center = true;
|
setting.show_effect_id = 263;
|
this.level_item_list = Utils.commonShowSingleRowItemList(this.change_item, this.level_item_list, data_list, setting, this.change_item_content);
|
}
|
}
|
}
|
}
|
|
this.cur_order_type = ord_type;
|
this.cur_order_id = ord_id;
|
},
|
onCellTouched: function onCellTouched(cell, order_type, order_id, index) {
|
if (this.touch_kuang == null) {
|
this.touch_kuang = new cc.Node();
|
var image = this.touch_kuang.addComponent(cc.Sprite);
|
image.type = cc.Sprite.Type.SLICED;
|
image.sizeMode = cc.Sprite.SizeMode.CUSTOM;
|
this.touch_kuang.setContentSize(110, 110);
|
this.item_scrollview.content.addChild(this.touch_kuang, 99);
|
this.loadRes(PathTool.getUIIconPath("common", "common_90019"), function (res) {
|
image.spriteFrame = res;
|
}.bind(this));
|
}
|
|
var item = cell.getBtnMaster(index);
|
|
if (item) {
|
var worldPos = item.convertToWorldSpaceAR(cc.v2(0, 0));
|
var pos = this.item_scrollview.content.convertToNodeSpace(worldPos);
|
this.touch_kuang.setPosition(pos.x - 25, pos.y - 4);
|
}
|
|
this.getLevelMessage(order_type, order_id);
|
},
|
updateSlideShowByVertical: function updateSlideShowByVertical() {
|
var container_y = this.item_scrollview.content.y;
|
|
if (this.item_scrollview) {
|
var cur_pos = this.getCurrentPos(Math.abs(container_y));
|
this.scrollviewSprintBar(cur_pos);
|
this.level_area_text.string = LimitExerciseConstants.type[cur_pos];
|
}
|
},
|
//判断当前位置
|
getCurrentPos: function getCurrentPos(pos) {
|
var cur_pos = 1;
|
|
if (pos >= this.pos_interval[0][0] && pos <= this.pos_interval[0][1]) {
|
cur_pos = 1;
|
} else if (pos >= this.pos_interval[1][0] && pos <= this.pos_interval[1][1]) {
|
cur_pos = 2;
|
} else if (pos >= this.pos_interval[2][0] && pos <= this.pos_interval[2][1]) {
|
cur_pos = 3;
|
}
|
|
return cur_pos;
|
},
|
//滑动的动作处理
|
scrollviewSprintBar: function scrollviewSprintBar(cur_pos) {
|
if (this.scrollview_bar == cur_pos) return;
|
this.scrollview_bar = cur_pos;
|
this.sroll_main_spr.stopAllActions(); // doStopAllActions(this.sroll_main_spr)
|
|
var fadeout = cc.fadeOut(0.3);
|
var fadein = cc.fadeIn(0.3);
|
var move_to = cc.moveTo(0.1, cc.v2(-319, this.left_scrollview_pos[cur_pos]));
|
var scaleto1 = cc.scaleTo(0.1, 1.2);
|
var scaleto2 = cc.scaleTo(0.1, 1);
|
var spawn = cc.spawn(fadein, move_to);
|
var seq = cc.sequence(fadeout, spawn, scaleto1, scaleto2);
|
this.sroll_main_spr.runAction(seq);
|
},
|
setItemIndex: function setItemIndex() {//默认点击
|
},
|
// 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
|
closeCallBack: function closeCallBack() {
|
if (this.time_tichet) {
|
gcore.Timer.del(this.time_tichet);
|
this.time_tichet = null;
|
}
|
|
if (this.timer) {
|
this.stopUpdate(this.timer);
|
this.timer = null;
|
}
|
|
if (this.item_list_panel) {
|
for (var i = 0; i < this.item_list_panel.length; ++i) {
|
if (this.item_list_panel[i]) {
|
this.item_list_panel[i].deleteMe();
|
this.item_list_panel[i] = null;
|
}
|
}
|
|
this.item_list_panel = null;
|
}
|
|
if (this.level_item_list) {
|
for (var _i = 0; _i < this.level_item_list.length; ++_i) {
|
if (this.level_item_list[_i]) {
|
this.level_item_list[_i].deleteMe();
|
|
this.level_item_list[_i] = null;
|
}
|
}
|
|
this.level_item_list = null;
|
}
|
|
this.ctrl.openLimitExerciseChangeView(false);
|
}
|
});
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxsaW1pdGV4ZXJjaXNlXFx2aWV3XFxsaW1pdGV4ZXJjaXNlX2NoYW5nZV93aW5kb3cuanMiXSwibmFtZXMiOlsiUGF0aFRvb2wiLCJyZXF1aXJlIiwiTGltaXRFeGVyY2lzZUV2ZW50IiwiVGltZVRvb2wiLCJMaW1pdEV4ZXJjaXNlQ29uc3RhbnRzIiwiTGltaXRFeGVyY2lzZUNoYW5nZUl0ZW0iLCJNYWludWlDb250cm9sbGVyIiwiTGltaXRleGVyY2lzZV9jaGFuZ2VXaW5kb3ciLCJjYyIsIkNsYXNzIiwiQmFzZVZpZXciLCJjdG9yIiwicHJlZmFiUGF0aCIsImdldFByZWZhYlBhdGgiLCJ3aW5fdHlwZSIsIldpblR5cGUiLCJGdWxsIiwiY3RybCIsImFyZ3VtZW50cyIsIm1vZGVsIiwiZ2V0TW9kZWwiLCJpbml0Q29uZmlnIiwicmV3YXJkX2xpc3QiLCJDb25maWciLCJob2xpZGF5X2Jvc3NfbmV3X2RhdGEiLCJkYXRhX2xldl9yZXdhcmRfbGlzdCIsImNoYW5nZV9ib3NzX2xpc3QiLCJkYXRhX2NoYW5nZV9ib3NzX2xpc3QiLCJjdXJfb3JkZXJfdHlwZSIsImN1cl9vcmRlcl9pZCIsImN1cl9ib3hfc3RhdHVzIiwic2Nyb2xsdmlld19iYXIiLCJpdGVtX2xpc3RfcGFuZWwiLCJwb3NfaW50ZXJ2YWwiLCJvcGVuQ2FsbEJhY2siLCJtYWluX2NvbnRhaW5lciIsInJvb3Rfd25kIiwiZ2V0Q2hpbGRCeU5hbWUiLCJsb2FkX2JnIiwiZ2V0Q29tcG9uZW50IiwiU3ByaXRlIiwibm9kZSIsInNjYWxlIiwiRklUX1NDQUxFIiwiYmdfcmVzIiwiZ2V0VUlJY29uUGF0aCIsImxvYWRSZXMiLCJyZXMiLCJzcHJpdGVGcmFtZSIsIkxhYmVsIiwic3RyaW5nIiwiVXRpbHMiLCJUSTE4TiIsInJhbWFpbl90aW1lIiwibGV2ZWxfYXJlYV90ZXh0IiwibGVmdF9zY3JvbGx2aWV3X3BvcyIsImkiLCJzcHIiLCJ5Iiwic3JvbGxfbWFpbl9zcHIiLCJvcGFjaXR5IiwibGV2ZWxfbnVtIiwiaXRlbV9hcmVhIiwibGV2ZWxfbXNnIiwiYnRuX2NoYW5nZSIsImJ0bl9jaGFuZ2VfYnRuIiwiQnV0dG9uIiwiYnRuX2NoYW5nZV90ZXh0IiwiY2hhbmdlX291dGxpbmUiLCJMYWJlbE91dGxpbmUiLCJidG5fYm94IiwiYm94X3Nwcml0ZSIsImxldmVsX3RleHQiLCJsZXZlbF9lZmZlY3RfZGVzYyIsInBvd2VyIiwiY2hhbmdlX2l0ZW0iLCJjaGFuZ2VfaXRlbV9jb250ZW50IiwiYnRuX3J1bGUiLCJib3R0b21fcGFuZWwiLCJyZW1haW5fY291bnQiLCJjaGFuZ2VfY291bnQiLCJhZGRfYnRuIiwiYnRuX2Nsb3NlIiwiaXRlbV9zY3JvbGx2aWV3IiwiU2Nyb2xsVmlldyIsIm9uIiwidXBkYXRlU2xpZGVTaG93QnlWZXJ0aWNhbCIsInJlZ2lzdGVyRXZlbnQiLCJIZXJvQ29udHJvbGxlciIsIlBhcnRuZXJDb25zdCIsImdldEluc3RhbmNlIiwib3BlbkZvcm1Hb0ZpZ2h0UGFuZWwiLCJGdW5fRm9ybSIsIkxpbWl0RXhlcmNpc2UiLCJnZXRCb3hTdGF0dXMiLCJzZW5kMjU0MTIiLCJvcGVuTGltaXRFeGVyY2lzZVJld2FyZFZpZXciLCJvcGVuQ29tbW9uRXhwbGFpblZpZXciLCJkYXRhX2V4cGxhaW4iLCJvcGVuTGltaXRFeGVyY2lzZUNoYW5nZVZpZXciLCJwbGF5QnV0dG9uU291bmQiLCJjb25zdF9kYXRhIiwiZGF0YV9jb25zdCIsImN1cl9jb3VudCIsImdldERheUJ1eUNvdW50IiwibWF4X2NvdW50IiwiZmlnaHRfYnV5X21heF9jb3VudCIsInZhbCIsIm1lc3NhZ2UiLCJDb21tb25BbGVydCIsInN0ciIsImpzIiwiZm9ybWF0U3RyIiwiaXRlbV9kYXRhIiwiZGF0YV9hc3NldHNfbGFiZWwyaWQiLCJnb2xkIiwiYWN0aW9uX251bV9lc3BlbnNpdmUiLCJnZXRJdGVtUmVzIiwiY2FsbF9iYWNrIiwic2VuZDI1NDExIiwiYmluZCIsInNob3ciLCJyZXNBcnIiLCJhZGRHbG9iYWxFdmVudCIsIkxpbWl0RXhlcmNpc2VfTWVzc2FnZV9FdmVudCIsImRhdGEiLCJzZXRSb3VuZEhlcm8iLCJkaWZmaWN1bHR5IiwiY291bnQiLCJyZW1haW5CdXlDb3VudCIsImJ1eV9jb3VudCIsInNldENvdW50RG93blRpbWUiLCJlbmR0aW1lIiwiZ2NvcmUiLCJTbWFydFNvY2tldCIsImdldFRpbWUiLCJsZXZlbEJveFN0YXR1cyIsInN0YXR1cyIsIm9yZGVyIiwic2hvd0Jvc3NNZXNzYWdlSXRlbSIsImdldExldmVsTWVzc2FnZSIsIm9yZGVyX3R5cGUiLCJMaW1pdEV4ZXJjaXNlX0J1eUNvdW50X0V2ZW50IiwiZ2V0Q3VycmVudERpZmYiLCJMaW1pdEV4ZXJjaXNlX0dldEJveF9FdmVudCIsImNvZGUiLCJvcGVuUm9vdFduZCIsInBhcmFtcyIsImdldExpbWl0RXhlcmNpc2VEYXRhIiwic2VuZDI1NDEwIiwiY29udGFpbmVyX3kiLCJjb250ZW50IiwiY3VyX3BvcyIsImdldEN1cnJlbnRQb3MiLCJNYXRoIiwiYWJzIiwic2Nyb2xsdmlld1NwcmludEJhciIsInNlbmQyNTQxNCIsImNyZWF0ZUFyZWFMaXN0IiwibGVuZ3RoIiwidGltZXIiLCJzdGFydFVwZGF0ZSIsImFyZWFfbGlzdCIsImluZGV4IiwiaXRlbSIsInNldFBhcmVudCIsInNldFBvc2l0aW9uIiwiSGVpZ2h0SXRlbSIsInNldERhdGEiLCJhZGRDYWxsQmFjayIsImNlbGwiLCJvcmRlcl9pZCIsIm9uQ2VsbFRvdWNoZWQiLCJwdXNoIiwic2V0SXRlbUluZGV4IiwiaGVpZ2h0IiwiY2hhbmdlX2lkIiwibGVzc190aW1lIiwidGltZV90aWNoZXQiLCJUaW1lciIsImRlbCIsInNldFRpbWVGb3JtYXRTdHJpbmciLCJzZXQiLCJ0aW1lIiwiZ2V0VGltZUZvcm1hdERheSIsIm9yZF9pZCIsImlkIiwiZ2V0Qm94UmV3YXJkSUQiLCJzdG9wQWxsQWN0aW9ucyIsInNrZXd0b18xIiwicm90YXRlVG8iLCJza2V3dG9fMiIsInNrZXd0b18zIiwic2VxIiwic2VxdWVuY2UiLCJkZWxheVRpbWUiLCJyZXBlYXRGb3JldmVyIiwicnVuQWN0aW9uIiwiZGlmZiIsInJvdW5kIiwiZ2V0Q3VycmVudFJvdW5kIiwidiIsImxvZyIsImxldmVsX3R5cGUiLCJnZXRDdXJyZW50VHlwZSIsIm9yZF90eXBlIiwiZ2V0Q3VycmVudENoYW5nZUlEIiwidHlwZSIsImxldl9kYXRhIiwibGV2X2NvdW50IiwiaW50ZXJhY3RhYmxlIiwiZW5hYmxlQXV0b0dyYXlFZmZlY3QiLCJlbmFibGVkIiwiZGVzYyIsImFkZF9za2lsbF9kZWNzIiwiZGF0YV9saXN0IiwicmV3YXJkIiwic2V0dGluZyIsImlzX2NlbnRlciIsInNob3dfZWZmZWN0X2lkIiwibGV2ZWxfaXRlbV9saXN0IiwiY29tbW9uU2hvd1NpbmdsZVJvd0l0ZW1MaXN0IiwidG91Y2hfa3VhbmciLCJOb2RlIiwiaW1hZ2UiLCJhZGRDb21wb25lbnQiLCJUeXBlIiwiU0xJQ0VEIiwic2l6ZU1vZGUiLCJTaXplTW9kZSIsIkNVU1RPTSIsInNldENvbnRlbnRTaXplIiwiYWRkQ2hpbGQiLCJnZXRCdG5NYXN0ZXIiLCJ3b3JsZFBvcyIsImNvbnZlcnRUb1dvcmxkU3BhY2VBUiIsInYyIiwicG9zIiwiY29udmVydFRvTm9kZVNwYWNlIiwieCIsImZhZGVvdXQiLCJmYWRlT3V0IiwiZmFkZWluIiwiZmFkZUluIiwibW92ZV90byIsIm1vdmVUbyIsInNjYWxldG8xIiwic2NhbGVUbyIsInNjYWxldG8yIiwic3Bhd24iLCJjbG9zZUNhbGxCYWNrIiwic3RvcFVwZGF0ZSIsImRlbGV0ZU1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLFFBQVEsR0FBR0MsT0FBTyxDQUFDLFVBQUQsQ0FBdEI7O0FBQ0EsSUFBSUMsa0JBQWtCLEdBQUdELE9BQU8sQ0FBQyxxQkFBRCxDQUFoQzs7QUFDQSxJQUFJRSxRQUFRLEdBQUdG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QUwsQ0FBZ0IsS0FBSzNGLEtBQXJCO0FBQ0EsV0FBS0EsS0FBTCxHQUFhLElBQWI7QUFDSDs7QUFDRCxRQUFHLEtBQUtoSSxlQUFSLEVBQXdCO0FBQ3BCLFdBQUksSUFBSXdCLENBQUMsR0FBQyxDQUFWLEVBQVlBLENBQUMsR0FBQyxLQUFLeEIsZUFBTCxDQUFxQitILE1BQW5DLEVBQTBDLEVBQUV2RyxDQUE1QyxFQUE4QztBQUMxQyxZQUFHLEtBQUt4QixlQUFMLENBQXFCd0IsQ0FBckIsQ0FBSCxFQUEyQjtBQUN2QixlQUFLeEIsZUFBTCxDQUFxQndCLENBQXJCLEVBQXdCb00sUUFBeEI7QUFDQSxlQUFLNU4sZUFBTCxDQUFxQndCLENBQXJCLElBQTBCLElBQTFCO0FBQ0g7QUFDSjs7QUFDRCxXQUFLeEIsZUFBTCxHQUF1QixJQUF2QjtBQUNIOztBQUNELFFBQUcsS0FBSzRMLGVBQVIsRUFBd0I7QUFDcEIsV0FBSSxJQUFJcEssRUFBQyxHQUFDLENBQVYsRUFBWUEsRUFBQyxHQUFDLEtBQUtvSyxlQUFMLENBQXFCN0QsTUFBbkMsRUFBMEMsRUFBRXZHLEVBQTVDLEVBQThDO0FBQzFDLFlBQUcsS0FBS29LLGVBQUwsQ0FBcUJwSyxFQUFyQixDQUFILEVBQTJCO0FBQ3ZCLGVBQUtvSyxlQUFMLENBQXFCcEssRUFBckIsRUFBd0JvTSxRQUF4Qjs7QUFDQSxlQUFLaEMsZUFBTCxDQUFxQnBLLEVBQXJCLElBQTBCLElBQTFCO0FBQ0g7QUFDSjs7QUFDRCxXQUFLb0ssZUFBTCxHQUF1QixJQUF2QjtBQUNIOztBQUNELFNBQUszTSxJQUFMLENBQVVrRiwyQkFBVixDQUFzQyxLQUF0QztBQUNIO0FBNWNxQyxDQUFULENBQWpDIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogeHh4QHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXG4vLyBAZGVzY3JpcHRpb246XG4vLyAgICAg6L+Z6YeM5piv5o+P6L+w6L+Z5Liq56qX5L2T55qE5L2c55So55qEXG4vLyA8YnIvPkNyZWF0ZTogMjAxOS0wOS0xMCAwOTo0NToxMFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnZhciBQYXRoVG9vbCA9IHJlcXVpcmUoXCJwYXRodG9vbFwiKTtcbnZhciBMaW1pdEV4ZXJjaXNlRXZlbnQgPSByZXF1aXJlKFwibGltaXRleGVyY2lzZV9ldmVudFwiKVxudmFyIFRpbWVUb29sID0gcmVxdWlyZShcInRpbWV0b29sXCIpXG52YXIgTGltaXRFeGVyY2lzZUNvbnN0YW50cyA9IHJlcXVpcmUoXCJsaW1pdEV4ZXJjaXNlX2NvbnN0XCIpXG52YXIgTGltaXRFeGVyY2lzZUNoYW5nZUl0ZW0gPSByZXF1aXJlKFwibGltaXRleGVyY2lzZV9jaGFuZ2VfaXRlbV9wYW5lbFwiKVxudmFyIE1haW51aUNvbnRyb2xsZXIgPSByZXF1aXJlKFwibWFpbnVpX2NvbnRyb2xsZXJcIilcbnZhciBMaW1pdGV4ZXJjaXNlX2NoYW5nZVdpbmRvdyA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlVmlldyxcbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucHJlZmFiUGF0aCA9IFBhdGhUb29sLmdldFByZWZhYlBhdGgoXCJsaW1pdGV4ZXJjaXNlXCIsIFwibGltaXRleGVyY2lzZV9jaGFuZ2Vfd2luZG93XCIpO1xuICAgICAgICAvLyB0aGlzLnZpZXdUYWcgPSBTQ0VORV9UQUcudWk7ICAgICAgICAgICAgICAgIC8v6K+l56qX5L2T5omA5bGedWnlsYLnuqcs5YWo5bGPdWnpnIDopoHlnKh1aeWxgizpnZ7lhajlsY91aeWcqGRpYWxvZ3Vl5bGCLOi/meS4quimgeazqOaEj1xuICAgICAgICB0aGlzLndpbl90eXBlID0gV2luVHlwZS5GdWxsOyAgICAgICAgICAgICAgIC8v5piv5ZCm5piv5YWo5bGP56qX5L2TICBXaW5UeXBlLkZ1bGwsIFdpblR5cGUuQmlnLCBXaW5UeXBlLk1pbmksIFdpblR5cGUuVGlwc1xuICAgICAgICB0aGlzLmN0cmwgPSBhcmd1bWVudHNbMF1cbiAgICAgICAgdGhpcy5tb2RlbCA9IHRoaXMuY3RybC5nZXRNb2RlbCgpXG4gICAgfSxcblxuICAgIC8vIOWIneWni+WMluS4gOS6m+mFjee9ruaVsOaNrizlj6/ku6XnlKjkuo7lo7DmmI7kuIDkupvlj5jph4/kuYvnsbvnmoRcbiAgICBpbml0Q29uZmlnOmZ1bmN0aW9uKCl7XG4gICAgICAgIHRoaXMucmV3YXJkX2xpc3QgPSBDb25maWcuaG9saWRheV9ib3NzX25ld19kYXRhLmRhdGFfbGV2X3Jld2FyZF9saXN0XG4gICAgICAgIHRoaXMuY2hhbmdlX2Jvc3NfbGlzdCA9IENvbmZpZy5ob2xpZGF5X2Jvc3NfbmV3X2RhdGEuZGF0YV9jaGFuZ2VfYm9zc19saXN0XG4gICAgICAgIHRoaXMuY3VyX29yZGVyX3R5cGUgPSBudWxsXG4gICAgICAgIHRoaXMuY3VyX29yZGVyX2lkID0gbnVsbFxuICAgICAgICB0aGlzLmN1cl9ib3hfc3RhdHVzID0gbnVsbFxuICAgICAgICB0aGlzLnNjcm9sbHZpZXdfYmFyID0gbnVsbFxuICAgICAgICB0aGlzLml0ZW1fbGlzdF9wYW5lbCA9IFtdXG4gICAgICAgIHRoaXMucG9zX2ludGVydmFsID0gW1swLDMyMF0sWzMyMCwxMDQ3XSxbMTA0NywxNTAwXV1cbiAgICB9LFxuXG4gICAgLy8g6aKE5Yi25L2T5Yqg6L295a6M5oiQ5LmL5ZCO55qE5Zue6LCDLOWPr+S7peWcqOi/memHjOaNleiOt+ebuOWFs+iKgueCueaIluiAhee7hOS7tlxuICAgIG9wZW5DYWxsQmFjazpmdW5jdGlvbigpe1xuICAgICAgICBsZXQgbWFpbl9jb250YWluZXIgPSB0aGlzLnJvb3Rfd25kLmdldENoaWxkQnlOYW1lKFwibWFpbl9jb250YWluZXJcIilcbiAgICAgICAgbGV0IGxvYWRfYmcgPSBtYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImJnXCIpLmdldENvbXBvbmVudChjYy5TcHJpdGUpXG4gICAgICAgIGxvYWRfYmcubm9kZS5zY2FsZSA9IEZJVF9TQ0FMRVxuICAgICAgICBsZXQgYmdfcmVzID0gUGF0aFRvb2wuZ2V0VUlJY29uUGF0aChcImJpZ2JnL2xpbWl0ZXhlcmNpc2VcIiwgXCJsaW1pdF9leGVyY2lzZV9iZzFcIixcImpwZ1wiKVxuICAgICAgICB0aGlzLmxvYWRSZXMoYmdfcmVzLGZ1bmN0aW9uKHJlcyl7XG4gICAgICAgICAgICBsb2FkX2JnLnNwcml0ZUZyYW1lID0gcmVzO1xuICAgICAgICB9KVxuICAgICAgICBtYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcIlRleHRfMTBcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSAoVXRpbHMuVEkxOE4oXCLmnKzova7mjJHmiJjliankvZnvvJpcIikpXG4gICAgICAgIHRoaXMucmFtYWluX3RpbWUgPSBtYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcInJhbWFpbl90aW1lXCIpLmdldENvbXBvbmVudChjYy5MYWJlbClcbiAgICAgICAgdGhpcy5yYW1haW5fdGltZS5zdHJpbmcgPSAoXCJcIilcbiAgICAgICAgdGhpcy5sZXZlbF9hcmVhX3RleHQgPSBtYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImxldmVsX2FyZWFfdGV4dFwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpXG4gICAgICAgIHRoaXMubGV2ZWxfYXJlYV90ZXh0LnN0cmluZyA9IChcIlwiKVxuICAgIFxuICAgICAgICAvLyAtLeW3pui+uea7keWKqFxuICAgICAgICB0aGlzLmxlZnRfc2Nyb2xsdmlld19wb3MgPSB7fVxuICAgICAgICBmb3IobGV0IGk9MTtpPD0zOysraSl7XG4gICAgICAgICAgICBsZXQgc3ByID0gbWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJzcm9sbF9zcHJfXCIraSlcbiAgICAgICAgICAgIHRoaXMubGVmdF9zY3JvbGx2aWV3X3Bvc1tpXSA9IHNwci55XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zcm9sbF9tYWluX3NwciA9IG1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwic3JvbGxfbWFpbl9zcHJcIilcbiAgICAgICAgdGhpcy5zcm9sbF9tYWluX3Nwci5vcGFjaXR5ID0gKDApXG4gICAgICAgIC8vIC0t6Zq+5bqmXG4gICAgICAgIHRoaXMubGV2ZWxfbnVtID0gbWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJsZXZlbF9udW1cIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKVxuICAgICAgICB0aGlzLmxldmVsX251bS5zdHJpbmcgPSAoXCJcIilcbiAgICAgICAgbWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJsZXZlbF9hcmVhX3RleHRfMF8wXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gKFV0aWxzLlRJMThOKFwi6Zq+5bqmXCIpKVxuICAgIFxuICAgICAgICB0aGlzLml0ZW1fYXJlYSA9IG1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiaXRlbV9hcmVhXCIpXG4gICAgICAgIC8vIC0t5YWz5Y2h5L+h5oGvXG4gICAgICAgIHRoaXMubGV2ZWxfbXNnID0gbWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJsZXZlbF9tc2dcIilcbiAgICAgICAgdGhpcy5idG5fY2hhbmdlID0gdGhpcy5sZXZlbF9tc2cuZ2V0Q2hpbGRCeU5hbWUoXCJidG5fY2hhbmdlXCIpXG4gICAgICAgIHRoaXMuYnRuX2NoYW5nZV9idG4gPSB0aGlzLmJ0bl9jaGFuZ2UuZ2V0Q29tcG9uZW50KGNjLkJ1dHRvbilcbiAgICAgICAgdGhpcy5idG5fY2hhbmdlX3RleHQgPSB0aGlzLmJ0bl9jaGFuZ2UuZ2V0Q2hpbGRCeU5hbWUoXCJUZXh0XzRcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKVxuICAgICAgICB0aGlzLmJ0bl9jaGFuZ2VfdGV4dC5zdHJpbmcgPSAoVXRpbHMuVEkxOE4oXCLmjJHmiJhcIikpXG4gICAgICAgIHRoaXMuY2hhbmdlX291dGxpbmUgPSB0aGlzLmJ0bl9jaGFuZ2UuZ2V0Q2hpbGRCeU5hbWUoXCJUZXh0XzRcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsT3V0bGluZSlcbiAgICAgICAgdGhpcy5idG5fYm94ID0gdGhpcy5sZXZlbF9tc2cuZ2V0Q2hpbGRCeU5hbWUoXCJidG5fYm94XCIpXG4gICAgICAgIHRoaXMuYm94X3Nwcml0ZSA9IHRoaXMuYnRuX2JveC5nZXRDaGlsZEJ5TmFtZShcImJveF9zcHJpdGVcIikuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSlcbiAgICAgICAgLy8gdGhpcy5ib3hfc3ByaXRlOnNldEFuY2hvclBvaW50KDAuNSwwLjUpXG4gICAgICAgIC8vIHRoaXMuYm94X3Nwcml0ZTpzZXRQb3NpdGlvblkoNDkpXG4gICAgICAgIHRoaXMubGV2ZWxfbXNnLmdldENoaWxkQnlOYW1lKFwiVGV4dF84XCIpLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gKFV0aWxzLlRJMThOKFwi5LiL5LiA6Zi25q615aWW5YqxXCIpKVxuICAgICAgICB0aGlzLmxldmVsX3RleHQgPSB0aGlzLmxldmVsX21zZy5nZXRDaGlsZEJ5TmFtZShcImxldmVsX3RleHRcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKSAvL+esrOWHoOWFs1xuICAgICAgICB0aGlzLmxldmVsX3RleHQuc3RyaW5nID0gKFwiXCIpXG4gICAgXG4gICAgICAgIHRoaXMubGV2ZWxfbXNnLmdldENoaWxkQnlOYW1lKFwibGV2ZWxfdGlwc190ZXh0XCIpLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gKFV0aWxzLlRJMThOKFwi5YWz5Y2h5pWI5p6cXCIpKVxuICAgICAgICB0aGlzLmxldmVsX2VmZmVjdF9kZXNjID0gdGhpcy5sZXZlbF9tc2cuZ2V0Q2hpbGRCeU5hbWUoXCJsZXZlbF9lZmZlY3RfZGVzY1wiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpXG4gICAgICAgIHRoaXMucG93ZXIgPSB0aGlzLmxldmVsX21zZy5nZXRDaGlsZEJ5TmFtZShcInBvd2VyXCIpLmdldENvbXBvbmVudChjYy5MYWJlbClcbiAgICAgICAgdGhpcy5wb3dlci5zdHJpbmcgPSAoVXRpbHMuVEkxOE4oXCLmjqjojZDmiJjlipvvvJpcIikpXG4gICAgICAgIHRoaXMuY2hhbmdlX2l0ZW0gPSB0aGlzLmxldmVsX21zZy5nZXRDaGlsZEJ5TmFtZShcImNoYW5nZV9pdGVtXCIpXG4gICAgICAgIHRoaXMuY2hhbmdlX2l0ZW1fY29udGVudCA9IHRoaXMuY2hhbmdlX2l0ZW0uZ2V0Q2hpbGRCeU5hbWUoXCJjb250ZW50XCIpXG4gICAgICAgIC8vIHRoaXMuY2hhbmdlX2l0ZW06c2V0U2Nyb2xsQmFyRW5hYmxlZChmYWxzZSlcbiAgICAgICAgXG4gICAgICAgIHRoaXMuYnRuX3J1bGUgPSBtYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImJ0bl9ydWxlXCIpXG4gICAgICAgIGxldCBib3R0b21fcGFuZWwgPSBtYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImJvdHRvbV9wYW5lbFwiKVxuICAgICAgICBib3R0b21fcGFuZWwuZ2V0Q2hpbGRCeU5hbWUoXCJjb3VudF90aXRsZVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IChVdGlscy5USTE4TihcIuaMkeaImOasoeaVsDpcIikpXG4gICAgICAgIHRoaXMucmVtYWluX2NvdW50ID0gYm90dG9tX3BhbmVsLmdldENoaWxkQnlOYW1lKFwicmVtYWluX2NvdW50XCIpLmdldENvbXBvbmVudChjYy5MYWJlbClcbiAgICAgICAgdGhpcy5yZW1haW5fY291bnQuc3RyaW5nID0gKFwi5Ymp5L2Z6LSt5Lmw5qyh5pWw77yaXCIpXG4gICAgICAgIHRoaXMuY2hhbmdlX2NvdW50ID0gYm90dG9tX3BhbmVsLmdldENoaWxkQnlOYW1lKFwiY291bnRfbGFiZWxcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKVxuICAgICAgICB0aGlzLmNoYW5nZV9jb3VudC5zdHJpbmcgPSAoXCJcIilcbiAgICBcbiAgICAgICAgdGhpcy5hZGRfYnRuID0gYm90dG9tX3BhbmVsLmdldENoaWxkQnlOYW1lKFwiYWRkX2J0blwiKVxuICAgICAgICB0aGlzLmJ0bl9jbG9zZSA9IGJvdHRvbV9wYW5lbC5nZXRDaGlsZEJ5TmFtZShcImJ0bl9jbG9zZVwiKVxuICAgICAgICB0aGlzLml0ZW1fc2Nyb2xsdmlldyA9IHRoaXMuaXRlbV9hcmVhLmdldENvbXBvbmVudChjYy5TY3JvbGxWaWV3KVxuXG4gICAgICAgIHRoaXMuaXRlbV9hcmVhLm9uKCdzY3JvbGxpbmcnLCB0aGlzLnVwZGF0ZVNsaWRlU2hvd0J5VmVydGljYWwsIHRoaXMpO1xuICAgIH0sXG5cbiAgICAvLyDms6jlhozkuovku7bnm5HlkKznmoTmjqXlj6Ms5LiN6ZyA6KaB5omL5Yqo6LCD55SoLOWmguaenOaYr+S9v+eUqGdjb3JlLkdsb2JhbEV2ZW5055uR5ZCsLOWPr+S7peebtOaOpeiwg+eUqGFkZEdsb2JhbEV2ZW50XG4gICAgcmVnaXN0ZXJFdmVudDpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLmJ0bl9jaGFuZ2Uub24oJ2NsaWNrJyxmdW5jdGlvbigpe1xuICAgICAgICAgICAgdmFyIEhlcm9Db250cm9sbGVyID0gcmVxdWlyZShcImhlcm9fY29udHJvbGxlclwiKVxuICAgICAgICAgICAgdmFyIFBhcnRuZXJDb25zdCA9IHJlcXVpcmUoXCJwYXJ0bmVyX2NvbnN0XCIpXG4gICAgICAgICAgICBIZXJvQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLm9wZW5Gb3JtR29GaWdodFBhbmVsKHRydWUsUGFydG5lckNvbnN0LkZ1bl9Gb3JtLkxpbWl0RXhlcmNpc2UpXG4gICAgICAgIH0sdGhpcylcbiAgICAgICAgdGhpcy5idG5fYm94Lm9uKCdjbGljaycsZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGlmKHRoaXMubW9kZWwuZ2V0Qm94U3RhdHVzKCkgPT0gMSl7XG4gICAgICAgICAgICAgICAgdGhpcy5jdHJsLnNlbmQyNTQxMigpXG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICB0aGlzLmN0cmwub3BlbkxpbWl0RXhlcmNpc2VSZXdhcmRWaWV3KHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sdGhpcylcbiAgICAgICAgdGhpcy5idG5fcnVsZS5vbignY2xpY2snLGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBNYWludWlDb250cm9sbGVyLmdldEluc3RhbmNlKCkub3BlbkNvbW1vbkV4cGxhaW5WaWV3KHRydWUsQ29uZmlnLmhvbGlkYXlfYm9zc19uZXdfZGF0YS5kYXRhX2V4cGxhaW4sVXRpbHMuVEkxOE4oXCLop4TliJnor7TmmI5cIikpXG4gICAgICAgIH0sdGhpcylcbiAgICAgICAgdGhpcy5idG5fY2xvc2Uub24oXCJjbGlja1wiLGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICB0aGlzLmN0cmwub3BlbkxpbWl0RXhlcmNpc2VDaGFuZ2VWaWV3KGZhbHNlKVxuICAgICAgICAgICAgVXRpbHMucGxheUJ1dHRvblNvdW5kKDIpXG4gICAgICAgIH0sdGhpcylcbiAgICAgICAgdGhpcy5hZGRfYnRuLm9uKCdjbGljaycsZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIFV0aWxzLnBsYXlCdXR0b25Tb3VuZCgxKVxuICAgICAgICAgICAgbGV0IGNvbnN0X2RhdGEgPSBDb25maWcuaG9saWRheV9ib3NzX25ld19kYXRhLmRhdGFfY29uc3RcbiAgICAgICAgICAgIGlmKCFjb25zdF9kYXRhKSByZXR1cm47XG4gICAgICAgICAgICBsZXQgY3VyX2NvdW50ID0gdGhpcy5tb2RlbC5nZXREYXlCdXlDb3VudCgpXG4gICAgICAgICAgICBsZXQgbWF4X2NvdW50ID0gY29uc3RfZGF0YS5maWdodF9idXlfbWF4X2NvdW50LnZhbFxuICAgICAgICAgICAgaWYoY3VyX2NvdW50ID49IG1heF9jb3VudCl7XG4gICAgICAgICAgICAgICAgbWVzc2FnZShVdGlscy5USTE4TihcIuW3sui+vuS7iuaXpei0reS5sOacgOWkp+WAvFwiKSlcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBDb21tb25BbGVydCA9IHJlcXVpcmUoXCJjb21tb25hbGVydFwiKTtcbiAgICAgICAgICAgIHZhciBzdHIgPSBjYy5qcy5mb3JtYXRTdHIoXCLmmK/lkKboirHotLk8aW1nIHNyYz0nJXMnIHNjYWxlPTAuMyAvPiVz6LSt5Lmw5LiA5qyh5oyR5oiY5qyh5pWw77yfXCIsIENvbmZpZy5pdGVtX2RhdGEuZGF0YV9hc3NldHNfbGFiZWwyaWQuZ29sZCxjb25zdF9kYXRhLmFjdGlvbl9udW1fZXNwZW5zaXZlLnZhbClcbiAgICAgICAgICAgIHZhciByZXMgPSBQYXRoVG9vbC5nZXRJdGVtUmVzKENvbmZpZy5pdGVtX2RhdGEuZGF0YV9hc3NldHNfbGFiZWwyaWQuZ29sZClcbiAgICAgICAgICAgIHZhciBjYWxsX2JhY2sgPSBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIHRoaXMuY3RybC5zZW5kMjU0MTEoKVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpXG4gICAgICAgICAgICBDb21tb25BbGVydC5zaG93KHN0ciwgVXRpbHMuVEkxOE4oXCLnoa7orqRcIiksIGNhbGxfYmFjaywgVXRpbHMuVEkxOE4oXCLlj5bmtohcIiksIG51bGwsIDIsIG51bGwsIHsgcmVzQXJyOiBbcmVzXSB9KVxuICAgICAgICB9LHRoaXMpXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoTGltaXRFeGVyY2lzZUV2ZW50LkxpbWl0RXhlcmNpc2VfTWVzc2FnZV9FdmVudCxmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgICAgIHRoaXMuc2V0Um91bmRIZXJvKGRhdGEuZGlmZmljdWx0eSxkYXRhLmNvdW50KVxuICAgICAgICAgICAgdGhpcy5yZW1haW5CdXlDb3VudChkYXRhLmJ1eV9jb3VudClcbiAgICAgICAgICAgIHRoaXMuc2V0Q291bnREb3duVGltZSh0aGlzLnJhbWFpbl90aW1lLGRhdGEuZW5kdGltZSAtIGdjb3JlLlNtYXJ0U29ja2V0LmdldFRpbWUoKSlcbiAgICAgICAgICAgIHRoaXMubGV2ZWxCb3hTdGF0dXMoZGF0YS5zdGF0dXMsZGF0YS5vcmRlcilcbiAgICAgICAgICAgIHRoaXMuc2hvd0Jvc3NNZXNzYWdlSXRlbShkYXRhLmRpZmZpY3VsdHkpXG4gICAgICAgICAgICB0aGlzLmdldExldmVsTWVzc2FnZShkYXRhLm9yZGVyX3R5cGUsZGF0YS5vcmRlcilcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KExpbWl0RXhlcmNpc2VFdmVudC5MaW1pdEV4ZXJjaXNlX0J1eUNvdW50X0V2ZW50LGZ1bmN0aW9uKGRhdGEpe1xuICAgICAgICAgICAgaWYoZGF0YSl7XG4gICAgICAgICAgICAgICAgbGV0IGRpZmZpY3VsdHkgPSB0aGlzLm1vZGVsLmdldEN1cnJlbnREaWZmKClcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJvdW5kSGVybyhkaWZmaWN1bHR5LGRhdGEuY291bnQpXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1haW5CdXlDb3VudChkYXRhLmJ1eV9jb3VudClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KExpbWl0RXhlcmNpc2VFdmVudC5MaW1pdEV4ZXJjaXNlX0dldEJveF9FdmVudCxmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgICAgIGlmKGRhdGEpe1xuICAgICAgICAgICAgICAgIGlmKGRhdGEuY29kZSA9PSAxKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sZXZlbEJveFN0YXR1cygyLDE1KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI4s5re75Yqg5Yiw5a+55bqU5Li76IqC54K55LmL5ZCO55qE5Zue6LCDLOS5n+WwseaYr+S4gOS4queql+S9k+eahOato+W8j+WFpeWPoyzlj6/ku6Xorr7nva7kuIDkupvmlbDmja7kuoZcbiAgICBvcGVuUm9vdFduZDpmdW5jdGlvbihwYXJhbXMpe1xuICAgICAgICBpZih0aGlzLm1vZGVsLmdldExpbWl0RXhlcmNpc2VEYXRhKCkgPT0gbnVsbCl7XG4gICAgICAgICAgICB0aGlzLmN0cmwuc2VuZDI1NDEwKClcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBsZXQgZGF0YSA9IHRoaXMubW9kZWwuZ2V0TGltaXRFeGVyY2lzZURhdGEoKVxuICAgICAgICAgICAgdGhpcy5zZXRSb3VuZEhlcm8oZGF0YS5kaWZmaWN1bHR5LGRhdGEuY291bnQpXG4gICAgICAgICAgICB0aGlzLnJlbWFpbkJ1eUNvdW50KGRhdGEuYnV5X2NvdW50KVxuICAgICAgICAgICAgdGhpcy5zZXRDb3VudERvd25UaW1lKGRhdGEuZW5kdGltZSAtZ2NvcmUuU21hcnRTb2NrZXQuZ2V0VGltZSgpKVxuICAgICAgICAgICAgdGhpcy5sZXZlbEJveFN0YXR1cyhkYXRhLnN0YXR1cyxkYXRhLm9yZGVyKVxuICAgICAgICAgICAgdGhpcy5zaG93Qm9zc01lc3NhZ2VJdGVtKGRhdGEuZGlmZmljdWx0eSlcblxuICAgICAgICAgICAgbGV0IGNvbnRhaW5lcl95ID0gdGhpcy5pdGVtX3Njcm9sbHZpZXcuY29udGVudC55XG4gICAgICAgICAgICBsZXQgY3VyX3BvcyA9IHRoaXMuZ2V0Q3VycmVudFBvcyhNYXRoLmFicyhjb250YWluZXJfeSkpXG4gICAgICAgICAgICB0aGlzLnNjcm9sbHZpZXdTcHJpbnRCYXIoY3VyX3BvcylcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN0cmwuc2VuZDI1NDE0KClcbiAgICB9LFxuICAgIGNyZWF0ZUFyZWFMaXN0KCl7XG4gICAgICAgIGlmKHRoaXMuaXRlbV9saXN0X3BhbmVsLmxlbmd0aCA9PSAwKXtcbiAgICAgICAgICAgIHRoaXMudGltZXIgPSAgdGhpcy5zdGFydFVwZGF0ZSh0aGlzLmFyZWFfbGlzdC5sZW5ndGgsZnVuY3Rpb24oaW5kZXgpe1xuICAgICAgICAgICAgICAgIGxldCBpdGVtID0gbmV3IExpbWl0RXhlcmNpc2VDaGFuZ2VJdGVtKClcbiAgICAgICAgICAgICAgICBpdGVtLnNldFBhcmVudCh0aGlzLml0ZW1fc2Nyb2xsdmlldy5jb250ZW50KVxuICAgICAgICAgICAgICAgIGl0ZW0uc2hvdygpXG4gICAgICAgICAgICAgICAgaXRlbS5zZXRQb3NpdGlvbigwLGluZGV4Kml0ZW0uSGVpZ2h0SXRlbSlcbiAgICAgICAgICAgICAgICBpdGVtLnNldERhdGEodGhpcy5hcmVhX2xpc3RbaW5kZXhdKVxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkQ2FsbEJhY2soZnVuY3Rpb24oY2VsbCxvcmRlcl90eXBlLG9yZGVyX2lkLGluZGV4KXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNlbGxUb3VjaGVkKGNlbGwsb3JkZXJfdHlwZSxvcmRlcl9pZCxpbmRleClcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtX2xpc3RfcGFuZWwucHVzaChpdGVtKVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpLDEwMClcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBmb3IobGV0IGk9MDtpPHRoaXMuYXJlYV9saXN0Lmxlbmd0aDsrK2kpe1xuICAgICAgICAgICAgICAgIGxldCBpdGVtID0gdGhpcy5pdGVtX2xpc3RfcGFuZWxbaV1cbiAgICAgICAgICAgICAgICBpZighaXRlbSl7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpdGVtID0gbmV3IExpbWl0RXhlcmNpc2VDaGFuZ2VJdGVtKClcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXRQYXJlbnQodGhpcy5pdGVtX3Njcm9sbHZpZXcuY29udGVudClcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zaG93KClcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXRQb3NpdGlvbigwLGluZGV4Kml0ZW0uSGVpZ2h0SXRlbSlcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5hZGRDYWxsQmFjayhmdW5jdGlvbihjZWxsLG9yZGVyX3R5cGUsb3JkZXJfaWQsaW5kZXgpe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNlbGxUb3VjaGVkKGNlbGwsb3JkZXJfdHlwZSxvcmRlcl9pZCxpbmRleClcbiAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1fbGlzdF9wYW5lbFtpXSA9IGl0ZW07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGl0ZW0uc2V0RGF0YSh0aGlzLmFyZWFfbGlzdFtpXSlcbiAgICAgICAgICAgICAgICBpdGVtLnNldEl0ZW1JbmRleCgpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pdGVtX3Njcm9sbHZpZXcuY29udGVudC5oZWlnaHQgPSB0aGlzLmFyZWFfbGlzdC5sZW5ndGggKiA1NjhcbiAgICB9LFxuICAgIHNldFJvdW5kSGVybyhjaGFuZ2VfaWQsY291bnQpe1xuICAgICAgICB0aGlzLmxldmVsX251bS5zdHJpbmcgPSAoY2hhbmdlX2lkIHx8IDEpXG4gICAgICAgIHRoaXMuY2hhbmdlX2NvdW50LnN0cmluZyA9IChjb3VudCB8fCAwKVxuICAgIH0sXG4gICAgLy/liankvZnotK3kubDmrKHmlbBcbiAgICByZW1haW5CdXlDb3VudChidXlfY291bnQpe1xuICAgICAgICBidXlfY291bnQgPSBidXlfY291bnQgfHwgMFxuICAgICAgICBpZih0aGlzLnJlbWFpbl9jb3VudCl7XG4gICAgICAgICAgICBsZXQgY291bnQgPSAwXG4gICAgICAgICAgICBsZXQgY29uc3RfZGF0YSA9IENvbmZpZy5ob2xpZGF5X2Jvc3NfbmV3X2RhdGEuZGF0YV9jb25zdC5maWdodF9idXlfbWF4X2NvdW50XG4gICAgICAgICAgICBpZihjb25zdF9kYXRhICYmIGNvbnN0X2RhdGEudmFsKXtcbiAgICAgICAgICAgICAgICBjb3VudCA9IGNvbnN0X2RhdGEudmFsIC0gYnV5X2NvdW50XG4gICAgICAgICAgICAgICAgaWYoY291bnQgPD0gMCl7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ID0gMFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnJlbWFpbl9jb3VudC5zdHJpbmcgPSAoXCLliankvZnotK3kubDmrKHmlbDvvJpcIitjb3VudClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgc2V0Q291bnREb3duVGltZShsZXNzX3RpbWUpe1xuICAgICAgICBpZih0aGlzLnJhbWFpbl90aW1lKXtcbiAgICAgICAgICAgIGlmKHRoaXMudGltZV90aWNoZXQpe1xuICAgICAgICAgICAgICAgIGdjb3JlLlRpbWVyLmRlbCh0aGlzLnRpbWVfdGljaGV0KTtcbiAgICAgICAgICAgICAgICB0aGlzLnRpbWVfdGljaGV0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKGxlc3NfdGltZSA+IDApe1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VGltZUZvcm1hdFN0cmluZyhsZXNzX3RpbWUpXG4gICAgICAgICAgICAgICAgdGhpcy50aW1lX3RpY2hldCA9IGdjb3JlLlRpbWVyLnNldChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICBsZXNzX3RpbWUtLSBcbiAgICAgICAgICAgICAgICAgICAgaWYobGVzc190aW1lIDwgMCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBnY29yZS5UaW1lci5kZWwodGhpcy50aW1lX3RpY2hldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRpbWVfdGljaGV0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmFtYWluX3RpbWUuc3RyaW5nID0gKFwiMDA6MDA6MDBcIilcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRpbWVGb3JtYXRTdHJpbmcobGVzc190aW1lKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLDEwMDAsLTEpXG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFRpbWVGb3JtYXRTdHJpbmcobGVzc190aW1lKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBzZXRUaW1lRm9ybWF0U3RyaW5nKHRpbWUpe1xuICAgICAgICBpZih0aW1lID4gMCl7XG4gICAgICAgICAgICB0aGlzLnJhbWFpbl90aW1lLnN0cmluZyA9IChUaW1lVG9vbC5nZXRUaW1lRm9ybWF0RGF5KHRpbWUpKVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRoaXMucmFtYWluX3RpbWUuc3RyaW5nID0gKFwiMDA6MDA6MDBcIilcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLy/lrp3nrrHnirbmgIFcbiAgICBsZXZlbEJveFN0YXR1cyhzdGF0dXMsb3JkX2lkKXtcbiAgICAgICAgaWYodGhpcy5jdXJfYm94X3N0YXR1cyA9PSBzdGF0dXMpIHJldHVybjtcblxuICAgICAgICB0aGlzLmN1cl9ib3hfc3RhdHVzID0gc3RhdHVzXG5cbiAgICAgICAgbGV0IGlkID0gdGhpcy5nZXRCb3hSZXdhcmRJRChvcmRfaWQpXG4gICAgICAgIHRoaXMubG9hZFJlcyhQYXRoVG9vbC5nZXRVSUljb25QYXRoKFwibGltaXRleGVyY2lzZVwiLFwibGltaXRleGVyY2lzZV9ib3hcIitpZCksZnVuY3Rpb24ocmVzKXtcbiAgICAgICAgICAgIHRoaXMuYm94X3Nwcml0ZS5zcHJpdGVGcmFtZSA9IHJlc1xuICAgICAgICB9LmJpbmQodGhpcykpXG5cbiAgICAgICAgaWYoc3RhdHVzID09IDEpe1xuICAgICAgICAgICAgdGhpcy5ib3hfc3ByaXRlLm5vZGUuc3RvcEFsbEFjdGlvbnMoKVxuICAgICAgICAgICAgbGV0IHNrZXd0b18xID0gY2Mucm90YXRlVG8oMC4xLCAxMClcbiAgICAgICAgICAgIGxldCBza2V3dG9fMiA9IGNjLnJvdGF0ZVRvKDAuMSwgLTEwKVxuICAgICAgICAgICAgbGV0IHNrZXd0b18zID0gY2Mucm90YXRlVG8oMC4xLCAwKVxuICAgICAgICAgICAgbGV0IHNlcSA9IGNjLnNlcXVlbmNlKHNrZXd0b18xLHNrZXd0b18yLCBza2V3dG9fMSxza2V3dG9fMiwgc2tld3RvXzEsc2tld3RvXzIsc2tld3RvXzMsY2MuZGVsYXlUaW1lKDEpKVxuICAgICAgICAgICAgbGV0IHJlcGVhdEZvcmV2ZXIgPSBjYy5yZXBlYXRGb3JldmVyKHNlcSlcbiAgICAgICAgICAgIHRoaXMuYm94X3Nwcml0ZS5ub2RlLnJ1bkFjdGlvbihyZXBlYXRGb3JldmVyKVxuICAgICAgICB9ZWxzZSBpZihzdGF0dXMgPT0gMil7XG4gICAgICAgICAgICB0aGlzLmJveF9zcHJpdGUubm9kZS5zdG9wQWxsQWN0aW9ucygpXG4gICAgICAgIH1cbiAgICB9LFxuICAgIGdldEJveFJld2FyZElEKG9yZF9pZCl7XG4gICAgICAgIGxldCBkaWZmID0gdGhpcy5tb2RlbC5nZXRDdXJyZW50RGlmZihvcmRfaWQpXG4gICAgICAgIGxldCBjb3VudCA9IDFcbiAgICAgICAgaWYodGhpcy5yZXdhcmRfbGlzdFtkaWZmXSl7XG4gICAgICAgICAgICBmb3IobGV0IGk9MTtpPD0zOysraSl7XG4gICAgICAgICAgICAgICAgaWYob3JkX2lkIDw9IHRoaXMucmV3YXJkX2xpc3RbZGlmZl1bMV0ub3JkZXJfaWQpe1xuICAgICAgICAgICAgICAgICAgICBjb3VudCA9IDFcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihvcmRfaWQgPiB0aGlzLnJld2FyZF9saXN0W2RpZmZdWzFdLm9yZGVyX2lkICYmIG9yZF9pZCA8PSB0aGlzLnJld2FyZF9saXN0W2RpZmZdWzJdLm9yZGVyX2lkKXtcbiAgICAgICAgICAgICAgICAgICAgY291bnQgPSAyXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYob3JkX2lkID4gdGhpcy5yZXdhcmRfbGlzdFtkaWZmXVsyXS5vcmRlcl9pZCl7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ID0gM1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY291bnRcbiAgICB9LFxuICAgIC8v5pi+56S6Ym9zc+S/oeaBryAg6L2u5qyh77yM6Zq+5bqmXG4gICAgc2hvd0Jvc3NNZXNzYWdlSXRlbShkaWZmKXtcbiAgICAgICAgbGV0IHJvdW5kID0gdGhpcy5tb2RlbC5nZXRDdXJyZW50Um91bmQoKVxuICAgICAgICBkaWZmID0gZGlmZiB8fCAxXG4gICAgICAgIGlmKHRoaXMuaXRlbV9zY3JvbGx2aWV3KXtcbiAgICAgICAgICAgIGlmKHRoaXMuY2hhbmdlX2Jvc3NfbGlzdFtyb3VuZF0gJiYgdGhpcy5jaGFuZ2VfYm9zc19saXN0W3JvdW5kXVtkaWZmXSl7XG4gICAgICAgICAgICAgICAgdGhpcy5hcmVhX2xpc3QgPSBbXVxuICAgICAgICAgICAgICAgIGZvcihsZXQgaSBpbiB0aGlzLmNoYW5nZV9ib3NzX2xpc3Rbcm91bmRdW2RpZmZdKXtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHYgPSB0aGlzLmNoYW5nZV9ib3NzX2xpc3Rbcm91bmRdW2RpZmZdW2ldXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXJlYV9saXN0LnB1c2godilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2MubG9nKHRoaXMuYXJlYV9saXN0KVxuICAgICAgICAgICAgICAgIGxldCBsZXZlbF90eXBlID0gdGhpcy5tb2RlbC5nZXRDdXJyZW50VHlwZSgpXG4gICAgICAgICAgICAgICAgbGV0IGNvdW50ID0gMVxuICAgICAgICAgICAgICAgIGlmKGxldmVsX3R5cGUpe1xuICAgICAgICAgICAgICAgICAgICBjb3VudCA9IGxldmVsX3R5cGVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtX3Njcm9sbHZpZXcuY29udGVudC55ID0gKGNvdW50IC0gMSkgKiAtNTY4XG4gICAgICAgICAgICAgICAgdGhpcy5zcm9sbF9tYWluX3Nwci55ID0gKHRoaXMubGVmdF9zY3JvbGx2aWV3X3Bvc1tjb3VudF0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jcmVhdGVBcmVhTGlzdCgpXG4gICAgfSxcbiAgICAvL+WFs+WNoeS/oeaBryAgKOWFs+WNoeexu+Wei+OAgeWFs+WNoWlkKVxuICAgIGdldExldmVsTWVzc2FnZShvcmRfdHlwZSxvcmRfaWQpe1xuICAgICAgICBvcmRfdHlwZSA9IG9yZF90eXBlIHx8IDFcbiAgICAgICAgb3JkX2lkID0gb3JkX2lkIHx8IHRoaXMubW9kZWwuZ2V0Q3VycmVudENoYW5nZUlEKClcbiAgICAgICAgaWYodGhpcy5jdXJfb3JkZXJfdHlwZSA9PSBvcmRfdHlwZSAmJiB0aGlzLmN1cl9vcmRlcl9pZCA9PSBvcmRfaWQpe1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJvdW5kID0gdGhpcy5tb2RlbC5nZXRDdXJyZW50Um91bmQoKVxuICAgICAgICBsZXQgZGlmZiA9IHRoaXMubW9kZWwuZ2V0Q3VycmVudERpZmYoKVxuICAgICAgICBpZighcm91bmQpIHJldHVybjtcblxuICAgICAgICB0aGlzLmxldmVsX2FyZWFfdGV4dC5zdHJpbmcgPSAoTGltaXRFeGVyY2lzZUNvbnN0YW50cy50eXBlW29yZF90eXBlXSlcblxuICAgICAgICBpZih0aGlzLmNoYW5nZV9ib3NzX2xpc3Rbcm91bmRdICYmIHRoaXMuY2hhbmdlX2Jvc3NfbGlzdFtyb3VuZF1bZGlmZl0pe1xuICAgICAgICAgICAgbGV0IGxldl9kYXRhID0gdGhpcy5jaGFuZ2VfYm9zc19saXN0W3JvdW5kXVtkaWZmXVxuICAgICAgICAgICAgaWYob3JkX2lkID49IDE1KSB7XG4gICAgICAgICAgICAgICAgb3JkX2lkID0gMTVcbiAgICAgICAgICAgIH0gIFxuICAgICAgICAgICAgaWYobGV2X2RhdGFbb3JkX3R5cGVdICYmIGxldl9kYXRhW29yZF90eXBlXVtvcmRfaWRdKXtcbiAgICAgICAgICAgICAgICBsZXQgbGV2X2NvdW50ID0gbGV2X2RhdGFbb3JkX3R5cGVdW29yZF9pZF0ub3JkZXJfaWRcbiAgICAgICAgICAgICAgICB0aGlzLmxldmVsX3RleHQuc3RyaW5nID0gKFV0aWxzLlRJMThOKFwi56ysXCIpK2xldl9jb3VudCtVdGlscy5USTE4TihcIuWFs1wiKSlcblxuICAgICAgICAgICAgICAgIGlmKGxldl9jb3VudCA9PSB0aGlzLm1vZGVsLmdldEN1cnJlbnRDaGFuZ2VJRCgpKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idG5fY2hhbmdlX2J0bi5pbnRlcmFjdGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ0bl9jaGFuZ2VfYnRuLmVuYWJsZUF1dG9HcmF5RWZmZWN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlX291dGxpbmUuZW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnRuX2NoYW5nZV9idG4uaW50ZXJhY3RhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnRuX2NoYW5nZV9idG4uZW5hYmxlQXV0b0dyYXlFZmZlY3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZV9vdXRsaW5lLmVuYWJsZWQgPSBmYWxzZVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBzdHIgPSBcIlwiXG4gICAgICAgICAgICAgICAgbGV0IGRlc2MgPSBsZXZfZGF0YVtvcmRfdHlwZV1bb3JkX2lkXS5hZGRfc2tpbGxfZGVjcyB8fCBbXVxuICAgICAgICAgICAgICAgIGZvcihsZXQgaT0wO2k8ZGVzYy5sZW5ndGg7KytpKXtcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gc3RyK2Rlc2NbaV0rXCJcXG5cIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmxldmVsX2VmZmVjdF9kZXNjLnN0cmluZyA9IChzdHIpXG4gICAgICAgICAgICAgICAgbGV0IHBvd2VyID0gbGV2X2RhdGFbb3JkX3R5cGVdW29yZF9pZF0ucG93ZXIgfHwgMFxuICAgICAgICAgICAgICAgIHRoaXMucG93ZXIuc3RyaW5nID0gKFV0aWxzLlRJMThOKFwi5o6o6I2Q5oiY5Yqb77yaXCIpK3Bvd2VyKVxuXG4gICAgICAgICAgICAgICAgaWYodGhpcy5jdXJfb3JkZXJfdHlwZSAhPSBvcmRfdHlwZSl7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjb3VudCA9IHRoaXMuZ2V0Qm94UmV3YXJkSUQob3JkX2lkKVxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLnJld2FyZF9saXN0W2RpZmZdICYmIHRoaXMucmV3YXJkX2xpc3RbZGlmZl1bY291bnRdKXtcbiAgICAgICAgICAgICAgICAgICAgLy/ojrflj5blpZblirFcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhX2xpc3QgPSB0aGlzLnJld2FyZF9saXN0W2RpZmZdW2NvdW50XS5yZXdhcmQgfHwgW11cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzZXR0aW5nID0ge31cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmcuc2NhbGUgPSAwLjZcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmcubWF4X2NvdW50ID0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZy5pc19jZW50ZXIgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5nLnNob3dfZWZmZWN0X2lkID0gMjYzXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxldmVsX2l0ZW1fbGlzdCA9IFV0aWxzLmNvbW1vblNob3dTaW5nbGVSb3dJdGVtTGlzdCh0aGlzLmNoYW5nZV9pdGVtLCB0aGlzLmxldmVsX2l0ZW1fbGlzdCwgZGF0YV9saXN0LCBzZXR0aW5nLHRoaXMuY2hhbmdlX2l0ZW1fY29udGVudClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cl9vcmRlcl90eXBlID0gb3JkX3R5cGVcbiAgICAgICAgdGhpcy5jdXJfb3JkZXJfaWQgPSBvcmRfaWRcbiAgICB9LFxuICAgIG9uQ2VsbFRvdWNoZWQoY2VsbCxvcmRlcl90eXBlLG9yZGVyX2lkLGluZGV4KXtcbiAgICAgICAgaWYodGhpcy50b3VjaF9rdWFuZyA9PSBudWxsKXsgXG4gICAgICAgICAgICB0aGlzLnRvdWNoX2t1YW5nID0gbmV3IGNjLk5vZGUoKVxuICAgICAgICAgICAgbGV0IGltYWdlID0gdGhpcy50b3VjaF9rdWFuZy5hZGRDb21wb25lbnQoY2MuU3ByaXRlKVxuICAgICAgICAgICAgaW1hZ2UudHlwZSA9IGNjLlNwcml0ZS5UeXBlLlNMSUNFRDtcbiAgICAgICAgICAgIGltYWdlLnNpemVNb2RlID0gY2MuU3ByaXRlLlNpemVNb2RlLkNVU1RPTTtcbiAgICAgICAgICAgIHRoaXMudG91Y2hfa3Vhbmcuc2V0Q29udGVudFNpemUoMTEwLDExMClcbiAgICAgICAgICAgIHRoaXMuaXRlbV9zY3JvbGx2aWV3LmNvbnRlbnQuYWRkQ2hpbGQodGhpcy50b3VjaF9rdWFuZyw5OSlcbiAgICAgICAgICAgIHRoaXMubG9hZFJlcyhQYXRoVG9vbC5nZXRVSUljb25QYXRoKFwiY29tbW9uXCIsXCJjb21tb25fOTAwMTlcIiksZnVuY3Rpb24ocmVzKXtcbiAgICAgICAgICAgICAgICBpbWFnZS5zcHJpdGVGcmFtZSA9IHJlc1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICB9XG4gICAgICAgIGxldCBpdGVtID0gY2VsbC5nZXRCdG5NYXN0ZXIoaW5kZXgpXG4gICAgICAgIGlmKGl0ZW0pe1xuICAgICAgICAgICAgbGV0IHdvcmxkUG9zID0gaXRlbS5jb252ZXJ0VG9Xb3JsZFNwYWNlQVIoY2MudjIoMCwwKSlcbiAgICAgICAgICAgIGxldCBwb3MgPSB0aGlzLml0ZW1fc2Nyb2xsdmlldy5jb250ZW50LmNvbnZlcnRUb05vZGVTcGFjZSh3b3JsZFBvcylcbiAgICAgICAgICAgIHRoaXMudG91Y2hfa3Vhbmcuc2V0UG9zaXRpb24ocG9zLngtMjUscG9zLnktNClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdldExldmVsTWVzc2FnZShvcmRlcl90eXBlLG9yZGVyX2lkKVxuICAgIH0sXG4gICAgdXBkYXRlU2xpZGVTaG93QnlWZXJ0aWNhbCgpe1xuICAgICAgICBsZXQgY29udGFpbmVyX3kgPSB0aGlzLml0ZW1fc2Nyb2xsdmlldy5jb250ZW50LnlcbiAgICAgICAgaWYodGhpcy5pdGVtX3Njcm9sbHZpZXcpe1xuICAgICAgICAgICAgbGV0IGN1cl9wb3MgPSB0aGlzLmdldEN1cnJlbnRQb3MoTWF0aC5hYnMoY29udGFpbmVyX3kpKVxuICAgICAgICAgICAgdGhpcy5zY3JvbGx2aWV3U3ByaW50QmFyKGN1cl9wb3MpXG4gICAgICAgICAgICB0aGlzLmxldmVsX2FyZWFfdGV4dC5zdHJpbmcgPSBMaW1pdEV4ZXJjaXNlQ29uc3RhbnRzLnR5cGVbY3VyX3Bvc11cbiAgICAgICAgfVxuICAgIH0sXG4gICAgLy/liKTmlq3lvZPliY3kvY3nva5cbiAgICBnZXRDdXJyZW50UG9zKHBvcyl7XG4gICAgICAgIGxldCBjdXJfcG9zID0gMVxuICAgICAgICBpZihwb3MgPj0gdGhpcy5wb3NfaW50ZXJ2YWxbMF1bMF0gJiYgcG9zIDw9IHRoaXMucG9zX2ludGVydmFsWzBdWzFdKXtcbiAgICAgICAgICAgIGN1cl9wb3MgPSAxXG4gICAgICAgIH1lbHNlIGlmKHBvcyA+PSB0aGlzLnBvc19pbnRlcnZhbFsxXVswXSAmJiBwb3MgPD0gdGhpcy5wb3NfaW50ZXJ2YWxbMV1bMV0pe1xuICAgICAgICAgICAgY3VyX3BvcyA9IDJcbiAgICAgICAgfWVsc2UgaWYocG9zID49IHRoaXMucG9zX2ludGVydmFsWzJdWzBdICYmIHBvcyA8PSB0aGlzLnBvc19pbnRlcnZhbFsyXVsxXSl7XG4gICAgICAgICAgICBjdXJfcG9zID0gM1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdXJfcG9zXG4gICAgfSxcbiAgICAvL+a7keWKqOeahOWKqOS9nOWkhOeQhlxuICAgIHNjcm9sbHZpZXdTcHJpbnRCYXIoY3VyX3Bvcyl7XG4gICAgICAgIGlmKHRoaXMuc2Nyb2xsdmlld19iYXIgPT0gY3VyX3BvcykgcmV0dXJuO1xuICAgICAgICB0aGlzLnNjcm9sbHZpZXdfYmFyID0gY3VyX3Bvc1xuICAgICAgICB0aGlzLnNyb2xsX21haW5fc3ByLnN0b3BBbGxBY3Rpb25zKClcbiAgICAgICAgLy8gZG9TdG9wQWxsQWN0aW9ucyh0aGlzLnNyb2xsX21haW5fc3ByKVxuXG4gICAgICAgIGxldCBmYWRlb3V0ID0gY2MuZmFkZU91dCgwLjMpXG4gICAgICAgIGxldCBmYWRlaW4gPSBjYy5mYWRlSW4oMC4zKVxuICAgICAgICBsZXQgbW92ZV90byA9IGNjLm1vdmVUbygwLjEsY2MudjIoLTMxOSwgdGhpcy5sZWZ0X3Njcm9sbHZpZXdfcG9zW2N1cl9wb3NdKSlcbiAgICAgICAgbGV0IHNjYWxldG8xID0gY2Muc2NhbGVUbygwLjEsIDEuMilcbiAgICAgICAgbGV0IHNjYWxldG8yID0gY2Muc2NhbGVUbygwLjEsIDEpXG4gICAgICAgIGxldCBzcGF3biA9IGNjLnNwYXduKGZhZGVpbixtb3ZlX3RvKVxuICAgICAgICBsZXQgc2VxID0gY2Muc2VxdWVuY2UoZmFkZW91dCxzcGF3bixzY2FsZXRvMSxzY2FsZXRvMilcbiAgICAgICAgdGhpcy5zcm9sbF9tYWluX3Nwci5ydW5BY3Rpb24oc2VxKVxuICAgIH0sXG4gICAgc2V0SXRlbUluZGV4KCl7XG4gICAgICAgIC8v6buY6K6k54K55Ye7XG4gICAgfSxcbiAgICAvLyDlhbPpl63nqpfkvZPlm57osIMs6ZyA6KaB5Zyo6L+Z6YeM6LCD55So6K+l56qX5L2T5omA5bGeY29udHJvbGxlcueahGNsb3Nl5pa55rOV5rKh55So5LqO572u56m66K+l56qX5L2T5a6e5L6L5a+56LGhXG4gICAgY2xvc2VDYWxsQmFjazpmdW5jdGlvbigpe1xuICAgICAgICBpZih0aGlzLnRpbWVfdGljaGV0KXtcbiAgICAgICAgICAgIGdjb3JlLlRpbWVyLmRlbCh0aGlzLnRpbWVfdGljaGV0KTtcbiAgICAgICAgICAgIHRoaXMudGltZV90aWNoZXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMudGltZXIpe1xuICAgICAgICAgICAgdGhpcy5zdG9wVXBkYXRlKHRoaXMudGltZXIpXG4gICAgICAgICAgICB0aGlzLnRpbWVyID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMuaXRlbV9saXN0X3BhbmVsKXtcbiAgICAgICAgICAgIGZvcihsZXQgaT0wO2k8dGhpcy5pdGVtX2xpc3RfcGFuZWwubGVuZ3RoOysraSl7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5pdGVtX2xpc3RfcGFuZWxbaV0pe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1fbGlzdF9wYW5lbFtpXS5kZWxldGVNZSgpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbV9saXN0X3BhbmVsW2ldID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLml0ZW1fbGlzdF9wYW5lbCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYodGhpcy5sZXZlbF9pdGVtX2xpc3Qpe1xuICAgICAgICAgICAgZm9yKGxldCBpPTA7aTx0aGlzLmxldmVsX2l0ZW1fbGlzdC5sZW5ndGg7KytpKXtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmxldmVsX2l0ZW1fbGlzdFtpXSl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGV2ZWxfaXRlbV9saXN0W2ldLmRlbGV0ZU1lKClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sZXZlbF9pdGVtX2xpc3RbaV0gPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubGV2ZWxfaXRlbV9saXN0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN0cmwub3BlbkxpbWl0RXhlcmNpc2VDaGFuZ2VWaWV3KGZhbHNlKVxuICAgIH0sXG59KSJdfQ==
|