(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/Scripts/mod/adventure/adventure_model.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, 'c4a6c1KRGZPGoer42/oM1wb', 'adventure_model'); // Scripts/mod/adventure/adventure_model.js "use strict"; // -------------------------------------------------------------------- // @author: xxx@syg.com(必填, 创建模块的人员) // @description: // 这里填写详细说明,主要填写该模块的功能简要 //
Create: 2019-05-09 14:14:52 // -------------------------------------------------------------------- var AdventureEvent = require("adventure_event"); var AdventureActivityController = require("adventureactivity_controller"); var AdventureActivityConst = require("adventureactivity_const"); var MainSceneController = require("mainscene_controller"); var SceneConst = require("scene_const"); var RoleController = require("role_controller"); var AdventureModel = cc.Class({ "extends": BaseClass, ctor: function ctor() {}, properties: {}, initConfig: function initConfig() { this.room_list = []; // 所有房间的 this.base_data = []; // 当前冒险的基础数据 this.buff_data = []; // buff数据 this.holiday_buff_data = []; // 活动buff数据 this.form_list = []; // 当前上阵伙伴信息 this.select_partner_id = 0; // 当前选中的伙伴id this.red_status = false; this.backpack_list = []; this.plist = []; //伙伴死亡情况信息 this.before_room = 0; this.plunder_record_list = []; //防御布阵掠夺记录 this.is_first_record_red = true; }, // ==============================-- // desc:获取当前上阵伙伴信息 // @data: // @return // ==============================-- updateFormPartner: function updateFormPartner(data, partner_id) { this.form_list = data; this.select_partner_id = partner_id; // 这里判断一下如果列表为空,则显示一个红点 this.updateRedStatus(data.length == 0); gcore.GlobalEvent.fire(AdventureEvent.UpdateAdventureForm); }, updateRedStatus: function updateRedStatus(status) { this.red_status = status; var is_open = AdventureActivityController.getInstance().isOpenActivity(AdventureActivityConst.Ground_Type.adventure); if (is_open == false) { this.red_status = false; } MainSceneController.getInstance().setBuildRedStatus(SceneConst.CenterSceneBuild.adventure, { bid: AdventureActivityConst.Red_Type.adventure, status: this.red_status }); }, // 宝箱领取红点 setAdventureBoxStatus: function setAdventureBoxStatus(data) { this.box_status_list = {}; for (var i in data.list) { this.box_status_list[data.list[i].id] = data.list[i].status; } var red_point = false; for (var i in data.list) { if (data.list[i].status == 1) { red_point = true; break; } } this.box_redpoint = red_point; gcore.GlobalEvent.fire(AdventureEvent.UpdateAdventureForm); var scene_adventure_redpiont = this.getAdventureRedPoint(); MainSceneController.getInstance().setBuildRedStatus(SceneConst.CenterSceneBuild.adventure, { bid: AdventureActivityConst.Red_Type.adventure, status: scene_adventure_redpiont }); }, getAdventureBoxStatus: function getAdventureBoxStatus(id) { if (this.box_status_list && this.box_status_list[id]) { return this.box_status_list[id]; } return 0; }, // 冒险红点 getAdventureRedPoint: function getAdventureRedPoint() { var status = this.red_status || false; var box_status = this.box_redpoint || false; return status || box_status; }, getFormList: function getFormList() { return this.form_list; }, // ==============================-- // desc:全部伙伴是否都已经死亡 // @return // ==============================-- allHeroIsDie: function allHeroIsDie() { var is_die = true; for (var i in this.form_list) { if (this.form_list[i].now_hp != 0) { is_die = false; break; } } return is_die; }, getSelectPartnerID: function getSelectPartnerID() { return this.select_partner_id; }, updateSelectPartnerID: function updateSelectPartnerID(id) { this.select_partner_id = id; gcore.GlobalEvent.fire(AdventureEvent.UpdateAdventureSelectHero); }, // ==============================-- // desc:冒险的基础信息,对应协议的20600 // @data: // @return // ==============================-- setAdventureBaseData: function setAdventureBaseData(data) { this.base_data = data; gcore.GlobalEvent.fire(AdventureEvent.Update_Room_Base_Info); }, getAdventureBaseData: function getAdventureBaseData() { return this.base_data; }, setBuffData: function setBuffData(data) { this.buff_data = data.buff_list; this.holiday_buff_data = data.holiday_buff_list; gcore.GlobalEvent.fire(AdventureEvent.Update_Buff_Info); }, getBuffData: function getBuffData() { if (this.buff_data && Utils.next(this.buff_data || {}) != null) { return this.buff_data; } }, getHolidayBuffData: function getHolidayBuffData() { if (this.holiday_buff_data && Utils.next(this.holiday_buff_data || {}) != null) { return this.holiday_buff_data; } }, setRoomList: function setRoomList(data) { if (data == null || data.room_list == null) return; for (var i in data.room_list) { this.room_list[data.room_list[i].id] = data.room_list[i]; } gcore.GlobalEvent.fire(AdventureEvent.Update_Room_Info); }, getRoomList: function getRoomList() { if (this.room_list && Utils.next(this.room_list || {}) != null) { return this.room_list; } }, updateRoomList: function updateRoomList(data) { for (var i in data.room_list) { var room = this.room_list[data.room_list[i].id]; if (room) { room.status = data.room_list[i].status; room.lock = data.room_list[i].lock; room.evt_id = data.room_list[i].evt_id; } } gcore.GlobalEvent.fire(AdventureEvent.Update_Single_Room_Info, data); }, getRoomInfoByRoomID: function getRoomInfoByRoomID(id) { if (this.room_list && Utils.next(this.room_list || {}) != null) { var data = null; for (var i in this.room_list) { if (this.room_list[i].id == id) { data = this.room_list[i]; break; } } return data; } }, getCurIndex: function getCurIndex(reset_num, config) { var idx = reset_num + 1; var free_num = 0; var cost_num = 0; var vip_lev = RoleController.getInstance().getRoleVo().vip_lev; while (config[idx]) { if (config[idx].cost == 0) { free_num = free_num + 1; } else { if (vip_lev >= config[idx].vip) { cost_num = cost_num + 1; } } idx = idx + 1; } return [free_num, cost_num]; } }); 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxhZHZlbnR1cmVcXGFkdmVudHVyZV9tb2RlbC5qcyJdLCJuYW1lcyI6WyJBZHZlbnR1cmVFdmVudCIsInJlcXVpcmUiLCJBZHZlbnR1cmVBY3Rpdml0eUNvbnRyb2xsZXIiLCJBZHZlbnR1cmVBY3Rpdml0eUNvbnN0IiwiTWFpblNjZW5lQ29udHJvbGxlciIsIlNjZW5lQ29uc3QiLCJSb2xlQ29udHJvbGxlciIsIkFkdmVudHVyZU1vZGVsIiwiY2MiLCJDbGFzcyIsIkJhc2VDbGFzcyIsImN0b3IiLCJwcm9wZXJ0aWVzIiwiaW5pdENvbmZpZyIsInJvb21fbGlzdCIsImJhc2VfZGF0YSIsImJ1ZmZfZGF0YSIsImhvbGlkYXlfYnVmZl9kYXRhIiwiZm9ybV9saXN0Iiwic2VsZWN0X3BhcnRuZXJfaWQiLCJyZWRfc3RhdHVzIiwiYmFja3BhY2tfbGlzdCIsInBsaXN0IiwiYmVmb3JlX3Jvb20iLCJwbHVuZGVyX3JlY29yZF9saXN0IiwiaXNfZmlyc3RfcmVjb3JkX3JlZCIsInVwZGF0ZUZvcm1QYXJ0bmVyIiwiZGF0YSIsInBhcnRuZXJfaWQiLCJ1cGRhdGVSZWRTdGF0dXMiLCJsZW5ndGgiLCJnY29yZSIsIkdsb2JhbEV2ZW50IiwiZmlyZSIsIlVwZGF0ZUFkdmVudHVyZUZvcm0iLCJzdGF0dXMiLCJpc19vcGVuIiwiZ2V0SW5zdGFuY2UiLCJpc09wZW5BY3Rpdml0eSIsIkdyb3VuZF9UeXBlIiwiYWR2ZW50dXJlIiwic2V0QnVpbGRSZWRTdGF0dXMiLCJDZW50ZXJTY2VuZUJ1aWxkIiwiYmlkIiwiUmVkX1R5cGUiLCJzZXRBZHZlbnR1cmVCb3hTdGF0dXMiLCJib3hfc3RhdHVzX2xpc3QiLCJpIiwibGlzdCIsImlkIiwicmVkX3BvaW50IiwiYm94X3JlZHBvaW50Iiwic2NlbmVfYWR2ZW50dXJlX3JlZHBpb250IiwiZ2V0QWR2ZW50dXJlUmVkUG9pbnQiLCJnZXRBZHZlbnR1cmVCb3hTdGF0dXMiLCJib3hfc3RhdHVzIiwiZ2V0Rm9ybUxpc3QiLCJhbGxIZXJvSXNEaWUiLCJpc19kaWUiLCJub3dfaHAiLCJnZXRTZWxlY3RQYXJ0bmVySUQiLCJ1cGRhdGVTZWxlY3RQYXJ0bmVySUQiLCJVcGRhdGVBZHZlbnR1cmVTZWxlY3RIZXJvIiwic2V0QWR2ZW50dXJlQmFzZURhdGEiLCJVcGRhdGVfUm9vbV9CYXNlX0luZm8iLCJnZXRBZHZlbnR1cmVCYXNlRGF0YSIsInNldEJ1ZmZEYXRhIiwiYnVmZl9saXN0IiwiaG9saWRheV9idWZmX2xpc3QiLCJVcGRhdGVfQnVmZl9JbmZvIiwiZ2V0QnVmZkRhdGEiLCJVdGlscyIsIm5leHQiLCJnZXRIb2xpZGF5QnVmZkRhdGEiLCJzZXRSb29tTGlzdCIsIlVwZGF0ZV9Sb29tX0luZm8iLCJnZXRSb29tTGlzdCIsInVwZGF0ZVJvb21MaXN0Iiwicm9vbSIsImxvY2siLCJldnRfaWQiLCJVcGRhdGVfU2luZ2xlX1Jvb21fSW5mbyIsImdldFJvb21JbmZvQnlSb29tSUQiLCJnZXRDdXJJbmRleCIsInJlc2V0X251bSIsImNvbmZpZyIsImlkeCIsImZyZWVfbnVtIiwiY29zdF9udW0iLCJ2aXBfbGV2IiwiZ2V0Um9sZVZvIiwiY29zdCIsInZpcCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxjQUFjLEdBQUdDLE9BQU8sQ0FBQyxpQkFBRCxDQUE1Qjs7QUFDQSxJQUFJQywyQkFBMkIsR0FBR0QsT0FBTyxDQUFDLDhCQUFELENBQXpDOztBQUNBLElBQUlFLHNCQUFzQixHQUFFRixPQUFPLENBQUMseUJBQUQsQ0FBbkM7O0FBQ0EsSUFBSUcsbUJBQW1CLEdBQUdILE9BQU8sQ0FBQyxzQkFBRCxDQUFqQzs7QUFDQSxJQUFJSSxVQUFVLEdBQVlKLE9BQU8sQ0FBQyxhQUFELENBQWpDOztBQUNBLElBQUlLLGNBQWMsR0FBR0wsT0FBTyxDQUFDLGlCQUFELENBQTVCOztBQUVBLElBQUlNLGNBQWMsR0FBR0MsRUFB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QUFHbkYsY0FBYyxDQUFDK0IsV0FBZixHQUE2QnFELFNBQTdCLEdBQXlDRCxPQUF2RDs7QUFFQSxXQUFNSixNQUFNLENBQUNDLEdBQUQsQ0FBWixFQUFrQjtBQUNkLFVBQUdELE1BQU0sQ0FBQ0MsR0FBRCxDQUFOLENBQVlLLElBQVosSUFBb0IsQ0FBdkIsRUFBeUI7QUFDckJKLFFBQUFBLFFBQVEsR0FBR0EsUUFBUSxHQUFHLENBQXRCO0FBQ0gsT0FGRCxNQUVLO0FBQ0QsWUFBR0UsT0FBTyxJQUFJSixNQUFNLENBQUNDLEdBQUQsQ0FBTixDQUFZTSxHQUExQixFQUE4QjtBQUMxQkosVUFBQUEsUUFBUSxHQUFHQSxRQUFRLEdBQUcsQ0FBdEI7QUFDSDtBQUNKOztBQUNERixNQUFBQSxHQUFHLEdBQUdBLEdBQUcsR0FBRyxDQUFaO0FBQ0g7O0FBQ0QsV0FBTyxDQUFDQyxRQUFELEVBQVdDLFFBQVgsQ0FBUDtBQUNIO0FBck15QixDQUFULENBQXJCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogeHh4QHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXG4vLyBAZGVzY3JpcHRpb246XG4vLyAgICAgIOi/memHjOWhq+WGmeivpue7huivtOaYjizkuLvopoHloavlhpnor6XmqKHlnZfnmoTlip/og73nroDopoFcbi8vIDxici8+Q3JlYXRlOiAyMDE5LTA1LTA5IDE0OjE0OjUyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxudmFyIEFkdmVudHVyZUV2ZW50ID0gcmVxdWlyZShcImFkdmVudHVyZV9ldmVudFwiKTtcbnZhciBBZHZlbnR1cmVBY3Rpdml0eUNvbnRyb2xsZXIgPSByZXF1aXJlKFwiYWR2ZW50dXJlYWN0aXZpdHlfY29udHJvbGxlclwiKTtcbnZhciBBZHZlbnR1cmVBY3Rpdml0eUNvbnN0PSByZXF1aXJlKFwiYWR2ZW50dXJlYWN0aXZpdHlfY29uc3RcIik7XG52YXIgTWFpblNjZW5lQ29udHJvbGxlciA9IHJlcXVpcmUoXCJtYWluc2NlbmVfY29udHJvbGxlclwiKTtcbnZhciBTY2VuZUNvbnN0ICAgICAgICAgID0gcmVxdWlyZShcInNjZW5lX2NvbnN0XCIpO1xudmFyIFJvbGVDb250cm9sbGVyID0gcmVxdWlyZShcInJvbGVfY29udHJvbGxlclwiKVxuXG52YXIgQWR2ZW50dXJlTW9kZWwgPSBjYy5DbGFzcyh7XG4gICAgZXh0ZW5kczogQmFzZUNsYXNzLFxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICB9LFxuXG4gICAgcHJvcGVydGllczoge1xuICAgIH0sXG5cbiAgICBpbml0Q29uZmlnOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucm9vbV9saXN0ID0gW107ICAgICAvLyDmiYDmnInmiL/pl7TnmoRcbiAgICAgICAgdGhpcy5iYXNlX2RhdGEgPSBbXTsgICAgIC8vIOW9k+WJjeWGkumZqeeahOWfuuehgOaVsOaNrlxuICAgICAgICB0aGlzLmJ1ZmZfZGF0YSA9IFtdOyAgICAgLy8gYnVmZuaVsOaNrlxuICAgICAgICB0aGlzLmhvbGlkYXlfYnVmZl9kYXRhID0gW107IC8vIOa0u+WKqGJ1ZmbmlbDmja5cblxuICAgICAgICB0aGlzLmZvcm1fbGlzdCA9IFtdOyAgICAgLy8g5b2T5YmN5LiK6Zi15LyZ5Ly05L+h5oGvXG4gICAgICAgIHRoaXMuc2VsZWN0X3BhcnRuZXJfaWQgPSAwOyAgLy8g5b2T5YmN6YCJ5Lit55qE5LyZ5Ly0aWRcblxuICAgICAgICB0aGlzLnJlZF9zdGF0dXMgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmJhY2twYWNrX2xpc3QgPSBbXTtcbiAgICAgICAgdGhpcy5wbGlzdCA9IFtdOyAvL+S8meS8tOatu+S6oeaDheWGteS/oeaBr1xuICAgICAgICB0aGlzLmJlZm9yZV9yb29tID0gMDtcbiAgICAgICAgdGhpcy5wbHVuZGVyX3JlY29yZF9saXN0ID0gW107IC8v6Ziy5b6h5biD6Zi15o6g5aS66K6w5b2VXG4gICAgICAgIHRoaXMuaXNfZmlyc3RfcmVjb3JkX3JlZCA9IHRydWU7XG4gICAgfSxcblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tXG4gICAgLy8gZGVzYzrojrflj5blvZPliY3kuIrpmLXkvJnkvLTkv6Hmga9cbiAgICAvLyBAZGF0YTpcbiAgICAvLyBAcmV0dXJuIFxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tIFxuICAgIHVwZGF0ZUZvcm1QYXJ0bmVyOmZ1bmN0aW9uKGRhdGEsIHBhcnRuZXJfaWQpe1xuICAgICAgICB0aGlzLmZvcm1fbGlzdCA9IGRhdGE7XG4gICAgICAgIHRoaXMuc2VsZWN0X3BhcnRuZXJfaWQgPSBwYXJ0bmVyX2lkO1xuICAgICAgICAvLyDov5nph4zliKTmlq3kuIDkuIvlpoLmnpzliJfooajkuLrnqbos5YiZ5pi+56S65LiA5Liq57qi54K5XG4gICAgICAgIHRoaXMudXBkYXRlUmVkU3RhdHVzKGRhdGEubGVuZ3RoID09IDApO1xuICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKEFkdmVudHVyZUV2ZW50LlVwZGF0ZUFkdmVudHVyZUZvcm0pO1xuICAgIH0sXG5cbiAgICB1cGRhdGVSZWRTdGF0dXM6ZnVuY3Rpb24oc3RhdHVzKXtcbiAgICAgICAgdGhpcy5yZWRfc3RhdHVzID0gc3RhdHVzO1xuICAgICAgICB2YXIgaXNfb3BlbiA9IEFkdmVudHVyZUFjdGl2aXR5Q29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmlzT3BlbkFjdGl2aXR5KEFkdmVudHVyZUFjdGl2aXR5Q29uc3QuR3JvdW5kX1R5cGUuYWR2ZW50dXJlKTtcbiAgICAgICAgaWYoaXNfb3BlbiA9PSBmYWxzZSl7XG4gICAgICAgICAgICB0aGlzLnJlZF9zdGF0dXMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBNYWluU2NlbmVDb250cm9sbGVyLmdldEluc3RhbmNlKCkuc2V0QnVpbGRSZWRTdGF0dXMoU2NlbmVDb25zdC5DZW50ZXJTY2VuZUJ1aWxkLmFkdmVudHVyZSwge2JpZDogQWR2ZW50dXJlQWN0aXZpdHlDb25zdC5SZWRfVHlwZS5hZHZlbnR1cmUsIHN0YXR1czogdGhpcy5yZWRfc3RhdHVzfSk7XG4gICAgfSxcblxuICAgIC8vIOWuneeusemihuWPlue6oueCuVxuICAgIHNldEFkdmVudHVyZUJveFN0YXR1czpmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgdGhpcy5ib3hfc3RhdHVzX2xpc3QgPSB7fTtcbiAgICAgICAgZm9yKHZhciBpIGluIGRhdGEubGlzdCl7XG4gICAgICAgICAgICB0aGlzLmJveF9zdGF0dXNfbGlzdFtkYXRhLmxpc3RbaV0uaWRdID0gZGF0YS5saXN0W2ldLnN0YXR1cztcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVkX3BvaW50ID0gZmFsc2U7XG4gICAgICAgIGZvcih2YXIgaSBpbiBkYXRhLmxpc3Qpe1xuICAgICAgICAgICAgaWYoZGF0YS5saXN0W2ldLnN0YXR1cyA9PSAxKXtcbiAgICAgICAgICAgICAgICByZWRfcG9pbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYm94X3JlZHBvaW50ID0gcmVkX3BvaW50O1xuICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKEFkdmVudHVyZUV2ZW50LlVwZGF0ZUFkdmVudHVyZUZvcm0pO1xuICAgICAgICB2YXIgc2NlbmVfYWR2ZW50dXJlX3JlZHBpb250ID0gdGhpcy5nZXRBZHZlbnR1cmVSZWRQb2ludCgpO1xuICAgICAgICBNYWluU2NlbmVDb250cm9sbGVyLmdldEluc3RhbmNlKCkuc2V0QnVpbGRSZWRTdGF0dXMoU2NlbmVDb25zdC5DZW50ZXJTY2VuZUJ1aWxkLmFkdmVudHVyZSwge2JpZDogQWR2ZW50dXJlQWN0aXZpdHlDb25zdC5SZWRfVHlwZS5hZHZlbnR1cmUsIHN0YXR1czogc2NlbmVfYWR2ZW50dXJlX3JlZHBpb250fSlcbiAgICB9LFxuXG4gICAgZ2V0QWR2ZW50dXJlQm94U3RhdHVzOmZ1bmN0aW9uKGlkKXtcbiAgICAgICAgaWYodGhpcy5ib3hfc3RhdHVzX2xpc3QgJiYgdGhpcy5ib3hfc3RhdHVzX2xpc3RbaWRdKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJveF9zdGF0dXNfbGlzdFtpZF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfSxcblxuICAgIC8vIOWGkumZqee6oueCuVxuICAgIGdldEFkdmVudHVyZVJlZFBvaW50OmZ1bmN0aW9uKCl7XG4gICAgICAgIHZhciBzdGF0dXMgPSB0aGlzLnJlZF9zdGF0dXMgfHwgZmFsc2U7XG4gICAgICAgIHZhciBib3hfc3RhdHVzID0gdGhpcy5ib3hfcmVkcG9pbnQgfHwgZmFsc2U7XG4gICAgICAgIHJldHVybiAoc3RhdHVzIHx8IGJveF9zdGF0dXMpO1xuICAgIH0sXG5cbiAgICBnZXRGb3JtTGlzdDpmdW5jdGlvbigpe1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtX2xpc3RcbiAgICB9LFxuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS1cbiAgICAvLyBkZXNjOuWFqOmDqOS8meS8tOaYr+WQpumDveW3sue7j+atu+S6oVxuICAgIC8vIEByZXR1cm4gXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS1cbiAgICBhbGxIZXJvSXNEaWU6ZnVuY3Rpb24oKXtcbiAgICAgICAgdmFyIGlzX2RpZSA9IHRydWU7XG4gICAgICAgIGZvcih2YXIgaSBpbiB0aGlzLmZvcm1fbGlzdCl7XG4gICAgICAgICAgICBpZih0aGlzLmZvcm1fbGlzdFtpXS5ub3dfaHAgIT0gMCl7XG4gICAgICAgICAgICAgICAgaXNfZGllID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzX2RpZTtcbiAgICB9LFxuXG4gICAgZ2V0U2VsZWN0UGFydG5lcklEOmZ1bmN0aW9uKCl7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdF9wYXJ0bmVyX2lkO1xuICAgIH0sXG5cbiAgICB1cGRhdGVTZWxlY3RQYXJ0bmVySUQ6ZnVuY3Rpb24oaWQpe1xuICAgICAgICB0aGlzLnNlbGVjdF9wYXJ0bmVyX2lkID0gaWQ7XG4gICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoQWR2ZW50dXJlRXZlbnQuVXBkYXRlQWR2ZW50dXJlU2VsZWN0SGVybyk7XG4gICAgfSxcblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tXG4gICAgLy8gZGVzYzrlhpLpmannmoTln7rnoYDkv6Hmga8s5a+55bqU5Y2P6K6u55qEMjA2MDBcbiAgICAvLyBAZGF0YTpcbiAgICAvLyBAcmV0dXJuIFxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tXG4gICAgc2V0QWR2ZW50dXJlQmFzZURhdGE6ZnVuY3Rpb24oZGF0YSl7XG4gICAgICAgIHRoaXMuYmFzZV9kYXRhID0gZGF0YTtcbiAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShBZHZlbnR1cmVFdmVudC5VcGRhdGVfUm9vbV9CYXNlX0luZm8pO1xuICAgIH0sXG5cbiAgICBnZXRBZHZlbnR1cmVCYXNlRGF0YTpmdW5jdGlvbigpe1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlX2RhdGE7XG4gICAgfSxcbiAgICBcbiAgICBzZXRCdWZmRGF0YTpmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgdGhpcy5idWZmX2RhdGEgPSBkYXRhLmJ1ZmZfbGlzdDtcbiAgICAgICAgdGhpcy5ob2xpZGF5X2J1ZmZfZGF0YSA9IGRhdGEuaG9saWRheV9idWZmX2xpc3Q7XG4gICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoQWR2ZW50dXJlRXZlbnQuVXBkYXRlX0J1ZmZfSW5mbyk7XG4gICAgfSxcblxuICAgIGdldEJ1ZmZEYXRhOmZ1bmN0aW9uKCl7XG4gICAgICAgIGlmKHRoaXMuYnVmZl9kYXRhICYmIFV0aWxzLm5leHQodGhpcy5idWZmX2RhdGEgfHwge30pICE9IG51bGwpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYnVmZl9kYXRhO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGdldEhvbGlkYXlCdWZmRGF0YTpmdW5jdGlvbiggICl7XG4gICAgICAgIGlmKHRoaXMuaG9saWRheV9idWZmX2RhdGEgJiYgVXRpbHMubmV4dCh0aGlzLmhvbGlkYXlfYnVmZl9kYXRhIHx8IHt9KSAhPSBudWxsKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhvbGlkYXlfYnVmZl9kYXRhO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNldFJvb21MaXN0OmZ1bmN0aW9uKGRhdGEpe1xuICAgICAgICBpZihkYXRhID09IG51bGwgfHwgZGF0YS5yb29tX2xpc3QgPT0gbnVsbClyZXR1cm47XG4gICAgICAgIGZvcih2YXIgaSBpbiBkYXRhLnJvb21fbGlzdCl7XG4gICAgICAgICAgICB0aGlzLnJvb21fbGlzdFtkYXRhLnJvb21fbGlzdFtpXS5pZF0gPSBkYXRhLnJvb21fbGlzdFtpXTtcbiAgICAgICAgfVxuICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKEFkdmVudHVyZUV2ZW50LlVwZGF0ZV9Sb29tX0luZm8pO1xuICAgIH0sXG5cbiAgICBnZXRSb29tTGlzdDpmdW5jdGlvbigpe1xuICAgICAgICBpZih0aGlzLnJvb21fbGlzdCAmJiBVdGlscy5uZXh0KHRoaXMucm9vbV9saXN0IHx8IHt9KSAhPSBudWxsKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvb21fbGlzdDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVSb29tTGlzdDpmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgZm9yKHZhciBpIGluIGRhdGEucm9vbV9saXN0KXtcbiAgICAgICAgICAgIHZhciByb29tID0gdGhpcy5yb29tX2xpc3RbZGF0YS5yb29tX2xpc3RbaV0uaWRdO1xuICAgICAgICAgICAgaWYocm9vbSl7XG4gICAgICAgICAgICAgICAgcm9vbS5zdGF0dXMgPSBkYXRhLnJvb21fbGlzdFtpXS5zdGF0dXM7XG4gICAgICAgICAgICAgICAgcm9vbS5sb2NrID0gZGF0YS5yb29tX2xpc3RbaV0ubG9jaztcbiAgICAgICAgICAgICAgICByb29tLmV2dF9pZCA9IGRhdGEucm9vbV9saXN0W2ldLmV2dF9pZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKEFkdmVudHVyZUV2ZW50LlVwZGF0ZV9TaW5nbGVfUm9vbV9JbmZvLGRhdGEpO1xuICAgIH0sXG5cbiAgICBnZXRSb29tSW5mb0J5Um9vbUlEOmZ1bmN0aW9uKGlkKXtcbiAgICAgICAgaWYodGhpcy5yb29tX2xpc3QgJiYgVXRpbHMubmV4dCh0aGlzLnJvb21fbGlzdCB8fCB7fSkgIT0gbnVsbCl7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IG51bGw7XG4gICAgICAgICAgICBmb3IodmFyIGkgaW4gdGhpcy5yb29tX2xpc3Qpe1xuICAgICAgICAgICAgICAgIGlmKHRoaXMucm9vbV9saXN0W2ldLmlkID09IGlkKXtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHRoaXMucm9vbV9saXN0W2ldO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRDdXJJbmRleDpmdW5jdGlvbihyZXNldF9udW0sIGNvbmZpZyl7XG4gICAgICAgIHZhciBpZHggPSByZXNldF9udW0gKyAxO1xuICAgICAgICB2YXIgZnJlZV9udW0gPSAwO1xuICAgICAgICB2YXIgY29zdF9udW0gPSAwO1xuICAgICAgICB2YXIgdmlwX2xldiA9IFJvbGVDb250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0Um9sZVZvKCkudmlwX2xldjtcblxuICAgICAgICB3aGlsZShjb25maWdbaWR4XSl7XG4gICAgICAgICAgICBpZihjb25maWdbaWR4XS5jb3N0ID09IDApe1xuICAgICAgICAgICAgICAgIGZyZWVfbnVtID0gZnJlZV9udW0gKyAxO1xuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgaWYodmlwX2xldiA+PSBjb25maWdbaWR4XS52aXApe1xuICAgICAgICAgICAgICAgICAgICBjb3N0X251bSA9IGNvc3RfbnVtICsgMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZHggPSBpZHggKyAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbZnJlZV9udW0sIGNvc3RfbnVtXTtcbiAgICB9LFxuXG59KTsiXX0=