|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/hero/artifact/artifact_chose_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, '82f3fWeEo9AuarN8tS+8+T3', 'artifact_chose_window');
|
// Scripts/mod/hero/artifact/artifact_chose_window.js
|
|
"use strict";
|
|
// --------------------------------------------------------------------
|
// @author: xxx@syg.com(必填, 创建模块的人员)
|
// @description:
|
// 这里是描述这个窗体的作用的
|
// <br/>Create: 2019-03-30 15:53:22
|
// --------------------------------------------------------------------
|
var PathTool = require("pathtool");
|
|
var CommonScrollView = require("common_scrollview");
|
|
var HeroController = require("hero_controller");
|
|
var HeroEvent = require("hero_event");
|
|
var BackpackController = require("backpack_controller");
|
|
var BackPackConst = require("backpack_const");
|
|
var PartnerConst = require("partner_const");
|
|
var GoodsVo = require("goods_vo");
|
|
var Artifact_choseWindow = cc.Class({
|
"extends": BaseView,
|
ctor: function ctor() {
|
this.prefabPath = PathTool.getPrefabPath("hero", "artifact_chose_window");
|
this.viewTag = SCENE_TAG.dialogue; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
|
|
this.win_type = WinType.Mini; //是否是全屏窗体 WinType.Full, WinType.Big, WinType.Mini, WinType.Tips
|
},
|
// 初始化一些配置数据,可以用于声明一些变量之类的
|
initConfig: function initConfig() {
|
this.chose_num = 0;
|
this.ctrl = HeroController.getInstance();
|
},
|
// 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件
|
openCallBack: function openCallBack() {
|
this.background = this.seekChild("background");
|
this.main_container = this.seekChild("main_container");
|
this.chose_lb = this.seekChild("chose_label", cc.Label);
|
this.chose_lb.string = cc.js.formatStr(Utils.TI18N("(已选择:%d)"), this.chose_num);
|
this.ok_btn = this.seekChild("ok_btn");
|
this.close_btn = this.seekChild("close_btn");
|
this.empty_bg_sp = this.seekChild("empty_bg", cc.Sprite);
|
this.empty_bg_sp.node.active = false;
|
var goods_con = this.seekChild(this.main_container, "goods_con");
|
var size = goods_con.getContentSize();
|
var tab_size = cc.size(size.width, size.height - 10);
|
var setting = {
|
item_class: "backpack_item",
|
// 单元类
|
start_x: 15,
|
// 第一个单元的X起点
|
space_x: 20,
|
// x方向的间隔
|
start_y: 0,
|
// 第一个单元的Y起点
|
space_y: 10,
|
// y方向的间隔
|
item_width: BackPackItem.Width,
|
// 单元的尺寸width
|
item_height: BackPackItem.Height,
|
// 单元的尺寸height
|
row: 0,
|
// 行数,作用于水平滚动类型
|
col: 4,
|
// 列数,作用于垂直滚动类型
|
need_dynamic: true
|
};
|
this.item_scrollview = new CommonScrollView();
|
this.item_scrollview.createScroll(goods_con, cc.v2(0, 0), ScrollViewDir.vertical, ScrollViewStartPos.top, tab_size, setting, cc.v2(0.5, 0.5));
|
},
|
// 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
|
registerEvent: function registerEvent() {
|
Utils.onTouchEnd(this.close_btn, function () {
|
this.ctrl.openArtifactChoseWindow(false);
|
}.bind(this), 2);
|
Utils.onTouchEnd(this.background, function () {
|
this.ctrl.openArtifactChoseWindow(false);
|
}.bind(this), 2);
|
Utils.onTouchEnd(this.ok_btn, function () {
|
this._onClickBtnOk();
|
}.bind(this), 1);
|
},
|
_onClickBtnOk: function _onClickBtnOk() {
|
var is_have_special = false;
|
var item_list = [];
|
|
for (var k in this.item_data) {
|
var v = this.item_data[k];
|
|
if (v.showSellStatus != null && v.showSellStatus.select == true) {
|
if (v.enchant >= 3) {
|
//所选材料中有三星以上的符文
|
is_have_special = true;
|
}
|
|
item_list.push(v.id);
|
}
|
}
|
|
var sureToChoseFunc = function () {
|
gcore.GlobalEvent.fire(HeroEvent.Artifact_Chose_Event, item_list);
|
this.ctrl.openArtifactChoseWindow(false);
|
}.bind(this);
|
|
if (is_have_special) {
|
var str = Utils.TI18N("您选择了高星级的符文作为升星材料,是否继续?");
|
|
var CommonAlert = require("commonalert");
|
|
CommonAlert.show(str, Utils.TI18N("确定"), sureToChoseFunc, Utils.TI18N("取消"));
|
} else {
|
sureToChoseFunc();
|
}
|
},
|
// 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了
|
openRootWnd: function openRootWnd(data) {
|
this.setData(data);
|
},
|
setData: function setData(data) {
|
this.artifact_bid = data.bid; //合成的目标符文bid(0表示暂无)
|
|
this.max_num = data.max_num || 0;
|
this.chose_list = data.chose_list || [];
|
this.chose_num = Utils.getArrLen(this.chose_list);
|
this.chose_lb.string = cc.js.formatStr(Utils.TI18N("(已选择:%s/%s)"), this.chose_num, this.max_num);
|
var tmp_data = BackpackController.getInstance().getModel().getAllBackPackArray(BackPackConst.item_tab_type.SPECIAL);
|
var item_data = [];
|
|
for (var i in tmp_data) {
|
var vo = new GoodsVo();
|
vo.initAttrData(tmp_data[i]);
|
item_data.push(vo);
|
}
|
|
var list = [];
|
|
for (var i in item_data) {
|
var v = item_data[i];
|
|
if (v && v.config && v.config.type == BackPackConst.item_type.ARTIFACTCHIPS) {
|
var artifact_cfg = Config.partner_artifact_data.data_artifact_data[v.config.id];
|
|
if (artifact_cfg && artifact_cfg.com_artifact != 0) {
|
var is_select = false;
|
|
for (var k in this.chose_list) {
|
if (this.chose_list[k] == v.id) {
|
is_select = true;
|
break;
|
}
|
}
|
|
v.setGoodsAttr("showSellStatus", {
|
status: true,
|
select: is_select
|
});
|
list.push(v);
|
}
|
}
|
}
|
|
list.sort(Utils.tableLowerSorter(["quality", "id"]));
|
this.item_data = list;
|
|
var onClickItemCallBack = function (cell) {
|
var item_vo = cell.getData();
|
this.ctrl.openArtifactTipsWindow(true, item_vo, PartnerConst.ArtifactTips.normal);
|
}.bind(this);
|
|
this.item_scrollview.setData(list, onClickItemCallBack, {
|
showCheckBox: true,
|
checkBoxClickCallBack: this._onCheckBoxCallBack.bind(this),
|
adjustCheckBoxPos: cc.v2(BackPackItem.Width - 25, BackPackItem.Height - 25)
|
});
|
|
if (list.length == 0) {
|
this.empty_bg_sp.node.active = true;
|
this.loadRes(PathTool.getUIIconPath("bigbg", "bigbg_3"), function (sp) {
|
this.empty_bg_sp.spriteFrame = sp;
|
}.bind(this));
|
} else {
|
this.empty_bg_sp.node.active = false;
|
}
|
},
|
_onCheckBoxCallBack: function _onCheckBoxCallBack(flag, itemnode) {
|
var item_vo = itemnode.getData();
|
|
if (flag == true) {
|
if (!this.checkItemIsCanChose(item_vo.config.id)) {
|
item_vo.setGoodsAttr("showSellStatus", {
|
status: true,
|
select: false
|
});
|
itemnode.setCheckBoxStatus(true, false);
|
message(Utils.TI18N("请选择同类型符文"));
|
return;
|
} else if (this.chose_num >= this.max_num) {
|
item_vo.setGoodsAttr("showSellStatus", {
|
status: true,
|
select: false
|
});
|
itemnode.setCheckBoxStatus(true, false);
|
message(Utils.TI18N("已达最大选择数量"));
|
return;
|
}
|
}
|
|
if (flag == true) {
|
this.chose_num = this.chose_num + 1;
|
var artifact_cfg = Config.partner_artifact_data.data_artifact_data[item_vo.config.id];
|
|
if (artifact_cfg && artifact_cfg.com_artifact) {
|
this.artifact_bid = artifact_cfg.com_artifact;
|
}
|
} else {
|
this.chose_num = this.chose_num - 1;
|
|
if (this.chose_num <= 0) {
|
this.artifact_bid = 0;
|
}
|
}
|
|
this.chose_lb.string = cc.js.formatStr(Utils.TI18N("(已选择:%s/%s)"), this.chose_num, this.max_num);
|
},
|
//检测是否可以选择
|
checkItemIsCanChose: function checkItemIsCanChose(bid) {
|
var is_can_chose = false;
|
|
if (this.artifact_bid && this.artifact_bid != 0) {
|
var artifact_cfg = Config.partner_artifact_data.data_artifact_data[bid];
|
|
if (artifact_cfg && artifact_cfg.com_artifact == this.artifact_bid) {
|
is_can_chose = true;
|
}
|
} else {
|
is_can_chose = true;
|
}
|
|
return is_can_chose;
|
},
|
// 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
|
closeCallBack: function closeCallBack() {
|
if (this.item_scrollview) {
|
this.item_scrollview.deleteMe();
|
this.item_scrollview = null;
|
}
|
|
for (var k in this.item_data) {
|
var v = this.item_data[k];
|
v.setGoodsAttr("showSellStatus", {
|
status: true,
|
select: false
|
});
|
}
|
|
this.ctrl.openArtifactChoseWindow(false);
|
}
|
});
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxoZXJvXFxhcnRpZmFjdFxcYXJ0aWZhY3RfY2hvc2Vfd2luZG93LmpzIl0sIm5hbWVzIjpbIlBhdGhUb29sIiwicmVxdWlyZSIsIkNvbW1vblNjcm9sbFZpZXciLCJIZXJvQ29udHJvbGxlciIsIkhlcm9FdmVudCIsIkJhY2twYWNrQ29udHJvbGxlciIsIkJhY2tQYWNrQ29uc3QiLCJQYXJ0bmVyQ29uc3QiLCJHb29kc1ZvIiwiQXJ0aWZhY3RfY2hvc2VXaW5kb3ciLCJjYyIsIkNsYXNzIiwiQmFzZVZpZXciLCJjdG9yIiwicHJlZmFiUGF0aCIsImdldFByZWZhYlBhdGgiLCJ2aWV3VGFnIiwiU0NFTkVfVEFHIiwiZGlhbG9ndWUiLCJ3aW5fdHlwZSIsIldpblR5cGUiLCJNaW5pIiwiaW5pdENvbmZpZyIsImNob3NlX251bSIsImN0cmwiLCJnZXRJbnN0YW5jZSIsIm9wZW5DYWxsQmFjayIsImJhY2tncm91bmQiLCJzZWVrQ2hpbGQiLCJtYWluX2NvbnRhaW5lciIsImNob3NlX2xiIiwiTGFiZWwiLCJzdHJpbmciLCJqcyIsImZvcm1hdFN0ciIsIlV0aWxzIiwiVEkxOE4iLCJva19idG4iLCJjbG9zZV9idG4iLCJlbXB0eV9iZ19zcCIsIlNwcml0ZSIsIm5vZGUiLCJhY3RpdmUiLCJnb29kc19jb24iLCJzaXplIiwiZ2V0Q29udGVudFNpemUiLCJ0YWJfc2l6ZSIsIndpZHRoIiwiaGVpZ2h0Iiwic2V0dGluZyIsIml0ZW1fY2xhc3MiLCJzdGFydF94Iiwic3BhY2VfeCIsInN0YXJ0X3kiLCJzcGFjZV95IiwiaXRlbV93aWR0aCIsIkJhY2tQYWNrSXRlbSIsIldpZHRoIiwiaXRlbV9oZWlnaHQiLCJIZWlnaHQiLCJyb3ciLCJjb2wiLCJuZWVkX2R5bmFtaWMiLCJpdGVtX3Njcm9sbHZpZXciLCJjcmVhdGVTY3JvbGwiLCJ2MiIsIlNjcm9sbFZpZXdEaXIiLCJ2ZXJ0aWNhbCIsIlNjcm9sbFZpZXdTdGFydFBvcyIsInRvcCIsInJlZ2lzdGVyRXZlbnQiLCJvblRvdWNoRW5kIiwib3BlbkFydGlmYWN0Q2hvc2VXaW5kb3ciLCJiaW5kIiwiX29uQ2xpY2tCdG5PayIsImlzX2hhdmVfc3BlY2lhbCIsIml0ZW1fbGlzdCIsImsiLCJpdGVtX2RhdGEiLCJ2Iiwic2hvd1NlbGxTdGF0dXMiLCJzZWxlY3QiLCJlbmNoYW50IiwicHVzaCIsImlkIiwic3VyZVRvQ2hvc2VGdW5jIiwiZ2NvcmUiLCJHbG9iYWxFdmVudCIsImZpcmUiLCJBcnRpZmFjdF9DaG9zZV9FdmVudCIsInN0ciIsIkNvbW1vbkFsZXJ0Iiwic2hvdyIsIm9wZW5Sb290V25kIiwiZGF0YSIsInNldERhdGEiLCJhcnRpZmFjdF9iaWQiLCJiaWQiLCJtYXhfbnVtIiwiY2hvc2VfbGlzdCIsImdldEFyckxlbiIsInRtcF9kYXRhIiwiZ2V0TW9kZWwiLCJnZXRBbGxCYWNrUGFja0FycmF5IiwiaXRlbV90YWJfdHlwZSIsIlNQRUNJQUwiLCJpIiwidm8iLCJpbml0QXR0ckRhdGEiLCJsaXN0IiwiY29uZmlnIiwidHlwZSIsIml0ZW1fdHlwZSIsIkFSVElGQUNUQ0hJUFMiLCJhcnRpZmFjdF9jZmciLCJDb25maWciLCJwYXJ0bmVyX2FydGlmYWN0X2RhdGEiLCJkYXRhX2FydGlmYWN0X2RhdGEiLCJjb21fYXJ0aWZhY3QiLCJpc19zZWxlY3QiLCJzZXRHb29kc0F0dHIiLCJzdGF0dXMiLCJzb3J0IiwidGFibGVMb3dlclNvcnRlciIsIm9uQ2xpY2tJdGVtQ2FsbEJhY2siLCJjZWxsIiwiaXRlbV92byIsImdldERhdGEiLCJvcGVuQXJ0aWZhY3RUaXBzV2luZG93IiwiQXJ0aWZhY3RUaXBzIiwibm9ybWFsIiwic2hvd0NoZWNrQm94IiwiY2hlY2tCb3hDbGlja0NhbGxCYWNrIiwiX29uQ2hlY2tCb3hDYWxsQmFjayIsImFkanVzdENoZWNrQm94UG9zIiwibGVuZ3RoIiwibG9hZFJlcyIsImdldFVJSWNvblBhdGgiLCJzcCIsInNwcml0ZUZyYW1lIiwiZmxhZyIsIml0ZW1ub2RlIiwiY2hlY2tJdGVtSXNDYW5DaG9zZSIsInNldENoZWNrQm94U3RhdHVzIiwibWVzc2FnZSIsImlzX2Nhbl9jaG9zZSIsImNsb3NlQ2FsbEJhY2siLCJkZWxldGVNZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxRQUFRLEdBQUdDLE9BQU8sQ0FBQyxVQUFELENBQXRCOztBQUNBLElBQUlDLGdCQUFnQixHQUFHRCxPQUFPLENBQUMsbUJBQUQsQ0FBOUI7O0FBQ0EsSUFBSUUsY0FBYyxHQUFHRixPQUFPLENBQUMsaUJBQUQsQ0FBNUI7O0FBQ0EsSUFBSUcsU0FBUyxHQUFHSCxPQUFPLENBQUMsWUFBRCxDQUF2Qjs7QUFDQSxJQUFJSSxrQkFBa0IsR0FBR0osT0FBTyxDQUFDLHFCQUFELENBQWhDOztBQUNBLElBQUlLLGFBQWEsR0FBR0wsT0FBTyxDQUFDLGdCQUFELENBQTNCOztBQUNBLElBQUlNLFlBQVksR0FBR04sT0FBTyxDQUFDLGVBQUQsQ0FBMUI7O0FBQ0EsSUFBSU8sT0FBTyxHQUFHUCxPQUFPLENBQUMsVUFBRCxDQUFyQjs7QUFFQSxJQUFJUSxvQkFBb0IsR0FBR0MsRUFBRSxDQUFDQyxLQUFILENBQVM7QUFDaEMsYUFBU0MsUUFEdUI7QUFFaENDLEVBQUFBLElBQUksRUFBRSxnQkFBWTtBQUNkLFNBQUtDLFVBQUwsR0FBa0JkLFFBQVEsQ0FBQ2UsYUFBVCxDQUF1QixNQUF2QixFQUErQix1QkFBL0IsQ0FBbEI7QUFDQSxTQUFLQyxPQUFMLEdBQWVDLFNBQVMsQ0FBQ0MsUUFBekIsQ0FGYyxDQUVvQzs7QUFDbEQsU0FBS0MsUUFBTCxHQUFnQkMsT0FBTyxDQUFDQyxJQUF4QixDQUhjLENBRzhCO0FBQy9DLEdBTitCO0FBUWhDO0FBQ0FDLEVBQUFBLFVBQVUsRUFBRSxzQkFBWTtBQUNwQixTQUFLQyxTQUFMLEdBQWlCLENBQWpCO0FBQ0EsU0FBS0MsSUFBTCxHQUFZckIsY0FBYyxDQUFDc0IsV0FBZixF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QXFCb0YsUUFBckI7QUFDQSxXQUFLcEYsZUFBTCxHQUF1QixJQUF2QjtBQUNIOztBQUNELFNBQUssSUFBSWMsQ0FBVCxJQUFjLEtBQUtDLFNBQW5CLEVBQThCO0FBQzFCLFVBQUlDLENBQUMsR0FBRyxLQUFLRCxTQUFMLENBQWVELENBQWYsQ0FBUjtBQUNBRSxNQUFBQSxDQUFDLENBQUN5QyxZQUFGLENBQWUsZ0JBQWYsRUFBaUM7QUFBRUMsUUFBQUEsTUFBTSxFQUFFLElBQVY7QUFBZ0J4QyxRQUFBQSxNQUFNLEVBQUU7QUFBeEIsT0FBakM7QUFDSDs7QUFDRCxTQUFLekQsSUFBTCxDQUFVZ0QsdUJBQVYsQ0FBa0MsS0FBbEM7QUFDSDtBQW5NK0IsQ0FBVCxDQUEzQiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEBhdXRob3I6IHh4eEBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgIOi/memHjOaYr+aPj+i/sOi/meS4queql+S9k+eahOS9nOeUqOeahFxuLy8gPGJyLz5DcmVhdGU6IDIwMTktMDMtMzAgMTU6NTM6MjJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgUGF0aFRvb2wgPSByZXF1aXJlKFwicGF0aHRvb2xcIik7XG52YXIgQ29tbW9uU2Nyb2xsVmlldyA9IHJlcXVpcmUoXCJjb21tb25fc2Nyb2xsdmlld1wiKTtcbnZhciBIZXJvQ29udHJvbGxlciA9IHJlcXVpcmUoXCJoZXJvX2NvbnRyb2xsZXJcIik7XG52YXIgSGVyb0V2ZW50ID0gcmVxdWlyZShcImhlcm9fZXZlbnRcIik7XG52YXIgQmFja3BhY2tDb250cm9sbGVyID0gcmVxdWlyZShcImJhY2twYWNrX2NvbnRyb2xsZXJcIik7XG52YXIgQmFja1BhY2tDb25zdCA9IHJlcXVpcmUoXCJiYWNrcGFja19jb25zdFwiKTtcbnZhciBQYXJ0bmVyQ29uc3QgPSByZXF1aXJlKFwicGFydG5lcl9jb25zdFwiKTtcbnZhciBHb29kc1ZvID0gcmVxdWlyZShcImdvb2RzX3ZvXCIpO1xuXG52YXIgQXJ0aWZhY3RfY2hvc2VXaW5kb3cgPSBjYy5DbGFzcyh7XG4gICAgZXh0ZW5kczogQmFzZVZpZXcsXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnByZWZhYlBhdGggPSBQYXRoVG9vbC5nZXRQcmVmYWJQYXRoKFwiaGVyb1wiLCBcImFydGlmYWN0X2Nob3NlX3dpbmRvd1wiKTtcbiAgICAgICAgdGhpcy52aWV3VGFnID0gU0NFTkVfVEFHLmRpYWxvZ3VlOyAgICAgICAgICAgICAgICAvL+ivpeeql+S9k+aJgOWxnnVp5bGC57qnLOWFqOWxj3Vp6ZyA6KaB5ZyodWnlsYIs6Z2e5YWo5bGPdWnlnKhkaWFsb2d1ZeWxgizov5nkuKropoHms6jmhI9cbiAgICAgICAgdGhpcy53aW5fdHlwZSA9IFdpblR5cGUuTWluaTsgICAgICAgICAgICAgICAvL+aYr+WQpuaYr+WFqOWxj+eql+S9kyAgV2luVHlwZS5GdWxsLCBXaW5UeXBlLkJpZywgV2luVHlwZS5NaW5pLCBXaW5UeXBlLlRpcHNcbiAgICB9LFxuXG4gICAgLy8g5Yid5aeL5YyW5LiA5Lqb6YWN572u5pWw5o2uLOWPr+S7peeUqOS6juWjsOaYjuS4gOS6m+WPmOmHj+S5i+exu+eahFxuICAgIGluaXRDb25maWc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5jaG9zZV9udW0gPSAwO1xuICAgICAgICB0aGlzLmN0cmwgPSBIZXJvQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpO1xuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI7nmoTlm57osIMs5Y+v5Lul5Zyo6L+Z6YeM5o2V6I6355u45YWz6IqC54K55oiW6ICF57uE5Lu2XG4gICAgb3BlbkNhbGxCYWNrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuYmFja2dyb3VuZCA9IHRoaXMuc2Vla0NoaWxkKFwiYmFja2dyb3VuZFwiKTtcbiAgICAgICAgdGhpcy5tYWluX2NvbnRhaW5lciA9IHRoaXMuc2Vla0NoaWxkKFwibWFpbl9jb250YWluZXJcIik7XG5cbiAgICAgICAgdGhpcy5jaG9zZV9sYiA9IHRoaXMuc2Vla0NoaWxkKFwiY2hvc2VfbGFiZWxcIiwgY2MuTGFiZWwpO1xuICAgICAgICB0aGlzLmNob3NlX2xiLnN0cmluZyA9IGNjLmpzLmZvcm1hdFN0cihVdGlscy5USTE4TihcIijlt7LpgInmi6k6JWQpXCIpLCB0aGlzLmNob3NlX251bSk7XG4gICAgICAgIHRoaXMub2tfYnRuID0gdGhpcy5zZWVrQ2hpbGQoXCJva19idG5cIik7XG4gICAgICAgIHRoaXMuY2xvc2VfYnRuID0gdGhpcy5zZWVrQ2hpbGQoXCJjbG9zZV9idG5cIik7XG4gICAgICAgIHRoaXMuZW1wdHlfYmdfc3AgPSB0aGlzLnNlZWtDaGlsZChcImVtcHR5X2JnXCIsIGNjLlNwcml0ZSk7XG4gICAgICAgIHRoaXMuZW1wdHlfYmdfc3Aubm9kZS5hY3RpdmUgPSBmYWxzZTtcblxuICAgICAgICB2YXIgZ29vZHNfY29uID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5tYWluX2NvbnRhaW5lciwgXCJnb29kc19jb25cIik7XG4gICAgICAgIHZhciBzaXplID0gZ29vZHNfY29uLmdldENvbnRlbnRTaXplKCk7XG4gICAgICAgIHZhciB0YWJfc2l6ZSA9IGNjLnNpemUoc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQgLSAxMCk7XG4gICAgICAgIHZhciBzZXR0aW5nID0ge1xuICAgICAgICAgICAgaXRlbV9jbGFzczogXCJiYWNrcGFja19pdGVtXCIsICAgICAgLy8g5Y2V5YWD57G7XG4gICAgICAgICAgICBzdGFydF94OiAxNSwgICAgICAgICAgICAgICAgICAgIC8vIOesrOS4gOS4quWNleWFg+eahFjotbfngrlcbiAgICAgICAgICAgIHNwYWNlX3g6IDIwLCAgICAgICAgICAgICAgICAgICAgLy8geOaWueWQkeeahOmXtOmalFxuICAgICAgICAgICAgc3RhcnRfeTogMCwgICAgICAgICAgICAgICAgICAgIC8vIOesrOS4gOS4quWNleWFg+eahFnotbfngrlcbiAgICAgICAgICAgIHNwYWNlX3k6IDEwLCAgICAgICAgICAgICAgICAgICAvLyB55pa55ZCR55qE6Ze06ZqUXG4gICAgICAgICAgICBpdGVtX3dpZHRoOiBCYWNrUGFja0l0ZW0uV2lkdGgsICAgICAgICAgICAgICAgLy8g5Y2V5YWD55qE5bC65a+4d2lkdGhcbiAgICAgICAgICAgIGl0ZW1faGVpZ2h0OiBCYWNrUGFja0l0ZW0uSGVpZ2h0LCAgICAgICAgICAgICAgLy8g5Y2V5YWD55qE5bC65a+4aGVpZ2h0XG4gICAgICAgICAgICByb3c6IDAsICAgICAgICAgICAgICAgICAgICAgICAgLy8g6KGM5pWw77yM5L2c55So5LqO5rC05bmz5rua5Yqo57G75Z6LXG4gICAgICAgICAgICBjb2w6IDQsICAgICAgICAgICAgICAgICAgICAgICAgLy8g5YiX5pWw77yM5L2c55So5LqO5Z6C55u05rua5Yqo57G75Z6LXG4gICAgICAgICAgICBuZWVkX2R5bmFtaWM6IHRydWVcbiAgICAgICAgfVxuICAgICAgICB0aGlzLml0ZW1fc2Nyb2xsdmlldyA9IG5ldyBDb21tb25TY3JvbGxWaWV3KClcbiAgICAgICAgdGhpcy5pdGVtX3Njcm9sbHZpZXcuY3JlYXRlU2Nyb2xsKGdvb2RzX2NvbiwgY2MudjIoMCwgMCksIFNjcm9sbFZpZXdEaXIudmVydGljYWwsXG4gICAgICAgICAgICBTY3JvbGxWaWV3U3RhcnRQb3MudG9wLCB0YWJfc2l6ZSwgc2V0dGluZywgY2MudjIoMC41LCAwLjUpKTtcblxuICAgIH0sXG5cbiAgICAvLyDms6jlhozkuovku7bnm5HlkKznmoTmjqXlj6Ms5LiN6ZyA6KaB5omL5Yqo6LCD55SoLOWmguaenOaYr+S9v+eUqGdjb3JlLkdsb2JhbEV2ZW5055uR5ZCsLOWPr+S7peebtOaOpeiwg+eUqGFkZEdsb2JhbEV2ZW50XG4gICAgcmVnaXN0ZXJFdmVudDogZnVuY3Rpb24gKCkge1xuICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMuY2xvc2VfYnRuLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLmN0cmwub3BlbkFydGlmYWN0Q2hvc2VXaW5kb3coZmFsc2UpXG4gICAgICAgIH0uYmluZCh0aGlzKSwgMilcbiAgICAgICAgVXRpbHMub25Ub3VjaEVuZCh0aGlzLmJhY2tncm91bmQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuY3RybC5vcGVuQXJ0aWZhY3RDaG9zZVdpbmRvdyhmYWxzZSlcbiAgICAgICAgfS5iaW5kKHRoaXMpLCAyKVxuICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMub2tfYnRuLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLl9vbkNsaWNrQnRuT2soKTtcbiAgICAgICAgfS5iaW5kKHRoaXMpLCAxKVxuICAgIH0sXG5cbiAgICBfb25DbGlja0J0bk9rOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpc19oYXZlX3NwZWNpYWwgPSBmYWxzZTtcbiAgICAgICAgdmFyIGl0ZW1fbGlzdCA9IFtdO1xuICAgICAgICBmb3IgKHZhciBrIGluIHRoaXMuaXRlbV9kYXRhKSB7XG4gICAgICAgICAgICB2YXIgdiA9IHRoaXMuaXRlbV9kYXRhW2tdO1xuICAgICAgICAgICAgaWYgKHYuc2hvd1NlbGxTdGF0dXMgIT0gbnVsbCAmJiB2LnNob3dTZWxsU3RhdHVzLnNlbGVjdCA9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHYuZW5jaGFudCA+PSAzKSB7Ly/miYDpgInmnZDmlpnkuK3mnInkuInmmJ/ku6XkuIrnmoTnrKbmlodcbiAgICAgICAgICAgICAgICAgICAgaXNfaGF2ZV9zcGVjaWFsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaXRlbV9saXN0LnB1c2godi5pZClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgc3VyZVRvQ2hvc2VGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShIZXJvRXZlbnQuQXJ0aWZhY3RfQ2hvc2VfRXZlbnQsIGl0ZW1fbGlzdCk7XG4gICAgICAgICAgICB0aGlzLmN0cmwub3BlbkFydGlmYWN0Q2hvc2VXaW5kb3coZmFsc2UpO1xuICAgICAgICB9LmJpbmQodGhpcylcbiAgICAgICAgaWYgKGlzX2hhdmVfc3BlY2lhbCkge1xuICAgICAgICAgICAgdmFyIHN0ciA9IFV0aWxzLlRJMThOKFwi5oKo6YCJ5oup5LqG6auY5pif57qn55qE56ym5paH5L2c5Li65Y2H5pif5p2Q5paZ77yM5piv5ZCm57un57ut77yfXCIpO1xuICAgICAgICAgICAgdmFyIENvbW1vbkFsZXJ0ID0gcmVxdWlyZShcImNvbW1vbmFsZXJ0XCIpO1xuICAgICAgICAgICAgQ29tbW9uQWxlcnQuc2hvdyhzdHIsIFV0aWxzLlRJMThOKFwi56Gu5a6aXCIpLCBzdXJlVG9DaG9zZUZ1bmMsIFV0aWxzLlRJMThOKFwi5Y+W5raIXCIpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VyZVRvQ2hvc2VGdW5jKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g6aKE5Yi25L2T5Yqg6L295a6M5oiQ5LmL5ZCOLOa3u+WKoOWIsOWvueW6lOS4u+iKgueCueS5i+WQjueahOWbnuiwgyzkuZ/lsLHmmK/kuIDkuKrnqpfkvZPnmoTmraPlvI/lhaXlj6Ms5Y+v5Lul6K6+572u5LiA5Lqb5pWw5o2u5LqGXG4gICAgb3BlblJvb3RXbmQ6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHRoaXMuc2V0RGF0YShkYXRhKTtcbiAgICB9LFxuXG4gICAgc2V0RGF0YTogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdGhpcy5hcnRpZmFjdF9iaWQgPSBkYXRhLmJpZCAvL+WQiOaIkOeahOebruagh+espuaWh2JpZO+8iDDooajnpLrmmoLml6DvvIlcbiAgICAgICAgdGhpcy5tYXhfbnVtID0gZGF0YS5tYXhfbnVtIHx8IDA7XG4gICAgICAgIHRoaXMuY2hvc2VfbGlzdCA9IGRhdGEuY2hvc2VfbGlzdCB8fCBbXTtcbiAgICAgICAgdGhpcy5jaG9zZV9udW0gPSBVdGlscy5nZXRBcnJMZW4odGhpcy5jaG9zZV9saXN0KTtcbiAgICAgICAgdGhpcy5jaG9zZV9sYi5zdHJpbmcgPSBjYy5qcy5mb3JtYXRTdHIoVXRpbHMuVEkxOE4oXCIo5bey6YCJ5oupOiVzLyVzKVwiKSwgdGhpcy5jaG9zZV9udW0sIHRoaXMubWF4X251bSk7XG5cbiAgICAgICAgdmFyIHRtcF9kYXRhID0gQmFja3BhY2tDb250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0TW9kZWwoKS5nZXRBbGxCYWNrUGFja0FycmF5KEJhY2tQYWNrQ29uc3QuaXRlbV90YWJfdHlwZS5TUEVDSUFMKVxuICAgICAgICB2YXIgaXRlbV9kYXRhID0gW107XG4gICAgICAgIGZvciAodmFyIGkgaW4gdG1wX2RhdGEpIHtcbiAgICAgICAgICAgIHZhciB2byA9IG5ldyBHb29kc1ZvKCk7XG4gICAgICAgICAgICB2by5pbml0QXR0ckRhdGEodG1wX2RhdGFbaV0pO1xuICAgICAgICAgICAgaXRlbV9kYXRhLnB1c2godm8pXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbGlzdCA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpIGluIGl0ZW1fZGF0YSkge1xuICAgICAgICAgICAgdmFyIHYgPSBpdGVtX2RhdGFbaV07XG4gICAgICAgICAgICBpZiAodiAmJiB2LmNvbmZpZyAmJiB2LmNvbmZpZy50eXBlID09IEJhY2tQYWNrQ29uc3QuaXRlbV90eXBlLkFSVElGQUNUQ0hJUFMpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJ0aWZhY3RfY2ZnID0gQ29uZmlnLnBhcnRuZXJfYXJ0aWZhY3RfZGF0YS5kYXRhX2FydGlmYWN0X2RhdGFbdi5jb25maWcuaWRdO1xuICAgICAgICAgICAgICAgIGlmIChhcnRpZmFjdF9jZmcgJiYgYXJ0aWZhY3RfY2ZnLmNvbV9hcnRpZmFjdCAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc19zZWxlY3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayBpbiB0aGlzLmNob3NlX2xpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNob3NlX2xpc3Rba10gPT0gdi5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX3NlbGVjdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB2LnNldEdvb2RzQXR0cihcInNob3dTZWxsU3RhdHVzXCIsIHsgc3RhdHVzOiB0cnVlLCBzZWxlY3Q6IGlzX3NlbGVjdCB9KTtcbiAgICAgICAgICAgICAgICAgICAgbGlzdC5wdXNoKHYpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxpc3Quc29ydChVdGlscy50YWJsZUxvd2VyU29ydGVyKFtcInF1YWxpdHlcIiwgXCJpZFwiXSkpO1xuICAgICAgICB0aGlzLml0ZW1fZGF0YSA9IGxpc3Q7XG4gICAgICAgIHZhciBvbkNsaWNrSXRlbUNhbGxCYWNrID0gZnVuY3Rpb24gKGNlbGwpIHtcbiAgICAgICAgICAgIHZhciBpdGVtX3ZvID0gY2VsbC5nZXREYXRhKCk7XG4gICAgICAgICAgICB0aGlzLmN0cmwub3BlbkFydGlmYWN0VGlwc1dpbmRvdyh0cnVlLCBpdGVtX3ZvLCBQYXJ0bmVyQ29uc3QuQXJ0aWZhY3RUaXBzLm5vcm1hbClcbiAgICAgICAgfS5iaW5kKHRoaXMpXG4gICAgICAgIHRoaXMuaXRlbV9zY3JvbGx2aWV3LnNldERhdGEobGlzdCwgb25DbGlja0l0ZW1DYWxsQmFjaywgeyBzaG93Q2hlY2tCb3g6IHRydWUsIGNoZWNrQm94Q2xpY2tDYWxsQmFjazogdGhpcy5fb25DaGVja0JveENhbGxCYWNrLmJpbmQodGhpcyksIGFkanVzdENoZWNrQm94UG9zOiBjYy52MihCYWNrUGFja0l0ZW0uV2lkdGggLSAyNSwgQmFja1BhY2tJdGVtLkhlaWdodCAtIDI1KSB9KVxuICAgICAgICBpZiAobGlzdC5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5lbXB0eV9iZ19zcC5ub2RlLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmxvYWRSZXMoUGF0aFRvb2wuZ2V0VUlJY29uUGF0aChcImJpZ2JnXCIsIFwiYmlnYmdfM1wiKSwgZnVuY3Rpb24gKHNwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbXB0eV9iZ19zcC5zcHJpdGVGcmFtZSA9IHNwO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbXB0eV9iZ19zcC5ub2RlLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIF9vbkNoZWNrQm94Q2FsbEJhY2s6IGZ1bmN0aW9uIChmbGFnLCBpdGVtbm9kZSkge1xuICAgICAgICB2YXIgaXRlbV92byA9IGl0ZW1ub2RlLmdldERhdGEoKTtcbiAgICAgICAgaWYgKGZsYWcgPT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSXRlbUlzQ2FuQ2hvc2UoaXRlbV92by5jb25maWcuaWQpKSB7XG4gICAgICAgICAgICAgICAgaXRlbV92by5zZXRHb29kc0F0dHIoXCJzaG93U2VsbFN0YXR1c1wiLCB7IHN0YXR1czogdHJ1ZSwgc2VsZWN0OiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICBpdGVtbm9kZS5zZXRDaGVja0JveFN0YXR1cyh0cnVlLCBmYWxzZSlcbiAgICAgICAgICAgICAgICBtZXNzYWdlKFV0aWxzLlRJMThOKFwi6K+36YCJ5oup5ZCM57G75Z6L56ym5paHXCIpKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNob3NlX251bSA+PSB0aGlzLm1heF9udW0pIHtcbiAgICAgICAgICAgICAgICBpdGVtX3ZvLnNldEdvb2RzQXR0cihcInNob3dTZWxsU3RhdHVzXCIsIHsgc3RhdHVzOiB0cnVlLCBzZWxlY3Q6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICAgIGl0ZW1ub2RlLnNldENoZWNrQm94U3RhdHVzKHRydWUsIGZhbHNlKVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UoVXRpbHMuVEkxOE4oXCLlt7Lovr7mnIDlpKfpgInmi6nmlbDph49cIikpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZsYWcgPT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGhpcy5jaG9zZV9udW0gPSB0aGlzLmNob3NlX251bSArIDE7XG4gICAgICAgICAgICB2YXIgYXJ0aWZhY3RfY2ZnID0gQ29uZmlnLnBhcnRuZXJfYXJ0aWZhY3RfZGF0YS5kYXRhX2FydGlmYWN0X2RhdGFbaXRlbV92by5jb25maWcuaWRdO1xuICAgICAgICAgICAgaWYgKGFydGlmYWN0X2NmZyAmJiBhcnRpZmFjdF9jZmcuY29tX2FydGlmYWN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcnRpZmFjdF9iaWQgPSBhcnRpZmFjdF9jZmcuY29tX2FydGlmYWN0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaG9zZV9udW0gPSB0aGlzLmNob3NlX251bSAtIDE7XG4gICAgICAgICAgICBpZiAodGhpcy5jaG9zZV9udW0gPD0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXJ0aWZhY3RfYmlkID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNob3NlX2xiLnN0cmluZyA9IGNjLmpzLmZvcm1hdFN0cihVdGlscy5USTE4TihcIijlt7LpgInmi6k6JXMvJXMpXCIpLCB0aGlzLmNob3NlX251bSwgdGhpcy5tYXhfbnVtKVxuICAgIH0sXG5cbiAgICAvL+ajgOa1i+aYr+WQpuWPr+S7pemAieaLqVxuICAgIGNoZWNrSXRlbUlzQ2FuQ2hvc2U6IGZ1bmN0aW9uIChiaWQpIHtcbiAgICAgICAgdmFyIGlzX2Nhbl9jaG9zZSA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5hcnRpZmFjdF9iaWQgJiYgdGhpcy5hcnRpZmFjdF9iaWQgIT0gMCkge1xuICAgICAgICAgICAgdmFyIGFydGlmYWN0X2NmZyA9IENvbmZpZy5wYXJ0bmVyX2FydGlmYWN0X2RhdGEuZGF0YV9hcnRpZmFjdF9kYXRhW2JpZF07XG4gICAgICAgICAgICBpZiAoYXJ0aWZhY3RfY2ZnICYmIGFydGlmYWN0X2NmZy5jb21fYXJ0aWZhY3QgPT0gdGhpcy5hcnRpZmFjdF9iaWQpIHtcbiAgICAgICAgICAgICAgICBpc19jYW5fY2hvc2UgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXNfY2FuX2Nob3NlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNfY2FuX2Nob3NlXG4gICAgfSxcblxuICAgIC8vIOWFs+mXreeql+S9k+WbnuiwgyzpnIDopoHlnKjov5nph4zosIPnlKjor6XnqpfkvZPmiYDlsZ5jb250cm9sbGVy55qEY2xvc2Xmlrnms5XmsqHnlKjkuo7nva7nqbror6XnqpfkvZPlrp7kvovlr7nosaFcbiAgICBjbG9zZUNhbGxCYWNrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLml0ZW1fc2Nyb2xsdmlldykge1xuICAgICAgICAgICAgdGhpcy5pdGVtX3Njcm9sbHZpZXcuZGVsZXRlTWUoKTtcbiAgICAgICAgICAgIHRoaXMuaXRlbV9zY3JvbGx2aWV3ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBrIGluIHRoaXMuaXRlbV9kYXRhKSB7XG4gICAgICAgICAgICB2YXIgdiA9IHRoaXMuaXRlbV9kYXRhW2tdO1xuICAgICAgICAgICAgdi5zZXRHb29kc0F0dHIoXCJzaG93U2VsbFN0YXR1c1wiLCB7IHN0YXR1czogdHJ1ZSwgc2VsZWN0OiBmYWxzZSB9KVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3RybC5vcGVuQXJ0aWZhY3RDaG9zZVdpbmRvdyhmYWxzZSlcbiAgICB9LFxufSkiXX0=
|