(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/Scripts/mod/newfirstcharge/view/newfirstcharge_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, '91cf6N/J3pL3o29EawKrEAC', 'newfirstcharge_window'); // Scripts/mod/newfirstcharge/view/newfirstcharge_window.js "use strict"; // -------------------------------------------------------------------- // @author: xxx@syg.com(必填, 创建模块的人员) // @description: // 这里是描述这个窗体的作用的 //
Create: 2019-03-22 11:02:42 // -------------------------------------------------------------------- var PathTool = require("pathtool"); var VipController = require("vip_controller"); var NewFirstChargeEvent = require("newfirstcharge_event"); var NewfirstchargeWindow = cc.Class({ "extends": BaseView, ctor: function ctor() { this.prefabPath = PathTool.getPrefabPath("newfirstcharge", "newfirstcharge_window"); this.viewTag = SCENE_TAG.dialogue; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意 this.win_type = WinType.Big; //是否是全屏窗体 WinType.Full, WinType.Big, WinType.Mini, WinType.Tips this.ctrl = arguments[0]; this.model = this.ctrl.getModel(); }, // 初始化一些配置数据,可以用于声明一些变量之类的 initConfig: function initConfig() { this.cur_index = null; this.item_list = []; this.item_reward_list = []; for (var i = 1; i <= 3; i++) { this.item_reward_list[i] = {}; } }, // 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件 openCallBack: function openCallBack() { this.background = this.root_wnd.getChildByName("background"); this.background.scale = FIT_SCALE; this.main_container = this.root_wnd.getChildByName("main_container"); var container = this.main_container.getChildByName("container"); var bg_node = container.getChildByName("bg"); var bg = bg_node.getComponent(cc.Sprite); this.loadRes(PathTool.getBigBg("txt_cn_action_bigbg_3", null, "action"), function (resObject) { bg.spriteFrame = resObject; }.bind(this)); this.close_btn = container.getChildByName("close_btn"); this.title_img = container.getChildByName("title_img"); this.remain_charge = container.getChildByName("remain_charge").getComponent(cc.Label); this.remain_charge.string = Utils.TI18N("已累充: "); this.btn_recharge = container.getChildByName("btn"); this.btn_label = this.btn_recharge.getChildByName("label").getComponent(cc.Label); this.btn_label.string = Utils.TI18N("前往充值"); this.Sprite_2 = container.getChildByName("Sprite_2").getComponent(cc.Sprite); this.Sprite_2_0 = container.getChildByName("Sprite_2_0").getComponent(cc.Sprite); this.Sprite_2_1 = container.getChildByName("Sprite_2_1").getComponent(cc.Sprite); var icon_path = PathTool.getItemRes(3); this.loadRes(icon_path, function (res_object) { this.Sprite_2.spriteFrame = res_object; this.Sprite_2_0.spriteFrame = res_object; this.Sprite_2_1.spriteFrame = res_object; }.bind(this)); this.model.setFirstRechargeData(); for (var i = 1; i <= 3; i++) { var item = container.getChildByName("item_" + i); if (item) { var object = {}; object.scroll = item.getChildByName("scroll").getChildByName("content"); object.finish_icon = item.getChildByName("finish_icon"); object.finish_icon.active = false; object.title = item.getChildByName("title").getComponent(cc.Label); object.title.string = Utils.TI18N("第") + i + Utils.TI18N("天免费领"); object.list = {}; this.item_list[i] = object; } } this.tab_view = []; for (var i = 1; i <= 2; i++) { var tab = {}; tab.btn = container.getChildByName("btn_grade_" + i); tab.normal = tab.btn.getChildByName("normal"); tab.select = tab.btn.getChildByName("select"); tab.select.active = false; tab.title = tab.btn.getChildByName("title"); tab.title.color = new cc.Color(0xff, 0xff, 0xff, 0xff); tab.titleOutLine = tab.btn.getChildByName("title").getComponent(cc.LabelOutline); tab.titleOutLine.color = new cc.Color(0x71, 0x00, 0x42, 0xff); tab.title_barner = container.getChildByName("title_img_" + i); tab.title_barner.scale = 2; tab.title_barner.active = false; this.loadRes(PathTool.getUIIconPath("newfirstcharge", "txt_cn_newfirstcharge_" + i), function (title_barner, resObject) { title_barner.getComponent(cc.Sprite).spriteFrame = resObject; }.bind(this, tab.title_barner)); tab.index = i; this.tab_view[i] = tab; } this.tab_get_hero = {}; for (var i = 1; i <= 3; i++) { var tab = {}; tab.btn = container.getChildByName("btn_" + i); tab.title = tab.btn.getChildByName("Text_1"); tab.get = container.getChildByName("get_" + i); tab.get.active = false; tab.index = i; this.tab_get_hero[i] = tab; } }, // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent registerEvent: function registerEvent() { Utils.onTouchEnd(this.close_btn, function () { this.ctrl.openNewFirstChargeView(false); }.bind(this), 2); Utils.onTouchEnd(this.btn_recharge, function () { var first_data = this.model.getFirstRechargeData(this.cur_index); if (this.get_gift_id == 0) { this.ctrl.openNewFirstChargeView(false); //临时 VipController.getInstance().openVipMainWindow(true, VIPTABCONST.DAILY_GIFT); } else if (this.get_gift_id == 1) { if (first_data[this.gift_index]) { this.ctrl.sender21013(first_data[this.gift_index].id); } } else { this.ctrl.openNewFirstChargeView(false); } }.bind(this), 1); for (var i in this.tab_view) { Utils.onTouchEnd(this.tab_view[i].btn, function (v) { this.changeTabView(v.index); }.bind(this, this.tab_view[i]), 1); } for (var j in this.tab_get_hero) { Utils.onTouchEnd(this.tab_get_hero[j].btn, function (v) { if (v.index && this.updata_charge_data) { if (this.updata_charge_data.choosen_status == 1) { var list = [20501, 30506, 10505]; var role_data = Config.partner_data.data_partner_base[list[v.index - 1]]; if (role_data) { var str = cc.js.formatStr(Utils.TI18N("是否确定选择 %s 作为奖励?\n 确定后其它英雄将不可领取"), role_data.name); var CommonAlert = require("commonalert"); CommonAlert.show(str, Utils.TI18N("确定"), function () { this.ctrl.sender21014(v.index); }.bind(this), Utils.TI18N("取消")); } } else { this.ctrl.sender21014(v.index); } } }.bind(this, this.tab_get_hero[j]), 1); } this.addGlobalEvent(NewFirstChargeEvent.New_First_Charge_Event, function (data) { this.updata_charge_data = data; if (data.choosen_status != null && data.has_choosen_id != null) { this.getChooseHeroStatus(data.choosen_status, data.has_choosen_id); } var RoleController = require("role_controller"); var role_vo = RoleController.getInstance().getRoleVo(); var totle_str = cc.js.formatStr(Utils.TI18N("已累充: %d"), Math.floor(role_vo.vip_exp * 0.1)); this.remain_charge.string = totle_str; this.setRedPointTab(); this.updateData(data); }.bind(this)); }, // 红点 setRedPointTab: function setRedPointTab() { var status_1 = false; for (var i = 1; i <= 3; i++) { var get_data = this.model.getFirstBtnStatus(i); if (get_data) { if (get_data == 1) { status_1 = true; break; } } } Utils.addRedPointToNodeByStatus(this.tab_view[1].btn, status_1); var status_2 = false; for (var i = 4; i <= 6; i++) { var get_data = this.model.getFirstBtnStatus(i); if (get_data) { if (get_data == 1) { status_2 = true; break; } } } Utils.addRedPointToNodeByStatus(this.tab_view[2].btn, status_2); }, changeTabView: function changeTabView(index) { index = index || 0; if (this.cur_index == index) return; if (this.tab_index != null) { this.tab_index.normal.active = true; this.tab_index.select.active = false; this.tab_index.titleOutLine.color = new cc.Color(0x71, 0x00, 0x42, 0xff); this.tab_index.title_barner.active = false; } this.tab_index = this.tab_view[index]; if (this.tab_index != null) { this.tab_index.normal.active = false; this.tab_index.select.active = true; this.tab_index.titleOutLine.color = new cc.Color(0xc4, 0x5a, 0x14, 0xff); this.tab_index.title_barner.active = true; } this.cur_index = index; var first_data = this.model.getFirstRechargeData(index); this.fillItemList(first_data); if (this.updata_charge_data) { this.updateData(this.updata_charge_data); } }, fillItemList: function fillItemList(list) { var scale = 0.8; var size = 119 * scale; var create_index = 1; for (var i = 0; i < list.length; i++) { var object = this.item_list[i + 1]; var num = list[i].item_list.length; object.scroll.setContentSize(cc.size(size * num, object.scroll.getContentSize().height)); for (var k = 0; k < num; k++) { var _x = size * (k + 1) - size * 0.5; var _y = size * 0.5; if (!this.item_reward_list[i + 1][k]) { this.item_reward_list[i + 1][k] = ItemsPool.getInstance().getItem("backpack_item"); this.item_reward_list[i + 1][k].setParent(object.scroll); this.item_reward_list[i + 1][k].setExtendData({ scale: scale, is_show_tips: true }); this.item_reward_list[i + 1][k].show(); } if (this.item_reward_list[i + 1][k]) { this.item_reward_list[i + 1][k].setPosition(_x, _y); this.item_reward_list[i + 1][k].setData({ bid: list[i].item_list[k][0], num: list[i].item_list[k][1] }); cc.log(list[i], "list[i]"); } create_index = create_index + 1; } } }, // 选择英雄按钮 getChooseHeroStatus: function getChooseHeroStatus(status, choose_id) { for (var i = 1; i <= 3; i++) { if (status == 0) { this.tab_get_hero[i].get.active = false; this.tab_get_hero[i].btn.active = true; this.tab_get_hero[i].btn.getComponent(cc.Button).interactable = false; this.tab_get_hero[i].btn.getComponent(cc.Button).enableAutoGrayEffect = true; this.tab_get_hero[i].title.color = new cc.Color(0xff, 0xff, 0xff, 0xff); } else if (status == 1) { this.tab_get_hero[i].get.active = false; this.tab_get_hero[i].btn.active = true; this.tab_get_hero[i].btn.getComponent(cc.Button).interactable = true; this.tab_get_hero[i].btn.getComponent(cc.Button).enableAutoGrayEffect = false; this.tab_get_hero[i].title.color = new cc.Color(0x25, 0x55, 0x05, 0xff); } else if (status == 2) { this.tab_get_hero[i].btn.active = false; if (i == choose_id) { this.tab_get_hero[i].get.active = true; } } } }, updateData: function updateData(data) { if (data == null) return; var status_list = [[1, 2, 3], [4, 5, 6]]; var charge_list = []; for (var i in status_list[this.cur_index - 1]) { var status = this.model.getFirstBtnStatus(status_list[this.cur_index - 1][i]); charge_list[i] = status; this.item_list[parseInt(i) + 1].finish_icon.active = status == 2; } this.gift_index = 0; //领取的位置 var totle = 0; this.get_gift_id = 10; for (var i in charge_list) { totle = totle + charge_list[i]; if (charge_list[i] == 1) { this.get_gift_id = 1; this.gift_index = i; } } if (totle == 0) { this.get_gift_id = 0; this.btn_label.string = Utils.TI18N("前往充值"); } else if (totle == 1 || totle == 3 || totle == 5) { this.btn_label.string = Utils.TI18N("领取奖励"); } else if (totle == 2 || totle == 4) { this.btn_label.string = Utils.TI18N("明日再来"); } else if (totle == 6) { this.btn_label.string = Utils.TI18N("领取完毕"); } }, // 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了 openRootWnd: function openRootWnd(index) { index = index || 1; this.changeTabView(index); this.ctrl.sender21012(); }, // 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象 closeCallBack: function closeCallBack() { for (var i = 1; i <= 3; i++) { for (var j in this.item_reward_list[i]) { this.item_reward_list[i][j].deleteMe(); } this.item_reward_list[i] = null; } this.item_reward_list = []; this.ctrl.openNewFirstChargeView(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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxuZXdmaXJzdGNoYXJnZVxcdmlld1xcbmV3Zmlyc3RjaGFyZ2Vfd2luZG93LmpzIl0sIm5hbWVzIjpbIlBhdGhUb29sIiwicmVxdWlyZSIsIlZpcENvbnRyb2xsZXIiLCJOZXdGaXJzdENoYXJnZUV2ZW50IiwiTmV3Zmlyc3RjaGFyZ2VXaW5kb3ciLCJjYyIsIkNsYXNzIiwiQmFzZVZpZXciLCJjdG9yIiwicHJlZmFiUGF0aCIsImdldFByZWZhYlBhdGgiLCJ2aWV3VGFnIiwiU0NFTkVfVEFHIiwiZGlhbG9ndWUiLCJ3aW5fdHlwZSIsIldpblR5cGUiLCJCaWciLCJjdHJsIiwiYXJndW1lbnRzIiwibW9kZWwiLCJnZXRNb2RlbCIsImluaXRDb25maWciLCJjdXJfaW5kZXgiLCJpdGVtX2xpc3QiLCJpdGVtX3Jld2FyZF9saXN0IiwiaSIsIm9wZW5DYWxsQmFjayIsImJhY2tncm91bmQiLCJyb290X3duZCIsImdldENoaWxkQnlOYW1lIiwic2NhbGUiLCJGSVRfU0NBTEUiLCJtYWluX2NvbnRhaW5lciIsImNvbnRhaW5lciIsImJnX25vZGUiLCJiZyIsImdldENvbXBvbmVudCIsIlNwcml0ZSIsImxvYWRSZXMiLCJnZXRCaWdCZyIsInJlc09iamVjdCIsInNwcml0ZUZyYW1lIiwiYmluZCIsImNsb3NlX2J0biIsInRpdGxlX2ltZyIsInJlbWFpbl9jaGFyZ2UiLCJMYWJlbCIsInN0cmluZyIsIlV0aWxzIiwiVEkxOE4iLCJidG5fcmVjaGFyZ2UiLCJidG5fbGFiZWwiLCJTcHJpdGVfMiIsIlNwcml0ZV8yXzAiLCJTcHJpdGVfMl8xIiwiaWNvbl9wYXRoIiwiZ2V0SXRlbVJlcyIsInJlc19vYmplY3QiLCJzZXRGaXJzdFJlY2hhcmdlRGF0YSIsIml0ZW0iLCJvYmplY3QiLCJzY3JvbGwiLCJmaW5pc2hfaWNvbiIsImFjdGl2ZSIsInRpdGxlIiwibGlzdCIsInRhYl92aWV3IiwidGFiIiwiYnRuIiwibm9ybWFsIiwic2VsZWN0IiwiY29sb3IiLCJDb2xvciIsInRpdGxlT3V0TGluZSIsIkxhYmVsT3V0bGluZSIsInRpdGxlX2Jhcm5lciIsImdldFVJSWNvblBhdGgiLCJpbmRleCIsInRhYl9nZXRfaGVybyIsImdldCIsInJlZ2lzdGVyRXZlbnQiLCJvblRvdWNoRW5kIiwib3Blbk5ld0ZpcnN0Q2hhcmdlVmlldyIsImZpcnN0X2RhdGEiLCJnZXRGaXJzdFJlY2hhcmdlRGF0YSIsImdldF9naWZ0X2lkIiwiZ2V0SW5zdGFuY2UiLCJvcGVuVmlwTWFpbldpbmRvdyIsIlZJUFRBQkNPTlNUIiwiREFJTFlfR0lGVCIsImdpZnRfaW5kZXgiLCJzZW5kZXIyMTAxMyIsImlkIiwidiIsImNoYW5nZVRhYlZpZXciLCJqIiwidXBkYXRhX2NoYXJnZV9kYXRhIiwiY2hvb3Nlbl9zdGF0dXMiLCJyb2xlX2RhdGEiLCJDb25maWciLCJwYXJ0bmVyX2RhdGEiLCJkYXRhX3BhcnRuZXJfYmFzZSIsInN0ciIsImpzIiwiZm9ybWF0U3RyIiwibmFtZSIsIkNvbW1vbkFsZXJ0Iiwic2hvdyIsInNlbmRlcjIxMDE0IiwiYWRkR2xvYmFsRXZlbnQiLCJOZXdfRmlyc3RfQ2hhcmdlX0V2ZW50IiwiZGF0YSIsImhhc19jaG9vc2VuX2lkIiwiZ2V0Q2hvb3NlSGVyb1N0YXR1cyIsIlJvbGVDb250cm9sbGVyIiwicm9sZV92byIsImdldFJvbGVWbyIsInRvdGxlX3N0ciIsIk1hdGgiLCJmbG9vciIsInZpcF9leHAiLCJzZXRSZWRQb2ludFRhYiIsInVwZGF0ZURhdGEiLCJzdGF0dXNfMSIsImdldF9kYXRhIiwiZ2V0Rmlyc3RCdG5TdGF0dXMiLCJhZGRSZWRQb2ludFRvTm9kZUJ5U3RhdHVzIiwic3RhdHVzXzIiLCJ0YWJfaW5kZXgiLCJmaWxsSXRlbUxpc3QiLCJzaXplIiwiY3JlYXRlX2luZGV4IiwibGVuZ3RoIiwibnVtIiwic2V0Q29udGVudFNpemUiLCJnZXRDb250ZW50U2l6ZSIsImhlaWdodCIsImsiLCJfeCIsIl95IiwiSXRlbXNQb29sIiwiZ2V0SXRlbSIsInNldFBhcmVudCIsInNldEV4dGVuZERhdGEiLCJpc19zaG93X3RpcHMiLCJzZXRQb3NpdGlvbiIsInNldERhdGEiLCJiaWQiLCJsb2ciLCJzdGF0dXMiLCJjaG9vc2VfaWQiLCJCdXR0b24iLCJpbnRlcmFjdGFibGUiLCJlbmFibGVBdXRvR3JheUVmZmVjdCIsInN0YXR1c19saXN0IiwiY2hhcmdlX2xpc3QiLCJwYXJzZUludCIsInRvdGxlIiwib3BlblJvb3RXbmQiLCJzZW5kZXIyMTAxMiIsImNsb3NlQ2FsbEJhY2siLCJkZWxldGVNZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxRQUFRLEdBQUdDLE9BQU8sQ0FBQyxVQUFELENBQXRCOztBQUNBLElBQUlDLGFBQWEsR0FBR0QsT0FBTyxDQUFDLGdCQUFELENBQTNCOztBQUNBLElBQUlFLG1CQUFtQixHQUFHRixPQUFPLENBQUMsc0JBQUQsQ0FBakM7O0FBRUEsSUFBSUcsb0JBQW9CLEdBQUdDLEVBQUUsQ0FBQ0MsS0FBSCxDQUFTO0FBQ2hDLGFBQVNDLFFBRHVCO0FBRWhDQyxFQUFBQSxJQUFJLEVBQUUsZ0JBQVk7QUFDZCxTQUFLQyxVQUFMLEdBQWtCVCxRQUFRLENBQUNVLGFBQVQsQ0FBdUIsZ0JBQXZCLEVBQXlDLHVCQUF6QyxDQUFsQjtBQUNBLFNBQUtDLE9BQUwsR0FBZUMsU0FBUyxDQUFDQyxRQUF6QixDQUZjLENBRW9DOztBQUNsRCxTQUFLQyxRQUFMLEdBQWdCQyxPQUFPLENBQUNDLEdBQXhCLENBSGMsQ0FHNkI7O0FBQzNDLFNBQUtDLElBQUwsR0FBWUMsU0FBUyxDQUFDLENBQUQsQ0FBckI7QUFDQSxTQUFLQyxLQUFMLEdBQWEsS0FBS0YsSUFBTCxDQUFVRyxRQUFWLEVBQWI7QUFDSCxHQVIrQjtBQVVoQztBQUNBQyxFQUFBQSxVQUFVLEVBQUMsc0JBQVU7QUFDakIsU0FBS0MsU0FBTCxHQUFpQixJQUFqQjtBQUNBLFNBQUtDLFNB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LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEBhdXRob3I6IHh4eEBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgIOi/memHjOaYr+aPj+i/sOi/meS4queql+S9k+eahOS9nOeUqOeahFxuLy8gPGJyLz5DcmVhdGU6IDIwMTktMDMtMjIgMTE6MDI6NDJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgUGF0aFRvb2wgPSByZXF1aXJlKFwicGF0aHRvb2xcIik7XG52YXIgVmlwQ29udHJvbGxlciA9IHJlcXVpcmUoXCJ2aXBfY29udHJvbGxlclwiKTtcbnZhciBOZXdGaXJzdENoYXJnZUV2ZW50ID0gcmVxdWlyZShcIm5ld2ZpcnN0Y2hhcmdlX2V2ZW50XCIpO1xuXG52YXIgTmV3Zmlyc3RjaGFyZ2VXaW5kb3cgPSBjYy5DbGFzcyh7XG4gICAgZXh0ZW5kczogQmFzZVZpZXcsXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnByZWZhYlBhdGggPSBQYXRoVG9vbC5nZXRQcmVmYWJQYXRoKFwibmV3Zmlyc3RjaGFyZ2VcIiwgXCJuZXdmaXJzdGNoYXJnZV93aW5kb3dcIik7XG4gICAgICAgIHRoaXMudmlld1RhZyA9IFNDRU5FX1RBRy5kaWFsb2d1ZTsgICAgICAgICAgICAgICAgLy/or6XnqpfkvZPmiYDlsZ51aeWxgue6pyzlhajlsY91aemcgOimgeWcqHVp5bGCLOmdnuWFqOWxj3Vp5ZyoZGlhbG9ndWXlsYIs6L+Z5Liq6KaB5rOo5oSPXG4gICAgICAgIHRoaXMud2luX3R5cGUgPSBXaW5UeXBlLkJpZzsgICAgICAgICAgICAgICAvL+aYr+WQpuaYr+WFqOWxj+eql+S9kyAgV2luVHlwZS5GdWxsLCBXaW5UeXBlLkJpZywgV2luVHlwZS5NaW5pLCBXaW5UeXBlLlRpcHNcbiAgICAgICAgdGhpcy5jdHJsID0gYXJndW1lbnRzWzBdO1xuICAgICAgICB0aGlzLm1vZGVsID0gdGhpcy5jdHJsLmdldE1vZGVsKCk7XG4gICAgfSxcblxuICAgIC8vIOWIneWni+WMluS4gOS6m+mFjee9ruaVsOaNrizlj6/ku6XnlKjkuo7lo7DmmI7kuIDkupvlj5jph4/kuYvnsbvnmoRcbiAgICBpbml0Q29uZmlnOmZ1bmN0aW9uKCl7XG4gICAgICAgIHRoaXMuY3VyX2luZGV4ID0gbnVsbDtcbiAgICAgICAgdGhpcy5pdGVtX2xpc3QgPSBbXTtcbiAgICAgICAgdGhpcy5pdGVtX3Jld2FyZF9saXN0ID0gW107XG4gICAgICAgIGZvcih2YXIgaSA9IDE7aTw9MztpKyspe1xuICAgICAgICAgICAgdGhpcy5pdGVtX3Jld2FyZF9saXN0W2ldID0ge307XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g6aKE5Yi25L2T5Yqg6L295a6M5oiQ5LmL5ZCO55qE5Zue6LCDLOWPr+S7peWcqOi/memHjOaNleiOt+ebuOWFs+iKgueCueaIluiAhee7hOS7tlxuICAgIG9wZW5DYWxsQmFjazpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLmJhY2tncm91bmQgPSB0aGlzLnJvb3Rfd25kLmdldENoaWxkQnlOYW1lKFwiYmFja2dyb3VuZFwiKTtcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kLnNjYWxlID0gRklUX1NDQUxFO1xuICAgICAgICB0aGlzLm1haW5fY29udGFpbmVyID0gdGhpcy5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcIm1haW5fY29udGFpbmVyXCIpO1xuICAgICAgICB2YXIgY29udGFpbmVyID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImNvbnRhaW5lclwiKTtcbiAgICAgICAgdmFyIGJnX25vZGUgPSBjb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJiZ1wiKTtcbiAgICAgICAgdmFyIGJnID0gYmdfbm9kZS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKTtcbiAgICAgICAgdGhpcy5sb2FkUmVzKFBhdGhUb29sLmdldEJpZ0JnKFwidHh0X2NuX2FjdGlvbl9iaWdiZ18zXCIsbnVsbCxcImFjdGlvblwiKSwgKGZ1bmN0aW9uKHJlc09iamVjdCl7XG4gICAgICAgICAgICBiZy5zcHJpdGVGcmFtZSA9IHJlc09iamVjdDtcbiAgICAgICAgfSkuYmluZCh0aGlzKSk7XG4gICAgXG4gICAgICAgIHRoaXMuY2xvc2VfYnRuID0gY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiY2xvc2VfYnRuXCIpO1xuICAgICAgICB0aGlzLnRpdGxlX2ltZyA9IGNvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcInRpdGxlX2ltZ1wiKTtcbiAgICAgICAgdGhpcy5yZW1haW5fY2hhcmdlID0gY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwicmVtYWluX2NoYXJnZVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuICAgICAgICB0aGlzLnJlbWFpbl9jaGFyZ2Uuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLlt7LntK/lhYU6IFwiKTtcbiAgICBcbiAgICAgICAgdGhpcy5idG5fcmVjaGFyZ2UgPSBjb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJidG5cIik7XG4gICAgICAgIHRoaXMuYnRuX2xhYmVsID0gdGhpcy5idG5fcmVjaGFyZ2UuZ2V0Q2hpbGRCeU5hbWUoXCJsYWJlbFwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuICAgICAgICB0aGlzLmJ0bl9sYWJlbC5zdHJpbmcgPSBVdGlscy5USTE4TihcIuWJjeW+gOWFheWAvFwiKTtcblxuICAgICAgICB0aGlzLlNwcml0ZV8yID0gY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiU3ByaXRlXzJcIikuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSk7XG4gICAgICAgIHRoaXMuU3ByaXRlXzJfMCA9IGNvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcIlNwcml0ZV8yXzBcIikuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSk7XG4gICAgICAgIHRoaXMuU3ByaXRlXzJfMSA9IGNvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcIlNwcml0ZV8yXzFcIikuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSk7XG4gICAgICAgIHZhciBpY29uX3BhdGggPSBQYXRoVG9vbC5nZXRJdGVtUmVzKDMpO1xuICAgICAgICB0aGlzLmxvYWRSZXMoaWNvbl9wYXRoLCBmdW5jdGlvbihyZXNfb2JqZWN0KXtcbiAgICAgICAgICAgIHRoaXMuU3ByaXRlXzIuc3ByaXRlRnJhbWUgPSByZXNfb2JqZWN0O1xuICAgICAgICAgICAgdGhpcy5TcHJpdGVfMl8wLnNwcml0ZUZyYW1lID0gcmVzX29iamVjdDtcbiAgICAgICAgICAgIHRoaXMuU3ByaXRlXzJfMS5zcHJpdGVGcmFtZSA9IHJlc19vYmplY3Q7XG4gICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIFxuXG4gICAgICAgIHRoaXMubW9kZWwuc2V0Rmlyc3RSZWNoYXJnZURhdGEoKTtcblxuICAgICAgICBmb3IodmFyIGkgPSAxO2k8PTM7aSsrKXtcbiAgICAgICAgICAgIHZhciBpdGVtID0gY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiaXRlbV9cIitpKTtcbiAgICAgICAgICAgIGlmKGl0ZW0pe1xuICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSB7fVxuICAgICAgICAgICAgICAgIG9iamVjdC5zY3JvbGwgPSBpdGVtLmdldENoaWxkQnlOYW1lKFwic2Nyb2xsXCIpLmdldENoaWxkQnlOYW1lKFwiY29udGVudFwiKTtcbiAgICAgICAgICAgICAgICBvYmplY3QuZmluaXNoX2ljb24gPSBpdGVtLmdldENoaWxkQnlOYW1lKFwiZmluaXNoX2ljb25cIilcbiAgICAgICAgICAgICAgICBvYmplY3QuZmluaXNoX2ljb24uYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgb2JqZWN0LnRpdGxlID0gaXRlbS5nZXRDaGlsZEJ5TmFtZShcInRpdGxlXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XG4gICAgICAgICAgICAgICAgb2JqZWN0LnRpdGxlLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi56ysXCIpK2krVXRpbHMuVEkxOE4oXCLlpKnlhY3otLnpooZcIik7XG4gICAgICAgICAgICAgICAgb2JqZWN0Lmxpc3QgPSB7fVxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbV9saXN0W2ldID0gb2JqZWN0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50YWJfdmlldyA9IFtdO1xuICAgICAgICBmb3IodmFyIGkgPSAxO2k8PTI7aSsrKXtcbiAgICAgICAgICAgIHZhciB0YWIgPSB7fVxuICAgICAgICAgICAgdGFiLmJ0biA9IGNvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImJ0bl9ncmFkZV9cIitpKTtcbiAgICAgICAgICAgIHRhYi5ub3JtYWwgPSB0YWIuYnRuLmdldENoaWxkQnlOYW1lKFwibm9ybWFsXCIpO1xuICAgICAgICAgICAgdGFiLnNlbGVjdCA9IHRhYi5idG4uZ2V0Q2hpbGRCeU5hbWUoXCJzZWxlY3RcIik7XG4gICAgICAgICAgICB0YWIuc2VsZWN0LmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGFiLnRpdGxlID0gdGFiLmJ0bi5nZXRDaGlsZEJ5TmFtZShcInRpdGxlXCIpXG4gICAgICAgICAgICB0YWIudGl0bGUuY29sb3IgPSBuZXcgY2MuQ29sb3IoMHhmZiwweGZmLDB4ZmYsMHhmZik7XG4gICAgICAgICAgICB0YWIudGl0bGVPdXRMaW5lID0gdGFiLmJ0bi5nZXRDaGlsZEJ5TmFtZShcInRpdGxlXCIpLmdldENvbXBvbmVudChjYy5MYWJlbE91dGxpbmUpO1xuICAgICAgICAgICAgdGFiLnRpdGxlT3V0TGluZS5jb2xvciA9IG5ldyBjYy5Db2xvcigweDcxLDB4MDAsMHg0MiwweGZmKTtcbiAgICAgICAgICAgIHRhYi50aXRsZV9iYXJuZXIgPSBjb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJ0aXRsZV9pbWdfXCIraSk7XG4gICAgICAgICAgICB0YWIudGl0bGVfYmFybmVyLnNjYWxlID0gMjtcbiAgICAgICAgICAgIHRhYi50aXRsZV9iYXJuZXIuYWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHRoaXMubG9hZFJlcyhQYXRoVG9vbC5nZXRVSUljb25QYXRoKFwibmV3Zmlyc3RjaGFyZ2VcIixcInR4dF9jbl9uZXdmaXJzdGNoYXJnZV9cIitpKSwgKGZ1bmN0aW9uKHRpdGxlX2Jhcm5lcixyZXNPYmplY3Qpe1xuICAgICAgICAgICAgICAgIHRpdGxlX2Jhcm5lci5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHJlc09iamVjdDtcbiAgICAgICAgICAgIH0pLmJpbmQodGhpcyx0YWIudGl0bGVfYmFybmVyKSk7XG5cbiAgICAgICAgICAgIHRhYi5pbmRleCA9IGk7XG4gICAgICAgICAgICB0aGlzLnRhYl92aWV3W2ldID0gdGFiXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRhYl9nZXRfaGVybyA9IHt9XG4gICAgICAgIGZvcih2YXIgaSA9IDE7aTw9MztpKyspe1xuICAgICAgICAgICAgdmFyIHRhYiA9IHt9XG4gICAgICAgICAgICB0YWIuYnRuID0gY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiYnRuX1wiK2kpO1xuICAgICAgICAgICAgdGFiLnRpdGxlID0gdGFiLmJ0bi5nZXRDaGlsZEJ5TmFtZShcIlRleHRfMVwiKTtcbiAgICAgICAgICAgIHRhYi5nZXQgPSBjb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJnZXRfXCIraSlcbiAgICAgICAgICAgIHRhYi5nZXQuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB0YWIuaW5kZXggPSBpO1xuICAgICAgICAgICAgdGhpcy50YWJfZ2V0X2hlcm9baV0gPSB0YWJcbiAgICAgICAgfVxuXG4gICAgfSxcblxuICAgIC8vIOazqOWGjOS6i+S7tuebkeWQrOeahOaOpeWPoyzkuI3pnIDopoHmiYvliqjosIPnlKgs5aaC5p6c5piv5L2/55SoZ2NvcmUuR2xvYmFsRXZlbnTnm5HlkKws5Y+v5Lul55u05o6l6LCD55SoYWRkR2xvYmFsRXZlbnRcbiAgICByZWdpc3RlckV2ZW50OmZ1bmN0aW9uKCl7XG4gICAgICAgIFV0aWxzLm9uVG91Y2hFbmQodGhpcy5jbG9zZV9idG4sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuY3RybC5vcGVuTmV3Rmlyc3RDaGFyZ2VWaWV3KGZhbHNlKTtcbiAgICAgICAgfS5iaW5kKHRoaXMpLCAyKTtcblxuICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMuYnRuX3JlY2hhcmdlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZmlyc3RfZGF0YSA9IHRoaXMubW9kZWwuZ2V0Rmlyc3RSZWNoYXJnZURhdGEodGhpcy5jdXJfaW5kZXgpO1xuICAgICAgICAgICAgaWYodGhpcy5nZXRfZ2lmdF9pZCA9PSAwKXtcbiAgICAgICAgICAgICAgICB0aGlzLmN0cmwub3Blbk5ld0ZpcnN0Q2hhcmdlVmlldyhmYWxzZSk7Ly/kuLTml7ZcbiAgICAgICAgICAgICAgICBWaXBDb250cm9sbGVyLmdldEluc3RhbmNlKCkub3BlblZpcE1haW5XaW5kb3codHJ1ZSwgVklQVEFCQ09OU1QuREFJTFlfR0lGVClcbiAgICAgICAgICAgIH1lbHNlIGlmKHRoaXMuZ2V0X2dpZnRfaWQgPT0gMSl7XG4gICAgICAgICAgICAgICAgaWYoZmlyc3RfZGF0YVt0aGlzLmdpZnRfaW5kZXhdKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHJsLnNlbmRlcjIxMDEzKGZpcnN0X2RhdGFbdGhpcy5naWZ0X2luZGV4XS5pZClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICB0aGlzLmN0cmwub3Blbk5ld0ZpcnN0Q2hhcmdlVmlldyhmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0uYmluZCh0aGlzKSwgMSk7XG5cbiAgICAgICAgZm9yKHZhciBpIGluIHRoaXMudGFiX3ZpZXcpe1xuICAgICAgICAgICAgVXRpbHMub25Ub3VjaEVuZCh0aGlzLnRhYl92aWV3W2ldLmJ0biwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVRhYlZpZXcodi5pbmRleClcbiAgICAgICAgICAgIH0uYmluZCh0aGlzLHRoaXMudGFiX3ZpZXdbaV0pLCAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcih2YXIgaiBpbiB0aGlzLnRhYl9nZXRfaGVybyl7XG4gICAgICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMudGFiX2dldF9oZXJvW2pdLmJ0biwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZih2LmluZGV4ICYmIHRoaXMudXBkYXRhX2NoYXJnZV9kYXRhKXtcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy51cGRhdGFfY2hhcmdlX2RhdGEuY2hvb3Nlbl9zdGF0dXMgPT0gMSl7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IFsyMDUwMSwzMDUwNiwxMDUwNV07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm9sZV9kYXRhID0gQ29uZmlnLnBhcnRuZXJfZGF0YS5kYXRhX3BhcnRuZXJfYmFzZVtsaXN0W3YuaW5kZXgtMV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocm9sZV9kYXRhKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyID0gY2MuanMuZm9ybWF0U3RyKFV0aWxzLlRJMThOKFwiPGNvbG9yPSM2NDMyMjM+5piv5ZCm56Gu5a6a6YCJ5oupPC9jb2xvcj4gPGNvbG9yPSNiYzNmMGUgZm9udHNpemU9MjY+JXM8L2NvbG9yPiA8Y29sb3I9IzY0MzIyMz7kvZzkuLrlpZblirHvvJ9cXG48L2NvbG9yPiA8Y29sb3I9IzY0MzIyMz4gIOehruWumuWQjuWFtuWug+iLsembhOWwhuS4jeWPr+mihuWPljwvY29sb3I+XCIpLHJvbGVfZGF0YS5uYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBDb21tb25BbGVydCA9IHJlcXVpcmUoXCJjb21tb25hbGVydFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tb25BbGVydC5zaG93KHN0cixVdGlscy5USTE4TihcIuehruWumlwiKSxmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0cmwuc2VuZGVyMjEwMTQodi5pbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFV0aWxzLlRJMThOKFwi5Y+W5raIXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3RybC5zZW5kZXIyMTAxNCh2LmluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0uYmluZCh0aGlzLHRoaXMudGFiX2dldF9oZXJvW2pdKSwgMSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KE5ld0ZpcnN0Q2hhcmdlRXZlbnQuTmV3X0ZpcnN0X0NoYXJnZV9FdmVudCxmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgICAgIHRoaXMudXBkYXRhX2NoYXJnZV9kYXRhID0gZGF0YTtcbiAgICAgICAgICAgIGlmKGRhdGEuY2hvb3Nlbl9zdGF0dXMhPW51bGwgJiYgZGF0YS5oYXNfY2hvb3Nlbl9pZCE9bnVsbCl7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRDaG9vc2VIZXJvU3RhdHVzKGRhdGEuY2hvb3Nlbl9zdGF0dXMsIGRhdGEuaGFzX2Nob29zZW5faWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgUm9sZUNvbnRyb2xsZXIgPSByZXF1aXJlKFwicm9sZV9jb250cm9sbGVyXCIpO1xuICAgICAgICAgICAgdmFyIHJvbGVfdm8gPSBSb2xlQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldFJvbGVWbygpO1xuICAgICAgICAgICAgdmFyIHRvdGxlX3N0ciA9IGNjLmpzLmZvcm1hdFN0cihVdGlscy5USTE4TihcIuW3sue0r+WFhTogJWRcIiksTWF0aC5mbG9vcihyb2xlX3ZvLnZpcF9leHAqMC4xKSlcbiAgICAgICAgICAgIHRoaXMucmVtYWluX2NoYXJnZS5zdHJpbmcgPSB0b3RsZV9zdHI7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuc2V0UmVkUG9pbnRUYWIoKVxuICAgICAgICAgICAgdGhpcy51cGRhdGVEYXRhKGRhdGEpO1xuICAgICAgICB9LmJpbmQodGhpcykpO1xuXG4gICAgfSxcblxuICAgIC8vIOe6oueCuVxuICAgIHNldFJlZFBvaW50VGFiOmZ1bmN0aW9uKCl7XG4gICAgICAgIHZhciBzdGF0dXNfMSA9IGZhbHNlO1xuICAgICAgICBmb3IodmFyIGkgPSAxO2k8PTM7aSsrKXtcbiAgICAgICAgICAgIHZhciBnZXRfZGF0YSA9IHRoaXMubW9kZWwuZ2V0Rmlyc3RCdG5TdGF0dXMoaSk7XG4gICAgICAgICAgICBpZihnZXRfZGF0YSl7XG4gICAgICAgICAgICAgICAgaWYoZ2V0X2RhdGEgPT0gMSl7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1c18xID0gdHJ1ZTtcblx0XHRcdFx0ICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBVdGlscy5hZGRSZWRQb2ludFRvTm9kZUJ5U3RhdHVzKHRoaXMudGFiX3ZpZXdbMV0uYnRuLHN0YXR1c18xKVxuICAgICAgICB2YXIgc3RhdHVzXzIgPSBmYWxzZTtcbiAgICAgICAgZm9yKHZhciBpID0gNDtpPD02O2krKyl7XG4gICAgICAgICAgICB2YXIgZ2V0X2RhdGEgPSB0aGlzLm1vZGVsLmdldEZpcnN0QnRuU3RhdHVzKGkpO1xuICAgICAgICAgICAgaWYoZ2V0X2RhdGEpe1xuICAgICAgICAgICAgICAgIGlmKGdldF9kYXRhID09IDEpe1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXNfMiA9IHRydWU7XG5cdFx0XHRcdCAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgVXRpbHMuYWRkUmVkUG9pbnRUb05vZGVCeVN0YXR1cyh0aGlzLnRhYl92aWV3WzJdLmJ0bixzdGF0dXNfMilcbiAgICB9LFxuXG4gICAgY2hhbmdlVGFiVmlldzpmdW5jdGlvbihpbmRleCl7XG4gICAgICAgIGluZGV4ID0gaW5kZXggfHwgMDtcbiAgICAgICAgaWYodGhpcy5jdXJfaW5kZXggPT0gaW5kZXgpcmV0dXJuO1xuICAgICAgICBpZih0aGlzLnRhYl9pbmRleCE9bnVsbCl7XG4gICAgICAgICAgICB0aGlzLnRhYl9pbmRleC5ub3JtYWwuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMudGFiX2luZGV4LnNlbGVjdC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudGFiX2luZGV4LnRpdGxlT3V0TGluZS5jb2xvciA9IG5ldyBjYy5Db2xvcigweDcxLDB4MDAsMHg0MiwweGZmKTtcbiAgICAgICAgICAgIHRoaXMudGFiX2luZGV4LnRpdGxlX2Jhcm5lci5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRhYl9pbmRleCA9IHRoaXMudGFiX3ZpZXdbaW5kZXhdXG4gICAgICAgIGlmKHRoaXMudGFiX2luZGV4IT1udWxsKXtcbiAgICAgICAgICAgIHRoaXMudGFiX2luZGV4Lm5vcm1hbC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudGFiX2luZGV4LnNlbGVjdC5hY3RpdmUgPSB0cnVlXG4gICAgICAgICAgICB0aGlzLnRhYl9pbmRleC50aXRsZU91dExpbmUuY29sb3IgPSBuZXcgY2MuQ29sb3IoMHhjNCwweDVhLDB4MTQsMHhmZik7XG4gICAgICAgICAgICB0aGlzLnRhYl9pbmRleC50aXRsZV9iYXJuZXIuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY3VyX2luZGV4ID0gaW5kZXg7XG4gICAgICAgIHZhciBmaXJzdF9kYXRhID0gdGhpcy5tb2RlbC5nZXRGaXJzdFJlY2hhcmdlRGF0YShpbmRleCk7XG4gICAgICAgIHRoaXMuZmlsbEl0ZW1MaXN0KGZpcnN0X2RhdGEpO1xuICAgICAgICBcbiAgICAgICAgaWYodGhpcy51cGRhdGFfY2hhcmdlX2RhdGEpe1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEYXRhKHRoaXMudXBkYXRhX2NoYXJnZV9kYXRhKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBmaWxsSXRlbUxpc3Q6ZnVuY3Rpb24obGlzdCl7XG4gICAgICAgIHZhciBzY2FsZSA9IDAuODtcbiAgICAgICAgdmFyIHNpemUgPSAxMTkgKiBzY2FsZTtcbiAgICAgICAgdmFyIGNyZWF0ZV9pbmRleCA9IDE7XG4gICAgICAgIGZvcih2YXIgaT0wO2k8bGlzdC5sZW5ndGg7aSsrKXtcbiAgICAgICAgICAgIHZhciBvYmplY3QgPSB0aGlzLml0ZW1fbGlzdFtpKzFdO1xuICAgICAgICAgICAgdmFyIG51bSA9IGxpc3RbaV0uaXRlbV9saXN0Lmxlbmd0aDtcbiAgICAgICAgICAgIG9iamVjdC5zY3JvbGwuc2V0Q29udGVudFNpemUoY2Muc2l6ZShzaXplKm51bSwgb2JqZWN0LnNjcm9sbC5nZXRDb250ZW50U2l6ZSgpLmhlaWdodCkpO1xuICAgICAgICAgICAgZm9yKHZhciBrPTA7azxudW07aysrKXtcbiAgICAgICAgICAgICAgICB2YXIgX3ggPSBzaXplICogKGsrMSkgLSBzaXplICogMC41O1xuICAgICAgICAgICAgICAgIHZhciBfeSA9IHNpemUgKiAwLjU7XG4gICAgICAgICAgICAgICAgaWYoIXRoaXMuaXRlbV9yZXdhcmRfbGlzdFtpKzFdW2tdKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtX3Jld2FyZF9saXN0W2krMV1ba10gPSBJdGVtc1Bvb2wuZ2V0SW5zdGFuY2UoKS5nZXRJdGVtKFwiYmFja3BhY2tfaXRlbVwiKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtX3Jld2FyZF9saXN0W2krMV1ba10uc2V0UGFyZW50KG9iamVjdC5zY3JvbGwpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1fcmV3YXJkX2xpc3RbaSsxXVtrXS5zZXRFeHRlbmREYXRhKHtzY2FsZTogc2NhbGUsaXNfc2hvd190aXBzOnRydWV9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtX3Jld2FyZF9saXN0W2krMV1ba10uc2hvdygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZih0aGlzLml0ZW1fcmV3YXJkX2xpc3RbaSsxXVtrXSl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbV9yZXdhcmRfbGlzdFtpKzFdW2tdLnNldFBvc2l0aW9uKF94LCBfeSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtX3Jld2FyZF9saXN0W2krMV1ba10uc2V0RGF0YSh7YmlkOmxpc3RbaV0uaXRlbV9saXN0W2tdWzBdLG51bTpsaXN0W2ldLml0ZW1fbGlzdFtrXVsxXX0pXG4gICAgICAgICAgICAgICAgICAgIGNjLmxvZyhsaXN0W2ldLFwibGlzdFtpXVwiKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNyZWF0ZV9pbmRleCA9IGNyZWF0ZV9pbmRleCArIDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDpgInmi6noi7Hpm4TmjInpkq5cbiAgICBnZXRDaG9vc2VIZXJvU3RhdHVzOmZ1bmN0aW9uKHN0YXR1cywgY2hvb3NlX2lkKXtcbiAgICAgICAgZm9yKHZhciBpID0gMTtpPD0zO2krKyl7XG4gICAgICAgICAgICBpZihzdGF0dXMgPT0gMCl7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJfZ2V0X2hlcm9baV0uZ2V0LmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMudGFiX2dldF9oZXJvW2ldLmJ0bi5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMudGFiX2dldF9oZXJvW2ldLmJ0bi5nZXRDb21wb25lbnQoY2MuQnV0dG9uKS5pbnRlcmFjdGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYl9nZXRfaGVyb1tpXS5idG4uZ2V0Q29tcG9uZW50KGNjLkJ1dHRvbikuZW5hYmxlQXV0b0dyYXlFZmZlY3QgPSB0cnVlOyAgICBcbiAgICAgICAgICAgICAgICB0aGlzLnRhYl9nZXRfaGVyb1tpXS50aXRsZS5jb2xvciA9IG5ldyBjYy5Db2xvcigweGZmLDB4ZmYsMHhmZiwweGZmKTtcbiAgICAgICAgICAgIH1lbHNlIGlmKHN0YXR1cyA9PSAxKXtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYl9nZXRfaGVyb1tpXS5nZXQuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJfZ2V0X2hlcm9baV0uYnRuLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJfZ2V0X2hlcm9baV0uYnRuLmdldENvbXBvbmVudChjYy5CdXR0b24pLmludGVyYWN0YWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJfZ2V0X2hlcm9baV0uYnRuLmdldENvbXBvbmVudChjYy5CdXR0b24pLmVuYWJsZUF1dG9HcmF5RWZmZWN0ID0gZmFsc2U7ICAgIFxuICAgICAgICAgICAgICAgIHRoaXMudGFiX2dldF9oZXJvW2ldLnRpdGxlLmNvbG9yID0gbmV3IGNjLkNvbG9yKDB4MjUsMHg1NSwweDA1LDB4ZmYpOyAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1lbHNlIGlmKHN0YXR1cyA9PSAyKXtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYl9nZXRfaGVyb1tpXS5idG4uYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYoaSA9PSBjaG9vc2VfaWQpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYl9nZXRfaGVyb1tpXS5nZXQuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBkYXRlRGF0YTpmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgaWYoZGF0YSA9PSBudWxsKXJldHVybjtcbiAgICAgICAgdmFyIHN0YXR1c19saXN0ID0gW1sxLDIsM10sWzQsNSw2XV07XG4gICAgICAgIHZhciBjaGFyZ2VfbGlzdCA9IFtdO1xuICAgICAgICBmb3IodmFyIGkgaW4gc3RhdHVzX2xpc3RbdGhpcy5jdXJfaW5kZXgtMV0pe1xuICAgICAgICAgICAgdmFyIHN0YXR1cyA9IHRoaXMubW9kZWwuZ2V0Rmlyc3RCdG5TdGF0dXMoc3RhdHVzX2xpc3RbdGhpcy5jdXJfaW5kZXgtMV1baV0pO1xuICAgICAgICAgICAgY2hhcmdlX2xpc3RbaV0gPSBzdGF0dXM7XG4gICAgICAgICAgICB0aGlzLml0ZW1fbGlzdFtwYXJzZUludChpKSsxXS5maW5pc2hfaWNvbi5hY3RpdmUgPSBzdGF0dXM9PTI7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdpZnRfaW5kZXggPSAwIC8v6aKG5Y+W55qE5L2N572uXG4gICAgICAgIHZhciB0b3RsZSA9IDA7XG4gICAgICAgIHRoaXMuZ2V0X2dpZnRfaWQgPSAxMDtcbiAgICAgICAgZm9yKHZhciBpIGluIGNoYXJnZV9saXN0KXtcbiAgICAgICAgICAgIHRvdGxlID0gdG90bGUgKyBjaGFyZ2VfbGlzdFtpXTtcbiAgICAgICAgICAgIGlmKGNoYXJnZV9saXN0W2ldID09IDEpe1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0X2dpZnRfaWQgPSAxO1xuXHRcdFx0ICAgIHRoaXMuZ2lmdF9pbmRleCA9IGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYodG90bGUgPT0gMCl7XG4gICAgICAgICAgICB0aGlzLmdldF9naWZ0X2lkID0gMDtcblx0XHQgICAgdGhpcy5idG5fbGFiZWwuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLliY3lvoDlhYXlgLxcIik7XG4gICAgICAgIH1lbHNlIGlmKHRvdGxlID09IDEgfHwgdG90bGUgPT0gMyB8fCB0b3RsZSA9PSA1KXtcbiAgICAgICAgICAgIHRoaXMuYnRuX2xhYmVsLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi6aKG5Y+W5aWW5YqxXCIpO1xuICAgICAgICB9ZWxzZSBpZih0b3RsZSA9PSAyIHx8IHRvdGxlID09IDQpe1xuICAgICAgICAgICAgdGhpcy5idG5fbGFiZWwuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLmmI7ml6Xlho3mnaVcIik7XG4gICAgICAgIH1lbHNlIGlmKHRvdGxlID09IDYpe1xuICAgICAgICAgICAgdGhpcy5idG5fbGFiZWwuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLpooblj5blrozmr5VcIik7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g6aKE5Yi25L2T5Yqg6L295a6M5oiQ5LmL5ZCOLOa3u+WKoOWIsOWvueW6lOS4u+iKgueCueS5i+WQjueahOWbnuiwgyzkuZ/lsLHmmK/kuIDkuKrnqpfkvZPnmoTmraPlvI/lhaXlj6Ms5Y+v5Lul6K6+572u5LiA5Lqb5pWw5o2u5LqGXG4gICAgb3BlblJvb3RXbmQ6ZnVuY3Rpb24oaW5kZXgpe1xuICAgICAgICBpbmRleCA9IGluZGV4IHx8IDE7XG4gICAgICAgIHRoaXMuY2hhbmdlVGFiVmlldyhpbmRleCk7XG4gICAgICAgIHRoaXMuY3RybC5zZW5kZXIyMTAxMigpO1xuICAgIH0sXG5cbiAgICAvLyDlhbPpl63nqpfkvZPlm57osIMs6ZyA6KaB5Zyo6L+Z6YeM6LCD55So6K+l56qX5L2T5omA5bGeY29udHJvbGxlcueahGNsb3Nl5pa55rOV5rKh55So5LqO572u56m66K+l56qX5L2T5a6e5L6L5a+56LGhXG4gICAgY2xvc2VDYWxsQmFjazpmdW5jdGlvbigpe1xuICAgICAgICBmb3IodmFyIGk9IDE7aTw9MztpKyspe1xuICAgICAgICAgICAgZm9yKHZhciBqIGluIHRoaXMuaXRlbV9yZXdhcmRfbGlzdFtpXSl7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtX3Jld2FyZF9saXN0W2ldW2pdLmRlbGV0ZU1lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLml0ZW1fcmV3YXJkX2xpc3RbaV0gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pdGVtX3Jld2FyZF9saXN0ID0gW107XG5cdCAgICB0aGlzLmN0cmwub3Blbk5ld0ZpcnN0Q2hhcmdlVmlldyhmYWxzZSk7XG4gICAgfSxcbn0pIl19