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
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/mainui/view/item_exhibition_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, 'a55ce9JrYlBopIlwl6eeOCc', 'item_exhibition_window');
// Scripts/mod/mainui/view/item_exhibition_window.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
//     通用获得道具展示显示面板,这边只支持物品样式的不支持其他任何样式的
// <br/>Create: 2019-03-01 09:54:59
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
var ActionController = require("action_controller");
 
var MainuiEvent = require("mainui_event");
 
var MainuiConst = require("mainui_const");
 
var SeerpalaceController = require("seerpalace_controller");
 
var Item_exhibitionWindow = cc.Class({
  "extends": BaseView,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("mainui", "item_exhibition_view");
    this.viewTag = SCENE_TAG.dialogue; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
    // this.win_type = WinType.Full;               //是否是全屏窗体  WinType.Full, WinType.Big, WinType.Mini, WinType.Tips
  },
  // 初始化一些配置数据,可以用于声明一些变量之类的
  initConfig: function initConfig() {
    this.controller = require("mainui_controller").getInstance();
    this.open_type = MainuiConst.item_open_type.normal;
    this.start_y = 20;
    this.space = 40;
    this.col = 4;
    this.cache_list = {};
  },
  // 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件
  openCallBack: function openCallBack() {
    this.background = this.seekChild("background"); // 背景
 
    this.background.scale = FIT_SCALE;
    this.confirm_btn = this.seekChild("confirm_btn"); // 点击空白处关闭
 
    this.close_btn = this.seekChild("close_btn");
    this.close_btn_label = this.close_btn.getChildByName("label").getComponent(cc.Label);
    this.fun_btn = this.seekChild("fun_btn");
    this.fun_btn_label = this.fun_btn.getChildByName("label").getComponent(cc.Label);
    this.skeleton = this.seekChild("title_container", sp.Skeleton); // 特效
 
    this.scroll_view = this.seekChild("scroll_view").getComponent(cc.ScrollView);
    this.content = this.seekChild("content"); // 滚动容器
 
    this.notice_label = this.seekChild("notice_label", cc.Label); // 额外描述
 
    this.scroll_height = this.content.height; // 获取控件高度
 
    this.scroll_width = this.content.width;
  },
  // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
  registerEvent: function registerEvent() {
    Utils.onTouchEnd(this.background, function () {
      if (!this.open_type || this.open_type == MainuiConst.item_open_type.normal) {
        this.onClickClose();
      }
    }.bind(this), 1);
    Utils.onTouchEnd(this.confirm_btn, function () {
      this.onClickClose();
    }.bind(this), 1); //关闭按钮
 
    Utils.onTouchEnd(this.close_btn, function () {
      this.onClickClose();
    }.bind(this), 2); //功能按钮
 
    Utils.onTouchEnd(this.fun_btn, function () {
      this.onClickFunBtn();
    }.bind(this), 2);
  },
  onClickClose: function onClickClose() {
    this.controller.openGetItemView(false);
    ActionController.getInstance().checkOpenActionLimitGiftMainWindow(); // GlobalEvent:getInstance():Fire(BattleEvent.NEXT_SHOW_RESULT_VIEW)
  },
  onClickFunBtn: function onClickFunBtn() {
    if (this.open_type == MainuiConst.item_open_type.seerpalace) {
      var group_id = SeerpalaceController.getInstance().getModel().getLastSummonGroupId();
 
      if (group_id != null && group_id != 0) {
        SeerpalaceController.getInstance().requestSeerpalaceSummon(group_id);
      }
 
      this.onClickClose();
    }
  },
  // 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了
  //{list:list, source:source}
  openRootWnd: function openRootWnd(params) {
    // cc.error(params);
    if (this.create_hanlder) {
      this.stopUpdate(this.create_hanlder);
      this.create_hanlder = null;
    }
 
    this.start_y = 20;
    this.render_list = params.list;
    var source = params.source;
    this.extend = params.extend;
    this.open_type = params.open_type;
 
    if (this.open_type == MainuiConst.item_open_type.normal) {
      this.close_btn.active = false;
      this.fun_btn.active = false;
      this.confirm_btn.active = true;
    } else if (this.open_type == MainuiConst.item_open_type.seerpalace) {
      this.close_btn.active = true;
      this.fun_btn.active = true;
      this.confirm_btn.active = false;
      this.close_btn_label.string = Utils.TI18N("确定");
      this.fun_btn_label.string = Utils.TI18N("再次召唤");
    }
 
    this.handleEffect();
    this.updateData();
  },
  // 创建title展示动画
  handleEffect: function handleEffect() {
    var resources_path = PathTool.getSpinePath("E51020");
    this.loadRes(resources_path, function (res_object) {
      this.skeleton.skeletonData = res_object;
      this.skeleton.setAnimation(0, PlayerAction.action_3, false);
    }.bind(this));
  },
  // 创建物品单例
  updateData: function updateData() {
    for (var i in this.cache_list) {
      if (this.cache_list[i]) {
        this.cache_list[i].deleteMe();
        this.cache_list[i] = null;
      }
    }
 
    this.cache_list = {};
    var sum = this.render_list.length;
    this.row = Math.ceil(sum / this.col);
    var max_height = this.start_y + (this.space + 120) * this.row;
    this.max_height = Math.max(max_height, this.scroll_height);
    this.content.height = this.max_height;
    this.scroll_view.scrollToTop(0);
 
    if (sum >= this.col) {
      sum = this.col;
    }
 
    var total_width = sum * 120 + (sum - 1) * this.space;
    this.start_x = (this.scroll_width - total_width) * 0.5;
 
    if (this.row == 1) {
      this.start_y = this.max_height * 0.5;
    } else {
      this.start_y = this.max_height - this.start_y - 60;
    }
 
    if (this.create_hanlder == null) {
      this.create_hanlder = this.startUpdate(this.render_list.length, this.creatItem.bind(this));
    }
  },
  // 分帧创建
  creatItem: function creatItem(index) {
    if (this.cache_list[index] == null) {
      var _x = this.start_x + 60 + index % this.col * (120 + this.space);
 
      var _y = this.start_y - Math.floor(index / this.col) * (120 + this.space);
 
      var item = Utils.createClass("item_exhibition_list_panel");
      item.setParent(this.content);
      item.show(this.render_list[index]);
      item.setPosition(_x, _y);
      this.cache_list[index] = item;
    }
  },
  // 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
  closeCallBack: function closeCallBack() {
    if (this.cache_list) {
      for (var i in this.cache_list) {
        this.cache_list[i].deleteMe();
        this.cache_list[i] = null;
      }
    }
 
    gcore.GlobalEvent.fire(MainuiEvent.CLOSE_ITEM_VIEW, this.extend);
    this.controller.openGetItemView(false);
  }
});
 
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxtYWludWlcXHZpZXdcXGl0ZW1fZXhoaWJpdGlvbl93aW5kb3cuanMiXSwibmFtZXMiOlsiUGF0aFRvb2wiLCJyZXF1aXJlIiwiQWN0aW9uQ29udHJvbGxlciIsIk1haW51aUV2ZW50IiwiTWFpbnVpQ29uc3QiLCJTZWVycGFsYWNlQ29udHJvbGxlciIsIkl0ZW1fZXhoaWJpdGlvbldpbmRvdyIsImNjIiwiQ2xhc3MiLCJCYXNlVmlldyIsImN0b3IiLCJwcmVmYWJQYXRoIiwiZ2V0UHJlZmFiUGF0aCIsInZpZXdUYWciLCJTQ0VORV9UQUciLCJkaWFsb2d1ZSIsImluaXRDb25maWciLCJjb250cm9sbGVyIiwiZ2V0SW5zdGFuY2UiLCJvcGVuX3R5cGUiLCJpdGVtX29wZW5fdHlwZSIsIm5vcm1hbCIsInN0YXJ0X3kiLCJzcGFjZSIsImNvbCIsImNhY2hlX2xpc3QiLCJvcGVuQ2FsbEJhY2siLCJiYWNrZ3JvdW5kIiwic2Vla0NoaWxkIiwic2NhbGUiLCJGSVRfU0NBTEUiLCJjb25maXJtX2J0biIsImNsb3NlX2J0biIsImNsb3NlX2J0bl9sYWJlbCIsImdldENoaWxkQnlOYW1lIiwiZ2V0Q29tcG9uZW50IiwiTGFiZWwiLCJmdW5fYnRuIiwiZnVuX2J0bl9sYWJlbCIsInNrZWxldG9uIiwic3AiLCJTa2VsZXRvbiIsInNjcm9sbF92aWV3IiwiU2Nyb2xsVmlldyIsImNvbnRlbnQiLCJub3RpY2VfbGFiZWwiLCJzY3JvbGxfaGVpZ2h0IiwiaGVpZ2h0Iiwic2Nyb2xsX3dpZHRoIiwid2lkdGgiLCJyZWdpc3RlckV2ZW50IiwiVXRpbHMiLCJvblRvdWNoRW5kIiwib25DbGlja0Nsb3NlIiwiYmluZCIsIm9uQ2xpY2tGdW5CdG4iLCJvcGVuR2V0SXRlbVZpZXciLCJjaGVja09wZW5BY3Rpb25MaW1pdEdpZnRNYWluV2luZG93Iiwic2VlcnBhbGFjZSIsImdyb3VwX2lkIiwiZ2V0TW9kZWwiLCJnZXRMYXN0U3VtbW9uR3JvdXBJZCIsInJlcXVlc3RTZWVycGFsYWNlU3VtbW9uIiwib3BlblJvb3RXbmQiLCJwYXJhbXMiLCJjcmVhdGVfaGFubGRlciIsInN0b3BVcGRhdGUiLCJyZW5kZXJfbGlzdCIsImxpc3QiLCJzb3VyY2UiLCJleHRlbmQiLCJhY3RpdmUiLCJzdHJpbmciLCJUSTE4TiIsImhhbmRsZUVmZmVjdCIsInVwZGF0ZURhdGEiLCJyZXNvdXJjZXNfcGF0aCIsImdldFNwaW5lUGF0aCIsImxvYWRSZXMiLCJyZXNfb2JqZWN0Iiwic2tlbGV0b25EYXRhIiwic2V0QW5pbWF0aW9uIiwiUGxheWVyQWN0aW9uIiwiYWN0aW9uXzMiLCJpIiwiZGVsZXRlTWUiLCJzdW0iLCJsZW5ndGgiLCJyb3ciLCJNYXRoIiwiY2VpbCIsIm1heF9oZWlnaHQiLCJtYXgiLCJzY3JvbGxUb1RvcCIsInRvdGFsX3dpZHRoIiwic3RhcnRfeCIsInN0YXJ0VXBkYXRlIiwiY3JlYXRJdGVtIiwiaW5kZXgiLCJfeCIsIl95IiwiZmxvb3IiLCJpdGVtIiwiY3JlYXRlQ2xhc3MiLCJzZXRQYXJlbnQiLCJzaG93Iiwic2V0UG9zaXRpb24iLCJjbG9zZUNhbGxCYWNrIiwiZ2NvcmUiLCJHbG9iYWxFdmVudCIsImZpcmUiLCJDTE9TRV9JVEVNX1ZJRVciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSUEsUUFBUSxHQUFHQyxPQUFPLENBQUMsVUFBRCxDQUF0Qjs7QUFDQSxJQUFJQyxnQkFBZ0IsR0FBR0QsT0FBTyxDQUFDLG1CQUFELENBQTlCOztBQUNBLElBQUlFLFdBQVcsR0FBR0YsT0FBTyxDQUFDLGNBQUQsQ0FBekI7O0FBQ0EsSUFBSUcsV0FBVyxHQUFHSCxPQUFPLENBQUMsY0FBRCxDQUF6Qjs7QUFDQSxJQUFJSSxvQkFBb0IsR0FBR0osT0FBTyxDQUFDLHVCQUFELENBQWxDOztBQUVBLElBQUlLLHFCQUFxQixHQUFHQyxFQUFFLENBQUNDLEtBQUgsQ0FBUztBQUNq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LFNBQUwsQ0FBZSxLQUFLNUQsT0FBcEI7QUFDQTBELE1BQUFBLElBQUksQ0FBQ0csSUFBTCxDQUFVLEtBQUt0QyxXQUFMLENBQWlCK0IsS0FBakIsQ0FBVjtBQUNBSSxNQUFBQSxJQUFJLENBQUNJLFdBQUwsQ0FBaUJQLEVBQWpCLEVBQXFCQyxFQUFyQjtBQUNBLFdBQUszRSxVQUFMLENBQWdCeUUsS0FBaEIsSUFBeUJJLElBQXpCO0FBQ0g7QUFDSixHQTdKZ0M7QUErSmpDO0FBQ0FLLEVBQUFBLGFBQWEsRUFBQyx5QkFBVTtBQUNwQixRQUFHLEtBQUtsRixVQUFSLEVBQW1CO0FBQ2YsV0FBSSxJQUFJMkQsQ0FBUixJQUFhLEtBQUszRCxVQUFsQixFQUE2QjtBQUN6QixhQUFLQSxVQUFMLENBQWdCMkQsQ0FBaEIsRUFBbUJDLFFBQW5CO0FBQ0EsYUFBSzVELFVBQUwsQ0FBZ0IyRCxDQUFoQixJQUFxQixJQUFyQjtBQUNIO0FBQ0o7O0FBQ0R3QixJQUFBQSxLQUFLLENBQUNDLFdBQU4sQ0FBa0JDLElBQWxCLENBQXVCM0csV0FBVyxDQUFDNEcsZUFBbkMsRUFBbUQsS0FBS3pDLE1BQXhEO0FBQ0EsU0FBS3JELFVBQUwsQ0FBZ0J1QyxlQUFoQixDQUFnQyxLQUFoQztBQUNIO0FBektnQyxDQUFULENBQTVCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogeHh4QHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXG4vLyBAZGVzY3JpcHRpb246XG4vLyAgICAg6YCa55So6I635b6X6YGT5YW35bGV56S65pi+56S66Z2i5p2/LOi/mei+ueWPquaUr+aMgeeJqeWTgeagt+W8j+eahOS4jeaUr+aMgeWFtuS7luS7u+S9leagt+W8j+eahFxuLy8gPGJyLz5DcmVhdGU6IDIwMTktMDMtMDEgMDk6NTQ6NTlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgUGF0aFRvb2wgPSByZXF1aXJlKFwicGF0aHRvb2xcIik7XG52YXIgQWN0aW9uQ29udHJvbGxlciA9IHJlcXVpcmUoXCJhY3Rpb25fY29udHJvbGxlclwiKVxudmFyIE1haW51aUV2ZW50ID0gcmVxdWlyZShcIm1haW51aV9ldmVudFwiKTtcbnZhciBNYWludWlDb25zdCA9IHJlcXVpcmUoXCJtYWludWlfY29uc3RcIik7XG52YXIgU2VlcnBhbGFjZUNvbnRyb2xsZXIgPSByZXF1aXJlKFwic2VlcnBhbGFjZV9jb250cm9sbGVyXCIpO1xuXG52YXIgSXRlbV9leGhpYml0aW9uV2luZG93ID0gY2MuQ2xhc3Moe1xuICAgIGV4dGVuZHM6IEJhc2VWaWV3LFxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wcmVmYWJQYXRoID0gUGF0aFRvb2wuZ2V0UHJlZmFiUGF0aChcIm1haW51aVwiLCBcIml0ZW1fZXhoaWJpdGlvbl92aWV3XCIpO1xuICAgICAgICB0aGlzLnZpZXdUYWcgPSBTQ0VORV9UQUcuZGlhbG9ndWU7ICAgICAgICAgICAgICAgIC8v6K+l56qX5L2T5omA5bGedWnlsYLnuqcs5YWo5bGPdWnpnIDopoHlnKh1aeWxgizpnZ7lhajlsY91aeWcqGRpYWxvZ3Vl5bGCLOi/meS4quimgeazqOaEj1xuICAgICAgICAvLyB0aGlzLndpbl90eXBlID0gV2luVHlwZS5GdWxsOyAgICAgICAgICAgICAgIC8v5piv5ZCm5piv5YWo5bGP56qX5L2TICBXaW5UeXBlLkZ1bGwsIFdpblR5cGUuQmlnLCBXaW5UeXBlLk1pbmksIFdpblR5cGUuVGlwc1xuICAgIH0sXG5cbiAgICAvLyDliJ3lp4vljJbkuIDkupvphY3nva7mlbDmja4s5Y+v5Lul55So5LqO5aOw5piO5LiA5Lqb5Y+Y6YeP5LmL57G755qEXG4gICAgaW5pdENvbmZpZzpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXIgPSByZXF1aXJlKFwibWFpbnVpX2NvbnRyb2xsZXJcIikuZ2V0SW5zdGFuY2UoKTtcbiAgICAgICAgdGhpcy5vcGVuX3R5cGUgPSBNYWludWlDb25zdC5pdGVtX29wZW5fdHlwZS5ub3JtYWw7XG4gICAgICAgIHRoaXMuc3RhcnRfeSA9IDIwO1xuICAgICAgICB0aGlzLnNwYWNlID0gNDA7XG4gICAgICAgIHRoaXMuY29sID0gNDtcbiAgICAgICAgdGhpcy5jYWNoZV9saXN0ID0ge307XG4gICAgfSxcblxuICAgIC8vIOmihOWItuS9k+WKoOi9veWujOaIkOS5i+WQjueahOWbnuiwgyzlj6/ku6XlnKjov5nph4zmjZXojrfnm7jlhbPoioLngrnmiJbogIXnu4Tku7ZcbiAgICBvcGVuQ2FsbEJhY2s6ZnVuY3Rpb24oKXtcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kID0gdGhpcy5zZWVrQ2hpbGQoXCJiYWNrZ3JvdW5kXCIpOyAgICAgICAgICAgICAgICAgLy8g6IOM5pmvXG4gICAgICAgIHRoaXMuYmFja2dyb3VuZC5zY2FsZSA9IEZJVF9TQ0FMRTtcbiAgICAgICAgdGhpcy5jb25maXJtX2J0biA9IHRoaXMuc2Vla0NoaWxkKFwiY29uZmlybV9idG5cIik7ICAgICAgICAgICAgICAgLy8g54K55Ye756m655m95aSE5YWz6ZetXG4gICAgICAgIHRoaXMuY2xvc2VfYnRuID0gdGhpcy5zZWVrQ2hpbGQoXCJjbG9zZV9idG5cIik7XG4gICAgICAgIHRoaXMuY2xvc2VfYnRuX2xhYmVsID0gdGhpcy5jbG9zZV9idG4uZ2V0Q2hpbGRCeU5hbWUoXCJsYWJlbFwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuICAgICAgICB0aGlzLmZ1bl9idG4gPSB0aGlzLnNlZWtDaGlsZChcImZ1bl9idG5cIik7XG4gICAgICAgIHRoaXMuZnVuX2J0bl9sYWJlbCA9IHRoaXMuZnVuX2J0bi5nZXRDaGlsZEJ5TmFtZShcImxhYmVsXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XG4gICAgICAgIHRoaXMuc2tlbGV0b24gPSB0aGlzLnNlZWtDaGlsZChcInRpdGxlX2NvbnRhaW5lclwiLCBzcC5Ta2VsZXRvbik7ICAgICAgIC8vIOeJueaViFxuICAgICAgICB0aGlzLnNjcm9sbF92aWV3ID0gdGhpcy5zZWVrQ2hpbGQoXCJzY3JvbGxfdmlld1wiKS5nZXRDb21wb25lbnQoY2MuU2Nyb2xsVmlldyk7XG4gICAgICAgIHRoaXMuY29udGVudCA9IHRoaXMuc2Vla0NoaWxkKFwiY29udGVudFwiKTsgICAgICAgICAgICAgICAgICAgICAgIC8vIOa7muWKqOWuueWZqFxuICAgICAgICB0aGlzLm5vdGljZV9sYWJlbCA9IHRoaXMuc2Vla0NoaWxkKFwibm90aWNlX2xhYmVsXCIsIGNjLkxhYmVsKTsgICAvLyDpop3lpJbmj4/ov7BcblxuICAgICAgICB0aGlzLnNjcm9sbF9oZWlnaHQgPSB0aGlzLmNvbnRlbnQuaGVpZ2h0OyAgICAgICAgICAgICAgICAgICAgICAgLy8g6I635Y+W5o6n5Lu26auY5bqmXG4gICAgICAgIHRoaXMuc2Nyb2xsX3dpZHRoID0gdGhpcy5jb250ZW50LndpZHRoO1xuICAgIH0sXG5cbiAgICAvLyDms6jlhozkuovku7bnm5HlkKznmoTmjqXlj6Ms5LiN6ZyA6KaB5omL5Yqo6LCD55SoLOWmguaenOaYr+S9v+eUqGdjb3JlLkdsb2JhbEV2ZW5055uR5ZCsLOWPr+S7peebtOaOpeiwg+eUqGFkZEdsb2JhbEV2ZW50XG4gICAgcmVnaXN0ZXJFdmVudDpmdW5jdGlvbigpe1xuICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMuYmFja2dyb3VuZCwgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGlmKCF0aGlzLm9wZW5fdHlwZSB8fCB0aGlzLm9wZW5fdHlwZSA9PSBNYWludWlDb25zdC5pdGVtX29wZW5fdHlwZS5ub3JtYWwpe1xuICAgICAgICAgICAgICAgIHRoaXMub25DbGlja0Nsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0uYmluZCh0aGlzKSwgMSlcblxuICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMuY29uZmlybV9idG4sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMub25DbGlja0Nsb3NlKCk7XG4gICAgICAgIH0uYmluZCh0aGlzKSwgMSlcblxuICAgICAgICAvL+WFs+mXreaMiemSrlxuICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMuY2xvc2VfYnRuLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLm9uQ2xpY2tDbG9zZSgpO1xuICAgICAgICB9LmJpbmQodGhpcyksIDIpXG5cbiAgICAgICAgLy/lip/og73mjInpkq5cbiAgICAgICAgVXRpbHMub25Ub3VjaEVuZCh0aGlzLmZ1bl9idG4sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMub25DbGlja0Z1bkJ0bigpO1xuICAgICAgICB9LmJpbmQodGhpcyksIDIpXG4gICAgfSxcblxuICAgIG9uQ2xpY2tDbG9zZTpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXIub3BlbkdldEl0ZW1WaWV3KGZhbHNlKTtcbiAgICAgICAgQWN0aW9uQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmNoZWNrT3BlbkFjdGlvbkxpbWl0R2lmdE1haW5XaW5kb3coKVxuICAgICAgICAvLyBHbG9iYWxFdmVudDpnZXRJbnN0YW5jZSgpOkZpcmUoQmF0dGxlRXZlbnQuTkVYVF9TSE9XX1JFU1VMVF9WSUVXKVxuICAgIH0sXG5cbiAgICBvbkNsaWNrRnVuQnRuOmZ1bmN0aW9uKCl7XG4gICAgICAgIGlmKHRoaXMub3Blbl90eXBlID09IE1haW51aUNvbnN0Lml0ZW1fb3Blbl90eXBlLnNlZXJwYWxhY2Upe1xuICAgICAgICAgICAgbGV0IGdyb3VwX2lkID0gU2VlcnBhbGFjZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRNb2RlbCgpLmdldExhc3RTdW1tb25Hcm91cElkKCk7XG4gICAgICAgICAgICBpZihncm91cF9pZCAhPSBudWxsICYmIGdyb3VwX2lkICE9IDApe1xuICAgICAgICAgICAgICAgIFNlZXJwYWxhY2VDb250cm9sbGVyLmdldEluc3RhbmNlKCkucmVxdWVzdFNlZXJwYWxhY2VTdW1tb24oZ3JvdXBfaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vbkNsaWNrQ2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI4s5re75Yqg5Yiw5a+55bqU5Li76IqC54K55LmL5ZCO55qE5Zue6LCDLOS5n+WwseaYr+S4gOS4queql+S9k+eahOato+W8j+WFpeWPoyzlj6/ku6Xorr7nva7kuIDkupvmlbDmja7kuoZcbiAgICAvL3tsaXN0Omxpc3QsIHNvdXJjZTpzb3VyY2V9XG4gICAgb3BlblJvb3RXbmQ6ZnVuY3Rpb24ocGFyYW1zKXtcbiAgICAgICAgLy8gY2MuZXJyb3IocGFyYW1zKTtcbiAgICAgICAgXG4gICAgICAgIGlmKHRoaXMuY3JlYXRlX2hhbmxkZXIpe1xuICAgICAgICAgICAgdGhpcy5zdG9wVXBkYXRlKHRoaXMuY3JlYXRlX2hhbmxkZXIpO1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVfaGFubGRlciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGFydF95ID0gMjA7XG4gICAgICAgIHRoaXMucmVuZGVyX2xpc3QgPSBwYXJhbXMubGlzdDtcbiAgICAgICAgdmFyIHNvdXJjZSA9IHBhcmFtcy5zb3VyY2U7XG4gICAgICAgIHRoaXMuZXh0ZW5kID0gcGFyYW1zLmV4dGVuZDtcbiAgICAgICAgdGhpcy5vcGVuX3R5cGUgPSBwYXJhbXMub3Blbl90eXBlO1xuXG4gICAgICAgIGlmKHRoaXMub3Blbl90eXBlID09IE1haW51aUNvbnN0Lml0ZW1fb3Blbl90eXBlLm5vcm1hbCl7XG4gICAgICAgICAgICB0aGlzLmNsb3NlX2J0bi5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZnVuX2J0bi5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY29uZmlybV9idG4uYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgfWVsc2UgaWYodGhpcy5vcGVuX3R5cGUgPT0gTWFpbnVpQ29uc3QuaXRlbV9vcGVuX3R5cGUuc2VlcnBhbGFjZSl7XG4gICAgICAgICAgICB0aGlzLmNsb3NlX2J0bi5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5mdW5fYnRuLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1fYnRuLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jbG9zZV9idG5fbGFiZWwuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLnoa7lrppcIik7XG4gICAgICAgICAgICB0aGlzLmZ1bl9idG5fbGFiZWwuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLlho3mrKHlj6zllKRcIik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhhbmRsZUVmZmVjdCgpO1xuICAgICAgICB0aGlzLnVwZGF0ZURhdGEoKTtcbiAgICB9LFxuXG4gICAgLy8g5Yib5bu6dGl0bGXlsZXnpLrliqjnlLtcbiAgICBoYW5kbGVFZmZlY3Q6ZnVuY3Rpb24oKXtcbiAgICAgICAgdmFyIHJlc291cmNlc19wYXRoID0gUGF0aFRvb2wuZ2V0U3BpbmVQYXRoKFwiRTUxMDIwXCIpO1xuICAgICAgICB0aGlzLmxvYWRSZXMocmVzb3VyY2VzX3BhdGgsIGZ1bmN0aW9uIChyZXNfb2JqZWN0KSB7XG4gICAgICAgICAgICB0aGlzLnNrZWxldG9uLnNrZWxldG9uRGF0YSA9IHJlc19vYmplY3Q7XG4gICAgICAgICAgICB0aGlzLnNrZWxldG9uLnNldEFuaW1hdGlvbigwLCBQbGF5ZXJBY3Rpb24uYWN0aW9uXzMsIGZhbHNlKVxuICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgfSxcblxuICAgIC8vIOWIm+W7uueJqeWTgeWNleS+i1xuICAgIHVwZGF0ZURhdGE6ZnVuY3Rpb24oKXtcbiAgICAgICAgZm9yKGxldCBpIGluIHRoaXMuY2FjaGVfbGlzdCl7XG4gICAgICAgICAgICBpZih0aGlzLmNhY2hlX2xpc3RbaV0pe1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVfbGlzdFtpXS5kZWxldGVNZSgpXG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZV9saXN0W2ldID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNhY2hlX2xpc3QgPSB7fTtcbiAgICAgICAgdmFyIHN1bSA9IHRoaXMucmVuZGVyX2xpc3QubGVuZ3RoO1xuICAgICAgICB0aGlzLnJvdyA9IE1hdGguY2VpbChzdW0gLyB0aGlzLmNvbCk7XG4gICAgICAgIHZhciBtYXhfaGVpZ2h0ID0gdGhpcy5zdGFydF95ICsgKHRoaXMuc3BhY2UgKyAxMjApICogdGhpcy5yb3c7XG4gICAgICAgIHRoaXMubWF4X2hlaWdodCA9IE1hdGgubWF4KG1heF9oZWlnaHQsIHRoaXMuc2Nyb2xsX2hlaWdodCk7XG4gICAgICAgIHRoaXMuY29udGVudC5oZWlnaHQgPSB0aGlzLm1heF9oZWlnaHQ7XG4gICAgICAgIHRoaXMuc2Nyb2xsX3ZpZXcuc2Nyb2xsVG9Ub3AoMCk7XG4gICAgICAgIGlmKHN1bSA+PSB0aGlzLmNvbCl7XG4gICAgICAgICAgICBzdW0gPSB0aGlzLmNvbDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdG90YWxfd2lkdGggPSBzdW0gKiAxMjAgKyAoc3VtIC0gMSkgKiB0aGlzLnNwYWNlO1xuICAgICAgICB0aGlzLnN0YXJ0X3ggPSAodGhpcy5zY3JvbGxfd2lkdGggLSB0b3RhbF93aWR0aCkgKiAwLjU7XG4gICAgICAgIGlmKHRoaXMucm93ID09IDEpe1xuICAgICAgICAgICAgdGhpcy5zdGFydF95ID0gdGhpcy5tYXhfaGVpZ2h0ICogMC41O1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRfeSA9IHRoaXMubWF4X2hlaWdodCAtIHRoaXMuc3RhcnRfeSAtIDYwO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNyZWF0ZV9oYW5sZGVyID09IG51bGwpe1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVfaGFubGRlciA9IHRoaXMuc3RhcnRVcGRhdGUodGhpcy5yZW5kZXJfbGlzdC5sZW5ndGgsIHRoaXMuY3JlYXRJdGVtLmJpbmQodGhpcykpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIOWIhuW4p+WIm+W7ulxuICAgIGNyZWF0SXRlbTpmdW5jdGlvbihpbmRleCl7XG4gICAgICAgIGlmICh0aGlzLmNhY2hlX2xpc3RbaW5kZXhdID09IG51bGwpe1xuICAgICAgICAgICAgdmFyIF94ID0gdGhpcy5zdGFydF94ICsgNjAgKyAoaW5kZXggJSB0aGlzLmNvbCkgKiAoMTIwICsgdGhpcy5zcGFjZSk7XG4gICAgICAgICAgICB2YXIgX3kgPSB0aGlzLnN0YXJ0X3kgLSBNYXRoLmZsb29yKGluZGV4IC8gdGhpcy5jb2wpICogKDEyMCArIHRoaXMuc3BhY2UpO1xuXG4gICAgICAgICAgICB2YXIgaXRlbSA9IFV0aWxzLmNyZWF0ZUNsYXNzKFwiaXRlbV9leGhpYml0aW9uX2xpc3RfcGFuZWxcIik7XG4gICAgICAgICAgICBpdGVtLnNldFBhcmVudCh0aGlzLmNvbnRlbnQpO1xuICAgICAgICAgICAgaXRlbS5zaG93KHRoaXMucmVuZGVyX2xpc3RbaW5kZXhdKTtcbiAgICAgICAgICAgIGl0ZW0uc2V0UG9zaXRpb24oX3gsIF95KTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVfbGlzdFtpbmRleF0gPSBpdGVtO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIOWFs+mXreeql+S9k+WbnuiwgyzpnIDopoHlnKjov5nph4zosIPnlKjor6XnqpfkvZPmiYDlsZ5jb250cm9sbGVy55qEY2xvc2Xmlrnms5XmsqHnlKjkuo7nva7nqbror6XnqpfkvZPlrp7kvovlr7nosaFcbiAgICBjbG9zZUNhbGxCYWNrOmZ1bmN0aW9uKCl7XG4gICAgICAgIGlmKHRoaXMuY2FjaGVfbGlzdCl7XG4gICAgICAgICAgICBmb3IobGV0IGkgaW4gdGhpcy5jYWNoZV9saXN0KXtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlX2xpc3RbaV0uZGVsZXRlTWUoKVxuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVfbGlzdFtpXSA9IG51bGwgXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShNYWludWlFdmVudC5DTE9TRV9JVEVNX1ZJRVcsdGhpcy5leHRlbmQpXG4gICAgICAgIHRoaXMuY29udHJvbGxlci5vcGVuR2V0SXRlbVZpZXcoZmFsc2UpO1xuICAgIH0sXG59KVxuIl19