(function() {
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
var __module = nodeEnv ? module : {exports:{}};
var __filename = 'preview-scripts/assets/Scripts/mod/mall/view/mall_item.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, '70481KJ12hOtZnX0lMjPCYr', 'mall_item');
// Scripts/mod/mall/view/mall_item.js
"use strict";
// --------------------------------------------------------------------
// @author: @syg.com(必填, 创建模块的人员)
// @description:
// 竖版商城列表子项
//
Create: new Date().toISOString()
// --------------------------------------------------------------------
var MallController = require("mall_controller");
var MallEvent = require("mall_event");
var RoleController = require("role_controller");
var MallItem = cc.Class({
"extends": BasePanel,
ctor: function ctor() {
this.prefabPath = PathTool.getPrefabPath("mall", "mall_item");
this.ctrl = MallController.getInstance();
this.size = cc.size(306, 143);
this.width = 306;
this.height = 143;
this.vo = null;
this.data = null;
this.is_touch = true;
this.role_vo = RoleController.getInstance().getRoleVo();
},
initPanel: function initPanel() {
this.main_container = this.root_wnd.getChildByName("main_container");
this.name = this.main_container.getChildByName("name").getComponent(cc.Label);
this.coin = this.main_container.getChildByName("count_bg").getChildByName("coin").getComponent(cc.Sprite);
this.price = this.main_container.getChildByName("count_bg").getChildByName("price").getComponent(cc.Label);
this.good = this.main_container.getChildByName("good");
this.goods_item = ItemsPool.getInstance().getItem("backpack_item");
this.goods_item.initConfig(false, 1, false, true); // this.goods_item.setPosition(10 + BackPackItem.Width / 2, this.root_wnd.getContentSize().height / 2)
this.goods_item.setParent(this.good);
this.goods_item.show();
this.discount = this.main_container.getChildByName("discount");
this.discount_num = this.discount.getChildByName("discount_num").getComponent(cc.Label);
this.discount.active = false;
this.discount_label = this.main_container.getChildByName("discount_label").getComponent(cc.RichText);
this.sold = this.main_container.getChildByName("sold");
this.sold.active = false;
this.grey = this.main_container.getChildByName("grey");
this.grey.active = false;
this.need_icon = this.main_container.getChildByName("need_icon");
this.need_label = this.main_container.getChildByName("need_label").getComponent(cc.Label);
this.need_icon.active = false;
this.need_label.node.active = false;
this.setSellAll(false);
this.setData(this.data);
},
registerEvent: function registerEvent() {
this.main_container.on(cc.Node.EventType.TOUCH_END, function () {
if (!this.is_touch) return;
if (this.vip_limit_flag > 0) {
message(cc.js.formatStr(Utils.TI18N("VIP%s以上可购买"), this.vip_limit_flag));
return;
}
if (this.rank_limit_flag) {
message(Utils.TI18N("未满足购买条件"));
return;
}
if (this.limit_glev_status) {
message(Utils.TI18N("该商品暂未达解锁条件哦,请努力提高公会等级"));
return;
}
if (this.callback) this.callback(this.data);
}, this); //除神秘商城以外的购买成功
this.addGlobalEvent(MallEvent.Buy_Success_Event, function (data) {
if (this.data.id && data.eid == this.data.id && Utils.next(data.ext || {}) != null) {
this.data.has_buy = data.ext[0].val;
this.discount_label.string = cc.js.formatStr(Utils.TI18N("%s %s/%s个"), this.str, this.data.has_buy, this.data.limit_num);
if (this.data.has_buy == this.data.limit_num) this.setSellAll(true);
}
}.bind(this)); //神秘/神格商城购买成功
this.addGlobalEvent(MallEvent.Buy_One_Success, function (data) {
if (this.data.order && data.order == this.data.order) {
this.data.has_buy = this.data.has_buy + 1;
this.discount_label.string = cc.js.formatStr(Utils.TI18N("%s %s/%s个"), this.str, this.data.has_buy, this.data.limit_num);
var limit_num = this.data.limit_count || this.data.limit_num;
if (limit_num != null || this.data.has_buy >= this.data.limit_num) this.setSellAll(true);
}
}.bind(this));
if (this.role_vo) {
if (this.role_update_event == null) {
this.role_update_event = this.role_vo.bind(EventId.UPDATE_ROLE_ATTRIBUTE, function (key, value) {
if (key == "gold" || key == "red_gold" || key == "hero_soul" || key == "arena_cent" || key == "friend_point" || key == "guild") {
if (this.data["limit_day"] == 0 && this.data["limit_month"] == 0 && this.data["limit_week"] == 0 && this.data["limit_count"] == 0) {
//不限购的非神秘神格商店物品
if (this.data.shop_type != 4 && this.data.shop_type != 2) {
if (this.pay_type != "red_gold_or_gold") {
if (this.role_vo[this.pay_type] && this.role_vo[this.pay_type] < 20 * this.data.price) {
var temp = Math.floor(this.role_vo[this.pay_type] / this.data.price);
if (temp >= 1) {
this.data.limit_num = temp;
} else {
this.data.limit_num = 1;
}
} else {
this.data.limit_num = 20;
}
} else {
var own = this.role_vo["gold"] + this.role_vo["red_gold"];
if (own && own < 20 * this.data.price) {
var temp = Math.floor(own / this.data.price);
if (temp >= 1) {
this.data.limit_num = temp;
} else {
this.data.limit_num = 1;
}
} else {
this.data.limit_num = 20;
}
}
}
}
}
if (key == "vip_lev") {
if (this.vip_limit_flag > 0) {
this.setData(this.data);
}
}
}, this);
}
}
},
setData: function setData(data) {
this.data = data;
if (this.root_wnd == null) return; // return
var shop_num = null; //商品类型
if (data.shop_type != null) shop_num = data.shop_type;else shop_num = data.type;
this.data = Utils.deepCopy(data);
var config = Utils.getItemConfig(data.item_bid || data.item_id);
config = Utils.deepCopy(config);
var pay_config, pay_type;
config.bid = data.item_bid || data.item_id;
if (config) {
if (data.item_num && data.item_num != 1) {
config.num = data.item_num;
}
this.goods_item.setData(config);
this.name.string = config.name;
} // this.goods_item.setDefaultTips();
if (typeof data.pay_type == "number") {
pay_config = Utils.getItemConfig(data.pay_type);
pay_type = gdata("item_data", "data_assets_id2label", [data.pay_type]);
} else {
pay_config = Utils.getItemConfig(gdata("item_data", "data_assets_label2id", [data.pay_type]));
pay_type = data.pay_type;
}
this.pay_type = pay_type;
this.price.string = data.price;
var item_res_path = PathTool.getItemRes(pay_config.icon);
if (item_res_path) {
this.loadRes(item_res_path, function (res_object) {
this.coin.spriteFrame = res_object;
}.bind(this));
} //限购
this.str = "";
var limit_num = 0;
var limit_rank = 0;
var limit_vip = 0;
var is_show_limit_label = false; //天梯排名限购
this.rank_limit_flag = false;
if (data.limit_rank && data.limit_rank > 0) {
if (shop_num == MallConst.MallType.Ladder) {
var ladder_data = LadderController.getInstance().getModel().getLadderMyBaseInfo();
if (ladder_data && ladder_data.best_rank == 0 || ladder_data.best_rank > data.limit_rank) {
limit_rank = data.limit_rank;
is_show_limit_label = true;
}
}
} //vip等级限购
this.vip_limit_flag = 0;
if (data.limit_vip && data.limit_vip > 0) {
if (this.role_vo && this.role_vo.vip_lev < data.limit_vip) {
is_show_limit_label = true;
limit_vip = data.limit_vip;
}
}
if (is_show_limit_label == false) {
if (data.limit_count != null && data.limit_count > 0) {
this.str = "限购";
limit_num = data.limit_count;
is_show_limit_label = true;
} else if (data.limit_month != null && data.limit_month > 0) {
this.str = "每月限购";
limit_num = data.limit_month;
is_show_limit_label = true;
} else if (data.limit_week != null && data.limit_week > 0) {
this.str = "每周限购";
limit_num = data.limit_week;
is_show_limit_label = true;
} else if (data.limit_day != null && data.limit_day > 0) {
this.str = "每日限购";
limit_num = data.limit_day;
is_show_limit_label = true;
} else {
if (data.shop_type == 4 || data.shop_type == 2) {
limit_num = 1;
is_show_limit_label = true;
} else {
if (pay_type != "red_gold_or_gold") {
if (this.role_vo[pay_type] && this.role_vo[pay_type] < 20 * data.price) {
//取资产最大可买
var temp = Math.floor(this.role_vo[pay_type] / data.price);
if (temp >= 1) limit_num = temp;else limit_num = 1;
} else {
limit_num = 20; //无限制购买的物品 一次购买上限20
is_show_limit_label = false;
}
} else {
var own = this.role_vo.gold + this.role_vo.red_gold;
if (own != null && own < 20 * data.price) {
var temp = Math.floor(own / data.price);
if (temp >= 1) limit_num = temp;else limit_num = 1;
} else {
limit_num = 20; //无限制购买的物品 一次购买上限20
is_show_limit_label = false;
}
}
}
}
}
if (limit_vip > 0 && is_show_limit_label) {
this.discount_label.node.active = true;
this.discount_label.string = cc.js.formatStr(Utils.TI18N(" VIP%d专属"), limit_vip);
this.setSellAll(false);
this.vip_limit_flag = limit_vip;
} else if (limit_num > 0 && is_show_limit_label) {
this.discount_label.node.active = true;
this.discount_label.string = cc.js.formatStr(Utils.TI18N("%s %s/%s个"), this.str, data.has_buy, limit_num);
if (data.has_buy == limit_num) this.setSellAll(true);else this.setSellAll(false);
} else if (limit_rank > 0 && is_show_limit_label) {
this.discount_label.node.active = true;
this.discount_label.string = cc.js.formatStr(Utils.TI18N("需达到%s名"), limit_rank);
this.setSellAll(false);
this.rank_limit_flag = true;
} else {
this.discount_label.node.active = false;
if (data.has_buy == 1) this.setSellAll(true);else this.setSellAll(false);
}
this.data.limit_num = limit_num;
this.data.is_show_limit_label = is_show_limit_label; //折扣标签和折扣价格
if (data.label != null && data.label > 0) {
//表里的
this.discount.active = true;
this.discount_num.string = data.label + Utils.TI18N("折");
} else if (data.discount_type != null && data.discount_type > 0) {
//服务器信息
this.discount.active = true;
this.discount_num.string = data.discount_type + Utils.TI18N("折");
} else if (data.lable != null && data.lable > 0) {
this.discount.active = true;
this.discount_num.string = Utils.TI18N("超值");
} else {
this.discount.active = false;
}
if (data.discount != null && data.discount > 0) {
this.price.string = data.discount;
}
if (this.data.type == 10 || this.data.type == 11 || this.data.type == 12 || this.data.type == 13) {
//装备特殊处理显示等级显示
this.isShowLevLimit(true, this.data.lev);
} else {
this.isShowLevLimit(false);
}
if (this.data.type == 5 && this.data.glev != null) {
this.isShowGLevLimit(true, this.data.glev);
} else {
this.isShowGLevLimit(false, 0);
}
var bid = this.ctrl.getNeedBid();
if (bid != null && (bid == data.item_id || bid == data.item_bid)) {
this.need_icon.active = true;
this.need_label.node.active = true;
} else {
this.need_icon.active = false;
this.need_label.node.active = false;
}
if (this.data.type == 3) {
var is_show = this.ctrl.getModel().checkHeroChips(data.item_id);
this.showChipTag(is_show);
} else {
this.showChipTag(false);
}
},
setSellAll: function setSellAll(bool) {
if (this.root_wnd == null) return;
this.sold.active = bool;
this.grey.active = bool;
this.is_touch = !bool;
},
showChipTag: function showChipTag(status) {},
isShowLevLimit: function isShowLevLimit(status, lev) {
if (!this.limit_lev_label) {}
},
isShowGLevLimit: function isShowGLevLimit(status, lev) {},
addCallBack: function addCallBack(value) {
this.callback = value;
},
onShow: function onShow() {},
onDelete: function onDelete() {
if (this.role_update_event) {
if (this.role_vo) {
this.role_vo.unbind(this.role_update_event);
this.role_update_event = null;
this.role_vo = null;
}
}
if (this.goods_item) {
this.goods_item.deleteMe();
this.goods_item = null;
} // if(this.main_container){
// this.main_container.off(cc.Node.EventType.TOUCH_END,function(){},this)
// }
}
});
module.exports = MallItem;
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxtYWxsXFx2aWV3XFxtYWxsX2l0ZW0uanMiXSwibmFtZXMiOlsiTWFsbENvbnRyb2xsZXIiLCJyZXF1aXJlIiwiTWFsbEV2ZW50IiwiUm9sZUNvbnRyb2xsZXIiLCJNYWxsSXRlbSIsImNjIiwiQ2xhc3MiLCJCYXNlUGFuZWwiLCJjdG9yIiwicHJlZmFiUGF0aCIsIlBhdGhUb29sIiwiZ2V0UHJlZmFiUGF0aCIsImN0cmwiLCJnZXRJbnN0YW5jZSIsInNpemUiLCJ3aWR0aCIsImhlaWdodCIsInZvIiwiZGF0YSIsImlzX3RvdWNoIiwicm9sZV92byIsImdldFJvbGVWbyIsImluaXRQYW5lbCIsIm1haW5fY29udGFpbmVyIiwicm9vdF93bmQiLCJnZXRDaGlsZEJ5TmFtZSIsIm5hbWUiLCJnZXRDb21wb25lbnQiLCJMYWJlbCIsImNvaW4iLCJTcHJpdGUiLCJwcmljZSIsImdvb2QiLCJnb29kc19pdGVtIiwiSXRlbXNQb29sIiwiZ2V0SXRlbSIsImluaXRDb25maWciLCJzZXRQYXJlbnQiLCJzaG93IiwiZGlzY291bnQiLCJkaXNjb3VudF9udW0iLCJhY3RpdmUiLCJkaXNjb3VudF9sYWJlbCIsIlJpY2hUZXh0Iiwic29sZCIsImdyZXkiLCJuZWVkX2ljb24iLCJuZWVkX2xhYmVsIiwibm9kZSIsInNldFNlbGxBbGwiLCJzZXREYXRhIiwicmVnaXN0ZXJFdmVudCIsIm9uIiwiTm9kZSIsIkV2ZW50VHlwZSIsIlRPVUNIX0VORCIsInZpcF9saW1pdF9mbGFnIiwibWVzc2FnZSIsImpzIiwiZm9ybWF0U3RyIiwiVXRpbHMiLCJUSTE4TiIsInJhbmtfbGltaXRfZmxhZyIsImxpbWl0X2dsZXZfc3RhdHVzIiwiY2FsbGJhY2siLCJhZGRHbG9iYWxFdmVudCIsIkJ1eV9TdWNjZXNzX0V2ZW50IiwiaWQiLCJlaWQiLCJuZXh0IiwiZXh0IiwiaGFzX2J1eSIsInZhbCIsInN0cmluZyIsInN0ciIsImxpbWl0X251bSIsImJpbmQiLCJCdXlfT25lX1N1Y2Nlc3MiLCJvcmRlciIsImxpbWl0X2NvdW50Iiwicm9sZV91cGRhdGVfZXZlbnQiLCJFdmVudElkIiwiVVBEQVRFX1JPTEVfQVRUUklCVVRFIiwia2V5IiwidmFsdWUiLCJzaG9wX3R5cGUiLCJwYXlfdHlwZSIsInRlbXAiLCJNYXRoIiwiZmxvb3IiLCJvd24iLCJzaG9wX251bSIsInR5cGUiLCJkZWVwQ29weSIsImNvbmZpZyIsImdldEl0ZW1Db25maWciLCJpdGVtX2JpZCIsIml0ZW1faWQiLCJwYXlfY29uZmlnIiwiYmlkIiwiaXRlbV9udW0iLCJudW0iLCJnZGF0YSIsIml0ZW1fcmVzX3BhdGgiLCJnZXRJdGVtUmVzIiwiaWNvbiIsImxvYWRSZXMiLCJyZXNfb2JqZWN0Iiwic3ByaXRlRnJhbWUiLCJsaW1pdF9yYW5rIiwibGltaXRfdmlwIiwiaXNfc2hvd19saW1pdF9sYWJlbCIsIk1hbGxDb25zdCIsIk1hbGxUeXBlIiwiTGFkZGVyIiwibGFkZGVyX2RhdGEiLCJMYWRkZXJDb250cm9sbGVyIiwiZ2V0TW9kZWwiLCJnZXRMYWRkZXJNeUJhc2VJbmZvIiwiYmVzdF9yYW5rIiwidmlwX2xldiIsImxpbWl0X21vbnRoIiwibGltaXRfd2VlayIsImxpbWl0X2RheSIsImdvbGQiLCJyZWRfZ29sZCIsImxhYmVsIiwiZGlzY291bnRfdHlwZSIsImxhYmxlIiwiaXNTaG93TGV2TGltaXQiLCJsZXYiLCJnbGV2IiwiaXNTaG93R0xldkxpbWl0IiwiZ2V0TmVlZEJpZCIsImlzX3Nob3ciLCJjaGVja0hlcm9DaGlwcyIsInNob3dDaGlwVGFnIiwiYm9vbCIsInN0YXR1cyIsImxpbWl0X2xldl9sYWJlbCIsImFkZENhbGxCYWNrIiwib25TaG93Iiwib25EZWxldGUiLCJ1bmJpbmQiLCJkZWxldGVNZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSUEsY0FBYyxHQUFHQyxP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SUFBTCxDQUFVSixNQUFWLEdBQW1CZ0csSUFBbkI7QUFDQSxTQUFLdEgsUUFBTCxHQUFnQixDQUFDc0gsSUFBakI7QUFDSCxHQTdVbUI7QUErVXBCRCxFQUFBQSxXQUFXLEVBQUUscUJBQVVFLE1BQVYsRUFBa0IsQ0FFOUIsQ0FqVm1CO0FBbVZwQlQsRUFBQUEsY0FBYyxFQUFFLHdCQUFVUyxNQUFWLEVBQWtCUixHQUFsQixFQUF1QjtBQUNuQyxRQUFHLENBQUMsS0FBS1MsZUFBVCxFQUF5QixDQUV4QjtBQUNKLEdBdlZtQjtBQXlWcEJQLEVBQUFBLGVBQWUsRUFBRSx5QkFBVU0sTUFBVixFQUFrQlIsR0FBbEIsRUFBdUIsQ0FFdkMsQ0EzVm1CO0FBNlZwQlUsRUFBQUEsV0FBVyxFQUFDLHFCQUFTeEQsS0FBVCxFQUFlO0FBQ3ZCLFNBQUtwQixRQUFMLEdBQWdCb0IsS0FBaEI7QUFDSCxHQS9WbUI7QUFpV3BCeUQsRUFBQUEsTUFBTSxFQUFFLGtCQUFZLENBRW5CLENBbldtQjtBQXFXcEJDLEVBQUFBLFFBQVEsRUFBRSxvQkFBWTtBQUNsQixRQUFHLEtBQUs5RCxpQkFBUixFQUEwQjtBQUN0QixVQUFHLEtBQUs1RCxPQUFSLEVBQWdCO0FBQ1osYUFBS0EsT0FBTCxDQUFhMkgsTUFBYixDQUFvQixLQUFLL0QsaUJBQXpCO0FBQ0EsYUFBS0EsaUJBQUwsR0FBeUIsSUFBekI7QUFDQSxhQUFLNUQsT0FBTCxHQUFlLElBQWY7QUFDSDtBQUNKOztBQUNELFFBQUcsS0FBS2EsVUFBUixFQUFtQjtBQUNmLFdBQUtBLFVBQUwsQ0FBZ0IrRyxRQUFoQjtBQUNBLFdBQUsvRyxVQUFMLEdBQWtCLElBQWxCO0FBQ0gsS0FYaUIsQ0FZbEI7QUFDQTtBQUNBOztBQUVIO0FBclhtQixDQUFULENBQWY7QUEwWEFnSCxNQUFNLENBQUNDLE9BQVAsR0FBaUI5SSxRQUFqQiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuLy8gQGF1dGhvcjogQHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXHJcbi8vIEBkZXNjcmlwdGlvbjpcclxuLy8gICAgICDnq5bniYjllYbln47liJfooajlrZDpoblcclxuLy8gPGJyLz5DcmVhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG52YXIgTWFsbENvbnRyb2xsZXIgPSByZXF1aXJlKFwibWFsbF9jb250cm9sbGVyXCIpO1xyXG52YXIgTWFsbEV2ZW50ID0gcmVxdWlyZShcIm1hbGxfZXZlbnRcIik7XHJcbnZhciBSb2xlQ29udHJvbGxlciA9IHJlcXVpcmUoXCJyb2xlX2NvbnRyb2xsZXJcIik7XHJcblxyXG52YXIgTWFsbEl0ZW0gPSBjYy5DbGFzcyh7XHJcbiAgICBleHRlbmRzOiBCYXNlUGFuZWwsXHJcblxyXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMucHJlZmFiUGF0aCA9IFBhdGhUb29sLmdldFByZWZhYlBhdGgoXCJtYWxsXCIsIFwibWFsbF9pdGVtXCIpO1xyXG4gICAgICAgIHRoaXMuY3RybCA9IE1hbGxDb250cm9sbGVyLmdldEluc3RhbmNlKCk7XHJcbiAgICAgICAgdGhpcy5zaXplID0gY2Muc2l6ZSgzMDYsIDE0Myk7XHJcbiAgICAgICAgdGhpcy53aWR0aCA9IDMwNjtcclxuICAgICAgICB0aGlzLmhlaWdodCA9IDE0MztcclxuICAgICAgICB0aGlzLnZvID0gbnVsbDtcclxuICAgICAgICB0aGlzLmRhdGEgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaXNfdG91Y2ggPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucm9sZV92byA9IFJvbGVDb250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0Um9sZVZvKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGluaXRQYW5lbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMubWFpbl9jb250YWluZXIgPSB0aGlzLnJvb3Rfd25kLmdldENoaWxkQnlOYW1lKFwibWFpbl9jb250YWluZXJcIik7XHJcblxyXG4gICAgICAgIHRoaXMubmFtZSA9IHRoaXMubWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJuYW1lXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XHJcbiAgICAgICAgdGhpcy5jb2luID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImNvdW50X2JnXCIpLmdldENoaWxkQnlOYW1lKFwiY29pblwiKS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKTtcclxuICAgICAgICB0aGlzLnByaWNlID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImNvdW50X2JnXCIpLmdldENoaWxkQnlOYW1lKFwicHJpY2VcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKTtcclxuXHJcbiAgICAgICAgdGhpcy5nb29kID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImdvb2RcIik7XHJcbiAgICAgICAgdGhpcy5nb29kc19pdGVtID0gSXRlbXNQb29sLmdldEluc3RhbmNlKCkuZ2V0SXRlbShcImJhY2twYWNrX2l0ZW1cIik7XHJcbiAgICAgICAgdGhpcy5nb29kc19pdGVtLmluaXRDb25maWcoZmFsc2UsIDEsIGZhbHNlLCB0cnVlKVxyXG4gICAgICAgIC8vIHRoaXMuZ29vZHNfaXRlbS5zZXRQb3NpdGlvbigxMCArIEJhY2tQYWNrSXRlbS5XaWR0aCAvIDIsIHRoaXMucm9vdF93bmQuZ2V0Q29udGVudFNpemUoKS5oZWlnaHQgLyAyKVxyXG4gICAgICAgIHRoaXMuZ29vZHNfaXRlbS5zZXRQYXJlbnQodGhpcy5nb29kKTtcclxuICAgICAgICB0aGlzLmdvb2RzX2l0ZW0uc2hvdygpO1xyXG5cclxuICAgICAgICB0aGlzLmRpc2NvdW50ID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImRpc2NvdW50XCIpO1xyXG4gICAgICAgIHRoaXMuZGlzY291bnRfbnVtID0gdGhpcy5kaXNjb3VudC5nZXRDaGlsZEJ5TmFtZShcImRpc2NvdW50X251bVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xyXG4gICAgICAgIHRoaXMuZGlzY291bnQuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5kaXNjb3VudF9sYWJlbCA9IHRoaXMubWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJkaXNjb3VudF9sYWJlbFwiKS5nZXRDb21wb25lbnQoY2MuUmljaFRleHQpO1xyXG5cclxuICAgICAgICB0aGlzLnNvbGQgPSB0aGlzLm1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwic29sZFwiKTtcclxuICAgICAgICB0aGlzLnNvbGQuYWN0aXZlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuZ3JleSA9IHRoaXMubWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJncmV5XCIpO1xyXG4gICAgICAgIHRoaXMuZ3JleS5hY3RpdmUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5uZWVkX2ljb24gPSB0aGlzLm1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwibmVlZF9pY29uXCIpO1xyXG4gICAgICAgIHRoaXMubmVlZF9sYWJlbCA9IHRoaXMubWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJuZWVkX2xhYmVsXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XHJcbiAgICAgICAgdGhpcy5uZWVkX2ljb24uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5uZWVkX2xhYmVsLm5vZGUuYWN0aXZlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U2VsbEFsbChmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5zZXREYXRhKHRoaXMuZGF0YSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHJlZ2lzdGVyRXZlbnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLm1haW5fY29udGFpbmVyLm9uKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX0VORCxmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNfdG91Y2gpXHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgaWYodGhpcy52aXBfbGltaXRfZmxhZyA+IDApe1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZShjYy5qcy5mb3JtYXRTdHIoVXRpbHMuVEkxOE4oXCJWSVAlc+S7peS4iuWPr+i0reS5sFwiKSx0aGlzLnZpcF9saW1pdF9mbGFnKSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5yYW5rX2xpbWl0X2ZsYWcpe1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZShVdGlscy5USTE4TihcIuacqua7oei2s+i0reS5sOadoeS7tlwiKSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5saW1pdF9nbGV2X3N0YXR1cyl7XHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlKFV0aWxzLlRJMThOKFwi6K+l5ZWG5ZOB5pqC5pyq6L6+6Kej6ZSB5p2h5Lu25ZOm77yM6K+35Yqq5Yqb5o+Q6auY5YWs5Lya562J57qnXCIpKTtcclxuICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFjayh0aGlzLmRhdGEpO1xyXG4gICAgICAgIH0sdGhpcylcclxuXHJcbiAgICAgICAgLy/pmaTnpZ7np5jllYbln47ku6XlpJbnmoTotK3kubDmiJDlip9cclxuICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KE1hbGxFdmVudC5CdXlfU3VjY2Vzc19FdmVudCwgZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5pZCAmJiBkYXRhLmVpZCA9PSB0aGlzLmRhdGEuaWQgJiYgVXRpbHMubmV4dChkYXRhLmV4dCB8fCB7fSkgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmhhc19idXkgPSBkYXRhLmV4dFswXS52YWw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc2NvdW50X2xhYmVsLnN0cmluZyA9IGNjLmpzLmZvcm1hdFN0cihVdGlscy5USTE4TihcIjxjb2xvcj0jNDUyNTA1PiVzIDxjb2xvcj0jMjg5YjE0PiVzLyVzPC9jb2xvcj7kuKo8L2NvbG9yPlwiKSwgdGhpcy5zdHIsIHRoaXMuZGF0YS5oYXNfYnV5LHRoaXMuZGF0YS5saW1pdF9udW0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5oYXNfYnV5ID09IHRoaXMuZGF0YS5saW1pdF9udW0pXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTZWxsQWxsKHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxyXG5cclxuICAgICAgICAvL+elnuenmC/npZ7moLzllYbln47otK3kubDmiJDlip9cclxuICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KE1hbGxFdmVudC5CdXlfT25lX1N1Y2Nlc3MsIGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGEub3JkZXIgJiYgZGF0YS5vcmRlciA9PSB0aGlzLmRhdGEub3JkZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5oYXNfYnV5ID0gdGhpcy5kYXRhLmhhc19idXkrMTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzY291bnRfbGFiZWwuc3RyaW5nID0gY2MuanMuZm9ybWF0U3RyKFV0aWxzLlRJMThOKFwiPGNvbG9yPSM0NTI1MDU+JXMgPGNvbG9yPSMyODliMTQ+JXMvJXM8L2NvbG9yPuS4qjwvY29sb3I+XCIpLCB0aGlzLnN0ciwgdGhpcy5kYXRhLmhhc19idXksIHRoaXMuZGF0YS5saW1pdF9udW0pO1xyXG4gICAgICAgICAgICAgICAgdmFyIGxpbWl0X251bSA9IHRoaXMuZGF0YS5saW1pdF9jb3VudCB8fCB0aGlzLmRhdGEubGltaXRfbnVtO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxpbWl0X251bSAhPSBudWxsIHx8IHRoaXMuZGF0YS5oYXNfYnV5ID49IHRoaXMuZGF0YS5saW1pdF9udW0pXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTZWxsQWxsKHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxyXG5cclxuICAgICAgICBpZiAodGhpcy5yb2xlX3ZvKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJvbGVfdXBkYXRlX2V2ZW50ID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucm9sZV91cGRhdGVfZXZlbnQgPSB0aGlzLnJvbGVfdm8uYmluZChFdmVudElkLlVQREFURV9ST0xFX0FUVFJJQlVURSxmdW5jdGlvbihrZXksdmFsdWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGtleSA9PSBcImdvbGRcInx8a2V5ID09IFwicmVkX2dvbGRcIiB8fCBrZXkgPT0gXCJoZXJvX3NvdWxcIiB8fCBrZXkgPT0gXCJhcmVuYV9jZW50XCIgfHwga2V5ID09IFwiZnJpZW5kX3BvaW50XCIgfHwga2V5ID09IFwiZ3VpbGRcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZGF0YVtcImxpbWl0X2RheVwiXSA9PSAwICYmIHRoaXMuZGF0YVtcImxpbWl0X21vbnRoXCJdID09IDAgJiYgdGhpcy5kYXRhW1wibGltaXRfd2Vla1wiXSA9PSAwICYmIHRoaXMuZGF0YVtcImxpbWl0X2NvdW50XCJdID09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL+S4jemZkOi0reeahOmdnuelnuenmOelnuagvOWVhuW6l+eJqeWTgVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5kYXRhLnNob3BfdHlwZSAhPSA0ICYmIHRoaXMuZGF0YS5zaG9wX3R5cGUgIT0gMil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5wYXlfdHlwZSAhPSBcInJlZF9nb2xkX29yX2dvbGRcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMucm9sZV92b1t0aGlzLnBheV90eXBlXSAmJiB0aGlzLnJvbGVfdm9bdGhpcy5wYXlfdHlwZV0gPCgyMCp0aGlzLmRhdGEucHJpY2UpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wID0gTWF0aC5mbG9vcih0aGlzLnJvbGVfdm9bdGhpcy5wYXlfdHlwZV0vdGhpcy5kYXRhLnByaWNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRlbXAgPj0gMSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhLmxpbWl0X251bSA9IHRlbXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEubGltaXRfbnVtID0gMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5saW1pdF9udW0gPSAyMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3duID0gdGhpcy5yb2xlX3ZvW1wiZ29sZFwiXSArIHRoaXMucm9sZV92b1tcInJlZF9nb2xkXCJdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihvd24gJiYgb3duIDwoMjAqdGhpcy5kYXRhLnByaWNlKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IE1hdGguZmxvb3Iob3duL3RoaXMuZGF0YS5wcmljZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0ZW1wID49IDEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5saW1pdF9udW0gPSB0ZW1wO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhLmxpbWl0X251bSA9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhLmxpbWl0X251bSA9IDIwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT0gXCJ2aXBfbGV2XCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzLnZpcF9saW1pdF9mbGFnID4gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERhdGEodGhpcy5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sdGhpcylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgc2V0RGF0YTogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgICAgIGlmICh0aGlzLnJvb3Rfd25kID09IG51bGwpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIC8vIHJldHVyblxyXG4gICAgICAgIHZhciBzaG9wX251bSA9IG51bGw7IC8v5ZWG5ZOB57G75Z6LXHJcbiAgICAgICAgaWYgKGRhdGEuc2hvcF90eXBlICE9IG51bGwpXHJcbiAgICAgICAgICAgIHNob3BfbnVtID0gZGF0YS5zaG9wX3R5cGU7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBzaG9wX251bSA9IGRhdGEudHlwZTtcclxuXHJcbiAgICAgICAgdGhpcy5kYXRhID0gVXRpbHMuZGVlcENvcHkoZGF0YSk7XHJcbiAgICAgICAgdmFyIGNvbmZpZyA9IFV0aWxzLmdldEl0ZW1Db25maWcoZGF0YS5pdGVtX2JpZCB8fCBkYXRhLml0ZW1faWQpO1xyXG4gICAgICAgIGNvbmZpZyA9IFV0aWxzLmRlZXBDb3B5KGNvbmZpZylcclxuICAgICAgICB2YXIgcGF5X2NvbmZpZywgcGF5X3R5cGU7XHJcbiAgICAgICAgY29uZmlnLmJpZCA9IGRhdGEuaXRlbV9iaWQgfHwgZGF0YS5pdGVtX2lkO1xyXG4gICAgICAgIGlmIChjb25maWcpIHtcclxuICAgICAgICAgICAgaWYgKGRhdGEuaXRlbV9udW0gJiYgZGF0YS5pdGVtX251bSAhPSAxKXtcclxuICAgICAgICAgICAgICAgIGNvbmZpZy5udW0gPSBkYXRhLml0ZW1fbnVtO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZ29vZHNfaXRlbS5zZXREYXRhKGNvbmZpZyk7XHJcbiAgICAgICAgICAgIHRoaXMubmFtZS5zdHJpbmcgPSBjb25maWcubmFtZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gdGhpcy5nb29kc19pdGVtLnNldERlZmF1bHRUaXBzKCk7XHJcbiAgICAgICAgaWYodHlwZW9mKGRhdGEucGF5X3R5cGUpPT1cIm51bWJlclwiKXtcclxuICAgICAgICAgICAgcGF5X2NvbmZpZyA9IFV0aWxzLmdldEl0ZW1Db25maWcoZGF0YS5wYXlfdHlwZSk7XHJcbiAgICAgICAgICAgIHBheV90eXBlID0gZ2RhdGEoXCJpdGVtX2RhdGFcIixcImRhdGFfYXNzZXRzX2lkMmxhYmVsXCIsW2RhdGEucGF5X3R5cGVdKTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgcGF5X2NvbmZpZyA9IFV0aWxzLmdldEl0ZW1Db25maWcoZ2RhdGEoXCJpdGVtX2RhdGFcIixcImRhdGFfYXNzZXRzX2xhYmVsMmlkXCIsW2RhdGEucGF5X3R5cGVdKSk7XHJcbiAgICAgICAgICAgIHBheV90eXBlID0gZGF0YS5wYXlfdHlwZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wYXlfdHlwZSA9IHBheV90eXBlO1xyXG4gICAgICAgIHRoaXMucHJpY2Uuc3RyaW5nID0gZGF0YS5wcmljZTtcclxuICAgICAgICB2YXIgaXRlbV9yZXNfcGF0aCA9IFBhdGhUb29sLmdldEl0ZW1SZXMocGF5X2NvbmZpZy5pY29uKVxyXG4gICAgICAgIGlmIChpdGVtX3Jlc19wYXRoKXtcclxuICAgICAgICAgICAgdGhpcy5sb2FkUmVzKGl0ZW1fcmVzX3BhdGgsIGZ1bmN0aW9uIChyZXNfb2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvaW4uc3ByaXRlRnJhbWUgPSByZXNfb2JqZWN0O1xyXG4gICAgICAgICAgICB9LmJpbmQodGhpcykpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvL+mZkOi0rVxyXG4gICAgICAgIHRoaXMuc3RyID0gXCJcIjtcclxuICAgICAgICB2YXIgbGltaXRfbnVtID0gMDtcclxuICAgICAgICB2YXIgbGltaXRfcmFuayA9IDA7XHJcbiAgICAgICAgdmFyIGxpbWl0X3ZpcCA9IDA7XHJcbiAgICAgICAgdmFyIGlzX3Nob3dfbGltaXRfbGFiZWwgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy/lpKnmoq/mjpLlkI3pmZDotK1cclxuICAgICAgICB0aGlzLnJhbmtfbGltaXRfZmxhZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChkYXRhLmxpbWl0X3JhbmsgJiYgZGF0YS5saW1pdF9yYW5rID4gMCkge1xyXG4gICAgICAgICAgICBpZiAoc2hvcF9udW0gPT0gTWFsbENvbnN0Lk1hbGxUeXBlLkxhZGRlcikge1xyXG4gICAgICAgICAgICAgICAgdmFyIGxhZGRlcl9kYXRhID0gTGFkZGVyQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldE1vZGVsKCkuZ2V0TGFkZGVyTXlCYXNlSW5mbygpO1xyXG4gICAgICAgICAgICAgICAgaWYobGFkZGVyX2RhdGEgJiYgbGFkZGVyX2RhdGEuYmVzdF9yYW5rID09IDAgfHwgbGFkZGVyX2RhdGEuYmVzdF9yYW5rID4gZGF0YS5saW1pdF9yYW5rKXtcclxuICAgICAgICAgICAgICAgICAgICBsaW1pdF9yYW5rID0gZGF0YS5saW1pdF9yYW5rO1xyXG4gICAgICAgICAgICAgICAgICAgIGlzX3Nob3dfbGltaXRfbGFiZWwgPSB0cnVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdmlw562J57qn6ZmQ6LStXHJcbiAgICAgICAgdGhpcy52aXBfbGltaXRfZmxhZyA9IDA7XHJcbiAgICAgICAgaWYgKGRhdGEubGltaXRfdmlwICYmIGRhdGEubGltaXRfdmlwID4gMCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yb2xlX3ZvICYmIHRoaXMucm9sZV92by52aXBfbGV2IDwgZGF0YS5saW1pdF92aXApIHtcclxuICAgICAgICAgICAgICAgIGlzX3Nob3dfbGltaXRfbGFiZWwgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgbGltaXRfdmlwID0gZGF0YS5saW1pdF92aXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpc19zaG93X2xpbWl0X2xhYmVsID09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhLmxpbWl0X2NvdW50ICE9IG51bGwgJiYgZGF0YS5saW1pdF9jb3VudCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RyID0gXCLpmZDotK1cIjtcclxuICAgICAgICAgICAgICAgIGxpbWl0X251bSA9IGRhdGEubGltaXRfY291bnQ7XHJcbiAgICAgICAgICAgICAgICBpc19zaG93X2xpbWl0X2xhYmVsID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLmxpbWl0X21vbnRoICE9IG51bGwgJiYgZGF0YS5saW1pdF9tb250aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RyID0gXCLmr4/mnIjpmZDotK1cIjtcclxuICAgICAgICAgICAgICAgIGxpbWl0X251bSA9IGRhdGEubGltaXRfbW9udGg7XHJcbiAgICAgICAgICAgICAgICBpc19zaG93X2xpbWl0X2xhYmVsID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLmxpbWl0X3dlZWsgIT0gbnVsbCAmJiBkYXRhLmxpbWl0X3dlZWsgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0ciA9IFwi5q+P5ZGo6ZmQ6LStXCI7XHJcbiAgICAgICAgICAgICAgICBsaW1pdF9udW0gPSBkYXRhLmxpbWl0X3dlZWs7XHJcbiAgICAgICAgICAgICAgICBpc19zaG93X2xpbWl0X2xhYmVsID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLmxpbWl0X2RheSAhPSBudWxsICYmIGRhdGEubGltaXRfZGF5ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdHIgPSBcIuavj+aXpemZkOi0rVwiO1xyXG4gICAgICAgICAgICAgICAgbGltaXRfbnVtID0gZGF0YS5saW1pdF9kYXk7XHJcbiAgICAgICAgICAgICAgICBpc19zaG93X2xpbWl0X2xhYmVsID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnNob3BfdHlwZSA9PSA0IHx8IGRhdGEuc2hvcF90eXBlID09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICBsaW1pdF9udW0gPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGlzX3Nob3dfbGltaXRfbGFiZWwgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGF5X3R5cGUgIT0gXCJyZWRfZ29sZF9vcl9nb2xkXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucm9sZV92b1twYXlfdHlwZV0gJiYgdGhpcy5yb2xlX3ZvW3BheV90eXBlXSA8ICgyMCAqIGRhdGEucHJpY2UpKSB7IC8v5Y+W6LWE5Lqn5pyA5aSn5Y+v5LmwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IE1hdGguZmxvb3IodGhpcy5yb2xlX3ZvW3BheV90eXBlXSAvIGRhdGEucHJpY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXAgPj0gMSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdF9udW0gPSB0ZW1wO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0X251bSA9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdF9udW0gPSAyMDsgLy/ml6DpmZDliLbotK3kubDnmoTnianlk4Eg5LiA5qyh6LSt5Lmw5LiK6ZmQMjBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX3Nob3dfbGltaXRfbGFiZWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvd24gPSB0aGlzLnJvbGVfdm8uZ29sZCArIHRoaXMucm9sZV92by5yZWRfZ29sZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG93biAhPSBudWxsICYmIG93biA8ICgyMCAqIGRhdGEucHJpY2UpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IE1hdGguZmxvb3Iob3duIC8gZGF0YS5wcmljZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wID49IDEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXRfbnVtID0gdGVtcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdF9udW0gPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXRfbnVtID0gMjA7IC8v5peg6ZmQ5Yi26LSt5Lmw55qE54mp5ZOBIOS4gOasoei0reS5sOS4iumZkDIwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19zaG93X2xpbWl0X2xhYmVsID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChsaW1pdF92aXAgPiAwICYmIGlzX3Nob3dfbGltaXRfbGFiZWwpIHtcclxuICAgICAgICAgICAgdGhpcy5kaXNjb3VudF9sYWJlbC5ub2RlLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzY291bnRfbGFiZWwuc3RyaW5nID0gY2MuanMuZm9ybWF0U3RyKFV0aWxzLlRJMThOKFwiPGNvbG9yPSM0NTI1MDU+PGNvbG9yPSMyODliMTQ+ICAgICAgVklQJWQ8L2NvbG9yPuS4k+WxnjwvY29sb3I+XCIpLCBsaW1pdF92aXApXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsbEFsbChmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMudmlwX2xpbWl0X2ZsYWcgPSBsaW1pdF92aXA7XHJcbiAgICAgICAgfSBlbHNlIGlmIChsaW1pdF9udW0gPiAwICYmIGlzX3Nob3dfbGltaXRfbGFiZWwpIHtcclxuICAgICAgICAgICAgdGhpcy5kaXNjb3VudF9sYWJlbC5ub2RlLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzY291bnRfbGFiZWwuc3RyaW5nID0gY2MuanMuZm9ybWF0U3RyKFV0aWxzLlRJMThOKFwiPGNvbG9yPSM0NTI1MDU+JXMgPGNvbG9yPSMyODliMTQ+JXMvJXM8L2NvbG9yPuS4qjwvY29sb3I+XCIpLCB0aGlzLnN0ciwgZGF0YS5oYXNfYnV5LCBsaW1pdF9udW0pO1xyXG4gICAgICAgICAgICBpZiAoZGF0YS5oYXNfYnV5ID09IGxpbWl0X251bSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U2VsbEFsbCh0cnVlKVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFNlbGxBbGwoZmFsc2UpXHJcbiAgICAgICAgfSBlbHNlIGlmIChsaW1pdF9yYW5rID4gMCAmJiBpc19zaG93X2xpbWl0X2xhYmVsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzY291bnRfbGFiZWwubm9kZS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmRpc2NvdW50X2xhYmVsLnN0cmluZyA9IGNjLmpzLmZvcm1hdFN0cihVdGlscy5USTE4TihcIjxjb2xvcj0jNDUyNTA1Pjxjb2xvcj0jZmYxZjBlPumcgOi+vuWIsCVz5ZCNPC9jb2xvcj48L2NvbG9yPlwiKSwgbGltaXRfcmFuayk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsbEFsbChmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMucmFua19saW1pdF9mbGFnID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRpc2NvdW50X2xhYmVsLm5vZGUuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmIChkYXRhLmhhc19idXkgPT0gMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U2VsbEFsbCh0cnVlKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTZWxsQWxsKGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YS5saW1pdF9udW0gPSBsaW1pdF9udW07XHJcbiAgICAgICAgdGhpcy5kYXRhLmlzX3Nob3dfbGltaXRfbGFiZWwgPSBpc19zaG93X2xpbWl0X2xhYmVsO1xyXG5cclxuICAgICAgICAvL+aKmOaJo+agh+etvuWSjOaKmOaJo+S7t+agvFxyXG4gICAgICAgIGlmIChkYXRhLmxhYmVsICE9IG51bGwgJiYgZGF0YS5sYWJlbCA+IDApIHsgIC8v6KGo6YeM55qEXHJcbiAgICAgICAgICAgIHRoaXMuZGlzY291bnQuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5kaXNjb3VudF9udW0uc3RyaW5nID0gZGF0YS5sYWJlbCArIFV0aWxzLlRJMThOKFwi5oqYXCIpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS5kaXNjb3VudF90eXBlICE9IG51bGwgJiYgZGF0YS5kaXNjb3VudF90eXBlID4gMCkgeyAvL+acjeWKoeWZqOS/oeaBr1xyXG4gICAgICAgICAgICB0aGlzLmRpc2NvdW50LmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzY291bnRfbnVtLnN0cmluZyA9IGRhdGEuZGlzY291bnRfdHlwZSArIFV0aWxzLlRJMThOKFwi5oqYXCIpO1xyXG4gICAgICAgIH0gZWxzZSBpZihkYXRhLmxhYmxlICE9IG51bGwgJiYgZGF0YS5sYWJsZT4gMCl7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzY291bnQuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5kaXNjb3VudF9udW0uc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLotoXlgLxcIik7XHJcbiAgICAgICAgfWVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRpc2NvdW50LmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGRhdGEuZGlzY291bnQgIT0gbnVsbCAmJiBkYXRhLmRpc2NvdW50ID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnByaWNlLnN0cmluZyA9IGRhdGEuZGlzY291bnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5kYXRhLnR5cGUgPT0gMTAgfHwgdGhpcy5kYXRhLnR5cGUgPT0gMTEgfHwgdGhpcy5kYXRhLnR5cGUgPT0gMTIgfHwgdGhpcy5kYXRhLnR5cGUgPT0gMTMpIHsvL+ijheWkh+eJueauiuWkhOeQhuaYvuekuuetiee6p+aYvuekulxyXG4gICAgICAgICAgICB0aGlzLmlzU2hvd0xldkxpbWl0KHRydWUsIHRoaXMuZGF0YS5sZXYpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNTaG93TGV2TGltaXQoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YS50eXBlID09IDUgJiYgdGhpcy5kYXRhLmdsZXYgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmlzU2hvd0dMZXZMaW1pdCh0cnVlLCB0aGlzLmRhdGEuZ2xldik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pc1Nob3dHTGV2TGltaXQoZmFsc2UsIDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGJpZCA9IHRoaXMuY3RybC5nZXROZWVkQmlkKCk7XHJcbiAgICAgICAgaWYgKGJpZCAhPSBudWxsICYmIChiaWQgPT0gZGF0YS5pdGVtX2lkIHx8IGJpZCA9PSBkYXRhLml0ZW1fYmlkKSkge1xyXG4gICAgICAgICAgICB0aGlzLm5lZWRfaWNvbi5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm5lZWRfbGFiZWwubm9kZS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubmVlZF9pY29uLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm5lZWRfbGFiZWwubm9kZS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRhdGEudHlwZSA9PSAzKSB7XHJcbiAgICAgICAgICAgIHZhciBpc19zaG93ID0gdGhpcy5jdHJsLmdldE1vZGVsKCkuY2hlY2tIZXJvQ2hpcHMoZGF0YS5pdGVtX2lkKTtcclxuICAgICAgICAgICAgdGhpcy5zaG93Q2hpcFRhZyhpc19zaG93KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dDaGlwVGFnKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHNldFNlbGxBbGw6IGZ1bmN0aW9uIChib29sKSB7XHJcbiAgICAgICAgaWYodGhpcy5yb290X3duZD09bnVsbClyZXR1cm5cclxuICAgICAgICB0aGlzLnNvbGQuYWN0aXZlID0gYm9vbDtcclxuICAgICAgICB0aGlzLmdyZXkuYWN0aXZlID0gYm9vbDtcclxuICAgICAgICB0aGlzLmlzX3RvdWNoID0gIWJvb2w7XHJcbiAgICB9LFxyXG5cclxuICAgIHNob3dDaGlwVGFnOiBmdW5jdGlvbiAoc3RhdHVzKSB7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBpc1Nob3dMZXZMaW1pdDogZnVuY3Rpb24gKHN0YXR1cywgbGV2KSB7XHJcbiAgICAgICAgaWYoIXRoaXMubGltaXRfbGV2X2xhYmVsKXtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBpc1Nob3dHTGV2TGltaXQ6IGZ1bmN0aW9uIChzdGF0dXMsIGxldikge1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgYWRkQ2FsbEJhY2s6ZnVuY3Rpb24odmFsdWUpe1xyXG4gICAgICAgIHRoaXMuY2FsbGJhY2sgPSB2YWx1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgb25TaG93OiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBvbkRlbGV0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmKHRoaXMucm9sZV91cGRhdGVfZXZlbnQpe1xyXG4gICAgICAgICAgICBpZih0aGlzLnJvbGVfdm8pe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb2xlX3ZvLnVuYmluZCh0aGlzLnJvbGVfdXBkYXRlX2V2ZW50KTtcclxuICAgICAgICAgICAgICAgIHRoaXMucm9sZV91cGRhdGVfZXZlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb2xlX3ZvID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLmdvb2RzX2l0ZW0pe1xyXG4gICAgICAgICAgICB0aGlzLmdvb2RzX2l0ZW0uZGVsZXRlTWUoKTtcclxuICAgICAgICAgICAgdGhpcy5nb29kc19pdGVtID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaWYodGhpcy5tYWluX2NvbnRhaW5lcil7XHJcbiAgICAgICAgLy8gICAgIHRoaXMubWFpbl9jb250YWluZXIub2ZmKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX0VORCxmdW5jdGlvbigpe30sdGhpcylcclxuICAgICAgICAvLyB9XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBNYWxsSXRlbTsiXX0=