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
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/redbag/view/redbag_look_window.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, 'c40a37KFuJEYZgF0W7fKcs6', 'redbag_look_window');
// Scripts/mod/redbag/view/redbag_look_window.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
//     这里是描述这个窗体的作用的
// <br/>Create: 2019-06-27 09:41:07
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
var PlayerHead = require("playerhead");
 
var RoleController = require("role_controller");
 
var RedbagEvent = require("redbag_event");
 
var TimeTool = require("timetool");
 
var RedBagLookItem = require("redbag_look_item");
 
var CommonScrollView = require("common_scrollview");
 
var Redbag_lookWindow = cc.Class({
  "extends": BaseView,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("redbag", "redbag_look");
    this.viewTag = SCENE_TAG.dialogue; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
 
    this.win_type = WinType.Mini; //是否是全屏窗体  WinType.Full, WinType.Big, WinType.Mini, WinType.Tips
  },
  // 初始化一些配置数据,可以用于声明一些变量之类的
  initConfig: function initConfig() {
    this.ctrl = require("redbag_controller").getInstance();
  },
  // 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件
  openCallBack: function openCallBack() {
    this.background = this.seekChild("background");
    this.background.scale = FIT_SCALE;
    this.main_panel = this.seekChild("main_panel");
    this.size = this.main_panel.getContentSize();
    this.close_btn = this.seekChild("close_btn");
    this.label_panel = this.seekChild("label_panel");
    this.title_lb = this.seekChild(this.label_panel, "title", cc.Label);
    this.bg_sp = this.seekChild("bg", cc.Sprite);
    this.loadRes(PathTool.getBigBg("bigbg_42"), function (sp) {
      this.bg_sp.spriteFrame = sp;
    }.bind(this));
    this.head_icon = new PlayerHead();
    this.head_icon.show();
    this.head_icon.setParent(this.main_panel);
    this.head_icon.setPosition(0, 250);
    this.head_icon.setScale(0.9);
    this.head_icon.addCallBack(function () {
      var roleVo = RoleController.getInstance().getRoleVo();
      if (roleVo.rid == this.data.rid && roleVo.srv_id == this.data.srv_id) return;
 
      require("chat_controller").getInstance().openFriendInfo(this.data);
    }.bind(this));
    this.status_bg_nd = this.seekChild("status_bg");
    this.status_bg_nd.active = false;
    this.desc_label_rt = this.seekChild("desc_label", cc.RichText);
    this.role_name_rt = this.seekChild("role_name", cc.RichText);
    this.less_num_lb = this.seekChild("less_num", cc.Label);
    this.less_time_lb = this.seekChild("less_time", cc.Label);
 
    if (this.event_data) {
      this.updateMessage(event_data);
      this.updateMemberList(event_data);
    }
  },
  // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
  registerEvent: function registerEvent() {
    Utils.onTouchEnd(this.background, function () {
      this.ctrl.openLookWindow(false);
    }.bind(this), 2);
    Utils.onTouchEnd(this.close_btn, function () {
      this.ctrl.openLookWindow(false);
    }.bind(this), 2);
    this.addGlobalEvent(RedbagEvent.Get_List_Event, function (data) {
      if (this.root_wnd == null) {
        this.event_data = data;
        return;
      }
 
      this.updateMessage(data);
      this.updateMemberList(data);
    }, this);
  },
  updateMessage: function updateMessage(data) {
    if (!data) return;
    if (!this.data) return;
    this.status_bg_nd.active = false;
    this.list_data = data;
    this.head_icon.setHeadRes(data.face_id);
    this.head_icon.setFrameRes(data.avatar_bid);
    var config = Config.guild_data.data_guild_red_bag[this.data.type];
    if (!config) return;
    this.red_config = config;
    this.title_lb.string = config.name;
    var name = data.name || "";
    this.role_name_rt.string = cc.js.formatStr(Utils.TI18N("<color=#ffea96>%s</c>的红包"), name);
    var config = Config.guild_data.data_guild_red_bag[data.type];
 
    if (config) {
      this.desc_label_rt.string = config.msg;
    }
 
    if (this.data.num >= this.data.max_num) {
      this.status_bg_nd.active = true;
    }
 
    this.less_num_lb.string = cc.js.formatStr(Utils.TI18N("剩余个数:%s/%s"), this.data.max_num - this.data.num, this.data.max_num);
 
    if (this.less_timer) {
      gcore.Timer.del(this.less_timer);
      this.less_timer = null;
    }
 
    var less_time = this.data.time || 0;
 
    if (less_time - gcore.SmartSocket.getTime() <= 0) {
      this.less_time_lb.string = Utils.TI18N("剩余时间:已过期");
      return;
    }
 
    if (!this.less_timer) {
      this.less_timer = gcore.Timer.set(function () {
        this.less_time_lb.string = cc.js.formatStr(Utils.TI18N("剩余时间:%s"), TimeTool.getTimeFormatDay(less_time - gcore.SmartSocket.getTime()));
        less_time = less_time - 1;
      }.bind(this), 1000, -1);
    }
  },
  // 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了
  openRootWnd: function openRootWnd(data) {
    this.data = data;
    this.ctrl.sender13540(this.data.id);
  },
  updateMemberList: function updateMemberList(data) {
    if (!this.list_view) {
      var scroll_view_size = cc.size(450, 400);
      var setting = {
        item_class: RedBagLookItem,
        // 单元类
        start_x: 1,
        // 第一个单元的X起点
        space_x: 2,
        // x方向的间隔
        start_y: 10,
        // 第一个单元的Y起点
        space_y: 3,
        // y方向的间隔
        item_width: 455,
        // 单元的尺寸width
        item_height: 93,
        // 单元的尺寸height
        row: 1,
        // 行数,作用于水平滚动类型
        col: 1,
        // 列数,作用于垂直滚动类型
        need_dynamic: true
      };
      this.list_view = new CommonScrollView();
      this.list_view.createScroll(this.main_panel, cc.v2(0, -100), ScrollViewDir.vertical, ScrollViewStartPos.top, scroll_view_size, setting, cc.v2(0.5, 0.5));
    }
 
    var list = data.list || [];
    list.sort(Utils.tableUpperSorter(["val", "time"]));
 
    for (var i in list) {
      list[i].index = i;
    }
 
    this.list_view.setData(list, null, this.red_config);
  },
  // 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
  closeCallBack: function closeCallBack() {
    this.ctrl.openLookWindow(false);
 
    if (this.list_view) {
      this.list_view.deleteMe();
      this.list_view = null;
    }
 
    if (this.head_icon) {
      this.head_icon.deleteMe();
      this.head_icon = null;
    }
 
    if (this.less_timer) {
      gcore.Timer.del(this.less_timer);
      this.less_timer = 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxyZWRiYWdcXHZpZXdcXHJlZGJhZ19sb29rX3dpbmRvdy5qcyJdLCJuYW1lcyI6WyJQYXRoVG9vbCIsInJlcXVpcmUiLCJQbGF5ZXJIZWFkIiwiUm9sZUNvbnRyb2xsZXIiLCJSZWRiYWdFdmVudCIsIlRpbWVUb29sIiwiUmVkQmFnTG9va0l0ZW0iLCJDb21tb25TY3JvbGxWaWV3IiwiUmVkYmFnX2xvb2tXaW5kb3ciLCJjYyIsIkNsYXNzIiwiQmFzZVZpZXciLCJjdG9yIiwicHJlZmFiUGF0aCIsImdldFByZWZhYlBhdGgiLCJ2aWV3VGFnIiwiU0NFTkVfVEFHIiwiZGlhbG9ndWUiLCJ3aW5fdHlwZSIsIldpblR5cGUiLCJNaW5pIiwiaW5pdENvbmZpZyIsImN0cmwiLCJnZXRJbnN0YW5jZSIsIm9wZW5DYWxsQmFjayIsImJhY2tncm91bmQiLCJzZWVrQ2hpbGQiLCJzY2FsZSIsIkZJVF9TQ0FMRSIsIm1haW5fcGFuZWwiLCJzaXplIiwiZ2V0Q29udGVudFNpemUiLCJjbG9zZV9idG4iLCJsYWJlbF9wYW5lbCIsInRpdGxlX2xiIiwiTGFiZWwiLCJiZ19zcCIsIlNwcml0ZSIsImxvYWRSZXMiLCJnZXRCaWdCZyIsInNwIiwic3ByaXRlRnJhbWUiLCJiaW5kIiwiaGVhZF9pY29uIiwic2hvdyIsInNldFBhcmVudCIsInNldFBvc2l0aW9uIiwic2V0U2NhbGUiLCJhZGRDYWxsQmFjayIsInJvbGVWbyIsImdldFJvbGVWbyIsInJpZCIsImRhdGEiLCJzcnZfaWQiLCJvcGVuRnJpZW5kSW5mbyIsInN0YXR1c19iZ19uZCIsImFjdGl2ZSIsImRlc2NfbGFiZWxfcnQiLCJSaWNoVGV4dCIsInJvbGVfbmFtZV9ydCIsImxlc3NfbnVtX2xiIiwibGVzc190aW1lX2xiIiwiZXZlbnRfZGF0YSIsInVwZGF0ZU1lc3NhZ2UiLCJ1cGRhdGVNZW1iZXJMaXN0IiwicmVnaXN0ZXJFdmVudCIsIlV0aWxzIiwib25Ub3VjaEVuZCIsIm9wZW5Mb29rV2luZG93IiwiYWRkR2xvYmFsRXZlbnQiLCJHZXRfTGlzdF9FdmVudCIsInJvb3Rfd25kIiwibGlzdF9kYXRhIiwic2V0SGVhZFJlcyIsImZhY2VfaWQiLCJzZXRGcmFtZVJlcyIsImF2YXRhcl9iaWQiLCJjb25maWciLCJDb25maWciLCJndWlsZF9kYXRhIiwiZGF0YV9ndWlsZF9yZWRfYmFnIiwidHlwZSIsInJlZF9jb25maWciLCJzdHJpbmciLCJuYW1lIiwianMiLCJmb3JtYXRTdHIiLCJUSTE4TiIsIm1zZyIsIm51bSIsIm1heF9udW0iLCJsZXNzX3RpbWVyIiwiZ2NvcmUiLCJUaW1lciIsImRlbCIsImxlc3NfdGltZSIsInRpbWUiLCJTbWFydFNvY2tldCIsImdldFRpbWUiLCJzZXQiLCJnZXRUaW1lRm9ybWF0RGF5Iiwib3BlblJvb3RXbmQiLCJzZW5kZXIxMzU0MCIsImlkIiwibGlzdF92aWV3Iiwic2Nyb2xsX3ZpZXdfc2l6ZSIsInNldHRpbmciLCJpdGVtX2NsYXNzIiwic3RhcnRfeCIsInNwYWNlX3giLCJzdGFydF95Iiwic3BhY2VfeSIsIml0ZW1fd2lkdGgiLCJpdGVtX2hlaWdodCIsInJvdyIsImNvbCIsIm5lZWRfZHluYW1pYyIsImNyZWF0ZVNjcm9sbCIsInYyIiwiU2Nyb2xsVmlld0RpciIsInZlcnRpY2FsIiwiU2Nyb2xsVmlld1N0YXJ0UG9zIiwidG9wIiwibGlzdCIsInNvcnQiLCJ0YWJsZVVwcGVyU29ydGVyIiwiaSIsImluZGV4Iiwic2V0RGF0YSIsImNsb3NlQ2FsbEJhY2siLCJkZWxldGVNZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxRQUFRLEdBQUdDLE9BQU8sQ0FBQyxVQUFELENBQXRCOztBQUNBLElBQUlDLFVBQVUsR0FBR0QsT0FBTyxDQUFDLFlBQUQsQ0FBeEI7O0FBQ0EsSUFBSUUsY0FBYyxHQUFHRixPQUFPLENBQUMsaUJBQUQsQ0FBNUI7O0FBQ0EsSUFBSUcs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TUFBQUEsS0FBSyxDQUFDQyxLQUFOLENBQVlDLEdBQVosQ0FBZ0IsS0FBS0gsVUFBckI7QUFDQSxXQUFLQSxVQUFMLEdBQWtCLElBQWxCO0FBQ0g7QUFDSjtBQXpLNEIsQ0FBVCxDQUF4QiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEBhdXRob3I6IHh4eEBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgIOi/memHjOaYr+aPj+i/sOi/meS4queql+S9k+eahOS9nOeUqOeahFxuLy8gPGJyLz5DcmVhdGU6IDIwMTktMDYtMjcgMDk6NDE6MDdcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgUGF0aFRvb2wgPSByZXF1aXJlKFwicGF0aHRvb2xcIik7XG52YXIgUGxheWVySGVhZCA9IHJlcXVpcmUoXCJwbGF5ZXJoZWFkXCIpO1xudmFyIFJvbGVDb250cm9sbGVyID0gcmVxdWlyZShcInJvbGVfY29udHJvbGxlclwiKTtcbnZhciBSZWRiYWdFdmVudCA9IHJlcXVpcmUoXCJyZWRiYWdfZXZlbnRcIik7XG52YXIgVGltZVRvb2wgPSByZXF1aXJlKFwidGltZXRvb2xcIik7XG52YXIgUmVkQmFnTG9va0l0ZW0gPSByZXF1aXJlKFwicmVkYmFnX2xvb2tfaXRlbVwiKTtcbnZhciBDb21tb25TY3JvbGxWaWV3ID0gcmVxdWlyZShcImNvbW1vbl9zY3JvbGx2aWV3XCIpO1xuXG52YXIgUmVkYmFnX2xvb2tXaW5kb3cgPSBjYy5DbGFzcyh7XG4gICAgZXh0ZW5kczogQmFzZVZpZXcsXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnByZWZhYlBhdGggPSBQYXRoVG9vbC5nZXRQcmVmYWJQYXRoKFwicmVkYmFnXCIsIFwicmVkYmFnX2xvb2tcIik7XG4gICAgICAgIHRoaXMudmlld1RhZyA9IFNDRU5FX1RBRy5kaWFsb2d1ZTsgICAgICAgICAgICAgICAgLy/or6XnqpfkvZPmiYDlsZ51aeWxgue6pyzlhajlsY91aemcgOimgeWcqHVp5bGCLOmdnuWFqOWxj3Vp5ZyoZGlhbG9ndWXlsYIs6L+Z5Liq6KaB5rOo5oSPXG4gICAgICAgIHRoaXMud2luX3R5cGUgPSBXaW5UeXBlLk1pbmk7ICAgICAgICAgICAgICAgLy/mmK/lkKbmmK/lhajlsY/nqpfkvZMgIFdpblR5cGUuRnVsbCwgV2luVHlwZS5CaWcsIFdpblR5cGUuTWluaSwgV2luVHlwZS5UaXBzXG4gICAgfSxcblxuICAgIC8vIOWIneWni+WMluS4gOS6m+mFjee9ruaVsOaNrizlj6/ku6XnlKjkuo7lo7DmmI7kuIDkupvlj5jph4/kuYvnsbvnmoRcbiAgICBpbml0Q29uZmlnOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuY3RybCA9IHJlcXVpcmUoXCJyZWRiYWdfY29udHJvbGxlclwiKS5nZXRJbnN0YW5jZSgpO1xuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI7nmoTlm57osIMs5Y+v5Lul5Zyo6L+Z6YeM5o2V6I6355u45YWz6IqC54K55oiW6ICF57uE5Lu2XG4gICAgb3BlbkNhbGxCYWNrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuYmFja2dyb3VuZCA9IHRoaXMuc2Vla0NoaWxkKFwiYmFja2dyb3VuZFwiKTtcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kLnNjYWxlID0gRklUX1NDQUxFO1xuXG4gICAgICAgIHRoaXMubWFpbl9wYW5lbCA9IHRoaXMuc2Vla0NoaWxkKFwibWFpbl9wYW5lbFwiKTtcbiAgICAgICAgdGhpcy5zaXplID0gdGhpcy5tYWluX3BhbmVsLmdldENvbnRlbnRTaXplKCk7XG5cbiAgICAgICAgdGhpcy5jbG9zZV9idG4gPSB0aGlzLnNlZWtDaGlsZChcImNsb3NlX2J0blwiKTtcbiAgICAgICAgdGhpcy5sYWJlbF9wYW5lbCA9IHRoaXMuc2Vla0NoaWxkKFwibGFiZWxfcGFuZWxcIik7XG5cbiAgICAgICAgdGhpcy50aXRsZV9sYiA9IHRoaXMuc2Vla0NoaWxkKHRoaXMubGFiZWxfcGFuZWwsIFwidGl0bGVcIiwgY2MuTGFiZWwpO1xuXG4gICAgICAgIHRoaXMuYmdfc3AgPSB0aGlzLnNlZWtDaGlsZChcImJnXCIsIGNjLlNwcml0ZSk7XG4gICAgICAgIHRoaXMubG9hZFJlcyhQYXRoVG9vbC5nZXRCaWdCZyhcImJpZ2JnXzQyXCIpLCBmdW5jdGlvbiAoc3ApIHtcbiAgICAgICAgICAgIHRoaXMuYmdfc3Auc3ByaXRlRnJhbWUgPSBzcDtcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxuXG5cbiAgICAgICAgdGhpcy5oZWFkX2ljb24gPSBuZXcgUGxheWVySGVhZCgpO1xuICAgICAgICB0aGlzLmhlYWRfaWNvbi5zaG93KCk7XG4gICAgICAgIHRoaXMuaGVhZF9pY29uLnNldFBhcmVudCh0aGlzLm1haW5fcGFuZWwpO1xuICAgICAgICB0aGlzLmhlYWRfaWNvbi5zZXRQb3NpdGlvbigwLDI1MCk7XG4gICAgICAgIHRoaXMuaGVhZF9pY29uLnNldFNjYWxlKDAuOSk7XG4gICAgICAgIHRoaXMuaGVhZF9pY29uLmFkZENhbGxCYWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciByb2xlVm8gPSBSb2xlQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldFJvbGVWbygpO1xuICAgICAgICAgICAgaWYgKHJvbGVWby5yaWQgPT0gdGhpcy5kYXRhLnJpZCAmJiByb2xlVm8uc3J2X2lkID09IHRoaXMuZGF0YS5zcnZfaWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICByZXF1aXJlKFwiY2hhdF9jb250cm9sbGVyXCIpLmdldEluc3RhbmNlKCkub3BlbkZyaWVuZEluZm8odGhpcy5kYXRhKVxuICAgICAgICB9LmJpbmQodGhpcykpXG5cbiAgICAgICAgdGhpcy5zdGF0dXNfYmdfbmQgPSB0aGlzLnNlZWtDaGlsZChcInN0YXR1c19iZ1wiKTtcbiAgICAgICAgdGhpcy5zdGF0dXNfYmdfbmQuYWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5kZXNjX2xhYmVsX3J0ID0gdGhpcy5zZWVrQ2hpbGQoXCJkZXNjX2xhYmVsXCIsIGNjLlJpY2hUZXh0KTtcbiAgICAgICAgdGhpcy5yb2xlX25hbWVfcnQgPSB0aGlzLnNlZWtDaGlsZChcInJvbGVfbmFtZVwiLCBjYy5SaWNoVGV4dCk7XG5cbiAgICAgICAgdGhpcy5sZXNzX251bV9sYiA9IHRoaXMuc2Vla0NoaWxkKFwibGVzc19udW1cIiwgY2MuTGFiZWwpO1xuICAgICAgICB0aGlzLmxlc3NfdGltZV9sYiA9IHRoaXMuc2Vla0NoaWxkKFwibGVzc190aW1lXCIsIGNjLkxhYmVsKTtcblxuICAgICAgICBpZih0aGlzLmV2ZW50X2RhdGEpe1xuICAgICAgICAgICAgdGhpcy51cGRhdGVNZXNzYWdlKGV2ZW50X2RhdGEpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVNZW1iZXJMaXN0KGV2ZW50X2RhdGEpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIOazqOWGjOS6i+S7tuebkeWQrOeahOaOpeWPoyzkuI3pnIDopoHmiYvliqjosIPnlKgs5aaC5p6c5piv5L2/55SoZ2NvcmUuR2xvYmFsRXZlbnTnm5HlkKws5Y+v5Lul55u05o6l6LCD55SoYWRkR2xvYmFsRXZlbnRcbiAgICByZWdpc3RlckV2ZW50OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIFV0aWxzLm9uVG91Y2hFbmQodGhpcy5iYWNrZ3JvdW5kLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLmN0cmwub3Blbkxvb2tXaW5kb3coZmFsc2UpO1xuICAgICAgICB9LmJpbmQodGhpcyksIDIpXG5cbiAgICAgICAgVXRpbHMub25Ub3VjaEVuZCh0aGlzLmNsb3NlX2J0biwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5jdHJsLm9wZW5Mb29rV2luZG93KGZhbHNlKTtcbiAgICAgICAgfS5iaW5kKHRoaXMpLCAyKVxuXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoUmVkYmFnRXZlbnQuR2V0X0xpc3RfRXZlbnQsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICBpZih0aGlzLnJvb3Rfd25kID09IG51bGwpe1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRfZGF0YSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1lc3NhZ2UoZGF0YSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1lbWJlckxpc3QoZGF0YSk7XG4gICAgICAgIH0sIHRoaXMpXG4gICAgfSxcblxuICAgIHVwZGF0ZU1lc3NhZ2U6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGlmICghZGF0YSkgcmV0dXJuXG4gICAgICAgIGlmICghdGhpcy5kYXRhKSByZXR1cm5cbiAgICAgICAgdGhpcy5zdGF0dXNfYmdfbmQuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHRoaXMubGlzdF9kYXRhID0gZGF0YTtcbiAgICAgICAgdGhpcy5oZWFkX2ljb24uc2V0SGVhZFJlcyhkYXRhLmZhY2VfaWQpO1xuICAgICAgICB0aGlzLmhlYWRfaWNvbi5zZXRGcmFtZVJlcyhkYXRhLmF2YXRhcl9iaWQpO1xuXG4gICAgICAgIHZhciBjb25maWcgPSBDb25maWcuZ3VpbGRfZGF0YS5kYXRhX2d1aWxkX3JlZF9iYWdbdGhpcy5kYXRhLnR5cGVdO1xuICAgICAgICBpZiAoIWNvbmZpZykgcmV0dXJuXG4gICAgICAgIHRoaXMucmVkX2NvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgdGhpcy50aXRsZV9sYi5zdHJpbmcgPSBjb25maWcubmFtZTtcbiAgICAgICAgdmFyIG5hbWUgPSBkYXRhLm5hbWUgfHwgXCJcIjtcbiAgICAgICAgdGhpcy5yb2xlX25hbWVfcnQuc3RyaW5nID0gY2MuanMuZm9ybWF0U3RyKFV0aWxzLlRJMThOKFwiPGNvbG9yPSNmZmVhOTY+JXM8L2M+55qE57qi5YyFXCIpLCBuYW1lKTtcblxuICAgICAgICB2YXIgY29uZmlnID0gQ29uZmlnLmd1aWxkX2RhdGEuZGF0YV9ndWlsZF9yZWRfYmFnW2RhdGEudHlwZV07XG4gICAgICAgIGlmIChjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzY19sYWJlbF9ydC5zdHJpbmcgPSBjb25maWcubXNnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZGF0YS5udW0gPj0gdGhpcy5kYXRhLm1heF9udW0pIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzX2JnX25kLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxlc3NfbnVtX2xiLnN0cmluZyA9IGNjLmpzLmZvcm1hdFN0cihVdGlscy5USTE4TihcIuWJqeS9meS4quaVsO+8miVzLyVzXCIpLCB0aGlzLmRhdGEubWF4X251bSAtIHRoaXMuZGF0YS5udW0sIHRoaXMuZGF0YS5tYXhfbnVtKTtcbiAgICAgICAgaWYgKHRoaXMubGVzc190aW1lcikge1xuICAgICAgICAgICAgZ2NvcmUuVGltZXIuZGVsKHRoaXMubGVzc190aW1lcik7XG4gICAgICAgICAgICB0aGlzLmxlc3NfdGltZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHZhciBsZXNzX3RpbWUgPSB0aGlzLmRhdGEudGltZSB8fCAwO1xuICAgICAgICBpZiAobGVzc190aW1lIC0gZ2NvcmUuU21hcnRTb2NrZXQuZ2V0VGltZSgpIDw9IDApIHtcbiAgICAgICAgICAgIHRoaXMubGVzc190aW1lX2xiLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi5Ymp5L2Z5pe26Ze077ya5bey6L+H5pyfXCIpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMubGVzc190aW1lcikge1xuICAgICAgICAgICAgdGhpcy5sZXNzX3RpbWVyID0gZ2NvcmUuVGltZXIuc2V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxlc3NfdGltZV9sYi5zdHJpbmcgPSBjYy5qcy5mb3JtYXRTdHIoVXRpbHMuVEkxOE4oXCLliankvZnml7bpl7TvvJolc1wiKSwgVGltZVRvb2wuZ2V0VGltZUZvcm1hdERheShsZXNzX3RpbWUgLSBnY29yZS5TbWFydFNvY2tldC5nZXRUaW1lKCkpKTtcbiAgICAgICAgICAgICAgICBsZXNzX3RpbWUgPSBsZXNzX3RpbWUgLSAxO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCAxMDAwLCAtMSlcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI4s5re75Yqg5Yiw5a+55bqU5Li76IqC54K55LmL5ZCO55qE5Zue6LCDLOS5n+WwseaYr+S4gOS4queql+S9k+eahOato+W8j+WFpeWPoyzlj6/ku6Xorr7nva7kuIDkupvmlbDmja7kuoZcbiAgICBvcGVuUm9vdFduZDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YVxuICAgICAgICB0aGlzLmN0cmwuc2VuZGVyMTM1NDAodGhpcy5kYXRhLmlkKTtcbiAgICB9LFxuXG4gICAgdXBkYXRlTWVtYmVyTGlzdDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxpc3Rfdmlldykge1xuICAgICAgICAgICAgdmFyIHNjcm9sbF92aWV3X3NpemUgPSBjYy5zaXplKDQ1MCwgNDAwKTtcbiAgICAgICAgICAgIHZhciBzZXR0aW5nID0ge1xuICAgICAgICAgICAgICAgIGl0ZW1fY2xhc3M6IFJlZEJhZ0xvb2tJdGVtLCAgICAgIC8vIOWNleWFg+exu1xuICAgICAgICAgICAgICAgIHN0YXJ0X3g6IDEsICAgICAgICAgICAgICAgICAgICAvLyDnrKzkuIDkuKrljZXlhYPnmoRY6LW354K5XG4gICAgICAgICAgICAgICAgc3BhY2VfeDogMiwgICAgICAgICAgICAgICAgICAgIC8vIHjmlrnlkJHnmoTpl7TpmpRcbiAgICAgICAgICAgICAgICBzdGFydF95OiAxMCwgICAgICAgICAgICAgICAgICAgIC8vIOesrOS4gOS4quWNleWFg+eahFnotbfngrlcbiAgICAgICAgICAgICAgICBzcGFjZV95OiAzLCAgICAgICAgICAgICAgICAgICAvLyB55pa55ZCR55qE6Ze06ZqUXG4gICAgICAgICAgICAgICAgaXRlbV93aWR0aDogNDU1LCAgICAgICAgICAgICAgIC8vIOWNleWFg+eahOWwuuWvuHdpZHRoXG4gICAgICAgICAgICAgICAgaXRlbV9oZWlnaHQ6IDkzLCAgICAgICAgICAgICAgLy8g5Y2V5YWD55qE5bC65a+4aGVpZ2h0XG4gICAgICAgICAgICAgICAgcm93OiAxLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIOihjOaVsO+8jOS9nOeUqOS6juawtOW5s+a7muWKqOexu+Wei1xuICAgICAgICAgICAgICAgIGNvbDogMSwgICAgICAgICAgICAgICAgICAgICAgICAvLyDliJfmlbDvvIzkvZznlKjkuo7lnoLnm7Tmu5rliqjnsbvlnotcbiAgICAgICAgICAgICAgICBuZWVkX2R5bmFtaWM6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubGlzdF92aWV3ID0gbmV3IENvbW1vblNjcm9sbFZpZXcoKVxuICAgICAgICAgICAgdGhpcy5saXN0X3ZpZXcuY3JlYXRlU2Nyb2xsKHRoaXMubWFpbl9wYW5lbCwgY2MudjIoMCwtMTAwKSwgU2Nyb2xsVmlld0Rpci52ZXJ0aWNhbCwgU2Nyb2xsVmlld1N0YXJ0UG9zLnRvcCwgc2Nyb2xsX3ZpZXdfc2l6ZSwgc2V0dGluZywgY2MudjIoMC41LCAwLjUpKVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxpc3QgPSBkYXRhLmxpc3QgfHwgW107XG4gICAgICAgIGxpc3Quc29ydChVdGlscy50YWJsZVVwcGVyU29ydGVyKFtcInZhbFwiLFwidGltZVwiXSkpO1xuICAgICAgICBmb3IodmFyIGkgaW4gbGlzdCl7XG4gICAgICAgICAgICBsaXN0W2ldLmluZGV4ID0gaTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxpc3Rfdmlldy5zZXREYXRhKGxpc3QsbnVsbCx0aGlzLnJlZF9jb25maWcpO1xuICAgIH0sXG5cbiAgICAvLyDlhbPpl63nqpfkvZPlm57osIMs6ZyA6KaB5Zyo6L+Z6YeM6LCD55So6K+l56qX5L2T5omA5bGeY29udHJvbGxlcueahGNsb3Nl5pa55rOV5rKh55So5LqO572u56m66K+l56qX5L2T5a6e5L6L5a+56LGhXG4gICAgY2xvc2VDYWxsQmFjazogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmN0cmwub3Blbkxvb2tXaW5kb3coZmFsc2UpO1xuICAgICAgICBpZiAodGhpcy5saXN0X3ZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMubGlzdF92aWV3LmRlbGV0ZU1lKCk7XG4gICAgICAgICAgICB0aGlzLmxpc3RfdmlldyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaGVhZF9pY29uKSB7XG4gICAgICAgICAgICB0aGlzLmhlYWRfaWNvbi5kZWxldGVNZSgpO1xuICAgICAgICAgICAgdGhpcy5oZWFkX2ljb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmxlc3NfdGltZXIpIHtcbiAgICAgICAgICAgIGdjb3JlLlRpbWVyLmRlbCh0aGlzLmxlc3NfdGltZXIpO1xuICAgICAgICAgICAgdGhpcy5sZXNzX3RpbWVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH0sXG59KSJdfQ==