(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/Scripts/mod/task/view/task_panel.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, '99ea796jU5N6oPNC6Sqe62d', 'task_panel'); // Scripts/mod/task/view/task_panel.js "use strict"; // -------------------------------------------------------------------- // @author: shiraho@syg.com(必填, 创建模块的人员) // @description: // 日常主界面的任务标签页 //
Create: new Date().toISOString() // -------------------------------------------------------------------- var PathTool = require("pathtool"); var TaskController = require("task_controller"); var TaskEvent = require("task_event"); var TaskConst = require("task_const"); var RoleEvent = require("role_event"); var RoleController = require("role_controller"); var CommonScrollView = require("common_scrollview"); var TaskItem = require("task_item"); var TaskPanel = cc.Class({ "extends": BasePanel, ctor: function ctor() { this.prefabPath = PathTool.getPrefabPath("task", "task_panel"); this.box_list = [109, 108, 108, 110]; this.ctrl = TaskController.getInstance(); this.model = this.ctrl.getModel(); this.role_vo = RoleController.getInstance().getRoleVo(); this.is_new = null; this.need_update = null; }, initPanel: function initPanel() { this.container = this.root_wnd.getChildByName("container"); var activity_container = this.container.getChildByName("activity_container"); this.progress = activity_container.getChildByName("progress_container").getChildByName("progress").getComponent(cc.ProgressBar); this.value = activity_container.getChildByName("value").getComponent(cc.Label); this.value.string = "0/100"; this.awards_list = []; for (var i = 1; i <= Config.activity_data.data_get_length; i++) { var awards = activity_container.getChildByName("awards_" + i); if (awards != null) { awards.effect_container = awards.getChildByName("effect_container"); awards.effect_container.skeleton = awards.effect_container.getComponent(sp.Skeleton); awards.target_value = awards.getChildByName("target_value").getComponent(cc.Label); awards.is_show_tips = true; awards.status = TaskConst.action_status.normal; if (gdata("activity_data", "data_get", [i]) != null) { awards.config = gdata("activity_data", "data_get", [i]); awards.target_value.string = awards.config.activity; } //按照配置的活跃度储存 this.awards_list[i] = awards; } } this.quest_container = this.container.getChildByName("quest_container"); var size = this.quest_container.getContentSize(); var scroll_view_size = cc.size(size.width, size.height - 20); var setting = { item_class: TaskItem, // 单元类 start_x: 6, // 第一个单元的X起点 space_x: 0, // x方向的间隔 start_y: 0, // 第一个单元的Y起点 space_y: 2, // y方向的间隔 item_width: 610, // 单元的尺寸width item_height: 148, // 单元的尺寸height row: 0, // 行数,作用于水平滚动类型 col: 1, // 列数,作用于垂直滚动类型 need_dynamic: true }; this.item_scrollview = new CommonScrollView(); this.item_scrollview.createScroll(this.quest_container, cc.v2(0, 0), ScrollViewDir.vertical, ScrollViewStartPos.top, scroll_view_size, setting, cc.v2(0.5, 0.5)); this.updateTaskList(this.is_new); this.updateActivity(this.need_update); }, addToParent: function addToParent(status) { // this.handleDynamicEvent(status); // this.setVisible(status); if (this.root_wnd == null) this.active_value = status;else this.root_wnd.active = status; if (status == true) { this.ctrl.requestActivityInfo(); //设置当前面板的时候做一次协议请求 this.updateTaskList(true); this.updateActivity(false); } }, handleDynamicEvent: function handleDynamicEvent(status) { if (!status) { if (this.role_assets_event != null) { if (this.role_vo != null) { this.role_vo.unbind(this.role_assets_event); } this.role_assets_event = null; } if (this.update_activity_event != null) { gcore.GlobalEvent.unbind(this.update_activity_event); this.update_activity_event = null; } if (this.update_task_list != null) { gcore.GlobalEvent.unbind(this.update_task_list); this.update_task_list = null; } } else {} }, //必要添加的一个位置方法 setPosition: function setPosition(x, y) { this.x = x; this.y = y; if (this.root_wnd) { this.root_wnd.setPosition(this.x, this.y); } }, //必要添加的显隐方法 setVisible: function setVisible(bool) { if (this.root_wnd) { this.root_wnd.active = bool; } }, registerEvent: function registerEvent() { for (var k in this.awards_list) { var awards = this.awards_list[k]; awards.on(cc.Node.EventType.TOUCH_END, function (event) { var sender = event.currentTarget; if (sender.config != null) { if (sender.is_show_tips == true) { var CommonAlert = require("commonalert"); CommonAlert.showItemApply(Utils.TI18N("当前活跃度奖励"), sender.config.rewards, null, Utils.TI18N("确定"), null, null, Utils.TI18N("奖励"), null, null, true, null, null, { off_y: 50 }); } else { if (this.role_vo && this.role_vo.activity >= sender.config.activity) this.ctrl.requestGetActivityAwards(sender.config.activity); } } }.bind(this)); } if (this.role_vo != null) { if (this.role_assets_event == null) { this.role_assets_event = this.role_vo.bind(EventId.UPDATE_ROLE_ATTRIBUTE, function (key, value) { if (key == "activity") this.updateActivity(true); }.bind(this)); } } if (this.update_activity_event == null) { this.update_activity_event = gcore.GlobalEvent.bind(TaskEvent.UpdateActivityInfo, function (data) { this.updateActivityData(data); }.bind(this)); } if (this.update_task_list == null) { this.update_task_list = gcore.GlobalEvent.bind(TaskEvent.UpdateTaskList, function (is_new) { this.updateTaskList(is_new); }.bind(this)); } this.ctrl.requestActivityInfo(); }, updateActivity: function updateActivity(need_update) { this.need_update = need_update; if (this.root_wnd == null) return; if (this.role_vo != null) { var activity_config = gdata("activity_data", "data_get", [Config.activity_data.data_get_length]); var max_activity = 100; if (activity_config != null) max_activity = activity_config.activity; this.value.string = this.role_vo.activity + "/" + max_activity; this.progress.progress = this.role_vo.activity / max_activity; if (need_update == true) this.updateActivityData(this.model.getActivityData()); } }, // @desc:更新活跃宝箱 // author:{author} // time:2018-05-22 16:02:57 // --@data: // return updateActivityData: function updateActivityData(data) { if (this.role_vo == null) return; var data_list = data; //判断这个活跃度的宝箱是否已经领取了 var check_activity = function check_activity(activity) { if (data_list == null) return false; return data_list[activity]; }; for (var i in this.awards_list) { var item = this.awards_list[i]; if (item && item.config && item.effect_container) { if (check_activity(item.config.activity) == true) { item.is_show_tips = true; item.status = TaskConst.action_status.finish; } else { if (item.config.activity <= this.role_vo.activity) { item.is_show_tips = false; item.status = TaskConst.action_status.activity; } else { item.is_show_tips = true; item.status = TaskConst.action_status.un_activity; } } var box_action = PlayerAction.action_1; if (item.status == TaskConst.action_status.finish) box_action = PlayerAction.action_3;else if (item.status == TaskConst.action_status.activity) box_action = PlayerAction.action_2; if (item.effect_container.skeleton.skeletonData) { if (item.box_action != box_action) { item.effect_container.skeleton.setAnimation(0, box_action, true); item.box_action = box_action; } } else { var res_id = gdata("effect_data", "data_effect_info", this.box_list[i - 1]); var path = cc.js.formatStr("spine/%s/action.atlas", res_id); var _skeleton = item.effect_container.skeleton; this.createEffect(_skeleton, path, box_action); } } } }, //生成宝箱 createEffect: function createEffect(_skeleton, path, box_action) { this.loadRes(path, function (res) { _skeleton.skeletonData = res; _skeleton.setAnimation(0, box_action, true); }.bind(this)); }, // @desc:更新任务列表,是否需要重新更新列表 // author:{author} // time:2018-05-22 19:11:28 // --@is_new:如果为true,则重新排序吧,否则就直接更新位置 // return updateTaskList: function updateTaskList(is_new) { this.is_new = is_new; if (this.root_wnd == null) return; // if (is_new == true) { var list = this.model.getTaskList(); this.item_scrollview.setData(list); // } else { // var sort_func = Utils.tableLowerSorter(["finish_sort", "id"]); // this.item_scrollview.resetPosition(sort_func); // } }, onDelete: function onDelete() { if (this.role_assets_event != null) { if (this.role_vo != null) { this.role_vo.unbind(this.role_assets_event); } this.role_assets_event = null; } if (this.update_activity_event != null) { gcore.GlobalEvent.unbind(this.update_activity_event); this.update_activity_event = null; } if (this.update_task_list != null) { gcore.GlobalEvent.unbind(this.update_task_list); this.update_task_list = null; } if (this.item_scrollview) { this.item_scrollview.deleteMe(); this.item_scrollview = null; } } }); module.exports = TaskPanel; 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFx0YXNrXFx2aWV3XFx0YXNrX3BhbmVsLmpzIl0sIm5hbWVzIjpbIlBhdGhUb29sIiwicmVxdWlyZSIsIlRhc2tDb250cm9sbGVyIiwiVGFza0V2ZW50IiwiVGFza0NvbnN0IiwiUm9sZUV2ZW50IiwiUm9sZUNvbnRyb2xsZXIiLCJDb21tb25TY3JvbGxWaWV3IiwiVGFza0l0ZW0iLCJUYXNrUGFuZWwiLCJjYyIsIkNsYXNzIiwiQmFzZVBhbmVsIiwiY3RvciIsInByZWZhYlBhdGgiLCJnZXRQcmVmYWJQYXRoIiwiYm94X2xpc3QiLCJjdHJsIiwiZ2V0SW5zdGFuY2UiLCJtb2RlbCIsImdldE1vZGVsIiwicm9sZV92byIsImdldFJvbGVWbyIsImlzX25ldyIsIm5lZWRfdXBkYXRlIiwiaW5pdFBhbmVsIiwiY29udGFpbmVyIiwicm9vdF93bmQiLCJnZXRDaGlsZEJ5TmFtZSIsImFjdGl2aXR5X2NvbnRhaW5lciIsInByb2dyZXNzIiwiZ2V0Q29tcG9uZW50IiwiUHJvZ3Jlc3NCYXIiLCJ2YWx1ZSIsIkxhYmVsIiwic3RyaW5nIiwiYXdhcmRzX2xpc3QiLCJpIiwiQ29uZmlnIiwiYWN0aXZpdHlfZGF0YSIsImRhdGFfZ2V0X2xlbmd0aCIsImF3YXJkcyIsImVmZmVjdF9jb250YWluZXIiLCJza2VsZXRvbiIsInNwIiwiU2tlbGV0b24iLCJ0YXJnZXRfdmFsdWUiLCJpc19zaG93X3RpcHMiLCJzdGF0dXMiLCJhY3Rpb25fc3RhdHVzIiwibm9ybWFsIiwiZ2RhdGEiLCJjb25maWciLCJhY3Rpdml0eSIsInF1ZXN0X2NvbnRhaW5lciIsInNpemUiLCJnZXRDb250ZW50U2l6ZSIsInNjcm9sbF92aWV3X3NpemUiLCJ3aWR0aCIsImhlaWdodCIsInNldHRpbmciLCJpdGVtX2NsYXNzIiwic3RhcnRfeCIsInNwYWNlX3giLCJzdGFydF95Iiwic3BhY2VfeSIsIml0ZW1fd2lkdGgiLCJpdGVtX2hlaWdodCIsInJvdyIsImNvbCIsIm5lZWRfZHluYW1pYyIsIml0ZW1fc2Nyb2xsdmlldyIsImNyZWF0ZVNjcm9sbCIsInYyIiwiU2Nyb2xsVmlld0RpciIsInZlcnRpY2FsIiwiU2Nyb2xsVmlld1N0YXJ0UG9zIiwidG9wIiwidXBkYXRlVGFza0xpc3QiLCJ1cGRhdGVBY3Rpdml0eSIsImFkZFRvUGFyZW50IiwiYWN0aXZlX3ZhbHVlIiwiYWN0aXZlIiwicmVxdWVzdEFjdGl2aXR5SW5mbyIsImhhbmRsZUR5bmFtaWNFdmVudCIsInJvbGVfYXNzZXRzX2V2ZW50IiwidW5iaW5kIiwidXBkYXRlX2FjdGl2aXR5X2V2ZW50IiwiZ2NvcmUiLCJHbG9iYWxFdmVudCIsInVwZGF0ZV90YXNrX2xpc3QiLCJzZXRQb3NpdGlvbiIsIngiLCJ5Iiwic2V0VmlzaWJsZSIsImJvb2wiLCJyZWdpc3RlckV2ZW50IiwiayIsIm9uIiwiTm9kZSIsIkV2ZW50VHlwZSIsIlRPVUNIX0VORCIsImV2ZW50Iiwic2VuZGVyIiwiY3VycmVudFRhcmdldCIsIkNvbW1vbkFsZXJ0Iiwic2hvd0l0ZW1BcHBseSIsIlV0aWxzIiwiVEkxOE4iLCJyZXdhcmRzIiwib2ZmX3kiLCJyZXF1ZXN0R2V0QWN0aXZpdHlBd2FyZHMiLCJiaW5kIiwiRXZlbnRJZCIsIlVQREFURV9ST0xFX0FUVFJJQlVURSIsImtleSIsIlVwZGF0ZUFjdGl2aXR5SW5mbyIsImRhdGEiLCJ1cGRhdGVBY3Rpdml0eURhdGEiLCJVcGRhdGVUYXNrTGlzdCIsImFjdGl2aXR5X2NvbmZpZyIsIm1heF9hY3Rpdml0eSIsImdldEFjdGl2aXR5RGF0YSIsImRhdGFfbGlzdCIsImNoZWNrX2FjdGl2aXR5IiwiaXRlbSIsImZpbmlzaCIsInVuX2FjdGl2aXR5IiwiYm94X2FjdGlvbiIsIlBsYXllckFjdGlvbiIsImFjdGlvbl8xIiwiYWN0aW9uXzMiLCJhY3Rpb25fMiIsInNrZWxldG9uRGF0YSIsInNldEFuaW1hdGlvbiIsInJlc19pZCIsInBhdGgiLCJqcyIsImZvcm1hdFN0ciIsIl9za2VsZXRvbiIsImNyZWF0ZUVmZmVjdCIsImxvYWRSZXMiLCJyZXMiLCJsaXN0IiwiZ2V0VGFza0xpc3QiLCJzZXREYXRhIiwib25EZWxldGUiLCJkZWxldGVNZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsSUFBSUEsUUFBUSxHQUFHQyxPQUFPLENBQUMsVUFBRCxDQUF0Qjs7QUFDQSxJQUFJQyxjQUFjLEdBQUdELE9BQU8sQ0FBQyxpQkFBRCxDQUE1Qjs7QUFDQSxJQUFJRSxTQUFTLEdBQUdGLE9BQU8sQ0FBQyxZQUFELENBQXZCOztBQUNBLElBQUlHLFNBQVMsR0FBR0gsT0FBTyxDQUFDLFlBQUQsQ0FBdkI7O0FBQ0EsSUFBSUksU0FBUyxHQUFHSixPQUFPLENBQUMsWUFBRCxDQUF2Qjs7QUFDQSxJQUFJSyxjQUFjLEdBQUdMLE9BQU8sQ0FBQyxpQkFBRCxDQUE1Qjs7QUFDQSxJQUFJTSxnQkFBZ0IsR0FBR04sT0FBTyxDQUFDLG1CQUFELENBQTlCOztBQUNBLElBQUlPLFFBQVEsR0FBR1AsT0FBTyxDQUFDLFdBQUQsQ0FBdEI7O0FBRUEsSUFBSVEsU0FBUyxHQUFHQyxFQUFFLENBQUNDLEtBQUgsQ0FBUztBQUNyQixhQUFTQyxTQURZO0FBRXJCQyxFQUFBQSxJQUFJLEVBQUUsZ0JBQVk7QUFDZCxTQUFLQyxVQUFMLEdBQWtCZCxRQUFRLENBQUNlLGFBQVQsQ0FBdUIsTUFBdkIsRUFBK0IsWUFBL0IsQ0FBbEI7QUFDQSxTQUFLQyxRQUFMLEdBQWdCLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLEVBQWdCLEdBQWhCLENBQWhCO0FBQ0EsU0FBS0MsSUFBTCxHQUFZZixjQUFjLENBQUNnQixXQUFmLEVBQVo7QUFDQSxTQUFLQyxLQUFMLEdBQWEsS0FBS0YsSUFBTCxDQUFVRyxRQUFWLEVBQWI7QUFDQSxTQUFLQyxPQUFMLEdBQWVmLGNBQWMsQ0FBQ1ksV0FBZixHQUE2QkksU0FBN0IsRUFBZjtBQUNBLFNB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WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4vLyBAYXV0aG9yOiBzaGlyYWhvQHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXHJcbi8vIEBkZXNjcmlwdGlvbjpcclxuLy8gICAgICDml6XluLjkuLvnlYzpnaLnmoTku7vliqHmoIfnrb7pobVcclxuLy8gPGJyLz5DcmVhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxudmFyIFBhdGhUb29sID0gcmVxdWlyZShcInBhdGh0b29sXCIpO1xyXG52YXIgVGFza0NvbnRyb2xsZXIgPSByZXF1aXJlKFwidGFza19jb250cm9sbGVyXCIpO1xyXG52YXIgVGFza0V2ZW50ID0gcmVxdWlyZShcInRhc2tfZXZlbnRcIik7XHJcbnZhciBUYXNrQ29uc3QgPSByZXF1aXJlKFwidGFza19jb25zdFwiKTtcclxudmFyIFJvbGVFdmVudCA9IHJlcXVpcmUoXCJyb2xlX2V2ZW50XCIpO1xyXG52YXIgUm9sZUNvbnRyb2xsZXIgPSByZXF1aXJlKFwicm9sZV9jb250cm9sbGVyXCIpO1xyXG52YXIgQ29tbW9uU2Nyb2xsVmlldyA9IHJlcXVpcmUoXCJjb21tb25fc2Nyb2xsdmlld1wiKTtcclxudmFyIFRhc2tJdGVtID0gcmVxdWlyZShcInRhc2tfaXRlbVwiKTtcclxuXHJcbnZhciBUYXNrUGFuZWwgPSBjYy5DbGFzcyh7XHJcbiAgICBleHRlbmRzOiBCYXNlUGFuZWwsXHJcbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5wcmVmYWJQYXRoID0gUGF0aFRvb2wuZ2V0UHJlZmFiUGF0aChcInRhc2tcIiwgXCJ0YXNrX3BhbmVsXCIpO1xyXG4gICAgICAgIHRoaXMuYm94X2xpc3QgPSBbMTA5LCAxMDgsIDEwOCwgMTEwXTtcclxuICAgICAgICB0aGlzLmN0cmwgPSBUYXNrQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpO1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSB0aGlzLmN0cmwuZ2V0TW9kZWwoKTtcclxuICAgICAgICB0aGlzLnJvbGVfdm8gPSBSb2xlQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldFJvbGVWbygpO1xyXG4gICAgICAgIHRoaXMuaXNfbmV3ID0gbnVsbDtcclxuICAgICAgICB0aGlzLm5lZWRfdXBkYXRlID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG5cclxuICAgIGluaXRQYW5lbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gdGhpcy5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcImNvbnRhaW5lclwiKTtcclxuXHJcbiAgICAgICAgdmFyIGFjdGl2aXR5X2NvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiYWN0aXZpdHlfY29udGFpbmVyXCIpO1xyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3MgPSBhY3Rpdml0eV9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJwcm9ncmVzc19jb250YWluZXJcIikuZ2V0Q2hpbGRCeU5hbWUoXCJwcm9ncmVzc1wiKS5nZXRDb21wb25lbnQoY2MuUHJvZ3Jlc3NCYXIpO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gYWN0aXZpdHlfY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwidmFsdWVcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKTtcclxuICAgICAgICB0aGlzLnZhbHVlLnN0cmluZyA9IFwiMC8xMDBcIjtcclxuXHJcbiAgICAgICAgdGhpcy5hd2FyZHNfbGlzdCA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IENvbmZpZy5hY3Rpdml0eV9kYXRhLmRhdGFfZ2V0X2xlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBhd2FyZHMgPSBhY3Rpdml0eV9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJhd2FyZHNfXCIgKyBpKTtcclxuICAgICAgICAgICAgaWYgKGF3YXJkcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FyZHMuZWZmZWN0X2NvbnRhaW5lciA9IGF3YXJkcy5nZXRDaGlsZEJ5TmFtZShcImVmZmVjdF9jb250YWluZXJcIik7XHJcbiAgICAgICAgICAgICAgICBhd2FyZHMuZWZmZWN0X2NvbnRhaW5lci5za2VsZXRvbiA9IGF3YXJkcy5lZmZlY3RfY29udGFpbmVyLmdldENvbXBvbmVudChzcC5Ta2VsZXRvbik7XHJcbiAgICAgICAgICAgICAgICBhd2FyZHMudGFyZ2V0X3ZhbHVlID0gYXdhcmRzLmdldENoaWxkQnlOYW1lKFwidGFyZ2V0X3ZhbHVlXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XHJcbiAgICAgICAgICAgICAgICBhd2FyZHMuaXNfc2hvd190aXBzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGF3YXJkcy5zdGF0dXMgPSBUYXNrQ29uc3QuYWN0aW9uX3N0YXR1cy5ub3JtYWw7XHJcbiAgICAgICAgICAgICAgICBpZiAoZ2RhdGEoXCJhY3Rpdml0eV9kYXRhXCIsIFwiZGF0YV9nZXRcIiwgW2ldKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhcmRzLmNvbmZpZyA9IGdkYXRhKFwiYWN0aXZpdHlfZGF0YVwiLCBcImRhdGFfZ2V0XCIsIFtpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhcmRzLnRhcmdldF92YWx1ZS5zdHJpbmcgPSBhd2FyZHMuY29uZmlnLmFjdGl2aXR5O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy/mjInnhafphY3nva7nmoTmtLvot4PluqblgqjlrZhcclxuICAgICAgICAgICAgICAgIHRoaXMuYXdhcmRzX2xpc3RbaV0gPSBhd2FyZHM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucXVlc3RfY29udGFpbmVyID0gdGhpcy5jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJxdWVzdF9jb250YWluZXJcIik7XHJcbiAgICAgICAgdmFyIHNpemUgPSB0aGlzLnF1ZXN0X2NvbnRhaW5lci5nZXRDb250ZW50U2l6ZSgpO1xyXG5cclxuICAgICAgICB2YXIgc2Nyb2xsX3ZpZXdfc2l6ZSA9IGNjLnNpemUoc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQgLSAyMClcclxuICAgICAgICB2YXIgc2V0dGluZyA9IHtcclxuICAgICAgICAgICAgaXRlbV9jbGFzczogVGFza0l0ZW0sICAgICAgLy8g5Y2V5YWD57G7XHJcbiAgICAgICAgICAgIHN0YXJ0X3g6IDYsICAgICAgICAgICAgICAgICAgICAvLyDnrKzkuIDkuKrljZXlhYPnmoRY6LW354K5XHJcbiAgICAgICAgICAgIHNwYWNlX3g6IDAsICAgICAgICAgICAgICAgICAgICAvLyB45pa55ZCR55qE6Ze06ZqUXHJcbiAgICAgICAgICAgIHN0YXJ0X3k6IDAsICAgICAgICAgICAgICAgICAgICAvLyDnrKzkuIDkuKrljZXlhYPnmoRZ6LW354K5XHJcbiAgICAgICAgICAgIHNwYWNlX3k6IDIsICAgICAgICAgICAgICAgICAgIC8vIHnmlrnlkJHnmoTpl7TpmpRcclxuICAgICAgICAgICAgaXRlbV93aWR0aDogNjEwLCAgICAgICAgICAgICAgIC8vIOWNleWFg+eahOWwuuWvuHdpZHRoXHJcbiAgICAgICAgICAgIGl0ZW1faGVpZ2h0OiAxNDgsICAgICAgICAgICAgICAvLyDljZXlhYPnmoTlsLrlr7hoZWlnaHRcclxuICAgICAgICAgICAgcm93OiAwLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIOihjOaVsO+8jOS9nOeUqOS6juawtOW5s+a7muWKqOexu+Wei1xyXG4gICAgICAgICAgICBjb2w6IDEsICAgICAgICAgICAgICAgICAgICAgICAgLy8g5YiX5pWw77yM5L2c55So5LqO5Z6C55u05rua5Yqo57G75Z6LXHJcbiAgICAgICAgICAgIG5lZWRfZHluYW1pYzogdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLml0ZW1fc2Nyb2xsdmlldyA9IG5ldyBDb21tb25TY3JvbGxWaWV3KClcclxuICAgICAgICB0aGlzLml0ZW1fc2Nyb2xsdmlldy5jcmVhdGVTY3JvbGwodGhpcy5xdWVzdF9jb250YWluZXIsIGNjLnYyKDAsIDApLCBTY3JvbGxWaWV3RGlyLnZlcnRpY2FsLCBTY3JvbGxWaWV3U3RhcnRQb3MudG9wLCBzY3JvbGxfdmlld19zaXplLCBzZXR0aW5nLCBjYy52MigwLjUsIDAuNSkpXHJcbiAgICAgICAgdGhpcy51cGRhdGVUYXNrTGlzdCh0aGlzLmlzX25ldyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVBY3Rpdml0eSh0aGlzLm5lZWRfdXBkYXRlKTtcclxuICAgIH0sXHJcblxyXG4gICAgYWRkVG9QYXJlbnQ6IGZ1bmN0aW9uIChzdGF0dXMpIHtcclxuICAgICAgICAvLyB0aGlzLmhhbmRsZUR5bmFtaWNFdmVudChzdGF0dXMpO1xyXG4gICAgICAgIC8vIHRoaXMuc2V0VmlzaWJsZShzdGF0dXMpO1xyXG4gICAgICAgIGlmICh0aGlzLnJvb3Rfd25kID09IG51bGwpXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlX3ZhbHVlID0gc3RhdHVzXHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLnJvb3Rfd25kLmFjdGl2ZSA9IHN0YXR1c1xyXG4gICAgICAgIGlmIChzdGF0dXMgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmN0cmwucmVxdWVzdEFjdGl2aXR5SW5mbygpOyAgICAvL+iuvue9ruW9k+WJjemdouadv+eahOaXtuWAmeWBmuS4gOasoeWNj+iuruivt+axglxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRhc2tMaXN0KHRydWUpO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUFjdGl2aXR5KGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGhhbmRsZUR5bmFtaWNFdmVudDogZnVuY3Rpb24gKHN0YXR1cykge1xyXG4gICAgICAgIGlmICghc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJvbGVfYXNzZXRzX2V2ZW50ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJvbGVfdm8gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm9sZV92by51bmJpbmQodGhpcy5yb2xlX2Fzc2V0c19ldmVudClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMucm9sZV9hc3NldHNfZXZlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnVwZGF0ZV9hY3Rpdml0eV9ldmVudCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBnY29yZS5HbG9iYWxFdmVudC51bmJpbmQodGhpcy51cGRhdGVfYWN0aXZpdHlfZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVfYWN0aXZpdHlfZXZlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnVwZGF0ZV90YXNrX2xpc3QgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQudW5iaW5kKHRoaXMudXBkYXRlX3Rhc2tfbGlzdCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZV90YXNrX2xpc3QgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvL+W/heimgea3u+WKoOeahOS4gOS4quS9jee9ruaWueazlVxyXG4gICAgc2V0UG9zaXRpb246IGZ1bmN0aW9uICh4LCB5KSB7XHJcbiAgICAgICAgdGhpcy54ID0geDtcclxuICAgICAgICB0aGlzLnkgPSB5O1xyXG4gICAgICAgIGlmICh0aGlzLnJvb3Rfd25kKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm9vdF93bmQuc2V0UG9zaXRpb24odGhpcy54LCB0aGlzLnkpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLy/lv4XopoHmt7vliqDnmoTmmL7pmpDmlrnms5VcclxuICAgIHNldFZpc2libGU6IGZ1bmN0aW9uIChib29sKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucm9vdF93bmQpIHtcclxuICAgICAgICAgICAgdGhpcy5yb290X3duZC5hY3RpdmUgPSBib29sO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgcmVnaXN0ZXJFdmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGZvciAodmFyIGsgaW4gdGhpcy5hd2FyZHNfbGlzdCkge1xyXG4gICAgICAgICAgICBjb25zdCBhd2FyZHMgPSB0aGlzLmF3YXJkc19saXN0W2tdO1xyXG4gICAgICAgICAgICBhd2FyZHMub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfRU5ELCBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzZW5kZXIgPSBldmVudC5jdXJyZW50VGFyZ2V0O1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbmRlci5jb25maWcgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZW5kZXIuaXNfc2hvd190aXBzID09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIENvbW1vbkFsZXJ0ID0gcmVxdWlyZShcImNvbW1vbmFsZXJ0XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBDb21tb25BbGVydC5zaG93SXRlbUFwcGx5KFV0aWxzLlRJMThOKFwi5b2T5YmN5rS76LeD5bqm5aWW5YqxXCIpLHNlbmRlci5jb25maWcucmV3YXJkcyxudWxsLFV0aWxzLlRJMThOKFwi56Gu5a6aXCIpLG51bGwsbnVsbCxVdGlscy5USTE4TihcIuWlluWKsVwiKSxudWxsLG51bGwsdHJ1ZSxudWxsLCBudWxsLHtvZmZfeTo1MH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucm9sZV92byAmJiB0aGlzLnJvbGVfdm8uYWN0aXZpdHkgPj0gc2VuZGVyLmNvbmZpZy5hY3Rpdml0eSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3RybC5yZXF1ZXN0R2V0QWN0aXZpdHlBd2FyZHMoc2VuZGVyLmNvbmZpZy5hY3Rpdml0eSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LmJpbmQodGhpcykpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5yb2xlX3ZvICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucm9sZV9hc3NldHNfZXZlbnQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb2xlX2Fzc2V0c19ldmVudCA9IHRoaXMucm9sZV92by5iaW5kKEV2ZW50SWQuVVBEQVRFX1JPTEVfQVRUUklCVVRFLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT0gXCJhY3Rpdml0eVwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUFjdGl2aXR5KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnVwZGF0ZV9hY3Rpdml0eV9ldmVudCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlX2FjdGl2aXR5X2V2ZW50ID0gZ2NvcmUuR2xvYmFsRXZlbnQuYmluZChUYXNrRXZlbnQuVXBkYXRlQWN0aXZpdHlJbmZvLCBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVBY3Rpdml0eURhdGEoZGF0YSlcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy51cGRhdGVfdGFza19saXN0ID09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVfdGFza19saXN0ID0gZ2NvcmUuR2xvYmFsRXZlbnQuYmluZChUYXNrRXZlbnQuVXBkYXRlVGFza0xpc3QsIGZ1bmN0aW9uIChpc19uZXcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGFza0xpc3QoaXNfbmV3KVxyXG4gICAgICAgICAgICB9LmJpbmQodGhpcykpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmN0cmwucmVxdWVzdEFjdGl2aXR5SW5mbygpO1xyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGVBY3Rpdml0eTogZnVuY3Rpb24gKG5lZWRfdXBkYXRlKSB7XHJcbiAgICAgICAgdGhpcy5uZWVkX3VwZGF0ZSA9IG5lZWRfdXBkYXRlXHJcbiAgICAgICAgaWYgKHRoaXMucm9vdF93bmQgPT0gbnVsbClcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgaWYgKHRoaXMucm9sZV92byAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHZhciBhY3Rpdml0eV9jb25maWcgPSBnZGF0YShcImFjdGl2aXR5X2RhdGFcIiwgXCJkYXRhX2dldFwiLCBbQ29uZmlnLmFjdGl2aXR5X2RhdGEuZGF0YV9nZXRfbGVuZ3RoXSk7XHJcbiAgICAgICAgICAgIHZhciBtYXhfYWN0aXZpdHkgPSAxMDA7XHJcbiAgICAgICAgICAgIGlmIChhY3Rpdml0eV9jb25maWcgIT0gbnVsbClcclxuICAgICAgICAgICAgICAgIG1heF9hY3Rpdml0eSA9IGFjdGl2aXR5X2NvbmZpZy5hY3Rpdml0eTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zdHJpbmcgPSB0aGlzLnJvbGVfdm8uYWN0aXZpdHkgKyBcIi9cIiArIG1heF9hY3Rpdml0eTtcclxuICAgICAgICAgICAgdGhpcy5wcm9ncmVzcy5wcm9ncmVzcyA9IHRoaXMucm9sZV92by5hY3Rpdml0eSAvIG1heF9hY3Rpdml0eTtcclxuICAgICAgICAgICAgaWYgKG5lZWRfdXBkYXRlID09IHRydWUpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUFjdGl2aXR5RGF0YSh0aGlzLm1vZGVsLmdldEFjdGl2aXR5RGF0YSgpKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIEBkZXNjOuabtOaWsOa0u+i3g+WuneeusVxyXG4gICAgLy8gYXV0aG9yOnthdXRob3J9XHJcbiAgICAvLyB0aW1lOjIwMTgtMDUtMjIgMTY6MDI6NTdcclxuICAgIC8vIC0tQGRhdGE6IFxyXG4gICAgLy8gcmV0dXJuXHJcbiAgICB1cGRhdGVBY3Rpdml0eURhdGE6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucm9sZV92byA9PSBudWxsKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB2YXIgZGF0YV9saXN0ID0gZGF0YTtcclxuXHJcbiAgICAgICAgLy/liKTmlq3ov5nkuKrmtLvot4PluqbnmoTlrp3nrrHmmK/lkKblt7Lnu4/pooblj5bkuoZcclxuICAgICAgICB2YXIgY2hlY2tfYWN0aXZpdHkgPSBmdW5jdGlvbiAoYWN0aXZpdHkpIHtcclxuICAgICAgICAgICAgaWYgKGRhdGFfbGlzdCA9PSBudWxsKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgICAgIHJldHVybiBkYXRhX2xpc3RbYWN0aXZpdHldO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSBpbiB0aGlzLmF3YXJkc19saXN0KSB7XHJcbiAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcy5hd2FyZHNfbGlzdFtpXTtcclxuICAgICAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS5jb25maWcgJiYgaXRlbS5lZmZlY3RfY29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hlY2tfYWN0aXZpdHkoaXRlbS5jb25maWcuYWN0aXZpdHkpID09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLmlzX3Nob3dfdGlwcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zdGF0dXMgPSBUYXNrQ29uc3QuYWN0aW9uX3N0YXR1cy5maW5pc2g7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmNvbmZpZy5hY3Rpdml0eSA8PSB0aGlzLnJvbGVfdm8uYWN0aXZpdHkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5pc19zaG93X3RpcHMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5zdGF0dXMgPSBUYXNrQ29uc3QuYWN0aW9uX3N0YXR1cy5hY3Rpdml0eTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmlzX3Nob3dfdGlwcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc3RhdHVzID0gVGFza0NvbnN0LmFjdGlvbl9zdGF0dXMudW5fYWN0aXZpdHk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHZhciBib3hfYWN0aW9uID0gUGxheWVyQWN0aW9uLmFjdGlvbl8xO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uc3RhdHVzID09IFRhc2tDb25zdC5hY3Rpb25fc3RhdHVzLmZpbmlzaClcclxuICAgICAgICAgICAgICAgICAgICBib3hfYWN0aW9uID0gUGxheWVyQWN0aW9uLmFjdGlvbl8zO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXRlbS5zdGF0dXMgPT0gVGFza0NvbnN0LmFjdGlvbl9zdGF0dXMuYWN0aXZpdHkpXHJcbiAgICAgICAgICAgICAgICAgICAgYm94X2FjdGlvbiA9IFBsYXllckFjdGlvbi5hY3Rpb25fMjtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5lZmZlY3RfY29udGFpbmVyLnNrZWxldG9uLnNrZWxldG9uRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmJveF9hY3Rpb24gIT0gYm94X2FjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmVmZmVjdF9jb250YWluZXIuc2tlbGV0b24uc2V0QW5pbWF0aW9uKDAsIGJveF9hY3Rpb24sIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmJveF9hY3Rpb24gPSBib3hfYWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc19pZCA9IGdkYXRhKFwiZWZmZWN0X2RhdGFcIiwgXCJkYXRhX2VmZmVjdF9pbmZvXCIsIHRoaXMuYm94X2xpc3RbaSAtIDFdKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcGF0aCA9IGNjLmpzLmZvcm1hdFN0cihcInNwaW5lLyVzL2FjdGlvbi5hdGxhc1wiLCByZXNfaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9za2VsZXRvbiA9IGl0ZW0uZWZmZWN0X2NvbnRhaW5lci5za2VsZXRvblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRWZmZWN0KF9za2VsZXRvbiwgcGF0aCwgYm94X2FjdGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8v55Sf5oiQ5a6d566xXHJcbiAgICBjcmVhdGVFZmZlY3QoX3NrZWxldG9uLCBwYXRoLCBib3hfYWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkUmVzKHBhdGgsIChmdW5jdGlvbiAocmVzKSB7XHJcbiAgICAgICAgICAgIF9za2VsZXRvbi5za2VsZXRvbkRhdGEgPSByZXM7XHJcbiAgICAgICAgICAgIF9za2VsZXRvbi5zZXRBbmltYXRpb24oMCwgYm94X2FjdGlvbiwgdHJ1ZSk7XHJcbiAgICAgICAgfSkuYmluZCh0aGlzKSlcclxuICAgIH0sXHJcblxyXG4gICAgLy8gQGRlc2M65pu05paw5Lu75Yqh5YiX6KGo77yM5piv5ZCm6ZyA6KaB6YeN5paw5pu05paw5YiX6KGoXHJcbiAgICAvLyBhdXRob3I6e2F1dGhvcn1cclxuICAgIC8vIHRpbWU6MjAxOC0wNS0yMiAxOToxMToyOFxyXG4gICAgLy8gLS1AaXNfbmV3OuWmguaenOS4unRydWUs5YiZ6YeN5paw5o6S5bqP5ZCn77yM5ZCm5YiZ5bCx55u05o6l5pu05paw5L2N572uXHJcbiAgICAvLyByZXR1cm5cclxuICAgIHVwZGF0ZVRhc2tMaXN0OiBmdW5jdGlvbiAoaXNfbmV3KSB7XHJcbiAgICAgICAgdGhpcy5pc19uZXcgPSBpc19uZXc7XHJcbiAgICAgICAgaWYgKHRoaXMucm9vdF93bmQgPT0gbnVsbClcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgLy8gaWYgKGlzX25ldyA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHZhciBsaXN0ID0gdGhpcy5tb2RlbC5nZXRUYXNrTGlzdCgpO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1fc2Nyb2xsdmlldy5zZXREYXRhKGxpc3QpO1xyXG4gICAgICAgIC8vIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gICAgIHZhciBzb3J0X2Z1bmMgPSBVdGlscy50YWJsZUxvd2VyU29ydGVyKFtcImZpbmlzaF9zb3J0XCIsIFwiaWRcIl0pO1xyXG4gICAgICAgIC8vICAgICB0aGlzLml0ZW1fc2Nyb2xsdmlldy5yZXNldFBvc2l0aW9uKHNvcnRfZnVuYyk7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgb25EZWxldGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5yb2xlX2Fzc2V0c19ldmVudCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJvbGVfdm8gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb2xlX3ZvLnVuYmluZCh0aGlzLnJvbGVfYXNzZXRzX2V2ZW50KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucm9sZV9hc3NldHNfZXZlbnQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy51cGRhdGVfYWN0aXZpdHlfZXZlbnQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBnY29yZS5HbG9iYWxFdmVudC51bmJpbmQodGhpcy51cGRhdGVfYWN0aXZpdHlfZXZlbnQpO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV9hY3Rpdml0eV9ldmVudCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnVwZGF0ZV90YXNrX2xpc3QgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBnY29yZS5HbG9iYWxFdmVudC51bmJpbmQodGhpcy51cGRhdGVfdGFza19saXN0KTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVfdGFza19saXN0ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaXRlbV9zY3JvbGx2aWV3KSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbV9zY3JvbGx2aWV3LmRlbGV0ZU1lKCk7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbV9zY3JvbGx2aWV3ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVGFza1BhbmVsOyJdfQ==