(function() {
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
var __module = nodeEnv ? module : {exports:{}};
var __filename = 'preview-scripts/assets/Scripts/mod/vip/view/vip_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, '3ba6fK/WPlDb7Cx2tWlpg+g', 'vip_panel');
// Scripts/mod/vip/view/vip_panel.js
"use strict";
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
// 这里是描述这个窗体的作用的
//
Create: 2019-02-27 21:36:38
// --------------------------------------------------------------------
var PathTool = require("pathtool");
var VipController = require("vip_controller");
var RoleController = require("role_controller");
var VipEvent = require("vip_event");
var CommonScrollView = require("common_scrollview");
var VipLabelItemPanel = require("vip_label_item_panel");
var VipPanel = cc.Class({
"extends": BasePanel,
ctor: function ctor() {
this.prefabPath = PathTool.getPrefabPath("vip", "vip_panel");
},
// 可以初始化声明一些变量的
initConfig: function initConfig() {
this.ctrl = VipController.getInstance();
this.model = this.ctrl.getModel();
this.role_vo = RoleController.getInstance().getRoleVo();
this.item_list = {};
this.desc_list = {};
},
// 初始化一些配置数据,可以用于声明一些变量之类的
initPanel: function initPanel() {
this.main_container_nd = this.seekChild("main_container");
this.chargeCon_nd = this.seekChild(this.main_container_nd, "chargeCon");
this.goods_scroll_nd = this.seekChild(this.chargeCon_nd, "goods_scroll");
this.giftCon_nd = this.seekChild(this.chargeCon_nd, "giftCon");
this.buy_btn_nd = this.seekChild(this.chargeCon_nd, "buy_btn");
this.buy_btn_nd.active = true;
this.buy_complete_nd = this.seekChild(this.chargeCon_nd, "buy_complete");
this.buy_complete_nd.active = false;
this.buy_btn_lb = this.seekChild(this.buy_btn_nd, "buy_btn_label", cc.Label);
this.buy_btn_sp = this.seekChild(this.buy_btn_nd, "buy_price", cc.Sprite);
this.buy_red_nd = this.seekChild(this.buy_btn_nd, "red");
this.buy_red_nd.active = false;
this.title_lb = this.seekChild(this.chargeCon_nd, "title", cc.Label);
this.old_price_rt = this.seekChild(this.chargeCon_nd, "old_price", cc.RichText);
this.buy_price_sp = this.seekChild(this.buy_btn_nd, "buy_price", cc.Sprite);
this.sprite_1_nd = this.seekChild(this.main_container_nd, "Sprite_1");
this.sprite_1_sp = this.seekChild(this.main_container_nd, "Sprite_1", cc.Sprite);
this.loadRes(PathTool.getUIIconPath("vip", "vipbg5"), function (res) {
this.sprite_1_sp.spriteFrame = res;
}.bind(this)); //月卡领取
this.supre_good_con_nd = this.seekChild(this.sprite_1_nd, "good_con");
var tab_size = this.supre_good_con_nd.getContentSize();
var setting = {
item_class: "backpack_item",
// 单元类
start_x: 0,
// 第一个单元的X起点
space_x: 0,
// x方向的间隔
start_y: 0,
// 第一个单元的Y起点
space_y: 0,
// y方向的间隔
item_width: BackPackItem.Width * 0.6,
// 单元的尺寸width
item_height: BackPackItem.Height * 0.6,
// 单元的尺寸height
row: 1,
// 行数,作用于水平滚动类型
col: 0,
// 列数,作用于垂直滚动类型
// need_dynamic: true
scale: 0.6
};
this.item_scrollview = new CommonScrollView();
this.item_scrollview.createScroll(this.supre_good_con_nd, cc.v2(0, 0), ScrollViewDir.horizontal, ScrollViewStartPos.top, tab_size, setting, cc.v2(0.5, 0.5));
var tab_size = this.goods_scroll_nd.getContentSize();
var setting = {
item_class: "backpack_item",
// 单元类
start_x: 0,
// 第一个单元的X起点
space_x: 0,
// x方向的间隔
start_y: 0,
// 第一个单元的Y起点
space_y: 10,
// y方向的间隔
item_width: BackPackItem.Width * 0.65,
// 单元的尺寸width
item_height: BackPackItem.Height * 0.8,
// 单元的尺寸height
row: 1,
// 行数,作用于水平滚动类型
col: 0,
// 列数,作用于垂直滚动类型
// need_dynamic: true
scale: 0.65
};
this.reward_scrollview = new CommonScrollView();
this.reward_scrollview.createScroll(this.goods_scroll_nd, cc.v2(0, 0), ScrollViewDir.horizontal, ScrollViewStartPos.top, tab_size, setting, cc.v2(0.5, 0.5));
var tab_size = this.giftCon_nd.getContentSize();
var setting = {
item_class: VipLabelItemPanel,
// 单元类
start_x: 0,
// 第一个单元的X起点
space_x: 0,
// x方向的间隔
start_y: 0,
// 第一个单元的Y起点
space_y: 0,
// y方向的间隔
item_width: 400,
// 单元的尺寸width
item_height: 30,
// 单元的尺寸height
row: 1,
// 行数,作用于水平滚动类型
col: 1,
// 列数,作用于垂直滚动类型
need_dynamic: true
};
this.info_scroll = new CommonScrollView();
this.info_scroll.createScroll(this.giftCon_nd, cc.v2(0, 0), ScrollViewDir.vertical, ScrollViewStartPos.top, tab_size, setting, cc.v2(0.5, 0.5));
this.supre_card_get_nd = this.seekChild(this.sprite_1_nd, "btn_get");
this.supre_card_get_btn = this.seekChild(this.sprite_1_nd, "btn_get", cc.Button);
this.supre_card_get_nd.active = false;
this.supre_card_get_lb = this.seekChild(this.supre_card_get_nd, "Text_3_0", cc.Label);
this.supre_card_get_lb.string = "领取";
this.supre_card_get_red_nd = this.seekChild(this.supre_card_get_nd, "red_point");
this.supre_card_get_red_nd.active = false;
this.des_labellist = {};
this.red_line_nd = this.seekChild(this.old_price_rt.node, "red_line");
this.desc_rt = this.seekChild(this.main_container_nd, "desc_label", cc.RichText);
if (this.role_vo.vip_lev > Config.vip_data.data_get_reward_length - 1) {
this.setData(Config.vip_data.data_get_reward_length - 1);
} else {
this.setData(this.role_vo.vip_lev);
}
},
// 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
registerEvent: function registerEvent() {
this.buy_btn_nd.on(cc.Node.EventType.TOUCH_END, function () {
var role_vip = this.role_vo.vip_lev;
var is_vip = this.role_vo.is_vip;
if (role_vip == 0 && is_vip == 1) {
if (this.config.lev == 0) {
this.ctrl.sender16711(this.index);
} else {
var str = cc.js.formatStr('未达到VIP%s', this.config.lev);
message(str);
}
} else {
//如果是vip先判断等级足够不
if (this.config) {
if (this.config.lev > role_vip) {
var str = cc.js.formatStr("未达到VIP%s", this.config.lev);
message(str);
} else {
this.ctrl.sender16711(this.index);
}
}
}
}, this);
this.addGlobalEvent(VipEvent.UPDATE_GET_LIST, function () {
var get_list = this.model.getGetGiftList();
if (get_list[this.index] != null) {
this.buy_price_sp.node.active = false;
this.buy_btn_nd.active = false;
this.buy_complete_nd.active = true;
} else {
this.buy_price_sp.node.active = true;
this.buy_btn_nd.active = true;
this.buy_complete_nd.active = false;
}
this.updateRed();
}, 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) {
this.timer = gcore.Timer.set(function () {
if (key == "vip_lev") this.updateRed();
}.bind(this), Math.random() * 1000, 1);
}, this);
}
}
this.addGlobalEvent(VipEvent.SUPRE_CARD_GET, function (status) {
this.supre_card_get_nd.active = true;
if (status == 1) {
// this.supre_card_get_btn.interactable = true;
Utils.setGreyButton(this.supre_card_get_btn, false);
this.supre_card_get_lb.string = "领取";
this.supre_card_get_lb.node.color = new cc.Color(113, 40, 4);
this.supre_card_get_red_nd.active = true;
} else {
this.supre_card_get_red_nd.active = false;
if (status == 0) {
Utils.setGreyButton(this.supre_card_get_btn);
this.supre_card_get_btn.interactable = true;
this.supre_card_get_lb.string = "待激活";
this.supre_card_get_lb.node.color = new cc.Color(113, 40, 4);
} else {
// this.supre_card_get_btn.interactable = false;
Utils.setGreyButton(this.supre_card_get_btn);
this.supre_card_get_lb.string = "已领取";
this.supre_card_get_lb.node.color = new cc.Color(255, 255, 255);
}
}
}, this);
this.supre_card_get_nd.on("click", function () {
this.ctrl.sender16708();
}, this);
this.ctrl.sender16707();
this.ctrl.sender16710();
this.ctrl.setIsFirst(false);
},
updateRed: function updateRed() {
var get_list = this.model.getGetGiftList();
if (this.index == this.role_vo.vip_lev) {
if (get_list[this.index] == null && this.ctrl.getIsFirst()) {
this.buy_red_nd.active = true;
} else {
this.buy_red_nd.active = false;
}
} else {
this.buy_red_nd.active = false;
}
},
setData: function setData(index) {
this.index = index;
if (this.root_wnd) this.onShow();
},
// 预制体加载完成之后,添加到对应主节点之后的回调可以设置一些数据了
onShow: function onShow() {
if (this.index == null) return;
var index = this.index;
var config = gdata("vip_data", "data_get_reward", [index]);
var list = [];
var reward_list = gdata("charge_data", "data_supre_reward_data", [index]).reward;
for (var i in reward_list) {
var v = reward_list[i];
var tab = {};
tab.bid = v[0];
tab.num = v[1];
list.push(tab);
}
this.item_scrollview.setData(list);
this.item_scrollview.addEndCallBack(function () {
var list = this.item_scrollview.getItemList();
for (var k in list) {
if (list[k]) list[k].setDefaultTip();
}
}.bind(this));
this.config = config;
this.title_lb.string = Utils.TI18N("VIP" + index + "特权");
var item_id = gdata("item_data", "data_assets_label2id", "gold");
var res = PathTool.getItemRes(item_id);
var desc_str = cc.js.formatStr(Utils.TI18N("累计充值%s
即可享受以下特权"), this.config.gold, item_id);
this.desc_rt.string = desc_str;
this.loadRes(res, function (resObject) {
this.desc_rt.addSpriteFrame(resObject);
}.bind(this)); //特权礼包内容
var items = config.items;
var list = [];
for (var i in items) {
var v = items[i];
var tab = {};
tab.bid = v[0];
tab.num = v[1];
list.push(tab);
}
var extend = {
scale: 0.65,
is_show_tips: true
};
this.reward_scrollview.setData(list, null, extend); //特权信息
var desc_list = config.spe_desc;
this.info_scroll.setData(desc_list);
var item_id2 = Utils.getItemConfig(config.old_price[0][0]).icon;
var res2 = PathTool.getItemRes(item_id2);
this.old_price_rt.string = cc.js.formatStr(Utils.TI18N("原价
%s"), item_id2, config.old_price[0][1]);
this.loadRes(res2, function (resObject) {
this.old_price_rt.addSpriteFrame(resObject);
}.bind(this));
this.buy_btn_lb.string = cc.js.formatStr(Utils.TI18N("%d 购买"), config.price[0][1]);
this.loadRes(PathTool.getItemRes(Utils.getItemConfig(config.old_price[0][0]).icon), function (bg_sf) {
this.buy_btn_sp.spriteFrame = bg_sf;
}.bind(this));
var get_list = this.model.getGetGiftList();
if (get_list && get_list[index] != null) {
this.buy_price_sp.node.active = false;
this.buy_btn_nd.active = false;
this.buy_complete_nd.active = true;
} else {
this.buy_price_sp.node.active = true;
this.buy_btn_nd.active = true;
this.buy_complete_nd.active = false;
}
this.updateRed();
},
clearItemList: function clearItemList() {
if (this.item_list) {
for (var k in this.item_list) {
var item = this.item_list[k];
if (item) {
item.setVisible(false);
}
}
}
},
setVisibleStatus: function setVisibleStatus(status) {
this.setVisible(status);
},
// 面板设置不可见的回调,这里做一些不可见的屏蔽处理
onHide: function onHide() {},
// 当面板从主节点释放掉的调用接口,需要手动调用,而且也一定要调用
onDelete: function onDelete() {
for (var k in this.item_list) {
if (this.item_list[k]) {
this.item_list[k].deleteMe();
this.item_list[k] = null;
}
}
this.item_list = null;
if (this.role_vo) {
if (this.role_update_event != null) {
this.role_vo.unbind(this.role_update_event);
this.role_update_event = null;
}
}
this.role_vo = null;
if (this.item_scrollview) {
this.item_scrollview.DeleteMe();
}
this.item_scrollview = null;
if (this.info_scroll) {
this.info_scroll.DeleteMe();
}
this.info_scroll = 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFx2aXBcXHZpZXdcXHZpcF9wYW5lbC5qcyJdLCJuYW1lcyI6WyJQYXRoVG9vbCIsInJlcXVpcmUiLCJWaXBDb250cm9sbGVyIiwiUm9sZUNvbnRyb2xsZXIiLCJWaXBFdmVudCIsIkNvbW1vblNjcm9sbFZpZXciLCJWaXBMYWJlbEl0ZW1QYW5lbCIsIlZpcFBhbmVsIiwiY2MiLCJDbGFzcyIsIkJhc2VQYW5lbCIsImN0b3IiLCJwcmVmYWJQYXRoIiwiZ2V0UHJlZmFiUGF0aCIsImluaXRDb25maWciLCJjdHJsIiwiZ2V0SW5zdGFuY2UiLCJtb2RlbCIsImdldE1vZGVsIiwicm9sZV92byIsImdldFJvbGVWbyIsIml0ZW1fbGlzdCIsImRlc2NfbGlzdCIsImluaXRQYW5lbCIsIm1haW5fY29udGFpbmVyX25kIiwic2Vla0NoaWxkIiwiY2hhcmdlQ29uX25kIiwiZ29vZHNfc2Nyb2xsX25kIiwiZ2lmdENvbl9uZCIsImJ1eV9idG5fbmQiLCJhY3RpdmUiLCJidXlfY29tcGxldGVfbmQiLCJidXlfYnRuX2xiIiwiTGFiZWwiLCJidXlfYnRuX3NwIiwiU3ByaXRlIiwiYnV5X3JlZF9uZCIsInRpdGxlX2xiIiwib2xkX3ByaWNlX3J0IiwiUmljaFRleHQiLCJidXlfcHJpY2Vfc3AiLCJzcHJpdGVfMV9uZCIsInNwcml0ZV8xX3NwIiwibG9hZFJlcyIsImdldFVJSWNvblBhdGgiLCJyZXMiLCJzcHJpdGVGcmFtZSIsImJpbmQiLCJzdXByZV9nb29kX2Nvbl9uZCIsInRhYl9zaXplIiwiZ2V0Q29udGVudFNpemUiLCJzZXR0aW5nIiwiaXRlbV9jbGFzcyIsInN0YXJ0X3giLCJzcGFjZV94Iiwic3RhcnRfeSIsInNwYWNlX3kiLCJpdGVtX3dpZHRoIiwiQmFja1BhY2tJdGVtIiwiV2lkdGgiLCJpdGVtX2hlaWdodCIsIkhlaWdodCIsInJvdyIsImNvbCIsInNjYWxlIiwiaXRlbV9zY3JvbGx2aWV3IiwiY3JlYXRlU2Nyb2xsIiwidjIiLCJTY3JvbGxWaWV3RGlyIiwiaG9yaXpvbnRhbCIsIlNjcm9sbFZpZXdTdGFydFBvcyIsInRvcCIsInJld2FyZF9zY3JvbGx2aWV3IiwibmVlZF9keW5hbWljIiwiaW5mb19zY3JvbGwiLCJ2ZXJ0aWNhbCIsInN1cHJlX2NhcmRfZ2V0X25kIiwic3VwcmVfY2FyZF9nZXRfYnRuIiwiQnV0dG9uIiwic3VwcmVfY2FyZF9nZXRfbGIiLCJzdHJpbmciLCJzdXByZV9jYXJkX2dldF9yZWRfbmQiLCJkZXNfbGFiZWxsaXN0IiwicmVkX2xpbmVfbmQiLCJub2RlIiwiZGVzY19ydCIsInZpcF9sZXYiLCJDb25maWciLCJ2aXBfZGF0YSIsImRhdGFfZ2V0X3Jld2FyZF9sZW5ndGgiLCJzZXREYXRhIiwicmVnaXN0ZXJFdmVudCIsIm9uIiwiTm9kZSIsIkV2ZW50VHlwZSIsIlRPVUNIX0VORCIsInJvbGVfdmlwIiwiaXNfdmlwIiwiY29uZmlnIiwibGV2Iiwic2VuZGVyMTY3MTEiLCJpbmRleCIsInN0ciIsImpzIiwiZm9ybWF0U3RyIiwibWVzc2FnZSIsImFkZEdsb2JhbEV2ZW50IiwiVVBEQVRFX0dFVF9MSVNUIiwiZ2V0X2xpc3QiLCJnZXRHZXRHaWZ0TGlzdCIsInVwZGF0ZVJlZCIsInJvbGVfdXBkYXRlX2V2ZW50IiwiRXZlbnRJZCIsIlVQREFURV9ST0xFX0FUVFJJQlVURSIsImtleSIsInZhbHVlIiwidGltZXIiLCJnY29yZSIsIlRpbWVyIiwic2V0IiwiTWF0aCIsInJhbmRvbSIsIlNVUFJFX0NBUkRfR0VUIiwic3RhdHVzIiwiVXRpbHMiLCJzZXRHcmV5QnV0dG9uIiwiY29sb3IiLCJDb2xvciIsImludGVyYWN0YWJsZSIsInNlbmRlcjE2NzA4Iiwic2VuZGVyMTY3MDciLCJzZW5kZXIxNjcxMCIsInNldElzRmlyc3QiLCJnZXRJc0ZpcnN0Iiwicm9vdF93bmQiLCJvblNob3ciLCJnZGF0YSIsImxpc3QiLCJyZXdhcmRfbGlzdCIsInJld2FyZCIsImkiLCJ2IiwidGFiIiwiYmlkIiwibnVtIiwicHVzaCIsImFkZEVuZENhbGxCYWNrIiwiZ2V0SXRlbUxpc3QiLCJrIiwic2V0RGVmYXVsdFRpcCIsIlRJMThOIiwiaXRlbV9pZCIsImdldEl0ZW1SZXMiLCJkZXNjX3N0ciIsImdvbGQiLCJyZXNPYmplY3QiLCJhZGRTcHJpdGVGcmFtZSIsIml0ZW1zIiwiZXh0ZW5kIiwiaXNfc2hvd190aXBzIiwic3BlX2Rlc2MiLCJpdGVtX2lkMiIsImdldEl0ZW1Db25maWciLCJvbGRfcHJpY2UiLCJpY29uIiwicmVzMiIsInByaWNlIiwiYmdfc2YiLCJjbGVhckl0ZW1MaXN0IiwiaXRlbSIsInNldFZpc2libGUiLCJzZXRWaXNpYmxlU3RhdHVzIiwib25IaWRlIiwib25EZWxldGUiLCJkZWxldGVNZSIsInVuYmluZCIsIkRlbGV0ZU1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLFFBQVEsR0FBR0MsT0FBTyxDQUFDLFVBQUQsQ0FBdEI7O0FBQ0EsSUFBSUMsYUFBYSxHQUFHRCxPQUFPLENBQUMsZ0JBQUQsQ0FBM0I7O0FBQ0EsSUFBSUUsY0FBYyxHQUFHRixPQUFPLENBQUMsaUJBQUQsQ0FBNUI7O0FBQ0EsSUFBSUcsUUFBUSxHQUFHSCxPQUFPLENBQUMsV0FBRCxDQUF0Qjs7QUFDQSxJQUFJSSxnQkFBZ0IsR0FBR0osT0FBTyxDQUFDLG1CQUFELENBQTlCOztBQUNBLElBQUlLLGlCQUFpQixHQUFHTCxPQUFPLENBQUMsc0JBQUQsQ0FBL0I7O0FBRUEsSUFBSU0sUUFBUSxHQUFHQyxFQUFFLENBQUNDLEtBQUgsQ0FBUztBQUNwQixhQUFTQyxTQURXO0FBRXBCQyxFQUFBQSxJQUFJLEVBQUUsZ0JBQVk7QUFDZCxTQUFLQyxVQUFMLEdBQWtCWixRQUFRLENBQUNhLGFBQVQsQ0FBdUIsS0FBdkIsRUFBOEIsV0FBOUIsQ0FBbEI7QUFDSCxHQUptQjtBQU1wQjtBQUNBQyxFQUFBQSxVQUFVLEVBQUUsc0JBQVk7QUFDcEIsU0FBS0Ms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QUF1QixJQUF2Qjs7QUFDQSxRQUFJLEtBQUtTLFdBQVQsRUFBc0I7QUFDbEIsV0FBS0EsV0FBTCxDQUFpQnNHLFFBQWpCO0FBQ0g7O0FBQ0QsU0FBS3RHLFdBQUwsR0FBbUIsSUFBbkI7QUFDSDtBQWxWbUIsQ0FBVCxDQUFmIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogeHh4QHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXG4vLyBAZGVzY3JpcHRpb246XG4vLyAgICAg6L+Z6YeM5piv5o+P6L+w6L+Z5Liq56qX5L2T55qE5L2c55So55qEXG4vLyA8YnIvPkNyZWF0ZTogMjAxOS0wMi0yNyAyMTozNjozOFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnZhciBQYXRoVG9vbCA9IHJlcXVpcmUoXCJwYXRodG9vbFwiKTtcbnZhciBWaXBDb250cm9sbGVyID0gcmVxdWlyZShcInZpcF9jb250cm9sbGVyXCIpO1xudmFyIFJvbGVDb250cm9sbGVyID0gcmVxdWlyZShcInJvbGVfY29udHJvbGxlclwiKTtcbnZhciBWaXBFdmVudCA9IHJlcXVpcmUoXCJ2aXBfZXZlbnRcIik7XG52YXIgQ29tbW9uU2Nyb2xsVmlldyA9IHJlcXVpcmUoXCJjb21tb25fc2Nyb2xsdmlld1wiKTtcbnZhciBWaXBMYWJlbEl0ZW1QYW5lbCA9IHJlcXVpcmUoXCJ2aXBfbGFiZWxfaXRlbV9wYW5lbFwiKTtcblxudmFyIFZpcFBhbmVsID0gY2MuQ2xhc3Moe1xuICAgIGV4dGVuZHM6IEJhc2VQYW5lbCxcbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucHJlZmFiUGF0aCA9IFBhdGhUb29sLmdldFByZWZhYlBhdGgoXCJ2aXBcIiwgXCJ2aXBfcGFuZWxcIik7XG4gICAgfSxcblxuICAgIC8vIOWPr+S7peWIneWni+WMluWjsOaYjuS4gOS6m+WPmOmHj+eahFxuICAgIGluaXRDb25maWc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5jdHJsID0gVmlwQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpO1xuICAgICAgICB0aGlzLm1vZGVsID0gdGhpcy5jdHJsLmdldE1vZGVsKCk7XG4gICAgICAgIHRoaXMucm9sZV92byA9IFJvbGVDb250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0Um9sZVZvKCk7XG4gICAgICAgIHRoaXMuaXRlbV9saXN0ID0ge31cbiAgICAgICAgdGhpcy5kZXNjX2xpc3QgPSB7fVxuXG4gICAgfSxcblxuICAgIC8vIOWIneWni+WMluS4gOS6m+mFjee9ruaVsOaNrizlj6/ku6XnlKjkuo7lo7DmmI7kuIDkupvlj5jph4/kuYvnsbvnmoRcbiAgICBpbml0UGFuZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5tYWluX2NvbnRhaW5lcl9uZCA9IHRoaXMuc2Vla0NoaWxkKFwibWFpbl9jb250YWluZXJcIik7XG4gICAgICAgIHRoaXMuY2hhcmdlQ29uX25kID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5tYWluX2NvbnRhaW5lcl9uZCwgXCJjaGFyZ2VDb25cIik7XG4gICAgICAgIHRoaXMuZ29vZHNfc2Nyb2xsX25kID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5jaGFyZ2VDb25fbmQsIFwiZ29vZHNfc2Nyb2xsXCIpO1xuICAgICAgICB0aGlzLmdpZnRDb25fbmQgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLmNoYXJnZUNvbl9uZCwgXCJnaWZ0Q29uXCIpO1xuICAgICAgICB0aGlzLmJ1eV9idG5fbmQgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLmNoYXJnZUNvbl9uZCwgXCJidXlfYnRuXCIpO1xuICAgICAgICB0aGlzLmJ1eV9idG5fbmQuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5idXlfY29tcGxldGVfbmQgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLmNoYXJnZUNvbl9uZCwgXCJidXlfY29tcGxldGVcIik7XG4gICAgICAgIHRoaXMuYnV5X2NvbXBsZXRlX25kLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmJ1eV9idG5fbGIgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLmJ1eV9idG5fbmQsIFwiYnV5X2J0bl9sYWJlbFwiLCBjYy5MYWJlbCk7XG4gICAgICAgIHRoaXMuYnV5X2J0bl9zcCA9IHRoaXMuc2Vla0NoaWxkKHRoaXMuYnV5X2J0bl9uZCwgXCJidXlfcHJpY2VcIiwgY2MuU3ByaXRlKTtcblxuICAgICAgICB0aGlzLmJ1eV9yZWRfbmQgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLmJ1eV9idG5fbmQsIFwicmVkXCIpO1xuICAgICAgICB0aGlzLmJ1eV9yZWRfbmQuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHRoaXMudGl0bGVfbGIgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLmNoYXJnZUNvbl9uZCwgXCJ0aXRsZVwiLCBjYy5MYWJlbCk7XG5cbiAgICAgICAgdGhpcy5vbGRfcHJpY2VfcnQgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLmNoYXJnZUNvbl9uZCwgXCJvbGRfcHJpY2VcIiwgY2MuUmljaFRleHQpO1xuICAgICAgICB0aGlzLmJ1eV9wcmljZV9zcCA9IHRoaXMuc2Vla0NoaWxkKHRoaXMuYnV5X2J0bl9uZCwgXCJidXlfcHJpY2VcIiwgY2MuU3ByaXRlKTtcbiAgICAgICAgdGhpcy5zcHJpdGVfMV9uZCA9IHRoaXMuc2Vla0NoaWxkKHRoaXMubWFpbl9jb250YWluZXJfbmQsIFwiU3ByaXRlXzFcIik7XG4gICAgICAgIHRoaXMuc3ByaXRlXzFfc3AgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLm1haW5fY29udGFpbmVyX25kLCBcIlNwcml0ZV8xXCIsY2MuU3ByaXRlKTtcbiAgICAgICAgdGhpcy5sb2FkUmVzKFBhdGhUb29sLmdldFVJSWNvblBhdGgoXCJ2aXBcIixcInZpcGJnNVwiKSxmdW5jdGlvbihyZXMpe1xuICAgICAgICAgICAgdGhpcy5zcHJpdGVfMV9zcC5zcHJpdGVGcmFtZSA9IHJlc1xuICAgICAgICB9LmJpbmQodGhpcykpXG5cbiAgICAgICAgLy/mnIjljaHpooblj5ZcbiAgICAgICAgdGhpcy5zdXByZV9nb29kX2Nvbl9uZCA9IHRoaXMuc2Vla0NoaWxkKHRoaXMuc3ByaXRlXzFfbmQsIFwiZ29vZF9jb25cIik7XG4gICAgICAgIHZhciB0YWJfc2l6ZSA9IHRoaXMuc3VwcmVfZ29vZF9jb25fbmQuZ2V0Q29udGVudFNpemUoKTtcbiAgICAgICAgdmFyIHNldHRpbmcgPSB7XG4gICAgICAgICAgICBpdGVtX2NsYXNzOiBcImJhY2twYWNrX2l0ZW1cIiwgICAgICAvLyDljZXlhYPnsbtcbiAgICAgICAgICAgIHN0YXJ0X3g6IDAsICAgICAgICAgICAgICAgICAgICAvLyDnrKzkuIDkuKrljZXlhYPnmoRY6LW354K5XG4gICAgICAgICAgICBzcGFjZV94OiAwLCAgICAgICAgICAgICAgICAgICAgLy8geOaWueWQkeeahOmXtOmalFxuICAgICAgICAgICAgc3RhcnRfeTogMCwgICAgICAgICAgICAgICAgICAgIC8vIOesrOS4gOS4quWNleWFg+eahFnotbfngrlcbiAgICAgICAgICAgIHNwYWNlX3k6IDAsICAgICAgICAgICAgICAgICAgIC8vIHnmlrnlkJHnmoTpl7TpmpRcbiAgICAgICAgICAgIGl0ZW1fd2lkdGg6IEJhY2tQYWNrSXRlbS5XaWR0aCAqIDAuNiwgICAgICAgICAgICAgICAvLyDljZXlhYPnmoTlsLrlr7h3aWR0aFxuICAgICAgICAgICAgaXRlbV9oZWlnaHQ6IEJhY2tQYWNrSXRlbS5IZWlnaHQgKiAwLjYsICAgICAgICAgICAgICAvLyDljZXlhYPnmoTlsLrlr7hoZWlnaHRcbiAgICAgICAgICAgIHJvdzogMSwgICAgICAgICAgICAgICAgICAgICAgICAvLyDooYzmlbDvvIzkvZznlKjkuo7msLTlubPmu5rliqjnsbvlnotcbiAgICAgICAgICAgIGNvbDogMCwgICAgICAgICAgICAgICAgICAgICAgICAvLyDliJfmlbDvvIzkvZznlKjkuo7lnoLnm7Tmu5rliqjnsbvlnotcbiAgICAgICAgICAgIC8vIG5lZWRfZHluYW1pYzogdHJ1ZVxuICAgICAgICAgICAgc2NhbGU6IDAuNlxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXRlbV9zY3JvbGx2aWV3ID0gbmV3IENvbW1vblNjcm9sbFZpZXcoKTtcbiAgICAgICAgdGhpcy5pdGVtX3Njcm9sbHZpZXcuY3JlYXRlU2Nyb2xsKHRoaXMuc3VwcmVfZ29vZF9jb25fbmQsIGNjLnYyKDAsIDApLCBTY3JvbGxWaWV3RGlyLmhvcml6b250YWwsIFNjcm9sbFZpZXdTdGFydFBvcy50b3AsIHRhYl9zaXplLCBzZXR0aW5nLCBjYy52MigwLjUsIDAuNSkpXG5cbiAgICAgICAgdmFyIHRhYl9zaXplID0gdGhpcy5nb29kc19zY3JvbGxfbmQuZ2V0Q29udGVudFNpemUoKTtcbiAgICAgICAgdmFyIHNldHRpbmcgPSB7XG4gICAgICAgICAgICBpdGVtX2NsYXNzOiBcImJhY2twYWNrX2l0ZW1cIiwgICAgICAvLyDljZXlhYPnsbtcbiAgICAgICAgICAgIHN0YXJ0X3g6IDAsICAgICAgICAgICAgICAgICAgICAvLyDnrKzkuIDkuKrljZXlhYPnmoRY6LW354K5XG4gICAgICAgICAgICBzcGFjZV94OiAwLCAgICAgICAgICAgICAgICAgICAgLy8geOaWueWQkeeahOmXtOmalFxuICAgICAgICAgICAgc3RhcnRfeTogMCwgICAgICAgICAgICAgICAgICAgIC8vIOesrOS4gOS4quWNleWFg+eahFnotbfngrlcbiAgICAgICAgICAgIHNwYWNlX3k6IDEwLCAgICAgICAgICAgICAgICAgICAvLyB55pa55ZCR55qE6Ze06ZqUXG4gICAgICAgICAgICBpdGVtX3dpZHRoOiBCYWNrUGFja0l0ZW0uV2lkdGggKiAwLjY1LCAgICAgICAgICAgICAgIC8vIOWNleWFg+eahOWwuuWvuHdpZHRoXG4gICAgICAgICAgICBpdGVtX2hlaWdodDogQmFja1BhY2tJdGVtLkhlaWdodCAqIDAuOCwgICAgICAgICAgICAgIC8vIOWNleWFg+eahOWwuuWvuGhlaWdodFxuICAgICAgICAgICAgcm93OiAxLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIOihjOaVsO+8jOS9nOeUqOS6juawtOW5s+a7muWKqOexu+Wei1xuICAgICAgICAgICAgY29sOiAwLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWIl+aVsO+8jOS9nOeUqOS6juWeguebtOa7muWKqOexu+Wei1xuICAgICAgICAgICAgLy8gbmVlZF9keW5hbWljOiB0cnVlXG4gICAgICAgICAgICBzY2FsZTogMC42NVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucmV3YXJkX3Njcm9sbHZpZXcgPSBuZXcgQ29tbW9uU2Nyb2xsVmlldygpO1xuICAgICAgICB0aGlzLnJld2FyZF9zY3JvbGx2aWV3LmNyZWF0ZVNjcm9sbCh0aGlzLmdvb2RzX3Njcm9sbF9uZCwgY2MudjIoMCwgMCksIFNjcm9sbFZpZXdEaXIuaG9yaXpvbnRhbCwgU2Nyb2xsVmlld1N0YXJ0UG9zLnRvcCwgdGFiX3NpemUsIHNldHRpbmcsIGNjLnYyKDAuNSwgMC41KSlcblxuICAgICAgICB2YXIgdGFiX3NpemUgPSB0aGlzLmdpZnRDb25fbmQuZ2V0Q29udGVudFNpemUoKTtcbiAgICAgICAgdmFyIHNldHRpbmcgPSB7XG4gICAgICAgICAgICBpdGVtX2NsYXNzOiBWaXBMYWJlbEl0ZW1QYW5lbCwgICAgICAvLyDljZXlhYPnsbtcbiAgICAgICAgICAgIHN0YXJ0X3g6IDAsICAgICAgICAgICAgICAgICAgICAvLyDnrKzkuIDkuKrljZXlhYPnmoRY6LW354K5XG4gICAgICAgICAgICBzcGFjZV94OiAwLCAgICAgICAgICAgICAgICAgICAgLy8geOaWueWQkeeahOmXtOmalFxuICAgICAgICAgICAgc3RhcnRfeTogMCwgICAgICAgICAgICAgICAgICAgIC8vIOesrOS4gOS4quWNleWFg+eahFnotbfngrlcbiAgICAgICAgICAgIHNwYWNlX3k6IDAsICAgICAgICAgICAgICAgICAgIC8vIHnmlrnlkJHnmoTpl7TpmpRcbiAgICAgICAgICAgIGl0ZW1fd2lkdGg6IDQwMCwgICAgICAgICAgICAgICAvLyDljZXlhYPnmoTlsLrlr7h3aWR0aFxuICAgICAgICAgICAgaXRlbV9oZWlnaHQ6IDMwLCAgICAgICAgICAgICAgLy8g5Y2V5YWD55qE5bC65a+4aGVpZ2h0XG4gICAgICAgICAgICByb3c6IDEsICAgICAgICAgICAgICAgICAgICAgICAgLy8g6KGM5pWw77yM5L2c55So5LqO5rC05bmz5rua5Yqo57G75Z6LXG4gICAgICAgICAgICBjb2w6IDEsICAgICAgICAgICAgICAgICAgICAgICAgLy8g5YiX5pWw77yM5L2c55So5LqO5Z6C55u05rua5Yqo57G75Z6LXG4gICAgICAgICAgICBuZWVkX2R5bmFtaWM6IHRydWVcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluZm9fc2Nyb2xsID0gbmV3IENvbW1vblNjcm9sbFZpZXcoKTtcbiAgICAgICAgdGhpcy5pbmZvX3Njcm9sbC5jcmVhdGVTY3JvbGwodGhpcy5naWZ0Q29uX25kLCBjYy52MigwLCAwKSwgU2Nyb2xsVmlld0Rpci52ZXJ0aWNhbCwgU2Nyb2xsVmlld1N0YXJ0UG9zLnRvcCwgdGFiX3NpemUsIHNldHRpbmcsIGNjLnYyKDAuNSwgMC41KSlcblxuICAgICAgICB0aGlzLnN1cHJlX2NhcmRfZ2V0X25kID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5zcHJpdGVfMV9uZCwgXCJidG5fZ2V0XCIpO1xuICAgICAgICB0aGlzLnN1cHJlX2NhcmRfZ2V0X2J0biA9IHRoaXMuc2Vla0NoaWxkKHRoaXMuc3ByaXRlXzFfbmQsIFwiYnRuX2dldFwiLCBjYy5CdXR0b24pO1xuICAgICAgICB0aGlzLnN1cHJlX2NhcmRfZ2V0X25kLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN1cHJlX2NhcmRfZ2V0X2xiID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5zdXByZV9jYXJkX2dldF9uZCwgXCJUZXh0XzNfMFwiLCBjYy5MYWJlbCk7XG4gICAgICAgIHRoaXMuc3VwcmVfY2FyZF9nZXRfbGIuc3RyaW5nID0gXCLpooblj5ZcIjtcbiAgICAgICAgdGhpcy5zdXByZV9jYXJkX2dldF9yZWRfbmQgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLnN1cHJlX2NhcmRfZ2V0X25kLCBcInJlZF9wb2ludFwiKTtcbiAgICAgICAgdGhpcy5zdXByZV9jYXJkX2dldF9yZWRfbmQuYWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5kZXNfbGFiZWxsaXN0ID0ge307XG4gICAgICAgIHRoaXMucmVkX2xpbmVfbmQgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLm9sZF9wcmljZV9ydC5ub2RlLCBcInJlZF9saW5lXCIpO1xuICAgICAgICB0aGlzLmRlc2NfcnQgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLm1haW5fY29udGFpbmVyX25kLCBcImRlc2NfbGFiZWxcIiwgY2MuUmljaFRleHQpO1xuXG4gICAgICAgIGlmICh0aGlzLnJvbGVfdm8udmlwX2xldiA+IENvbmZpZy52aXBfZGF0YS5kYXRhX2dldF9yZXdhcmRfbGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRhKENvbmZpZy52aXBfZGF0YS5kYXRhX2dldF9yZXdhcmRfbGVuZ3RoIC0gMSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YSh0aGlzLnJvbGVfdm8udmlwX2xldik7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g5rOo5YaM5LqL5Lu255uR5ZCs55qE5o6l5Y+jLOS4jemcgOimgeaJi+WKqOiwg+eUqCzlpoLmnpzmmK/kvb/nlKhnY29yZS5HbG9iYWxFdmVudOebkeWQrCzlj6/ku6Xnm7TmjqXosIPnlKhhZGRHbG9iYWxFdmVudFxuICAgIHJlZ2lzdGVyRXZlbnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5idXlfYnRuX25kLm9uKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX0VORCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHJvbGVfdmlwID0gdGhpcy5yb2xlX3ZvLnZpcF9sZXY7XG4gICAgICAgICAgICB2YXIgaXNfdmlwID0gdGhpcy5yb2xlX3ZvLmlzX3ZpcDtcbiAgICAgICAgICAgIGlmIChyb2xlX3ZpcCA9PSAwICYmIGlzX3ZpcCA9PSAxKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLmxldiA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3RybC5zZW5kZXIxNjcxMSh0aGlzLmluZGV4KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3RyID0gY2MuanMuZm9ybWF0U3RyKCfmnKrovr7liLBWSVAlcycsIHRoaXMuY29uZmlnLmxldik7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uoc3RyKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7Ly/lpoLmnpzmmK92aXDlhYjliKTmlq3nrYnnuqfotrPlpJ/kuI1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLmxldiA+IHJvbGVfdmlwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyID0gY2MuanMuZm9ybWF0U3RyKFwi5pyq6L6+5YiwVklQJXNcIiwgdGhpcy5jb25maWcubGV2KVxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZShzdHIpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHJsLnNlbmRlcjE2NzExKHRoaXMuaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCB0aGlzKVxuXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoVmlwRXZlbnQuVVBEQVRFX0dFVF9MSVNULCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZ2V0X2xpc3QgPSB0aGlzLm1vZGVsLmdldEdldEdpZnRMaXN0KCk7XG4gICAgICAgICAgICBpZiAoZ2V0X2xpc3RbdGhpcy5pbmRleF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnV5X3ByaWNlX3NwLm5vZGUuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5idXlfYnRuX25kLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuYnV5X2NvbXBsZXRlX25kLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYnV5X3ByaWNlX3NwLm5vZGUuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1eV9idG5fbmQuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1eV9jb21wbGV0ZV9uZC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudXBkYXRlUmVkKCk7XG4gICAgICAgIH0sIHRoaXMpXG5cbiAgICAgICAgaWYgKHRoaXMucm9sZV92bykge1xuICAgICAgICAgICAgaWYgKHRoaXMucm9sZV91cGRhdGVfZXZlbnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMucm9sZV91cGRhdGVfZXZlbnQgPSB0aGlzLnJvbGVfdm8uYmluZChFdmVudElkLlVQREFURV9ST0xFX0FUVFJJQlVURSwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aW1lciA9IGdjb3JlLlRpbWVyLnNldCgoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PSBcInZpcF9sZXZcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVJlZCgpO1xuICAgICAgICAgICAgICAgICAgICB9KS5iaW5kKHRoaXMpLCBNYXRoLnJhbmRvbSgpICogMTAwMCwgMSlcbiAgICAgICAgICAgICAgICB9LCB0aGlzKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hZGRHbG9iYWxFdmVudChWaXBFdmVudC5TVVBSRV9DQVJEX0dFVCwgZnVuY3Rpb24gKHN0YXR1cykge1xuICAgICAgICAgICAgdGhpcy5zdXByZV9jYXJkX2dldF9uZC5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSAxKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy5zdXByZV9jYXJkX2dldF9idG4uaW50ZXJhY3RhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBVdGlscy5zZXRHcmV5QnV0dG9uKHRoaXMuc3VwcmVfY2FyZF9nZXRfYnRuLCBmYWxzZSlcbiAgICAgICAgICAgICAgICB0aGlzLnN1cHJlX2NhcmRfZ2V0X2xiLnN0cmluZyA9IFwi6aKG5Y+WXCI7XG4gICAgICAgICAgICAgICAgdGhpcy5zdXByZV9jYXJkX2dldF9sYi5ub2RlLmNvbG9yID0gbmV3IGNjLkNvbG9yKDExMywgNDAsIDQpXG4gICAgICAgICAgICAgICAgdGhpcy5zdXByZV9jYXJkX2dldF9yZWRfbmQuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdXByZV9jYXJkX2dldF9yZWRfbmQuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIFV0aWxzLnNldEdyZXlCdXR0b24odGhpcy5zdXByZV9jYXJkX2dldF9idG4pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VwcmVfY2FyZF9nZXRfYnRuLmludGVyYWN0YWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VwcmVfY2FyZF9nZXRfbGIuc3RyaW5nID0gXCLlvoXmv4DmtLtcIjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdXByZV9jYXJkX2dldF9sYi5ub2RlLmNvbG9yID0gbmV3IGNjLkNvbG9yKDExMywgNDAsIDQpXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5zdXByZV9jYXJkX2dldF9idG4uaW50ZXJhY3RhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIFV0aWxzLnNldEdyZXlCdXR0b24odGhpcy5zdXByZV9jYXJkX2dldF9idG4pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VwcmVfY2FyZF9nZXRfbGIuc3RyaW5nID0gXCLlt7Lpooblj5ZcIjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdXByZV9jYXJkX2dldF9sYi5ub2RlLmNvbG9yID0gbmV3IGNjLkNvbG9yKDI1NSwgMjU1LCAyNTUpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCB0aGlzKVxuXG4gICAgICAgIHRoaXMuc3VwcmVfY2FyZF9nZXRfbmQub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLmN0cmwuc2VuZGVyMTY3MDgoKTtcbiAgICAgICAgfSwgdGhpcylcblxuICAgICAgICB0aGlzLmN0cmwuc2VuZGVyMTY3MDcoKVxuICAgICAgICB0aGlzLmN0cmwuc2VuZGVyMTY3MTAoKVxuICAgICAgICB0aGlzLmN0cmwuc2V0SXNGaXJzdChmYWxzZSlcbiAgICB9LFxuXG4gICAgdXBkYXRlUmVkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBnZXRfbGlzdCA9IHRoaXMubW9kZWwuZ2V0R2V0R2lmdExpc3QoKTtcbiAgICAgICAgaWYgKHRoaXMuaW5kZXggPT0gdGhpcy5yb2xlX3ZvLnZpcF9sZXYpIHtcbiAgICAgICAgICAgIGlmIChnZXRfbGlzdFt0aGlzLmluZGV4XSA9PSBudWxsICYmIHRoaXMuY3RybC5nZXRJc0ZpcnN0KCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1eV9yZWRfbmQuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5idXlfcmVkX25kLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5idXlfcmVkX25kLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNldERhdGE6IGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIGlmICh0aGlzLnJvb3Rfd25kKVxuICAgICAgICAgICAgdGhpcy5vblNob3coKTtcbiAgICB9LFxuXG4gICAgLy8g6aKE5Yi25L2T5Yqg6L295a6M5oiQ5LmL5ZCOLOa3u+WKoOWIsOWvueW6lOS4u+iKgueCueS5i+WQjueahOWbnuiwg+WPr+S7peiuvue9ruS4gOS6m+aVsOaNruS6hlxuICAgIG9uU2hvdzogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pbmRleCA9PSBudWxsKSByZXR1cm5cbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5pbmRleDtcblxuICAgICAgICB2YXIgY29uZmlnID0gZ2RhdGEoXCJ2aXBfZGF0YVwiLCBcImRhdGFfZ2V0X3Jld2FyZFwiLCBbaW5kZXhdKTtcbiAgICAgICAgdmFyIGxpc3QgPSBbXTtcbiAgICAgICAgdmFyIHJld2FyZF9saXN0ID0gZ2RhdGEoXCJjaGFyZ2VfZGF0YVwiLCBcImRhdGFfc3VwcmVfcmV3YXJkX2RhdGFcIiwgW2luZGV4XSkucmV3YXJkXG4gICAgICAgIGZvciAodmFyIGkgaW4gcmV3YXJkX2xpc3QpIHtcbiAgICAgICAgICAgIHZhciB2ID0gcmV3YXJkX2xpc3RbaV07XG4gICAgICAgICAgICB2YXIgdGFiID0ge307XG4gICAgICAgICAgICB0YWIuYmlkID0gdlswXTtcbiAgICAgICAgICAgIHRhYi5udW0gPSB2WzFdO1xuICAgICAgICAgICAgbGlzdC5wdXNoKHRhYik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLml0ZW1fc2Nyb2xsdmlldy5zZXREYXRhKGxpc3QpO1xuICAgICAgICB0aGlzLml0ZW1fc2Nyb2xsdmlldy5hZGRFbmRDYWxsQmFjayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgbGlzdCA9IHRoaXMuaXRlbV9zY3JvbGx2aWV3LmdldEl0ZW1MaXN0KCk7XG4gICAgICAgICAgICBmb3IgKHZhciBrIGluIGxpc3QpIHtcbiAgICAgICAgICAgICAgICBpZiAobGlzdFtrXSlcbiAgICAgICAgICAgICAgICAgICAgbGlzdFtrXS5zZXREZWZhdWx0VGlwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0uYmluZCh0aGlzKSlcblxuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgdGhpcy50aXRsZV9sYi5zdHJpbmcgPSBVdGlscy5USTE4TihcIlZJUFwiICsgaW5kZXggKyBcIueJueadg1wiKTtcblxuICAgICAgICB2YXIgaXRlbV9pZCA9IGdkYXRhKFwiaXRlbV9kYXRhXCIsIFwiZGF0YV9hc3NldHNfbGFiZWwyaWRcIiwgXCJnb2xkXCIpO1xuICAgICAgICB2YXIgcmVzID0gUGF0aFRvb2wuZ2V0SXRlbVJlcyhpdGVtX2lkKTtcbiAgICAgICAgXG4gICAgICAgIHZhciBkZXNjX3N0ciA9IGNjLmpzLmZvcm1hdFN0cihVdGlscy5USTE4TihcIue0r+iuoeWFheWAvDxjb2xvcj0jMjQ5MDEzPiVzIDwvYz48aW1nIHNyYz0nJXMnLz7ljbPlj6/kuqvlj5fku6XkuIvnibnmnYNcIiksIHRoaXMuY29uZmlnLmdvbGQsIGl0ZW1faWQpXG4gICAgICAgIHRoaXMuZGVzY19ydC5zdHJpbmcgPSBkZXNjX3N0cjtcbiAgICAgICAgdGhpcy5sb2FkUmVzKHJlcywgKGZ1bmN0aW9uIChyZXNPYmplY3QpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzY19ydC5hZGRTcHJpdGVGcmFtZShyZXNPYmplY3QpO1xuICAgICAgICB9KS5iaW5kKHRoaXMpKTtcblxuICAgICAgICAvL+eJueadg+ekvOWMheWGheWuuVxuICAgICAgICB2YXIgaXRlbXMgPSBjb25maWcuaXRlbXM7XG4gICAgICAgIHZhciBsaXN0ID0gW107XG4gICAgICAgIGZvcih2YXIgaSBpbiBpdGVtcyl7XG4gICAgICAgICAgICB2YXIgdiA9IGl0ZW1zW2ldO1xuICAgICAgICAgICAgdmFyIHRhYiA9IHt9O1xuICAgICAgICAgICAgdGFiLmJpZCA9IHZbMF07XG4gICAgICAgICAgICB0YWIubnVtID0gdlsxXTtcbiAgICAgICAgICAgIGxpc3QucHVzaCh0YWIpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBleHRlbmQgPSB7c2NhbGU6IDAuNjUsaXNfc2hvd190aXBzOiB0cnVlfTtcbiAgICAgICAgdGhpcy5yZXdhcmRfc2Nyb2xsdmlldy5zZXREYXRhKGxpc3QsbnVsbCxleHRlbmQpO1xuICAgICAgICBcblxuICAgICAgICAvL+eJueadg+S/oeaBr1xuICAgICAgICB2YXIgZGVzY19saXN0ID0gY29uZmlnLnNwZV9kZXNjO1xuXG4gICAgICAgIHRoaXMuaW5mb19zY3JvbGwuc2V0RGF0YShkZXNjX2xpc3QpO1xuXG4gICAgICAgIHZhciBpdGVtX2lkMiA9IFV0aWxzLmdldEl0ZW1Db25maWcoY29uZmlnLm9sZF9wcmljZVswXVswXSkuaWNvbjtcbiAgICAgICAgdmFyIHJlczIgPSBQYXRoVG9vbC5nZXRJdGVtUmVzKGl0ZW1faWQyKTtcbiAgICAgICAgdGhpcy5vbGRfcHJpY2VfcnQuc3RyaW5nID0gY2MuanMuZm9ybWF0U3RyKFV0aWxzLlRJMThOKFwi5Y6f5Lu3PGltZyBzcmM9JyVzJy8+JXNcIiksaXRlbV9pZDIgLCBjb25maWcub2xkX3ByaWNlWzBdWzFdKTtcbiAgICAgICAgdGhpcy5sb2FkUmVzKHJlczIsIChmdW5jdGlvbiAocmVzT2JqZWN0KSB7XG4gICAgICAgICAgICB0aGlzLm9sZF9wcmljZV9ydC5hZGRTcHJpdGVGcmFtZShyZXNPYmplY3QpO1xuICAgICAgICB9KS5iaW5kKHRoaXMpKTtcblxuICAgICAgICB0aGlzLmJ1eV9idG5fbGIuc3RyaW5nID0gY2MuanMuZm9ybWF0U3RyKFV0aWxzLlRJMThOKFwiJWQg6LSt5LmwXCIpLCBjb25maWcucHJpY2VbMF1bMV0pO1xuICAgICAgICB0aGlzLmxvYWRSZXMoUGF0aFRvb2wuZ2V0SXRlbVJlcyhVdGlscy5nZXRJdGVtQ29uZmlnKGNvbmZpZy5vbGRfcHJpY2VbMF1bMF0pLmljb24pLCBmdW5jdGlvbiAoYmdfc2YpIHtcbiAgICAgICAgICAgIHRoaXMuYnV5X2J0bl9zcC5zcHJpdGVGcmFtZSA9IGJnX3NmO1xuICAgICAgICB9LmJpbmQodGhpcykpO1xuXG4gICAgICAgIHZhciBnZXRfbGlzdCA9IHRoaXMubW9kZWwuZ2V0R2V0R2lmdExpc3QoKTtcbiAgICAgICAgaWYgKGdldF9saXN0ICYmIGdldF9saXN0W2luZGV4XSAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmJ1eV9wcmljZV9zcC5ub2RlLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5idXlfYnRuX25kLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5idXlfY29tcGxldGVfbmQuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYnV5X3ByaWNlX3NwLm5vZGUuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuYnV5X2J0bl9uZC5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5idXlfY29tcGxldGVfbmQuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVSZWQoKVxuICAgIH0sXG5cbiAgICBjbGVhckl0ZW1MaXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLml0ZW1fbGlzdCkge1xuICAgICAgICAgICAgZm9yICh2YXIgayBpbiB0aGlzLml0ZW1fbGlzdCkge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcy5pdGVtX2xpc3Rba107XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXRWaXNpYmxlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0VmlzaWJsZVN0YXR1czogZnVuY3Rpb24gKHN0YXR1cykge1xuICAgICAgICB0aGlzLnNldFZpc2libGUoc3RhdHVzKTtcbiAgICB9LFxuXG4gICAgLy8g6Z2i5p2/6K6+572u5LiN5Y+v6KeB55qE5Zue6LCDLOi/memHjOWBmuS4gOS6m+S4jeWPr+ingeeahOWxj+iUveWkhOeQhlxuICAgIG9uSGlkZTogZnVuY3Rpb24gKCkge1xuXG4gICAgfSxcblxuICAgIC8vIOW9k+mdouadv+S7juS4u+iKgueCuemHiuaUvuaOieeahOiwg+eUqOaOpeWPoyzpnIDopoHmiYvliqjosIPnlKgs6ICM5LiU5Lmf5LiA5a6a6KaB6LCD55SoXG4gICAgb25EZWxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yICh2YXIgayBpbiB0aGlzLml0ZW1fbGlzdCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXRlbV9saXN0W2tdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtX2xpc3Rba10uZGVsZXRlTWUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1fbGlzdFtrXSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pdGVtX2xpc3QgPSBudWxsO1xuICAgICAgICBpZiAodGhpcy5yb2xlX3ZvKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yb2xlX3VwZGF0ZV9ldmVudCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb2xlX3ZvLnVuYmluZCh0aGlzLnJvbGVfdXBkYXRlX2V2ZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLnJvbGVfdXBkYXRlX2V2ZW50ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJvbGVfdm8gPSBudWxsO1xuICAgICAgICBpZiAodGhpcy5pdGVtX3Njcm9sbHZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbV9zY3JvbGx2aWV3LkRlbGV0ZU1lKClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLml0ZW1fc2Nyb2xsdmlldyA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLmluZm9fc2Nyb2xsKSB7XG4gICAgICAgICAgICB0aGlzLmluZm9fc2Nyb2xsLkRlbGV0ZU1lKClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluZm9fc2Nyb2xsID0gbnVsbFxuICAgIH0sXG59KSJdfQ==