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
247
248
249
250
251
252
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/rank/view/rank_main_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, 'ca381dQ479GKaB8XnUcyuYk', 'rank_main_item');
// Scripts/mod/rank/view/rank_main_item.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
//     竖版排行榜排行界面item
// <br/>Create: 2019-03-12 14:47:58
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
var RankConstant = require("rank_constant");
 
var PlayerHead = require("playerhead");
 
var Rank_main_itemPanel = cc.Class({
  "extends": BasePanel,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("rank", "rank_main_item");
  },
  // 可以初始化声明一些变量的
  initConfig: function initConfig() {},
  // 初始化一些配置数据,可以用于声明一些变量之类的
  initPanel: function initPanel() {
    this.main_panel = this.seekChild("main_panel");
    this.bg_sp = this.seekChild("bg", cc.Sprite);
    this.first_icon_sp = this.seekChild("first_icon", cc.Sprite);
    this.name_lb = this.seekChild("name", cc.Label);
    this.rank_rt = this.seekChild("rank", cc.RichText);
    this.union_icon = this.seekChild("union_icon");
    this.union_icon.active = false;
    this.icon_sp = this.seekChild("icon", cc.Sprite);
    this.icon_sp.node.active = false;
  },
  // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
  registerEvent: function registerEvent() {
    this.root_wnd.on(cc.Node.EventType.TOUCH_END, function () {
      if (!this.data || Utils.next(this.data) == null) {
        message(Utils.TI18N("暂无排名数据"));
        return;
      }
 
      if (this.call_fun) {
        this.call_fun(this, this.data);
      }
    }, this);
  },
  setData: function setData(data) {
    this.data = data;
    if (this.root_wnd) this.onShow();
  },
  // 预制体加载完成之后,添加到对应主节点之后的回调可以设置一些数据了
  onShow: function onShow() {
    if (this.data == null) return;
    this.showActionIcon(false);
    var data = this.data;
    this.rank_type = this.data.type;
    var res_id = PathTool.getBigBg("txt_cn_rank_" + this.rank_type, null, "rank");
 
    if (this.item_res_id != res_id) {
      this.item_res_id = res_id;
      this.loadRes(res_id, function (sf_obj) {
        this.bg_sp.spriteFrame = sf_obj;
      }.bind(this));
    }
 
    if (this.data.val1 != 0) {
      this.first_icon_sp.node.active = true;
      var name = this.data.name;
 
      if (name == "") {
        name = Utils.TI18N("暂无排名");
      } else {
        if (this.is_cluster == true) {
          name = Utils.transformNameByServ(this.data.name, this.data.srv_id);
        }
      }
 
      this.name_lb.string = name;
      this.name_lb.node.setPosition(cc.v2(125, 38));
      if (!this.data || Utils.next(this.data) == null) return;
 
      if (this.rank_type != RankConstant.RankType.union) {
        if (!this.player_head) {
          this.player_head = new PlayerHead();
          this.player_head.setParent(this.main_panel);
          this.player_head.show();
          this.player_head.setScale(0.6);
          this.player_head.setPosition(88, 38);
        }
 
        this.player_head.setHeadRes(this.data.face_id);
        var avatar_bid = this.data.avatar_bid;
        this.player_head.setFrameRes(avatar_bid);
 
        if (this.union_icon) {
          this.union_icon.active = false;
        }
 
        this.player_head.setVisible(true);
      } else {
        this.union_icon.active = true;
 
        if (this.player_head) {
          this.player_head.setVisible(false);
        }
      }
 
      this.icon_sp.node.active = false;
      this.rank_rt.node.x = 327;
      var str = "";
 
      if (this.rank_type == RankConstant.RankType.arena) {
        var res = PathTool.getItemRes(8);
        var val = this.data.val1 || 0;
        this.loadRes(res, function (sf_obj) {
          this.icon_sp.spriteFrame = sf_obj;
        }.bind(this));
        this.icon_sp.node.active = true;
        this.icon_sp.node.scale = 0.3;
        this.rank_rt.node.x = 360;
        str = String(val);
      } else if (this.rank_type == RankConstant.RankType.drama) {
        var dungeon_id = this.data.val1 | 0;
        var config = gdata("dungeon_data", "data_drama_dungeon_info", [dungeon_id]);
 
        if (config) {
          str = config.name;
        }
      } else if (this.rank_type == RankConstant.RankType.power || this.rank_type == RankConstant.RankType.action_partner || this.rank_type == RankConstant.RankType.colors_tone) {
        var res = PathTool.getCommonIcomPath("common_90001");
        this.loadRes(res, function (sf_obj) {
          this.icon_sp.spriteFrame = sf_obj;
        }.bind(this));
        this.icon_sp.node.active = true;
        this.icon_sp.node.scale = 0.9;
        this.rank_rt.node.x = 360;
        var val = this.data.val1 || 0;
        str = String(val);
 
        if (this.rank_type == RankConstant.RankType.action_partner) {
          this.showActionIcon(true);
        }
      } else if (this.rank_type == RankConstant.RankType.tower) {
        var val = this.data.val1 || 0;
        str = cc.js.formatStr("通关层数:%s", val);
      } else if (this.rank_type == RankConstant.RankType.union) {
        name = this.data.guild_name || "";
        var val = this.data.val1 || 0;
        str = cc.js.formatStr("总战力:%s", val);
      } else if (this.rank_type == RankConstant.RankType.star_power) {
        var val = this.data.val1 || 0;
        str = cc.js.formatStr("评分:%s", val);
      } else if (this.rank_type == RankConstant.RankType.action_star) {
        var val = this.data.val1 || 0;
        str = cc.js.formatStr("评分:%s", val);
        this.showActionIcon(true);
      } else if (this.rank_type == RankConstant.RankType.action_adventure) {
        var val = this.data.val1 || 0;
        str = cc.js.formatStr("神界探索度:%s", val);
        this.showActionIcon(true);
      } else if (this.rank_type == RankConstant.RankType.hallows_power) {
        var val = this.data.val1 || 0;
        str = cc.js.formatStr("圣器战力:%s", val);
      }
 
      this.name_lb.string = name;
      this.name_lb.node.setPosition(cc.v2(125, 55));
      this.rank_rt.string = str;
    } else {
      this.name_lb.string = Utils.TI18N("虚位以待");
      this.name_lb.node.setPosition(cc.v2(25, 35));
      this.rank_rt.string = "";
      this.first_icon_sp.node.active = false;
 
      if (this.union_icon) {
        this.union_icon.active = false;
      }
 
      if (this.player_head) {
        this.player_head.setVisible(false);
      }
    }
  },
  setExtendData: function setExtendData(is_cluster) {
    this.is_cluster = is_cluster;
  },
  //活动标签
  showActionIcon: function showActionIcon(bool) {
    if (bool == false && !this.action_icon) return;
 
    if (!this.action_icon) {
      this.action_icon = this.seekChild("action_icon");
      this.action_label = this.seekChild("action_label");
    }
 
    this.action_icon.active = bool;
    this.action_label.active = bool;
  },
  clickHandler: function clickHandler() {
    if (this.call_fun) {
      this.call_fun(this.data);
    }
  },
  addCallBack: function addCallBack(call_fun) {
    this.call_fun = call_fun;
  },
  setSelectStatus: function setSelectStatus(bool) {// this.select
  },
  setVisibleStatus: function setVisibleStatus(bool) {
    this.setVisible(bool);
  },
  getRankIndex: function getRankIndex() {
    return this.rank_type || 1;
  },
  // 面板设置不可见的回调,这里做一些不可见的屏蔽处理
  onHide: function onHide() {},
  // 当面板从主节点释放掉的调用接口,需要手动调用,而且也一定要调用
  onDelete: function onDelete() {
    if (this.player_head) {
      this.player_head.deleteMe();
      this.player_head = null;
    }
  }
});
 
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxyYW5rXFx2aWV3XFxyYW5rX21haW5faXRlbS5qcyJdLCJuYW1lcyI6WyJQYXRoVG9vbCIsInJlcXVpcmUiLCJSYW5rQ29uc3RhbnQiLCJQbGF5ZXJIZWFkIiwiUmFua19tYWluX2l0ZW1QYW5lbCIsImNjIiwiQ2xhc3MiLCJCYXNlUGFuZWwiLCJjdG9yIiwicHJlZmFiUGF0aCIsImdldFByZWZhYlBhdGgiLCJpbml0Q29uZmlnIiwiaW5pdFBhbmVsIiwibWFpbl9wYW5lbCIsInNlZWtDaGlsZCIsImJnX3NwIiwiU3ByaXRlIiwiZmlyc3RfaWNvbl9zcCIsIm5hbWVfbGIiLCJMYWJlbCIsInJhbmtfcnQiLCJSaWNoVGV4dCIsInVuaW9uX2ljb24iLCJhY3RpdmUiLCJpY29uX3NwIiwibm9kZSIsInJlZ2lzdGVyRXZlbnQiLCJyb290X3duZCIsIm9uIiwiTm9kZSIsIkV2ZW50VHlwZSIsIlRPVUNIX0VORCIsImRhdGEiLCJVdGlscyIsIm5leHQiLCJtZXNzYWdlIiwiVEkxOE4iLCJjYWxsX2Z1biIsInNldERhdGEiLCJvblNob3ciLCJzaG93QWN0aW9uSWNvbiIsInJhbmtfdHlwZSIsInR5cGUiLCJyZXNfaWQiLCJnZXRCaWdCZyIsIml0ZW1fcmVzX2lkIiwibG9hZFJlcyIsInNmX29iaiIsInNwcml0ZUZyYW1lIiwiYmluZCIsInZhbDEiLCJuYW1lIiwiaXNfY2x1c3RlciIsInRyYW5zZm9ybU5hbWVCeVNlcnYiLCJzcnZfaWQiLCJzdHJpbmciLCJzZXRQb3NpdGlvbiIsInYyIiwiUmFua1R5cGUiLCJ1bmlvbiIsInBsYXllcl9oZWFkIiwic2V0UGFyZW50Iiwic2hvdyIsInNldFNjYWxlIiwic2V0SGVhZFJlcyIsImZhY2VfaWQiLCJhdmF0YXJfYmlkIiwic2V0RnJhbWVSZXMiLCJzZXRWaXNpYmxlIiwieCIsInN0ciIsImFyZW5hIiwicmVzIiwiZ2V0SXRlbVJlcyIsInZhbCIsInNjYWxlIiwiU3RyaW5nIiwiZHJhbWEiLCJkdW5nZW9uX2lkIiwiY29uZmlnIiwiZ2RhdGEiLCJwb3dlciIsImFjdGlvbl9wYXJ0bmVyIiwiY29sb3JzX3RvbmUiLCJnZXRDb21tb25JY29tUGF0aCIsInRvd2VyIiwianMiLCJmb3JtYXRTdHIiLCJndWlsZF9uYW1lIiwic3Rhcl9wb3dlciIsImFjdGlvbl9zdGFyIiwiYWN0aW9uX2FkdmVudHVyZSIsImhhbGxvd3NfcG93ZXIiLCJzZXRFeHRlbmREYXRhIiwiYm9vbCIsImFjdGlvbl9pY29uIiwiYWN0aW9uX2xhYmVsIiwiY2xpY2tIYW5kbGVyIiwiYWRkQ2FsbEJhY2siLCJzZXRTZWxlY3RTdGF0dXMiLCJzZXRWaXNpYmxlU3RhdHVzIiwiZ2V0UmFua0luZGV4Iiwib25IaWRlIiwib25EZWxldGUiLCJkZWxldGVNZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxRQUFRLEdBQUdDLE9BQU8sQ0FBQyxVQUFELENBQXRCOztBQUNBLElBQUlDLFlBQVksR0FBR0QsT0FBTyxDQUFDLGVBQUQsQ0FBMUI7O0FBQ0EsSUFBSUUsVUFBVSxHQUFHRixPQUFPLENBQUMsWUFBRCxDQUF4Qjs7QUFFQSxJQUFJRyxtQkFBbUIsR0FBR0MsRUFBRSxDQUFDQyxLQUFILENBQVM7QUFDL0IsYUFBU0MsU0FEc0I7QUFFL0JDLEVBQUFBLElBQUksRUFBRSxnQkFBWTtBQUNkLFNBQUtDLFVBQUwsR0FBa0JULFFBQVEsQ0FBQ1UsYUFBVCxDQUF1QixNQUF2QixFQUErQixnQkFBL0IsQ0FBbEI7QUFDSCxHQUo4QjtBQU0vQjtBQUNBQyxFQUFBQSxVQUFVLEVBQUUsc0JBQVksQ0FFdkIsQ0FUOEI7QUFXL0I7QUFDQUMsRUFBQUEsU0FBUyxFQUFFLHFCQUFZO0FBQ25CLFNBQUtDLFVBQUwsR0FBa0IsS0FBS0MsU0FBTCxDQUFlLFlBQWYsQ0FBbEI7QUFHQSxTQUFLQyxLQUFMLEdBQWEsS0FBS0QsU0FBTCxDQUFlLElBQWYsRUFBcUJU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QWUsRUFBRSx5QkFBVUwsSUFBVixFQUFnQixDQUM3QjtBQUNILEdBck04QjtBQXVNL0JNLEVBQUFBLGdCQUFnQixFQUFFLDBCQUFVTixJQUFWLEVBQWdCO0FBQzlCLFNBQUsxQixVQUFMLENBQWdCMEIsSUFBaEI7QUFDSCxHQXpNOEI7QUEyTS9CTyxFQUFBQSxZQUFZLEVBQUUsd0JBQVk7QUFDdEIsV0FBTyxLQUFLNUQsU0FBTCxJQUFrQixDQUF6QjtBQUNILEdBN004QjtBQStNL0I7QUFDQTZELEVBQUFBLE1BQU0sRUFBRSxrQkFBWSxDQUVuQixDQWxOOEI7QUFvTi9CO0FBQ0FDLEVBQUFBLFFBQVEsRUFBRSxvQkFBWTtBQUNsQixRQUFHLEtBQUszQyxXQUFSLEVBQW9CO0FBQ2hCLFdBQUtBLFdBQUwsQ0FBaUI0QyxRQUFqQjtBQUNBLFdBQUs1QyxXQUFMLEdBQW1CLElBQW5CO0FBQ0g7QUFDSjtBQTFOOEIsQ0FBVCxDQUExQiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEBhdXRob3I6IHh4eEBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgIOerlueJiOaOkuihjOamnOaOkuihjOeVjOmdoml0ZW1cbi8vIDxici8+Q3JlYXRlOiAyMDE5LTAzLTEyIDE0OjQ3OjU4XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxudmFyIFBhdGhUb29sID0gcmVxdWlyZShcInBhdGh0b29sXCIpO1xudmFyIFJhbmtDb25zdGFudCA9IHJlcXVpcmUoXCJyYW5rX2NvbnN0YW50XCIpO1xudmFyIFBsYXllckhlYWQgPSByZXF1aXJlKFwicGxheWVyaGVhZFwiKTtcblxudmFyIFJhbmtfbWFpbl9pdGVtUGFuZWwgPSBjYy5DbGFzcyh7XG4gICAgZXh0ZW5kczogQmFzZVBhbmVsLFxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wcmVmYWJQYXRoID0gUGF0aFRvb2wuZ2V0UHJlZmFiUGF0aChcInJhbmtcIiwgXCJyYW5rX21haW5faXRlbVwiKTtcbiAgICB9LFxuXG4gICAgLy8g5Y+v5Lul5Yid5aeL5YyW5aOw5piO5LiA5Lqb5Y+Y6YeP55qEXG4gICAgaW5pdENvbmZpZzogZnVuY3Rpb24gKCkge1xuXG4gICAgfSxcblxuICAgIC8vIOWIneWni+WMluS4gOS6m+mFjee9ruaVsOaNrizlj6/ku6XnlKjkuo7lo7DmmI7kuIDkupvlj5jph4/kuYvnsbvnmoRcbiAgICBpbml0UGFuZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5tYWluX3BhbmVsID0gdGhpcy5zZWVrQ2hpbGQoXCJtYWluX3BhbmVsXCIpO1xuXG5cbiAgICAgICAgdGhpcy5iZ19zcCA9IHRoaXMuc2Vla0NoaWxkKFwiYmdcIiwgY2MuU3ByaXRlKTtcbiAgICAgICAgdGhpcy5maXJzdF9pY29uX3NwID0gdGhpcy5zZWVrQ2hpbGQoXCJmaXJzdF9pY29uXCIsIGNjLlNwcml0ZSk7XG4gICAgICAgIHRoaXMubmFtZV9sYiA9IHRoaXMuc2Vla0NoaWxkKFwibmFtZVwiLCBjYy5MYWJlbCk7XG4gICAgICAgIHRoaXMucmFua19ydCA9IHRoaXMuc2Vla0NoaWxkKFwicmFua1wiLCBjYy5SaWNoVGV4dCk7XG4gICAgICAgIHRoaXMudW5pb25faWNvbiA9IHRoaXMuc2Vla0NoaWxkKFwidW5pb25faWNvblwiKTtcbiAgICAgICAgdGhpcy51bmlvbl9pY29uLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmljb25fc3AgPSB0aGlzLnNlZWtDaGlsZChcImljb25cIiwgY2MuU3ByaXRlKTtcbiAgICAgICAgdGhpcy5pY29uX3NwLm5vZGUuYWN0aXZlID0gZmFsc2U7XG4gICAgfSxcblxuICAgIC8vIOazqOWGjOS6i+S7tuebkeWQrOeahOaOpeWPoyzkuI3pnIDopoHmiYvliqjosIPnlKgs5aaC5p6c5piv5L2/55SoZ2NvcmUuR2xvYmFsRXZlbnTnm5HlkKws5Y+v5Lul55u05o6l6LCD55SoYWRkR2xvYmFsRXZlbnRcbiAgICByZWdpc3RlckV2ZW50OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucm9vdF93bmQub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfRU5ELCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGF0YSB8fCBVdGlscy5uZXh0KHRoaXMuZGF0YSkgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UoVXRpbHMuVEkxOE4oXCLmmoLml6DmjpLlkI3mlbDmja5cIikpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jYWxsX2Z1bikge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbF9mdW4odGhpcyx0aGlzLmRhdGEpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHRoaXMpXG4gICAgfSxcblxuICAgIHNldERhdGE6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgICAgIGlmICh0aGlzLnJvb3Rfd25kKVxuICAgICAgICAgICAgdGhpcy5vblNob3coKVxuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI4s5re75Yqg5Yiw5a+55bqU5Li76IqC54K55LmL5ZCO55qE5Zue6LCD5Y+v5Lul6K6+572u5LiA5Lqb5pWw5o2u5LqGXG4gICAgb25TaG93OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGEgPT0gbnVsbCkgcmV0dXJuXG4gICAgICAgIHRoaXMuc2hvd0FjdGlvbkljb24oZmFsc2UpO1xuICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICAgICAgdGhpcy5yYW5rX3R5cGUgPSB0aGlzLmRhdGEudHlwZTtcblxuICAgICAgICB2YXIgcmVzX2lkID0gUGF0aFRvb2wuZ2V0QmlnQmcoXCJ0eHRfY25fcmFua19cIiArIHRoaXMucmFua190eXBlLCBudWxsLCBcInJhbmtcIik7XG4gICAgICAgIGlmICh0aGlzLml0ZW1fcmVzX2lkICE9IHJlc19pZCkge1xuICAgICAgICAgICAgdGhpcy5pdGVtX3Jlc19pZCA9IHJlc19pZDtcbiAgICAgICAgICAgIHRoaXMubG9hZFJlcyhyZXNfaWQsIGZ1bmN0aW9uIChzZl9vYmopIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJnX3NwLnNwcml0ZUZyYW1lID0gc2Zfb2JqO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRhdGEudmFsMSAhPSAwKSB7XG4gICAgICAgICAgICB0aGlzLmZpcnN0X2ljb25fc3Aubm9kZS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIG5hbWUgPSB0aGlzLmRhdGEubmFtZTtcbiAgICAgICAgICAgIGlmIChuYW1lID09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICBuYW1lID0gVXRpbHMuVEkxOE4oXCLmmoLml6DmjpLlkI1cIilcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNfY2x1c3RlciA9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPSBVdGlscy50cmFuc2Zvcm1OYW1lQnlTZXJ2KHRoaXMuZGF0YS5uYW1lLCB0aGlzLmRhdGEuc3J2X2lkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm5hbWVfbGIuc3RyaW5nID0gbmFtZTtcbiAgICAgICAgICAgIHRoaXMubmFtZV9sYi5ub2RlLnNldFBvc2l0aW9uKGNjLnYyKDEyNSwgMzgpKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5kYXRhIHx8IFV0aWxzLm5leHQodGhpcy5kYXRhKSA9PSBudWxsKSByZXR1cm5cbiAgICAgICAgICAgIGlmICh0aGlzLnJhbmtfdHlwZSAhPSBSYW5rQ29uc3RhbnQuUmFua1R5cGUudW5pb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMucGxheWVyX2hlYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbGF5ZXJfaGVhZCA9IG5ldyBQbGF5ZXJIZWFkKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGxheWVyX2hlYWQuc2V0UGFyZW50KHRoaXMubWFpbl9wYW5lbCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGxheWVyX2hlYWQuc2hvdygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYXllcl9oZWFkLnNldFNjYWxlKDAuNik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGxheWVyX2hlYWQuc2V0UG9zaXRpb24oODgsIDM4KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnBsYXllcl9oZWFkLnNldEhlYWRSZXModGhpcy5kYXRhLmZhY2VfaWQpO1xuICAgICAgICAgICAgICAgIHZhciBhdmF0YXJfYmlkID0gdGhpcy5kYXRhLmF2YXRhcl9iaWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5wbGF5ZXJfaGVhZC5zZXRGcmFtZVJlcyhhdmF0YXJfYmlkKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy51bmlvbl9pY29uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5pb25faWNvbi5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5wbGF5ZXJfaGVhZC5zZXRWaXNpYmxlKHRydWUpXG4gICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgICAgdGhpcy51bmlvbl9pY29uLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGxheWVyX2hlYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbGF5ZXJfaGVhZC5zZXRWaXNpYmxlKGZhbHNlKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5pY29uX3NwLm5vZGUuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJhbmtfcnQubm9kZS54ID0gMzI3O1xuICAgICAgICAgICAgdmFyIHN0ciA9IFwiXCI7XG4gICAgICAgICAgICBpZiAodGhpcy5yYW5rX3R5cGUgPT0gUmFua0NvbnN0YW50LlJhbmtUeXBlLmFyZW5hKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlcyA9IFBhdGhUb29sLmdldEl0ZW1SZXMoOCk7XG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IHRoaXMuZGF0YS52YWwxIHx8IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkUmVzKHJlcywgZnVuY3Rpb24gKHNmX29iaikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmljb25fc3Auc3ByaXRlRnJhbWUgPSBzZl9vYmo7XG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICAgICAgICAgIHRoaXMuaWNvbl9zcC5ub2RlLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5pY29uX3NwLm5vZGUuc2NhbGUgPSAwLjM7XG4gICAgICAgICAgICAgICAgdGhpcy5yYW5rX3J0Lm5vZGUueCA9IDM2MDtcbiAgICAgICAgICAgICAgICBzdHIgPSBTdHJpbmcodmFsKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5yYW5rX3R5cGUgPT0gUmFua0NvbnN0YW50LlJhbmtUeXBlLmRyYW1hKSB7XG4gICAgICAgICAgICAgICAgdmFyIGR1bmdlb25faWQgPSB0aGlzLmRhdGEudmFsMSB8IDA7XG4gICAgICAgICAgICAgICAgdmFyIGNvbmZpZyA9IGdkYXRhKFwiZHVuZ2Vvbl9kYXRhXCIsIFwiZGF0YV9kcmFtYV9kdW5nZW9uX2luZm9cIiwgW2R1bmdlb25faWRdKTtcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IGNvbmZpZy5uYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5yYW5rX3R5cGUgPT0gUmFua0NvbnN0YW50LlJhbmtUeXBlLnBvd2VyIHx8IHRoaXMucmFua190eXBlID09IFJhbmtDb25zdGFudC5SYW5rVHlwZS5hY3Rpb25fcGFydG5lciB8fCB0aGlzLnJhbmtfdHlwZSA9PSBSYW5rQ29uc3RhbnQuUmFua1R5cGUuY29sb3JzX3RvbmUpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzID0gUGF0aFRvb2wuZ2V0Q29tbW9uSWNvbVBhdGgoXCJjb21tb25fOTAwMDFcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkUmVzKHJlcywgZnVuY3Rpb24gKHNmX29iaikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmljb25fc3Auc3ByaXRlRnJhbWUgPSBzZl9vYmo7XG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICAgICAgICAgIHRoaXMuaWNvbl9zcC5ub2RlLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5pY29uX3NwLm5vZGUuc2NhbGUgPSAwLjk7XG4gICAgICAgICAgICAgICAgdGhpcy5yYW5rX3J0Lm5vZGUueCA9IDM2MDtcbiAgICAgICAgICAgICAgICB2YXIgdmFsID0gdGhpcy5kYXRhLnZhbDEgfHwgMDtcbiAgICAgICAgICAgICAgICBzdHIgPSBTdHJpbmcodmFsKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yYW5rX3R5cGUgPT0gUmFua0NvbnN0YW50LlJhbmtUeXBlLmFjdGlvbl9wYXJ0bmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0FjdGlvbkljb24odHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJhbmtfdHlwZSA9PSBSYW5rQ29uc3RhbnQuUmFua1R5cGUudG93ZXIpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsID0gdGhpcy5kYXRhLnZhbDEgfHwgMDtcbiAgICAgICAgICAgICAgICBzdHIgPSBjYy5qcy5mb3JtYXRTdHIoXCLpgJrlhbPlsYLmlbDvvJolc1wiLCB2YWwpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJhbmtfdHlwZSA9PSBSYW5rQ29uc3RhbnQuUmFua1R5cGUudW5pb24pIHtcbiAgICAgICAgICAgICAgICBuYW1lID0gdGhpcy5kYXRhLmd1aWxkX25hbWUgfHwgXCJcIjtcbiAgICAgICAgICAgICAgICB2YXIgdmFsID0gdGhpcy5kYXRhLnZhbDEgfHwgMDtcbiAgICAgICAgICAgICAgICBzdHIgPSBjYy5qcy5mb3JtYXRTdHIoXCLmgLvmiJjlipvvvJolc1wiLCB2YWwpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJhbmtfdHlwZSA9PSBSYW5rQ29uc3RhbnQuUmFua1R5cGUuc3Rhcl9wb3dlcikge1xuICAgICAgICAgICAgICAgIHZhciB2YWwgPSB0aGlzLmRhdGEudmFsMSB8fCAwO1xuICAgICAgICAgICAgICAgIHN0ciA9IGNjLmpzLmZvcm1hdFN0cihcIuivhOWIhu+8miVzXCIsIHZhbCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmFua190eXBlID09IFJhbmtDb25zdGFudC5SYW5rVHlwZS5hY3Rpb25fc3Rhcikge1xuICAgICAgICAgICAgICAgIHZhciB2YWwgPSB0aGlzLmRhdGEudmFsMSB8fCAwO1xuICAgICAgICAgICAgICAgIHN0ciA9IGNjLmpzLmZvcm1hdFN0cihcIuivhOWIhu+8miVzXCIsIHZhbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93QWN0aW9uSWNvbih0cnVlKVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJhbmtfdHlwZSA9PSBSYW5rQ29uc3RhbnQuUmFua1R5cGUuYWN0aW9uX2FkdmVudHVyZSkge1xuICAgICAgICAgICAgICAgIHZhciB2YWwgPSB0aGlzLmRhdGEudmFsMSB8fCAwO1xuICAgICAgICAgICAgICAgIHN0ciA9IGNjLmpzLmZvcm1hdFN0cihcIuelnueVjOaOoue0ouW6pu+8miVzXCIsIHZhbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93QWN0aW9uSWNvbih0cnVlKVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJhbmtfdHlwZSA9PSBSYW5rQ29uc3RhbnQuUmFua1R5cGUuaGFsbG93c19wb3dlcikge1xuICAgICAgICAgICAgICAgIHZhciB2YWwgPSB0aGlzLmRhdGEudmFsMSB8fCAwO1xuICAgICAgICAgICAgICAgIHN0ciA9IGNjLmpzLmZvcm1hdFN0cihcIuWco+WZqOaImOWKm++8miVzXCIsIHZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm5hbWVfbGIuc3RyaW5nID0gbmFtZTtcbiAgICAgICAgICAgIHRoaXMubmFtZV9sYi5ub2RlLnNldFBvc2l0aW9uKGNjLnYyKDEyNSwgNTUpKTtcbiAgICAgICAgICAgIHRoaXMucmFua19ydC5zdHJpbmcgPSBzdHI7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubmFtZV9sYi5zdHJpbmcgPSBVdGlscy5USTE4TihcIuiZmuS9jeS7peW+hVwiKTtcbiAgICAgICAgICAgIHRoaXMubmFtZV9sYi5ub2RlLnNldFBvc2l0aW9uKGNjLnYyKDI1LCAzNSkpO1xuICAgICAgICAgICAgdGhpcy5yYW5rX3J0LnN0cmluZyA9IFwiXCI7XG4gICAgICAgICAgICB0aGlzLmZpcnN0X2ljb25fc3Aubm9kZS5hY3RpdmUgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMudW5pb25faWNvbikge1xuICAgICAgICAgICAgICAgIHRoaXMudW5pb25faWNvbi5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMucGxheWVyX2hlYWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBsYXllcl9oZWFkLnNldFZpc2libGUoZmFsc2UpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0RXh0ZW5kRGF0YTogZnVuY3Rpb24gKGlzX2NsdXN0ZXIpIHtcbiAgICAgICAgdGhpcy5pc19jbHVzdGVyID0gaXNfY2x1c3RlcjtcbiAgICB9LFxuXG4gICAgLy/mtLvliqjmoIfnrb5cbiAgICBzaG93QWN0aW9uSWNvbjogZnVuY3Rpb24gKGJvb2wpIHtcbiAgICAgICAgaWYgKGJvb2wgPT0gZmFsc2UgJiYgIXRoaXMuYWN0aW9uX2ljb24pIHJldHVyblxuICAgICAgICBpZiAoIXRoaXMuYWN0aW9uX2ljb24pIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uX2ljb24gPSB0aGlzLnNlZWtDaGlsZChcImFjdGlvbl9pY29uXCIpO1xuICAgICAgICAgICAgdGhpcy5hY3Rpb25fbGFiZWwgPSB0aGlzLnNlZWtDaGlsZChcImFjdGlvbl9sYWJlbFwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFjdGlvbl9pY29uLmFjdGl2ZSA9IGJvb2w7XG4gICAgICAgIHRoaXMuYWN0aW9uX2xhYmVsLmFjdGl2ZSA9IGJvb2w7XG4gICAgfSxcblxuICAgIGNsaWNrSGFuZGxlcjogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5jYWxsX2Z1bikge1xuICAgICAgICAgICAgdGhpcy5jYWxsX2Z1bih0aGlzLmRhdGEpXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgYWRkQ2FsbEJhY2s6IGZ1bmN0aW9uIChjYWxsX2Z1bikge1xuICAgICAgICB0aGlzLmNhbGxfZnVuID0gY2FsbF9mdW47XG4gICAgfSxcblxuICAgIHNldFNlbGVjdFN0YXR1czogZnVuY3Rpb24gKGJvb2wpIHtcbiAgICAgICAgLy8gdGhpcy5zZWxlY3RcbiAgICB9LFxuXG4gICAgc2V0VmlzaWJsZVN0YXR1czogZnVuY3Rpb24gKGJvb2wpIHtcbiAgICAgICAgdGhpcy5zZXRWaXNpYmxlKGJvb2wpXG4gICAgfSxcblxuICAgIGdldFJhbmtJbmRleDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yYW5rX3R5cGUgfHwgMTtcbiAgICB9LFxuXG4gICAgLy8g6Z2i5p2/6K6+572u5LiN5Y+v6KeB55qE5Zue6LCDLOi/memHjOWBmuS4gOS6m+S4jeWPr+ingeeahOWxj+iUveWkhOeQhlxuICAgIG9uSGlkZTogZnVuY3Rpb24gKCkge1xuXG4gICAgfSxcblxuICAgIC8vIOW9k+mdouadv+S7juS4u+iKgueCuemHiuaUvuaOieeahOiwg+eUqOaOpeWPoyzpnIDopoHmiYvliqjosIPnlKgs6ICM5LiU5Lmf5LiA5a6a6KaB6LCD55SoXG4gICAgb25EZWxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYodGhpcy5wbGF5ZXJfaGVhZCl7XG4gICAgICAgICAgICB0aGlzLnBsYXllcl9oZWFkLmRlbGV0ZU1lKCk7XG4gICAgICAgICAgICB0aGlzLnBsYXllcl9oZWFkID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH0sXG59KSJdfQ==