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
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/redbag/view/redbag_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, '88377cpDnpKV5ON+lkTC+0z', 'redbag_item');
// Scripts/mod/redbag/view/redbag_item.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: @syg.com(必填, 创建模块的人员)
// @description:
//      红包子项
// <br/>Create: new Date().toISOString()
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
var RedBagItem = cc.Class({
  "extends": BasePanel,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("redbag", "redbag_item");
    this.data = null;
    this.item_list = {};
    this.is_show_point = false;
    this.open_type = 0;
    this.star_list = {};
    this.is_can_get = true;
    this.zindex = null;
    this.action = null;
    this.func = null;
    this.black_bool = null;
    this.scale = null;
  },
  initPanel: function initPanel() {
    this.main_panel = this.seekChild("main_panel");
    this.label_panel = this.seekChild("label_panel");
    this.title = this.seekChild(this.main_panel, "title", cc.Label);
    this.title.string = Utils.TI18N("我是红包标题"); //中间资产图标
 
    this.coin_icon = this.seekChild(this.main_panel, "coin_icon", cc.Sprite);
    var res = PathTool.getUIIconPath("redbag", "redbag_4");
    this.loadRes(res, function (sf_obj) {
      this.coin_icon.spriteFrame = sf_obj;
    }.bind(this)); //领完变灰
 
    this.black_bg = this.seekChild(this.main_panel, "black_bg");
    this.black_bg.active = true; //已领取标志
 
    this.finish_icon = this.seekChild(this.main_panel, "finish_icon");
    this.finish_icon.active = false; //红包状态
 
    this.status_icon = this.seekChild(this.main_panel, "status_icon", cc.Sprite);
    this.status_icon.node.active = false; //点击领取
 
    this.get_status = this.seekChild(this.main_panel, "get_status");
    this.get_status.active = false; //红包描述
 
    this.desc_label = this.seekChild(this.label_panel, "desc_label", cc.RichText); //发红包的人
 
    this.role_name = this.seekChild(this.label_panel, "role_name", cc.RichText);
    this.other_label = this.seekChild(this.label_panel, "other_label", cc.RichText);
    this.other_label.node.active = false;
    this.other_label.string = Utils.TI18N("向公会发送大量金币");
 
    if (this.zindex != null) {
      this.setLocalZOrder(this.zindex);
    }
 
    if (this.action != null) {
      this.runActionFunc(this.action, this.func);
    }
 
    if (this.black_bool != null) {
      this.showBlackBg(this.black_bool);
    }
 
    if (this.scale != null) {
      this.setScale(this.scale);
    }
  },
  registerEvent: function registerEvent() {
    this.root_wnd.on(cc.Node.EventType.TOUCH_END, function () {
      if (this.call_fun) {
        this.call_fun(this, this.data);
      }
    }.bind(this));
  },
  setData: function setData(vo) {
    var data = vo;
    if (vo.open_type != null && vo.open_type == 1) data = vo.data;
    this.open_type = vo.open_type || 0;
    this.data = data;
    if (this.root_wnd) this.onShow();
  },
  onShow: function onShow() {
    if (this.data == null) return;
    var data = this.data;
    var res = PathTool.getUIIconPath("redbag", "redbag_4");
 
    if (this.open_type == 1) {
      var str = data.name || "";
      this.title.string = str;
      this.role_name.string = "";
      this.desc_label.string = "";
      this.get_status.active = false;
      this.other_label.node.active = true;
      var desc = data.desc || "";
      this.other_label.string = desc;
      res = PathTool.getUIIconPath("redbag", data.res_name);
    } else {
      var name = data.name || "";
      var post_num = data.post || 3;
      var post_config = gdata("guild_data", "data_position", [post_num]);
 
      if (post_config) {
        var post = post_config.name || "";
        var str = cc.js.formatStr(Utils.TI18N("来自<color=#ffea96>%s</c>(%s)"), name, post);
        this.role_name.string = str;
      }
 
      var config = gdata("guild_data", "data_guild_red_bag", [data.type]);
 
      if (config) {
        var name = config.name || "";
        this.title.string = name;
        res = PathTool.getUIIconPath("redbag", config.res_name);
        this.desc_label.string = config.desc;
      }
 
      this.updateStatus(data);
    }
 
    this.loadRes(res, function (sf_obj) {
      this.coin_icon.spriteFrame = sf_obj;
    }.bind(this));
  },
  updateStatus: function updateStatus(data) {
    if (!data) return;
    this.is_can_get = true; //是否已经领完
 
    var get_num = data.num;
    var max_num = data.max_num;
    this.is_finish = false;
    if (get_num >= max_num) this.is_finish = true; //是否过期
 
    var less_time = data.time - gcore.SmartSocket.getTime();
    this.is_out_time = false;
    if (less_time <= 0) this.is_out_time = true; //是否自己领完了
 
    this.my_status = data.flag;
 
    if (this.my_status == 1) {
      this.finish_icon.active = true;
      this.is_can_get = false;
    } else {
      this.finish_icon.active = false;
    }
 
    var res;
 
    if (this.is_finish == true) {
      res = PathTool.getUIIconPath("redbag", "txt_cn_redbag_3");
      this.is_can_get = false;
    } else if (this.is_out_time == true) {
      res = PathTool.getUIIconPath("redbag", "txt_cn_redbag_1");
      this.is_can_get = false;
    }
 
    if (res) {
      this.loadRes(res, function (sf_obj) {
        this.status_icon.spriteFrame = sf_obj;
      }.bind(this));
    }
 
    var bool = this.is_finish || this.is_out_time;
    this.status_icon.node.active = bool;
    var bool = this.is_finish || this.is_out_time || this.my_status == 1;
    this.black_bg.active = bool;
    CommonAction.breatheShineAction3(this.get_status, 0.8, 0.8);
    this.get_status.active = this.is_can_get;
  },
  getIsCanGet: function getIsCanGet() {
    return this.is_can_get;
  },
  clickHandler: function clickHandler() {
    if (this.call_fun) this.call_fun(this.data);
  },
  addCallBack: function addCallBack(call_fun) {
    this.call_fun = call_fun;
  },
  showBlackBg: function showBlackBg(bool) {
    this.black_bool = bool;
    if (this.root_wnd == null) return;
    bool = bool || false;
    this.black_bg.active = bool;
  },
  setVisibleStatus: function setVisibleStatus(bool) {
    this.setVisible(bool);
  },
  getData: function getData() {
    return this.data;
  },
  setLocalZOrder: function setLocalZOrder(value) {
    this.zindex = value;
    if (this.root_wnd == null) return;
    this.root_wnd.zIndex = value;
  },
  setScale: function setScale(value) {
    this.scale = value;
    if (this.root_wnd == null) return;
    this.root_wnd.scale = value;
  },
  runActionFunc: function runActionFunc(action, func) {
    this.action = action;
    this.func = func;
    if (this.root_wnd == null) return;
    this.root_wnd.runAction(action, func);
  },
  onDelete: function onDelete() {}
});
module.exports = RedBagItem;
 
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxyZWRiYWdcXHZpZXdcXHJlZGJhZ19pdGVtLmpzIl0sIm5hbWVzIjpbIlBhdGhUb29sIiwicmVxdWlyZSIsIlJlZEJhZ0l0ZW0iLCJjYyIsIkNsYXNzIiwiQmFzZVBhbmVsIiwiY3RvciIsInByZWZhYlBhdGgiLCJnZXRQcmVmYWJQYXRoIiwiZGF0YSIsIml0ZW1fbGlzdCIsImlzX3Nob3dfcG9pbnQiLCJvcGVuX3R5cGUiLCJzdGFyX2xpc3QiLCJpc19jYW5fZ2V0IiwiemluZGV4IiwiYWN0aW9uIiwiZnVuYyIsImJsYWNrX2Jvb2wiLCJzY2FsZSIsImluaXRQYW5lbCIsIm1haW5fcGFuZWwiLCJzZWVrQ2hpbGQiLCJsYWJlbF9wYW5lbCIsInRpdGxlIiwiTGFiZWwiLCJzdHJpbmciLCJVdGlscyIsIlRJMThOIiwiY29pbl9pY29uIiwiU3ByaXRlIiwicmVzIiwiZ2V0VUlJY29uUGF0aCIsImxvYWRSZXMiLCJzZl9vYmoiLCJzcHJpdGVGcmFtZSIsImJpbmQiLCJibGFja19iZyIsImFjdGl2ZSIsImZpbmlzaF9pY29uIiwic3RhdHVzX2ljb24iLCJub2RlIiwiZ2V0X3N0YXR1cyIsImRlc2NfbGFiZWwiLCJSaWNoVGV4dCIsInJvbGVfbmFtZSIsIm90aGVyX2xhYmVsIiwic2V0TG9jYWxaT3JkZXIiLCJydW5BY3Rpb25GdW5jIiwic2hvd0JsYWNrQmciLCJzZXRTY2FsZSIsInJlZ2lzdGVyRXZlbnQiLCJyb290X3duZCIsIm9uIiwiTm9kZSIsIkV2ZW50VHlwZSIsIlRPVUNIX0VORCIsImNhbGxfZnVuIiwic2V0RGF0YSIsInZvIiwib25TaG93Iiwic3RyIiwibmFtZSIsImRlc2MiLCJyZXNfbmFtZSIsInBvc3RfbnVtIiwicG9zdCIsInBvc3RfY29uZmlnIiwiZ2RhdGEiLCJqcyIsImZvcm1hdFN0ciIsImNvbmZpZyIsInR5cGUiLCJ1cGRhdGVTdGF0dXMiLCJnZXRfbnVtIiwibnVtIiwibWF4X251bSIsImlzX2ZpbmlzaCIsImxlc3NfdGltZSIsInRpbWUiLCJnY29yZSIsIlNtYXJ0U29ja2V0IiwiZ2V0VGltZSIsImlzX291dF90aW1lIiwibXlfc3RhdHVzIiwiZmxhZyIsImJvb2wiLCJDb21tb25BY3Rpb24iLCJicmVhdGhlU2hpbmVBY3Rpb24zIiwiZ2V0SXNDYW5HZXQiLCJjbGlja0hhbmRsZXIiLCJhZGRDYWxsQmFjayIsInNldFZpc2libGVTdGF0dXMiLCJzZXRWaXNpYmxlIiwiZ2V0RGF0YSIsInZhbHVlIiwiekluZGV4IiwicnVuQWN0aW9uIiwib25EZWxldGUiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLElBQUlBLFFBQVEsR0FBR0MsT0FBTyxDQUFDLFVBQUQsQ0FBdEI7O0FBRUEsSUFBSUMsVUFBVSxHQUFHQyxFQUFFLENBQUNDLEtBQUgsQ0FBUztBQUN0QixhQUFTQyxTQURhO0FBRXRCQyxFQUFBQSxJQUFJLEVBQUUsZ0JBQVk7QUFDZCxTQUFLQyxVQUFMLEdBQWtCUCxRQUFRLENBQUNRLGFBQVQsQ0FBdUIsUUFBdkIsRUFBaUMsYUFBakMsQ0FBbEI7QUFDQSxTQUFLQyxJQUFMLEdBQVksSUFBWjtBQUNBLFNBQUtDLFNBQUwsR0FBaUIsRUFBakI7QUFDQSxTQUFLQyxhQUFMLEdBQXFCLEtBQXJCO0FBQ0EsU0FBS0MsU0FBTCxHQUFpQixDQUFqQjtBQUNBLFNBQUtDLFNBQUwsR0FBaUIsRUFBakI7QUFDQSxTQUFLQyxVQUFMLEdBQWtCLElBQWxCO0FBRUEsU0FBS0MsTUFBTCxHQUFjLElBQWQ7QUFDQSxTQUFLQyxNQUFMLEdBQWMsSUFBZDtBQUNBLFNBQUtDLElBQUwsR0FBWSxJQUFaO0FBQ0EsU0FBS0MsVUFBTCxHQUFrQixJQUFsQjtBQUNBLFNBQUtDLEtBQUwsR0FBYSxJQUFiO0FBQ0gsR0FoQnFCO0FBa0J0QkMsRUFBQUEsU0FBUyxFQUFFLHFCQUFZO0FBQ25CLFNBQUtDLFVBQUwsR0FB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QUszQyxRQUFMLElBQWlCLElBQXJCLEVBQTJCO0FBQzNCLFNBQUtBLFFBQUwsQ0FBYzRDLE1BQWQsR0FBdUJELEtBQXZCO0FBQ0gsR0F4TXFCO0FBME10QjdDLEVBQUFBLFFBQVEsRUFBRSxrQkFBVTZDLEtBQVYsRUFBaUI7QUFDdkIsU0FBSzVFLEtBQUwsR0FBYTRFLEtBQWI7QUFDQSxRQUFJLEtBQUszQyxRQUFMLElBQWlCLElBQXJCLEVBQTJCO0FBQzNCLFNBQUtBLFFBQUwsQ0FBY2pDLEtBQWQsR0FBc0I0RSxLQUF0QjtBQUNILEdBOU1xQjtBQWdOdEIvQyxFQUFBQSxhQUFhLEVBQUUsdUJBQVVoQyxNQUFWLEVBQWtCQyxJQUFsQixFQUF3QjtBQUNuQyxTQUFLRCxNQUFMLEdBQWNBLE1BQWQ7QUFDQSxTQUFLQyxJQUFMLEdBQVlBLElBQVo7QUFDQSxRQUFJLEtBQUttQyxRQUFMLElBQWlCLElBQXJCLEVBQTJCO0FBQzNCLFNBQUtBLFFBQUwsQ0FBYzZDLFNBQWQsQ0FBd0JqRixNQUF4QixFQUFnQ0MsSUFBaEM7QUFDSCxHQXJOcUI7QUF1TnRCaUYsRUFBQUEsUUFBUSxFQUFFLG9CQUFZLENBRXJCO0FBek5xQixDQUFULENBQWpCO0FBNE5BQyxNQUFNLENBQUNDLE9BQVAsR0FBaUJsRyxVQUFqQiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuLy8gQGF1dGhvcjogQHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXHJcbi8vIEBkZXNjcmlwdGlvbjpcclxuLy8gICAgICDnuqLljIXlrZDpoblcclxuLy8gPGJyLz5DcmVhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxudmFyIFBhdGhUb29sID0gcmVxdWlyZShcInBhdGh0b29sXCIpO1xyXG5cclxudmFyIFJlZEJhZ0l0ZW0gPSBjYy5DbGFzcyh7XHJcbiAgICBleHRlbmRzOiBCYXNlUGFuZWwsXHJcbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5wcmVmYWJQYXRoID0gUGF0aFRvb2wuZ2V0UHJlZmFiUGF0aChcInJlZGJhZ1wiLCBcInJlZGJhZ19pdGVtXCIpO1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5pdGVtX2xpc3QgPSB7fTtcclxuICAgICAgICB0aGlzLmlzX3Nob3dfcG9pbnQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm9wZW5fdHlwZSA9IDA7XHJcbiAgICAgICAgdGhpcy5zdGFyX2xpc3QgPSB7fTtcclxuICAgICAgICB0aGlzLmlzX2Nhbl9nZXQgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLnppbmRleCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5hY3Rpb24gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZnVuYyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5ibGFja19ib29sID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNjYWxlID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFBhbmVsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5tYWluX3BhbmVsID0gdGhpcy5zZWVrQ2hpbGQoXCJtYWluX3BhbmVsXCIpO1xyXG4gICAgICAgIHRoaXMubGFiZWxfcGFuZWwgPSB0aGlzLnNlZWtDaGlsZChcImxhYmVsX3BhbmVsXCIpO1xyXG5cclxuICAgICAgICB0aGlzLnRpdGxlID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5tYWluX3BhbmVsLCBcInRpdGxlXCIsIGNjLkxhYmVsKTtcclxuICAgICAgICB0aGlzLnRpdGxlLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi5oiR5piv57qi5YyF5qCH6aKYXCIpO1xyXG4gICAgICAgIC8v5Lit6Ze06LWE5Lqn5Zu+5qCHXHJcbiAgICAgICAgdGhpcy5jb2luX2ljb24gPSB0aGlzLnNlZWtDaGlsZCh0aGlzLm1haW5fcGFuZWwsIFwiY29pbl9pY29uXCIsIGNjLlNwcml0ZSk7XHJcbiAgICAgICAgdmFyIHJlcyA9IFBhdGhUb29sLmdldFVJSWNvblBhdGgoXCJyZWRiYWdcIiwgXCJyZWRiYWdfNFwiKTtcclxuICAgICAgICB0aGlzLmxvYWRSZXMocmVzLCBmdW5jdGlvbiAoc2Zfb2JqKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29pbl9pY29uLnNwcml0ZUZyYW1lID0gc2Zfb2JqO1xyXG4gICAgICAgIH0uYmluZCh0aGlzKSlcclxuXHJcbiAgICAgICAgLy/pooblrozlj5jngbBcclxuICAgICAgICB0aGlzLmJsYWNrX2JnID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5tYWluX3BhbmVsLCBcImJsYWNrX2JnXCIpO1xyXG4gICAgICAgIHRoaXMuYmxhY2tfYmcuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAvL+W3sumihuWPluagh+W/l1xyXG4gICAgICAgIHRoaXMuZmluaXNoX2ljb24gPSB0aGlzLnNlZWtDaGlsZCh0aGlzLm1haW5fcGFuZWwsIFwiZmluaXNoX2ljb25cIik7XHJcbiAgICAgICAgdGhpcy5maW5pc2hfaWNvbi5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAvL+e6ouWMheeKtuaAgVxyXG4gICAgICAgIHRoaXMuc3RhdHVzX2ljb24gPSB0aGlzLnNlZWtDaGlsZCh0aGlzLm1haW5fcGFuZWwsIFwic3RhdHVzX2ljb25cIiwgY2MuU3ByaXRlKTtcclxuICAgICAgICB0aGlzLnN0YXR1c19pY29uLm5vZGUuYWN0aXZlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8v54K55Ye76aKG5Y+WXHJcbiAgICAgICAgdGhpcy5nZXRfc3RhdHVzID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5tYWluX3BhbmVsLCBcImdldF9zdGF0dXNcIik7XHJcbiAgICAgICAgdGhpcy5nZXRfc3RhdHVzLmFjdGl2ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvL+e6ouWMheaPj+i/sFxyXG4gICAgICAgIHRoaXMuZGVzY19sYWJlbCA9IHRoaXMuc2Vla0NoaWxkKHRoaXMubGFiZWxfcGFuZWwsIFwiZGVzY19sYWJlbFwiLCBjYy5SaWNoVGV4dCk7XHJcbiAgICAgICAgLy/lj5HnuqLljIXnmoTkurpcclxuICAgICAgICB0aGlzLnJvbGVfbmFtZSA9IHRoaXMuc2Vla0NoaWxkKHRoaXMubGFiZWxfcGFuZWwsIFwicm9sZV9uYW1lXCIsIGNjLlJpY2hUZXh0KTtcclxuXHJcbiAgICAgICAgdGhpcy5vdGhlcl9sYWJlbCA9IHRoaXMuc2Vla0NoaWxkKHRoaXMubGFiZWxfcGFuZWwsIFwib3RoZXJfbGFiZWxcIiwgY2MuUmljaFRleHQpO1xyXG4gICAgICAgIHRoaXMub3RoZXJfbGFiZWwubm9kZS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm90aGVyX2xhYmVsLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi5ZCR5YWs5Lya5Y+R6YCB5aSn6YeP6YeR5biBXCIpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy56aW5kZXggIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldExvY2FsWk9yZGVyKHRoaXMuemluZGV4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aW9uICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5ydW5BY3Rpb25GdW5jKHRoaXMuYWN0aW9uLCB0aGlzLmZ1bmMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5ibGFja19ib29sICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93QmxhY2tCZyh0aGlzLmJsYWNrX2Jvb2wpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5zY2FsZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U2NhbGUodGhpcy5zY2FsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICByZWdpc3RlckV2ZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5yb290X3duZC5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9FTkQsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbF9mdW4pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbF9mdW4odGhpcyx0aGlzLmRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxyXG4gICAgfSxcclxuXHJcbiAgICBzZXREYXRhOiBmdW5jdGlvbiAodm8pIHtcclxuICAgICAgICB2YXIgZGF0YSA9IHZvO1xyXG4gICAgICAgIGlmICh2by5vcGVuX3R5cGUgIT0gbnVsbCAmJiB2by5vcGVuX3R5cGUgPT0gMSlcclxuICAgICAgICAgICAgZGF0YSA9IHZvLmRhdGE7XHJcbiAgICAgICAgdGhpcy5vcGVuX3R5cGUgPSB2by5vcGVuX3R5cGUgfHwgMDtcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgICAgIGlmICh0aGlzLnJvb3Rfd25kKVxyXG4gICAgICAgICAgICB0aGlzLm9uU2hvdygpO1xyXG4gICAgfSxcclxuXHJcbiAgICBvblNob3c6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5kYXRhID09IG51bGwpIHJldHVyblxyXG4gICAgICAgIHZhciBkYXRhID0gdGhpcy5kYXRhO1xyXG4gICAgICAgIHZhciByZXMgPSBQYXRoVG9vbC5nZXRVSUljb25QYXRoKFwicmVkYmFnXCIsIFwicmVkYmFnXzRcIik7XHJcbiAgICAgICAgaWYgKHRoaXMub3Blbl90eXBlID09IDEpIHtcclxuICAgICAgICAgICAgdmFyIHN0ciA9IGRhdGEubmFtZSB8fCBcIlwiO1xyXG4gICAgICAgICAgICB0aGlzLnRpdGxlLnN0cmluZyA9IHN0cjtcclxuICAgICAgICAgICAgdGhpcy5yb2xlX25hbWUuc3RyaW5nID0gXCJcIjtcclxuICAgICAgICAgICAgdGhpcy5kZXNjX2xhYmVsLnN0cmluZyA9IFwiXCI7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0X3N0YXR1cy5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5vdGhlcl9sYWJlbC5ub2RlLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHZhciBkZXNjID0gZGF0YS5kZXNjIHx8IFwiXCI7XHJcbiAgICAgICAgICAgIHRoaXMub3RoZXJfbGFiZWwuc3RyaW5nID0gZGVzYztcclxuICAgICAgICAgICAgcmVzID0gUGF0aFRvb2wuZ2V0VUlJY29uUGF0aChcInJlZGJhZ1wiLCBkYXRhLnJlc19uYW1lKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgbmFtZSA9IGRhdGEubmFtZSB8fCBcIlwiO1xyXG4gICAgICAgICAgICB2YXIgcG9zdF9udW0gPSBkYXRhLnBvc3QgfHwgMztcclxuICAgICAgICAgICAgdmFyIHBvc3RfY29uZmlnID0gZ2RhdGEoXCJndWlsZF9kYXRhXCIsIFwiZGF0YV9wb3NpdGlvblwiLCBbcG9zdF9udW1dKTtcclxuICAgICAgICAgICAgaWYgKHBvc3RfY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcG9zdCA9IHBvc3RfY29uZmlnLm5hbWUgfHwgXCJcIjtcclxuICAgICAgICAgICAgICAgIHZhciBzdHIgPSBjYy5qcy5mb3JtYXRTdHIoVXRpbHMuVEkxOE4oXCLmnaXoh6o8Y29sb3I9I2ZmZWE5Nj4lczwvYz4oJXMpXCIpLCBuYW1lLCBwb3N0KTtcclxuICAgICAgICAgICAgICAgIHRoaXMucm9sZV9uYW1lLnN0cmluZyA9IHN0cjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgY29uZmlnID0gZ2RhdGEoXCJndWlsZF9kYXRhXCIsIFwiZGF0YV9ndWlsZF9yZWRfYmFnXCIsIFtkYXRhLnR5cGVdKTtcclxuICAgICAgICAgICAgaWYgKGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBjb25maWcubmFtZSB8fCBcIlwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50aXRsZS5zdHJpbmcgPSBuYW1lO1xyXG4gICAgICAgICAgICAgICAgcmVzID0gUGF0aFRvb2wuZ2V0VUlJY29uUGF0aChcInJlZGJhZ1wiLCBjb25maWcucmVzX25hbWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZXNjX2xhYmVsLnN0cmluZyA9IGNvbmZpZy5kZXNjO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhdHVzKGRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvYWRSZXMocmVzLCBmdW5jdGlvbiAoc2Zfb2JqKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29pbl9pY29uLnNwcml0ZUZyYW1lID0gc2Zfb2JqO1xyXG4gICAgICAgIH0uYmluZCh0aGlzKSlcclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlU3RhdHVzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgIGlmICghZGF0YSkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5pc19jYW5fZ2V0ID0gdHJ1ZTtcclxuICAgICAgICAvL+aYr+WQpuW3sue7j+mihuWujFxyXG4gICAgICAgIHZhciBnZXRfbnVtID0gZGF0YS5udW07XHJcbiAgICAgICAgdmFyIG1heF9udW0gPSBkYXRhLm1heF9udW07XHJcbiAgICAgICAgdGhpcy5pc19maW5pc2ggPSBmYWxzZTtcclxuICAgICAgICBpZiAoZ2V0X251bSA+PSBtYXhfbnVtKVxyXG4gICAgICAgICAgICB0aGlzLmlzX2ZpbmlzaCA9IHRydWU7XHJcbiAgICAgICAgLy/mmK/lkKbov4fmnJ9cclxuICAgICAgICB2YXIgbGVzc190aW1lID0gZGF0YS50aW1lIC0gZ2NvcmUuU21hcnRTb2NrZXQuZ2V0VGltZSgpO1xyXG4gICAgICAgIHRoaXMuaXNfb3V0X3RpbWUgPSBmYWxzZTtcclxuICAgICAgICBpZiAobGVzc190aW1lIDw9IDApXHJcbiAgICAgICAgICAgIHRoaXMuaXNfb3V0X3RpbWUgPSB0cnVlO1xyXG4gICAgICAgIC8v5piv5ZCm6Ieq5bex6aKG5a6M5LqGXHJcbiAgICAgICAgdGhpcy5teV9zdGF0dXMgPSBkYXRhLmZsYWc7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm15X3N0YXR1cyA9PSAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmluaXNoX2ljb24uYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5pc19jYW5fZ2V0ID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5maW5pc2hfaWNvbi5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJlcztcclxuICAgICAgICBpZiAodGhpcy5pc19maW5pc2ggPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICByZXMgPSBQYXRoVG9vbC5nZXRVSUljb25QYXRoKFwicmVkYmFnXCIsIFwidHh0X2NuX3JlZGJhZ18zXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmlzX2Nhbl9nZXQgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNfb3V0X3RpbWUgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICByZXMgPSBQYXRoVG9vbC5nZXRVSUljb25QYXRoKFwicmVkYmFnXCIsIFwidHh0X2NuX3JlZGJhZ18xXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmlzX2Nhbl9nZXQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRSZXMocmVzLCBmdW5jdGlvbiAoc2Zfb2JqKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXR1c19pY29uLnNwcml0ZUZyYW1lID0gc2Zfb2JqO1xyXG4gICAgICAgICAgICB9LmJpbmQodGhpcykpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBib29sID0gdGhpcy5pc19maW5pc2ggfHwgdGhpcy5pc19vdXRfdGltZTtcclxuICAgICAgICB0aGlzLnN0YXR1c19pY29uLm5vZGUuYWN0aXZlID0gYm9vbDtcclxuICAgICAgICB2YXIgYm9vbCA9IHRoaXMuaXNfZmluaXNoIHx8IHRoaXMuaXNfb3V0X3RpbWUgfHwgdGhpcy5teV9zdGF0dXMgPT0gMTtcclxuICAgICAgICB0aGlzLmJsYWNrX2JnLmFjdGl2ZSA9IGJvb2w7XHJcblxyXG4gICAgICAgIENvbW1vbkFjdGlvbi5icmVhdGhlU2hpbmVBY3Rpb24zKHRoaXMuZ2V0X3N0YXR1cywgMC44LCAwLjgpO1xyXG4gICAgICAgIHRoaXMuZ2V0X3N0YXR1cy5hY3RpdmUgPSB0aGlzLmlzX2Nhbl9nZXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldElzQ2FuR2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNfY2FuX2dldFxyXG4gICAgfSxcclxuXHJcbiAgICBjbGlja0hhbmRsZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5jYWxsX2Z1bilcclxuICAgICAgICAgICAgdGhpcy5jYWxsX2Z1bih0aGlzLmRhdGEpO1xyXG4gICAgfSxcclxuXHJcbiAgICBhZGRDYWxsQmFjazogZnVuY3Rpb24gKGNhbGxfZnVuKSB7XHJcbiAgICAgICAgdGhpcy5jYWxsX2Z1biA9IGNhbGxfZnVuO1xyXG4gICAgfSxcclxuXHJcbiAgICBzaG93QmxhY2tCZzogZnVuY3Rpb24gKGJvb2wpIHtcclxuICAgICAgICB0aGlzLmJsYWNrX2Jvb2wgPSBib29sO1xyXG4gICAgICAgIGlmICh0aGlzLnJvb3Rfd25kID09IG51bGwpIHJldHVyblxyXG4gICAgICAgIGJvb2wgPSBib29sIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuYmxhY2tfYmcuYWN0aXZlID0gYm9vbDtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0VmlzaWJsZVN0YXR1czogZnVuY3Rpb24gKGJvb2wpIHtcclxuICAgICAgICB0aGlzLnNldFZpc2libGUoYm9vbClcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0RGF0YTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFcclxuICAgIH0sXHJcblxyXG4gICAgc2V0TG9jYWxaT3JkZXI6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuemluZGV4ID0gdmFsdWU7XHJcbiAgICAgICAgaWYgKHRoaXMucm9vdF93bmQgPT0gbnVsbCkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5yb290X3duZC56SW5kZXggPSB2YWx1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0U2NhbGU6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuc2NhbGUgPSB2YWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5yb290X3duZCA9PSBudWxsKSByZXR1cm5cclxuICAgICAgICB0aGlzLnJvb3Rfd25kLnNjYWxlID0gdmFsdWU7XHJcbiAgICB9LFxyXG5cclxuICAgIHJ1bkFjdGlvbkZ1bmM6IGZ1bmN0aW9uIChhY3Rpb24sIGZ1bmMpIHtcclxuICAgICAgICB0aGlzLmFjdGlvbiA9IGFjdGlvbjtcclxuICAgICAgICB0aGlzLmZ1bmMgPSBmdW5jO1xyXG4gICAgICAgIGlmICh0aGlzLnJvb3Rfd25kID09IG51bGwpIHJldHVyblxyXG4gICAgICAgIHRoaXMucm9vdF93bmQucnVuQWN0aW9uKGFjdGlvbiwgZnVuYyk7XHJcbiAgICB9LFxyXG5cclxuICAgIG9uRGVsZXRlOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgfVxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUmVkQmFnSXRlbTsiXX0=