|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/guild/view/guild_donate_window.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, 'b24e1N99hdD1plf6g9CHud5', 'guild_donate_window');
|
// Scripts/mod/guild/view/guild_donate_window.js
|
|
"use strict";
|
|
// --------------------------------------------------------------------
|
// @author: shiraho@syg.com(必填, 创建模块的人员)
|
// @description:
|
// 公会捐献面板
|
// <br/>Create: new Date().toISOString()
|
// --------------------------------------------------------------------
|
var PathTool = require("pathtool");
|
|
var GuildController = require("guild_controller");
|
|
var GuildConst = require("guild_const");
|
|
var CommonScrollView = require("common_scrollview");
|
|
var RoleController = require("role_controller");
|
|
var GuildEvent = require("guild_event");
|
|
var GuildDonateItem = require("guild_donate_item");
|
|
var GuildDonateWindow = cc.Class({
|
"extends": BaseView,
|
ctor: function ctor() {
|
this.prefabPath = PathTool.getPrefabPath("guild", "guild_donate_window");
|
this.win_type = WinType.Big;
|
this.viewTag = SCENE_TAG.dialogue;
|
this.ctrl = GuildController.getInstance();
|
this.model = this.ctrl.getModel();
|
this.role_vo = RoleController.getInstance().getRoleVo();
|
this.awards_list = {};
|
},
|
openCallBack: function openCallBack() {
|
this.main_panel = this.seekChild("main_panel");
|
this.close_btn = this.seekChild(this.main_panel, "close_btn");
|
this.background = this.seekChild("background");
|
this.background.scale = FIT_SCALE;
|
this.donate_container = this.seekChild("donate_container");
|
this.progress_bar = this.seekChild("progress_bar", cc.ProgressBar);
|
this.lev_title = this.seekChild("lev_title", cc.Label);
|
this.exp_value = this.seekChild("exp_value", cc.Label);
|
this.explain_btn = this.seekChild("explain_btn");
|
this.total_width = this.progress_bar.node.getContentSize().width;
|
this.start_x = 206 - 32;
|
var config = Config.guild_data.data_const.day_exp_max;
|
|
if (config) {
|
for (var i in Config.guild_data.data_donate_box) {
|
var v = gdata("guild_data", "data_donate_box", [i]);
|
var awards = this.seekChild(cc.js.formatStr("awards_%s", Number(i)));
|
awards.active = true;
|
var container = awards.getChildByName("container");
|
var skeleton = container.getComponent(sp.Skeleton);
|
var value = awards.getChildByName("value").getComponent(cc.Label);
|
value.string = v.box_val;
|
var percent = v.box_val / config.val;
|
awards.setPosition(this.start_x + this.total_width * percent, 270);
|
var object = {};
|
object.item = awards;
|
object.container = container;
|
object.status = GuildConst.status.normal;
|
object.id = i;
|
object.config = v;
|
object.skeleton = skeleton;
|
object.is_show_tips = true;
|
this.awards_list[i] = object;
|
}
|
}
|
|
this.desc = this.seekChild("desc", cc.RichText);
|
var size = this.donate_container.getContentSize();
|
var list_size = cc.size(size.width, size.height - 10);
|
var setting = {
|
item_class: GuildDonateItem,
|
// 单元类
|
start_x: 4,
|
// 第一个单元的X起点
|
space_x: 0,
|
// x方向的间隔
|
start_y: 0,
|
// 第一个单元的Y起点
|
space_y: -1,
|
// y方向的间隔
|
item_width: 614,
|
// 单元的尺寸width
|
item_height: 187,
|
// 单元的尺寸height
|
row: 0,
|
// 行数,作用于水平滚动类型
|
col: 1,
|
// 列数,作用于垂直滚动类型
|
need_dynamic: true
|
};
|
this.scroll_view = new CommonScrollView();
|
this.scroll_view.createScroll(this.donate_container, cc.v2(0, 0), ScrollViewDir.vertical, ScrollViewStartPos.top, list_size, setting, cc.v2(0.5, 0.5));
|
},
|
registerEvent: function registerEvent() {
|
var _this = this;
|
|
this.explain_btn.on(cc.Node.EventType.TOUCH_END, function (event) {
|
var config = Config.guild_data.data_const.game_rule1;
|
Utils.playButtonSound(1);
|
var pos = event.touch.getLocation();
|
|
require("tips_controller").getInstance().showCommonTips(config.desc, pos);
|
}, this);
|
this.close_btn.on(cc.Node.EventType.TOUCH_END, function () {
|
this.ctrl.openGuildDonateWindow(false);
|
}, this);
|
this.background.on(cc.Node.EventType.TOUCH_END, function () {
|
this.ctrl.openGuildDonateWindow(false);
|
}, this);
|
|
var _loop = function _loop() {
|
var object = _this.awards_list[i];
|
object.item.on(cc.Node.EventType.TOUCH_END, function () {
|
if (object.config) {
|
if (object.is_show_tips == true) {
|
var CommonAlert = require("commonalert");
|
|
CommonAlert.showItemApply(Utils.TI18N("当前捐献活跃度奖励"), object.config.rewards, null, Utils.TI18N("确定"), null, null, Utils.TI18N("奖励"), null, null, true);
|
} else {
|
this.ctrl.requestDonateBoxRewards(object.id);
|
}
|
}
|
}, _this);
|
};
|
|
for (var i in this.awards_list) {
|
_loop();
|
}
|
|
if (this.my_guild_info == null) {
|
this.my_guild_info = this.model.getMyGuildInfo();
|
this.addGlobalEvent(GuildEvent.UpdateMyInfoEvent, function (key, value) {
|
if (key == "lev") this.updateMyGuildLev();
|
}, this);
|
}
|
|
this.addGlobalEvent(GuildEvent.UpdateDonateInfo, function () {
|
this.updateDonateListStatus();
|
}, this);
|
this.addGlobalEvent(GuildEvent.UpdateDonateBoxStatus, function (id) {
|
if (id != null) {
|
var object = this.awards_list[id];
|
|
if (object) {
|
object.is_show_tips = true;
|
object.status = GuildConst.status.finish;
|
|
if (object.skeleton) {
|
object.skeleton.setToSetupPose();
|
object.skeleton.clearTracks();
|
object.skeleton.setAnimation(0, PlayerAction.action_3, true);
|
}
|
}
|
} else this.updateDonateBoxList();
|
}, this);
|
},
|
openRootWnd: function openRootWnd() {
|
var config_list = Config.guild_data.data_donate;
|
var list = [];
|
|
for (var i in config_list) {
|
list.push(config_list[i]);
|
}
|
|
this.scroll_view.setData(list);
|
this.updateDonateBoxList();
|
this.updateMyGuildLev();
|
},
|
//更新活跃度宝箱
|
updateDonateBoxList: function updateDonateBoxList() {
|
var activity_value = this.model.getDonateActivityValue();
|
this.exp_value.string = activity_value;
|
var config = gdata("guild_data", "data_const", "day_exp_max");
|
if (config == null) return;
|
this.progress_bar.progress = activity_value / config.val;
|
|
for (var i in this.awards_list) {
|
var object = this.awards_list[i];
|
var config = object.config;
|
var box_status = this.model.getDonateBoxStatus(object.id);
|
var tmp_status = GuildConst.status.normal;
|
if (box_status == true) tmp_status = GuildConst.status.finish;else {
|
if (activity_value >= object.config.box_val) tmp_status = GuildConst.status.activity;else tmp_status = GuildConst.status.un_activity;
|
}
|
var box_action = PlayerAction.action_1;
|
if (tmp_status == GuildConst.status.finish) box_action = PlayerAction.action_3;else if (tmp_status == GuildConst.status.activity) box_action = PlayerAction.action_2;
|
if (tmp_status == GuildConst.status.activity) object.is_show_tips = false;else object.is_show_tips = true;
|
|
if (object.skeleton.skeletonData) {
|
if (tmp_status != object.status) {
|
object.status = tmp_status;
|
object.skeleton.setAnimation(0, box_action, true);
|
}
|
} else {
|
var res_id = PathTool.getEffectRes(object.config.effect_id);
|
var path = cc.js.formatStr("spine/%s/action.atlas", res_id);
|
var _skeleton = object.skeleton;
|
this.createEffect(_skeleton, path, box_action);
|
}
|
}
|
},
|
//生成宝箱
|
createEffect: function createEffect(_skeleton, path, box_action) {
|
this.loadRes(path, function (res) {
|
_skeleton.skeletonData = res;
|
|
_skeleton.setAnimation(0, box_action, true);
|
}.bind(this));
|
},
|
//设置等级相关
|
updateMyGuildLev: function updateMyGuildLev() {
|
if (this.my_guild_info == null) return;
|
this.lev_title.string = cc.js.formatStr(Utils.TI18N("公会等级:%s级"), this.my_guild_info.lev);
|
var next_lv = this.my_guild_info.lev + 1;
|
var config = gdata("guild_data", "data_guild_lev", [next_lv]);
|
if (config == null) this.desc.string = Utils.TI18N("当前已达最大值!");else this.desc.string = StringUtil.parse(config.desc);
|
},
|
updateDonateListStatus: function updateDonateListStatus() {
|
var item_list = this.scroll_view.getItemList();
|
|
if (item_list) {
|
for (var k in item_list) {
|
var v = item_list[k];
|
if (v.updateDonateStatus) v.updateDonateStatus();
|
}
|
}
|
},
|
closeCallBack: function closeCallBack() {
|
this.ctrl.openGuildDonateWindow(false);
|
|
if (this.scroll_view) {
|
this.scroll_view.DeleteMe();
|
}
|
|
this.scroll_view = null;
|
}
|
});
|
module.exports = GuildDonateWindow;
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxndWlsZFxcdmlld1xcZ3VpbGRfZG9uYXRlX3dpbmRvdy5qcyJdLCJuYW1lcyI6WyJQYXRoVG9vbCIsInJlcXVpcmUiLCJHdWlsZENvbnRyb2xsZXIiLCJHdWlsZENvbnN0IiwiQ29tbW9uU2Nyb2xsVmlldyIsIlJvbGVDb250cm9sbGVyIiwiR3VpbGRFdmVudCIsIkd1aWxkRG9uYXRlSXRlbSIsIkd1aWxkRG9uYXRlV2luZG93IiwiY2MiLCJDbGFzcyIsIkJhc2VWaWV3IiwiY3RvciIsInByZWZhYlBhdGgiLCJnZXRQcmVmYWJQYXRoIiwid2luX3R5cGUiLCJXaW5UeXBlIiwiQmlnIiwidmlld1RhZyIsIlNDRU5FX1RBRyIsImRpYWxvZ3VlIiwiY3RybCIsImdldEluc3RhbmNlIiwibW9kZWwiLCJnZXRNb2RlbCIsInJvbGVfdm8iLCJnZXRSb2xlVm8iLCJhd2FyZHNfbGlzdCIsIm9wZW5DYWxsQmFjayIsIm1haW5fcGFuZWwiLCJzZWVrQ2hpbGQiLCJjbG9zZV9idG4iLCJiYWNrZ3JvdW5kIiwic2NhbGUiLCJGSVRfU0NBTEUiLCJkb25hdGVfY29udGFpbmVyIiwicHJvZ3Jlc3NfYmFyIiwiUHJvZ3Jlc3NCYXIiLCJsZXZfdGl0bGUiLCJMYWJlbCIsImV4cF92YWx1ZSIsImV4cGxhaW5fYnRuIiwidG90YWxfd2lkdGgiLCJub2RlIiwiZ2V0Q29udGVudFNpemUiLCJ3aWR0aCIsInN0YXJ0X3giLCJjb25maWciLCJDb25maWciLCJndWlsZF9kYXRhIiwiZGF0YV9jb25zdCIsImRheV9leHBfbWF4IiwiaSIsImRhdGFfZG9uYXRlX2JveCIsInYiLCJnZGF0YSIsImF3YXJkcyIsImpzIiwiZm9ybWF0U3RyIiwiTnVtYmVyIiwiYWN0aXZlIiwiY29udGFpbmVyIiwiZ2V0Q2hpbGRCeU5hbWUiLCJza2VsZXRvbiIsImdldENvbXBvbmVudCIsInNwIiwiU2tlbGV0b24iLCJ2YWx1ZSIsInN0cmluZyIsImJveF92YWwiLCJwZXJjZW50IiwidmFsIiwic2V0UG9zaXRpb24iLCJvYmplY3QiLCJpdGVtIiwic3RhdHVzIiwibm9ybWFsIiwiaWQiLCJpc19zaG93X3RpcHMiLCJkZXNjIiwiUmljaFRleHQiLCJzaXplIiwibGlzdF9zaXplIiwiaGVpZ2h0Iiwic2V0dGluZyIsIml0ZW1fY2xhc3MiLCJzcGFjZV94Iiwic3RhcnRfeSIsInNwYWNlX3kiLCJpdGVtX3dpZHRoIiwiaXRlbV9oZWlnaHQiLCJyb3ciLCJjb2wiLCJuZWVkX2R5bmFtaWMiLCJzY3JvbGxfdmlldyIsImNyZWF0ZVNjcm9sbCIsInYyIiwiU2Nyb2xsVmlld0RpciIsInZlcnRpY2FsIiwiU2Nyb2xsVmlld1N0YXJ0UG9zIiwidG9wIiwicmVnaXN0ZXJFdmVudCIsIm9uIiwiTm9kZSIsIkV2ZW50VHlwZSIsIlRPVUNIX0VORCIsImV2ZW50IiwiZ2FtZV9ydWxlMSIsIlV0aWxzIiwicGxheUJ1dHRvblNvdW5kIiwicG9zIiwidG91Y2giLCJnZXRMb2NhdGlvbiIsInNob3dDb21tb25UaXBzIiwib3Blbkd1aWxkRG9uYXRlV2luZG93IiwiQ29tbW9uQWxlcnQiLCJzaG93SXRlbUFwcGx5IiwiVEkxOE4iLCJyZXdhcmRzIiwicmVxdWVzdERvbmF0ZUJveFJld2FyZHMiLCJteV9ndWlsZF9pbmZvIiwiZ2V0TXlHdWlsZEluZm8iLCJhZGRHbG9iYWxFdmVudCIsIlVwZGF0ZU15SW5mb0V2ZW50Iiwia2V5IiwidXBkYXRlTXlHdWlsZExldiIsIlVwZGF0ZURvbmF0ZUluZm8iLCJ1cGRhdGVEb25hdGVMaXN0U3RhdHVzIiwiVXBkYXRlRG9uYXRlQm94U3RhdHVzIiwiZmluaXNoIiwic2V0VG9TZXR1cFBvc2UiLCJjbGVhclRyYWNrcyIsInNldEFuaW1hdGlvbiIsIlBsYXllckFjdGlvbiIsImFjdGlvbl8zIiwidXBkYXRlRG9uYXRlQm94TGlzdCIsIm9wZW5Sb290V25kIiwiY29uZmlnX2xpc3QiLCJkYXRhX2RvbmF0ZSIsImxpc3QiLCJwdXNoIiwic2V0RGF0YSIsImFjdGl2aXR5X3ZhbHVlIiwiZ2V0RG9uYXRlQWN0aXZpdHlWYWx1ZSIsInByb2dyZXNzIiwiYm94X3N0YXR1cyIsImdldERvbmF0ZUJveFN0YXR1cyIsInRtcF9zdGF0dXMiLCJhY3Rpdml0eSIsInVuX2FjdGl2aXR5IiwiYm94X2FjdGlvbiIsImFjdGlvbl8xIiwiYWN0aW9uXzIiLCJza2VsZXRvbkRhdGEiLCJyZXNfaWQiLCJnZXRFZmZlY3RSZXMiLCJlZmZlY3RfaWQiLCJwYXRoIiwiX3NrZWxldG9uIiwiY3JlYXRlRWZmZWN0IiwibG9hZFJlcyIsInJlcyIsImJpbmQiLCJsZXYiLCJuZXh0X2x2IiwiU3RyaW5nVXRpbCIsInBhcnNlIiwiaXRlbV9saXN0IiwiZ2V0SXRlbUxpc3QiLCJrIiwidXBkYXRlRG9uYXRlU3RhdHVzIiwiY2xvc2VDYWxsQmFjayIsIkRlbGV0ZU1lIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxJQUFJQSxRQUFRLEdBQUdDLE9BQU8sQ0FBQyxVQUFELENBQXRCOztBQUNBLElBQUlDLGVBQWUsR0FBR0QsT0FBTyxDQUFDLGtCQUFELENBQTdCOztBQUNBLElBQUlFLFVBQVUsR0FBR0YsT0FBTyxDQUFDLGFBQUQsQ0FBeEI7O0FBQ0EsSUFBSUcsZ0JBQWdCLEdBQUdILE9BQU8sQ0FBQyxtQkFBRCxDQUE5Qjs7QUFDQSxJQUFJSSxjQUFjLEdBQUdKLE9BQU8sQ0FBQyxpQkFBRCxDQUE1Qjs7QUFDQSxJQUFJSyxVQUFVLEdBQUdMLE9BQU8sQ0FBQyxhQUFELENBQXhCOztBQUNBLElBQUlNLGVBQWUsR0FBR04sT0FBTyxDQUFDLG1CQUFELENBQTdCOztBQUVBLElBQUlPLGlCQUFpQixHQUFHQyxFQUFFLENBQUNDLEtBQUgsQ0FBUztBQUM3QixhQUFTQyxRQURvQjtBQUU3QkMsRUFBQUEsSUFBSSxFQUFFLGdCQUFZO0FBQ2QsU0FBS0MsVUFBTCxHQUFrQmIsUUFBUSxDQUFDYyxh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QUFtQndDLEtBQUssQ0FBQ1MsS0FBTixDQUFZLFVBQVosQ0FBbkIsQ0FESixLQUdJLEtBQUt0QyxJQUFMLENBQVVYLE1BQVYsR0FBbUJpRyxVQUFVLENBQUNDLEtBQVgsQ0FBaUJ2SCxNQUFNLENBQUNnQyxJQUF4QixDQUFuQjtBQUNQLEdBaE40QjtBQWtON0JnRCxFQUFBQSxzQkFBc0IsRUFBRSxrQ0FBWTtBQUNoQyxRQUFJd0MsU0FBUyxHQUFHLEtBQUt6RSxXQUFMLENBQWlCMEUsV0FBakIsRUFBaEI7O0FBQ0EsUUFBSUQsU0FBSixFQUFlO0FBQ1gsV0FBSyxJQUFJRSxDQUFULElBQWNGLFNBQWQsRUFBeUI7QUFDckIsWUFBSWpILENBQUMsR0FBR2lILFNBQVMsQ0FBQ0UsQ0FBRCxDQUFqQjtBQUNBLFlBQUluSCxDQUFDLENBQUNvSCxrQkFBTixFQUNJcEgsQ0FBQyxDQUFDb0gsa0JBQUY7QUFDUDtBQUNKO0FBQ0osR0EzTjRCO0FBNk43QkMsRUFBQUEsYUFBYSxFQUFFLHlCQUFZO0FBQ3ZCLFNBQUt0SixJQUFMLENBQVU2RixxQkFBVixDQUFnQyxLQUFoQzs7QUFDQSxRQUFJLEtBQUtwQixXQUFULEVBQXFCO0FBQ2pCLFdBQUtBLFdBQUwsQ0FBaUI4RSxRQUFqQjtBQUNIOztBQUNELFNBQUs5RSxXQUFMLEdBQW1CLElBQW5CO0FBQ0g7QUFuTzRCLENBQVQsQ0FBeEI7QUF1T0ErRSxNQUFNLENBQUNDLE9BQVAsR0FBaUJ0SyxpQkFBakIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vIEBhdXRob3I6IHNoaXJhaG9Ac3lnLmNvbSjlv4XloassIOWIm+W7uuaooeWdl+eahOS6uuWRmClcclxuLy8gQGRlc2NyaXB0aW9uOlxyXG4vLyAgICAgIOWFrOS8muaNkOeMrumdouadv1xyXG4vLyA8YnIvPkNyZWF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG52YXIgUGF0aFRvb2wgPSByZXF1aXJlKFwicGF0aHRvb2xcIik7XHJcbnZhciBHdWlsZENvbnRyb2xsZXIgPSByZXF1aXJlKFwiZ3VpbGRfY29udHJvbGxlclwiKTtcclxudmFyIEd1aWxkQ29uc3QgPSByZXF1aXJlKFwiZ3VpbGRfY29uc3RcIik7XHJcbnZhciBDb21tb25TY3JvbGxWaWV3ID0gcmVxdWlyZShcImNvbW1vbl9zY3JvbGx2aWV3XCIpO1xyXG52YXIgUm9sZUNvbnRyb2xsZXIgPSByZXF1aXJlKFwicm9sZV9jb250cm9sbGVyXCIpO1xyXG52YXIgR3VpbGRFdmVudCA9IHJlcXVpcmUoXCJndWlsZF9ldmVudFwiKTtcclxudmFyIEd1aWxkRG9uYXRlSXRlbSA9IHJlcXVpcmUoXCJndWlsZF9kb25hdGVfaXRlbVwiKTtcclxuXHJcbnZhciBHdWlsZERvbmF0ZVdpbmRvdyA9IGNjLkNsYXNzKHtcclxuICAgIGV4dGVuZHM6IEJhc2VWaWV3LFxyXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMucHJlZmFiUGF0aCA9IFBhdGhUb29sLmdldFByZWZhYlBhdGgoXCJndWlsZFwiLCBcImd1aWxkX2RvbmF0ZV93aW5kb3dcIik7XHJcbiAgICAgICAgdGhpcy53aW5fdHlwZSA9IFdpblR5cGUuQmlnO1xyXG4gICAgICAgIHRoaXMudmlld1RhZyA9IFNDRU5FX1RBRy5kaWFsb2d1ZTsgXHJcbiAgICAgICAgdGhpcy5jdHJsID0gR3VpbGRDb250cm9sbGVyLmdldEluc3RhbmNlKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IHRoaXMuY3RybC5nZXRNb2RlbCgpO1xyXG4gICAgICAgIHRoaXMucm9sZV92byA9IFJvbGVDb250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0Um9sZVZvKCk7XHJcbiAgICAgICAgdGhpcy5hd2FyZHNfbGlzdCA9IHt9O1xyXG4gICAgfSxcclxuXHJcblxyXG4gICAgb3BlbkNhbGxCYWNrOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5tYWluX3BhbmVsID0gdGhpcy5zZWVrQ2hpbGQoXCJtYWluX3BhbmVsXCIpO1xyXG4gICAgICAgIHRoaXMuY2xvc2VfYnRuID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5tYWluX3BhbmVsLCBcImNsb3NlX2J0blwiKTtcclxuICAgICAgICB0aGlzLmJhY2tncm91bmQgPSB0aGlzLnNlZWtDaGlsZChcImJhY2tncm91bmRcIik7XHJcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kLnNjYWxlID0gRklUX1NDQUxFO1xyXG4gICAgICAgIHRoaXMuZG9uYXRlX2NvbnRhaW5lciA9IHRoaXMuc2Vla0NoaWxkKFwiZG9uYXRlX2NvbnRhaW5lclwiKTtcclxuICAgICAgICB0aGlzLnByb2dyZXNzX2JhciA9IHRoaXMuc2Vla0NoaWxkKFwicHJvZ3Jlc3NfYmFyXCIsIGNjLlByb2dyZXNzQmFyKTtcclxuICAgICAgICB0aGlzLmxldl90aXRsZSA9IHRoaXMuc2Vla0NoaWxkKFwibGV2X3RpdGxlXCIsIGNjLkxhYmVsKTtcclxuICAgICAgICB0aGlzLmV4cF92YWx1ZSA9IHRoaXMuc2Vla0NoaWxkKFwiZXhwX3ZhbHVlXCIsIGNjLkxhYmVsKTtcclxuICAgICAgICB0aGlzLmV4cGxhaW5fYnRuID0gdGhpcy5zZWVrQ2hpbGQoXCJleHBsYWluX2J0blwiKTtcclxuICAgICAgICB0aGlzLnRvdGFsX3dpZHRoID0gdGhpcy5wcm9ncmVzc19iYXIubm9kZS5nZXRDb250ZW50U2l6ZSgpLndpZHRoO1xyXG4gICAgICAgIHRoaXMuc3RhcnRfeCA9IDIwNi0zMjtcclxuXHJcbiAgICAgICAgdmFyIGNvbmZpZyA9IENvbmZpZy5ndWlsZF9kYXRhLmRhdGFfY29uc3QuZGF5X2V4cF9tYXg7XHJcbiAgICAgICAgaWYgKGNvbmZpZykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIENvbmZpZy5ndWlsZF9kYXRhLmRhdGFfZG9uYXRlX2JveCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHYgPSBnZGF0YShcImd1aWxkX2RhdGFcIiwgXCJkYXRhX2RvbmF0ZV9ib3hcIiwgW2ldKTtcclxuICAgICAgICAgICAgICAgIHZhciBhd2FyZHMgPSB0aGlzLnNlZWtDaGlsZChjYy5qcy5mb3JtYXRTdHIoXCJhd2FyZHNfJXNcIiwgTnVtYmVyKGkpKSk7XHJcbiAgICAgICAgICAgICAgICBhd2FyZHMuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBhd2FyZHMuZ2V0Q2hpbGRCeU5hbWUoXCJjb250YWluZXJcIik7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2tlbGV0b24gPSBjb250YWluZXIuZ2V0Q29tcG9uZW50KHNwLlNrZWxldG9uKTtcclxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGF3YXJkcy5nZXRDaGlsZEJ5TmFtZShcInZhbHVlXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZS5zdHJpbmcgPSB2LmJveF92YWw7XHJcbiAgICAgICAgICAgICAgICB2YXIgcGVyY2VudCA9IHYuYm94X3ZhbCAvIGNvbmZpZy52YWw7XHJcbiAgICAgICAgICAgICAgICBhd2FyZHMuc2V0UG9zaXRpb24odGhpcy5zdGFydF94ICsgdGhpcy50b3RhbF93aWR0aCAqIHBlcmNlbnQsIDI3MCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0ge307XHJcbiAgICAgICAgICAgICAgICBvYmplY3QuaXRlbSA9IGF3YXJkcztcclxuICAgICAgICAgICAgICAgIG9iamVjdC5jb250YWluZXIgPSBjb250YWluZXI7XHJcbiAgICAgICAgICAgICAgICBvYmplY3Quc3RhdHVzID0gR3VpbGRDb25zdC5zdGF0dXMubm9ybWFsO1xyXG4gICAgICAgICAgICAgICAgb2JqZWN0LmlkID0gaTtcclxuICAgICAgICAgICAgICAgIG9iamVjdC5jb25maWcgPSB2O1xyXG4gICAgICAgICAgICAgICAgb2JqZWN0LnNrZWxldG9uID0gc2tlbGV0b247XHJcbiAgICAgICAgICAgICAgICBvYmplY3QuaXNfc2hvd190aXBzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXdhcmRzX2xpc3RbaV0gPSBvYmplY3Q7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGVzYyA9IHRoaXMuc2Vla0NoaWxkKFwiZGVzY1wiLCBjYy5SaWNoVGV4dCk7XHJcbiAgICAgICAgdmFyIHNpemUgPSB0aGlzLmRvbmF0ZV9jb250YWluZXIuZ2V0Q29udGVudFNpemUoKTtcclxuICAgICAgICB2YXIgbGlzdF9zaXplID0gY2Muc2l6ZShzaXplLndpZHRoLCBzaXplLmhlaWdodCAtIDEwKTtcclxuICAgICAgICB2YXIgc2V0dGluZyA9IHtcclxuICAgICAgICAgICAgaXRlbV9jbGFzczogR3VpbGREb25hdGVJdGVtLCAgICAgIC8vIOWNleWFg+exu1xyXG4gICAgICAgICAgICBzdGFydF94OiA0LCAgICAgICAgICAgICAgICAgICAgLy8g56ys5LiA5Liq5Y2V5YWD55qEWOi1t+eCuVxyXG4gICAgICAgICAgICBzcGFjZV94OiAwLCAgICAgICAgICAgICAgICAgICAgLy8geOaWueWQkeeahOmXtOmalFxyXG4gICAgICAgICAgICBzdGFydF95OiAwLCAgICAgICAgICAgICAgICAgICAgLy8g56ys5LiA5Liq5Y2V5YWD55qEWei1t+eCuVxyXG4gICAgICAgICAgICBzcGFjZV95OiAtMSwgICAgICAgICAgICAgICAgICAgLy8geeaWueWQkeeahOmXtOmalFxyXG4gICAgICAgICAgICBpdGVtX3dpZHRoOiA2MTQsICAgICAgICAgICAgICAgLy8g5Y2V5YWD55qE5bC65a+4d2lkdGhcclxuICAgICAgICAgICAgaXRlbV9oZWlnaHQ6IDE4NywgICAgICAgICAgICAgIC8vIOWNleWFg+eahOWwuuWvuGhlaWdodFxyXG4gICAgICAgICAgICByb3c6IDAsICAgICAgICAgICAgICAgICAgICAgICAgLy8g6KGM5pWw77yM5L2c55So5LqO5rC05bmz5rua5Yqo57G75Z6LXHJcbiAgICAgICAgICAgIGNvbDogMSwgICAgICAgICAgICAgICAgICAgICAgICAvLyDliJfmlbDvvIzkvZznlKjkuo7lnoLnm7Tmu5rliqjnsbvlnotcclxuICAgICAgICAgICAgbmVlZF9keW5hbWljOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2Nyb2xsX3ZpZXcgPSBuZXcgQ29tbW9uU2Nyb2xsVmlldygpXHJcbiAgICAgICAgdGhpcy5zY3JvbGxfdmlldy5jcmVhdGVTY3JvbGwodGhpcy5kb25hdGVfY29udGFpbmVyLCBjYy52MigwLCAwKSwgU2Nyb2xsVmlld0Rpci52ZXJ0aWNhbCwgU2Nyb2xsVmlld1N0YXJ0UG9zLnRvcCwgbGlzdF9zaXplLCBzZXR0aW5nLCBjYy52MigwLjUsIDAuNSkpXHJcbiAgICB9LFxyXG5cclxuXHJcblxyXG4gICAgcmVnaXN0ZXJFdmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuZXhwbGFpbl9idG4ub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfRU5ELCBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IENvbmZpZy5ndWlsZF9kYXRhLmRhdGFfY29uc3QuZ2FtZV9ydWxlMTtcclxuICAgICAgICAgICAgVXRpbHMucGxheUJ1dHRvblNvdW5kKDEpO1xyXG4gICAgICAgICAgICB2YXIgcG9zID0gZXZlbnQudG91Y2guZ2V0TG9jYXRpb24oKTtcclxuICAgICAgICAgICAgcmVxdWlyZShcInRpcHNfY29udHJvbGxlclwiKS5nZXRJbnN0YW5jZSgpLnNob3dDb21tb25UaXBzKGNvbmZpZy5kZXNjLCBwb3MpO1xyXG4gICAgICAgIH0sIHRoaXMpXHJcbiAgICAgICAgdGhpcy5jbG9zZV9idG4ub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfRU5ELCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3RybC5vcGVuR3VpbGREb25hdGVXaW5kb3coZmFsc2UpO1xyXG4gICAgICAgIH0sIHRoaXMpXHJcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kLm9uKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX0VORCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLmN0cmwub3Blbkd1aWxkRG9uYXRlV2luZG93KGZhbHNlKTtcclxuICAgICAgICB9LCB0aGlzKVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpIGluIHRoaXMuYXdhcmRzX2xpc3QpIHtcclxuICAgICAgICAgICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5hd2FyZHNfbGlzdFtpXTtcclxuICAgICAgICAgICAgb2JqZWN0Lml0ZW0ub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfRU5ELCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuaXNfc2hvd190aXBzID09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIENvbW1vbkFsZXJ0ID0gcmVxdWlyZShcImNvbW1vbmFsZXJ0XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBDb21tb25BbGVydC5zaG93SXRlbUFwcGx5KFV0aWxzLlRJMThOKFwi5b2T5YmN5o2Q54yu5rS76LeD5bqm5aWW5YqxXCIpLCBvYmplY3QuY29uZmlnLnJld2FyZHMsIG51bGwsIFV0aWxzLlRJMThOKFwi56Gu5a6aXCIpLCBudWxsLCBudWxsLCBVdGlscy5USTE4TihcIuWlluWKsVwiKSwgbnVsbCwgbnVsbCwgdHJ1ZSlcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0cmwucmVxdWVzdERvbmF0ZUJveFJld2FyZHMob2JqZWN0LmlkKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIHRoaXMpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5teV9ndWlsZF9pbmZvID09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5teV9ndWlsZF9pbmZvID0gdGhpcy5tb2RlbC5nZXRNeUd1aWxkSW5mbygpO1xyXG4gICAgICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KEd1aWxkRXZlbnQuVXBkYXRlTXlJbmZvRXZlbnQsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09IFwibGV2XCIpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVNeUd1aWxkTGV2KCk7XHJcbiAgICAgICAgICAgIH0sIHRoaXMpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KEd1aWxkRXZlbnQuVXBkYXRlRG9uYXRlSW5mbywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURvbmF0ZUxpc3RTdGF0dXMoKTtcclxuICAgICAgICB9LCB0aGlzKVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5hZGRHbG9iYWxFdmVudChHdWlsZEV2ZW50LlVwZGF0ZURvbmF0ZUJveFN0YXR1cywgZnVuY3Rpb24gKGlkKSB7XHJcbiAgICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0gdGhpcy5hd2FyZHNfbGlzdFtpZF07XHJcbiAgICAgICAgICAgICAgICBpZiAob2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmlzX3Nob3dfdGlwcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnN0YXR1cyA9IEd1aWxkQ29uc3Quc3RhdHVzLmZpbmlzaDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnNrZWxldG9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5za2VsZXRvbi5zZXRUb1NldHVwUG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc2tlbGV0b24uY2xlYXJUcmFja3MoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNrZWxldG9uLnNldEFuaW1hdGlvbigwLCBQbGF5ZXJBY3Rpb24uYWN0aW9uXzMsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZURvbmF0ZUJveExpc3QoKTtcclxuICAgICAgICB9LCB0aGlzKVxyXG4gICAgfSxcclxuXHJcbiAgICBvcGVuUm9vdFduZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBjb25maWdfbGlzdCA9IENvbmZpZy5ndWlsZF9kYXRhLmRhdGFfZG9uYXRlO1xyXG4gICAgICAgIHZhciBsaXN0ID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSBpbiBjb25maWdfbGlzdCkge1xyXG4gICAgICAgICAgICBsaXN0LnB1c2goY29uZmlnX2xpc3RbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNjcm9sbF92aWV3LnNldERhdGEobGlzdCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEb25hdGVCb3hMaXN0KCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVNeUd1aWxkTGV2KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8v5pu05paw5rS76LeD5bqm5a6d566xXHJcbiAgICB1cGRhdGVEb25hdGVCb3hMaXN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGFjdGl2aXR5X3ZhbHVlID0gdGhpcy5tb2RlbC5nZXREb25hdGVBY3Rpdml0eVZhbHVlKCk7XHJcbiAgICAgICAgdGhpcy5leHBfdmFsdWUuc3RyaW5nID0gYWN0aXZpdHlfdmFsdWU7XHJcbiAgICAgICAgdmFyIGNvbmZpZyA9IGdkYXRhKFwiZ3VpbGRfZGF0YVwiLCBcImRhdGFfY29uc3RcIiwgXCJkYXlfZXhwX21heFwiKTtcclxuICAgICAgICBpZiAoY29uZmlnID09IG51bGwpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3NfYmFyLnByb2dyZXNzID0gYWN0aXZpdHlfdmFsdWUgLyBjb25maWcudmFsO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpIGluIHRoaXMuYXdhcmRzX2xpc3QpIHtcclxuICAgICAgICAgICAgdmFyIG9iamVjdCA9IHRoaXMuYXdhcmRzX2xpc3RbaV07XHJcbiAgICAgICAgICAgIHZhciBjb25maWcgPSBvYmplY3QuY29uZmlnO1xyXG4gICAgICAgICAgICB2YXIgYm94X3N0YXR1cyA9IHRoaXMubW9kZWwuZ2V0RG9uYXRlQm94U3RhdHVzKG9iamVjdC5pZCk7XHJcbiAgICAgICAgICAgIHZhciB0bXBfc3RhdHVzID0gR3VpbGRDb25zdC5zdGF0dXMubm9ybWFsO1xyXG4gICAgICAgICAgICBpZiAoYm94X3N0YXR1cyA9PSB0cnVlKVxyXG4gICAgICAgICAgICAgICAgdG1wX3N0YXR1cyA9IEd1aWxkQ29uc3Quc3RhdHVzLmZpbmlzaDtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWN0aXZpdHlfdmFsdWUgPj0gb2JqZWN0LmNvbmZpZy5ib3hfdmFsKVxyXG4gICAgICAgICAgICAgICAgICAgIHRtcF9zdGF0dXMgPSBHdWlsZENvbnN0LnN0YXR1cy5hY3Rpdml0eTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0bXBfc3RhdHVzID0gR3VpbGRDb25zdC5zdGF0dXMudW5fYWN0aXZpdHk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBib3hfYWN0aW9uID0gUGxheWVyQWN0aW9uLmFjdGlvbl8xO1xyXG4gICAgICAgICAgICBpZiAodG1wX3N0YXR1cyA9PSBHdWlsZENvbnN0LnN0YXR1cy5maW5pc2gpXHJcbiAgICAgICAgICAgICAgICBib3hfYWN0aW9uID0gUGxheWVyQWN0aW9uLmFjdGlvbl8zO1xyXG4gICAgICAgICAgICBlbHNlIGlmICh0bXBfc3RhdHVzID09IEd1aWxkQ29uc3Quc3RhdHVzLmFjdGl2aXR5KVxyXG4gICAgICAgICAgICAgICAgYm94X2FjdGlvbiA9IFBsYXllckFjdGlvbi5hY3Rpb25fMjtcclxuXHJcbiAgICAgICAgICAgIGlmICh0bXBfc3RhdHVzID09IEd1aWxkQ29uc3Quc3RhdHVzLmFjdGl2aXR5KVxyXG4gICAgICAgICAgICAgICAgb2JqZWN0LmlzX3Nob3dfdGlwcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBvYmplY3QuaXNfc2hvd190aXBzID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChvYmplY3Quc2tlbGV0b24uc2tlbGV0b25EYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodG1wX3N0YXR1cyAhPSBvYmplY3Quc3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnN0YXR1cyA9IHRtcF9zdGF0dXM7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNrZWxldG9uLnNldEFuaW1hdGlvbigwLCBib3hfYWN0aW9uLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciByZXNfaWQgPSBQYXRoVG9vbC5nZXRFZmZlY3RSZXMob2JqZWN0LmNvbmZpZy5lZmZlY3RfaWQpXHJcbiAgICAgICAgICAgICAgICB2YXIgcGF0aCA9IGNjLmpzLmZvcm1hdFN0cihcInNwaW5lLyVzL2FjdGlvbi5hdGxhc1wiLCByZXNfaWQpXHJcbiAgICAgICAgICAgICAgICB2YXIgX3NrZWxldG9uID0gb2JqZWN0LnNrZWxldG9uXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUVmZmVjdChfc2tlbGV0b24sIHBhdGgsIGJveF9hY3Rpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvL+eUn+aIkOWuneeusVxyXG4gICAgY3JlYXRlRWZmZWN0KF9za2VsZXRvbiwgcGF0aCwgYm94X2FjdGlvbikge1xyXG4gICAgICAgIHRoaXMubG9hZFJlcyhwYXRoLCAoZnVuY3Rpb24gKHJlcykge1xyXG4gICAgICAgICAgICBfc2tlbGV0b24uc2tlbGV0b25EYXRhID0gcmVzO1xyXG4gICAgICAgICAgICBfc2tlbGV0b24uc2V0QW5pbWF0aW9uKDAsIGJveF9hY3Rpb24sIHRydWUpO1xyXG4gICAgICAgIH0pLmJpbmQodGhpcykpXHJcbiAgICB9LFxyXG5cclxuICAgIC8v6K6+572u562J57qn55u45YWzXHJcbiAgICB1cGRhdGVNeUd1aWxkTGV2OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubXlfZ3VpbGRfaW5mbyA9PSBudWxsKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB0aGlzLmxldl90aXRsZS5zdHJpbmcgPSBjYy5qcy5mb3JtYXRTdHIoVXRpbHMuVEkxOE4oXCLlhazkvJrnrYnnuqfvvJolc+e6p1wiKSwgdGhpcy5teV9ndWlsZF9pbmZvLmxldik7XHJcblxyXG4gICAgICAgIHZhciBuZXh0X2x2ID0gdGhpcy5teV9ndWlsZF9pbmZvLmxldiArIDE7XHJcbiAgICAgICAgdmFyIGNvbmZpZyA9IGdkYXRhKFwiZ3VpbGRfZGF0YVwiLCBcImRhdGFfZ3VpbGRfbGV2XCIsIFtuZXh0X2x2XSk7XHJcbiAgICAgICAgaWYgKGNvbmZpZyA9PSBudWxsKVxyXG4gICAgICAgICAgICB0aGlzLmRlc2Muc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLlvZPliY3lt7Lovr7mnIDlpKflgLzvvIFcIik7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLmRlc2Muc3RyaW5nID0gU3RyaW5nVXRpbC5wYXJzZShjb25maWcuZGVzYyk7XHJcbiAgICB9LFxyXG5cclxuICAgIHVwZGF0ZURvbmF0ZUxpc3RTdGF0dXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgaXRlbV9saXN0ID0gdGhpcy5zY3JvbGxfdmlldy5nZXRJdGVtTGlzdCgpO1xyXG4gICAgICAgIGlmIChpdGVtX2xpc3QpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgayBpbiBpdGVtX2xpc3QpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2ID0gaXRlbV9saXN0W2tdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHYudXBkYXRlRG9uYXRlU3RhdHVzKVxyXG4gICAgICAgICAgICAgICAgICAgIHYudXBkYXRlRG9uYXRlU3RhdHVzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGNsb3NlQ2FsbEJhY2s6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmN0cmwub3Blbkd1aWxkRG9uYXRlV2luZG93KGZhbHNlKTtcclxuICAgICAgICBpZiAodGhpcy5zY3JvbGxfdmlldyl7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsX3ZpZXcuRGVsZXRlTWUoKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNjcm9sbF92aWV3ID0gbnVsbFxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEd1aWxkRG9uYXRlV2luZG93OyJdfQ==
|