|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/battle/view/battle_fail_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, '0cf8dcyU05AfbuGwMPgWoCW', 'battle_fail_window');
|
// Scripts/mod/battle/view/battle_fail_window.js
|
|
"use strict";
|
|
// --------------------------------------------------------------------
|
// @author: xxx@syg.com(必填, 创建模块的人员)
|
// @description:
|
// 这里是描述这个窗体的作用的
|
// <br/>Create: 2019-03-28 15:01:58
|
// --------------------------------------------------------------------
|
var PathTool = require("pathtool");
|
|
var RoleController = require("role_controller");
|
|
var BattleController = require("battle_controller");
|
|
var BattleDramaController = require("battle_drama_controller");
|
|
var BattleConst = require("battle_const");
|
|
var BattleEvent = require("battle_event");
|
|
var Battle_failWindow = cc.Class({
|
"extends": BaseView,
|
ctor: function ctor() {
|
this.prefabPath = PathTool.getPrefabPath("battle", "battle_fail_view");
|
this.viewTag = SCENE_TAG.dialogue; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
|
|
this.win_type = WinType.Mini; //是否是全屏窗体 WinType.Full, WinType.Big, WinType.Mini, WinType.Tips
|
|
this.is_full_screen = false;
|
this.fight_type = arguments[0];
|
this.result = arguments[1];
|
this.data = arguments[2];
|
},
|
// 初始化一些配置数据,可以用于声明一些变量之类的
|
initConfig: function initConfig() {
|
this.role_vo = RoleController.getInstance().getRoleVo();
|
this.ctrl = BattleController.getInstance();
|
this.model = this.ctrl.getModel();
|
this.drama_ctrl = BattleDramaController.getInstance();
|
this.jump_ctrl = require("jump_controller").getInstance();
|
this.is_running = false;
|
this.effect_list = {};
|
this.x = 100;
|
},
|
// 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件
|
openCallBack: function openCallBack() {
|
// local sound_id = "b_lose"
|
// if sound_id ~= "" then
|
// AudioManager:getInstance():playMusic(AudioManager.AUDIO_TYPE.BATTLE, sound_id, false)
|
// end
|
this.source_container = this.seekChild("container");
|
this.title_container = this.seekChild("title_container");
|
this.title_width = this.title_container.getContentSize().width;
|
this.title_height = this.title_container.getContentSize().height;
|
this.btn = this.seekChild(this.source_container, "btn");
|
this.special_sk = this.seekChild("title_container", sp.Skeleton);
|
this.background = this.root_wnd.getChildByName("background");
|
this.background.scale = FIT_SCALE;
|
|
var func = function () {
|
this.createButton();
|
this.is_running = false;
|
}.bind(this);
|
|
this.source_container.runAction(cc.sequence(cc.fadeIn(0, 2), cc.callFunc(func)));
|
this.comfirm_btn = this.seekChild("comfirm_btn");
|
this.help_btn = this.seekChild("help_btn");
|
this.time_label_rt = this.seekChild("time_label", cc.RichText);
|
this.harm_btn = this.seekChild("harm_btn");
|
|
if (this.data && this.data.hurt_statistics) {
|
this.harm_btn.active = true;
|
} else {
|
this.harm_btn.active = false;
|
}
|
|
this.handleEffect(true);
|
},
|
// 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
|
registerEvent: function registerEvent() {
|
Utils.onTouchEnd(this.comfirm_btn, function () {
|
this.ctrl.openFailFinishView(false, this.fight_type);
|
}.bind(this), 1);
|
Utils.onTouchEnd(this.harm_btn, function () {
|
if (this.data && Utils.next(this.data) != null) {
|
this.ctrl.openBattleHarmInfoView(true, this.data);
|
}
|
}.bind(this), 1);
|
Utils.onTouchEnd(this.help_btn, function () {
|
this.ctrl.openFailFinishView(false, this.fight_type);
|
this.jump_ctrl.jumpViewByEvtData([16]);
|
}.bind(this), 1);
|
},
|
createButton: function createButton() {
|
var btn_list = [];
|
var base_data = this.drama_ctrl.getModel().getDramaData();
|
var config = Config.battle_act_data.data_get_fail_data;
|
|
if (config && base_data) {
|
var max_dun_id = base_data.max_dun_id;
|
|
for (var i in config) {
|
var v = config[i];
|
|
if (v.open_dungeon <= max_dun_id) {
|
btn_list.push(v);
|
}
|
}
|
}
|
|
if (this.items_list == null) {
|
this.items_list = {};
|
}
|
|
this.clearItems();
|
var length = Math.min(4, btn_list.length);
|
|
var func = function (go_btn, config) {
|
go_btn.on(cc.Node.EventType.TOUCH_END, function () {
|
this.openPanelByConfig(config);
|
this.ctrl.openFailFinishView(false, this.fight_type);
|
}, this);
|
}.bind(this);
|
|
for (var i = 0; i < length; i++) {
|
var config = btn_list[i];
|
|
if (config) {
|
var obj = {};
|
obj.btn = this.seekChild("btn_" + config.val_key);
|
obj.img = obj.btn.getComponent(cc.Sprite);
|
obj.label = this.seekChild(obj.btn, "label", cc.Label);
|
this.loadRes(PathTool.getUIIconPath("battlefail", config.icon), function (bg_sf) {
|
obj.img.spriteFrame = bg_sf;
|
}.bind(this));
|
obj.label.string = config.icon_name;
|
this.items_list[i] = obj;
|
}
|
|
var go_btn = this.items_list[i].btn;
|
var btn_label = this.items_list[i].label;
|
|
if (go_btn) {
|
go_btn.active = true;
|
;
|
func(go_btn, config);
|
}
|
|
if (btn_label) {
|
btn_label.string = config.icon_name;
|
}
|
}
|
|
this.updateTimer();
|
},
|
updateTimer: function updateTimer() {
|
var time = 5;
|
|
var call_back = function () {
|
time = time - 1;
|
var new_time = Math.ceil(time);
|
var str = new_time + Utils.TI18N("秒后关闭");
|
|
if (this.time_label_rt) {
|
this.time_label_rt.string = str;
|
}
|
|
if (new_time <= 0) {
|
gcore.Timer.del("fail_result_timer");
|
this.ctrl.openFailFinishView(false, this.fight_type);
|
}
|
}.bind(this);
|
|
gcore.Timer.set(call_back, 1000, -1, "fail_result_timer");
|
},
|
handleEffect: function handleEffect(status) {
|
if (status == false) {
|
if (this.special_sk) {
|
this.special_sk.setToSetupPose();
|
this.special_sk.clearTracks();
|
this.special_sk.node.active = false;
|
}
|
} else {
|
if (this.special_sk) {
|
this.special_sk.node.active = true;
|
var res = cc.js.formatStr("spine/%s/action.atlas", PathTool.getEffectRes(104));
|
this.loadRes(res, function (res_object) {
|
this.special_sk.skeletonData = res_object;
|
this.special_sk.setAnimation(1, PlayerAction.action, false);
|
}.bind(this));
|
}
|
}
|
},
|
clearItems: function clearItems() {
|
if (this.items_list) {
|
for (var k in this.items_list) {
|
var v = this.items_list[k];
|
|
if (v.btn) {
|
v.btn.active = false;
|
}
|
}
|
}
|
},
|
openPanelByConfig: function openPanelByConfig(config) {
|
if (config.val_key == BattleConst.JumpType.Summon) this.jump_ctrl.jumpViewByEvtData([1]);else if (config.val_key == BattleConst.JumpType.HeroBag) this.jump_ctrl.jumpViewByEvtData([19]);else if (config.val_key == BattleConst.JumpType.Forge) this.jump_ctrl.jumpViewByEvtData([26]);else if (config.val_key == BattleConst.JumpType.Hallows) this.jump_ctrl.jumpViewByEvtData([20]);
|
},
|
// 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了
|
openRootWnd: function openRootWnd(params) {},
|
// 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
|
closeCallBack: function closeCallBack() {
|
// //联盟战战败有奖励需要展示
|
// if (this.fight_type == BattleConst.Fight_Type.GuildWar && this.data && this.data.item_rewards) {
|
// var items = {};
|
// for (var i in this.data.item_rewards) {
|
// var v = this.data.item_rewards[i];
|
// items[i] = {};
|
// items[i].bid = v.bid;
|
// items[i].num = v.num;
|
// }
|
// require("mainui_controller").getInstance().openGetItemView(true, items, 0, { is_backpack: true });
|
// }
|
gcore.Timer.del("fail_result_timer");
|
this.handleEffect(false);
|
|
if (this.model.getBattleScene() && this.ctrl.getIsSameBattleType(this.fight_type)) {
|
var data = {
|
combat_type: this.fight_type,
|
result: this.result
|
};
|
this.model.result(data, null);
|
}
|
|
this.ctrl.openFailFinishView(false, this.fight_type);
|
gcore.GlobalEvent.fire(BattleEvent.CLOSE_RESULT_VIEW, this.fight_type);
|
}
|
});
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxiYXR0bGVcXHZpZXdcXGJhdHRsZV9mYWlsX3dpbmRvdy5qcyJdLCJuYW1lcyI6WyJQYXRoVG9vbCIsInJlcXVpcmUiLCJSb2xlQ29udHJvbGxlciIsIkJhdHRsZUNvbnRyb2xsZXIiLCJCYXR0bGVEcmFtYUNvbnRyb2xsZXIiLCJCYXR0bGVDb25zdCIsIkJhdHRsZUV2ZW50IiwiQmF0dGxlX2ZhaWxXaW5kb3ciLCJjYyIsIkNsYXNzIiwiQmFzZVZpZXciLCJjdG9yIiwicHJlZmFiUGF0aCIsImdldFByZWZhYlBhdGgiLCJ2aWV3VGFnIiwiU0NFTkVfVEFHIiwiZGlhbG9ndWUiLCJ3aW5fdHlwZSIsIldpblR5cGUiLCJNaW5pIiwiaXNfZnVsbF9zY3JlZW4iLCJmaWdodF90eXBlIiwiYXJndW1lbnRzIiwicmVzdWx0IiwiZGF0YSIsImluaXRDb25maWciLCJyb2xlX3ZvIiwiZ2V0SW5zdGFuY2UiLCJnZXRSb2xlVm8iLCJjdHJsIiwibW9kZWwiLCJnZXRNb2RlbCIsImRyYW1hX2N0cmwiLCJqdW1wX2N0cmwiLCJpc19ydW5uaW5nIiwiZWZmZWN0X2xpc3QiLCJ4Iiwib3BlbkNhbGxCYWNrIiwic291cmNlX2NvbnRhaW5lciIsInNlZWtDaGlsZCIsInRpdGxlX2NvbnRhaW5lciIsInRpdGxlX3dpZHRoIiwiZ2V0Q29udGVudFNpemUiLCJ3aWR0aCIsInRpdGxlX2hlaWdodCIsImhlaWdodCIsImJ0biIsInNwZWNpYWxfc2siLCJzcCIsIlNrZWxldG9uIiwiYmFja2dyb3VuZCIsInJvb3Rfd25kIiwiZ2V0Q2hpbGRCeU5hbWUiLCJzY2FsZSIsIkZJVF9TQ0FMRSIsImZ1bmMiLCJjcmVhdGVCdXR0b24iLCJiaW5kIiwicnVuQWN0aW9uIiwic2VxdWVuY2UiLCJmYWRlSW4iLCJjYWxsRnVuYyIsImNvbWZpcm1fYnRuIiwiaGVscF9idG4iLCJ0aW1lX2xhYmVsX3J0IiwiUmljaFRleHQiLCJoYXJtX2J0biIsImh1cnRfc3RhdGlzdGljcyIsImFjdGl2ZSIsImhhbmRsZUVmZmVjdCIsInJlZ2lzdGVyRXZlbnQiLCJVdGlscyIsIm9uVG91Y2hFbmQiLCJvcGVuRmFpbEZpbmlzaFZpZXciLCJuZXh0Iiwib3BlbkJhdHRsZUhhcm1JbmZvVmlldyIsImp1bXBWaWV3QnlFdnREYXRhIiwiYnRuX2xpc3QiLCJiYXNlX2RhdGEiLCJnZXREcmFtYURhdGEiLCJjb25maWciLCJDb25maWciLCJiYXR0bGVfYWN0X2RhdGEiLCJkYXRhX2dldF9mYWlsX2RhdGEiLCJtYXhfZHVuX2lkIiwiaSIsInYiLCJvcGVuX2R1bmdlb24iLCJwdXNoIiwiaXRlbXNfbGlzdCIsImNsZWFySXRlbXMiLCJsZW5ndGgiLCJNYXRoIiwibWluIiwiZ29fYnRuIiwib24iLCJOb2RlIiwiRXZlbnRUeXBlIiwiVE9VQ0hfRU5EIiwib3BlblBhbmVsQnlDb25maWciLCJvYmoiLCJ2YWxfa2V5IiwiaW1nIiwiZ2V0Q29tcG9uZW50IiwiU3ByaXRlIiwibGFiZWwiLCJMYWJlbCIsImxvYWRSZXMiLCJnZXRVSUljb25QYXRoIiwiaWNvbiIsImJnX3NmIiwic3ByaXRlRnJhbWUiLCJzdHJpbmciLCJpY29uX25hbWUiLCJidG5fbGFiZWwiLCJ1cGRhdGVUaW1lciIsInRpbWUiLCJjYWxsX2JhY2siLCJuZXdfdGltZSIsImNlaWwiLCJzdHIiLCJUSTE4TiIsImdjb3JlIiwiVGltZXIiLCJkZWwiLCJzZXQiLCJzdGF0dXMiLCJzZXRUb1NldHVwUG9zZSIsImNsZWFyVHJhY2tzIiwibm9kZSIsInJlcyIsImpzIiwiZm9ybWF0U3RyIiwiZ2V0RWZmZWN0UmVzIiwicmVzX29iamVjdCIsInNrZWxldG9uRGF0YSIsInNldEFuaW1hdGlvbiIsIlBsYXllckFjdGlvbiIsImFjdGlvbiIsImsiLCJKdW1wVHlwZSIsIlN1bW1vbiIsIkhlcm9CYWciLCJGb3JnZSIsIkhhbGxvd3MiLCJvcGVuUm9vdFduZCIsInBhcmFtcyIsImNsb3NlQ2FsbEJhY2siLCJnZXRCYXR0bGVTY2VuZSIsImdldElzU2FtZUJhdHRsZVR5cGUiLCJjb21iYXRfdHlwZSIsIkdsb2JhbEV2ZW50IiwiZmlyZSIsIkNMT1NFX1JFU1VMVF9WSUVXIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLFFBQVEsR0FBR0MsT0FBTyxDQUFDLFVBQUQsQ0FBdEI7O0FBQ0EsSUFBSUMsY0FBYyxHQUFHRCxPQUFPLENBQUMsaUJBQUQsQ0FBNUI7O0FBQ0EsSUFBSUUsZ0JBQWdCLEdBQUdGLE9BQU8sQ0FBQyxtQkFBRCxDQUE5Qjs7QUFDQSxJQUFJRyxxQkFBcUIsR0FBR0gsT0FBTyxDQUFDLHlCQUFELENBQW5DOztBQUNBLElBQUlJLFdBQVcsR0FBR0osT0FBTyxDQUFDLGNBQUQsQ0FBekI7O0FBQ0EsSUFBSUssV0FBVyxHQUFHTCxPQUFPLENBQUMsY0FBRCxDQUF6Qjs7QUFFQSxJQUFJTSxpQkFBaUIsR0FBR0MsRUFBRSxDQUFDQyxLQUFILENBQVM7QUFDN0IsYUFBU0MsUUFEb0I7QUFFN0JDLEVBQUFBLElBQUksRUFBRSxnQkFBWTtBQUNkLFNBQUtDLFVBQUwsR0FBa0JaLFFBQVEsQ0FBQ2EsYUFBVCxDQUF1QixRQUF2QixFQUFpQyxrQkFBakMsQ0FBbEI7QUFDQSxTQUFLQyxPQUFMLEdBQWVDLFNBQVMsQ0FBQ0MsUUFBekIsQ0FGYyxDQUVvQzs7QUFDbEQsU0FBS0MsUUFBTCxHQUFnQkMsT0FBTyxDQUFDQyxJQUF4QixDQUhjLENBRzhCOztBQUM1QyxTQUFLQyxjQUFMLEdBQXNCLEtBQXRCO0FBRUEsU0FBS0MsVUFBTCxHQUFrQkMsU0FBUyxDQUFDLENBQUQsQ0FBM0I7QUFDQSxTQUFLQyxNQUFMLEdBQWNELFNBQVMsQ0FBQyxDQUFELENBQXZCO0FBQ0EsU0FBS0UsSUFBTCxHQUFZRixTQUFTLENBQUMsQ0FBRCxDQUFyQjtBQUNILEdBWDRCO0FBYTdCO0FBQ0FHLEVBQUFBLFVBQVUsRUFBRSxzQkFBWTtBQUNwQixTQUFLQyxPQUFMLEdBQWV4Qixj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QUFrQmhHLFdBQVcsQ0FBQ3VJLFFBQVosQ0FBcUJJLE9BQTNDLEVBQ0QsS0FBSy9HLFNBQUwsQ0FBZTJDLGlCQUFmLENBQWlDLENBQUMsRUFBRCxDQUFqQztBQUNQLEdBMUw0QjtBQTRMN0I7QUFDQXFFLEVBQUFBLFdBQVcsRUFBRSxxQkFBVUMsTUFBVixFQUFrQixDQUU5QixDQS9MNEI7QUFpTTdCO0FBQ0FDLEVBQUFBLGFBQWEsRUFBRSx5QkFBWTtBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUF6QixJQUFBQSxLQUFLLENBQUNDLEtBQU4sQ0FBWUMsR0FBWixDQUFnQixtQkFBaEI7QUFDQSxTQUFLdkQsWUFBTCxDQUFrQixLQUFsQjs7QUFFQSxRQUFJLEtBQUt2QyxLQUFMLENBQVdzSCxjQUFYLE1BQStCLEtBQUt2SCxJQUFMLENBQVV3SCxtQkFBVixDQUE4QixLQUFLaEksVUFBbkMsQ0FBbkMsRUFBbUY7QUFDL0UsVUFBSUcsSUFBSSxHQUFHO0FBQUU4SCxRQUFBQSxXQUFXLEVBQUUsS0FBS2pJLFVBQXBCO0FBQWdDRSxRQUFBQSxNQUFNLEVBQUUsS0FBS0E7QUFBN0MsT0FBWDtBQUNBLFdBQUtPLEtBQUwsQ0FBV1AsTUFBWCxDQUFrQkMsSUFBbEIsRUFBd0IsSUFBeEI7QUFDSDs7QUFDRCxTQUFLSyxJQUFMLENBQVU0QyxrQkFBVixDQUE2QixLQUE3QixFQUFvQyxLQUFLcEQsVUFBekM7QUFDQXFHLElBQUFBLEtBQUssQ0FBQzZCLFdBQU4sQ0FBa0JDLElBQWxCLENBQXVCbEosV0FBVyxDQUFDbUosaUJBQW5DLEVBQXNELEtBQUtwSSxVQUEzRDtBQUVIO0FBMU40QixDQUFULENBQXhCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogeHh4QHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXG4vLyBAZGVzY3JpcHRpb246XG4vLyAgICAg6L+Z6YeM5piv5o+P6L+w6L+Z5Liq56qX5L2T55qE5L2c55So55qEXG4vLyA8YnIvPkNyZWF0ZTogMjAxOS0wMy0yOCAxNTowMTo1OFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnZhciBQYXRoVG9vbCA9IHJlcXVpcmUoXCJwYXRodG9vbFwiKTtcbnZhciBSb2xlQ29udHJvbGxlciA9IHJlcXVpcmUoXCJyb2xlX2NvbnRyb2xsZXJcIik7XG52YXIgQmF0dGxlQ29udHJvbGxlciA9IHJlcXVpcmUoXCJiYXR0bGVfY29udHJvbGxlclwiKTtcbnZhciBCYXR0bGVEcmFtYUNvbnRyb2xsZXIgPSByZXF1aXJlKFwiYmF0dGxlX2RyYW1hX2NvbnRyb2xsZXJcIik7XG52YXIgQmF0dGxlQ29uc3QgPSByZXF1aXJlKFwiYmF0dGxlX2NvbnN0XCIpO1xudmFyIEJhdHRsZUV2ZW50ID0gcmVxdWlyZShcImJhdHRsZV9ldmVudFwiKTtcblxudmFyIEJhdHRsZV9mYWlsV2luZG93ID0gY2MuQ2xhc3Moe1xuICAgIGV4dGVuZHM6IEJhc2VWaWV3LFxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wcmVmYWJQYXRoID0gUGF0aFRvb2wuZ2V0UHJlZmFiUGF0aChcImJhdHRsZVwiLCBcImJhdHRsZV9mYWlsX3ZpZXdcIik7XG4gICAgICAgIHRoaXMudmlld1RhZyA9IFNDRU5FX1RBRy5kaWFsb2d1ZTsgICAgICAgICAgICAgICAgLy/or6XnqpfkvZPmiYDlsZ51aeWxgue6pyzlhajlsY91aemcgOimgeWcqHVp5bGCLOmdnuWFqOWxj3Vp5ZyoZGlhbG9ndWXlsYIs6L+Z5Liq6KaB5rOo5oSPXG4gICAgICAgIHRoaXMud2luX3R5cGUgPSBXaW5UeXBlLk1pbmk7ICAgICAgICAgICAgICAgLy/mmK/lkKbmmK/lhajlsY/nqpfkvZMgIFdpblR5cGUuRnVsbCwgV2luVHlwZS5CaWcsIFdpblR5cGUuTWluaSwgV2luVHlwZS5UaXBzXG4gICAgICAgIHRoaXMuaXNfZnVsbF9zY3JlZW4gPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmZpZ2h0X3R5cGUgPSBhcmd1bWVudHNbMF07XG4gICAgICAgIHRoaXMucmVzdWx0ID0gYXJndW1lbnRzWzFdO1xuICAgICAgICB0aGlzLmRhdGEgPSBhcmd1bWVudHNbMl07XG4gICAgfSxcblxuICAgIC8vIOWIneWni+WMluS4gOS6m+mFjee9ruaVsOaNrizlj6/ku6XnlKjkuo7lo7DmmI7kuIDkupvlj5jph4/kuYvnsbvnmoRcbiAgICBpbml0Q29uZmlnOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucm9sZV92byA9IFJvbGVDb250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0Um9sZVZvKCk7XG4gICAgICAgIHRoaXMuY3RybCA9IEJhdHRsZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAgICAgdGhpcy5tb2RlbCA9IHRoaXMuY3RybC5nZXRNb2RlbCgpO1xuICAgICAgICB0aGlzLmRyYW1hX2N0cmwgPSBCYXR0bGVEcmFtYUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAgICAgdGhpcy5qdW1wX2N0cmwgPSByZXF1aXJlKFwianVtcF9jb250cm9sbGVyXCIpLmdldEluc3RhbmNlKCk7XG5cbiAgICAgICAgdGhpcy5pc19ydW5uaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZWZmZWN0X2xpc3QgPSB7fTtcbiAgICAgICAgdGhpcy54ID0gMTAwO1xuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI7nmoTlm57osIMs5Y+v5Lul5Zyo6L+Z6YeM5o2V6I6355u45YWz6IqC54K55oiW6ICF57uE5Lu2XG4gICAgb3BlbkNhbGxCYWNrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIGxvY2FsIHNvdW5kX2lkID0gXCJiX2xvc2VcIlxuICAgICAgICAvLyBpZiBzb3VuZF9pZCB+PSBcIlwiIHRoZW5cbiAgICAgICAgLy8gICAgIEF1ZGlvTWFuYWdlcjpnZXRJbnN0YW5jZSgpOnBsYXlNdXNpYyhBdWRpb01hbmFnZXIuQVVESU9fVFlQRS5CQVRUTEUsIHNvdW5kX2lkLCBmYWxzZSlcbiAgICAgICAgLy8gZW5kXG4gICAgICAgIHRoaXMuc291cmNlX2NvbnRhaW5lciA9IHRoaXMuc2Vla0NoaWxkKFwiY29udGFpbmVyXCIpO1xuICAgICAgICB0aGlzLnRpdGxlX2NvbnRhaW5lciA9IHRoaXMuc2Vla0NoaWxkKFwidGl0bGVfY29udGFpbmVyXCIpO1xuICAgICAgICB0aGlzLnRpdGxlX3dpZHRoID0gdGhpcy50aXRsZV9jb250YWluZXIuZ2V0Q29udGVudFNpemUoKS53aWR0aDtcbiAgICAgICAgdGhpcy50aXRsZV9oZWlnaHQgPSB0aGlzLnRpdGxlX2NvbnRhaW5lci5nZXRDb250ZW50U2l6ZSgpLmhlaWdodDtcbiAgICAgICAgdGhpcy5idG4gPSB0aGlzLnNlZWtDaGlsZCh0aGlzLnNvdXJjZV9jb250YWluZXIsIFwiYnRuXCIpO1xuICAgICAgICB0aGlzLnNwZWNpYWxfc2sgPSB0aGlzLnNlZWtDaGlsZChcInRpdGxlX2NvbnRhaW5lclwiLCBzcC5Ta2VsZXRvbik7XG5cbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kID0gdGhpcy5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcImJhY2tncm91bmRcIik7XG4gICAgICAgIHRoaXMuYmFja2dyb3VuZC5zY2FsZSA9IEZJVF9TQ0FMRTtcblxuICAgICAgICB2YXIgZnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQnV0dG9uKClcbiAgICAgICAgICAgIHRoaXMuaXNfcnVubmluZyA9IGZhbHNlO1xuICAgICAgICB9LmJpbmQodGhpcylcbiAgICAgICAgdGhpcy5zb3VyY2VfY29udGFpbmVyLnJ1bkFjdGlvbihjYy5zZXF1ZW5jZShjYy5mYWRlSW4oMCwgMiksIGNjLmNhbGxGdW5jKGZ1bmMpKSlcblxuICAgICAgICB0aGlzLmNvbWZpcm1fYnRuID0gdGhpcy5zZWVrQ2hpbGQoXCJjb21maXJtX2J0blwiKVxuICAgICAgICB0aGlzLmhlbHBfYnRuID0gdGhpcy5zZWVrQ2hpbGQoXCJoZWxwX2J0blwiKVxuXG4gICAgICAgIHRoaXMudGltZV9sYWJlbF9ydCA9IHRoaXMuc2Vla0NoaWxkKFwidGltZV9sYWJlbFwiLCBjYy5SaWNoVGV4dCk7XG4gICAgICAgIHRoaXMuaGFybV9idG4gPSB0aGlzLnNlZWtDaGlsZChcImhhcm1fYnRuXCIpO1xuXG4gICAgICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLmh1cnRfc3RhdGlzdGljcykge1xuICAgICAgICAgICAgdGhpcy5oYXJtX2J0bi5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oYXJtX2J0bi5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFuZGxlRWZmZWN0KHRydWUpO1xuICAgIH0sXG5cbiAgICAvLyDms6jlhozkuovku7bnm5HlkKznmoTmjqXlj6Ms5LiN6ZyA6KaB5omL5Yqo6LCD55SoLOWmguaenOaYr+S9v+eUqGdjb3JlLkdsb2JhbEV2ZW5055uR5ZCsLOWPr+S7peebtOaOpeiwg+eUqGFkZEdsb2JhbEV2ZW50XG4gICAgcmVnaXN0ZXJFdmVudDogZnVuY3Rpb24gKCkge1xuICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMuY29tZmlybV9idG4sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuY3RybC5vcGVuRmFpbEZpbmlzaFZpZXcoZmFsc2UsIHRoaXMuZmlnaHRfdHlwZSlcbiAgICAgICAgfS5iaW5kKHRoaXMpLCAxKVxuICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMuaGFybV9idG4sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGEgJiYgVXRpbHMubmV4dCh0aGlzLmRhdGEpICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN0cmwub3BlbkJhdHRsZUhhcm1JbmZvVmlldyh0cnVlLCB0aGlzLmRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LmJpbmQodGhpcyksIDEpXG4gICAgICAgIFV0aWxzLm9uVG91Y2hFbmQodGhpcy5oZWxwX2J0biwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5jdHJsLm9wZW5GYWlsRmluaXNoVmlldyhmYWxzZSwgdGhpcy5maWdodF90eXBlKVxuICAgICAgICAgICAgdGhpcy5qdW1wX2N0cmwuanVtcFZpZXdCeUV2dERhdGEoWzE2XSk7XG4gICAgICAgIH0uYmluZCh0aGlzKSwgMSlcbiAgICB9LFxuXG4gICAgY3JlYXRlQnV0dG9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBidG5fbGlzdCA9IFtdO1xuICAgICAgICB2YXIgYmFzZV9kYXRhID0gdGhpcy5kcmFtYV9jdHJsLmdldE1vZGVsKCkuZ2V0RHJhbWFEYXRhKCk7XG5cbiAgICAgICAgdmFyIGNvbmZpZyA9IENvbmZpZy5iYXR0bGVfYWN0X2RhdGEuZGF0YV9nZXRfZmFpbF9kYXRhO1xuICAgICAgICBpZiAoY29uZmlnICYmIGJhc2VfZGF0YSkge1xuICAgICAgICAgICAgdmFyIG1heF9kdW5faWQgPSBiYXNlX2RhdGEubWF4X2R1bl9pZDtcbiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgdmFyIHYgPSBjb25maWdbaV07XG4gICAgICAgICAgICAgICAgaWYgKHYub3Blbl9kdW5nZW9uIDw9IG1heF9kdW5faWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYnRuX2xpc3QucHVzaCh2KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXRlbXNfbGlzdCA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW1zX2xpc3QgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsZWFySXRlbXMoKTtcbiAgICAgICAgdmFyIGxlbmd0aCA9IE1hdGgubWluKDQsIGJ0bl9saXN0Lmxlbmd0aCk7XG4gICAgICAgIHZhciBmdW5jID0gZnVuY3Rpb24gKGdvX2J0biwgY29uZmlnKSB7XG4gICAgICAgICAgICBnb19idG4ub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfRU5ELCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuUGFuZWxCeUNvbmZpZyhjb25maWcpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3RybC5vcGVuRmFpbEZpbmlzaFZpZXcoZmFsc2UsIHRoaXMuZmlnaHRfdHlwZSk7XG4gICAgICAgICAgICB9LCB0aGlzKVxuICAgICAgICB9LmJpbmQodGhpcylcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IGJ0bl9saXN0W2ldO1xuICAgICAgICAgICAgaWYgKGNvbmZpZykge1xuICAgICAgICAgICAgICAgIHZhciBvYmogPSB7fTtcbiAgICAgICAgICAgICAgICBvYmouYnRuID0gdGhpcy5zZWVrQ2hpbGQoXCJidG5fXCIgKyBjb25maWcudmFsX2tleSk7XG4gICAgICAgICAgICAgICAgb2JqLmltZyA9IG9iai5idG4uZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSk7XG4gICAgICAgICAgICAgICAgb2JqLmxhYmVsID0gdGhpcy5zZWVrQ2hpbGQob2JqLmJ0biwgXCJsYWJlbFwiLCBjYy5MYWJlbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkUmVzKFBhdGhUb29sLmdldFVJSWNvblBhdGgoXCJiYXR0bGVmYWlsXCIsIGNvbmZpZy5pY29uKSwgZnVuY3Rpb24gKGJnX3NmKSB7XG4gICAgICAgICAgICAgICAgICAgIG9iai5pbWcuc3ByaXRlRnJhbWUgPSBiZ19zZjtcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICAgICAgICAgIG9iai5sYWJlbC5zdHJpbmcgPSBjb25maWcuaWNvbl9uYW1lO1xuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNfbGlzdFtpXSA9IG9iajtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBnb19idG4gPSB0aGlzLml0ZW1zX2xpc3RbaV0uYnRuO1xuICAgICAgICAgICAgdmFyIGJ0bl9sYWJlbCA9IHRoaXMuaXRlbXNfbGlzdFtpXS5sYWJlbDtcbiAgICAgICAgICAgIGlmIChnb19idG4pIHtcbiAgICAgICAgICAgICAgICBnb19idG4uYWN0aXZlID0gdHJ1ZTs7XG4gICAgICAgICAgICAgICAgZnVuYyhnb19idG4sIGNvbmZpZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYnRuX2xhYmVsKSB7XG4gICAgICAgICAgICAgICAgYnRuX2xhYmVsLnN0cmluZyA9IGNvbmZpZy5pY29uX25hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVUaW1lcigpO1xuICAgIH0sXG5cbiAgICB1cGRhdGVUaW1lcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdGltZSA9IDU7XG4gICAgICAgIHZhciBjYWxsX2JhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aW1lID0gdGltZSAtIDFcbiAgICAgICAgICAgIHZhciBuZXdfdGltZSA9IE1hdGguY2VpbCh0aW1lKTtcbiAgICAgICAgICAgIHZhciBzdHIgPSBuZXdfdGltZSArIFV0aWxzLlRJMThOKFwi56eS5ZCO5YWz6ZetXCIpO1xuICAgICAgICAgICAgaWYgKHRoaXMudGltZV9sYWJlbF9ydCkge1xuICAgICAgICAgICAgICAgIHRoaXMudGltZV9sYWJlbF9ydC5zdHJpbmcgPSBzdHI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmV3X3RpbWUgPD0gMCkge1xuICAgICAgICAgICAgICAgIGdjb3JlLlRpbWVyLmRlbChcImZhaWxfcmVzdWx0X3RpbWVyXCIpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3RybC5vcGVuRmFpbEZpbmlzaFZpZXcoZmFsc2UsIHRoaXMuZmlnaHRfdHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0uYmluZCh0aGlzKVxuICAgICAgICBnY29yZS5UaW1lci5zZXQoY2FsbF9iYWNrLCAxMDAwLCAtMSwgXCJmYWlsX3Jlc3VsdF90aW1lclwiKTtcbiAgICB9LFxuXG4gICAgaGFuZGxlRWZmZWN0OiBmdW5jdGlvbiAoc3RhdHVzKSB7XG4gICAgICAgIGlmIChzdGF0dXMgPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNwZWNpYWxfc2spIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNwZWNpYWxfc2suc2V0VG9TZXR1cFBvc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNwZWNpYWxfc2suY2xlYXJUcmFja3MoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNwZWNpYWxfc2subm9kZS5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNwZWNpYWxfc2spIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNwZWNpYWxfc2subm9kZS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHZhciByZXMgPSBjYy5qcy5mb3JtYXRTdHIoXCJzcGluZS8lcy9hY3Rpb24uYXRsYXNcIiwgUGF0aFRvb2wuZ2V0RWZmZWN0UmVzKDEwNCkpXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkUmVzKHJlcywgZnVuY3Rpb24gKHJlc19vYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGVjaWFsX3NrLnNrZWxldG9uRGF0YSA9IHJlc19vYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BlY2lhbF9zay5zZXRBbmltYXRpb24oMSwgUGxheWVyQWN0aW9uLmFjdGlvbiwgZmFsc2UpXG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIGNsZWFySXRlbXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXRlbXNfbGlzdCkge1xuICAgICAgICAgICAgZm9yICh2YXIgayBpbiB0aGlzLml0ZW1zX2xpc3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgdiA9IHRoaXMuaXRlbXNfbGlzdFtrXTtcbiAgICAgICAgICAgICAgICBpZiAodi5idG4pIHtcbiAgICAgICAgICAgICAgICAgICAgdi5idG4uYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIG9wZW5QYW5lbEJ5Q29uZmlnOiBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcudmFsX2tleSA9PSBCYXR0bGVDb25zdC5KdW1wVHlwZS5TdW1tb24pXG4gICAgICAgICAgICB0aGlzLmp1bXBfY3RybC5qdW1wVmlld0J5RXZ0RGF0YShbMV0pXG4gICAgICAgIGVsc2UgaWYgKGNvbmZpZy52YWxfa2V5ID09IEJhdHRsZUNvbnN0Lkp1bXBUeXBlLkhlcm9CYWcpXG4gICAgICAgICAgICB0aGlzLmp1bXBfY3RybC5qdW1wVmlld0J5RXZ0RGF0YShbMTldKVxuICAgICAgICBlbHNlIGlmIChjb25maWcudmFsX2tleSA9PSBCYXR0bGVDb25zdC5KdW1wVHlwZS5Gb3JnZSlcbiAgICAgICAgICAgIHRoaXMuanVtcF9jdHJsLmp1bXBWaWV3QnlFdnREYXRhKFsyNl0pXG4gICAgICAgIGVsc2UgaWYgKGNvbmZpZy52YWxfa2V5ID09IEJhdHRsZUNvbnN0Lkp1bXBUeXBlLkhhbGxvd3MpXG4gICAgICAgICAgICB0aGlzLmp1bXBfY3RybC5qdW1wVmlld0J5RXZ0RGF0YShbMjBdKVxuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI4s5re75Yqg5Yiw5a+55bqU5Li76IqC54K55LmL5ZCO55qE5Zue6LCDLOS5n+WwseaYr+S4gOS4queql+S9k+eahOato+W8j+WFpeWPoyzlj6/ku6Xorr7nva7kuIDkupvmlbDmja7kuoZcbiAgICBvcGVuUm9vdFduZDogZnVuY3Rpb24gKHBhcmFtcykge1xuXG4gICAgfSxcblxuICAgIC8vIOWFs+mXreeql+S9k+WbnuiwgyzpnIDopoHlnKjov5nph4zosIPnlKjor6XnqpfkvZPmiYDlsZ5jb250cm9sbGVy55qEY2xvc2Xmlrnms5XmsqHnlKjkuo7nva7nqbror6XnqpfkvZPlrp7kvovlr7nosaFcbiAgICBjbG9zZUNhbGxCYWNrOiBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgLy8gLy/ogZTnm5/miJjmiJjotKXmnInlpZblirHpnIDopoHlsZXnpLpcbiAgICAgICAgLy8gaWYgKHRoaXMuZmlnaHRfdHlwZSA9PSBCYXR0bGVDb25zdC5GaWdodF9UeXBlLkd1aWxkV2FyICYmIHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEuaXRlbV9yZXdhcmRzKSB7XG4gICAgICAgIC8vICAgICB2YXIgaXRlbXMgPSB7fTtcbiAgICAgICAgLy8gICAgIGZvciAodmFyIGkgaW4gdGhpcy5kYXRhLml0ZW1fcmV3YXJkcykge1xuICAgICAgICAvLyAgICAgICAgIHZhciB2ID0gdGhpcy5kYXRhLml0ZW1fcmV3YXJkc1tpXTtcbiAgICAgICAgLy8gICAgICAgICBpdGVtc1tpXSA9IHt9O1xuICAgICAgICAvLyAgICAgICAgIGl0ZW1zW2ldLmJpZCA9IHYuYmlkO1xuICAgICAgICAvLyAgICAgICAgIGl0ZW1zW2ldLm51bSA9IHYubnVtO1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyAgICAgcmVxdWlyZShcIm1haW51aV9jb250cm9sbGVyXCIpLmdldEluc3RhbmNlKCkub3BlbkdldEl0ZW1WaWV3KHRydWUsIGl0ZW1zLCAwLCB7IGlzX2JhY2twYWNrOiB0cnVlIH0pO1xuICAgICAgICAvLyB9XG5cbiAgICAgICAgZ2NvcmUuVGltZXIuZGVsKFwiZmFpbF9yZXN1bHRfdGltZXJcIik7XG4gICAgICAgIHRoaXMuaGFuZGxlRWZmZWN0KGZhbHNlKTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmdldEJhdHRsZVNjZW5lKCkgJiYgdGhpcy5jdHJsLmdldElzU2FtZUJhdHRsZVR5cGUodGhpcy5maWdodF90eXBlKSkge1xuICAgICAgICAgICAgdmFyIGRhdGEgPSB7IGNvbWJhdF90eXBlOiB0aGlzLmZpZ2h0X3R5cGUsIHJlc3VsdDogdGhpcy5yZXN1bHQgfTtcbiAgICAgICAgICAgIHRoaXMubW9kZWwucmVzdWx0KGRhdGEsIG51bGwpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdHJsLm9wZW5GYWlsRmluaXNoVmlldyhmYWxzZSwgdGhpcy5maWdodF90eXBlKTtcbiAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShCYXR0bGVFdmVudC5DTE9TRV9SRVNVTFRfVklFVywgdGhpcy5maWdodF90eXBlKVxuXG4gICAgfSxcbn0pIl19
|