(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/Scripts/mod/rank/view/rank_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, 'd479flo5JFEjZMiSRZD80qE', 'rank_window'); // Scripts/mod/rank/view/rank_window.js "use strict"; function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } // -------------------------------------------------------------------- // @author: shiraho@syg.com(必填, 创建模块的人员) // @description: // 竖版排行榜排行界面 //
Create: new Date().toISOString() // -------------------------------------------------------------------- var PathTool = require("pathtool"); var RankController = require("rank_controller"); var RankConstant = require("rank_constant"); var RankEvent = require("rank_event"); var ArenaEvent = require("arena_event"); var CommonScrollView = require("common_scrollview"); var RankItem = require("rank_item"); var RoleController = require("role_controller"); var PlayerHead = require("playerhead"); var TimeTool = require("timetool"); var HeroVo = require("hero_vo"); var RankWindow = cc.Class({ "extends": BaseView, ctor: function ctor() { this.prefabPath = PathTool.getPrefabPath("rank", "rank_window"); this.win_type = WinType.Big; this.viewTag = SCENE_TAG.dialogue; this.ctrl = RankController.getInstance(); this.cur_type = 0; this.res_list = {}; this.tab_info_list = {}; this.first_list = {}; this.click_index = arguments[0] || 1; this.is_cluster = arguments[1] || false; this.node_list = []; }, openCallBack: function openCallBack() { this.background = this.seekChild("background"); this.background.scale = FIT_SCALE; this.main_panel = this.seekChild("main_container"); this.close_btn = this.seekChild(this.main_panel, "close_btn"); this.rank_panel = this.seekChild(this.main_panel, "rank_panel"); this.my_rank = this.seekChild(this.main_panel, "my_rank"); this.seekChild(this.my_rank, "title", cc.Label).string = Utils.TI18N("我的排名"); this.rank_index = this.seekChild(this.my_rank, "rank_id", cc.Label); this.four_label = this.seekChild(this.my_rank, "four_label", cc.RichText); this.my_rank_power = this.seekChild(this.my_rank, "my_rank_power", cc.Label); this.my_head = new PlayerHead(); this.my_head.setParent(this.my_rank); this.my_head.show(); this.my_head.setPosition(-155, 60); // this.my_head.setVisible(false); this.my_head.setScale(0.9); this.no_rank = this.seekChild(this.my_rank, "no_rank", cc.Label); this.my_name = this.seekChild(this.my_rank, "my_name", cc.Label); this.no_rank.string = "未上榜"; this.my_name.string = ""; this.title_con = this.seekChild(this.main_panel, "title_con"); var title = this.seekChild(this.title_con, "title_label", cc.Label); var name = RankConstant.TitleName[this.click_index] || ""; title.string = name; this.top_bg = this.seekChild(this.main_panel, "top_bg", cc.Sprite); this.top_bg.node.setScale(0.9, 0.9); var res_id = PathTool.getBigBg("rank_1", null, "rank"); this.loadRes(res_id, function (sf_obj) { this.top_bg.spriteFrame = sf_obj; }.bind(this)); this.top_container = this.seekChild("top_container"); this.top_rank_list = {}; //顶部前3; for (var i = 1; i <= 3; i++) { var label = this.seekChild(this.top_container, "name_" + i, cc.Label); var img = this.seekChild(this.top_container, "guan_" + i); if (this.top_rank_list[i] == null) { this.top_rank_list[i] = {}; this.top_rank_list[i].label = label; this.top_rank_list[i].img = img; } } this.updateTitle(); }, registerEvent: function registerEvent() { this.background.on(cc.Node.EventType.TOUCH_END, function () { this.ctrl.openRankView(false); }, this); this.close_btn.on(cc.Node.EventType.TOUCH_END, function () { this.ctrl.openRankView(false); }, this); this.addGlobalEvent(RankEvent.RankEvent_Get_Rank_data, function (data) { this.updateRankList(data); }, this); this.addGlobalEvent(ArenaEvent.UpdateLoopChallengeRank, function (data) { this.updateRankList(data); }, this); this.addGlobalEvent(RankEvent.RankEvent_Get_Time_event, function (data) { if (!data || !this.click_index) return; var index = this.click_index || RankConstant.RankType.drama; if (data.type && index != data.type) return; // var info = SysEnv.getInstance().loadRankFile(index, this.is_cluster); // if (!info || Utils.next(info) == null) { // this.senProto(index); // } else { // if (data.time && info.data && data.type && (data.time == 0 || data.time == info.timestamp) && index == data.type) { // this.updateRankList(info.data); // } else { this.senProto(index); // } // } }, this); //--公会boss使用的监听 if (this.click_index == RankConstant.RankType.union_boss) { var GuildbossEvent = require("guildboss_event"); var GuildbossConst = require("guildboss_const"); this.addGlobalEvent(GuildbossEvent.UpdateGuildDunRank, function (data, index) { if (index == GuildbossConst.rank.role) { this.updateRankList(data); } }, this); var RoleEvent = require("role_event"); this.addGlobalEvent(RoleEvent.WorshipOtherRole, function (data) { cc.log(data, this.select_item); if (data.idx != null && this.select_item != null && this.select_item.data != null) { if (data.idx == this.select_item.data.rank) this.select_item.updateWorshipStatus(); } }, this); } }, openRootWnd: function openRootWnd(data) { if (data == null) { this.ctrl.send_12901(this.click_index, this.is_cluster); } else { this.data = data; var protocal = { boss_id: this.data.boss_id, start_num: 1, end_num: 100 }; var GuildbossConst = require("guildboss_const"); require("guildboss_controller").getInstance().requestGuildDunRank(GuildbossConst.rank.role, protocal); } }, //更新标题 updateTitle: function updateTitle() { var title_list = RankConstant.RankTitle[this.click_index] || {}; var num = Object.keys(title_list).length || 0; var pos_list = RankConstant.TitlePos[this.click_index] || {}; var line_pos_list = RankConstant.TitleLinePos[this.click_index] || {}; for (var i = 1; i <= num; i++) { if (i != num) { this.createImage(line_pos_list[i]); } var offx = pos_list[i] || 0; var label = Utils.createLabel(24, new cc.Color(0x68, 0x45, 0x2a, 0xff), null, offx - 336, 230, "", this.main_panel, 0, cc.v2(0, 0.5)); var str = title_list[i] || ""; label.string = str; this.node_list.push(label); } }, createImage: function createImage(x) { var line_offx = x || 0; var res = PathTool.getCommonIcomPath("common_1069"); var line = Utils.createImage(this.main_panel, res, line_offx - 338, 230, cc.v2(0, 0.5), true, 1, false); this.loadRes(res, function (sf_obj) { line.spriteFrame = sf_obj; }.bind(this)); line.node.setScale(1, 0.8); this.node_list.push(line); }, updateRankList: function updateRankList(data) { this.data = data; this.updateMyData(); this.updateRankData(); if (!this.list_view) { var list_size = cc.size(610, 530); var setting = { item_class: RankItem, // 单元类 start_x: 5, // 第一个单元的X起点 space_x: 0, // x方向的间隔 start_y: 0, // 第一个单元的Y起点 space_y: 0, // y方向的间隔 item_width: 600, // 单元的尺寸width item_height: 120, // 单元的尺寸height row: 0, // 行数,作用于水平滚动类型 col: 1, // 列数,作用于垂直滚动类型 need_dynamic: true }; this.list_view = new CommonScrollView(); this.list_view.createScroll(this.rank_panel, cc.v2(0, -28), ScrollViewDir.vertical, ScrollViewStartPos.top, list_size, setting, cc.v2(0.5, 0.5)); } if (!data || Utils.next(data) == null) { this.senProto(this.click_index); return; } var list = data.rank_list || {}; this.showEmptyIcon(false); if (list.length <= 0) { this.showEmptyIcon(true); } var callback = function callback(item, vo) {}; if (this.click_index == RankConstant.RankType.union_boss) { callback = function (item) { this.worshipOtherRole(item); }.bind(this); } this.list_view.setData(list, callback, { rank_type: this.click_index, is_cluster: this.is_cluster }); }, worshipOtherRole: function worshipOtherRole(item) { if (item.data != null) { this.select_item = item; } }, //显示空白 showEmptyIcon: function showEmptyIcon(bool) { if (!this.empty_con && bool == false) return; if (!this.empty_con) { var size = cc.size(200, 200); this.empty_con = new cc.Node(); this.empty_con.setContentSize(size); this.empty_con.setAnchorPoint(cc.v2(0.5, 0.5)); this.empty_con.setPosition(cc.v2(0, 0)); this.main_panel.addChild(this.empty_con); var res = PathTool.getBigBg("bigbg_3"); this.empty_bg = Utils.createImage(this.empty_con, null, 0, 0, cc.v2(0.5, 0.5), false); this.loadRes(res, function (sf_obj) { this.empty_bg.spriteFrame = sf_obj; }.bind(this)); this.empty_label = Utils.createLabel(26, new cc.Color(0x68, 0x45, 0x2a, 0xff), null, 0, -100, "", this.empty_con, 0, cc.v2(0.5, 0.5)); } var str = Utils.TI18N("当前排行榜暂无数据"); this.empty_label.string = str; this.empty_con.active = bool; }, senProto: function senProto(index) { if (index == RankConstant.RankType.union) { this.ctrl.send_12903(); } else if (index == RankConstant.RankType.arena) { var ArenaController = require("arena_controller"); ArenaController.getInstance().sender20221(); } else if (index == RankConstant.RankType.action_partner) { this.ctrl.send_12904(0, 100); } else { var num = null; if (index == 2 || index == 3 || index == 6 || index == 18) { num = 300; } this.ctrl.send_12900(index, null, null, this.is_cluster); } }, //更新自己数据 updateMyData: function updateMyData() { if (!this.data) return; var data = this.data; var str = "0"; var my_idx = data.my_idx || data.rank || 0; if (my_idx && my_idx > 0) { str = my_idx; } this.no_rank.node.active = false; var role_vo = RoleController.getInstance().getRoleVo(); this.rank_index.string = str; if (my_idx && my_idx >= 1 && my_idx <= 3) { this.rank_index.node.active = false; if (!this.my_rank_icon) { this.my_rank_icon = this.seekChild(this.my_rank, "my_rank_icon", cc.Sprite); } this.my_rank_icon.node.active = true; this.loadRes(PathTool.getCommonIcomPath("common_200" + my_idx), function (sf_obj) { this.my_rank_icon.spriteFrame = sf_obj; }.bind(this)); this.my_rank_icon.node.setScale(0.7); } else { if (my_idx <= 0) { this.no_rank.node.active = true; this.rank_index.node.active = false; } else { this.rank_index.node.active = true; if (this.my_rank_icon) this.my_rank_icon.node.active = false; } } this.my_head.setHeadRes(role_vo.face_id); var name = role_vo.name || ""; this.my_name.string = name; var avatar_bid = role_vo.avatar_base_id; this.my_head.setFrameRes(avatar_bid); var str = ""; var res = null; //- 311是main——panel的width一半, this.my_rank_power.node.x = 518 - 311; this.four_label.node.x = 555 - 311; this.four_label.node.active = true; if (this.rune_item) this.rune_item.active = false; this.my_rank_power.string = ""; this.four_label.node.setPosition(cc.v2(485 - 311, 50)); if (this.click_index == RankConstant.RankType.power || this.click_index == RankConstant.RankType.action_power) { res = PathTool.getCommonIcomPath("common_90002"); var power = data.my_val1 || 0; str = cc.js.formatStr(" %s", "common_90002", power); } else if (this.click_index == RankConstant.RankType.drama || this.click_index == RankConstant.RankType.action_drama) { var config = gdata("dungeon_data", "data_drama_dungeon_info", [data.my_val1]); if (config) str = config.name; } else if (this.click_index == RankConstant.RankType.union) { str = cc.js.formatStr("会长名:%s", data.leader_name); if (role_vo.gid == 0) str = Utils.TI18N("暂无公会"); this.my_name.string = role_vo.name; this.my_name.node.setPosition(cc.v2(205 - 311, 82)); this.my_head.setVisible(false); this.four_label.node.setPosition(cc.v2(205 - 311, 45)); var power = data.power || 0; if (power <= 0) { this.my_rank_power.string = "0"; } else { this.my_rank_power.string = power; } this.my_rank_power.node.x = 525 - 300; } else if (this.click_index == RankConstant.RankType.tower || this.click_index == RankConstant.RankType.action_tower) { var num = data.my_val2 || 0; var tim = TimeTool.getTimeMs(num, true); if (data.my_val1 && data.my_val1 == 0) { tim = ""; this.four_label.node.active = false; } this.my_head.setVisible(true); this.my_name.node.x = 0; this.my_rank_power.string = tim; str = data.my_val1.toString() || ""; this.my_name.node.y = 53; this.four_label.node.setPosition(cc.v2(420 - 311, 53)); this.my_rank_power.node.setPosition(cc.v2(530 - 311, 53)); } else if (this.click_index == RankConstant.RankType.arena || this.click_index == RankConstant.RankType.action_arena) { var res = PathTool.getItemRes("8"); var score = this.data.score || this.data.my_val1 || 0; str = cc.js.formatStr(" %s", 8, score); } else if (this.click_index == RankConstant.RankType.union_boss) { this.four_label.node.active = true; this.four_label.node.setPosition(cc.v2(485 - 311, 50)); this.my_name.node.setPosition(cc.v2(275 - 311, 53)); this.my_rank_power.node.setPosition(cc.v2(530 - 311, 53)); this.four_label.string = String(data.mydps || 0); } else if (this.click_index == RankConstant.RankType.action_star || this.click_index == RankConstant.RankType.star_power) {} else if (this.click_index == RankConstant.RankType.adventure) { str = data.my_val1.toString() || 0; var val2_str = data.my_val2 != 0 && data.my_val2 || ""; this.my_rank_power.string = val2_str; this.four_label.node.setPosition(cc.v2(420 - 311, 53)); this.my_rank_power.node.setPosition(cc.v2(530 - 311, 53)); } if (str == 0) { str = ""; } this.four_label.string = str; this.loadRes(res, function (resObject) { this.four_label.addSpriteFrame(resObject); }.bind(this)); }, //创建一个英雄数据 createPartnerVo: function createPartnerVo() { var vo = new HeroVo(); var data = { partner_id: self.data.pid, bid: self.data.pbid, lev: self.data.plev, star: self.data.pstar }; vo.updateHeroVo(data); return vo; }, //更新前三名头像 updateRankData: function updateRankData() { var _pos_list; if (!this.data) return; var rank_list = this.data.rank_list || {}; var count = 0; var size = this.main_panel.getContentSize(); for (var i in rank_list) { var v = rank_list[i]; var idx = v.idx || v.rank; if (idx > 0 && idx <= 3) { count = count + 1; if (!this.first_list[idx]) { var head = new PlayerHead(); head.show(); var width = 0; var height = 380; var off_y = 0; if (idx == 2) { width = -170; height = 370; off_y = 6; } else if (idx == 3) { width = 170; height = 370; off_y = 6; } head.setPosition(width, height); head.setParent(this.main_panel); var name = this.top_rank_list[count].label; name.node.active = true; var title = this.top_rank_list[count].img; title.active = true; this.first_list[idx] = title; this.first_list[idx] = head; this.first_list[idx].head_name = name; } var face_id = v.face_id || v.face || v.leader_face || 0; var avatar_bid = v.avatar_id || v.avatar_bid || v.leader_avatar_bid || 0; this.first_list[idx].setFrameRes(avatar_bid); this.first_list[idx].setHeadRes(face_id); this.first_list[idx].addCallBack(function (v) { var roleVo = RoleController.getInstance().getRoleVo(); var rid = v.rid || v.leader_rid || 0; var srv_id = v.srv_id || v.leader_srvid || 0; if (roleVo.rid == rid && roleVo.srv_id == srv_id) return; var vo = { rid: rid, srv_id: srv_id }; require("chat_controller").getInstance().openFriendInfo(vo); }.bind(this, v)); var name = v.name || ""; this.first_list[idx].head_name.string = name; } if (count >= 3) break; } if (!this.no_label_list) { this.no_label_list = {}; } for (var i in this.no_label_list) { this.no_label_list[i].setVisible(false); } var pos_list = (_pos_list = {}, _defineProperty(_pos_list, 1, 336 - size.width / 2), _defineProperty(_pos_list, 2, 167 - size.width / 2), _defineProperty(_pos_list, 3, 508 - size.width / 2), _pos_list); if (rank_list.length < 3) { for (var i = rank_list.length + 1; i <= 3; i++) { if (!this.no_label_list[i]) { var label = Utils.createLabel(24, null, null, pos_list[i], 360, Utils.TI18N("虚位以待"), this.main_panel, 0, cc.v2(0.5, 0.5)); this.no_label_list[i] = label.node; this.node_list.push(label); if (this.top_rank_list[i]) { this.top_rank_list[i].label.node.active = false; this.top_rank_list[i].img.active = false; } } this.no_label_list[i].active = true; } } }, closeCallBack: function closeCallBack() { if (this.list_view) { this.list_view.DeleteMe(); } this.list_view = null; this.ctrl.openRankView(false); if (this.empty_con) { this.empty_con.destroy(); this.empty_label.destroy(); this.empty_bg.destroy(); this.empty_con = null; this.empty_bg = null; this.empty_label = null; } if (this.node_list) { for (var i in this.node_list) { var v = this.node_list[i]; if (v instanceof cc.Node) { v.destroy(); v = null; } else { v.node.destroy(); v = null; } } this.node_list = null; } if (this.my_head) { this.my_head.deleteMe(); this.my_head = null; } if (this.first_list) { for (var _i in this.first_list) { if (this.first_list[_i]) { this.first_list[_i].deleteMe(); this.first_list[_i] = null; } } this.first_list = null; } } }); module.exports = RankWindow; 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxyYW5rXFx2aWV3XFxyYW5rX3dpbmRvdy5qcyJdLCJuYW1lcyI6WyJQYXRoVG9vbCIsInJlcXVpcmUiLCJSYW5rQ29udHJvbGxlciIsIlJhbmtDb25zdGFudCIsIlJhbmtFdmVudCIsIkFyZW5hRXZlbnQiLCJDb21tb25TY3JvbGxWaWV3IiwiUmFua0l0ZW0iLCJSb2xlQ29udHJvbGxlciIsIlBsYXllckhlYWQiLCJUaW1lVG9vbCIsIkhlcm9WbyIsIlJhbmtXaW5kb3ciLCJjYyIsIkNsYXNzIiwiQmFzZVZpZXciLCJjdG9yIiwicHJlZmFiUGF0aCIsImdldFByZWZhYlBhdGgiLCJ3aW5fdHlwZSIsIldpblR5cGUiLCJCaWciLCJ2aWV3VGFnIiwiU0NFTkVfVEFHIiwiZGlhbG9ndWUiLCJjdHJsIiwiZ2V0SW5zdGFuY2UiLCJjdXJfdHlwZSIsInJlc19saXN0IiwidGFiX2luZm9fbGlzdCIsImZpcnN0X2xpc3QiLCJjbGlja19pbmRleCIsImFyZ3VtZW50cyIsImlzX2NsdXN0ZXIiLCJub2RlX2xpc3QiLCJvcGVuQ2FsbEJhY2siLCJiYWNrZ3JvdW5kIiwic2Vla0NoaWxkIiwic2NhbGUiLCJGSVRfU0NBTEUiLCJtYWluX3BhbmVsIiwiY2xvc2VfYnRuIiwicmFua19wYW5lbCIsIm15X3JhbmsiLCJMYWJlbCIsInN0cmluZyIsIlV0aWxzIiwiVEkxOE4iLCJyYW5rX2luZGV4IiwiZm91cl9sYWJlbCIsIlJpY2hUZXh0IiwibXlfcmFua19wb3dlciIsIm15X2hlYWQiLCJzZXRQYXJlbnQiLCJzaG93Iiwic2V0UG9zaXRpb24iLCJzZXRTY2FsZSIsIm5vX3JhbmsiLCJteV9uYW1lIiwidGl0bGVfY29uIiwidGl0bGUiLCJuYW1lIiwiVGl0bGVOYW1lIiwidG9wX2JnIiwiU3ByaXRlIiwibm9kZSIsInJlc19pZCIsImdldEJpZ0JnIiwibG9hZFJlcyIsInNmX29iaiIsInNwcml0ZUZyYW1lIiwiYmluZCIsInRvcF9jb250YWluZXIiLCJ0b3BfcmFua19saXN0IiwiaSIsImxhYmVsIiwiaW1nIiwidXBkYXRlVGl0bGUiLCJyZWdpc3RlckV2ZW50Iiwib24iLCJOb2RlIiwiRXZlbnRUeXBlIiwiVE9VQ0hfRU5EIiwib3BlblJhbmtWaWV3IiwiYWRkR2xvYmFsRXZlbnQiLCJSYW5rRXZlbnRfR2V0X1JhbmtfZGF0YSIsImRhdGEiLCJ1cGRhdGVSYW5rTGlzdCIsIlVwZGF0ZUxvb3BDaGFsbGVuZ2VSYW5rIiwiUmFua0V2ZW50X0dldF9UaW1lX2V2ZW50IiwiaW5kZXgiLCJSYW5rVHlwZSIsImRyYW1hIiwidHlwZSIsInNlblByb3RvIiwidW5pb25fYm9zcyIsIkd1aWxkYm9zc0V2ZW50IiwiR3VpbGRib3NzQ29uc3QiLCJVcGRhdGVHdWlsZER1blJhbmsiLCJyYW5rIiwicm9sZSIsIlJvbGVFdmVudCIsIldvcnNoaXBPdGhlclJvbGUiLCJsb2ciLCJzZWxlY3RfaXRlbSIsImlkeCIsInVwZGF0ZVdvcnNoaXBTdGF0dXMiLCJvcGVuUm9vdFduZCIsInNlbmRfMTI5MDEiLCJwcm90b2NhbCIsImJvc3NfaWQiLCJzdGFydF9udW0iLCJlbmRfbnVtIiwicmVxdWVzdEd1aWxkRHVuUmFuayIsInRpdGxlX2xpc3QiLCJSYW5rVGl0bGUiLCJudW0iLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwicG9zX2xpc3QiLCJUaXRsZVBvcyIsImxpbmVfcG9zX2xpc3QiLCJUaXRsZUxpbmVQb3MiLCJjcmVhdGVJbWFnZSIsIm9mZngiLCJjcmVhdGVMYWJlbCIsIkNvbG9yIiwidjIiLCJzdHIiLCJwdXNoIiwieCIsImxpbmVfb2ZmeCIsInJlcyIsImdldENvbW1vbkljb21QYXRoIiwibGluZSIsInVwZGF0ZU15RGF0YSIsInVwZGF0ZVJhbmtEYXRhIiwibGlzdF92aWV3IiwibGlzdF9zaXplIiwic2l6ZSIsInNldHRpbmciLCJpdGVtX2NsYXNzIiwic3RhcnRfeCIsInNwYWNlX3giLCJzdGFydF95Iiwic3BhY2VfeSIsIml0ZW1fd2lkdGgiLCJpdGVtX2hlaWdodCIsInJvdyIsImNvbCIsIm5lZWRfZHluYW1pYyIsImNyZWF0ZVNjcm9sbCIsIlNjcm9sbFZpZXdEaXIiLCJ2ZXJ0aWNhbCIsIlNjcm9sbFZpZXdTdGFydFBvcyIsInRvcCIsIm5leHQiLCJsaXN0IiwicmFua19saXN0Iiwic2hvd0VtcHR5SWNvbiIsImNhbGxiYWNrIiwiaXRlbSIsInZvIiwid29yc2hpcE90aGVyUm9sZSIsInNldERhdGEiLCJyYW5rX3R5cGUiLCJib29sIiwiZW1wdHlfY29uIiwic2V0Q29udGVudFNpemUiLCJzZXRBbmNob3JQb2ludCIsImFkZENoaWxkIiwiZW1wdHlfYmciLCJlbXB0eV9sYWJlbCIsImFjdGl2ZSIsInVuaW9uIiwic2VuZF8xMjkwMyIsImFyZW5hIiwiQXJlbmFDb250cm9sbGVyIiwic2VuZGVyMjAyMjEiLCJhY3Rpb25fcGFydG5lciIsInNlbmRfMTI5MDQiLCJzZW5kXzEyOTAwIiwibXlfaWR4Iiwicm9sZV92byIsImdldFJvbGVWbyIsIm15X3JhbmtfaWNvbiIsInNldEhlYWRSZXMiLCJmYWNlX2lkIiwiYXZhdGFyX2JpZCIsImF2YXRhcl9iYXNlX2lkIiwic2V0RnJhbWVSZXMiLCJydW5lX2l0ZW0iLCJwb3dlciIsImFjdGlvbl9wb3dlciIsIm15X3ZhbDEiLCJqcyIsImZvcm1hdFN0ciIsImFjdGlvbl9kcmFtYSIsImNvbmZpZyIsImdkYXRhIiwibGVhZGVyX25hbWUiLCJnaWQiLCJzZXRWaXNpYmxlIiwidG93ZXIiLCJhY3Rpb25fdG93ZXIiLCJteV92YWwyIiwidGltIiwiZ2V0VGltZU1zIiwidG9TdHJpbmciLCJ5IiwiYWN0aW9uX2FyZW5hIiwiZ2V0SXRlbVJlcyIsInNjb3JlIiwiU3RyaW5nIiwibXlkcHMiLCJhY3Rpb25fc3RhciIsInN0YXJfcG93ZXIiLCJhZHZlbnR1cmUiLCJ2YWwyX3N0ciIsInJlc09iamVjdCIsImFkZFNwcml0ZUZyYW1lIiwiY3JlYXRlUGFydG5lclZvIiwicGFydG5lcl9pZCIsInNlbGYiLCJwaWQiLCJiaWQiLCJwYmlkIiwibGV2IiwicGxldiIsInN0YXIiLCJwc3RhciIsInVwZGF0ZUhlcm9WbyIsImNvdW50IiwiZ2V0Q29udGVudFNpemUiLCJ2IiwiaGVhZCIsIndpZHRoIiwiaGVpZ2h0Iiwib2ZmX3kiLCJoZWFkX25hbWUiLCJmYWNlIiwibGVhZGVyX2ZhY2UiLCJhdmF0YXJfaWQiLCJsZWFkZXJfYXZhdGFyX2JpZCIsImFkZENhbGxCYWNrIiwicm9sZVZvIiwicmlkIiwibGVhZGVyX3JpZCIsInNydl9pZCIsImxlYWRlcl9zcnZpZCIsIm9wZW5GcmllbmRJbmZvIiwibm9fbGFiZWxfbGlzdCIsImNsb3NlQ2FsbEJhY2siLCJEZWxldGVNZSIsImRlc3Ryb3kiLCJkZWxldGVNZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxRQUFRLEdBQUdDLE9BQU8sQ0FBQyxVQUFELENBQXRCOztBQUNBLElBQUlDLGNBQWMsR0FBR0QsT0FBTyxDQUFDLGlCQUFELENBQTVCOztBQUNBLElBQUlFLFlBQVksR0FBR0YsT0FBTyxDQUFDLGVBQUQsQ0FBMUI7O0FBQ0EsSUFBSUcsU0FBUyxHQUFHSCxPQUFPLENBQUMsWUFBRCxDQUF2Qjs7QUFDQSxJQUFJSSxVQUFVLEdBQUdKLE9BQU8sQ0FBQyxhQUFELENBQXhCOztBQUNBLElBQUlLLGdCQUFnQixHQUFHTCxPQUFPLENBQUMsbUJBQUQsQ0FBOUI7O0FBQ0EsSUFBSU0sUUFBUSxHQUFHTixPQUFPLENBQUMsV0FBRCxDQUF0Qjs7QUFDQSxJQUFJTyxjQUFjLEdBQUdQLE9BQU8sQ0FBQyxpQkFBRCxDQUE1Qjs7QUFDQSxJQUFJUSxVQUFVLEdBQUdSLE9BQU8sQ0FBQyxZQUFELENBQXhCOztBQUNBLElBQUlTLFFBQVEsR0FBR1QsT0FBTyxDQUFDLFVBQUQsQ0FBdEI7O0FBQ0EsSUFBSVUsTUFBTSxHQUFHVixPQUFPLENBQUMsU0FBRCxDQUFwQjs7QUFF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QWdCNEMsRUFBaEIsRUFBbUJzTCxRQUFuQjs7QUFDQSxlQUFLbE8sVUFBTCxDQUFnQjRDLEVBQWhCLElBQXFCLElBQXJCO0FBQ0g7QUFDSjs7QUFDRCxXQUFLNUMsVUFBTCxHQUFrQixJQUFsQjtBQUNIO0FBQ0o7QUExZnFCLENBQVQsQ0FBakI7QUE4ZkFtTyxNQUFNLENBQUNDLE9BQVAsR0FBaUJ0UCxVQUFqQiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuLy8gQGF1dGhvcjogc2hpcmFob0BzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxyXG4vLyBAZGVzY3JpcHRpb246XHJcbi8vICAgICAg56uW54mI5o6S6KGM5qac5o6S6KGM55WM6Z2iXHJcbi8vIDxici8+Q3JlYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxudmFyIFBhdGhUb29sID0gcmVxdWlyZShcInBhdGh0b29sXCIpO1xyXG52YXIgUmFua0NvbnRyb2xsZXIgPSByZXF1aXJlKFwicmFua19jb250cm9sbGVyXCIpO1xyXG52YXIgUmFua0NvbnN0YW50ID0gcmVxdWlyZShcInJhbmtfY29uc3RhbnRcIik7XHJcbnZhciBSYW5rRXZlbnQgPSByZXF1aXJlKFwicmFua19ldmVudFwiKTtcclxudmFyIEFyZW5hRXZlbnQgPSByZXF1aXJlKFwiYXJlbmFfZXZlbnRcIik7XHJcbnZhciBDb21tb25TY3JvbGxWaWV3ID0gcmVxdWlyZShcImNvbW1vbl9zY3JvbGx2aWV3XCIpO1xyXG52YXIgUmFua0l0ZW0gPSByZXF1aXJlKFwicmFua19pdGVtXCIpO1xyXG52YXIgUm9sZUNvbnRyb2xsZXIgPSByZXF1aXJlKFwicm9sZV9jb250cm9sbGVyXCIpO1xyXG52YXIgUGxheWVySGVhZCA9IHJlcXVpcmUoXCJwbGF5ZXJoZWFkXCIpO1xyXG52YXIgVGltZVRvb2wgPSByZXF1aXJlKFwidGltZXRvb2xcIik7XHJcbnZhciBIZXJvVm8gPSByZXF1aXJlKFwiaGVyb192b1wiKTtcclxuXHJcbnZhciBSYW5rV2luZG93ID0gY2MuQ2xhc3Moe1xyXG4gICAgZXh0ZW5kczogQmFzZVZpZXcsXHJcbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5wcmVmYWJQYXRoID0gUGF0aFRvb2wuZ2V0UHJlZmFiUGF0aChcInJhbmtcIiwgXCJyYW5rX3dpbmRvd1wiKTtcclxuICAgICAgICB0aGlzLndpbl90eXBlID0gV2luVHlwZS5CaWc7XHJcbiAgICAgICAgdGhpcy52aWV3VGFnID0gU0NFTkVfVEFHLmRpYWxvZ3VlO1xyXG4gICAgICAgIHRoaXMuY3RybCA9IFJhbmtDb250cm9sbGVyLmdldEluc3RhbmNlKCk7XHJcbiAgICAgICAgdGhpcy5jdXJfdHlwZSA9IDA7XHJcbiAgICAgICAgdGhpcy5yZXNfbGlzdCA9IHt9O1xyXG4gICAgICAgIHRoaXMudGFiX2luZm9fbGlzdCA9IHt9O1xyXG4gICAgICAgIHRoaXMuZmlyc3RfbGlzdCA9IHt9O1xyXG4gICAgICAgIHRoaXMuY2xpY2tfaW5kZXggPSBhcmd1bWVudHNbMF0gfHwgMTtcclxuICAgICAgICB0aGlzLmlzX2NsdXN0ZXIgPSBhcmd1bWVudHNbMV0gfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5ub2RlX2xpc3QgPSBbXTtcclxuICAgIH0sXHJcblxyXG5cclxuICAgIG9wZW5DYWxsQmFjazogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuYmFja2dyb3VuZCA9IHRoaXMuc2Vla0NoaWxkKFwiYmFja2dyb3VuZFwiKTtcclxuICAgICAgICB0aGlzLmJhY2tncm91bmQuc2NhbGUgPSBGSVRfU0NBTEU7XHJcbiAgICAgICAgdGhpcy5tYWluX3BhbmVsID0gdGhpcy5zZWVrQ2hpbGQoXCJtYWluX2NvbnRhaW5lclwiKTtcclxuICAgICAgICB0aGlzLmNsb3NlX2J0biA9IHRoaXMuc2Vla0NoaWxkKHRoaXMubWFpbl9wYW5lbCwgXCJjbG9zZV9idG5cIik7XHJcblxyXG4gICAgICAgIHRoaXMucmFua19wYW5lbCA9IHRoaXMuc2Vla0NoaWxkKHRoaXMubWFpbl9wYW5lbCwgXCJyYW5rX3BhbmVsXCIpO1xyXG4gICAgICAgIHRoaXMubXlfcmFuayA9IHRoaXMuc2Vla0NoaWxkKHRoaXMubWFpbl9wYW5lbCwgXCJteV9yYW5rXCIpO1xyXG4gICAgICAgIHRoaXMuc2Vla0NoaWxkKHRoaXMubXlfcmFuaywgXCJ0aXRsZVwiLCBjYy5MYWJlbCkuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLmiJHnmoTmjpLlkI1cIik7XHJcblxyXG4gICAgICAgIHRoaXMucmFua19pbmRleCA9IHRoaXMuc2Vla0NoaWxkKHRoaXMubXlfcmFuaywgXCJyYW5rX2lkXCIsY2MuTGFiZWwpO1xyXG4gICAgICAgIHRoaXMuZm91cl9sYWJlbCA9IHRoaXMuc2Vla0NoaWxkKHRoaXMubXlfcmFuaywgXCJmb3VyX2xhYmVsXCIsIGNjLlJpY2hUZXh0KTtcclxuICAgICAgICB0aGlzLm15X3JhbmtfcG93ZXIgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLm15X3JhbmssIFwibXlfcmFua19wb3dlclwiLCBjYy5MYWJlbCk7XHJcblxyXG4gICAgICAgIHRoaXMubXlfaGVhZCA9IG5ldyBQbGF5ZXJIZWFkKCk7XHJcbiAgICAgICAgdGhpcy5teV9oZWFkLnNldFBhcmVudCh0aGlzLm15X3JhbmspO1xyXG4gICAgICAgIHRoaXMubXlfaGVhZC5zaG93KClcclxuICAgICAgICB0aGlzLm15X2hlYWQuc2V0UG9zaXRpb24oLTE1NSwgNjApO1xyXG4gICAgICAgIC8vIHRoaXMubXlfaGVhZC5zZXRWaXNpYmxlKGZhbHNlKTtcclxuICAgICAgICB0aGlzLm15X2hlYWQuc2V0U2NhbGUoMC45KVxyXG5cclxuICAgICAgICB0aGlzLm5vX3JhbmsgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLm15X3JhbmssIFwibm9fcmFua1wiLCBjYy5MYWJlbCk7XHJcbiAgICAgICAgdGhpcy5teV9uYW1lID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5teV9yYW5rLCBcIm15X25hbWVcIiwgY2MuTGFiZWwpO1xyXG4gICAgICAgIHRoaXMubm9fcmFuay5zdHJpbmcgPSBcIuacquS4iuamnFwiO1xyXG4gICAgICAgIHRoaXMubXlfbmFtZS5zdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgICAgICB0aGlzLnRpdGxlX2NvbiA9IHRoaXMuc2Vla0NoaWxkKHRoaXMubWFpbl9wYW5lbCwgXCJ0aXRsZV9jb25cIik7XHJcbiAgICAgICAgdmFyIHRpdGxlID0gdGhpcy5zZWVrQ2hpbGQodGhpcy50aXRsZV9jb24sIFwidGl0bGVfbGFiZWxcIiwgY2MuTGFiZWwpO1xyXG4gICAgICAgIHZhciBuYW1lID0gUmFua0NvbnN0YW50LlRpdGxlTmFtZVt0aGlzLmNsaWNrX2luZGV4XSB8fCBcIlwiO1xyXG4gICAgICAgIHRpdGxlLnN0cmluZyA9IG5hbWU7XHJcblxyXG4gICAgICAgIHRoaXMudG9wX2JnID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5tYWluX3BhbmVsLCBcInRvcF9iZ1wiLCBjYy5TcHJpdGUpO1xyXG4gICAgICAgIHRoaXMudG9wX2JnLm5vZGUuc2V0U2NhbGUoMC45LCAwLjkpO1xyXG5cclxuICAgICAgICB2YXIgcmVzX2lkID0gUGF0aFRvb2wuZ2V0QmlnQmcoXCJyYW5rXzFcIiwgbnVsbCwgXCJyYW5rXCIpO1xyXG4gICAgICAgIHRoaXMubG9hZFJlcyhyZXNfaWQsIGZ1bmN0aW9uIChzZl9vYmopIHtcclxuICAgICAgICAgICAgdGhpcy50b3BfYmcuc3ByaXRlRnJhbWUgPSBzZl9vYmo7XHJcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxyXG5cclxuICAgICAgICB0aGlzLnRvcF9jb250YWluZXIgPSB0aGlzLnNlZWtDaGlsZChcInRvcF9jb250YWluZXJcIik7XHJcbiAgICAgICAgdGhpcy50b3BfcmFua19saXN0ID0ge307Ly/pobbpg6jliY0zO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IDM7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgbGFiZWwgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLnRvcF9jb250YWluZXIsIFwibmFtZV9cIiArIGksIGNjLkxhYmVsKTtcclxuICAgICAgICAgICAgdmFyIGltZyA9IHRoaXMuc2Vla0NoaWxkKHRoaXMudG9wX2NvbnRhaW5lciwgXCJndWFuX1wiICsgaSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRvcF9yYW5rX2xpc3RbaV0gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b3BfcmFua19saXN0W2ldID0ge307XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvcF9yYW5rX2xpc3RbaV0ubGFiZWwgPSBsYWJlbDtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9wX3JhbmtfbGlzdFtpXS5pbWcgPSBpbWc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlVGl0bGUoKTtcclxuICAgIH0sXHJcblxyXG5cclxuXHJcbiAgICByZWdpc3RlckV2ZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kLm9uKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX0VORCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLmN0cmwub3BlblJhbmtWaWV3KGZhbHNlKTtcclxuICAgICAgICB9LCB0aGlzKVxyXG4gICAgICAgIHRoaXMuY2xvc2VfYnRuLm9uKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX0VORCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLmN0cmwub3BlblJhbmtWaWV3KGZhbHNlKTtcclxuICAgICAgICB9LCB0aGlzKVxyXG5cclxuICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KFJhbmtFdmVudC5SYW5rRXZlbnRfR2V0X1JhbmtfZGF0YSwgZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVSYW5rTGlzdChkYXRhKTtcclxuICAgICAgICB9LCB0aGlzKVxyXG5cclxuICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KEFyZW5hRXZlbnQuVXBkYXRlTG9vcENoYWxsZW5nZVJhbmssIGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUmFua0xpc3QoZGF0YSk7XHJcbiAgICAgICAgfSwgdGhpcylcclxuXHJcbiAgICAgICAgdGhpcy5hZGRHbG9iYWxFdmVudChSYW5rRXZlbnQuUmFua0V2ZW50X0dldF9UaW1lX2V2ZW50LCBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICBpZiAoIWRhdGEgfHwgIXRoaXMuY2xpY2tfaW5kZXgpIHJldHVyblxyXG4gICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmNsaWNrX2luZGV4IHx8IFJhbmtDb25zdGFudC5SYW5rVHlwZS5kcmFtYTtcclxuICAgICAgICAgICAgaWYgKGRhdGEudHlwZSAmJiBpbmRleCAhPSBkYXRhLnR5cGUpIHJldHVyblxyXG4gICAgICAgICAgICAvLyB2YXIgaW5mbyA9IFN5c0Vudi5nZXRJbnN0YW5jZSgpLmxvYWRSYW5rRmlsZShpbmRleCwgdGhpcy5pc19jbHVzdGVyKTtcclxuICAgICAgICAgICAgLy8gaWYgKCFpbmZvIHx8IFV0aWxzLm5leHQoaW5mbykgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5zZW5Qcm90byhpbmRleCk7XHJcbiAgICAgICAgICAgIC8vIH0gZWxzZSB7IFxyXG4gICAgICAgICAgICAvLyAgICAgaWYgKGRhdGEudGltZSAmJiBpbmZvLmRhdGEgJiYgZGF0YS50eXBlICYmIChkYXRhLnRpbWUgPT0gMCB8fCBkYXRhLnRpbWUgPT0gaW5mby50aW1lc3RhbXApICYmIGluZGV4ID09IGRhdGEudHlwZSkge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgIHRoaXMudXBkYXRlUmFua0xpc3QoaW5mby5kYXRhKTtcclxuICAgICAgICAgICAgLy8gICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VuUHJvdG8oaW5kZXgpO1xyXG4gICAgICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfSwgdGhpcylcclxuXHJcbiAgICAgICAgLy8tLeWFrOS8mmJvc3Pkvb/nlKjnmoTnm5HlkKxcclxuICAgICAgICBpZiAodGhpcy5jbGlja19pbmRleCA9PSBSYW5rQ29uc3RhbnQuUmFua1R5cGUudW5pb25fYm9zcykge1xyXG4gICAgICAgICAgICB2YXIgR3VpbGRib3NzRXZlbnQgPSByZXF1aXJlKFwiZ3VpbGRib3NzX2V2ZW50XCIpO1xyXG4gICAgICAgICAgICB2YXIgR3VpbGRib3NzQ29uc3QgPSByZXF1aXJlKFwiZ3VpbGRib3NzX2NvbnN0XCIpO1xyXG4gICAgICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KEd1aWxkYm9zc0V2ZW50LlVwZGF0ZUd1aWxkRHVuUmFuaywgZnVuY3Rpb24gKGRhdGEsIGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gR3VpbGRib3NzQ29uc3QucmFuay5yb2xlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVSYW5rTGlzdChkYXRhKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgdGhpcylcclxuICAgICAgICAgICAgdmFyIFJvbGVFdmVudCA9IHJlcXVpcmUoXCJyb2xlX2V2ZW50XCIpO1xyXG4gICAgICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KFJvbGVFdmVudC5Xb3JzaGlwT3RoZXJSb2xlLCBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgY2MubG9nKGRhdGEsdGhpcy5zZWxlY3RfaXRlbSlcclxuICAgICAgICAgICAgICAgIGlmIChkYXRhLmlkeCAhPSBudWxsICYmIHRoaXMuc2VsZWN0X2l0ZW0gIT0gbnVsbCAmJiB0aGlzLnNlbGVjdF9pdGVtLmRhdGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmlkeCA9PSB0aGlzLnNlbGVjdF9pdGVtLmRhdGEucmFuaylcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RfaXRlbS51cGRhdGVXb3JzaGlwU3RhdHVzKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIHRoaXMpXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBvcGVuUm9vdFduZDogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICBpZiAoZGF0YSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3RybC5zZW5kXzEyOTAxKHRoaXMuY2xpY2tfaW5kZXgsIHRoaXMuaXNfY2x1c3Rlcik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcclxuICAgICAgICAgICAgdmFyIHByb3RvY2FsID0ge1xyXG4gICAgICAgICAgICAgICAgYm9zc19pZDogdGhpcy5kYXRhLmJvc3NfaWQsXHJcbiAgICAgICAgICAgICAgICBzdGFydF9udW06IDEsXHJcbiAgICAgICAgICAgICAgICBlbmRfbnVtOiAxMDBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgR3VpbGRib3NzQ29uc3QgPSByZXF1aXJlKFwiZ3VpbGRib3NzX2NvbnN0XCIpO1xyXG4gICAgICAgICAgICByZXF1aXJlKFwiZ3VpbGRib3NzX2NvbnRyb2xsZXJcIikuZ2V0SW5zdGFuY2UoKS5yZXF1ZXN0R3VpbGREdW5SYW5rKEd1aWxkYm9zc0NvbnN0LnJhbmsucm9sZSwgcHJvdG9jYWwpXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvL+abtOaWsOagh+mimFxyXG4gICAgdXBkYXRlVGl0bGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdGl0bGVfbGlzdCA9IFJhbmtDb25zdGFudC5SYW5rVGl0bGVbdGhpcy5jbGlja19pbmRleF0gfHwge307XHJcbiAgICAgICAgdmFyIG51bSA9IE9iamVjdC5rZXlzKHRpdGxlX2xpc3QpLmxlbmd0aCB8fCAwO1xyXG4gICAgICAgIHZhciBwb3NfbGlzdCA9IFJhbmtDb25zdGFudC5UaXRsZVBvc1t0aGlzLmNsaWNrX2luZGV4XSB8fCB7fTtcclxuICAgICAgICB2YXIgbGluZV9wb3NfbGlzdCA9IFJhbmtDb25zdGFudC5UaXRsZUxpbmVQb3NbdGhpcy5jbGlja19pbmRleF0gfHwge307XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbnVtOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGkgIT0gbnVtKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUltYWdlKGxpbmVfcG9zX2xpc3RbaV0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIG9mZnggPSBwb3NfbGlzdFtpXSB8fCAwO1xyXG4gICAgICAgICAgICB2YXIgbGFiZWwgPSBVdGlscy5jcmVhdGVMYWJlbCgyNCwgbmV3IGNjLkNvbG9yKDB4NjgsIDB4NDUsIDB4MmEsIDB4ZmYpLCBudWxsLCBvZmZ4IC0gMzM2LCAyMzAsIFwiXCIsIHRoaXMubWFpbl9wYW5lbCwgMCwgY2MudjIoMCwgMC41KSlcclxuICAgICAgICAgICAgdmFyIHN0ciA9IHRpdGxlX2xpc3RbaV0gfHwgXCJcIjtcclxuICAgICAgICAgICAgbGFiZWwuc3RyaW5nID0gc3RyO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGVfbGlzdC5wdXNoKGxhYmVsKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGNyZWF0ZUltYWdlOiBmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgIHZhciBsaW5lX29mZnggPSB4IHx8IDA7XHJcbiAgICAgICAgdmFyIHJlcyA9IFBhdGhUb29sLmdldENvbW1vbkljb21QYXRoKFwiY29tbW9uXzEwNjlcIik7XHJcbiAgICAgICAgdmFyIGxpbmUgPSBVdGlscy5jcmVhdGVJbWFnZSh0aGlzLm1haW5fcGFuZWwsIHJlcywgbGluZV9vZmZ4IC0gMzM4LCAyMzAsIGNjLnYyKDAsIDAuNSksIHRydWUsIDEsIGZhbHNlKTtcclxuICAgICAgICB0aGlzLmxvYWRSZXMocmVzLCBmdW5jdGlvbiAoc2Zfb2JqKSB7XHJcbiAgICAgICAgICAgIGxpbmUuc3ByaXRlRnJhbWUgPSBzZl9vYmo7XHJcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxyXG4gICAgICAgIGxpbmUubm9kZS5zZXRTY2FsZSgxLCAwLjgpO1xyXG4gICAgICAgIHRoaXMubm9kZV9saXN0LnB1c2gobGluZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHVwZGF0ZVJhbmtMaXN0OiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICAgICAgdGhpcy51cGRhdGVNeURhdGEoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVJhbmtEYXRhKCk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmxpc3Rfdmlldykge1xyXG4gICAgICAgICAgICB2YXIgbGlzdF9zaXplID0gY2Muc2l6ZSg2MTAsIDUzMCk7XHJcbiAgICAgICAgICAgIHZhciBzZXR0aW5nID0ge1xyXG4gICAgICAgICAgICAgICAgaXRlbV9jbGFzczogUmFua0l0ZW0sICAgICAgLy8g5Y2V5YWD57G7XHJcbiAgICAgICAgICAgICAgICBzdGFydF94OiA1LCAgICAgICAgICAgICAgICAgICAgLy8g56ys5LiA5Liq5Y2V5YWD55qEWOi1t+eCuVxyXG4gICAgICAgICAgICAgICAgc3BhY2VfeDogMCwgICAgICAgICAgICAgICAgICAgIC8vIHjmlrnlkJHnmoTpl7TpmpRcclxuICAgICAgICAgICAgICAgIHN0YXJ0X3k6IDAsICAgICAgICAgICAgICAgICAgICAvLyDnrKzkuIDkuKrljZXlhYPnmoRZ6LW354K5XHJcbiAgICAgICAgICAgICAgICBzcGFjZV95OiAwLCAgICAgICAgICAgICAgICAgICAvLyB55pa55ZCR55qE6Ze06ZqUXHJcbiAgICAgICAgICAgICAgICBpdGVtX3dpZHRoOiA2MDAsICAgICAgICAgICAgICAgLy8g5Y2V5YWD55qE5bC65a+4d2lkdGhcclxuICAgICAgICAgICAgICAgIGl0ZW1faGVpZ2h0OiAxMjAsICAgICAgICAgICAgICAvLyDljZXlhYPnmoTlsLrlr7hoZWlnaHRcclxuICAgICAgICAgICAgICAgIHJvdzogMCwgICAgICAgICAgICAgICAgICAgICAgICAvLyDooYzmlbDvvIzkvZznlKjkuo7msLTlubPmu5rliqjnsbvlnotcclxuICAgICAgICAgICAgICAgIGNvbDogMSwgICAgICAgICAgICAgICAgICAgICAgICAvLyDliJfmlbDvvIzkvZznlKjkuo7lnoLnm7Tmu5rliqjnsbvlnotcclxuICAgICAgICAgICAgICAgIG5lZWRfZHluYW1pYzogdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubGlzdF92aWV3ID0gbmV3IENvbW1vblNjcm9sbFZpZXcoKVxyXG4gICAgICAgICAgICB0aGlzLmxpc3Rfdmlldy5jcmVhdGVTY3JvbGwodGhpcy5yYW5rX3BhbmVsLCBjYy52MigwLCAtMjgpLCBTY3JvbGxWaWV3RGlyLnZlcnRpY2FsLCBTY3JvbGxWaWV3U3RhcnRQb3MudG9wLCBsaXN0X3NpemUsIHNldHRpbmcsIGNjLnYyKDAuNSwgMC41KSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFkYXRhIHx8IFV0aWxzLm5leHQoZGF0YSkgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlblByb3RvKHRoaXMuY2xpY2tfaW5kZXgpO1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGxpc3QgPSBkYXRhLnJhbmtfbGlzdCB8fCB7fTtcclxuICAgICAgICB0aGlzLnNob3dFbXB0eUljb24oZmFsc2UpO1xyXG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA8PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0VtcHR5SWNvbih0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGNhbGxiYWNrID0gZnVuY3Rpb24gKGl0ZW0sIHZvKSB7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jbGlja19pbmRleCA9PSBSYW5rQ29uc3RhbnQuUmFua1R5cGUudW5pb25fYm9zcykge1xyXG4gICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndvcnNoaXBPdGhlclJvbGUoaXRlbSk7XHJcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxpc3Rfdmlldy5zZXREYXRhKGxpc3QsIGNhbGxiYWNrLCB7IHJhbmtfdHlwZTogdGhpcy5jbGlja19pbmRleCwgaXNfY2x1c3RlcjogdGhpcy5pc19jbHVzdGVyIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICB3b3JzaGlwT3RoZXJSb2xlOiBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgIGlmIChpdGVtLmRhdGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdF9pdGVtID0gaXRlbTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8v5pi+56S656m655m9XHJcbiAgICBzaG93RW1wdHlJY29uOiBmdW5jdGlvbiAoYm9vbCkge1xyXG4gICAgICAgIGlmICghdGhpcy5lbXB0eV9jb24gJiYgYm9vbCA9PSBmYWxzZSkgcmV0dXJuXHJcbiAgICAgICAgaWYgKCF0aGlzLmVtcHR5X2Nvbikge1xyXG4gICAgICAgICAgICB2YXIgc2l6ZSA9IGNjLnNpemUoMjAwLCAyMDApO1xyXG4gICAgICAgICAgICB0aGlzLmVtcHR5X2NvbiA9IG5ldyBjYy5Ob2RlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZW1wdHlfY29uLnNldENvbnRlbnRTaXplKHNpemUpO1xyXG4gICAgICAgICAgICB0aGlzLmVtcHR5X2Nvbi5zZXRBbmNob3JQb2ludChjYy52MigwLjUsIDAuNSkpO1xyXG4gICAgICAgICAgICB0aGlzLmVtcHR5X2Nvbi5zZXRQb3NpdGlvbihjYy52MigwLCAwKSk7XHJcbiAgICAgICAgICAgIHRoaXMubWFpbl9wYW5lbC5hZGRDaGlsZCh0aGlzLmVtcHR5X2Nvbik7XHJcbiAgICAgICAgICAgIHZhciByZXMgPSBQYXRoVG9vbC5nZXRCaWdCZyhcImJpZ2JnXzNcIik7XHJcbiAgICAgICAgICAgIHRoaXMuZW1wdHlfYmcgPSBVdGlscy5jcmVhdGVJbWFnZSh0aGlzLmVtcHR5X2NvbiwgbnVsbCwgMCwgMCwgY2MudjIoMC41LCAwLjUpLCBmYWxzZSlcclxuICAgICAgICAgICAgdGhpcy5sb2FkUmVzKHJlcywgZnVuY3Rpb24gKHNmX29iaikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbXB0eV9iZy5zcHJpdGVGcmFtZSA9IHNmX29iajtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxyXG4gICAgICAgICAgICB0aGlzLmVtcHR5X2xhYmVsID0gVXRpbHMuY3JlYXRlTGFiZWwoMjYsIG5ldyBjYy5Db2xvcigweDY4LCAweDQ1LCAweDJhLCAweGZmKSwgbnVsbCwgMCwgLTEwMCwgXCJcIiwgdGhpcy5lbXB0eV9jb24sIDAsIGNjLnYyKDAuNSwgMC41KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBzdHIgPSBVdGlscy5USTE4TihcIuW9k+WJjeaOkuihjOamnOaaguaXoOaVsOaNrlwiKTtcclxuICAgICAgICB0aGlzLmVtcHR5X2xhYmVsLnN0cmluZyA9IHN0cjtcclxuICAgICAgICB0aGlzLmVtcHR5X2Nvbi5hY3RpdmUgPSBib29sO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZW5Qcm90bzogZnVuY3Rpb24gKGluZGV4KSB7XHJcbiAgICAgICAgaWYgKGluZGV4ID09IFJhbmtDb25zdGFudC5SYW5rVHlwZS51bmlvbikge1xyXG4gICAgICAgICAgICB0aGlzLmN0cmwuc2VuZF8xMjkwMygpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT0gUmFua0NvbnN0YW50LlJhbmtUeXBlLmFyZW5hKSB7XHJcbiAgICAgICAgICAgIHZhciBBcmVuYUNvbnRyb2xsZXIgID0gcmVxdWlyZShcImFyZW5hX2NvbnRyb2xsZXJcIik7XHJcbiAgICAgICAgICAgIEFyZW5hQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLnNlbmRlcjIwMjIxKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpbmRleCA9PSBSYW5rQ29uc3RhbnQuUmFua1R5cGUuYWN0aW9uX3BhcnRuZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5jdHJsLnNlbmRfMTI5MDQoMCwgMTAwKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgbnVtID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID09IDIgfHwgaW5kZXggPT0gMyB8fCBpbmRleCA9PSA2IHx8IGluZGV4ID09IDE4KSB7XHJcbiAgICAgICAgICAgICAgICBudW0gPSAzMDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jdHJsLnNlbmRfMTI5MDAoaW5kZXgsIG51bGwsIG51bGwsIHRoaXMuaXNfY2x1c3Rlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvL+abtOaWsOiHquW3seaVsOaNrlxyXG4gICAgdXBkYXRlTXlEYXRhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRhdGEpIHJldHVyblxyXG4gICAgICAgIHZhciBkYXRhID0gdGhpcy5kYXRhO1xyXG4gICAgICAgIHZhciBzdHIgPSBcIjBcIjtcclxuICAgICAgICB2YXIgbXlfaWR4ID0gZGF0YS5teV9pZHggfHwgZGF0YS5yYW5rIHx8IDA7XHJcbiAgICAgICAgaWYgKG15X2lkeCAmJiBteV9pZHggPiAwKSB7XHJcbiAgICAgICAgICAgIHN0ciA9IG15X2lkeDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ub19yYW5rLm5vZGUuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIHJvbGVfdm8gPSBSb2xlQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldFJvbGVWbygpO1xyXG4gICAgICAgIHRoaXMucmFua19pbmRleC5zdHJpbmcgPSBzdHI7XHJcbiAgICAgICAgaWYgKG15X2lkeCAmJiBteV9pZHggPj0gMSAmJiBteV9pZHggPD0gMykge1xyXG4gICAgICAgICAgICB0aGlzLnJhbmtfaW5kZXgubm9kZS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLm15X3JhbmtfaWNvbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5teV9yYW5rX2ljb24gPSB0aGlzLnNlZWtDaGlsZCh0aGlzLm15X3JhbmssIFwibXlfcmFua19pY29uXCIsIGNjLlNwcml0ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5teV9yYW5rX2ljb24ubm9kZS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRSZXMoUGF0aFRvb2wuZ2V0Q29tbW9uSWNvbVBhdGgoXCJjb21tb25fMjAwXCIgKyBteV9pZHgpLCBmdW5jdGlvbiAoc2Zfb2JqKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm15X3JhbmtfaWNvbi5zcHJpdGVGcmFtZSA9IHNmX29iajtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxyXG4gICAgICAgICAgICB0aGlzLm15X3JhbmtfaWNvbi5ub2RlLnNldFNjYWxlKDAuNyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKG15X2lkeCA8PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vX3Jhbmsubm9kZS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yYW5rX2luZGV4Lm5vZGUuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJhbmtfaW5kZXgubm9kZS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubXlfcmFua19pY29uKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubXlfcmFua19pY29uLm5vZGUuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5teV9oZWFkLnNldEhlYWRSZXMocm9sZV92by5mYWNlX2lkKTtcclxuICAgICAgICB2YXIgbmFtZSA9IHJvbGVfdm8ubmFtZSB8fCBcIlwiO1xyXG4gICAgICAgIHRoaXMubXlfbmFtZS5zdHJpbmcgPSBuYW1lO1xyXG4gICAgICAgIHZhciBhdmF0YXJfYmlkID0gcm9sZV92by5hdmF0YXJfYmFzZV9pZDtcclxuICAgICAgICB0aGlzLm15X2hlYWQuc2V0RnJhbWVSZXMoYXZhdGFyX2JpZCk7XHJcblxyXG4gICAgICAgIHZhciBzdHIgPSBcIlwiO1xyXG4gICAgICAgIHZhciByZXMgPSBudWxsO1xyXG4gICAgICAgIC8vLSAzMTHmmK9tYWlu4oCU4oCUcGFuZWznmoR3aWR0aOS4gOWNiu+8jFxyXG4gICAgICAgIHRoaXMubXlfcmFua19wb3dlci5ub2RlLnggPSA1MTggLSAzMTE7XHJcbiAgICAgICAgdGhpcy5mb3VyX2xhYmVsLm5vZGUueCA9IDU1NSAtIDMxMTtcclxuICAgICAgICB0aGlzLmZvdXJfbGFiZWwubm9kZS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLnJ1bmVfaXRlbSlcclxuICAgICAgICAgICAgdGhpcy5ydW5lX2l0ZW0uYWN0aXZlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMubXlfcmFua19wb3dlci5zdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuZm91cl9sYWJlbC5ub2RlLnNldFBvc2l0aW9uKGNjLnYyKDQ4NSAtIDMxMSwgNTApKTtcclxuICAgICAgICBpZiAodGhpcy5jbGlja19pbmRleCA9PSBSYW5rQ29uc3RhbnQuUmFua1R5cGUucG93ZXIgfHwgdGhpcy5jbGlja19pbmRleCA9PSBSYW5rQ29uc3RhbnQuUmFua1R5cGUuYWN0aW9uX3Bvd2VyKSB7XHJcbiAgICAgICAgICAgICByZXMgPSBQYXRoVG9vbC5nZXRDb21tb25JY29tUGF0aChcImNvbW1vbl85MDAwMlwiKTtcclxuICAgICAgICAgICAgdmFyIHBvd2VyID0gZGF0YS5teV92YWwxIHx8IDA7XHJcbiAgICAgICAgICAgIHN0ciA9IGNjLmpzLmZvcm1hdFN0cihcIjxpbWcgc3JjPSclcycgLz4gJXNcIiwgXCJjb21tb25fOTAwMDJcIiwgcG93ZXIpXHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNsaWNrX2luZGV4ID09IFJhbmtDb25zdGFudC5SYW5rVHlwZS5kcmFtYSB8fCB0aGlzLmNsaWNrX2luZGV4ID09IFJhbmtDb25zdGFudC5SYW5rVHlwZS5hY3Rpb25fZHJhbWEpIHtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IGdkYXRhKFwiZHVuZ2Vvbl9kYXRhXCIsIFwiZGF0YV9kcmFtYV9kdW5nZW9uX2luZm9cIiwgW2RhdGEubXlfdmFsMV0pO1xyXG4gICAgICAgICAgICBpZiAoY29uZmlnKVxyXG4gICAgICAgICAgICAgICAgc3RyID0gY29uZmlnLm5hbWU7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNsaWNrX2luZGV4ID09IFJhbmtDb25zdGFudC5SYW5rVHlwZS51bmlvbikge1xyXG4gICAgICAgICAgICBzdHIgPSBjYy5qcy5mb3JtYXRTdHIoXCI8c2l6ZT0yMD48Y29sb3I9I2E5NWYwZj7kvJrplb/lkI3vvJolczwvYz48L3NpemU+XCIsIGRhdGEubGVhZGVyX25hbWUpO1xyXG4gICAgICAgICAgICBpZiAocm9sZV92by5naWQgPT0gMClcclxuICAgICAgICAgICAgICAgIHN0ciA9IFV0aWxzLlRJMThOKFwi5pqC5peg5YWs5LyaXCIpO1xyXG4gICAgICAgICAgICB0aGlzLm15X25hbWUuc3RyaW5nID0gcm9sZV92by5uYW1lO1xyXG4gICAgICAgICAgICB0aGlzLm15X25hbWUubm9kZS5zZXRQb3NpdGlvbihjYy52MigyMDUgLSAzMTEsIDgyKSk7XHJcbiAgICAgICAgICAgIHRoaXMubXlfaGVhZC5zZXRWaXNpYmxlKGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5mb3VyX2xhYmVsLm5vZGUuc2V0UG9zaXRpb24oY2MudjIoMjA1IC0gMzExLCA0NSkpO1xyXG4gICAgICAgICAgICB2YXIgcG93ZXIgPSBkYXRhLnBvd2VyIHx8IDA7XHJcbiAgICAgICAgICAgIGlmIChwb3dlciA8PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm15X3JhbmtfcG93ZXIuc3RyaW5nID0gXCIwXCI7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm15X3JhbmtfcG93ZXIuc3RyaW5nID0gcG93ZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5teV9yYW5rX3Bvd2VyLm5vZGUueCA9IDUyNSAtIDMwMDtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2xpY2tfaW5kZXggPT0gUmFua0NvbnN0YW50LlJhbmtUeXBlLnRvd2VyIHx8IHRoaXMuY2xpY2tfaW5kZXggPT0gUmFua0NvbnN0YW50LlJhbmtUeXBlLmFjdGlvbl90b3dlcikge1xyXG4gICAgICAgICAgICB2YXIgbnVtID0gZGF0YS5teV92YWwyIHx8IDA7XHJcbiAgICAgICAgICAgIHZhciB0aW0gPSBUaW1lVG9vbC5nZXRUaW1lTXMobnVtLCB0cnVlKTtcclxuICAgICAgICAgICAgaWYgKGRhdGEubXlfdmFsMSAmJiBkYXRhLm15X3ZhbDEgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGltID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMuZm91cl9sYWJlbC5ub2RlLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubXlfaGVhZC5zZXRWaXNpYmxlKHRydWUpO1xyXG4gICAgICAgICAgICB0aGlzLm15X25hbWUubm9kZS54ID0gMDtcclxuICAgICAgICAgICAgdGhpcy5teV9yYW5rX3Bvd2VyLnN0cmluZyA9IHRpbTtcclxuICAgICAgICAgICAgc3RyID0gZGF0YS5teV92YWwxLnRvU3RyaW5nKCkgfHwgXCJcIjtcclxuICAgICAgICAgICAgdGhpcy5teV9uYW1lLm5vZGUueSA9IDUzO1xyXG4gICAgICAgICAgICB0aGlzLmZvdXJfbGFiZWwubm9kZS5zZXRQb3NpdGlvbihjYy52Mig0MjAgLSAzMTEsIDUzKSk7XHJcbiAgICAgICAgICAgIHRoaXMubXlfcmFua19wb3dlci5ub2RlLnNldFBvc2l0aW9uKGNjLnYyKDUzMCAtIDMxMSwgNTMpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2xpY2tfaW5kZXggPT0gUmFua0NvbnN0YW50LlJhbmtUeXBlLmFyZW5hIHx8IHRoaXMuY2xpY2tfaW5kZXggPT0gUmFua0NvbnN0YW50LlJhbmtUeXBlLmFjdGlvbl9hcmVuYSkge1xyXG4gICAgICAgICAgICB2YXIgcmVzID0gUGF0aFRvb2wuZ2V0SXRlbVJlcyhcIjhcIilcclxuICAgICAgICAgICAgdmFyIHNjb3JlID0gdGhpcy5kYXRhLnNjb3JlIHx8IHRoaXMuZGF0YS5teV92YWwxIHx8IDBcclxuICAgICAgICAgICAgc3RyID0gY2MuanMuZm9ybWF0U3RyKCBcIjxpbWcgc3JjPSclcycgc2NhbGU9MC4zNSAvPiAlc1wiLDgsc2NvcmUpXHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNsaWNrX2luZGV4ID09IFJhbmtDb25zdGFudC5SYW5rVHlwZS51bmlvbl9ib3NzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm91cl9sYWJlbC5ub2RlLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZm91cl9sYWJlbC5ub2RlLnNldFBvc2l0aW9uKGNjLnYyKDQ4NSAtIDMxMSwgNTApKVxyXG4gICAgICAgICAgICB0aGlzLm15X25hbWUubm9kZS5zZXRQb3NpdGlvbihjYy52MigyNzUgLSAzMTEsIDUzKSk7XHJcbiAgICAgICAgICAgIHRoaXMubXlfcmFua19wb3dlci5ub2RlLnNldFBvc2l0aW9uKGNjLnYyKDUzMCAtIDMxMSwgNTMpKTtcclxuICAgICAgICAgICAgdGhpcy5mb3VyX2xhYmVsLnN0cmluZyA9IFN0cmluZyhkYXRhLm15ZHBzIHx8IDApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jbGlja19pbmRleCA9PSBSYW5rQ29uc3RhbnQuUmFua1R5cGUuYWN0aW9uX3N0YXIgfHwgdGhpcy5jbGlja19pbmRleCA9PSBSYW5rQ29uc3RhbnQuUmFua1R5cGUuc3Rhcl9wb3dlciApe1xyXG5cclxuICAgICAgICB9ZWxzZSBpZiAodGhpcy5jbGlja19pbmRleCA9PSBSYW5rQ29uc3RhbnQuUmFua1R5cGUuYWR2ZW50dXJlKXtcclxuICAgICAgICAgICAgc3RyID0gZGF0YS5teV92YWwxLnRvU3RyaW5nKCkgfHwgMDtcclxuICAgICAgICAgICAgdmFyIHZhbDJfc3RyID0gKGRhdGEubXlfdmFsMiAhPSAwKSAmJiBkYXRhLm15X3ZhbDIgfHwgXCJcIjtcclxuICAgICAgICAgICAgdGhpcy5teV9yYW5rX3Bvd2VyLnN0cmluZyA9IHZhbDJfc3RyO1xyXG4gICAgICAgICAgICB0aGlzLmZvdXJfbGFiZWwubm9kZS5zZXRQb3NpdGlvbihjYy52Mig0MjAtMzExLDUzKSk7XHJcbiAgICAgICAgICAgIHRoaXMubXlfcmFua19wb3dlci5ub2RlLnNldFBvc2l0aW9uKGNjLnYyKDUzMC0zMTEsNTMpKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHN0ciA9PSAwKSB7XHJcbiAgICAgICAgICAgIHN0ciA9IFwiXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZm91cl9sYWJlbC5zdHJpbmcgPSBzdHI7XHJcbiAgICAgICAgdGhpcy5sb2FkUmVzKHJlcywgKGZ1bmN0aW9uKHJlc09iamVjdCl7XHJcbiAgICAgICAgICAgIHRoaXMuZm91cl9sYWJlbC5hZGRTcHJpdGVGcmFtZShyZXNPYmplY3QpO1xyXG4gICAgICAgIH0pLmJpbmQodGhpcykpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvL+WIm+W7uuS4gOS4quiLsembhOaVsOaNrlxyXG4gICAgY3JlYXRlUGFydG5lclZvOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHZvID0gbmV3IEhlcm9WbygpO1xyXG4gICAgICAgIHZhciBkYXRhID0ge1xyXG4gICAgICAgICAgICBwYXJ0bmVyX2lkOiBzZWxmLmRhdGEucGlkLFxyXG4gICAgICAgICAgICBiaWQ6IHNlbGYuZGF0YS5wYmlkLFxyXG4gICAgICAgICAgICBsZXY6IHNlbGYuZGF0YS5wbGV2LFxyXG4gICAgICAgICAgICBzdGFyOiBzZWxmLmRhdGEucHN0YXIsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZvLnVwZGF0ZUhlcm9WbyhkYXRhKTtcclxuICAgICAgICByZXR1cm4gdm9cclxuICAgIH0sXHJcblxyXG4gICAgLy/mm7TmlrDliY3kuInlkI3lpLTlg49cclxuICAgIHVwZGF0ZVJhbmtEYXRhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRhdGEpIHJldHVyblxyXG4gICAgICAgIHZhciByYW5rX2xpc3QgPSB0aGlzLmRhdGEucmFua19saXN0IHx8IHt9O1xyXG4gICAgICAgIHZhciBjb3VudCA9IDA7XHJcbiAgICAgICAgdmFyIHNpemUgPSB0aGlzLm1haW5fcGFuZWwuZ2V0Q29udGVudFNpemUoKTtcclxuICAgICAgICBmb3IgKHZhciBpIGluIHJhbmtfbGlzdCkge1xyXG4gICAgICAgICAgICB2YXIgdiA9IHJhbmtfbGlzdFtpXTtcclxuICAgICAgICAgICAgdmFyIGlkeCA9IHYuaWR4IHx8IHYucmFuaztcclxuICAgICAgICAgICAgaWYgKGlkeCA+IDAgJiYgaWR4IDw9IDMpIHtcclxuICAgICAgICAgICAgICAgIGNvdW50ID0gY291bnQgKyAxO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmZpcnN0X2xpc3RbaWR4XSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBoZWFkID0gbmV3IFBsYXllckhlYWQoKTtcclxuICAgICAgICAgICAgICAgICAgICBoZWFkLnNob3coKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBoZWlnaHQgPSAzODA7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9mZl95ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaWR4ID09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSAtIDE3MDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gMzcwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZfeSA9IDY7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpZHggPT0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IDE3MDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gMzcwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZfeSA9IDY7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGhlYWQuc2V0UG9zaXRpb24od2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZC5zZXRQYXJlbnQodGhpcy5tYWluX3BhbmVsKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSB0aGlzLnRvcF9yYW5rX2xpc3RbY291bnRdLmxhYmVsO1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWUubm9kZS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IHRoaXMudG9wX3JhbmtfbGlzdFtjb3VudF0uaW1nO1xyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJzdF9saXN0W2lkeF0gPSB0aXRsZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcnN0X2xpc3RbaWR4XSA9IGhlYWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJzdF9saXN0W2lkeF0uaGVhZF9uYW1lID0gbmFtZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgZmFjZV9pZCA9IHYuZmFjZV9pZCB8fCB2LmZhY2UgfHwgdi5sZWFkZXJfZmFjZSB8fCAwO1xyXG4gICAgICAgICAgICAgICAgdmFyIGF2YXRhcl9iaWQgPSB2LmF2YXRhcl9pZCB8fCB2LmF2YXRhcl9iaWQgfHwgdi5sZWFkZXJfYXZhdGFyX2JpZCB8fCAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maXJzdF9saXN0W2lkeF0uc2V0RnJhbWVSZXMoYXZhdGFyX2JpZCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5maXJzdF9saXN0W2lkeF0uc2V0SGVhZFJlcyhmYWNlX2lkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RfbGlzdFtpZHhdLmFkZENhbGxCYWNrKGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJvbGVWbyA9IFJvbGVDb250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0Um9sZVZvKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJpZCA9IHYucmlkIHx8IHYubGVhZGVyX3JpZCB8fCAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzcnZfaWQgPSB2LnNydl9pZCB8fCB2LmxlYWRlcl9zcnZpZCB8fCAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyb2xlVm8ucmlkID09IHJpZCAmJiByb2xlVm8uc3J2X2lkID09IHNydl9pZCkgcmV0dXJuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZvID0geyByaWQ6IHJpZCwgc3J2X2lkOiBzcnZfaWQgfTtcclxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlKFwiY2hhdF9jb250cm9sbGVyXCIpLmdldEluc3RhbmNlKCkub3BlbkZyaWVuZEluZm8odm8pO1xyXG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMsdikpXHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSB2Lm5hbWUgfHwgXCJcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RfbGlzdFtpZHhdLmhlYWRfbmFtZS5zdHJpbmcgPSBuYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjb3VudCA+PSAzKVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5ub19sYWJlbF9saXN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMubm9fbGFiZWxfbGlzdCA9IHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSBpbiB0aGlzLm5vX2xhYmVsX2xpc3QpIHtcclxuICAgICAgICAgICAgdGhpcy5ub19sYWJlbF9saXN0W2ldLnNldFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcG9zX2xpc3QgPSB7IFsxXTogMzM2IC0gc2l6ZS53aWR0aCAvIDIsIFsyXTogMTY3IC0gc2l6ZS53aWR0aCAvIDIsIFszXTogNTA4IC0gc2l6ZS53aWR0aCAvIDIgfTtcclxuICAgICAgICBpZiAocmFua19saXN0Lmxlbmd0aCA8IDMpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHJhbmtfbGlzdC5sZW5ndGggKyAxOyBpIDw9IDM7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm5vX2xhYmVsX2xpc3RbaV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbGFiZWwgPSBVdGlscy5jcmVhdGVMYWJlbCgyNCwgbnVsbCwgbnVsbCwgcG9zX2xpc3RbaV0sIDM2MCwgVXRpbHMuVEkxOE4oXCLomZrkvY3ku6XlvoVcIiksIHRoaXMubWFpbl9wYW5lbCwgMCwgY2MudjIoMC41LCAwLjUpKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm9fbGFiZWxfbGlzdFtpXSA9IGxhYmVsLm5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub2RlX2xpc3QucHVzaChsYWJlbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudG9wX3JhbmtfbGlzdFtpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvcF9yYW5rX2xpc3RbaV0ubGFiZWwubm9kZS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b3BfcmFua19saXN0W2ldLmltZy5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vX2xhYmVsX2xpc3RbaV0uYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgY2xvc2VDYWxsQmFjazogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmxpc3Rfdmlldykge1xyXG4gICAgICAgICAgICB0aGlzLmxpc3Rfdmlldy5EZWxldGVNZSgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubGlzdF92aWV3ID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN0cmwub3BlblJhbmtWaWV3KGZhbHNlKVxyXG4gICAgICAgIGlmICh0aGlzLmVtcHR5X2Nvbikge1xyXG4gICAgICAgICAgICB0aGlzLmVtcHR5X2Nvbi5kZXN0cm95KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZW1wdHlfbGFiZWwuZGVzdHJveSgpO1xyXG4gICAgICAgICAgICB0aGlzLmVtcHR5X2JnLmRlc3Ryb3koKTtcclxuICAgICAgICAgICAgdGhpcy5lbXB0eV9jb24gPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmVtcHR5X2JnID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5lbXB0eV9sYWJlbCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm5vZGVfbGlzdCkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIHRoaXMubm9kZV9saXN0KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdiA9IHRoaXMubm9kZV9saXN0W2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKHYgaW5zdGFuY2VvZiBjYy5Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdi5kZXN0cm95KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHYubm9kZS5kZXN0cm95KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5ub2RlX2xpc3QgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5teV9oZWFkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubXlfaGVhZC5kZWxldGVNZSgpO1xyXG4gICAgICAgICAgICB0aGlzLm15X2hlYWQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLmZpcnN0X2xpc3Qpe1xyXG4gICAgICAgICAgICBmb3IobGV0IGkgaW4gdGhpcy5maXJzdF9saXN0KXtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuZmlyc3RfbGlzdFtpXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJzdF9saXN0W2ldLmRlbGV0ZU1lKClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcnN0X2xpc3RbaV0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZmlyc3RfbGlzdCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJhbmtXaW5kb3c7Il19