difenduandada
2024-12-31 34abe6963b344c882358274957f4b992456fee40
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/partnersummon/partnersummon_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, '5404dkqo/9HCK53yJeJbyxU', 'partnersummon_model');
// Scripts/mod/partnersummon/partnersummon_model.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
//      这里填写详细说明,主要填写该模块的功能简要
// <br/>Create: {DATE}
// --------------------------------------------------------------------
var PartnersummonEvent = require("partnersummon_event");
 
var PartnersummonConst = require("partnersummon_const");
 
var PartnersummonModel = cc.Class({
  "extends": BaseClass,
  ctor: function ctor() {},
  properties: {
    recruit_list: null,
    // 卡库的数据
    recruit_data: null,
    // 召唤结果
    had_open_view: false
  },
  initConfig: function initConfig() {},
  setSummonData: function setSummonData(summon_data) {
    if (!summon_data) return;
    this.recruit_list = summon_data.recruit_list;
    this.setShareData(summon_data);
    this.updateRecruitData();
    this.updateRedPoint();
  },
  // 更新免费召唤次数、下次免费时间
  updateSummonData: function updateSummonData(update_data) {
    if (!update_data) return;
    if (!this.recruit_list) return;
 
    for (var recruit_i in this.recruit_list) {
      var recruit_info = this.recruit_list[recruit_i];
 
      if (recruit_info.group_id === update_data.group_id && recruit_info.draw_list) {
        for (var draw_i in recruit_info.draw_list) {
          var draw_info = recruit_info.draw_list[draw_i];
 
          if (draw_info.times === 1 && draw_info.kv_list) {
            for (var kv_i in draw_info.kv_list) {
              var kv_info = draw_info.kv_list[kv_i];
              if (kv_info.key == PartnersummonConst.Recruit_Key.Free_Count) kv_info.val = update_data.free_times;
              if (kv_info.key == PartnersummonConst.Recruit_Key.Free_Time) kv_info.val = update_data.free_cd_end;
            }
          }
        }
      }
    }
 
    this.updateRedPoint();
    gcore.GlobalEvent.fire(PartnersummonEvent.UpdateSummonDataEvent, update_data);
  },
  setRecruitData: function setRecruitData(recruit_data) {
    this.recruit_data = recruit_data;
  },
  getRecruitData: function getRecruitData() {
    return this.recruit_data;
  },
  setShareData: function setShareData(data) {},
  updateRecruitData: function updateRecruitData(data_list) {},
  // 更新某个卡库的CD时间、次数等数据
  updateExtendData: function updateExtendData() {},
  // 获取卡库数据
  getSummonGroupData: function getSummonGroupData() {
    var group_data = [];
    var recruit_config = Config.recruit_data.data_partnersummon_data;
    var group_item = null;
    var recruit_config_info = null;
    var group_id = null;
 
    for (var recruit_i in recruit_config) {
      recruit_config_info = recruit_config[recruit_i];
 
      if (recruit_config_info.is_show === 0) {
        group_id = recruit_config_info.group_id;
        var recruit_data = this.getSummonProtoDataByGroupID(group_id);
        group_item = {};
        group_item.config_data = recruit_config[recruit_i];
        group_item.recruit_data = recruit_data;
        group_item.group_id = recruit_config_info.group_id;
        group_data.push(group_item);
      }
    } // 排序
 
 
    function sortById(pro) {
      return function (obj1, obj2) {
        var c_val1 = obj1.config_data[pro];
        var c_val2 = obj2.config_data[pro];
 
        if (c_val1 < c_val2) {
          return -1;
        } else {
          return 1;
        }
 
        return 0;
      };
    }
 
    var summon_group_data = group_data.sort(sortById("sort_id"));
    return summon_group_data;
  },
  getSummonProtoDataByGroupID: function getSummonProtoDataByGroupID(group_id) {
    if (!group_id || !this.recruit_list) return;
    var recruit_data = null;
 
    for (var recruit_i in this.recruit_list) {
      recruit_data = this.recruit_list[recruit_i];
 
      if (recruit_data.group_id === group_id) {
        return recruit_data;
      }
    }
 
    return null;
  },
  getScoreSummonNeedCount: function getScoreSummonNeedCount() {
    var count = 0;
    var score_recruit_info = Config.recruit_data.data_partnersummon_data[PartnersummonConst.Summon_Type.Score];
 
    if (score_recruit_info.exchange_once && score_recruit_info.exchange_once[0]) {
      count = score_recruit_info.exchange_once[0][1];
    }
 
    return count;
  },
  // 更新红点状态
  updateMainSceneRedPoint: function updateMainSceneRedPoint() {
    var MainSceneController = require("mainscene_controller");
 
    var SceneConst = require("scene_const"); // 是否有免费
 
 
    var is_show_red = false;
 
    for (var recruit_i in this.recruit_list) {
      var group_data = this.recruit_list[recruit_i];
 
      if (group_data.draw_list) {
        for (var draw_i in group_data.draw_list) {
          var draw_data = group_data.draw_list[draw_i];
 
          if (draw_data.kv_list) {
            for (var time_i in draw_data.kv_list) {
              var time_info = draw_data.kv_list[time_i];
 
              if (time_info.key == PartnersummonConst.Recruit_Key.Free_Count && time_info.val > 0) {
                is_show_red = true;
              }
            }
          }
        }
      }
    } // 如果没有免费切没有从打开过界面企鹅道具数量充足则提示红点
 
 
    if (!is_show_red && !this.had_open_view) {
      var BackpackController = require("backpack_controller");
 
      var normal_item_num = BackpackController.getInstance().getModel().getItemNumByBid(PartnersummonConst.Normal_Id);
      var advanced_item_num = BackpackController.getInstance().getModel().getItemNumByBid(PartnersummonConst.Normal_Id);
      if (normal_item_num > 0 || advanced_item_num > 0) is_show_red = true;
    }
 
    MainSceneController.getInstance().setBuildRedStatus(SceneConst.CenterSceneBuild.summon, is_show_red);
  },
  setOpenPartnerSummonFlag: function setOpenPartnerSummonFlag(status) {
    this.had_open_view = status;
    this.updateRedPoint();
  },
  updateRedPoint: function updateRedPoint() {
    RedMgr.getInstance().addCalHandler(this.updateMainSceneRedPoint.bind(this), RedIds.PartnerSummon);
  },
  //快速点击间隔
  clickIntervalStatus: function clickIntervalStatus(status) {
    this.updateTime = status;
  },
  getClickStatus: function getClickStatus() {
    return this.updateTime;
  }
});
 
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxwYXJ0bmVyc3VtbW9uXFxwYXJ0bmVyc3VtbW9uX21vZGVsLmpzIl0sIm5hbWVzIjpbIlBhcnRuZXJzdW1tb25FdmVudCIsInJlcXVpcmUiLCJQYXJ0bmVyc3VtbW9uQ29uc3QiLCJQYXJ0bmVyc3VtbW9uTW9kZWwiLCJjYyIsIkNsYXNzIiwiQmFzZUNsYXNzIiwiY3RvciIsInByb3BlcnRpZXMiLCJyZWNydWl0X2xpc3QiLCJyZWNydWl0X2RhdGEiLCJoYWRfb3Blbl92aWV3IiwiaW5pdENvbmZpZyIsInNldFN1bW1vbkRhdGEiLCJzdW1tb25fZGF0YSIsInNldFNoYXJlRGF0YSIsInVwZGF0ZVJlY3J1aXREYXRhIiwidXBkYXRlUmVkUG9pbnQiLCJ1cGRhdGVTdW1tb25EYXRhIiwidXBkYXRlX2RhdGEiLCJyZWNydWl0X2kiLCJyZWNydWl0X2luZm8iLCJncm91cF9pZCIsImRyYXdfbGlzdCIsImRyYXdfaSIsImRyYXdfaW5mbyIsInRpbWVzIiwia3ZfbGlzdCIsImt2X2kiLCJrdl9pbmZvIiwia2V5IiwiUmVjcnVpdF9LZXkiLCJGcmVlX0NvdW50IiwidmFsIiwiZnJlZV90aW1lcyIsIkZyZWVfVGltZSIsImZyZWVfY2RfZW5kIiwiZ2NvcmUiLCJHbG9iYWxFdmVudCIsImZpcmUiLCJVcGRhdGVTdW1tb25EYXRhRXZlbnQiLCJzZXRSZWNydWl0RGF0YSIsImdldFJlY3J1aXREYXRhIiwiZGF0YSIsImRhdGFfbGlzdCIsInVwZGF0ZUV4dGVuZERhdGEiLCJnZXRTdW1tb25Hcm91cERhdGEiLCJncm91cF9kYXRhIiwicmVjcnVpdF9jb25maWciLCJDb25maWciLCJkYXRhX3BhcnRuZXJzdW1tb25fZGF0YSIsImdyb3VwX2l0ZW0iLCJyZWNydWl0X2NvbmZpZ19pbmZvIiwiaXNfc2hvdyIsImdldFN1bW1vblByb3RvRGF0YUJ5R3JvdXBJRCIsImNvbmZpZ19kYXRhIiwicHVzaCIsInNvcnRCeUlkIiwicHJvIiwib2JqMSIsIm9iajIiLCJjX3ZhbDEiLCJjX3ZhbDIiLCJzdW1tb25fZ3JvdXBfZGF0YSIsInNvcnQiLCJnZXRTY29yZVN1bW1vbk5lZWRDb3VudCIsImNvdW50Iiwic2NvcmVfcmVjcnVpdF9pbmZvIiwiU3VtbW9uX1R5cGUiLCJTY29yZSIsImV4Y2hhbmdlX29uY2UiLCJ1cGRhdGVNYWluU2NlbmVSZWRQb2ludCIsIk1haW5TY2VuZUNvbnRyb2xsZXIiLCJTY2VuZUNvbnN0IiwiaXNfc2hvd19yZWQiLCJkcmF3X2RhdGEiLCJ0aW1lX2kiLCJ0aW1lX2luZm8iLCJCYWNrcGFja0NvbnRyb2xsZXIiLCJub3JtYWxfaXRlbV9udW0iLCJnZXRJbnN0YW5jZSIsImdldE1vZGVsIiwiZ2V0SXRlbU51bUJ5QmlkIiwiTm9ybWFsX0lkIiwiYWR2YW5jZWRfaXRlbV9udW0iLCJzZXRCdWlsZFJlZFN0YXR1cyIsIkNlbnRlclNjZW5lQnVpbGQiLCJzdW1tb24iLCJzZXRPcGVuUGFydG5lclN1bW1vbkZsYWciLCJzdGF0dXMiLCJSZWRNZ3IiLCJhZGRDYWxIYW5kbGVyIiwiYmluZCIsIlJlZElkcyIsIlBhcnRuZXJTdW1tb24iLCJjbGlja0ludGVydmFsU3RhdHVzIiwidXBkYXRlVGltZSIsImdldENsaWNrU3RhdHVzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLGtCQUFrQixHQUFHQyxPQUFPLENBQUMscUJBQUQsQ0FBaEM7O0FBQ0EsSUFBSUMsa0JBQWtCLEdBQUdELE9BQU8sQ0FBQyxxQkFBRCxDQUFoQzs7QUFFQSxJQUFJRSxrQkFBa0IsR0FBR0MsRUFBRSxDQUFDQyxLQUFILENBQVM7QUFDOUIsYUFBU0MsU0FEcUI7QUFFOUJDLEVBQUFBLElBQUksRUFBRSxnQkFBWSxDQUNqQixDQUg2QjtBQUs5QkMsRUFBQUEsVUFBVSxFQUFFO0FBQ1JDLElBQUFBLFlBQVksRUFBRSxJQUROO0FBQ29CO0FBQzVCQyxJQUFBQSxZQUFZLEVBQUUs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LFdBQXBCLEdBQWtDSyxpQkFBbEMsQ0FBb0RaLFVBQVUsQ0FBQ2EsZ0JBQVgsQ0FBNEJDLE1BQWhGLEVBQXdGYixXQUF4RjtBQUNILEdBbks2QjtBQXNLOUJjLEVBQUFBLHdCQUF3QixFQUFFLGtDQUFTQyxNQUFULEVBQWlCO0FBQ3ZDLFNBQUs5RSxhQUFMLEdBQXFCOEUsTUFBckI7QUFDQSxTQUFLeEUsY0FBTDtBQUNILEdBeks2QjtBQTJLOUJBLEVBQUFBLGNBQWMsRUFBRSwwQkFBVztBQUN2QnlFLElBQUFBLE1BQU0sQ0FBQ1YsV0FBUCxHQUFxQlcsYUFBckIsQ0FBbUMsS0FBS3BCLHVCQUFMLENBQTZCcUIsSUFBN0IsQ0FBa0MsSUFBbEMsQ0FBbkMsRUFBNEVDLE1BQU0sQ0FBQ0MsYUFBbkY7QUFDSCxHQTdLNkI7QUE4SzlCO0FBQ0FDLEVBQUFBLG1CQS9LOEIsK0JBK0tWTixNQS9LVSxFQStLSDtBQUN2QixTQUFLTyxVQUFMLEdBQWtCUCxNQUFsQjtBQUNILEdBakw2QjtBQWtMOUJRLEVBQUFBLGNBbEw4Qiw0QkFrTGQ7QUFDWixXQUFPLEtBQUtELFVBQVo7QUFDSDtBQXBMNkIsQ0FBVCxDQUF6QiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEBhdXRob3I6IHh4eEBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgICDov5nph4zloavlhpnor6bnu4bor7TmmI4s5Li76KaB5aGr5YaZ6K+l5qih5Z2X55qE5Yqf6IO9566A6KaBXG4vLyA8YnIvPkNyZWF0ZToge0RBVEV9XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxudmFyIFBhcnRuZXJzdW1tb25FdmVudCA9IHJlcXVpcmUoXCJwYXJ0bmVyc3VtbW9uX2V2ZW50XCIpO1xudmFyIFBhcnRuZXJzdW1tb25Db25zdCA9IHJlcXVpcmUoXCJwYXJ0bmVyc3VtbW9uX2NvbnN0XCIpO1xuXG52YXIgUGFydG5lcnN1bW1vbk1vZGVsID0gY2MuQ2xhc3Moe1xuICAgIGV4dGVuZHM6IEJhc2VDbGFzcyxcbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgfSxcblxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgcmVjcnVpdF9saXN0OiBudWxsLCAgICAgICAgIC8vIOWNoeW6k+eahOaVsOaNrlxuICAgICAgICByZWNydWl0X2RhdGE6IG51bGwsICAgICAgICAgLy8g5Y+s5ZSk57uT5p6cXG4gICAgICAgIGhhZF9vcGVuX3ZpZXc6IGZhbHNlLFxuICAgIH0sXG5cbiAgICBpbml0Q29uZmlnOiBmdW5jdGlvbiAoKSB7XG5cbiAgICB9LFxuXG4gICAgc2V0U3VtbW9uRGF0YTogZnVuY3Rpb24oc3VtbW9uX2RhdGEpIHtcbiAgICAgICAgaWYgKCFzdW1tb25fZGF0YSkgcmV0dXJuO1xuICAgICAgICB0aGlzLnJlY3J1aXRfbGlzdCA9IHN1bW1vbl9kYXRhLnJlY3J1aXRfbGlzdDtcbiAgICAgICAgdGhpcy5zZXRTaGFyZURhdGEoc3VtbW9uX2RhdGEpO1xuICAgICAgICB0aGlzLnVwZGF0ZVJlY3J1aXREYXRhKCk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVSZWRQb2ludCgpO1xuICAgIH0sXG5cbiAgICAvLyDmm7TmlrDlhY3otLnlj6zllKTmrKHmlbDjgIHkuIvmrKHlhY3otLnml7bpl7RcbiAgICB1cGRhdGVTdW1tb25EYXRhOiBmdW5jdGlvbih1cGRhdGVfZGF0YSkge1xuICAgICAgICBpZiAoIXVwZGF0ZV9kYXRhKSByZXR1cm47XG4gICAgICAgIGlmICghdGhpcy5yZWNydWl0X2xpc3QpIHJldHVybjsgXG4gICAgICAgIGZvciAodmFyIHJlY3J1aXRfaSBpbiB0aGlzLnJlY3J1aXRfbGlzdCkge1xuICAgICAgICAgICAgdmFyIHJlY3J1aXRfaW5mbyA9IHRoaXMucmVjcnVpdF9saXN0W3JlY3J1aXRfaV07XG4gICAgICAgICAgICBpZiAocmVjcnVpdF9pbmZvLmdyb3VwX2lkID09PSB1cGRhdGVfZGF0YS5ncm91cF9pZCAmJiByZWNydWl0X2luZm8uZHJhd19saXN0KSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgZHJhd19pIGluIHJlY3J1aXRfaW5mby5kcmF3X2xpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRyYXdfaW5mbyA9IHJlY3J1aXRfaW5mby5kcmF3X2xpc3RbZHJhd19pXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRyYXdfaW5mby50aW1lcyA9PT0gMSAmJiBkcmF3X2luZm8ua3ZfbGlzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga3ZfaSBpbiBkcmF3X2luZm8ua3ZfbGlzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrdl9pbmZvID0gZHJhd19pbmZvLmt2X2xpc3Rba3ZfaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGt2X2luZm8ua2V5ID09IFBhcnRuZXJzdW1tb25Db25zdC5SZWNydWl0X0tleS5GcmVlX0NvdW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrdl9pbmZvLnZhbCA9IHVwZGF0ZV9kYXRhLmZyZWVfdGltZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGt2X2luZm8ua2V5ID09IFBhcnRuZXJzdW1tb25Db25zdC5SZWNydWl0X0tleS5GcmVlX1RpbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt2X2luZm8udmFsID0gdXBkYXRlX2RhdGEuZnJlZV9jZF9lbmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVSZWRQb2ludCgpO1xuICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKFBhcnRuZXJzdW1tb25FdmVudC5VcGRhdGVTdW1tb25EYXRhRXZlbnQsIHVwZGF0ZV9kYXRhKTtcbiAgICB9LFxuXG4gICAgc2V0UmVjcnVpdERhdGE6IGZ1bmN0aW9uKHJlY3J1aXRfZGF0YSkge1xuICAgICAgICB0aGlzLnJlY3J1aXRfZGF0YSA9IHJlY3J1aXRfZGF0YVxuICAgIH0sXG5cbiAgICBnZXRSZWNydWl0RGF0YTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlY3J1aXRfZGF0YVxuICAgIH0sXG5cbiAgICBzZXRTaGFyZURhdGE6IGZ1bmN0aW9uKGRhdGEpIHtcblxuICAgIH0sXG5cbiAgICB1cGRhdGVSZWNydWl0RGF0YTogZnVuY3Rpb24oZGF0YV9saXN0KSB7XG5cbiAgICB9LFxuXG4gICAgLy8g5pu05paw5p+Q5Liq5Y2h5bqT55qEQ0Tml7bpl7TjgIHmrKHmlbDnrYnmlbDmja5cbiAgICB1cGRhdGVFeHRlbmREYXRhOiBmdW5jdGlvbigpIHtcblxuICAgIH0sXG5cbiAgICAvLyDojrflj5bljaHlupPmlbDmja5cbiAgICBnZXRTdW1tb25Hcm91cERhdGE6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZ3JvdXBfZGF0YSA9IFtdXG4gICAgICAgIHZhciByZWNydWl0X2NvbmZpZyA9IENvbmZpZy5yZWNydWl0X2RhdGEuZGF0YV9wYXJ0bmVyc3VtbW9uX2RhdGE7XG5cbiAgICAgICAgdmFyIGdyb3VwX2l0ZW0gPSBudWxsO1xuICAgICAgICB2YXIgcmVjcnVpdF9jb25maWdfaW5mbyA9IG51bGw7XG4gICAgICAgIHZhciBncm91cF9pZCA9IG51bGw7XG4gICAgICAgIGZvciAodmFyIHJlY3J1aXRfaSBpbiByZWNydWl0X2NvbmZpZykge1xuICAgICAgICAgICAgcmVjcnVpdF9jb25maWdfaW5mbyA9IHJlY3J1aXRfY29uZmlnW3JlY3J1aXRfaV07XG4gICAgICAgICAgICBpZiAocmVjcnVpdF9jb25maWdfaW5mby5pc19zaG93ID09PSAwKSB7ICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZ3JvdXBfaWQgPSByZWNydWl0X2NvbmZpZ19pbmZvLmdyb3VwX2lkO1xuICAgICAgICAgICAgICAgIHZhciByZWNydWl0X2RhdGEgPSB0aGlzLmdldFN1bW1vblByb3RvRGF0YUJ5R3JvdXBJRChncm91cF9pZCk7XG4gICAgICAgICAgICAgICAgZ3JvdXBfaXRlbSA9IHt9O1xuICAgICAgICAgICAgICAgIGdyb3VwX2l0ZW0uY29uZmlnX2RhdGEgPSByZWNydWl0X2NvbmZpZ1tyZWNydWl0X2ldO1xuICAgICAgICAgICAgICAgIGdyb3VwX2l0ZW0ucmVjcnVpdF9kYXRhID0gcmVjcnVpdF9kYXRhO1xuICAgICAgICAgICAgICAgIGdyb3VwX2l0ZW0uZ3JvdXBfaWQgPSByZWNydWl0X2NvbmZpZ19pbmZvLmdyb3VwX2lkO1xuICAgICAgICAgICAgICAgIGdyb3VwX2RhdGEucHVzaChncm91cF9pdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOaOkuW6j1xuICAgICAgICBmdW5jdGlvbiBzb3J0QnlJZChwcm8pIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihvYmoxLCBvYmoyKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNfdmFsMSA9IG9iajEuY29uZmlnX2RhdGFbcHJvXTtcbiAgICAgICAgICAgICAgICB2YXIgY192YWwyID0gb2JqMi5jb25maWdfZGF0YVtwcm9dO1xuICAgICAgICAgICAgICAgIGlmIChjX3ZhbDEgPCBjX3ZhbDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAxXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHN1bW1vbl9ncm91cF9kYXRhID0gZ3JvdXBfZGF0YS5zb3J0KHNvcnRCeUlkKFwic29ydF9pZFwiKSk7XG4gICAgICAgIHJldHVybiBzdW1tb25fZ3JvdXBfZGF0YVxuICAgIH0sXG5cbiAgICBnZXRTdW1tb25Qcm90b0RhdGFCeUdyb3VwSUQ6IGZ1bmN0aW9uKGdyb3VwX2lkKSB7XG4gICAgICAgIGlmICghZ3JvdXBfaWQgfHwgIXRoaXMucmVjcnVpdF9saXN0KSByZXR1cm47XG4gICAgICAgIHZhciByZWNydWl0X2RhdGEgPSBudWxsO1xuICAgICAgICBmb3IgKHZhciByZWNydWl0X2kgaW4gdGhpcy5yZWNydWl0X2xpc3QpIHtcbiAgICAgICAgICAgIHJlY3J1aXRfZGF0YSA9IHRoaXMucmVjcnVpdF9saXN0W3JlY3J1aXRfaV07XG4gICAgICAgICAgICBpZiAocmVjcnVpdF9kYXRhLmdyb3VwX2lkID09PSBncm91cF9pZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWNydWl0X2RhdGFcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICBnZXRTY29yZVN1bW1vbk5lZWRDb3VudDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBjb3VudCA9IDA7XG4gICAgICAgIHZhciBzY29yZV9yZWNydWl0X2luZm8gPSBDb25maWcucmVjcnVpdF9kYXRhLmRhdGFfcGFydG5lcnN1bW1vbl9kYXRhW1BhcnRuZXJzdW1tb25Db25zdC5TdW1tb25fVHlwZS5TY29yZV07XG4gICAgICAgIGlmIChzY29yZV9yZWNydWl0X2luZm8uZXhjaGFuZ2Vfb25jZSAmJiBzY29yZV9yZWNydWl0X2luZm8uZXhjaGFuZ2Vfb25jZVswXSkge1xuICAgICAgICAgICAgY291bnQgPSBzY29yZV9yZWNydWl0X2luZm8uZXhjaGFuZ2Vfb25jZVswXVsxXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY291bnRcbiAgICB9LFxuXG4gICAgLy8g5pu05paw57qi54K554q25oCBXG4gICAgdXBkYXRlTWFpblNjZW5lUmVkUG9pbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgTWFpblNjZW5lQ29udHJvbGxlciA9IHJlcXVpcmUoXCJtYWluc2NlbmVfY29udHJvbGxlclwiKTtcbiAgICAgICAgdmFyIFNjZW5lQ29uc3QgPSByZXF1aXJlKFwic2NlbmVfY29uc3RcIik7XG4gICAgICAgIC8vIOaYr+WQpuacieWFjei0uVxuICAgICAgICB2YXIgaXNfc2hvd19yZWQgPSBmYWxzZTtcbiAgICAgICAgZm9yICh2YXIgcmVjcnVpdF9pIGluIHRoaXMucmVjcnVpdF9saXN0KSB7XG4gICAgICAgICAgICB2YXIgZ3JvdXBfZGF0YSA9IHRoaXMucmVjcnVpdF9saXN0W3JlY3J1aXRfaV07XG4gICAgICAgICAgICBpZiAoZ3JvdXBfZGF0YS5kcmF3X2xpc3QpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBkcmF3X2kgaW4gZ3JvdXBfZGF0YS5kcmF3X2xpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRyYXdfZGF0YSA9IGdyb3VwX2RhdGEuZHJhd19saXN0W2RyYXdfaV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChkcmF3X2RhdGEua3ZfbGlzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgdGltZV9pIGluIGRyYXdfZGF0YS5rdl9saXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpbWVfaW5mbyA9IGRyYXdfZGF0YS5rdl9saXN0W3RpbWVfaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpbWVfaW5mby5rZXkgPT0gUGFydG5lcnN1bW1vbkNvbnN0LlJlY3J1aXRfS2V5LkZyZWVfQ291bnQgJiYgdGltZV9pbmZvLnZhbCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfc2hvd19yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOWmguaenOayoeacieWFjei0ueWIh+ayoeacieS7juaJk+W8gOi/h+eVjOmdouS8gem5hemBk+WFt+aVsOmHj+WFhei2s+WImeaPkOekuue6oueCuVxuICAgICAgICBpZiAoIWlzX3Nob3dfcmVkICYmICF0aGlzLmhhZF9vcGVuX3ZpZXcpIHtcbiAgICAgICAgICAgIHZhciBCYWNrcGFja0NvbnRyb2xsZXIgPSByZXF1aXJlKFwiYmFja3BhY2tfY29udHJvbGxlclwiKTtcbiAgICAgICAgICAgIHZhciBub3JtYWxfaXRlbV9udW0gPSBCYWNrcGFja0NvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRNb2RlbCgpLmdldEl0ZW1OdW1CeUJpZChQYXJ0bmVyc3VtbW9uQ29uc3QuTm9ybWFsX0lkKTtcbiAgICAgICAgICAgIHZhciBhZHZhbmNlZF9pdGVtX251bSA9IEJhY2twYWNrQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldE1vZGVsKCkuZ2V0SXRlbU51bUJ5QmlkKFBhcnRuZXJzdW1tb25Db25zdC5Ob3JtYWxfSWQpOyAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKG5vcm1hbF9pdGVtX251bSA+IDAgfHwgYWR2YW5jZWRfaXRlbV9udW0gPiAwKVxuICAgICAgICAgICAgICAgIGlzX3Nob3dfcmVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIE1haW5TY2VuZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5zZXRCdWlsZFJlZFN0YXR1cyhTY2VuZUNvbnN0LkNlbnRlclNjZW5lQnVpbGQuc3VtbW9uLCBpc19zaG93X3JlZCk7XG4gICAgfSxcblxuXG4gICAgc2V0T3BlblBhcnRuZXJTdW1tb25GbGFnOiBmdW5jdGlvbihzdGF0dXMpIHtcbiAgICAgICAgdGhpcy5oYWRfb3Blbl92aWV3ID0gc3RhdHVzO1xuICAgICAgICB0aGlzLnVwZGF0ZVJlZFBvaW50KCkgICAgXG4gICAgfSxcblxuICAgIHVwZGF0ZVJlZFBvaW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgUmVkTWdyLmdldEluc3RhbmNlKCkuYWRkQ2FsSGFuZGxlcih0aGlzLnVwZGF0ZU1haW5TY2VuZVJlZFBvaW50LmJpbmQodGhpcyksIFJlZElkcy5QYXJ0bmVyU3VtbW9uKTtcbiAgICB9LFxuICAgIC8v5b+r6YCf54K55Ye76Ze06ZqUXG4gICAgY2xpY2tJbnRlcnZhbFN0YXR1cyhzdGF0dXMpe1xuICAgICAgICB0aGlzLnVwZGF0ZVRpbWUgPSBzdGF0dXNcbiAgICB9LFxuICAgIGdldENsaWNrU3RhdHVzKCl7XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVRpbWVcbiAgICB9XG59KTsiXX0=