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
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/welfare/view/subscription_wechat_panel.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, '4d3e0F4tARKHadc0IE0aPF6', 'subscription_wechat_panel');
// Scripts/mod/welfare/view/subscription_wechat_panel.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
//     关注公众号
// <br/>Create: {DATE}
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
var WelfareEvent = require("welfare_event");
 
var RoleController = require("role_controller");
 
var SubscriptionWechatPanel = cc.Class({
  "extends": BasePanel,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("welfare", "subscription_wechat_panel");
  },
  // 可以初始化声明一些变量的
  initConfig: function initConfig() {
    this.ctrl = require("welfare_controller").getInstance();
    this.item_list = [];
    this.item_list_2 = [];
  },
  // 初始化一些配置数据,可以用于声明一些变量之类的
  initPanel: function initPanel() {
    if (PLATFORM_TYPR == "SH_RH" && window.SH_RH_IS_SUBSCRIBE == false) {
      SDK.subscribe({
        apiType: 'isSubscribe'
      });
    }
 
    this.main_container = this.seekChild("main_container");
    this.shrh_container = this.seekChild("shrh_container"); // PLATFORM_TYPR = "SH_SDK";
 
    this.shrh_container.active = PLATFORM_TYPR == "SH_RH" || PLATFORM_TYPR == "SH_SDK";
    this.main_container.active = PLATFORM_TYPR != "SH_RH" && PLATFORM_TYPR != "SH_SDK";
    this.item_container = this.seekChild("item_container");
    this.bg_sp = this.seekChild("bg", cc.Sprite);
    this.loadRes(PathTool.getBigBg("welfare/txt_cn_subscription_wechat", "jpg"), function (res) {
      this.bg_sp.spriteFrame = res;
    }.bind(this));
    this.code_sprite = this.seekChild("code_sprite", cc.Sprite);
    this.loadRes(PathTool.getIconPath("welfare/welfare_banner", "txt_cn_welfare_bg4"), function (res) {
      this.code_sprite.spriteFrame = res;
    }.bind(this));
    this.save_btn = this.seekChild("save_btn"); //shrh
 
    this.bg_2 = this.seekChild(this.shrh_container, "bg_2", cc.Sprite);
    ;
    this.loadRes(PathTool.getBigBg("welfare/txt_cn_shrh_subscription", "jpg"), function (res) {
      this.bg_2.spriteFrame = res;
    }.bind(this));
    this.item_container_2 = this.seekChild(this.shrh_container, "item_container_2");
    this.go_btn = this.seekChild(this.shrh_container, "go_btn");
    this.get_btn = this.seekChild(this.shrh_container, "get_btn");
    this.get_btn_btn = this.seekChild(this.shrh_container, "get_btn", cc.Button);
    this.get_btn_lo = this.seekChild(this.get_btn, "Text_6", cc.LabelOutline);
    this.get_btn_lb = this.seekChild(this.get_btn, "Text_6", cc.Label);
    this.desc = this.seekChild(this.shrh_container, "txt_2", cc.Label);
    this.desc.string = Utils.TI18N("1.点击下方“前往关注”按钮前往公众号\n2.点击关注并进入公众号\n3.关注获取更多游戏最新活动讯息\n4.关注后即可领取下方奖励");
    this.copy_btn = this.seekChild(this.shrh_container, "copy_btn");
    this.copy_btn_2 = this.seekChild(this.shrh_container, "copy_btn_2");
    this.input = this.shrh_container.getChildByName("editbox").getComponent(cc.EditBox);
 
    if (PLATFORM_TYPR == "SH_SDK") {
      this.go_btn.active = false;
      this.copy_btn.active = this.copy_btn_2.active = this.input.node.active = true;
      this.get_btn.x = 360;
      this.desc.string = Utils.TI18N("1.微信搜索【剑魂之光H5】\n2.可搜索公众号:“jianhun236”\n3.点击【剑魂之光H5】并 关注\n4.点击菜单栏 福利礼包-关注礼包 领取礼包");
    } else if (PLATFORM_TYPR == "SH_RH") {
      if (window.SH_RH_IS_SUBSCRIBE) {
        this.get_btn_lo.enabled = true;
        Utils.setGreyButton(this.get_btn_btn, false);
      } else {
        Utils.setGreyButton(this.get_btn_btn);
        this.get_btn_lo.enabled = false;
      }
    }
 
    if (this.ctrl.getModel().getSubscriptionAwardStatus() == 1) {
      Utils.setGreyButton(this.get_btn_btn);
      this.get_btn_lo.enabled = false;
      this.get_btn_lb.string = Utils.TI18N("已领取");
    }
 
    if (PLATFORM_TYPR != "SH_RH" && PLATFORM_TYPR != "SH_SDK") {
      this.ctrl.tellServerWechatStatus();
    }
  },
  // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
  registerEvent: function registerEvent() {
    Utils.onTouchEnd(this.save_btn, function () {
      this.savePhotoPicture();
    }.bind(this), 1);
    Utils.onTouchEnd(this.go_btn, function () {
      if (PLATFORM_TYPR == "SH_RH") {
        //深海融合
        // console.log("调用深海关注--");
        SDK.subscribe({
          apiType: "askShow"
        }); // SDK.subscribe({ apiType: 'isSubscribe' });
      }
    }.bind(this), 1);
    this.get_btn.on("click", function () {
      Utils.playButtonSound(1);
 
      if (PLATFORM_TYPR == "SH_RH") {
        if (window.SH_RH_IS_SUBSCRIBE) {
          this.ctrl.send16694(0);
        }
      } else if (PLATFORM_TYPR == "SH_SDK") {
        var str = this.input.string;
        str = str.replace('\n', '');
 
        if (str == "") {
          message(Utils.TI18N("请输入兑换码"));
        } else {
          RoleController.getInstance().sender10945(str);
        }
      }
    }.bind(this));
    Utils.onTouchEnd(this.copy_btn, function () {
      if (SDK && SDK.setClipboardData) {
        SDK.setClipboardData("剑魂之光H5");
      }
    }.bind(this), 1);
    Utils.onTouchEnd(this.copy_btn_2, function () {
      if (SDK && SDK.setClipboardData) {
        SDK.setClipboardData("jianhun236");
      }
    }.bind(this), 1);
    this.addGlobalEvent(WelfareEvent.Update_SHRH_Award_Status, function (status) {
      Utils.setGreyButton(this.get_btn_btn);
      this.get_btn_lo.enabled = false;
      this.get_btn_lb.string = Utils.TI18N("已领取");
    }.bind(this));
  },
  // 预制体加载完成之后,添加到对应主节点之后的回调可以设置一些数据了
  onShow: function onShow(params) {
    this.setItemList();
  },
  //保存图片
  savePhotoPicture: function savePhotoPicture() {
    if (this.poste_picture) return;
 
    var container = require("viewmanager").getInstance().getSceneNode(SCENE_TAG.loading);
 
    this.poste_picture = Utils.createImage(container, null, 0, 0, cc.v2(0.5, 0.5));
    this.poste_picture.type = cc.Sprite.Type.SIMPLE;
    this.poste_picture.sizeMode = cc.Sprite.SizeMode.CUSTOM;
    this.poste_picture.node.setContentSize(720, 1280);
    this.poste_picture.node.scale = FIT_SCALE;
    this.savePhotoText(this.poste_picture.node, false);
    this.loadRes(PathTool.getBigBg("welfare/txt_cn_subscription_wechat_1"), function (res) {
      this.poste_picture.spriteFrame = res;
 
      if (this.save_layout) {
        this.save_layout.active = true;
      }
 
      var name = "poste_wechat"; // SDK.CaptureScreenSaveImg(name,function(bool){
      //     if(bool==true){
      //     }else{
      //         message(Utils.TI18N("保存失败"));
      //     }
 
      if (this.time_1) {
        gcore.Timer.del(this.time_1);
        this.time_1 = null;
      }
 
      this.time_1 = gcore.Timer.set(function () {
        if (this.poste_picture) {
          this.poste_picture.node.removeFromParent();
          this.poste_picture = null;
 
          if (this.item_list_2) {
            for (var k in this.item_list_2) {
              if (this.item_list_2[k]) {
                this.item_list_2[k].deleteMe();
                this.item_list_2[k] = null;
              }
            }
          }
        }
      }.bind(this), 1000, 1); // }.bind(this));
    }.bind(this));
  },
  //截图保存的内容
  savePhotoText: function savePhotoText(node, visible) {
    if (!node) return;
    this.save_layout = new cc.Node();
    this.save_layout.setPosition(0, 0);
    this.save_layout.setContentSize(cc.size(100, 100));
    this.save_layout.setParent(node);
    this.save_layout.active = visible;
    var search = Utils.createLabel(24, new cc.Color(0xf7, 0xfd, 0xff, 0xff), new cc.Color(0x14, 0x35, 0x6c, 0xff), -300, 90, Utils.TI18N("微信搜索:"), this.save_layout, 2, cc.v2(0, 0.5));
    var str_wechat = cc.js.formatStr(Utils.TI18N("%s (%s)公众号"), WECHAT_SUBSCRIPTION_NAME, WECHAT_SUBSCRIPTION);
    var wechat_text = Utils.createLabel(24, new cc.Color(0xf7, 0xfd, 0xff, 0xff), new cc.Color(0x14, 0x35, 0x6c, 0xff), -300, 50, str_wechat, this.save_layout, 2, cc.v2(0, 0.5));
    var attent_text = Utils.createLabel(24, new cc.Color(0xf7, 0xfd, 0xff, 0xff), new cc.Color(0x14, 0x35, 0x6c, 0xff), -300, 10, Utils.TI18N("关注点击「福利补给」领取礼包码"), this.save_layout, 2, cc.v2(0, 0.5)); //二维码图片
 
    var erweima_bg = Utils.createImage(this.save_layout, null, 0, -340, cc.v2(0.5, 0.5));
    this.loadRes(PathTool.getIconPath("welfare/welfare_banner", "txt_cn_welfare_bg4"), function (res) {
      erweima_bg.spriteFrame = res;
    }.bind(this)); //奖励
 
    var reward_node = new cc.Node();
    reward_node.setPosition(-215, -160);
    reward_node.setAnchorPoint(0, 0);
    reward_node.setContentSize(cc.size(430, 174));
    reward_node.setParent(node);
    this.setCopyItemList(reward_node);
  },
  setCopyItemList: function setCopyItemList(node) {
    var bind_data = this.ctrl.getWechatData();
 
    if (this.item_list_2 == null) {
      this.item_list_2 = [];
    }
 
    if (bind_data == null || bind_data == null) return;
    var index = 0;
 
    for (var i in bind_data.items) {
      var v = bind_data.items[i];
 
      if (!this.item_list_2[i]) {
        var item = ItemsPool.getInstance().getItem("backpack_item");
        item.initConfig(false, 1, false, true);
        item.show();
        item.setParent(node);
        item.setData({
          bid: v.bid,
          num: v.num
        });
        item.setPosition(index * 134 + 85, 77);
        this.item_list_2[i] = item;
        index = index + 1;
      }
    }
  },
  //--desc:创建展示物品
  setItemList: function setItemList() {
    if (PLATFORM_TYPR == "SH_RH" || PLATFORM_TYPR == "SH_SDK") {
      var bind_data = this.ctrl.getModel().getSubscriptionAward();
      if (bind_data == null) return;
      var index = 0;
 
      for (var i in bind_data) {
        var v = bind_data[i];
 
        if (!this.item_list[i]) {
          var item = ItemsPool.getInstance().getItem("backpack_item");
          item.initConfig(false, 0.8, false, true);
          item.show();
          item.setParent(this.item_container_2);
          item.setData({
            bid: v.bid,
            num: v.num
          });
          item.setPosition(index * 120 - 120, 80);
          this.item_list[i] = item;
          index = index + 1;
        }
      }
    } else {
      var bind_data = this.ctrl.getWechatData();
      if (bind_data == null || bind_data.items == null) return;
      var index = 0;
 
      for (var i in bind_data.items) {
        var _v = bind_data.items[i];
 
        if (!this.item_list[i]) {
          var _item = ItemsPool.getInstance().getItem("backpack_item");
 
          _item.initConfig(false, 1, false, true);
 
          _item.show();
 
          _item.setParent(this.item_container);
 
          _item.setData({
            bid: _v.bid,
            num: _v.num
          });
 
          _item.setPosition(index * 134 + 85, 77);
 
          this.item_list[i] = _item;
          index = index + 1;
        }
      }
    }
  },
  setVisibleStatus: function setVisibleStatus(status) {
    this.setVisible(status);
  },
  // 面板设置不可见的回调,这里做一些不可见的屏蔽处理
  onHide: function onHide() {},
  // 当面板从主节点释放掉的调用接口,需要手动调用,而且也一定要调用
  onDelete: function onDelete() {
    if (this.item_list) {
      for (var k in this.item_list) {
        this.item_list[k].deleteMe();
        this.item_list[k] = null;
      }
 
      this.item_list = null;
    }
 
    if (this.item_list_2) {
      for (var k in this.item_list_2) {
        if (this.item_list_2[k]) {
          this.item_list_2[k].deleteMe();
          this.item_list_2[k] = null;
        }
      }
 
      this.item_list_2 = null;
    }
 
    if (this.poste_picture) {
      this.poste_picture.node.destroy();
      this.poste_picture = null;
    }
 
    if (this.time_1) {
      gcore.Timer.del(this.time_1);
      this.time_1 = 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFx3ZWxmYXJlXFx2aWV3XFxzdWJzY3JpcHRpb25fd2VjaGF0X3BhbmVsLmpzIl0sIm5hbWVzIjpbIlBhdGhUb29sIiwicmVxdWlyZSIsIldlbGZhcmVFdmVudCIsIlJvbGVDb250cm9sbGVyIiwiU3Vic2NyaXB0aW9uV2VjaGF0UGFuZWwiLCJjYyIsIkNsYXNzIiwiQmFzZVBhbmVsIiwiY3RvciIsInByZWZhYlBhdGgiLCJnZXRQcmVmYWJQYXRoIiwiaW5pdENvbmZpZyIsImN0cmwiLCJnZXRJbnN0YW5jZSIsIml0ZW1fbGlzdCIsIml0ZW1fbGlzdF8yIiwiaW5pdFBhbmVsIiwiUExBVEZPUk1fVFlQUiIsIndpbmRvdyIsIlNIX1JIX0lTX1NVQlNDUklCRSIsIlNESyIsInN1YnNjcmliZSIsImFwaVR5cGUiLCJtYWluX2NvbnRhaW5lciIsInNlZWtDaGlsZCIsInNocmhfY29udGFpbmVyIiwiYWN0aXZlIiwiaXRlbV9jb250YWluZXIiLCJiZ19zcCIsIlNwcml0ZSIsImxvYWRSZXMiLCJnZXRCaWdCZyIsInJlcyIsInNwcml0ZUZyYW1lIiwiYmluZCIsImNvZGVfc3ByaXRlIiwiZ2V0SWNvblBhdGgiLCJzYXZlX2J0biIsImJnXzIiLCJpdGVtX2NvbnRhaW5lcl8yIiwiZ29fYnRuIiwiZ2V0X2J0biIsImdldF9idG5fYnRuIiwiQnV0dG9uIiwiZ2V0X2J0bl9sbyIsIkxhYmVsT3V0bGluZSIsImdldF9idG5fbGIiLCJMYWJlbCIsImRlc2MiLCJzdHJpbmciLCJVdGlscyIsIlRJMThOIiwiY29weV9idG4iLCJjb3B5X2J0bl8yIiwiaW5wdXQiLCJnZXRDaGlsZEJ5TmFtZSIsImdldENvbXBvbmVudCIsIkVkaXRCb3giLCJub2RlIiwieCIsImVuYWJsZWQiLCJzZXRHcmV5QnV0dG9uIiwiZ2V0TW9kZWwiLCJnZXRTdWJzY3JpcHRpb25Bd2FyZFN0YXR1cyIsInRlbGxTZXJ2ZXJXZWNoYXRTdGF0dXMiLCJyZWdpc3RlckV2ZW50Iiwib25Ub3VjaEVuZCIsInNhdmVQaG90b1BpY3R1cmUiLCJvbiIsInBsYXlCdXR0b25Tb3VuZCIsInNlbmQxNjY5NCIsInN0ciIsInJlcGxhY2UiLCJtZXNzYWdlIiwic2VuZGVyMTA5NDUiLCJzZXRDbGlwYm9hcmREYXRhIiwiYWRkR2xvYmFsRXZlbnQiLCJVcGRhdGVfU0hSSF9Bd2FyZF9TdGF0dXMiLCJzdGF0dXMiLCJvblNob3ciLCJwYXJhbXMiLCJzZXRJdGVtTGlzdCIsInBvc3RlX3BpY3R1cmUiLCJjb250YWluZXIiLCJnZXRTY2VuZU5vZGUiLCJTQ0VORV9UQUciLCJsb2FkaW5nIiwiY3JlYXRlSW1hZ2UiLCJ2MiIsInR5cGUiLCJUeXBlIiwiU0lNUExFIiwic2l6ZU1vZGUiLCJTaXplTW9kZSIsIkNVU1RPTSIsInNldENvbnRlbnRTaXplIiwic2NhbGUiLCJGSVRfU0NBTEUiLCJzYXZlUGhvdG9UZXh0Iiwic2F2ZV9sYXlvdXQiLCJuYW1lIiwidGltZV8xIiwiZ2NvcmUiLCJUaW1lciIsImRlbCIsInNldCIsInJlbW92ZUZyb21QYXJlbnQiLCJrIiwiZGVsZXRlTWUiLCJ2aXNpYmxlIiwiTm9kZSIsInNldFBvc2l0aW9uIiwic2l6ZSIsInNldFBhcmVudCIsInNlYXJjaCIsImNyZWF0ZUxhYmVsIiwiQ29sb3IiLCJzdHJfd2VjaGF0IiwianMiLCJmb3JtYXRTdHIiLCJXRUNIQVRfU1VCU0NSSVBUSU9OX05BTUUiLCJXRUNIQVRfU1VCU0NSSVBUSU9OIiwid2VjaGF0X3RleHQiLCJhdHRlbnRfdGV4dCIsImVyd2VpbWFfYmciLCJyZXdhcmRfbm9kZSIsInNldEFuY2hvclBvaW50Iiwic2V0Q29weUl0ZW1MaXN0IiwiYmluZF9kYXRhIiwiZ2V0V2VjaGF0RGF0YSIsImluZGV4IiwiaSIsIml0ZW1zIiwidiIsIml0ZW0iLCJJdGVtc1Bvb2wiLCJnZXRJdGVtIiwic2hvdyIsInNldERhdGEiLCJiaWQiLCJudW0iLCJnZXRTdWJzY3JpcHRpb25Bd2FyZCIsInNldFZpc2libGVTdGF0dXMi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V0FBSzVGLFdBQUwsR0FBbUIsSUFBbkI7QUFDSDs7QUFDRCxRQUFJLEtBQUttRSxhQUFULEVBQXdCO0FBQ3BCLFdBQUtBLGFBQUwsQ0FBbUJ4QixJQUFuQixDQUF3QndGLE9BQXhCO0FBQ0EsV0FBS2hFLGFBQUwsR0FBcUIsSUFBckI7QUFDSDs7QUFDRCxRQUFJLEtBQUttQixNQUFULEVBQWlCO0FBQ2JDLE1BQUFBLEtBQUssQ0FBQ0MsS0FBTixDQUFZQyxHQUFaLENBQWdCLEtBQUtILE1BQXJCO0FBQ0EsV0FBS0EsTUFBTCxHQUFjLElBQWQ7QUFDSDtBQUNKO0FBdFRrQyxDQUFULENBQTlCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogeHh4QHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXG4vLyBAZGVzY3JpcHRpb246XG4vLyAgICAg5YWz5rOo5YWs5LyX5Y+3XG4vLyA8YnIvPkNyZWF0ZToge0RBVEV9XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxudmFyIFBhdGhUb29sID0gcmVxdWlyZShcInBhdGh0b29sXCIpO1xudmFyIFdlbGZhcmVFdmVudCA9IHJlcXVpcmUoXCJ3ZWxmYXJlX2V2ZW50XCIpO1xudmFyIFJvbGVDb250cm9sbGVyID0gcmVxdWlyZShcInJvbGVfY29udHJvbGxlclwiKVxuXG52YXIgU3Vic2NyaXB0aW9uV2VjaGF0UGFuZWwgPSBjYy5DbGFzcyh7XG4gICAgZXh0ZW5kczogQmFzZVBhbmVsLFxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wcmVmYWJQYXRoID0gUGF0aFRvb2wuZ2V0UHJlZmFiUGF0aChcIndlbGZhcmVcIiwgXCJzdWJzY3JpcHRpb25fd2VjaGF0X3BhbmVsXCIpO1xuICAgIH0sXG5cbiAgICAvLyDlj6/ku6XliJ3lp4vljJblo7DmmI7kuIDkupvlj5jph4/nmoRcbiAgICBpbml0Q29uZmlnOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuY3RybCA9IHJlcXVpcmUoXCJ3ZWxmYXJlX2NvbnRyb2xsZXJcIikuZ2V0SW5zdGFuY2UoKTtcbiAgICAgICAgdGhpcy5pdGVtX2xpc3QgPSBbXTtcbiAgICAgICAgdGhpcy5pdGVtX2xpc3RfMiA9IFtdO1xuICAgIH0sXG5cbiAgICAvLyDliJ3lp4vljJbkuIDkupvphY3nva7mlbDmja4s5Y+v5Lul55So5LqO5aOw5piO5LiA5Lqb5Y+Y6YeP5LmL57G755qEXG4gICAgaW5pdFBhbmVsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChQTEFURk9STV9UWVBSID09IFwiU0hfUkhcIiAmJiB3aW5kb3cuU0hfUkhfSVNfU1VCU0NSSUJFID09IGZhbHNlKSB7XG4gICAgICAgICAgICBTREsuc3Vic2NyaWJlKHsgYXBpVHlwZTogJ2lzU3Vic2NyaWJlJyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubWFpbl9jb250YWluZXIgPSB0aGlzLnNlZWtDaGlsZChcIm1haW5fY29udGFpbmVyXCIpO1xuICAgICAgICB0aGlzLnNocmhfY29udGFpbmVyID0gdGhpcy5zZWVrQ2hpbGQoXCJzaHJoX2NvbnRhaW5lclwiKTtcbiAgICAgICAgLy8gUExBVEZPUk1fVFlQUiA9IFwiU0hfU0RLXCI7XG4gICAgICAgIHRoaXMuc2hyaF9jb250YWluZXIuYWN0aXZlID0gUExBVEZPUk1fVFlQUiA9PSBcIlNIX1JIXCIgfHwgUExBVEZPUk1fVFlQUiA9PSBcIlNIX1NES1wiO1xuICAgICAgICB0aGlzLm1haW5fY29udGFpbmVyLmFjdGl2ZSA9IFBMQVRGT1JNX1RZUFIgIT0gXCJTSF9SSFwiICYmIFBMQVRGT1JNX1RZUFIgIT0gXCJTSF9TREtcIjtcblxuICAgICAgICB0aGlzLml0ZW1fY29udGFpbmVyID0gdGhpcy5zZWVrQ2hpbGQoXCJpdGVtX2NvbnRhaW5lclwiKVxuXG4gICAgICAgIHRoaXMuYmdfc3AgPSB0aGlzLnNlZWtDaGlsZChcImJnXCIsIGNjLlNwcml0ZSk7XG4gICAgICAgIHRoaXMubG9hZFJlcyhQYXRoVG9vbC5nZXRCaWdCZyhcIndlbGZhcmUvdHh0X2NuX3N1YnNjcmlwdGlvbl93ZWNoYXRcIixcImpwZ1wiKSwgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgdGhpcy5iZ19zcC5zcHJpdGVGcmFtZSA9IHJlc1xuICAgICAgICB9LmJpbmQodGhpcykpXG5cbiAgICAgICAgdGhpcy5jb2RlX3Nwcml0ZSA9IHRoaXMuc2Vla0NoaWxkKFwiY29kZV9zcHJpdGVcIiwgY2MuU3ByaXRlKTtcbiAgICAgICAgdGhpcy5sb2FkUmVzKFBhdGhUb29sLmdldEljb25QYXRoKFwid2VsZmFyZS93ZWxmYXJlX2Jhbm5lclwiLCBcInR4dF9jbl93ZWxmYXJlX2JnNFwiKSwgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgdGhpcy5jb2RlX3Nwcml0ZS5zcHJpdGVGcmFtZSA9IHJlc1xuICAgICAgICB9LmJpbmQodGhpcykpXG5cbiAgICAgICAgdGhpcy5zYXZlX2J0biA9IHRoaXMuc2Vla0NoaWxkKFwic2F2ZV9idG5cIik7XG5cbiAgICAgICAgLy9zaHJoXG4gICAgICAgIHRoaXMuYmdfMiA9IHRoaXMuc2Vla0NoaWxkKHRoaXMuc2hyaF9jb250YWluZXIsIFwiYmdfMlwiLCBjYy5TcHJpdGUpOztcbiAgICAgICAgdGhpcy5sb2FkUmVzKFBhdGhUb29sLmdldEJpZ0JnKFwid2VsZmFyZS90eHRfY25fc2hyaF9zdWJzY3JpcHRpb25cIixcImpwZ1wiKSwgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgdGhpcy5iZ18yLnNwcml0ZUZyYW1lID0gcmVzXG4gICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgdGhpcy5pdGVtX2NvbnRhaW5lcl8yID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5zaHJoX2NvbnRhaW5lciwgXCJpdGVtX2NvbnRhaW5lcl8yXCIpO1xuICAgICAgICB0aGlzLmdvX2J0biA9IHRoaXMuc2Vla0NoaWxkKHRoaXMuc2hyaF9jb250YWluZXIsIFwiZ29fYnRuXCIpO1xuICAgICAgICB0aGlzLmdldF9idG4gPSB0aGlzLnNlZWtDaGlsZCh0aGlzLnNocmhfY29udGFpbmVyLCBcImdldF9idG5cIik7XG4gICAgICAgIHRoaXMuZ2V0X2J0bl9idG4gPSB0aGlzLnNlZWtDaGlsZCh0aGlzLnNocmhfY29udGFpbmVyLCBcImdldF9idG5cIiwgY2MuQnV0dG9uKTtcbiAgICAgICAgdGhpcy5nZXRfYnRuX2xvID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5nZXRfYnRuLCBcIlRleHRfNlwiLCBjYy5MYWJlbE91dGxpbmUpO1xuICAgICAgICB0aGlzLmdldF9idG5fbGIgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLmdldF9idG4sIFwiVGV4dF82XCIsIGNjLkxhYmVsKTtcbiAgICAgICAgdGhpcy5kZXNjICA9IHRoaXMuc2Vla0NoaWxkKHRoaXMuc2hyaF9jb250YWluZXIsIFwidHh0XzJcIixjYy5MYWJlbCk7XG4gICAgICAgIHRoaXMuZGVzYy5zdHJpbmcgPSBVdGlscy5USTE4TihcIjEu54K55Ye75LiL5pa54oCc5YmN5b6A5YWz5rOo4oCd5oyJ6ZKu5YmN5b6A5YWs5LyX5Y+3XFxuMi7ngrnlh7vlhbPms6jlubbov5vlhaXlhazkvJflj7dcXG4zLuWFs+azqOiOt+WPluabtOWkmua4uOaIj+acgOaWsOa0u+WKqOiur+aBr1xcbjQu5YWz5rOo5ZCO5Y2z5Y+v6aKG5Y+W5LiL5pa55aWW5YqxXCIpO1xuICAgICAgICB0aGlzLmNvcHlfYnRuID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5zaHJoX2NvbnRhaW5lciwgXCJjb3B5X2J0blwiKTtcbiAgICAgICAgdGhpcy5jb3B5X2J0bl8yID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5zaHJoX2NvbnRhaW5lciwgXCJjb3B5X2J0bl8yXCIpO1xuICAgICAgICB0aGlzLmlucHV0ID0gdGhpcy5zaHJoX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImVkaXRib3hcIikuZ2V0Q29tcG9uZW50KGNjLkVkaXRCb3gpO1xuICAgICAgICBcblxuICAgICAgICBpZihQTEFURk9STV9UWVBSID09IFwiU0hfU0RLXCIpe1xuICAgICAgICAgICAgdGhpcy5nb19idG4uYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNvcHlfYnRuLmFjdGl2ZSA9IHRoaXMuY29weV9idG5fMi5hY3RpdmUgPSB0aGlzLmlucHV0Lm5vZGUuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZ2V0X2J0bi54ID0gMzYwO1xuICAgICAgICAgICAgdGhpcy5kZXNjLnN0cmluZyA9IFV0aWxzLlRJMThOKFwiMS7lvq7kv6HmkJzntKLjgJDliZHprYLkuYvlhYlINeOAkVxcbjIu5Y+v5pCc57Si5YWs5LyX5Y+377ya4oCcamlhbmh1bjIzNuKAnVxcbjMu54K55Ye744CQ5YmR6a2C5LmL5YWJSDXjgJHlubYg5YWz5rOoXFxuNC7ngrnlh7voj5zljZXmoI8g56aP5Yip56S85YyFLeWFs+azqOekvOWMhSDpooblj5bnpLzljIVcIik7XG4gICAgICAgIH1lbHNlIGlmKFBMQVRGT1JNX1RZUFIgPT0gXCJTSF9SSFwiKXtcbiAgICAgICAgICAgIGlmICh3aW5kb3cuU0hfUkhfSVNfU1VCU0NSSUJFKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRfYnRuX2xvLmVuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIFV0aWxzLnNldEdyZXlCdXR0b24odGhpcy5nZXRfYnRuX2J0biwgZmFsc2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBVdGlscy5zZXRHcmV5QnV0dG9uKHRoaXMuZ2V0X2J0bl9idG4pO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0X2J0bl9sby5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgIFxuXG4gICAgICAgIGlmICh0aGlzLmN0cmwuZ2V0TW9kZWwoKS5nZXRTdWJzY3JpcHRpb25Bd2FyZFN0YXR1cygpID09IDEpIHtcbiAgICAgICAgICAgIFV0aWxzLnNldEdyZXlCdXR0b24odGhpcy5nZXRfYnRuX2J0bik7XG4gICAgICAgICAgICB0aGlzLmdldF9idG5fbG8uZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5nZXRfYnRuX2xiLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi5bey6aKG5Y+WXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFBMQVRGT1JNX1RZUFIgIT0gXCJTSF9SSFwiICYmIFBMQVRGT1JNX1RZUFIgIT0gXCJTSF9TREtcIikge1xuICAgICAgICAgICAgdGhpcy5jdHJsLnRlbGxTZXJ2ZXJXZWNoYXRTdGF0dXMoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDms6jlhozkuovku7bnm5HlkKznmoTmjqXlj6Ms5LiN6ZyA6KaB5omL5Yqo6LCD55SoLOWmguaenOaYr+S9v+eUqGdjb3JlLkdsb2JhbEV2ZW5055uR5ZCsLOWPr+S7peebtOaOpeiwg+eUqGFkZEdsb2JhbEV2ZW50XG4gICAgcmVnaXN0ZXJFdmVudDogZnVuY3Rpb24gKCkge1xuICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMuc2F2ZV9idG4sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuc2F2ZVBob3RvUGljdHVyZSgpO1xuICAgICAgICB9LmJpbmQodGhpcyksIDEpXG5cbiAgICAgICAgVXRpbHMub25Ub3VjaEVuZCh0aGlzLmdvX2J0biwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKFBMQVRGT1JNX1RZUFIgPT0gXCJTSF9SSFwiKSB7Ly/mt7Hmtbfono3lkIhcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIuiwg+eUqOa3sea1t+WFs+azqC0tXCIpO1xuICAgICAgICAgICAgICAgIFNESy5zdWJzY3JpYmUoeyBhcGlUeXBlOiBcImFza1Nob3dcIiB9KTtcbiAgICAgICAgICAgICAgICAvLyBTREsuc3Vic2NyaWJlKHsgYXBpVHlwZTogJ2lzU3Vic2NyaWJlJyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfS5iaW5kKHRoaXMpLCAxKVxuXG4gICAgICAgIHRoaXMuZ2V0X2J0bi5vbihcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIFV0aWxzLnBsYXlCdXR0b25Tb3VuZCgxKTtcbiAgICAgICAgICAgIGlmKFBMQVRGT1JNX1RZUFIgPT0gXCJTSF9SSFwiKXtcbiAgICAgICAgICAgICAgICBpZih3aW5kb3cuU0hfUkhfSVNfU1VCU0NSSUJFKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHJsLnNlbmQxNjY5NCgwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9ZWxzZSBpZihQTEFURk9STV9UWVBSID09IFwiU0hfU0RLXCIpe1xuICAgICAgICAgICAgICAgIHZhciBzdHIgPSB0aGlzLmlucHV0LnN0cmluZztcbiAgICAgICAgICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgnXFxuJywgJycpO1xuICAgICAgICAgICAgICAgIGlmKHN0ciA9PSBcIlwiKXtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZShVdGlscy5USTE4TihcIuivt+i+k+WFpeWFkeaNoueggVwiKSk7XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIFJvbGVDb250cm9sbGVyLmdldEluc3RhbmNlKCkuc2VuZGVyMTA5NDUoc3RyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0uYmluZCh0aGlzKSlcblxuICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMuY29weV9idG4sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgaWYoU0RLICYmIFNESy5zZXRDbGlwYm9hcmREYXRhKXtcbiAgICAgICAgICAgICAgIFNESy5zZXRDbGlwYm9hcmREYXRhKFwi5YmR6a2C5LmL5YWJSDVcIik7XG4gICAgICAgICAgIH1cbiAgICAgICAgfS5iaW5kKHRoaXMpLCAxKTtcblxuICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMuY29weV9idG5fMiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICBpZihTREsgJiYgU0RLLnNldENsaXBib2FyZERhdGEpe1xuICAgICAgICAgICAgICAgU0RLLnNldENsaXBib2FyZERhdGEoXCJqaWFuaHVuMjM2XCIpO1xuICAgICAgICAgICB9XG4gICAgICAgIH0uYmluZCh0aGlzKSwgMSk7XG5cbiAgICAgICAgdGhpcy5hZGRHbG9iYWxFdmVudChXZWxmYXJlRXZlbnQuVXBkYXRlX1NIUkhfQXdhcmRfU3RhdHVzLCBmdW5jdGlvbiAoc3RhdHVzKSB7XG4gICAgICAgICAgICBVdGlscy5zZXRHcmV5QnV0dG9uKHRoaXMuZ2V0X2J0bl9idG4pO1xuICAgICAgICAgICAgdGhpcy5nZXRfYnRuX2xvLmVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZ2V0X2J0bl9sYi5zdHJpbmcgPSBVdGlscy5USTE4TihcIuW3sumihuWPllwiKTtcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI4s5re75Yqg5Yiw5a+55bqU5Li76IqC54K55LmL5ZCO55qE5Zue6LCD5Y+v5Lul6K6+572u5LiA5Lqb5pWw5o2u5LqGXG4gICAgb25TaG93OiBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHRoaXMuc2V0SXRlbUxpc3QoKVxuICAgIH0sXG5cbiAgICAvL+S/neWtmOWbvueJh1xuICAgIHNhdmVQaG90b1BpY3R1cmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMucG9zdGVfcGljdHVyZSkgcmV0dXJuXG4gICAgICAgIHZhciBjb250YWluZXIgPSByZXF1aXJlKFwidmlld21hbmFnZXJcIikuZ2V0SW5zdGFuY2UoKS5nZXRTY2VuZU5vZGUoU0NFTkVfVEFHLmxvYWRpbmcpO1xuICAgICAgICB0aGlzLnBvc3RlX3BpY3R1cmUgPSBVdGlscy5jcmVhdGVJbWFnZShjb250YWluZXIsIG51bGwsIDAsIDAsIGNjLnYyKDAuNSwgMC41KSk7XG4gICAgICAgIHRoaXMucG9zdGVfcGljdHVyZS50eXBlID0gY2MuU3ByaXRlLlR5cGUuU0lNUExFO1xuICAgICAgICB0aGlzLnBvc3RlX3BpY3R1cmUuc2l6ZU1vZGUgPSBjYy5TcHJpdGUuU2l6ZU1vZGUuQ1VTVE9NO1xuICAgICAgICB0aGlzLnBvc3RlX3BpY3R1cmUubm9kZS5zZXRDb250ZW50U2l6ZSg3MjAsIDEyODApXG4gICAgICAgIHRoaXMucG9zdGVfcGljdHVyZS5ub2RlLnNjYWxlID0gRklUX1NDQUxFO1xuXG4gICAgICAgIHRoaXMuc2F2ZVBob3RvVGV4dCh0aGlzLnBvc3RlX3BpY3R1cmUubm9kZSwgZmFsc2UpO1xuXG4gICAgICAgIHRoaXMubG9hZFJlcyhQYXRoVG9vbC5nZXRCaWdCZyhcIndlbGZhcmUvdHh0X2NuX3N1YnNjcmlwdGlvbl93ZWNoYXRfMVwiKSwgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgdGhpcy5wb3N0ZV9waWN0dXJlLnNwcml0ZUZyYW1lID0gcmVzO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2F2ZV9sYXlvdXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVfbGF5b3V0LmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgbmFtZSA9IFwicG9zdGVfd2VjaGF0XCI7XG4gICAgICAgICAgICAvLyBTREsuQ2FwdHVyZVNjcmVlblNhdmVJbWcobmFtZSxmdW5jdGlvbihib29sKXtcbiAgICAgICAgICAgIC8vICAgICBpZihib29sPT10cnVlKXtcblxuICAgICAgICAgICAgLy8gICAgIH1lbHNle1xuICAgICAgICAgICAgLy8gICAgICAgICBtZXNzYWdlKFV0aWxzLlRJMThOKFwi5L+d5a2Y5aSx6LSlXCIpKTtcbiAgICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy50aW1lXzEpIHtcbiAgICAgICAgICAgICAgICBnY29yZS5UaW1lci5kZWwodGhpcy50aW1lXzEpO1xuICAgICAgICAgICAgICAgIHRoaXMudGltZV8xID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudGltZV8xID0gZ2NvcmUuVGltZXIuc2V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wb3N0ZV9waWN0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9zdGVfcGljdHVyZS5ub2RlLnJlbW92ZUZyb21QYXJlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3N0ZV9waWN0dXJlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXRlbV9saXN0XzIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgaW4gdGhpcy5pdGVtX2xpc3RfMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLml0ZW1fbGlzdF8yW2tdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbV9saXN0XzJba10uZGVsZXRlTWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtX2xpc3RfMltrXSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCAxMDAwLCAxKVxuXG4gICAgICAgICAgICAvLyB9LmJpbmQodGhpcykpO1xuICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgfSxcblxuICAgIC8v5oiq5Zu+5L+d5a2Y55qE5YaF5a65XG4gICAgc2F2ZVBob3RvVGV4dDogZnVuY3Rpb24gKG5vZGUsIHZpc2libGUpIHtcbiAgICAgICAgaWYgKCFub2RlKSByZXR1cm5cbiAgICAgICAgdGhpcy5zYXZlX2xheW91dCA9IG5ldyBjYy5Ob2RlKCk7XG4gICAgICAgIHRoaXMuc2F2ZV9sYXlvdXQuc2V0UG9zaXRpb24oMCwgMCk7XG4gICAgICAgIHRoaXMuc2F2ZV9sYXlvdXQuc2V0Q29udGVudFNpemUoY2Muc2l6ZSgxMDAsIDEwMCkpO1xuICAgICAgICB0aGlzLnNhdmVfbGF5b3V0LnNldFBhcmVudChub2RlKTtcbiAgICAgICAgdGhpcy5zYXZlX2xheW91dC5hY3RpdmUgPSB2aXNpYmxlO1xuXG4gICAgICAgIHZhciBzZWFyY2ggPSBVdGlscy5jcmVhdGVMYWJlbCgyNCwgbmV3IGNjLkNvbG9yKDB4ZjcsIDB4ZmQsIDB4ZmYsIDB4ZmYpLCBuZXcgY2MuQ29sb3IoMHgxNCwgMHgzNSwgMHg2YywgMHhmZiksIC0zMDAsIDkwLCBVdGlscy5USTE4TihcIuW+ruS/oeaQnOe0ojpcIiksIHRoaXMuc2F2ZV9sYXlvdXQsIDIsIGNjLnYyKDAsIDAuNSkpXG4gICAgICAgIHZhciBzdHJfd2VjaGF0ID0gY2MuanMuZm9ybWF0U3RyKFV0aWxzLlRJMThOKFwiJXMgKCVzKeWFrOS8l+WPt1wiKSwgV0VDSEFUX1NVQlNDUklQVElPTl9OQU1FLCBXRUNIQVRfU1VCU0NSSVBUSU9OKTtcbiAgICAgICAgdmFyIHdlY2hhdF90ZXh0ID0gVXRpbHMuY3JlYXRlTGFiZWwoMjQsIG5ldyBjYy5Db2xvcigweGY3LCAweGZkLCAweGZmLCAweGZmKSwgbmV3IGNjLkNvbG9yKDB4MTQsIDB4MzUsIDB4NmMsIDB4ZmYpLCAtMzAwLCA1MCwgc3RyX3dlY2hhdCwgdGhpcy5zYXZlX2xheW91dCwgMiwgY2MudjIoMCwgMC41KSk7XG4gICAgICAgIHZhciBhdHRlbnRfdGV4dCA9IFV0aWxzLmNyZWF0ZUxhYmVsKDI0LCBuZXcgY2MuQ29sb3IoMHhmNywgMHhmZCwgMHhmZiwgMHhmZiksIG5ldyBjYy5Db2xvcigweDE0LCAweDM1LCAweDZjLCAweGZmKSwgLTMwMCwgMTAsIFV0aWxzLlRJMThOKFwi5YWz5rOo54K55Ye744CM56aP5Yip6KGl57uZ44CN6aKG5Y+W56S85YyF56CBXCIpLCB0aGlzLnNhdmVfbGF5b3V0LCAyLCBjYy52MigwLCAwLjUpKTtcbiAgICAgICAgLy/kuoznu7TnoIHlm77niYdcbiAgICAgICAgdmFyIGVyd2VpbWFfYmcgPSBVdGlscy5jcmVhdGVJbWFnZSh0aGlzLnNhdmVfbGF5b3V0LCBudWxsLCAwLCAtMzQwLCBjYy52MigwLjUsIDAuNSkpO1xuICAgICAgICB0aGlzLmxvYWRSZXMoUGF0aFRvb2wuZ2V0SWNvblBhdGgoXCJ3ZWxmYXJlL3dlbGZhcmVfYmFubmVyXCIsIFwidHh0X2NuX3dlbGZhcmVfYmc0XCIpLCBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICBlcndlaW1hX2JnLnNwcml0ZUZyYW1lID0gcmVzXG4gICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgLy/lpZblirFcbiAgICAgICAgdmFyIHJld2FyZF9ub2RlID0gbmV3IGNjLk5vZGUoKTtcbiAgICAgICAgcmV3YXJkX25vZGUuc2V0UG9zaXRpb24oLTIxNSwgLTE2MCk7XG4gICAgICAgIHJld2FyZF9ub2RlLnNldEFuY2hvclBvaW50KDAsIDApXG4gICAgICAgIHJld2FyZF9ub2RlLnNldENvbnRlbnRTaXplKGNjLnNpemUoNDMwLCAxNzQpKTtcbiAgICAgICAgcmV3YXJkX25vZGUuc2V0UGFyZW50KG5vZGUpO1xuICAgICAgICB0aGlzLnNldENvcHlJdGVtTGlzdChyZXdhcmRfbm9kZSk7XG4gICAgfSxcblxuICAgIHNldENvcHlJdGVtTGlzdDogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgdmFyIGJpbmRfZGF0YSA9IHRoaXMuY3RybC5nZXRXZWNoYXREYXRhKCk7XG4gICAgICAgIGlmICh0aGlzLml0ZW1fbGlzdF8yID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbV9saXN0XzIgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmluZF9kYXRhID09IG51bGwgfHwgYmluZF9kYXRhID09IG51bGwpIHJldHVyblxuICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICBmb3IgKHZhciBpIGluIGJpbmRfZGF0YS5pdGVtcykge1xuICAgICAgICAgICAgY29uc3QgdiA9IGJpbmRfZGF0YS5pdGVtc1tpXTtcbiAgICAgICAgICAgIGlmICghdGhpcy5pdGVtX2xpc3RfMltpXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBJdGVtc1Bvb2wuZ2V0SW5zdGFuY2UoKS5nZXRJdGVtKFwiYmFja3BhY2tfaXRlbVwiKTtcbiAgICAgICAgICAgICAgICBpdGVtLmluaXRDb25maWcoZmFsc2UsIDEsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBpdGVtLnNob3coKTtcbiAgICAgICAgICAgICAgICBpdGVtLnNldFBhcmVudChub2RlKTtcbiAgICAgICAgICAgICAgICBpdGVtLnNldERhdGEoeyBiaWQ6IHYuYmlkLCBudW06IHYubnVtIH0pO1xuICAgICAgICAgICAgICAgIGl0ZW0uc2V0UG9zaXRpb24oaW5kZXggKiAxMzQgKyA4NSwgNzcpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXRlbV9saXN0XzJbaV0gPSBpdGVtO1xuICAgICAgICAgICAgICAgIGluZGV4ID0gaW5kZXggKyAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vLS1kZXNjOuWIm+W7uuWxleekuueJqeWTgVxuICAgIHNldEl0ZW1MaXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChQTEFURk9STV9UWVBSID09IFwiU0hfUkhcIiB8fCBQTEFURk9STV9UWVBSID09IFwiU0hfU0RLXCIpIHtcbiAgICAgICAgICAgIHZhciBiaW5kX2RhdGEgPSB0aGlzLmN0cmwuZ2V0TW9kZWwoKS5nZXRTdWJzY3JpcHRpb25Bd2FyZCgpO1xuICAgICAgICAgICAgaWYgKGJpbmRfZGF0YSA9PSBudWxsKSByZXR1cm5cbiAgICAgICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIGJpbmRfZGF0YSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHYgPSBiaW5kX2RhdGFbaV07XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLml0ZW1fbGlzdFtpXSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gSXRlbXNQb29sLmdldEluc3RhbmNlKCkuZ2V0SXRlbShcImJhY2twYWNrX2l0ZW1cIik7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uaW5pdENvbmZpZyhmYWxzZSwgMC44LCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uc2hvdygpO1xuICAgICAgICAgICAgICAgICAgICBpdGVtLnNldFBhcmVudCh0aGlzLml0ZW1fY29udGFpbmVyXzIpO1xuICAgICAgICAgICAgICAgICAgICBpdGVtLnNldERhdGEoeyBiaWQ6IHYuYmlkLCBudW06IHYubnVtIH0pO1xuICAgICAgICAgICAgICAgICAgICBpdGVtLnNldFBvc2l0aW9uKGluZGV4ICogMTIwIC0gMTIwLCA4MCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbV9saXN0W2ldID0gaXRlbTtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBpbmRleCArIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGJpbmRfZGF0YSA9IHRoaXMuY3RybC5nZXRXZWNoYXREYXRhKCk7XG4gICAgICAgICAgICBpZiAoYmluZF9kYXRhID09IG51bGwgfHwgYmluZF9kYXRhLml0ZW1zID09IG51bGwpIHJldHVyblxuICAgICAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gYmluZF9kYXRhLml0ZW1zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdiA9IGJpbmRfZGF0YS5pdGVtc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXRlbV9saXN0W2ldKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBJdGVtc1Bvb2wuZ2V0SW5zdGFuY2UoKS5nZXRJdGVtKFwiYmFja3BhY2tfaXRlbVwiKTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5pbml0Q29uZmlnKGZhbHNlLCAxLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uc2hvdygpO1xuICAgICAgICAgICAgICAgICAgICBpdGVtLnNldFBhcmVudCh0aGlzLml0ZW1fY29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXREYXRhKHsgYmlkOiB2LmJpZCwgbnVtOiB2Lm51bSB9KTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXRQb3NpdGlvbihpbmRleCAqIDEzNCArIDg1LCA3Nyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbV9saXN0W2ldID0gaXRlbTtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBpbmRleCArIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNldFZpc2libGVTdGF0dXM6IGZ1bmN0aW9uIChzdGF0dXMpIHtcbiAgICAgICAgdGhpcy5zZXRWaXNpYmxlKHN0YXR1cylcbiAgICB9LFxuXG4gICAgLy8g6Z2i5p2/6K6+572u5LiN5Y+v6KeB55qE5Zue6LCDLOi/memHjOWBmuS4gOS6m+S4jeWPr+ingeeahOWxj+iUveWkhOeQhlxuICAgIG9uSGlkZTogZnVuY3Rpb24gKCkge1xuXG4gICAgfSxcblxuICAgIC8vIOW9k+mdouadv+S7juS4u+iKgueCuemHiuaUvuaOieeahOiwg+eUqOaOpeWPoyzpnIDopoHmiYvliqjosIPnlKgs6ICM5LiU5Lmf5LiA5a6a6KaB6LCD55SoXG4gICAgb25EZWxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXRlbV9saXN0KSB7XG4gICAgICAgICAgICBmb3IgKHZhciBrIGluIHRoaXMuaXRlbV9saXN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtX2xpc3Rba10uZGVsZXRlTWUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1fbGlzdFtrXSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLml0ZW1fbGlzdCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXRlbV9saXN0XzIpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGsgaW4gdGhpcy5pdGVtX2xpc3RfMikge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLml0ZW1fbGlzdF8yW2tdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbV9saXN0XzJba10uZGVsZXRlTWUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtX2xpc3RfMltrXSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pdGVtX2xpc3RfMiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucG9zdGVfcGljdHVyZSkge1xuICAgICAgICAgICAgdGhpcy5wb3N0ZV9waWN0dXJlLm5vZGUuZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5wb3N0ZV9waWN0dXJlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50aW1lXzEpIHtcbiAgICAgICAgICAgIGdjb3JlLlRpbWVyLmRlbCh0aGlzLnRpbWVfMSk7XG4gICAgICAgICAgICB0aGlzLnRpbWVfMSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9LFxufSkiXX0=