|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/backpack/view/round_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, '95e3aibvCVMCbKjpQtTGBhL', 'round_item_panel');
|
// Scripts/mod/backpack/view/round_item_panel.js
|
|
"use strict";
|
|
// --------------------------------------------------------------------
|
// @author: xxx@syg.com(必填, 创建模块的人员)
|
// @description:
|
// 物品(圆形的)
|
// <br/>Create: 2019-04-25 19:50:35
|
// --------------------------------------------------------------------
|
var PathTool = require("pathtool");
|
|
var Round_itemPanel = cc.Class({
|
"extends": BasePanel,
|
ctor: function ctor() {
|
this.prefabPath = PathTool.getPrefabPath("backpack", "round_item");
|
|
if (arguments && arguments.length > 0) {
|
this.click = arguments[0];
|
this.scale = arguments[1] || 1;
|
this.scale1 = arguments[2] || 1;
|
}
|
},
|
// 可以初始化声明一些变量的
|
initConfig: function initConfig() {
|
this.isUnEnabled = false;
|
this.redpointVisible = false;
|
},
|
// 初始化一些配置数据,可以用于声明一些变量之类的
|
initPanel: function initPanel() {
|
if (this.scale != 1) {
|
this.root_wnd.setScale(this.scale);
|
}
|
|
this.main_container = this.root_wnd.getChildByName("main_container");
|
this.background = this.main_container.getChildByName("background");
|
this.round_bg = this.background.getChildByName("round_bg");
|
this.item_icon = this.main_container.getChildByName("icon");
|
this.item_icon.setScale(this.scale1);
|
this.num_label = this.main_container.getChildByName("num").getComponent(cc.Label);
|
this.num_label.string = "";
|
this.num_bg = this.main_container.getChildByName("num_bg");
|
this.num_bg_size = this.num_bg.getContentSize();
|
this.redpoint = this.main_container.getChildByName("redpoint");
|
this.redpoint.active = false;
|
this.round_res_id = PathTool.getRoundQualityBg(1);
|
|
if (this.tmepData) {
|
this.updateData(this.tmepData);
|
}
|
|
this.setItemUnEnabled(this.isUnEnabled);
|
this.setVisibleRedPoint(this.redpointVisible);
|
},
|
// 红点
|
setVisibleRedPoint: function setVisibleRedPoint(visible) {
|
visible = visible || false;
|
this.redpointVisible = visible;
|
|
if (this.redpoint) {
|
this.redpoint.active = visible;
|
}
|
},
|
// 物品
|
setVisibleIcon: function setVisibleIcon(visible) {
|
visible = visible || false;
|
|
if (this.item_icon) {
|
this.item_icon.active = visible;
|
}
|
},
|
// 物品框颜色
|
setSelfBackground: function setSelfBackground(quality) {
|
quality = quality || 1;
|
var res_id = PathTool.getRoundQualityBg(quality);
|
this.round_res_id = res_id;
|
this.loadRes(this.round_res_id, function (res) {
|
this.background.getComponent(cc.Sprite).spriteFrame = res;
|
}.bind(this));
|
},
|
// 光圈
|
setVisibleRoundBG: function setVisibleRoundBG(visible) {
|
visible = visible || false;
|
|
if (this.round_bg) {
|
this.round_bg.active = visible;
|
}
|
},
|
getData: function getData() {
|
return this.data;
|
},
|
// 点击回调
|
addCallBack: function addCallBack(callback) {
|
this.callback = callback;
|
},
|
// 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
|
registerEvent: function registerEvent() {
|
//当用户点击的时候记录鼠标点击状态
|
this.root_wnd.on(cc.Node.EventType.TOUCH_START, function (event) {
|
var touches = event.getTouches();
|
this.touch_began = touches[0].getDelta();
|
}, this); //当鼠标抬起的时候恢复状态
|
|
this.root_wnd.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 == true) {
|
Utils.playButtonSound(ButtonSound.Normal);
|
|
if (this.btn_call_fun) {
|
this.btn_call_fun();
|
} else {
|
if (this.is_show_tips && this.data != null) {
|
var bid = this.data.bid || this.data.base_id || this.data.id;
|
var type = 0;
|
|
if (this.data) {
|
if (this.data.config && this.data.config.type) {
|
type = this.data.config.type;
|
} else if (this.data.type) {
|
type = this.data.type;
|
}
|
}
|
|
var BackPackConst = require("backpack_const");
|
|
if (BackPackConst.checkIsEquip(type) && !this.is_spec) {
|
var HeroController = require("hero_controller");
|
|
HeroController.getInstance().openEquipTips(true, this.data);
|
} else {
|
var config;
|
|
if (this.data.config) {
|
config = this.data.config;
|
} else {
|
config = Utils.getItemConfig(bid);
|
} // 虽然显示物品来源,但是如果没有配置也不需要显示
|
|
|
if (this.is_show_source == true && config.source && Utils.next(config.source)) {
|
var BackpackController = require("backpack_controller");
|
|
BackpackController.getInstance().openTipsSource(true, config);
|
} else {
|
var TipsController = require("tips_controller");
|
|
TipsController.getInstance().showGoodsTips(config);
|
}
|
}
|
|
return;
|
}
|
}
|
|
if (this.callback) {
|
this.callback();
|
}
|
}
|
}, this);
|
},
|
// 显示tips的开关
|
setDefaultTip: function setDefaultTip(is_show_tips) {
|
if (is_show_tips == null) {
|
is_show_tips = true;
|
}
|
|
this.is_show_tips = is_show_tips;
|
},
|
// 物品数据
|
setBaseData: function setBaseData(data) {
|
this.tmepData = data;
|
|
if (this.root_wnd) {
|
this.updateData(data);
|
}
|
},
|
updateData: function updateData(data) {
|
var config = Utils.getItemConfig(data.bid);
|
if (config == null) return;
|
this.data = config;
|
this.item_icon.active = true;
|
var head_icon = PathTool.getItemRes(config.icon);
|
this.loadRes(head_icon, function (res) {
|
this.item_icon.getComponent(cc.Sprite).spriteFrame = res;
|
}.bind(this)); // 设置数量显示
|
|
this.setSelfNum(data.num); // 设置背景
|
|
this.setSelfBackground(config.quality);
|
},
|
setSelfNum: function setSelfNum(num) {
|
num = num || 0;
|
this.num_label.node.active = num > 1;
|
this.num_bg.active = num > 1;
|
|
if (num > 1) {
|
this.num_label.string = num;
|
this.updateNumBGSize();
|
}
|
},
|
updateNumBGSize: function updateNumBGSize() {
|
var size = this.num_label.node.getContentSize();
|
var width = size.width;
|
|
if (width < 50) {
|
width = 50;
|
}
|
|
this.num_bg.setContentSize(cc.size(width + 6, this.num_bg_size.height));
|
},
|
//置灰
|
setItemUnEnabled: function setItemUnEnabled(bool) {
|
this.isUnEnabled = bool;
|
|
if (this.background) {
|
this.background.getComponent(cc.Sprite).setState(!bool ? cc.Sprite.State.NORMAL : cc.Sprite.State.GRAY);
|
}
|
|
if (this.round_bg) {
|
this.round_bg.getComponent(cc.Sprite).setState(!bool ? cc.Sprite.State.NORMAL : cc.Sprite.State.GRAY);
|
}
|
|
if (this.item_icon) {
|
this.item_icon.getComponent(cc.Sprite).setState(!bool ? cc.Sprite.State.NORMAL : cc.Sprite.State.GRAY);
|
}
|
|
if (this.num_bg) {
|
this.num_bg.getChildByName("background").getComponent(cc.Sprite).setState(!bool ? cc.Sprite.State.NORMAL : cc.Sprite.State.GRAY);
|
}
|
|
if (this.redpoint) {
|
this.redpoint.getComponent(cc.Sprite).setState(!bool ? cc.Sprite.State.NORMAL : cc.Sprite.State.GRAY);
|
}
|
},
|
// 预制体加载完成之后,添加到对应主节点之后的回调可以设置一些数据了
|
onShow: function onShow(params) {},
|
// 面板设置不可见的回调,这里做一些不可见的屏蔽处理
|
onHide: function onHide() {},
|
// 当面板从主节点释放掉的调用接口,需要手动调用,而且也一定要调用
|
onDelete: function onDelete() {}
|
});
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxiYWNrcGFja1xcdmlld1xccm91bmRfaXRlbV9wYW5lbC5qcyJdLCJuYW1lcyI6WyJQYXRoVG9vbCIsInJlcXVpcmUiLCJSb3VuZF9pdGVtUGFuZWwiLCJjYyIsIkNsYXNzIiwiQmFzZVBhbmVsIiwiY3RvciIsInByZWZhYlBhdGgiLCJnZXRQcmVmYWJQYXRoIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiY2xpY2siLCJzY2FsZSIsInNjYWxlMSIsImluaXRDb25maWciLCJpc1VuRW5hYmxlZCIsInJlZHBvaW50VmlzaWJsZSIsImluaXRQYW5lbCIsInJvb3Rfd25kIiwic2V0U2NhbGUiLCJtYWluX2NvbnRhaW5lciIsImdldENoaWxkQnlOYW1lIiwiYmFja2dyb3VuZCIsInJvdW5kX2JnIiwiaXRlbV9pY29uIiwibnVtX2xhYmVsIiwiZ2V0Q29tcG9uZW50IiwiTGFiZWwiLCJzdHJpbmciLCJudW1fYmciLCJudW1fYmdfc2l6ZSIsImdldENvbnRlbnRTaXplIiwicmVkcG9pbnQiLCJhY3RpdmUiLCJyb3VuZF9yZXNfaWQiLCJnZXRSb3VuZFF1YWxpdHlCZyIsInRtZXBEYXRhIiwidXBkYXRlRGF0YSIsInNldEl0ZW1VbkVuYWJsZWQiLCJzZXRWaXNpYmxlUmVkUG9pbnQiLCJ2aXNpYmxlIiwic2V0VmlzaWJsZUljb24iLCJzZXRTZWxmQmFja2dyb3VuZCIsInF1YWxpdHkiLCJyZXNfaWQiLCJsb2FkUmVzIiwicmVzIiwiU3ByaXRlIiwic3ByaXRlRnJhbWUiLCJiaW5kIiwic2V0VmlzaWJsZVJvdW5kQkciLCJnZXREYXRhIiwiZGF0YSIsImFkZENhbGxCYWNrIiwiY2FsbGJhY2siLCJyZWdpc3RlckV2ZW50Iiwib24iLCJOb2RlIiwiRXZlbnRUeXBlIiwiVE9VQ0hfU1RBUlQiLCJldmVudCIsInRvdWNoZXMiLCJnZXRUb3VjaGVzIiwidG91Y2hfYmVnYW4iLCJnZXREZWx0YSIsIlRPVUNIX0VORCIsInRvdWNoX2VuZCIsImlzX2NsaWNrIiwiTWF0aCIsImFicyIsIngiLCJ5IiwiVXRpbHMiLCJwbGF5QnV0dG9uU291bmQiLCJCdXR0b25Tb3VuZCIsIk5vcm1hbCIsImJ0bl9jYWxsX2Z1biIsImlzX3Nob3dfdGlwcyIsImJpZCIsImJhc2VfaWQiLCJpZCIsInR5cGUiLCJjb25maWciLCJCYWNrUGFja0NvbnN0IiwiY2hlY2tJc0VxdWlwIiwiaXNfc3BlYyIsIkhlcm9Db250cm9sbGVyIiwiZ2V0SW5zdGFuY2UiLCJvcGVuRXF1aXBUaXBzIiwiZ2V0SXRlbUNvbmZpZyIsImlzX3Nob3dfc291cmNlIiwic291cmNlIiwibmV4dCIsIkJhY2twYWNrQ29udHJvbGxlciIsIm9wZW5UaXBzU291cmNlIiwiVGlwc0NvbnRyb2xsZXIiLCJzaG93R29vZHNUaXBzIiwic2V0RGVmYXVsdFRpcCIsInNldEJhc2VEYXRhIiwiaGVhZF9pY29uIiwiZ2V0SXRlbVJlcyIsImljb24iLCJzZXRTZWxmTnVtIiwibnVtIiwibm9kZSIsInVwZGF0ZU51bUJHU2l6ZSIsInNpemUiLCJ3aWR0aCIsInNldENvbnRlbnRTaXplIiwiaGVpZ2h0IiwiYm9vbCIsInNldFN0YXRlIiwiU3RhdGUiLCJOT1JNQUwiLCJHUkFZIiwib25TaG93IiwicGFyYW1zIiwib25IaWRlIiwib25EZWxldGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSUEsUUFBUSxHQUFHQyxPQUFPLENBQUMsVUFBRCxDQUF0Qjs7QUFDQSxJQUFJQyxlQUFlLEdBQUdDLEVBQUUsQ0FBQ0MsS0FBSCxDQUFTO0FBQzNCLGFBQVNDLFNBRGtCO0FBRTNCQyxFQUFBQSxJQUFJLEVBQUUsZ0JBQVk7QUFDZCxTQUFLQyxVQUFMLEdBQWtCUCxRQUFRLENBQUNRLGFBQVQsQ0FBdUIsVUFBdkIsRUFBbUMsWUFBbkMsQ0FBbEI7O0FBRUEsUUFBR0MsU0FBUyxJQUFJQSxTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkMsRUFB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LFFBQUwsQ0FBY04sWUFBZCxDQUEyQnZCLEVBQUUsQ0FBQzRDLE1BQTlCLEVBQXNDZ0UsUUFBdEMsQ0FBK0MsQ0FBQ0QsSUFBRCxHQUFRM0csRUFBRSxDQUFDNEMsTUFBSCxDQUFVaUUsS0FBVixDQUFnQkMsTUFBeEIsR0FBaUM5RyxFQUFFLENBQUM0QyxNQUFILENBQVVpRSxLQUFWLENBQWdCRSxJQUFoRztBQUNIO0FBQ0osR0F2TzBCO0FBeU8zQjtBQUNBQyxFQUFBQSxNQUFNLEVBQUMsZ0JBQVNDLE1BQVQsRUFBZ0IsQ0FFdEIsQ0E1TzBCO0FBOE8zQjtBQUNBQyxFQUFBQSxNQUFNLEVBQUMsa0JBQVUsQ0FFaEIsQ0FqUDBCO0FBbVAzQjtBQUNBQyxFQUFBQSxRQUFRLEVBQUMsb0JBQVUsQ0FFbEI7QUF0UDBCLENBQVQsQ0FBdEIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBAYXV0aG9yOiB4eHhAc3lnLmNvbSjlv4XloassIOWIm+W7uuaooeWdl+eahOS6uuWRmClcbi8vIEBkZXNjcmlwdGlvbjpcbi8vICAgICDnianlk4HvvIjlnIblvaLnmoTvvIlcbi8vIDxici8+Q3JlYXRlOiAyMDE5LTA0LTI1IDE5OjUwOjM1XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxudmFyIFBhdGhUb29sID0gcmVxdWlyZShcInBhdGh0b29sXCIpO1xudmFyIFJvdW5kX2l0ZW1QYW5lbCA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlUGFuZWwsXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnByZWZhYlBhdGggPSBQYXRoVG9vbC5nZXRQcmVmYWJQYXRoKFwiYmFja3BhY2tcIiwgXCJyb3VuZF9pdGVtXCIpO1xuXG4gICAgICAgIGlmKGFyZ3VtZW50cyAmJiBhcmd1bWVudHMubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICB0aGlzLmNsaWNrID0gYXJndW1lbnRzWzBdO1xuICAgICAgICAgICAgdGhpcy5zY2FsZSA9IGFyZ3VtZW50c1sxXSB8fCAxO1xuICAgICAgICAgICAgdGhpcy5zY2FsZTEgPSBhcmd1bWVudHNbMl0gfHwgMTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICB9LFxuXG4gICAgLy8g5Y+v5Lul5Yid5aeL5YyW5aOw5piO5LiA5Lqb5Y+Y6YeP55qEXG4gICAgaW5pdENvbmZpZzpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLmlzVW5FbmFibGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVkcG9pbnRWaXNpYmxlID0gZmFsc2U7XG4gICAgfSxcblxuICAgIC8vIOWIneWni+WMluS4gOS6m+mFjee9ruaVsOaNrizlj6/ku6XnlKjkuo7lo7DmmI7kuIDkupvlj5jph4/kuYvnsbvnmoRcbiAgICBpbml0UGFuZWw6ZnVuY3Rpb24oKXtcbiAgICAgICAgaWYodGhpcy5zY2FsZSE9MSl7XG4gICAgICAgICAgICB0aGlzLnJvb3Rfd25kLnNldFNjYWxlKHRoaXMuc2NhbGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tYWluX2NvbnRhaW5lciA9IHRoaXMucm9vdF93bmQuZ2V0Q2hpbGRCeU5hbWUoXCJtYWluX2NvbnRhaW5lclwiKTtcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImJhY2tncm91bmRcIik7XG4gICAgICAgIHRoaXMucm91bmRfYmcgPSB0aGlzLmJhY2tncm91bmQuZ2V0Q2hpbGRCeU5hbWUoXCJyb3VuZF9iZ1wiKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuaXRlbV9pY29uID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImljb25cIik7XG4gICAgICAgIHRoaXMuaXRlbV9pY29uLnNldFNjYWxlKHRoaXMuc2NhbGUxKTtcbiAgICAgICAgdGhpcy5udW1fbGFiZWwgPSB0aGlzLm1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwibnVtXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XG4gICAgICAgIHRoaXMubnVtX2xhYmVsLnN0cmluZyA9IFwiXCI7XG4gICAgICAgIHRoaXMubnVtX2JnID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcIm51bV9iZ1wiKTtcbiAgICAgICAgdGhpcy5udW1fYmdfc2l6ZSA9IHRoaXMubnVtX2JnLmdldENvbnRlbnRTaXplKCk7XG5cbiAgICAgICAgdGhpcy5yZWRwb2ludCA9IHRoaXMubWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJyZWRwb2ludFwiKTtcbiAgICAgICAgdGhpcy5yZWRwb2ludC5hY3RpdmUgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnJvdW5kX3Jlc19pZCA9IFBhdGhUb29sLmdldFJvdW5kUXVhbGl0eUJnKDEpO1xuXG4gICAgICAgIGlmKHRoaXMudG1lcERhdGEpe1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEYXRhKHRoaXMudG1lcERhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRJdGVtVW5FbmFibGVkKHRoaXMuaXNVbkVuYWJsZWQpO1xuICAgICAgICB0aGlzLnNldFZpc2libGVSZWRQb2ludCh0aGlzLnJlZHBvaW50VmlzaWJsZSk7XG4gICAgfSxcblxuICAgIC8vIOe6oueCuVxuICAgIHNldFZpc2libGVSZWRQb2ludDpmdW5jdGlvbih2aXNpYmxlKXtcbiAgICAgICAgdmlzaWJsZSA9IHZpc2libGUgfHwgZmFsc2U7XG4gICAgICAgIHRoaXMucmVkcG9pbnRWaXNpYmxlID0gdmlzaWJsZTtcbiAgICAgICAgaWYodGhpcy5yZWRwb2ludCl7XG4gICAgICAgICAgICB0aGlzLnJlZHBvaW50LmFjdGl2ZSA9IHZpc2libGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g54mp5ZOBXG4gICAgc2V0VmlzaWJsZUljb246ZnVuY3Rpb24odmlzaWJsZSl7XG4gICAgICAgIHZpc2libGUgPSB2aXNpYmxlIHx8IGZhbHNlO1xuICAgICAgICBpZih0aGlzLml0ZW1faWNvbil7XG4gICAgICAgICAgICB0aGlzLml0ZW1faWNvbi5hY3RpdmUgPSB2aXNpYmxlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIOeJqeWTgeahhuminOiJslxuICAgIHNldFNlbGZCYWNrZ3JvdW5kOmZ1bmN0aW9uKHF1YWxpdHkpe1xuICAgICAgICBxdWFsaXR5ID0gcXVhbGl0eSB8fCAxO1xuICAgICAgICB2YXIgcmVzX2lkID0gUGF0aFRvb2wuZ2V0Um91bmRRdWFsaXR5QmcocXVhbGl0eSk7XG4gICAgICAgIHRoaXMucm91bmRfcmVzX2lkID0gcmVzX2lkO1xuICAgICAgICB0aGlzLmxvYWRSZXModGhpcy5yb3VuZF9yZXNfaWQsZnVuY3Rpb24ocmVzKXtcbiAgICAgICAgICAgIHRoaXMuYmFja2dyb3VuZC5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHJlc1xuICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgIH0sXG5cbiAgICAvLyDlhYnlnIhcbiAgICBzZXRWaXNpYmxlUm91bmRCRzpmdW5jdGlvbih2aXNpYmxlKXtcbiAgICAgICAgdmlzaWJsZSA9IHZpc2libGUgfHwgZmFsc2U7XG4gICAgICAgIGlmKHRoaXMucm91bmRfYmcpe1xuICAgICAgICAgICAgdGhpcy5yb3VuZF9iZy5hY3RpdmUgPSB2aXNpYmxlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGdldERhdGE6ZnVuY3Rpb24oKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICAvLyDngrnlh7vlm57osINcbiAgICBhZGRDYWxsQmFjazpmdW5jdGlvbihjYWxsYmFjayl7XG4gICAgICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9LFxuXG4gICAgLy8g5rOo5YaM5LqL5Lu255uR5ZCs55qE5o6l5Y+jLOS4jemcgOimgeaJi+WKqOiwg+eUqCzlpoLmnpzmmK/kvb/nlKhnY29yZS5HbG9iYWxFdmVudOebkeWQrCzlj6/ku6Xnm7TmjqXosIPnlKhhZGRHbG9iYWxFdmVudFxuICAgIHJlZ2lzdGVyRXZlbnQ6ZnVuY3Rpb24oKXtcbiAgICAgICAgLy/lvZPnlKjmiLfngrnlh7vnmoTml7blgJnorrDlvZXpvKDmoIfngrnlh7vnirbmgIFcbiAgICAgICAgdGhpcy5yb290X3duZC5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9TVEFSVCwgZnVuY3Rpb24oZXZlbnQpe1xuICAgICAgICAgICAgdmFyIHRvdWNoZXMgPSBldmVudC5nZXRUb3VjaGVzKCk7XG4gICAgICAgICAgICB0aGlzLnRvdWNoX2JlZ2FuID0gdG91Y2hlc1swXS5nZXREZWx0YSgpO1xuXG4gICAgICAgIH0sdGhpcyk7XG5cbiAgICAgICAgLy/lvZPpvKDmoIfmiqzotbfnmoTml7blgJnmgaLlpI3nirbmgIFcbiAgICAgICAgdGhpcy5yb290X3duZC5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9FTkQsIGZ1bmN0aW9uKGV2ZW50KXtcbiAgICAgICAgICAgIHZhciB0b3VjaGVzID0gZXZlbnQuZ2V0VG91Y2hlcygpO1xuICAgICAgICAgICAgdGhpcy50b3VjaF9lbmQgPSB0b3VjaGVzWzBdLmdldERlbHRhKCk7XG5cbiAgICAgICAgICAgIHZhciBpc19jbGljayA9IHRydWU7XG4gICAgICAgICAgICBpZih0aGlzLnRvdWNoX2JlZ2FuICE9IG51bGwpe1xuICAgICAgICAgICAgICAgIGlzX2NsaWNrID0gTWF0aC5hYnModGhpcy50b3VjaF9lbmQueCAtIHRoaXMudG91Y2hfYmVnYW4ueCkgPD0gMjAgJiYgTWF0aC5hYnModGhpcy50b3VjaF9lbmQueSAtIHRoaXMudG91Y2hfYmVnYW4ueSkgPD0gMjA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihpc19jbGljayA9PSB0cnVlKXtcbiAgICAgICAgICAgICAgICBVdGlscy5wbGF5QnV0dG9uU291bmQoQnV0dG9uU291bmQuTm9ybWFsKTtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmJ0bl9jYWxsX2Z1bil7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnRuX2NhbGxfZnVuKCk7XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuaXNfc2hvd190aXBzICYmIHRoaXMuZGF0YSAhPSBudWxsKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiaWQgPSB0aGlzLmRhdGEuYmlkIHx8IHRoaXMuZGF0YS5iYXNlX2lkIHx8IHRoaXMuZGF0YS5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZGF0YSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5kYXRhLmNvbmZpZyAmJiB0aGlzLmRhdGEuY29uZmlnLnR5cGUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gdGhpcy5kYXRhLmNvbmZpZy50eXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHRoaXMuZGF0YS50eXBlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IHRoaXMuZGF0YS50eXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBCYWNrUGFja0NvbnN0ID0gcmVxdWlyZShcImJhY2twYWNrX2NvbnN0XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoQmFja1BhY2tDb25zdC5jaGVja0lzRXF1aXAodHlwZSkgJiYgKCF0aGlzLmlzX3NwZWMpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgSGVyb0NvbnRyb2xsZXIgPSByZXF1aXJlKFwiaGVyb19jb250cm9sbGVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSGVyb0NvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5vcGVuRXF1aXBUaXBzKHRydWUsIHRoaXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29uZmlnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZGF0YS5jb25maWcpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcgPSB0aGlzLmRhdGEuY29uZmlnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcgPSBVdGlscy5nZXRJdGVtQ29uZmlnKGJpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOiZveeEtuaYvuekuueJqeWTgeadpea6kCzkvYbmmK/lpoLmnpzmsqHmnInphY3nva7kuZ/kuI3pnIDopoHmmL7npLpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmlzX3Nob3dfc291cmNlID09IHRydWUgJiYgY29uZmlnLnNvdXJjZSAmJiBVdGlscy5uZXh0KGNvbmZpZy5zb3VyY2UpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEJhY2twYWNrQ29udHJvbGxlciA9IHJlcXVpcmUoXCJiYWNrcGFja19jb250cm9sbGVyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYWNrcGFja0NvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5vcGVuVGlwc1NvdXJjZSh0cnVlLCBjb25maWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgVGlwc0NvbnRyb2xsZXIgPSByZXF1aXJlKFwidGlwc19jb250cm9sbGVyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXBzQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLnNob3dHb29kc1RpcHMoY29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYodGhpcy5jYWxsYmFjayl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sdGhpcyk7XG4gICAgfSxcblxuICAgIC8vIOaYvuekunRpcHPnmoTlvIDlhbNcbiAgICBzZXREZWZhdWx0VGlwOmZ1bmN0aW9uKGlzX3Nob3dfdGlwcyl7XG4gICAgICAgIGlmKGlzX3Nob3dfdGlwcyA9PSBudWxsKXtcbiAgICAgICAgICAgIGlzX3Nob3dfdGlwcyA9IHRydWU7ICAgIFxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNfc2hvd190aXBzID0gaXNfc2hvd190aXBzO1xuICAgIH0sXG5cbiAgICAvLyDnianlk4HmlbDmja5cbiAgICBzZXRCYXNlRGF0YTpmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgdGhpcy50bWVwRGF0YSA9IGRhdGE7XG4gICAgICAgIGlmKHRoaXMucm9vdF93bmQpe1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEYXRhKGRhdGEpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBcbiAgICB1cGRhdGVEYXRhOmZ1bmN0aW9uKGRhdGEpe1xuICAgICAgICB2YXIgY29uZmlnID0gVXRpbHMuZ2V0SXRlbUNvbmZpZyhkYXRhLmJpZCk7XG4gICAgICAgIGlmKGNvbmZpZyA9PSBudWxsKXJldHVybjtcbiAgICAgICAgdGhpcy5kYXRhID0gY29uZmlnO1xuXG4gICAgICAgIHRoaXMuaXRlbV9pY29uLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIHZhciBoZWFkX2ljb24gPSBQYXRoVG9vbC5nZXRJdGVtUmVzKGNvbmZpZy5pY29uKTtcbiAgICAgICAgdGhpcy5sb2FkUmVzKGhlYWRfaWNvbixmdW5jdGlvbihyZXMpe1xuICAgICAgICAgICAgdGhpcy5pdGVtX2ljb24uZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSByZXNcbiAgICAgICAgfS5iaW5kKHRoaXMpKTtcblxuICAgICAgICAvLyAg6K6+572u5pWw6YeP5pi+56S6XG5cdCAgICB0aGlzLnNldFNlbGZOdW0oZGF0YS5udW0pO1xuXG5cdCAgICAvLyAg6K6+572u6IOM5pmvXG5cdCAgICB0aGlzLnNldFNlbGZCYWNrZ3JvdW5kKGNvbmZpZy5xdWFsaXR5KTtcbiAgICB9LFxuXG4gICAgc2V0U2VsZk51bTpmdW5jdGlvbihudW0pe1xuICAgICAgICBudW0gPSBudW0gfHwgMDtcbiAgICAgICAgdGhpcy5udW1fbGFiZWwubm9kZS5hY3RpdmUgPSBudW0gPjE7XG4gICAgICAgIHRoaXMubnVtX2JnLmFjdGl2ZSA9IG51bSA+IDE7XG4gICAgICAgIGlmKG51bSA+IDEpe1xuICAgICAgICAgICAgdGhpcy5udW1fbGFiZWwuc3RyaW5nID0gbnVtO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVOdW1CR1NpemUoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVOdW1CR1NpemU6ZnVuY3Rpb24oKXtcbiAgICAgICAgdmFyIHNpemUgPSB0aGlzLm51bV9sYWJlbC5ub2RlLmdldENvbnRlbnRTaXplKCk7XG4gICAgICAgIHZhciB3aWR0aCA9IHNpemUud2lkdGg7XG4gICAgICAgIGlmKHdpZHRoIDwgNTApe1xuICAgICAgICAgICAgd2lkdGggPSA1MDsgICAgXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5udW1fYmcuc2V0Q29udGVudFNpemUoY2Muc2l6ZSh3aWR0aCs2LCB0aGlzLm51bV9iZ19zaXplLmhlaWdodCkpO1xuICAgIH0sXG5cbiAgICAvL+e9rueBsFxuICAgIHNldEl0ZW1VbkVuYWJsZWQ6IGZ1bmN0aW9uIChib29sKSB7XG4gICAgICAgIHRoaXMuaXNVbkVuYWJsZWQgPSBib29sO1xuICAgICAgICBpZiAodGhpcy5iYWNrZ3JvdW5kKSB7XG4gICAgICAgICAgICB0aGlzLmJhY2tncm91bmQuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc2V0U3RhdGUoIWJvb2wgPyBjYy5TcHJpdGUuU3RhdGUuTk9STUFMIDogY2MuU3ByaXRlLlN0YXRlLkdSQVkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucm91bmRfYmcpIHtcbiAgICAgICAgICAgIHRoaXMucm91bmRfYmcuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc2V0U3RhdGUoIWJvb2wgPyBjYy5TcHJpdGUuU3RhdGUuTk9STUFMIDogY2MuU3ByaXRlLlN0YXRlLkdSQVkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXRlbV9pY29uKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW1faWNvbi5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zZXRTdGF0ZSghYm9vbCA/IGNjLlNwcml0ZS5TdGF0ZS5OT1JNQUwgOiBjYy5TcHJpdGUuU3RhdGUuR1JBWSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5udW1fYmcpIHtcbiAgICAgICAgICAgIHRoaXMubnVtX2JnLmdldENoaWxkQnlOYW1lKFwiYmFja2dyb3VuZFwiKS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zZXRTdGF0ZSghYm9vbCA/IGNjLlNwcml0ZS5TdGF0ZS5OT1JNQUwgOiBjYy5TcHJpdGUuU3RhdGUuR1JBWSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5yZWRwb2ludCkge1xuICAgICAgICAgICAgdGhpcy5yZWRwb2ludC5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zZXRTdGF0ZSghYm9vbCA/IGNjLlNwcml0ZS5TdGF0ZS5OT1JNQUwgOiBjYy5TcHJpdGUuU3RhdGUuR1JBWSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g6aKE5Yi25L2T5Yqg6L295a6M5oiQ5LmL5ZCOLOa3u+WKoOWIsOWvueW6lOS4u+iKgueCueS5i+WQjueahOWbnuiwg+WPr+S7peiuvue9ruS4gOS6m+aVsOaNruS6hlxuICAgIG9uU2hvdzpmdW5jdGlvbihwYXJhbXMpe1xuXG4gICAgfSxcblxuICAgIC8vIOmdouadv+iuvue9ruS4jeWPr+ingeeahOWbnuiwgyzov5nph4zlgZrkuIDkupvkuI3lj6/op4HnmoTlsY/olL3lpITnkIZcbiAgICBvbkhpZGU6ZnVuY3Rpb24oKXtcblxuICAgIH0sXG5cbiAgICAvLyDlvZPpnaLmnb/ku47kuLvoioLngrnph4rmlL7mjonnmoTosIPnlKjmjqXlj6Ms6ZyA6KaB5omL5Yqo6LCD55SoLOiAjOS4lOS5n+S4gOWumuimgeiwg+eUqFxuICAgIG9uRGVsZXRlOmZ1bmN0aW9uKCl7XG5cbiAgICB9LFxufSkiXX0=
|