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
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/guildwar/view/guildwar_position_item.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, '934d8d//01LcqCnjdwEg0Qf', 'guildwar_position_item');
// Scripts/mod/guildwar/view/guildwar_position_item.js
 
"use strict";
 
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
 
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
//     联盟战 据点
// <br/>Create: 2019-05-08 10:14:55
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
var GuildwarConst = require("guildwar_const");
 
var RoleController = require("role_controller");
 
var GuildwarEvent = require("guildwar_event");
 
var Guildwar_position_itemPanel = cc.Class({
  "extends": BasePanel,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("guildwar", "guildwar_position");
  },
  // 可以初始化声明一些变量的
  initConfig: function initConfig() {
    this.star_list = {};
    this.ctrl = require("guildwar_controller").getInstance();
    this.model = this.ctrl.getModel();
    this.color_1 = new cc.Color(123, 194, 244);
    this.color_2 = new cc.Color(244, 140, 123);
  },
  // 初始化一些配置数据,可以用于声明一些变量之类的
  initPanel: function initPanel() {
    var _temp_index;
 
    this.container = this.seekChild("container");
    this.build_sp = this.seekChild("build", cc.Sprite);
    this.name_label_lb = this.seekChild("name_label", cc.Label);
    this.attk_label_lb = this.seekChild("attk_label", cc.Label);
    this.pos_bg_nd = this.seekChild("pos_bg");
    this.pos_label_lb = this.seekChild(this.pos_bg_nd, "pos_label", cc.Label);
    this.image_success_nd = this.seekChild("image_success");
    this.image_success_nd.zIndex = 10;
    this.image_buff = this.seekChild(this.image_success_nd, "image_buff", cc.Sprite);
    this.loadRes(PathTool.getIconPath("bufficon", "2"), function (sp) {
      this.image_buff.spriteFrame = sp;
    }.bind(this));
    var temp_index = (_temp_index = {}, _defineProperty(_temp_index, 1, 3), _defineProperty(_temp_index, 2, 2), _defineProperty(_temp_index, 3, 1), _temp_index);
 
    for (var i = 1; i <= 3; i++) {
      var star = this.seekChild("star_" + i);
 
      if (star) {
        star.active = false;
        var index = temp_index[i];
        this.star_list[index] = star;
      }
    }
 
    if (this.parent_nd) {
      this.setParentIndex(this.parent_nd, this.z_index);
    }
  },
  // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
  registerEvent: function registerEvent() {
    Utils.onTouchEnd(this.container, function () {
      if (this.cur_position_type == GuildwarConst.positions.others && this.data && this.data.pos) {
        var guildwar_status = this.model.getGuildWarStatus();
 
        if (guildwar_status == GuildwarConst.status.settlement) {
          message(Utils.TI18N("本次公会战已结束啦,不能再挑战了哦"));
        } else {
          this.ctrl.openAttkPositionWindow(true, this.data.pos);
        }
      } else if (this.cur_position_type == GuildwarConst.positions.myself && this.data && this.data.pos) {
        var role_vo = RoleController.getInstance().getRoleVo();
 
        if (role_vo.gid != 0) {
          this.ctrl.openDefendLookWindow(true, role_vo.gid, role_vo.gsrv_id, this.data.pos); // 我方据点直接打开据点防守记录
        }
      }
    }.bind(this), 1);
  },
  setData: function setData(data, position_type) {
    if (this.data != null) {
      if (this.update_self_event != null) {
        this.data.unbind(this.update_self_event);
        this.update_self_event = null;
      }
    }
 
    if (data != null) {
      this.data = data;
 
      if (this.update_self_event == null) {
        this.update_self_event = this.data.bind(GuildwarEvent.UpdateGuildWarPositionDataEvent, function () {
          this.onShow();
        }, this);
      }
    }
 
    this.cur_position_type = position_type;
    if (this.root_wnd) this.onShow();
  },
  // 预制体加载完成之后,添加到对应主节点之后的回调可以设置一些数据了
  onShow: function onShow(params) {
    if (this.data == null) return;
 
    if (this.data.hp == 0) {
      this.loadRes(PathTool.getUIIconPath("guildwar", "guildwar_1020"), function (sp) {
        this.build_sp.spriteFrame = sp;
      }.bind(this));
 
      if (!this.special_sk) {
        this.special_sk = this.seekChild("special_sk", sp.Skeleton);
        var res = cc.js.formatStr("spine/%s/action.atlas", PathTool.getEffectRes(326));
        this.loadRes(res, function (res_object) {
          this.special_sk.skeletonData = res_object;
          this.special_sk.setAnimation(1, PlayerAction.action, true);
        }.bind(this));
      }
 
      this.special_sk.node.active = true;
    } else {
      this.loadRes(PathTool.getUIIconPath("guildwar", "guildwar_1017"), function (sp) {
        this.build_sp.spriteFrame = sp;
      }.bind(this));
 
      if (this.special_sk) {
        this.special_sk.node.active = false;
      }
    }
 
    for (var i = 1; i < 4; i++) {
      var star = this.star_list[i];
 
      if (this.data.hp < i) {
        star.active = true;
      } else {
        star.active = false;
      }
    }
 
    this.pos_label_lb.string = this.data.pos;
    var guild_srvid = "";
 
    if (this.cur_position_type == GuildwarConst.positions.others) {
      var enemy_baseinfo = this.model.getEnemyGuildWarBaseInfo();
      guild_srvid = enemy_baseinfo.g_sid || "";
    } else {
      var role_vo = RoleController.getInstance().getRoleVo();
      guild_srvid = role_vo.gsrv_id || "";
    }
 
    var index = guild_srvid.search("_");
    var srv_index = 1;
 
    if (index != null) {
      srv_index = guild_srvid.substring(index + 1);
    }
 
    var name_str = cc.js.formatStr("[S%s]%s", srv_index, this.data.name);
    this.name_label_lb.string = name_str;
    this.attk_label_lb.string = Utils.TI18N(cc.js.formatStr("战力:%d", this.data.power));
    this.image_success_nd.active = false;
 
    if (this.cur_position_type == GuildwarConst.positions.myself) {
      this.name_label_lb.node.color = this.color_1;
    } else {
      this.name_label_lb.node.color = this.color_2;
      this.image_success_nd.active = this.data.hp <= 0;
    }
 
    var name_size = this.name_label_lb.node.getContentSize();
    var name_pos_x = this.name_label_lb.node.x;
    this.pos_bg_nd.x = name_pos_x - name_size.width / 2;
  },
  //获取pos
  getPositionPos: function getPositionPos() {
    return this.data.pos;
  },
  suspendAllActions: function suspendAllActions() {
    if (this.data != null) {
      if (this.update_self_event != null) {
        this.data.unbind(this.update_self_event);
        this.update_self_event = null;
      }
 
      this.data = null;
    }
  },
  getPosition: function getPosition() {
    if (this.root_wnd) {
      return cc.v2(this.root_wnd.x, this.root_wnd.y);
    } else {
      return cc.v2(0, 0);
    }
  },
  setParentIndex: function setParentIndex(parent, index) {
    if (this.root_wnd) {
      parent.addChild(this.root_wnd, index);
    } else {
      this.parent_nd = parent;
      this.z_index = index;
    }
  },
  // 面板设置不可见的回调,这里做一些不可见的屏蔽处理
  onHide: function onHide() {},
  // 当面板从主节点释放掉的调用接口,需要手动调用,而且也一定要调用
  onDelete: function onDelete() {
    if (this.special_sk) {
      this.special_sk.setToSetupPose();
      this.special_sk.clearTracks();
    }
 
    this.suspendAllActions();
  }
});
 
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxndWlsZHdhclxcdmlld1xcZ3VpbGR3YXJfcG9zaXRpb25faXRlbS5qcyJdLCJuYW1lcyI6WyJQYXRoVG9vbCIsInJlcXVpcmUiLCJHdWlsZHdhckNvbnN0IiwiUm9sZUNvbnRyb2xsZXIiLCJHdWlsZHdhckV2ZW50IiwiR3VpbGR3YXJfcG9zaXRpb25faXRlbVBhbmVsIiwiY2MiLCJDbGFzcyIsIkJhc2VQYW5lbCIsImN0b3IiLCJwcmVmYWJQYXRoIiwiZ2V0UHJlZmFiUGF0aCIsImluaXRDb25maWciLCJzdGFyX2xpc3QiLCJjdHJsIiwiZ2V0SW5zdGFuY2UiLCJtb2RlbCIsImdldE1vZGVsIiwiY29sb3JfMSIsIkNvbG9yIiwiY29sb3JfMiIsImluaXRQYW5lbCIsImNvbnRhaW5lciIsInNlZWtDaGlsZCIsImJ1aWxkX3NwIiwiU3ByaXRlIiwibmFtZV9sYWJlbF9sYiIsIkxhYmVsIiwiYXR0a19sYWJlbF9sYiIsInBvc19iZ19uZCIsInBvc19sYWJlbF9sYiIsImltYWdlX3N1Y2Nlc3NfbmQiLCJ6SW5kZXgiLCJpbWFnZV9idWZmIiwibG9hZFJlcyIsImdldEljb25QYXRoIiwic3AiLCJzcHJpdGVGcmFtZSIsImJpbmQiLCJ0ZW1wX2luZGV4IiwiaSIsInN0YXIiLCJhY3RpdmUiLCJpbmRleCIsInBhcmVudF9uZCIsInNldFBhcmVudEluZGV4Iiwiel9pbmRleCIsInJlZ2lzdGVyRXZlbnQiLCJVdGlscyIsIm9uVG91Y2hFbmQiLCJjdXJfcG9zaXRpb25fdHlwZSIsInBvc2l0aW9ucyIsIm90aGVycyIsImRhdGEiLCJwb3MiLCJndWlsZHdhcl9zdGF0dXMiLCJnZXRHdWlsZFdhclN0YXR1cyIsInN0YXR1cyIsInNldHRsZW1lbnQiLCJtZXNzYWdlIiwiVEkxOE4iLCJvcGVuQXR0a1Bvc2l0aW9uV2luZG93IiwibXlzZWxmIiwicm9sZV92byIsImdldFJvbGVWbyIsImdpZCIsIm9wZW5EZWZlbmRMb29rV2luZG93IiwiZ3Nydl9pZCIsInNldERhdGEiLCJwb3NpdGlvbl90eXBlIiwidXBkYXRlX3NlbGZfZXZlbnQiLCJ1bmJpbmQiLCJVcGRhdGVHdWlsZFdhclBvc2l0aW9uRGF0YUV2ZW50Iiwib25TaG93Iiwicm9vdF93bmQiLCJwYXJhbXMiLCJocCIsImdldFVJSWNvblBhdGgiLCJzcGVjaWFsX3NrIiwiU2tlbGV0b24iLCJyZXMiLCJqcyIsImZvcm1hdFN0ciIsImdldEVmZmVjdFJlcyIsInJlc19vYmplY3QiLCJza2VsZXRvbkRhdGEiLCJzZXRBbmltYXRpb24iLCJQbGF5ZXJBY3Rpb24iLCJhY3Rpb24iLCJub2RlIiwic3RyaW5nIiwiZ3VpbGRfc3J2aWQiLCJlbmVteV9iYXNlaW5mbyIsImdldEVuZW15R3VpbGRXYXJCYXNlSW5mbyIsImdfc2lkIiwic2VhcmNoIiwic3J2X2luZGV4Iiwic3Vic3RyaW5nIiwibmFtZV9zdHIiLCJuYW1lIiwicG93ZXIiLCJjb2xvciIsIm5hbWVfc2l6ZSIsImdldENvbnRlbnRTaXplIiwibmFtZV9wb3NfeCIsIngiLCJ3aWR0aCIsImdldFBvc2l0aW9uUG9zIiwic3VzcGVuZEFsbEFjdGlvbnMiLCJnZXRQb3NpdGlvbiIsInYyIiwieSIsInBhcmVudCIsImFkZENoaWxkIiwib25IaWRlIiwib25EZWxldGUiLCJzZXRUb1NldHVwUG9zZSIsImNsZWFyVHJhY2tzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSUEsUUFBUSxHQUFHQyxPQUFPLENBQUMsVUFBRCxDQUF0Qjs7QUFDQSxJQUFJQyxhQUFhLEdBQUdELE9BQU8sQ0FBQyxnQkFBRCxDQUEzQjs7QUFDQSxJQUFJRSxjQUFjLEdBQUdGLE9BQU8sQ0FBQyxpQkFBRCxDQUE1Qjs7QUFDQSxJQUFJRyxhQUFhLEdBQUdILE9BQU8sQ0FBQyxnQkFBRCxDQUEzQjs7QUFFQSxJQUFJSSwyQkFBMkIsR0FBR0MsRUFBRSxDQUFDQyxLQUFILENBQVM7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QUtBLGlCQUFMLEdBQXlCLElBQXpCO0FBQ0g7O0FBQ0QsV0FBS2pCLElBQUwsR0FBWSxJQUFaO0FBQ0g7QUFDSixHQXZLc0M7QUF5S3ZDd0QsRUFBQUEsV0FBVyxFQUFFLHVCQUFZO0FBQ3JCLFFBQUksS0FBS25DLFFBQVQsRUFBbUI7QUFDZixhQUFPcEUsRUFBRSxDQUFDd0csRUFBSCxDQUFNLEtBQUtwQyxRQUFMLENBQWMrQixDQUFwQixFQUF1QixLQUFLL0IsUUFBTCxDQUFjcUMsQ0FBckMsQ0FBUDtBQUNILEtBRkQsTUFFTztBQUNILGFBQU96RyxFQUFFLENBQUN3RyxFQUFILENBQU0sQ0FBTixFQUFTLENBQVQsQ0FBUDtBQUNIO0FBQ0osR0EvS3NDO0FBaUx2Q2pFLEVBQUFBLGNBQWMsRUFBRSx3QkFBVW1FLE1BQVYsRUFBa0JyRSxLQUFsQixFQUF5QjtBQUNyQyxRQUFJLEtBQUsrQixRQUFULEVBQW1CO0FBQ2ZzQyxNQUFBQSxNQUFNLENBQUNDLFFBQVAsQ0FBZ0IsS0FBS3ZDLFFBQXJCLEVBQStCL0IsS0FBL0I7QUFDSCxLQUZELE1BRU87QUFDSCxXQUFLQyxTQUFMLEdBQWlCb0UsTUFBakI7QUFDQSxXQUFLbEUsT0FBTCxHQUFlSCxLQUFmO0FBQ0g7QUFDSixHQXhMc0M7QUEwTHZDO0FBQ0F1RSxFQUFBQSxNQUFNLEVBQUUsa0JBQVksQ0FFbkIsQ0E3THNDO0FBK0x2QztBQUNBQyxFQUFBQSxRQUFRLEVBQUUsb0JBQVk7QUFDbEIsUUFBSSxLQUFLckMsVUFBVCxFQUFxQjtBQUNqQixXQUFLQSxVQUFMLENBQWdCc0MsY0FBaEI7QUFDQSxXQUFLdEMsVUFBTCxDQUFnQnVDLFdBQWhCO0FBQ0g7O0FBQ0QsU0FBS1QsaUJBQUw7QUFDSDtBQXRNc0MsQ0FBVCxDQUFsQyIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEBhdXRob3I6IHh4eEBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgIOiBlOebn+aImCDmja7ngrlcbi8vIDxici8+Q3JlYXRlOiAyMDE5LTA1LTA4IDEwOjE0OjU1XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxudmFyIFBhdGhUb29sID0gcmVxdWlyZShcInBhdGh0b29sXCIpO1xudmFyIEd1aWxkd2FyQ29uc3QgPSByZXF1aXJlKFwiZ3VpbGR3YXJfY29uc3RcIik7XG52YXIgUm9sZUNvbnRyb2xsZXIgPSByZXF1aXJlKFwicm9sZV9jb250cm9sbGVyXCIpXG52YXIgR3VpbGR3YXJFdmVudCA9IHJlcXVpcmUoXCJndWlsZHdhcl9ldmVudFwiKTtcblxudmFyIEd1aWxkd2FyX3Bvc2l0aW9uX2l0ZW1QYW5lbCA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlUGFuZWwsXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnByZWZhYlBhdGggPSBQYXRoVG9vbC5nZXRQcmVmYWJQYXRoKFwiZ3VpbGR3YXJcIiwgXCJndWlsZHdhcl9wb3NpdGlvblwiKTtcbiAgICB9LFxuXG4gICAgLy8g5Y+v5Lul5Yid5aeL5YyW5aOw5piO5LiA5Lqb5Y+Y6YeP55qEXG4gICAgaW5pdENvbmZpZzogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnN0YXJfbGlzdCA9IHt9O1xuICAgICAgICB0aGlzLmN0cmwgPSByZXF1aXJlKFwiZ3VpbGR3YXJfY29udHJvbGxlclwiKS5nZXRJbnN0YW5jZSgpO1xuICAgICAgICB0aGlzLm1vZGVsID0gdGhpcy5jdHJsLmdldE1vZGVsKCk7XG4gICAgICAgIHRoaXMuY29sb3JfMSA9IG5ldyBjYy5Db2xvcigxMjMsIDE5NCwgMjQ0KTtcbiAgICAgICAgdGhpcy5jb2xvcl8yID0gbmV3IGNjLkNvbG9yKDI0NCwgMTQwLCAxMjMpO1xuICAgIH0sXG5cbiAgICAvLyDliJ3lp4vljJbkuIDkupvphY3nva7mlbDmja4s5Y+v5Lul55So5LqO5aOw5piO5LiA5Lqb5Y+Y6YeP5LmL57G755qEXG4gICAgaW5pdFBhbmVsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gdGhpcy5zZWVrQ2hpbGQoXCJjb250YWluZXJcIik7XG5cbiAgICAgICAgdGhpcy5idWlsZF9zcCA9IHRoaXMuc2Vla0NoaWxkKFwiYnVpbGRcIiwgY2MuU3ByaXRlKTtcbiAgICAgICAgdGhpcy5uYW1lX2xhYmVsX2xiID0gdGhpcy5zZWVrQ2hpbGQoXCJuYW1lX2xhYmVsXCIsIGNjLkxhYmVsKTtcbiAgICAgICAgdGhpcy5hdHRrX2xhYmVsX2xiID0gdGhpcy5zZWVrQ2hpbGQoXCJhdHRrX2xhYmVsXCIsIGNjLkxhYmVsKTtcbiAgICAgICAgdGhpcy5wb3NfYmdfbmQgPSB0aGlzLnNlZWtDaGlsZChcInBvc19iZ1wiKTtcbiAgICAgICAgdGhpcy5wb3NfbGFiZWxfbGIgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLnBvc19iZ19uZCwgXCJwb3NfbGFiZWxcIiwgY2MuTGFiZWwpO1xuICAgICAgICB0aGlzLmltYWdlX3N1Y2Nlc3NfbmQgPSB0aGlzLnNlZWtDaGlsZChcImltYWdlX3N1Y2Nlc3NcIik7XG4gICAgICAgIHRoaXMuaW1hZ2Vfc3VjY2Vzc19uZC56SW5kZXggPSAxMDtcbiAgICAgICAgdGhpcy5pbWFnZV9idWZmID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5pbWFnZV9zdWNjZXNzX25kLFwiaW1hZ2VfYnVmZlwiLCBjYy5TcHJpdGUpO1xuICAgICAgICB0aGlzLmxvYWRSZXMoUGF0aFRvb2wuZ2V0SWNvblBhdGgoXCJidWZmaWNvblwiLCBcIjJcIiksIGZ1bmN0aW9uIChzcCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2VfYnVmZi5zcHJpdGVGcmFtZSA9IHNwO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICB2YXIgdGVtcF9pbmRleCA9IHtcbiAgICAgICAgICAgIFsxXTogMyxcbiAgICAgICAgICAgIFsyXTogMixcbiAgICAgICAgICAgIFszXTogMVxuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IDM7IGkrKykge1xuICAgICAgICAgICAgdmFyIHN0YXIgPSB0aGlzLnNlZWtDaGlsZChcInN0YXJfXCIgKyBpKTtcbiAgICAgICAgICAgIGlmIChzdGFyKSB7XG4gICAgICAgICAgICAgICAgc3Rhci5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0ZW1wX2luZGV4W2ldO1xuICAgICAgICAgICAgICAgIHRoaXMuc3Rhcl9saXN0W2luZGV4XSA9IHN0YXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuXG4gICAgICAgIGlmICh0aGlzLnBhcmVudF9uZCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQYXJlbnRJbmRleCh0aGlzLnBhcmVudF9uZCwgdGhpcy56X2luZGV4KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDms6jlhozkuovku7bnm5HlkKznmoTmjqXlj6Ms5LiN6ZyA6KaB5omL5Yqo6LCD55SoLOWmguaenOaYr+S9v+eUqGdjb3JlLkdsb2JhbEV2ZW5055uR5ZCsLOWPr+S7peebtOaOpeiwg+eUqGFkZEdsb2JhbEV2ZW50XG4gICAgcmVnaXN0ZXJFdmVudDogZnVuY3Rpb24gKCkge1xuICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMuY29udGFpbmVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJfcG9zaXRpb25fdHlwZSA9PSBHdWlsZHdhckNvbnN0LnBvc2l0aW9ucy5vdGhlcnMgJiYgdGhpcy5kYXRhICYmIHRoaXMuZGF0YS5wb3MpIHtcbiAgICAgICAgICAgICAgICB2YXIgZ3VpbGR3YXJfc3RhdHVzID0gdGhpcy5tb2RlbC5nZXRHdWlsZFdhclN0YXR1cygpO1xuICAgICAgICAgICAgICAgIGlmIChndWlsZHdhcl9zdGF0dXMgPT0gR3VpbGR3YXJDb25zdC5zdGF0dXMuc2V0dGxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlKFV0aWxzLlRJMThOKFwi5pys5qyh5YWs5Lya5oiY5bey57uT5p2f5ZWm77yM5LiN6IO95YaN5oyR5oiY5LqG5ZOmXCIpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN0cmwub3BlbkF0dGtQb3NpdGlvbldpbmRvdyh0cnVlLCB0aGlzLmRhdGEucG9zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY3VyX3Bvc2l0aW9uX3R5cGUgPT0gR3VpbGR3YXJDb25zdC5wb3NpdGlvbnMubXlzZWxmICYmIHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEucG9zKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJvbGVfdm8gPSBSb2xlQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldFJvbGVWbygpO1xuICAgICAgICAgICAgICAgIGlmIChyb2xlX3ZvLmdpZCAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3RybC5vcGVuRGVmZW5kTG9va1dpbmRvdyh0cnVlLCByb2xlX3ZvLmdpZCwgcm9sZV92by5nc3J2X2lkLCB0aGlzLmRhdGEucG9zKSAvLyDmiJHmlrnmja7ngrnnm7TmjqXmiZPlvIDmja7ngrnpmLLlrojorrDlvZVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0uYmluZCh0aGlzKSwgMSlcbiAgICB9LFxuXG4gICAgc2V0RGF0YTogZnVuY3Rpb24gKGRhdGEsIHBvc2l0aW9uX3R5cGUpIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodGhpcy51cGRhdGVfc2VsZl9ldmVudCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLnVuYmluZCh0aGlzLnVwZGF0ZV9zZWxmX2V2ZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZV9zZWxmX2V2ZW50ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YSAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgICAgICAgICAgaWYgKHRoaXMudXBkYXRlX3NlbGZfZXZlbnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlX3NlbGZfZXZlbnQgPSB0aGlzLmRhdGEuYmluZChHdWlsZHdhckV2ZW50LlVwZGF0ZUd1aWxkV2FyUG9zaXRpb25EYXRhRXZlbnQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblNob3coKTtcbiAgICAgICAgICAgICAgICB9LCB0aGlzKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VyX3Bvc2l0aW9uX3R5cGUgPSBwb3NpdGlvbl90eXBlO1xuICAgICAgICBpZiAodGhpcy5yb290X3duZClcbiAgICAgICAgICAgIHRoaXMub25TaG93KCk7XG4gICAgfSxcblxuICAgIC8vIOmihOWItuS9k+WKoOi9veWujOaIkOS5i+WQjizmt7vliqDliLDlr7nlupTkuLvoioLngrnkuYvlkI7nmoTlm57osIPlj6/ku6Xorr7nva7kuIDkupvmlbDmja7kuoZcbiAgICBvblNob3c6IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YSA9PSBudWxsKSByZXR1cm5cbiAgICAgICAgaWYgKHRoaXMuZGF0YS5ocCA9PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRSZXMoUGF0aFRvb2wuZ2V0VUlJY29uUGF0aChcImd1aWxkd2FyXCIsIFwiZ3VpbGR3YXJfMTAyMFwiKSwgZnVuY3Rpb24gKHNwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5idWlsZF9zcC5zcHJpdGVGcmFtZSA9IHNwO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICAgICAgaWYgKCF0aGlzLnNwZWNpYWxfc2spIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNwZWNpYWxfc2sgPSB0aGlzLnNlZWtDaGlsZChcInNwZWNpYWxfc2tcIiwgc3AuU2tlbGV0b24pO1xuICAgICAgICAgICAgICAgIHZhciByZXMgPSBjYy5qcy5mb3JtYXRTdHIoXCJzcGluZS8lcy9hY3Rpb24uYXRsYXNcIiwgUGF0aFRvb2wuZ2V0RWZmZWN0UmVzKDMyNikpXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkUmVzKHJlcywgZnVuY3Rpb24gKHJlc19vYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGVjaWFsX3NrLnNrZWxldG9uRGF0YSA9IHJlc19vYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BlY2lhbF9zay5zZXRBbmltYXRpb24oMSwgUGxheWVyQWN0aW9uLmFjdGlvbiwgdHJ1ZSlcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNwZWNpYWxfc2subm9kZS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb2FkUmVzKFBhdGhUb29sLmdldFVJSWNvblBhdGgoXCJndWlsZHdhclwiLCBcImd1aWxkd2FyXzEwMTdcIiksIGZ1bmN0aW9uIChzcCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRfc3Auc3ByaXRlRnJhbWUgPSBzcDtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgICAgIGlmICh0aGlzLnNwZWNpYWxfc2spIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNwZWNpYWxfc2subm9kZS5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IDQ7IGkrKykge1xuICAgICAgICAgICAgdmFyIHN0YXIgPSB0aGlzLnN0YXJfbGlzdFtpXTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGEuaHAgPCBpKSB7XG4gICAgICAgICAgICAgICAgc3Rhci5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdGFyLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wb3NfbGFiZWxfbGIuc3RyaW5nID0gdGhpcy5kYXRhLnBvcztcblxuICAgICAgICB2YXIgZ3VpbGRfc3J2aWQgPSBcIlwiO1xuICAgICAgICBpZiAodGhpcy5jdXJfcG9zaXRpb25fdHlwZSA9PSBHdWlsZHdhckNvbnN0LnBvc2l0aW9ucy5vdGhlcnMpIHtcbiAgICAgICAgICAgIHZhciBlbmVteV9iYXNlaW5mbyA9IHRoaXMubW9kZWwuZ2V0RW5lbXlHdWlsZFdhckJhc2VJbmZvKCk7XG4gICAgICAgICAgICBndWlsZF9zcnZpZCA9IGVuZW15X2Jhc2VpbmZvLmdfc2lkIHx8IFwiXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcm9sZV92byA9IFJvbGVDb250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0Um9sZVZvKCk7XG4gICAgICAgICAgICBndWlsZF9zcnZpZCA9IHJvbGVfdm8uZ3Nydl9pZCB8fCBcIlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGluZGV4ID0gZ3VpbGRfc3J2aWQuc2VhcmNoKFwiX1wiKTtcbiAgICAgICAgdmFyIHNydl9pbmRleCA9IDE7XG4gICAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgICBzcnZfaW5kZXggPSBndWlsZF9zcnZpZC5zdWJzdHJpbmcoaW5kZXggKyAxKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbmFtZV9zdHIgPSBjYy5qcy5mb3JtYXRTdHIoXCJbUyVzXSVzXCIsIHNydl9pbmRleCwgdGhpcy5kYXRhLm5hbWUpO1xuICAgICAgICB0aGlzLm5hbWVfbGFiZWxfbGIuc3RyaW5nID0gbmFtZV9zdHI7XG4gICAgICAgIHRoaXMuYXR0a19sYWJlbF9sYi5zdHJpbmcgPSBVdGlscy5USTE4TihjYy5qcy5mb3JtYXRTdHIoXCLmiJjlips6JWRcIiwgdGhpcy5kYXRhLnBvd2VyKSk7XG5cbiAgICAgICAgdGhpcy5pbWFnZV9zdWNjZXNzX25kLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5jdXJfcG9zaXRpb25fdHlwZSA9PSBHdWlsZHdhckNvbnN0LnBvc2l0aW9ucy5teXNlbGYpIHtcbiAgICAgICAgICAgIHRoaXMubmFtZV9sYWJlbF9sYi5ub2RlLmNvbG9yID0gdGhpcy5jb2xvcl8xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5uYW1lX2xhYmVsX2xiLm5vZGUuY29sb3IgPSB0aGlzLmNvbG9yXzI7XG4gICAgICAgICAgICB0aGlzLmltYWdlX3N1Y2Nlc3NfbmQuYWN0aXZlID0gdGhpcy5kYXRhLmhwIDw9IDA7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG5hbWVfc2l6ZSA9IHRoaXMubmFtZV9sYWJlbF9sYi5ub2RlLmdldENvbnRlbnRTaXplKCk7XG4gICAgICAgIHZhciBuYW1lX3Bvc194ID0gdGhpcy5uYW1lX2xhYmVsX2xiLm5vZGUueDtcbiAgICAgICAgdGhpcy5wb3NfYmdfbmQueCA9IG5hbWVfcG9zX3ggLSBuYW1lX3NpemUud2lkdGggLyAyO1xuICAgIH0sXG5cbiAgICAvL+iOt+WPlnBvc1xuICAgIGdldFBvc2l0aW9uUG9zOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEucG9zXG4gICAgfSxcblxuICAgIHN1c3BlbmRBbGxBY3Rpb25zOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHRoaXMudXBkYXRlX3NlbGZfZXZlbnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS51bmJpbmQodGhpcy51cGRhdGVfc2VsZl9ldmVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVfc2VsZl9ldmVudCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBudWxsO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGdldFBvc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnJvb3Rfd25kKSB7XG4gICAgICAgICAgICByZXR1cm4gY2MudjIodGhpcy5yb290X3duZC54LCB0aGlzLnJvb3Rfd25kLnkpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gY2MudjIoMCwgMCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0UGFyZW50SW5kZXg6IGZ1bmN0aW9uIChwYXJlbnQsIGluZGV4KSB7XG4gICAgICAgIGlmICh0aGlzLnJvb3Rfd25kKSB7XG4gICAgICAgICAgICBwYXJlbnQuYWRkQ2hpbGQodGhpcy5yb290X3duZCwgaW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnRfbmQgPSBwYXJlbnQ7XG4gICAgICAgICAgICB0aGlzLnpfaW5kZXggPSBpbmRleDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDpnaLmnb/orr7nva7kuI3lj6/op4HnmoTlm57osIMs6L+Z6YeM5YGa5LiA5Lqb5LiN5Y+v6KeB55qE5bGP6JS95aSE55CGXG4gICAgb25IaWRlOiBmdW5jdGlvbiAoKSB7XG5cbiAgICB9LFxuXG4gICAgLy8g5b2T6Z2i5p2/5LuO5Li76IqC54K56YeK5pS+5o6J55qE6LCD55So5o6l5Y+jLOmcgOimgeaJi+WKqOiwg+eUqCzogIzkuJTkuZ/kuIDlrpropoHosIPnlKhcbiAgICBvbkRlbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5zcGVjaWFsX3NrKSB7XG4gICAgICAgICAgICB0aGlzLnNwZWNpYWxfc2suc2V0VG9TZXR1cFBvc2UoKTtcbiAgICAgICAgICAgIHRoaXMuc3BlY2lhbF9zay5jbGVhclRyYWNrcygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3VzcGVuZEFsbEFjdGlvbnMoKTtcbiAgICB9LFxufSkiXX0=