|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/adventureactivity/view/adventureactivity_item_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, 'ab139obfzZPRbcq7m3tWfJe', 'adventureactivity_item_panel');
|
// Scripts/mod/adventureactivity/view/adventureactivity_item_panel.js
|
|
"use strict";
|
|
// --------------------------------------------------------------------
|
// @author: xxx@syg.com(必填, 创建模块的人员)
|
// @description:
|
// 这里是描述这个窗体的作用的
|
// <br/>Create: 2019-05-09 10:03:33
|
// --------------------------------------------------------------------
|
var PathTool = require("pathtool");
|
|
var AdventureActivityConst = require("adventureactivity_const");
|
|
var MainuiController = require("mainui_controller");
|
|
var AdventureActivityController = require("adventureactivity_controller");
|
|
var AdventureController = require("adventure_controller");
|
|
var Adventureactivity_itemPanel = cc.Class({
|
"extends": BasePanel,
|
ctor: function ctor() {
|
this.prefabPath = PathTool.getPrefabPath("adventureactivity", "adventureactivity_item");
|
this.ctrl = AdventureActivityController.getInstance();
|
},
|
// 可以初始化声明一些变量的
|
initConfig: function initConfig() {},
|
// 初始化一些配置数据,可以用于声明一些变量之类的
|
initPanel: function initPanel() {
|
this.main_container = this.root_wnd.getChildByName("main_container");
|
this.item_bg_node = this.main_container.getChildByName("item_bg");
|
this.item_bg = this.item_bg_node.getComponent(cc.Sprite);
|
this.open_desc = this.main_container.getChildByName("open_desc").getComponent(cc.Label);
|
this.open_desc.node.active = false;
|
this.open_desc2 = this.main_container.getChildByName("open_desc_2").getComponent(cc.Label);
|
this.open_desc2.node.active = false;
|
this.join_bg = this.main_container.getChildByName("join_bg");
|
this.join_desc = this.main_container.getChildByName("join_desc").getComponent(cc.Label);
|
this.join_desc.string = "";
|
this.lock_layer = this.main_container.getChildByName("lock_layer");
|
this.award_list = this.main_container.getChildByName("award_list");
|
this.award_list.active = false;
|
var scroll_view_size = this.award_list.getContentSize();
|
var setting = {
|
item_class: "backpack_item",
|
// 单元类
|
start_x: 0,
|
// 第一个单元的X起点
|
space_x: 10,
|
// x方向的间隔
|
start_y: 0,
|
// 第一个单元的Y起点
|
space_y: 0,
|
// y方向的间隔
|
item_width: 120 * 0.7,
|
// 单元的尺寸width
|
item_height: 120 * 0.7,
|
// 单元的尺寸height
|
row: 1,
|
// 行数,作用于水平滚动类型
|
col: 0,
|
// 列数,作用于垂直滚动类型
|
need_dynamic: true,
|
scale: 0.7
|
};
|
|
var CommonScrollView = require("common_scrollview");
|
|
this.award_scrollview = new CommonScrollView();
|
this.award_scrollview.createScroll(this.award_list, cc.v2(0, 0), ScrollViewDir.horizontal, ScrollViewStartPos.top, scroll_view_size, setting); // this.award_scrollview:setSwallowTouches(false)
|
|
if (this.data) {
|
this.updateInfo();
|
}
|
},
|
// 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
|
registerEvent: function registerEvent() {
|
//当用户点击的时候记录鼠标点击状态
|
this.main_container.on(cc.Node.EventType.TOUCH_START, function (event) {
|
var touches = event.getTouches();
|
this.touch_began = touches[0].getDelta();
|
}, this); //当鼠标抬起的时候恢复状态
|
|
this.main_container.on(cc.Node.EventType.TOUCH_END, function (event) {
|
var touches = event.getTouches();
|
this.touch_end = touches[0].getDelta();
|
var is_click = true;
|
|
if (this.touch_began != null) {
|
is_click = Math.abs(this.touch_end.x - this.touch_began.x) <= 20 && Math.abs(this.touch_end.y - this.touch_began.y) <= 20;
|
}
|
|
if (is_click) {
|
if (this.data) {
|
var is_open = MainuiController.getInstance().checkIsOpenByActivate(this.data.activate);
|
|
if (is_open == true) {
|
this.ctrl.onClickGotoAdvenTureAcivity(this.data.retrue_id);
|
} else {
|
if (this.data.id == AdventureActivityConst.Ground_Type.heaven) {
|
var str = cc.js.formatStr(Utils.TI18N("%s,角色%s可进入"), this.data.desc2, this.data.desc);
|
message(str);
|
} else {
|
message(this.data.desc);
|
}
|
}
|
}
|
}
|
}, this);
|
},
|
setData: function setData(data) {
|
if (!data) return;
|
this.data = data;
|
|
if (this.root_wnd) {
|
this.updateInfo();
|
}
|
},
|
updateInfo: function updateInfo() {
|
// 背景
|
var res = PathTool.getBigBg(cc.js.formatStr("txt_cn_adventrueactivity_%d", this.data.res_id), null, "adventrueactivity");
|
this.loadRes(res, function (resObject) {
|
this.item_bg.spriteFrame = resObject;
|
}.bind(this));
|
this.join_desc.string = this.data.item_desc;
|
var size = this.join_desc.node.getContentSize();
|
|
if (size.width < 250) {
|
size.width = 250;
|
}
|
|
this.join_bg.setContentSize(cc.size(size.width + 60, size.height)); // 奖励数据
|
|
var item_list = [];
|
|
for (var i in this.data.award) {
|
var v = this.data.award[i];
|
var vo = {};
|
|
if (vo) {
|
vo.bid = v[0];
|
vo.num = v[1];
|
item_list.push(vo);
|
}
|
}
|
|
this.award_scrollview.setData(item_list);
|
this.award_scrollview.addEndCallBack(function () {
|
var list = this.award_scrollview.getItemList(); // var book_id_cfg = Config.dungeon_heaven_data.data_const["heaven_handbook"];
|
|
for (var k in list) {
|
var iData = list[k].getData();
|
var is_special; // if(this.data.id == AdventureActivityConst.Ground_Type.heaven && book_id_cfg && iData){
|
// for(var n in book_id_cfg.val){
|
// if(book_id_cfg.val[n] == iData.id){
|
// is_special = 2;
|
// break;
|
// }
|
// }
|
// }
|
|
list[k].setDefaultTip(true, null, null, is_special);
|
}
|
}.bind(this));
|
var is_open = MainuiController.getInstance().checkIsOpenByActivate(this.data.activate);
|
|
if (is_open == true) {
|
this.lock_layer.active = false;
|
this.open_desc.node.active = false;
|
this.award_list.active = true;
|
} else {
|
this.lock_layer.active = true;
|
this.open_desc.string = this.data.desc;
|
this.open_desc.node.active = true;
|
|
if (this.data.desc != "") {
|
this.open_desc2.string = this.data.desc2;
|
this.open_desc2.node.active = true;
|
}
|
|
this.award_list.active = false;
|
}
|
|
this.updateRedStatus();
|
},
|
// 红点刷新
|
updateRedStatus: function updateRedStatus() {
|
if (this.data) {
|
var red_status = false;
|
|
if (this.data.id == AdventureActivityConst.Ground_Type.adventure) {
|
//冒险
|
red_status = AdventureController.getInstance().getModel().getAdventureRedPoint();
|
} else if (this.data.id == AdventureActivityConst.Ground_Type.element) {//元素
|
// red_status = ElementController:getInstance():getModel():checkElementRedStatus();
|
} else if (this.data.id == AdventureActivityConst.Ground_Type.heaven) {//天界副本
|
// red_status = HeavenController:getInstance():getModel():getHeavenRedStatus();
|
}
|
|
var is_open = MainuiController.getInstance().checkIsOpenByActivate(this.data.activate);
|
|
if (is_open == false) {
|
red_status = false;
|
}
|
|
Utils.addRedPointToNodeByStatus(this.main_container, red_status, this.main_container.width / 2, this.main_container.height / 2, 99, 2);
|
}
|
},
|
// 预制体加载完成之后,添加到对应主节点之后的回调可以设置一些数据了
|
onShow: function onShow(params) {},
|
// 面板设置不可见的回调,这里做一些不可见的屏蔽处理
|
onHide: function onHide() {},
|
// 当面板从主节点释放掉的调用接口,需要手动调用,而且也一定要调用
|
onDelete: function onDelete() {
|
if (this.award_scrollview) {
|
this.award_scrollview.deleteMe();
|
this.award_scrollview = 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxhZHZlbnR1cmVhY3Rpdml0eVxcdmlld1xcYWR2ZW50dXJlYWN0aXZpdHlfaXRlbV9wYW5lbC5qcyJdLCJuYW1lcyI6WyJQYXRoVG9vbCIsInJlcXVpcmUiLCJBZHZlbnR1cmVBY3Rpdml0eUNvbnN0IiwiTWFpbnVpQ29udHJvbGxlciIsIkFkdmVudHVyZUFjdGl2aXR5Q29udHJvbGxlciIsIkFkdmVudHVyZUNvbnRyb2xsZXIiLCJBZHZlbnR1cmVhY3Rpdml0eV9pdGVtUGFuZWwiLCJjYyIsIkNsYXNzIiwiQmFzZVBhbmVsIiwiY3RvciIsInByZWZhYlBhdGgiLCJnZXRQcmVmYWJQYXRoIiwiY3RybCIsImdldEluc3RhbmNlIiwiaW5pdENvbmZpZyIsImluaXRQYW5lbCIsIm1haW5fY29udGFpbmVyIiwicm9vdF93bmQiLCJnZXRDaGlsZEJ5TmFtZSIsIml0ZW1fYmdfbm9kZSIsIml0ZW1fYmciLCJnZXRDb21wb25lbnQiLCJTcHJpdGUiLCJvcGVuX2Rlc2MiLCJMYWJlbCIsIm5vZGUiLCJhY3RpdmUiLCJvcGVuX2Rlc2MyIiwiam9pbl9iZyIsImpvaW5fZGVzYyIsInN0cmluZyIsImxvY2tfbGF5ZXIiLCJhd2FyZF9saXN0Iiwic2Nyb2xsX3ZpZXdfc2l6ZSIsImdldENvbnRlbnRTaXplIiwic2V0dGluZyIsIml0ZW1fY2xhc3MiLCJzdGFydF94Iiwic3BhY2VfeCIsInN0YXJ0X3kiLCJzcGFjZV95IiwiaXRlbV93aWR0aCIsIml0ZW1faGVpZ2h0Iiwicm93IiwiY29sIiwibmVlZF9keW5hbWljIiwic2NhbGUiLCJDb21tb25TY3JvbGxWaWV3IiwiYXdhcmRfc2Nyb2xsdmlldyIsImNyZWF0ZVNjcm9sbCIsInYyIiwiU2Nyb2xsVmlld0RpciIsImhvcml6b250YWwiLCJTY3JvbGxWaWV3U3RhcnRQb3MiLCJ0b3AiLCJkYXRhIiwidXBkYXRlSW5mbyIsInJlZ2lzdGVyRXZlbnQiLCJvbiIsIk5vZGUiLCJFdmVudFR5cGUiLCJUT1VDSF9TVEFSVCIsImV2ZW50IiwidG91Y2hlcyIsImdldFRvdWNoZXMiLCJ0b3VjaF9iZWdhbiIsImdldERlbHRhIiwiVE9VQ0hfRU5EIiwidG91Y2hfZW5kIiwiaXNfY2xpY2siLCJNYXRoIiwiYWJzIiwieCIsInkiLCJpc19vcGVuIiwiY2hlY2tJc09wZW5CeUFjdGl2YXRlIiwiYWN0aXZhdGUiLCJvbkNsaWNrR290b0FkdmVuVHVyZUFjaXZpdHkiLCJyZXRydWVfaWQiLCJpZCIsIkdyb3VuZF9UeXBlIiwiaGVhdmVuIiwic3RyIiwianMiLCJmb3JtYXRTdHIiLCJVdGlscyIsIlRJMThOIiwiZGVzYzIiLCJkZXNjIiwibWVzc2FnZSIsInNldERhdGEiLCJyZXMiLCJnZXRCaWdCZyIsInJlc19pZCIsImxvYWRSZXMiLCJyZXNPYmplY3QiLCJzcHJpdGVGcmFtZSIsImJpbmQiLCJpdGVtX2Rlc2MiLCJzaXplIiwid2lkdGgiLCJzZXRDb250ZW50U2l6ZSIsImhlaWdodCIsIml0ZW1fbGlzdCIsImkiLCJhd2FyZCIsInYiLCJ2byIsImJpZCIsIm51bSIsInB1c2giLCJhZGRFbmRDYWxsQmFjayIsImxpc3QiLCJnZXRJdGVtTGlzdCIsImsiLCJpRGF0YSIsImdldERhdGEiLCJpc19zcGVjaWFsIiwic2V0RGVmYXVsdFRpcCIsInVwZGF0ZVJlZFN0YXR1cyIsInJlZF9zdGF0dXMiLCJhZHZlbnR1cmUiLCJnZXRNb2RlbCIsImdldEFkdmVudHVyZVJlZFBvaW50IiwiZWxlbWVudCIsImFkZFJlZFBvaW50VG9Ob2RlQnlTdGF0dXMiLCJvblNob3ciLCJwYXJhbXMiLCJvbkhpZGUiLCJvbkRlbGV0ZSIsImRlbGV0ZU1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLFFBQVEsR0FBR0MsT0FBTyxDQUFDLFVBQUQsQ0FBdEI7O0FBQ0EsSUFBSUMsc0JBQXNCLEdBQUVELE9BQU8sQ0FBQyx5QkFBRCxDQUFuQzs7QUFDQSxJQUFJRSxnQkFBZ0IsR0FBR0YsT0FBTyxDQUFDLG1CQUFELENBQTlCOztBQUNBLElBQUlHLDJCQUEyQixHQUFHSCxPQUFPLENBQUMsOEJBQUQsQ0FBekM7O0FBQ0EsSUFBSUksbUJBQW1CLEdBQUdKLE9BQU8sQ0FBQyxzQkFBRCxDQUFqQzs7QUFFQSxJQUFJSywyQkFBMkIsR0FBR0MsRUFBRSxDQUFDQyxLQUFILENBQVM7QUFDdkMsYUFBU0MsU0FEOEI7QUFFdkNDLEVBQUFBLElBQUksRUFBRSxnQkFBWTtBQUNkLFNBQUtDLFVBQUwsR0FBa0JYLFFBQVEsQ0FBQ1ksYUFBVCxDQUF1QixtQkFBdkIsRUFBNEMsd0JBQTVDLENBQWxCO0FBQ0EsU0FBS0MsSUFBTCxHQUFZVCwyQkFBMkIsQ0FBQ1UsV0FBNUIsRUFBWjtBQUNILEdBTHNDO0FBT3ZDO0FBQ0FDLEVBQUFBLFVBQVUsRUFBQyxzQkFBVSxDQUVwQixDQVZzQztBQVl2QztBQUNBQyxFQUFBQSxTQUFTLEVBQUMscUJBQVU7QUFDaEIsU0FBS0MsY0FBTCxHQUFzQixLQUFLQyxRQUFMLENBQWNDLGNBQWQsQ0FBNkIsZ0JBQTdCLENBQXRCO0FBQ0EsU0FBS0MsWUFBTCxHQUFvQixLQUFLSCxjQUFMLENBQW9CRSxjQUFwQixDQUFtQyxTQUFuQyxDQUFwQjtBQUNBLFNBQUtFLE9BQUwsR0FBZSxLQUFLRCxZQUFMLENBQWtCRSxZQUFsQixDQUErQmYsRUFBRSxDQUFDZ0IsTUFBbEMsQ0FBZjtBQUNBLFNBQUtDLFNBQUwsR0FBaUIsS0FBS1AsY0FBTCxDQUFvQkUsY0FBcEIsQ0FBbUMsV0FBbkMsRUFBZ0RHLFlBQWhELENBQTZEZixFQUFFLENBQUNrQixLQUFoRSxDQUFqQjtBQUNBLFNBQUtELFNBQUwsQ0FBZUUsSUFBZixDQUFvQkMsTUFBcEIsR0FBNkIsS0FBN0I7QUFDQSxTQUFLQyxVQUFMLEdBQWtCLEtBQUtYLGNBQUwsQ0FBb0JFLGNBQXBCLENBQW1DLGFBQW5DLEVBQWtERyxZQUFsRCxDQUErRGYsRUFBRSxDQUFDa0IsS0FBbEUsQ0FBbEI7QUFDQSxTQUFLRyxVQUFMLENBQWdCRixJQUFoQixDQUFxQkMsTUFBckIsR0FBOEIsS0FBOUI7QUFFQSxTQUFLRSxPQUFMLEdBQWUsS0FBS1osY0FBTCxDQUFvQkUsY0FBcEIsQ0FBbUMsU0FBbkMsQ0FBZjtBQUNBLFNBQUtXLFNBQUwsR0FBaUIsS0FBS2IsY0FBTCxDQUFvQkUsY0FBcEIsQ0FBbUMsV0FBbkMsRUFBZ0RHLFlBQWhELENBQTZEZixFQUFFLENBQUNrQixLQUFoRSxDQUFqQjtBQUNBLFNBQUtLLFNBQUwsQ0FBZUMsTUFBZixHQUF3QixFQUF4QjtBQUNBLFNBQUtDLFVBQUwsR0FBa0IsS0FBS2YsY0FBTCxDQUFvQkUsY0FBcEIsQ0FBbUMsWUFBbkMsQ0FBbEI7QUFDQSxTQUFLYyxVQUFMLEdBQWtCLEtBQUtoQixjQUFMLENBQW9CRSxjQUFwQixDQUFtQyxZQUFuQyxDQUFsQjtBQUNBLFNBQUtjLFVBQUwsQ0FBZ0JOLE1BQWhCLEdBQXlCLEtBQXpCO0FBQ0EsUUFBSU8sZ0JBQWdCLEdBQUcsS0FBS0QsVUFBTCxDQUFnQkUsY0FBaEIsRUFBdkI7QUFDQSxRQUFJQyxPQUFPLEdBQUc7QUFDVkMsTUFBQUEsVUFBVSxFQUFFLGVBREY7QUFDd0I7QUFDbENDLE1BQUFBLE9BQU8sRUFBRSxDQUZDO0FBRW1CO0FBQzdCQyxNQUFBQSxPQUFPLEVBQUUsRUFIQztBQUdzQjtBQUNoQ0MsTUFBQUEsT0FBTyxFQUFFLENBSkM7QUFJcUI7QUFDL0JDLE1BQUFBLE9BQU8sRUFBRSxDQUxDO0FBS29CO0FBQzlCQyxNQUFBQSxVQUFVLEVBQUUsTUFBSSxHQU5OO0FBTXlCO0FBQ25DQyxNQUFBQSxXQUFXLEVBQUUsTUFBSSxHQVBQO0FBT3lCO0FBQ25DQyxNQUFBQSxHQUFHLEVBQUUsQ0FSSztBQVFxQjtBQUMvQkMsTUFBQUEsR0FBRyxFQUFFLENBVEs7QUFTc0I7QUFDaENDLE1BQUFBLFlBQVksRUFBRSxJQVZKO0FBV1ZDLE1BQUFBLEtBQUssRUFBRTtBQVhHLEtBQWQ7O0FBYUEsUUFBSUMsZ0JBQWdCLEdBQUcvQyxPQUFPLENBQUMsbUJBQUQsQ0FBOUI7O0FBQ0EsU0FBS2dELGdCQUFMLEdBQXdCLElBQUlELGdCQUFKLEVBQXhCO0FBQ0EsU0FBS0MsZ0JBQUwsQ0FBdUJDLFlBQXZCLENBQW9DLEtBQUtqQixVQUF6QyxFQUFxRDFCLEVBQUUsQ0FBQzRDLEVBQUgsQ0FBTSxDQUFOLEVBQVEsQ0FBUixDQUFyRCxFQUFrRUMsYUFBYSxDQUFDQyxVQUFoRixFQUE0RkMsa0JBQWtCLENBQUNDLEdBQS9HLEVBQW9IckIsZ0JBQXBILEVBQXNJRSxPQUF0SSxFQS9CZ0IsQ0FnQ2hCOztBQUVBLFFBQUcsS0FBS29CLElBQVIsRUFBYTtBQUNULFdBQUtDLFVBQUw7QUFDSDtBQUNKLEdBbERzQztBQW9EdkM7QUFDQUMsRUFBQUEsYUFBYSxFQUFDLHlCQUFVO0FBQ3BCO0FBQ0EsU0FBS3pDLGNBQUwsQ0FBb0IwQyxFQUFwQixDQUF1QnBELEVBQUUsQ0FBQ3FELElBQUgsQ0FBUUMsU0FBUixDQUFrQkMsV0FBekMsRUFBc0QsVUFBU0MsS0FBVCxFQUFlO0FBQ2pFLFVBQUlDLE9BQU8sR0FBR0QsS0FBSyxDQUFDRSxVQUFOLEVBQWQ7QUFDQSxXQUFLQyxXQUFMLEdBQW1CRixPQUFPLENBQUMsQ0FBRCxDQUFQLENBQVdHLFFBQVgsRUFBbkI7QUFDSCxLQUhELEVBR0UsSUFIRixFQUZvQixDQU9wQjs7QUFDQSxTQUFLbEQsY0FBTCxDQUFvQjBDLEVBQXBCLENBQXVCcEQsRUFBRSxDQUFDcUQsSUFBSCxDQUFRQyxTQUFSLENBQWtCTyxTQUF6QyxFQUFvRCxVQUFTTCxLQUFULEVBQWU7QUFDL0QsVUFBSUMsT0FBTyxHQUFHRCxLQUFLLENBQUNFLFVBQU4sRUFBZDtBQUNBLFdBQUtJLFNBQUwsR0FBaUJMLE9BQU8sQ0FBQyxDQUFELENBQVAsQ0FBV0csUUFBWCxFQUFqQjtBQUNBLFVBQUlHLFFBQVEsR0FBRyxJQUFmOztBQUNBLFVBQUcsS0FBS0osV0FBTCxJQUFrQixJQUFyQixFQUEwQjtBQUN0QkksUUFBQUEsUUFBUSxHQUFHQyxJQUFJLENBQUNDLEdBQUwsQ0FBUyxLQUFLSCxTQUFMLENBQWVJLENBQWYsR0FBbUIsS0FBS1AsV0FBTCxDQUFpQk8sQ0FBN0MsS0FBbUQsRUFBbkQsSUFBeURGLElBQUksQ0FBQ0MsR0FBTCxDQUFTLEtBQUtILFNBQUwsQ0FBZUssQ0FBZixHQUFtQixLQUFLUixXQUFMLENBQWlCUSxDQUE3QyxLQUFtRCxFQUF2SDtBQUNIOztBQUNELFVBQUdKLFFBQUgsRUFBWTtBQUNSLFlBQUcsS0FBS2QsSUFBUixFQUFhO0FBQ1QsY0FBSW1CLE9BQU8sR0FBR3hFLGdCQUFnQixDQUFDVyxXQUFqQixHQUErQjhELHFCQUEvQixDQUFxRCxLQUFLcEIsSUFBTCxDQUFVcUIsUUFBL0QsQ0FBZDs7QUFDQSxjQUFHRixPQUFPLElBQUksSUFBZCxFQUFtQjtBQUNmLGlCQUFLOUQsSUFBTCxDQUFVaUUsMkJBQVYsQ0FBc0MsS0FBS3RCLElBQUwsQ0FBVXVCLFNBQWhEO0FBQ0gsV0FGRCxNQUVLO0FBQ0QsZ0JBQUcsS0FBS3ZCLElBQUwsQ0FBVXdCLEVBQVYsSUFBZ0I5RSxzQkFBc0IsQ0FBQytFLFdBQXZCLENBQW1DQyxNQUF0RCxFQUE2RDtBQUN6RCxrQkFBSUMsR0FBRyxHQUFHNUUsRUFBRSxDQUFDNkUsRUFBSCxDQUFNQyxTQUFOLENBQWdCQyxLQUFLLENBQUNDLEtBQU4sQ0FBWSxZQUFaLENBQWhCLEVBQTBDLEtBQUsvQixJQUFMLENBQVVnQyxLQUFwRCxFQUEwRCxLQUFLaEMsSUFBTCxDQUFVaUMsSUFBcEUsQ0FBVjtBQUNBQyxjQUFBQSxPQUFPLENBQUNQLEdBQUQsQ0FBUDtBQUNILGFBSEQsTUFHSztBQUNETyxjQUFBQSxPQUFPLENBQUMsS0FBS2xDLElBQUwsQ0FBVWlDLElBQVgsQ0FBUDtBQUNIO0FBQ0o7QUFDSjtBQUNKO0FBQ0osS0F0QkQsRUFzQkUsSUF0QkY7QUF1QkgsR0FwRnNDO0FBc0Z2Q0UsRUFBQUEsT0FBTyxFQUFDLGlCQUFTbkMsSUFBVCxFQUFjO0FBQ2xCLFFBQUcsQ0FBQ0EsSUFBSixFQUFTO0FBQ1QsU0FBS0EsSUFBTCxHQUFZQSxJQUFaOztBQUNBLFFBQUcsS0FBS3RDLFFBQVIsRUFBaUI7QUFDYixXQUFLdUMsVUFBTDtBQUNIO0FBQ0osR0E1RnNDO0FBOEZ2Q0EsRUFBQUEsVUFBVSxFQUFDLHNCQUFVO0FBQ2pCO0FBQ0EsUUFBSW1DLEdBQUcsR0FBRzVGLFFBQVEsQ0FBQzZGLFFBQVQsQ0FBa0J0RixFQUFFLENBQUM2RSxFQUFILENBQU1DLFNBQU4sQ0FBZ0IsNkJBQWhCLEVBQStDLEtBQUs3QixJQUFMLENBQVVzQyxNQUF6RCxDQUFsQixFQUFtRixJQUFuRixFQUF3RixtQkFBeEYsQ0FBVjtBQUNBLFNBQUtDLE9BQUwsQ0FBYUgsR0FBYixFQUFtQixVQUFTSSxTQUFULEVBQW1CO0FBQ2xDLFdBQUszRSxPQUFMLENBQWE0RSxXQUFiLEdBQTJCRCxTQUEzQjtBQUNILEtBRmlCLENBRWZFLElBRmUsQ0FFVixJQUZVLENBQWxCO0FBR0EsU0FBS3BFLFNBQUwsQ0FBZUMsTUFBZixHQUF3QixLQUFLeUIsSUFBTCxDQUFVMkMsU0FBbEM7QUFFQSxRQUFJQyxJQUFJLEdBQUcsS0FBS3RFLFNBQUwsQ0FBZUosSUFBZixDQUFvQlMsY0FBcEIsRUFBWDs7QUFDQSxRQUFHaUUsSUFBSSxDQUFDQyxLQUFMLEdBQWEsR0FBaEIsRUFBb0I7QUFDaEJELE1BQUFBLElBQUksQ0FBQ0MsS0FBTCxHQUFhLEdBQWI7QUFDSDs7QUFDRCxTQUFLeEUsT0FBTCxDQUFheUUsY0FBYixDQUE0Qi9GLEVBQUUsQ0FBQzZGLElBQUgsQ0FBUUEsSUFBSSxDQUFDQyxLQUFMLEdBQVcsRUFBbkIsRUFBdUJELElBQUksQ0FBQ0csTUFBNUIsQ0FBNUIsRUFaaUIsQ0FhakI7O0FBQ0EsUUFBSUMsU0FBUyxHQUFHLEVBQWhCOztBQUNBLFNBQUksSUFBSUMsQ0FBUixJQUFhLEtBQUtqRCxJQUFMLENBQVVrRCxLQUF2QixFQUE2QjtBQUN6QixVQUFJQyxDQUFDLEdBQUcsS0FBS25ELElBQUwsQ0FBVWtELEtBQVYsQ0FBZ0JELENBQWhCLENBQVI7QUFDQSxVQUFJRyxFQUFFLEdBQUcsRUFBVDs7QUFDQSxVQUFHQSxFQUFILEVBQU07QUFDRkEsUUFBQUEsRUFBRSxDQUFDQyxHQUFILEdBQVNGLENBQUMsQ0FBQyxDQUFELENBQVY7QUFDQUMsUUFBQUEsRUFBRSxDQUFDRSxHQUFILEdBQVNILENBQUMsQ0FBQyxDQUFELENBQVY7QUFDQUgsUUFBQUEsU0FBUyxDQUFDTyxJQUFWLENBQWVILEVBQWY7QUFDSDtBQUNKOztBQUNELFNBQUszRCxnQkFBTCxDQUFzQjBDLE9BQXRCLENBQThCYSxTQUE5QjtBQUNBLFNBQUt2RCxnQkFBTCxDQUFzQitELGNBQXRCLENBQXFDLFlBQVU7QUFDM0MsVUFBSUMsSUFBSSxHQUFHLEtBQUtoRSxnQkFBTCxDQUFzQmlFLFdBQXRCLEVBQVgsQ0FEMkMsQ0FFM0M7O0FBQ0EsV0FBSSxJQUFJQyxDQUFSLElBQWFGLElBQWIsRUFBa0I7QUFDZCxZQUFJRyxLQUFLLEdBQUdILElBQUksQ0FBQ0UsQ0FBRCxDQUFKLENBQVFFLE9BQVIsRUFBWjtBQUNBLFlBQUlDLFVBQUosQ0FGYyxDQUdkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0FMLFFBQUFBLElBQUksQ0FBQ0UsQ0FBRCxDQUFKLENBQVFJLGFBQVIsQ0FBc0IsSUFBdEIsRUFBNEIsSUFBNUIsRUFBa0MsSUFBbEMsRUFBd0NELFVBQXhDO0FBQ0g7QUFDSixLQWhCb0MsQ0FnQm5DcEIsSUFoQm1DLENBZ0I5QixJQWhCOEIsQ0FBckM7QUFrQkEsUUFBSXZCLE9BQU8sR0FBR3hFLGdCQUFnQixDQUFDVyxXQUFqQixHQUErQjhELHFCQUEvQixDQUFxRCxLQUFLcEIsSUFBTCxDQUFVcUIsUUFBL0QsQ0FBZDs7QUFDQSxRQUFHRixPQUFPLElBQUksSUFBZCxFQUFtQjtBQUNmLFdBQUszQyxVQUFMLENBQWdCTCxNQUFoQixHQUF5QixLQUF6QjtBQUNBLFdBQUtILFNBQUwsQ0FBZUUsSUFBZixDQUFvQkMsTUFBcEIsR0FBNkIsS0FBN0I7QUFDQSxXQUFLTSxVQUFMLENBQWdCTixNQUFoQixHQUF5QixJQUF6QjtBQUNILEtBSkQsTUFJSztBQUNELFdBQUtLLFVBQUwsQ0FBZ0JMLE1BQWhCLEdBQXlCLElBQXpCO0FBQ0EsV0FBS0gsU0FBTCxDQUFlTyxNQUFmLEdBQXdCLEtBQUt5QixJQUFMLENBQVVpQyxJQUFsQztBQUNBLFdBQUtqRSxTQUFMLENBQWVFLElBQWYsQ0FBb0JDLE1BQXBCLEdBQTZCLElBQTdCOztBQUNBLFVBQUcsS0FBSzZCLElBQUwsQ0FBVWlDLElBQVYsSUFBa0IsRUFBckIsRUFBd0I7QUFDcEIsYUFBSzdELFVBQUwsQ0FBZ0JHLE1BQWhCLEdBQXlCLEtBQUt5QixJQUFMLENBQVVnQyxLQUFuQztBQUNBLGFBQUs1RCxVQUFMLENBQWdCRixJQUFoQixDQUFxQkMsTUFBckIsR0FBOEIsSUFBOUI7QUFDSDs7QUFDRCxXQUFLTSxVQUFMLENBQWdCTixNQUFoQixHQUF5QixLQUF6QjtBQUNIOztBQUNELFNBQUs2RixlQUFMO0FBQ0gsR0F6SnNDO0FBMkp2QztBQUNBQSxFQUFBQSxlQUFlLEVBQUMsMkJBQVU7QUFDdEIsUUFBRyxLQUFLaEUsSUFBUixFQUFhO0FBQ1QsVUFBSWlFLFVBQVUsR0FBRyxLQUFqQjs7QUFDQSxVQUFHLEtBQUtqRSxJQUFMLENBQVV3QixFQUFWLElBQWdCOUUsc0JBQXNCLENBQUMrRSxXQUF2QixDQUFtQ3lDLFNBQXRELEVBQWdFO0FBQUU7QUFDOURELFFBQUFBLFVBQVUsR0FBR3BILG1CQUFtQixDQUFDUyxXQUFwQixHQUFrQzZHLFFBQWxDLEdBQTZDQyxvQkFBN0MsRUFBYjtBQUNILE9BRkQsTUFFTSxJQUFHLEtBQUtwRSxJQUFMLENBQVV3QixFQUFWLElBQWdCOUUsc0JBQXNCLENBQUMrRSxXQUF2QixDQUFtQzRDLE9BQXRELEVBQThELENBQUU7QUFDbEU7QUFDSCxPQUZLLE1BRUEsSUFBRyxLQUFLckUsSUFBTCxDQUFVd0IsRUFBVixJQUFnQjlFLHNCQUFzQixDQUFDK0UsV0FBdkIsQ0FBbUNDLE1BQXRELEVBQTZELENBQUU7QUFDakU7QUFDSDs7QUFDRCxVQUFJUCxPQUFPLEdBQUd4RSxnQkFBZ0IsQ0FBQ1csV0FBakIsR0FBK0I4RCxxQkFBL0IsQ0FBcUQsS0FBS3BCLElBQUwsQ0FBVXFCLFFBQS9ELENBQWQ7O0FBQ0EsVUFBR0YsT0FBTyxJQUFJLEtBQWQsRUFBb0I7QUFDaEI4QyxRQUFBQSxVQUFVLEdBQUcsS0FBYjtBQUNIOztBQUNEbkMsTUFBQUEsS0FBSyxDQUFDd0MseUJBQU4sQ0FBZ0MsS0FBSzdHLGNBQXJDLEVBQXFEd0csVUFBckQsRUFBaUUsS0FBS3hHLGNBQUwsQ0FBb0JvRixLQUFwQixHQUEwQixDQUEzRixFQUE4RixLQUFLcEYsY0FBTCxDQUFvQnNGLE1BQXBCLEdBQTJCLENBQXpILEVBQTRILEVBQTVILEVBQWdJLENBQWhJO0FBQ0g7QUFDSixHQTVLc0M7QUE2S3ZDO0FBQ0F3QixFQUFBQSxNQUFNLEVBQUMsZ0JBQVNDLE1BQVQsRUFBZ0IsQ0FFdEIsQ0FoTHNDO0FBa0x2QztBQUNBQyxFQUFBQSxNQUFNLEVBQUMsa0JBQVUsQ0FFaEIsQ0FyTHNDO0FBdUx2QztBQUNBQyxFQUFBQSxRQUFRLEVBQUMsb0JBQVU7QUFDZixRQUFHLEtBQUtqRixnQkFBUixFQUF5QjtBQUNyQixXQUFLQSxnQkFBTCxDQUFzQmtGLFFBQXRCO0FBQ0EsV0FBS2xGLGdCQUFMLEdBQXdCLElBQXhCO0FBQ0g7QUFDSjtBQTdMc0MsQ0FBVCxDQUFsQyIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEBhdXRob3I6IHh4eEBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgIOi/memHjOaYr+aPj+i/sOi/meS4queql+S9k+eahOS9nOeUqOeahFxuLy8gPGJyLz5DcmVhdGU6IDIwMTktMDUtMDkgMTA6MDM6MzNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgUGF0aFRvb2wgPSByZXF1aXJlKFwicGF0aHRvb2xcIik7XG52YXIgQWR2ZW50dXJlQWN0aXZpdHlDb25zdD0gcmVxdWlyZShcImFkdmVudHVyZWFjdGl2aXR5X2NvbnN0XCIpO1xudmFyIE1haW51aUNvbnRyb2xsZXIgPSByZXF1aXJlKFwibWFpbnVpX2NvbnRyb2xsZXJcIik7XG52YXIgQWR2ZW50dXJlQWN0aXZpdHlDb250cm9sbGVyID0gcmVxdWlyZShcImFkdmVudHVyZWFjdGl2aXR5X2NvbnRyb2xsZXJcIik7XG52YXIgQWR2ZW50dXJlQ29udHJvbGxlciA9IHJlcXVpcmUoXCJhZHZlbnR1cmVfY29udHJvbGxlclwiKTtcblxudmFyIEFkdmVudHVyZWFjdGl2aXR5X2l0ZW1QYW5lbCA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlUGFuZWwsXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnByZWZhYlBhdGggPSBQYXRoVG9vbC5nZXRQcmVmYWJQYXRoKFwiYWR2ZW50dXJlYWN0aXZpdHlcIiwgXCJhZHZlbnR1cmVhY3Rpdml0eV9pdGVtXCIpO1xuICAgICAgICB0aGlzLmN0cmwgPSBBZHZlbnR1cmVBY3Rpdml0eUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICB9LFxuXG4gICAgLy8g5Y+v5Lul5Yid5aeL5YyW5aOw5piO5LiA5Lqb5Y+Y6YeP55qEXG4gICAgaW5pdENvbmZpZzpmdW5jdGlvbigpe1xuXG4gICAgfSxcblxuICAgIC8vIOWIneWni+WMluS4gOS6m+mFjee9ruaVsOaNrizlj6/ku6XnlKjkuo7lo7DmmI7kuIDkupvlj5jph4/kuYvnsbvnmoRcbiAgICBpbml0UGFuZWw6ZnVuY3Rpb24oKXtcbiAgICAgICAgdGhpcy5tYWluX2NvbnRhaW5lciA9IHRoaXMucm9vdF93bmQuZ2V0Q2hpbGRCeU5hbWUoXCJtYWluX2NvbnRhaW5lclwiKTtcbiAgICAgICAgdGhpcy5pdGVtX2JnX25vZGUgPSB0aGlzLm1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiaXRlbV9iZ1wiKTtcbiAgICAgICAgdGhpcy5pdGVtX2JnID0gdGhpcy5pdGVtX2JnX25vZGUuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSk7XG4gICAgICAgIHRoaXMub3Blbl9kZXNjID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcIm9wZW5fZGVzY1wiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuICAgICAgICB0aGlzLm9wZW5fZGVzYy5ub2RlLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9wZW5fZGVzYzIgPSB0aGlzLm1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwib3Blbl9kZXNjXzJcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKTtcbiAgICAgICAgdGhpcy5vcGVuX2Rlc2MyLm5vZGUuYWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5qb2luX2JnID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImpvaW5fYmdcIik7XG4gICAgICAgIHRoaXMuam9pbl9kZXNjID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImpvaW5fZGVzY1wiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuICAgICAgICB0aGlzLmpvaW5fZGVzYy5zdHJpbmcgPSBcIlwiO1xuICAgICAgICB0aGlzLmxvY2tfbGF5ZXIgPSB0aGlzLm1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwibG9ja19sYXllclwiKTtcbiAgICAgICAgdGhpcy5hd2FyZF9saXN0ID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImF3YXJkX2xpc3RcIik7XG4gICAgICAgIHRoaXMuYXdhcmRfbGlzdC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdmFyIHNjcm9sbF92aWV3X3NpemUgPSB0aGlzLmF3YXJkX2xpc3QuZ2V0Q29udGVudFNpemUoKTtcbiAgICAgICAgdmFyIHNldHRpbmcgPSB7XG4gICAgICAgICAgICBpdGVtX2NsYXNzOiBcImJhY2twYWNrX2l0ZW1cIiwgICAgICAvLyDljZXlhYPnsbtcbiAgICAgICAgICAgIHN0YXJ0X3g6IDAsICAgICAgICAgICAgICAgICAgLy8g56ys5LiA5Liq5Y2V5YWD55qEWOi1t+eCuVxuICAgICAgICAgICAgc3BhY2VfeDogMTAsICAgICAgICAgICAgICAgICAgICAvLyB45pa55ZCR55qE6Ze06ZqUXG4gICAgICAgICAgICBzdGFydF95OiAwLCAgICAgICAgICAgICAgICAgICAgLy8g56ys5LiA5Liq5Y2V5YWD55qEWei1t+eCuVxuICAgICAgICAgICAgc3BhY2VfeTogMCwgICAgICAgICAgICAgICAgICAgLy8geeaWueWQkeeahOmXtOmalFxuICAgICAgICAgICAgaXRlbV93aWR0aDogMTIwKjAuNywgICAgICAgICAgICAgICAvLyDljZXlhYPnmoTlsLrlr7h3aWR0aFxuICAgICAgICAgICAgaXRlbV9oZWlnaHQ6IDEyMCowLjcsICAgICAgICAgICAgICAvLyDljZXlhYPnmoTlsLrlr7hoZWlnaHRcbiAgICAgICAgICAgIHJvdzogMSwgICAgICAgICAgICAgICAgICAgICAgICAvLyDooYzmlbDvvIzkvZznlKjkuo7msLTlubPmu5rliqjnsbvlnotcbiAgICAgICAgICAgIGNvbDogMCwgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5YiX5pWw77yM5L2c55So5LqO5Z6C55u05rua5Yqo57G75Z6LXG4gICAgICAgICAgICBuZWVkX2R5bmFtaWM6IHRydWUsXG4gICAgICAgICAgICBzY2FsZTogMC43XG4gICAgICAgIH1cbiAgICAgICAgdmFyIENvbW1vblNjcm9sbFZpZXcgPSByZXF1aXJlKFwiY29tbW9uX3Njcm9sbHZpZXdcIik7XG4gICAgICAgIHRoaXMuYXdhcmRfc2Nyb2xsdmlldyA9IG5ldyBDb21tb25TY3JvbGxWaWV3KCk7XG4gICAgICAgIHRoaXMuYXdhcmRfc2Nyb2xsdmlldyAuY3JlYXRlU2Nyb2xsKHRoaXMuYXdhcmRfbGlzdCwgY2MudjIoMCwwKSAsIFNjcm9sbFZpZXdEaXIuaG9yaXpvbnRhbCwgU2Nyb2xsVmlld1N0YXJ0UG9zLnRvcCwgc2Nyb2xsX3ZpZXdfc2l6ZSwgc2V0dGluZyk7XG4gICAgICAgIC8vIHRoaXMuYXdhcmRfc2Nyb2xsdmlldzpzZXRTd2FsbG93VG91Y2hlcyhmYWxzZSlcblxuICAgICAgICBpZih0aGlzLmRhdGEpe1xuICAgICAgICAgICAgdGhpcy51cGRhdGVJbmZvKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g5rOo5YaM5LqL5Lu255uR5ZCs55qE5o6l5Y+jLOS4jemcgOimgeaJi+WKqOiwg+eUqCzlpoLmnpzmmK/kvb/nlKhnY29yZS5HbG9iYWxFdmVudOebkeWQrCzlj6/ku6Xnm7TmjqXosIPnlKhhZGRHbG9iYWxFdmVudFxuICAgIHJlZ2lzdGVyRXZlbnQ6ZnVuY3Rpb24oKXtcbiAgICAgICAgLy/lvZPnlKjmiLfngrnlh7vnmoTml7blgJnorrDlvZXpvKDmoIfngrnlh7vnirbmgIFcbiAgICAgICAgdGhpcy5tYWluX2NvbnRhaW5lci5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9TVEFSVCwgZnVuY3Rpb24oZXZlbnQpe1xuICAgICAgICAgICAgdmFyIHRvdWNoZXMgPSBldmVudC5nZXRUb3VjaGVzKCk7XG4gICAgICAgICAgICB0aGlzLnRvdWNoX2JlZ2FuID0gdG91Y2hlc1swXS5nZXREZWx0YSgpO1xuICAgICAgICB9LHRoaXMpO1xuXG4gICAgICAgIC8v5b2T6byg5qCH5oqs6LW355qE5pe25YCZ5oGi5aSN54q25oCBXG4gICAgICAgIHRoaXMubWFpbl9jb250YWluZXIub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfRU5ELCBmdW5jdGlvbihldmVudCl7XG4gICAgICAgICAgICB2YXIgdG91Y2hlcyA9IGV2ZW50LmdldFRvdWNoZXMoKTtcbiAgICAgICAgICAgIHRoaXMudG91Y2hfZW5kID0gdG91Y2hlc1swXS5nZXREZWx0YSgpO1xuICAgICAgICAgICAgdmFyIGlzX2NsaWNrID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmKHRoaXMudG91Y2hfYmVnYW4hPW51bGwpe1xuICAgICAgICAgICAgICAgIGlzX2NsaWNrID0gTWF0aC5hYnModGhpcy50b3VjaF9lbmQueCAtIHRoaXMudG91Y2hfYmVnYW4ueCkgPD0gMjAgJiYgTWF0aC5hYnModGhpcy50b3VjaF9lbmQueSAtIHRoaXMudG91Y2hfYmVnYW4ueSkgPD0gMjA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihpc19jbGljayl7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5kYXRhKXtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzX29wZW4gPSBNYWludWlDb250cm9sbGVyLmdldEluc3RhbmNlKCkuY2hlY2tJc09wZW5CeUFjdGl2YXRlKHRoaXMuZGF0YS5hY3RpdmF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmKGlzX29wZW4gPT0gdHJ1ZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0cmwub25DbGlja0dvdG9BZHZlblR1cmVBY2l2aXR5KHRoaXMuZGF0YS5yZXRydWVfaWQpO1xuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZGF0YS5pZCA9PSBBZHZlbnR1cmVBY3Rpdml0eUNvbnN0Lkdyb3VuZF9UeXBlLmhlYXZlbil7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0ciA9IGNjLmpzLmZvcm1hdFN0cihVdGlscy5USTE4TihcIiVz77yM6KeS6ImyJXPlj6/ov5vlhaVcIiksdGhpcy5kYXRhLmRlc2MyLHRoaXMuZGF0YS5kZXNjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlKHN0cik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlKHRoaXMuZGF0YS5kZXNjKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LHRoaXMpO1xuICAgIH0sXG5cbiAgICBzZXREYXRhOmZ1bmN0aW9uKGRhdGEpe1xuICAgICAgICBpZighZGF0YSlyZXR1cm47XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgICAgIGlmKHRoaXMucm9vdF93bmQpe1xuICAgICAgICAgICAgdGhpcy51cGRhdGVJbmZvKCk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIFxuICAgIHVwZGF0ZUluZm86ZnVuY3Rpb24oKXtcbiAgICAgICAgLy8g6IOM5pmvXG4gICAgICAgIHZhciByZXMgPSBQYXRoVG9vbC5nZXRCaWdCZyhjYy5qcy5mb3JtYXRTdHIoXCJ0eHRfY25fYWR2ZW50cnVlYWN0aXZpdHlfJWRcIiwgdGhpcy5kYXRhLnJlc19pZCksbnVsbCxcImFkdmVudHJ1ZWFjdGl2aXR5XCIpO1xuICAgICAgICB0aGlzLmxvYWRSZXMocmVzLCAoZnVuY3Rpb24ocmVzT2JqZWN0KXtcbiAgICAgICAgICAgIHRoaXMuaXRlbV9iZy5zcHJpdGVGcmFtZSA9IHJlc09iamVjdDtcbiAgICAgICAgfSkuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuam9pbl9kZXNjLnN0cmluZyA9IHRoaXMuZGF0YS5pdGVtX2Rlc2M7XG5cbiAgICAgICAgdmFyIHNpemUgPSB0aGlzLmpvaW5fZGVzYy5ub2RlLmdldENvbnRlbnRTaXplKCk7XG4gICAgICAgIGlmKHNpemUud2lkdGggPCAyNTApe1xuICAgICAgICAgICAgc2l6ZS53aWR0aCA9IDI1MDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmpvaW5fYmcuc2V0Q29udGVudFNpemUoY2Muc2l6ZShzaXplLndpZHRoKzYwLCBzaXplLmhlaWdodCkpO1xuICAgICAgICAvLyDlpZblirHmlbDmja5cbiAgICAgICAgdmFyIGl0ZW1fbGlzdCA9IFtdO1xuICAgICAgICBmb3IodmFyIGkgaW4gdGhpcy5kYXRhLmF3YXJkKXtcbiAgICAgICAgICAgIHZhciB2ID0gdGhpcy5kYXRhLmF3YXJkW2ldO1xuICAgICAgICAgICAgdmFyIHZvID0ge307XG4gICAgICAgICAgICBpZih2byl7XG4gICAgICAgICAgICAgICAgdm8uYmlkID0gdlswXTtcbiAgICAgICAgICAgICAgICB2by5udW0gPSB2WzFdO1xuICAgICAgICAgICAgICAgIGl0ZW1fbGlzdC5wdXNoKHZvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmF3YXJkX3Njcm9sbHZpZXcuc2V0RGF0YShpdGVtX2xpc3QpO1xuICAgICAgICB0aGlzLmF3YXJkX3Njcm9sbHZpZXcuYWRkRW5kQ2FsbEJhY2soZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHZhciBsaXN0ID0gdGhpcy5hd2FyZF9zY3JvbGx2aWV3LmdldEl0ZW1MaXN0KCk7XG4gICAgICAgICAgICAvLyB2YXIgYm9va19pZF9jZmcgPSBDb25maWcuZHVuZ2Vvbl9oZWF2ZW5fZGF0YS5kYXRhX2NvbnN0W1wiaGVhdmVuX2hhbmRib29rXCJdO1xuICAgICAgICAgICAgZm9yKHZhciBrIGluIGxpc3Qpe1xuICAgICAgICAgICAgICAgIHZhciBpRGF0YSA9IGxpc3Rba10uZ2V0RGF0YSgpO1xuICAgICAgICAgICAgICAgIHZhciBpc19zcGVjaWFsO1xuICAgICAgICAgICAgICAgIC8vIGlmKHRoaXMuZGF0YS5pZCA9PSBBZHZlbnR1cmVBY3Rpdml0eUNvbnN0Lkdyb3VuZF9UeXBlLmhlYXZlbiAmJiBib29rX2lkX2NmZyAmJiBpRGF0YSl7XG4gICAgICAgICAgICAgICAgLy8gICAgIGZvcih2YXIgbiBpbiBib29rX2lkX2NmZy52YWwpe1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgaWYoYm9va19pZF9jZmcudmFsW25dID09IGlEYXRhLmlkKXtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICBpc19zcGVjaWFsID0gMjtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICBsaXN0W2tdLnNldERlZmF1bHRUaXAodHJ1ZSwgbnVsbCwgbnVsbCwgaXNfc3BlY2lhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0uYmluZCh0aGlzKSk7XG5cbiAgICAgICAgdmFyIGlzX29wZW4gPSBNYWludWlDb250cm9sbGVyLmdldEluc3RhbmNlKCkuY2hlY2tJc09wZW5CeUFjdGl2YXRlKHRoaXMuZGF0YS5hY3RpdmF0ZSk7XG4gICAgICAgIGlmKGlzX29wZW4gPT0gdHJ1ZSl7XG4gICAgICAgICAgICB0aGlzLmxvY2tfbGF5ZXIuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLm9wZW5fZGVzYy5ub2RlLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5hd2FyZF9saXN0LmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgdGhpcy5sb2NrX2xheWVyLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLm9wZW5fZGVzYy5zdHJpbmcgPSB0aGlzLmRhdGEuZGVzYztcbiAgICAgICAgICAgIHRoaXMub3Blbl9kZXNjLm5vZGUuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmKHRoaXMuZGF0YS5kZXNjICE9IFwiXCIpe1xuICAgICAgICAgICAgICAgIHRoaXMub3Blbl9kZXNjMi5zdHJpbmcgPSB0aGlzLmRhdGEuZGVzYzI7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuX2Rlc2MyLm5vZGUuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYXdhcmRfbGlzdC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZVJlZFN0YXR1cygpO1xuICAgIH0sXG5cbiAgICAvLyAg57qi54K55Yi35pawXG4gICAgdXBkYXRlUmVkU3RhdHVzOmZ1bmN0aW9uKCl7XG4gICAgICAgIGlmKHRoaXMuZGF0YSl7XG4gICAgICAgICAgICB2YXIgcmVkX3N0YXR1cyA9IGZhbHNlO1xuICAgICAgICAgICAgaWYodGhpcy5kYXRhLmlkID09IEFkdmVudHVyZUFjdGl2aXR5Q29uc3QuR3JvdW5kX1R5cGUuYWR2ZW50dXJlKXsgLy/lhpLpmalcbiAgICAgICAgICAgICAgICByZWRfc3RhdHVzID0gQWR2ZW50dXJlQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldE1vZGVsKCkuZ2V0QWR2ZW50dXJlUmVkUG9pbnQoKTtcbiAgICAgICAgICAgIH1lbHNlIGlmKHRoaXMuZGF0YS5pZCA9PSBBZHZlbnR1cmVBY3Rpdml0eUNvbnN0Lkdyb3VuZF9UeXBlLmVsZW1lbnQpeyAvL+WFg+e0oFxuICAgICAgICAgICAgICAgIC8vIHJlZF9zdGF0dXMgPSBFbGVtZW50Q29udHJvbGxlcjpnZXRJbnN0YW5jZSgpOmdldE1vZGVsKCk6Y2hlY2tFbGVtZW50UmVkU3RhdHVzKCk7XG4gICAgICAgICAgICB9ZWxzZSBpZih0aGlzLmRhdGEuaWQgPT0gQWR2ZW50dXJlQWN0aXZpdHlDb25zdC5Hcm91bmRfVHlwZS5oZWF2ZW4peyAvL+WkqeeVjOWJr+acrFxuICAgICAgICAgICAgICAgIC8vIHJlZF9zdGF0dXMgPSBIZWF2ZW5Db250cm9sbGVyOmdldEluc3RhbmNlKCk6Z2V0TW9kZWwoKTpnZXRIZWF2ZW5SZWRTdGF0dXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBpc19vcGVuID0gTWFpbnVpQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmNoZWNrSXNPcGVuQnlBY3RpdmF0ZSh0aGlzLmRhdGEuYWN0aXZhdGUpO1xuICAgICAgICAgICAgaWYoaXNfb3BlbiA9PSBmYWxzZSl7XG4gICAgICAgICAgICAgICAgcmVkX3N0YXR1cyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgVXRpbHMuYWRkUmVkUG9pbnRUb05vZGVCeVN0YXR1cyh0aGlzLm1haW5fY29udGFpbmVyLCByZWRfc3RhdHVzLCB0aGlzLm1haW5fY29udGFpbmVyLndpZHRoLzIsIHRoaXMubWFpbl9jb250YWluZXIuaGVpZ2h0LzIsIDk5LCAyKVxuICAgICAgICB9XG4gICAgfSxcbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI4s5re75Yqg5Yiw5a+55bqU5Li76IqC54K55LmL5ZCO55qE5Zue6LCD5Y+v5Lul6K6+572u5LiA5Lqb5pWw5o2u5LqGXG4gICAgb25TaG93OmZ1bmN0aW9uKHBhcmFtcyl7XG5cbiAgICB9LFxuXG4gICAgLy8g6Z2i5p2/6K6+572u5LiN5Y+v6KeB55qE5Zue6LCDLOi/memHjOWBmuS4gOS6m+S4jeWPr+ingeeahOWxj+iUveWkhOeQhlxuICAgIG9uSGlkZTpmdW5jdGlvbigpe1xuXG4gICAgfSxcblxuICAgIC8vIOW9k+mdouadv+S7juS4u+iKgueCuemHiuaUvuaOieeahOiwg+eUqOaOpeWPoyzpnIDopoHmiYvliqjosIPnlKgs6ICM5LiU5Lmf5LiA5a6a6KaB6LCD55SoXG4gICAgb25EZWxldGU6ZnVuY3Rpb24oKXtcbiAgICAgICAgaWYodGhpcy5hd2FyZF9zY3JvbGx2aWV3KXtcbiAgICAgICAgICAgIHRoaXMuYXdhcmRfc2Nyb2xsdmlldy5kZWxldGVNZSgpO1xuICAgICAgICAgICAgdGhpcy5hd2FyZF9zY3JvbGx2aWV3ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH0sXG59KSJdfQ==
|