|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/friend/view/friend_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, '206f7ai3axIgJQSSPY0yn2p', 'friend_window');
|
// Scripts/mod/friend/view/friend_window.js
|
|
"use strict";
|
|
// --------------------------------------------------------------------
|
// @author: shiraho@syg.com(必填, 创建模块的人员)
|
// @description:
|
// 好友主界面
|
// <br/>Create: new Date().toISOString()
|
// --------------------------------------------------------------------
|
var FriendController = require("friend_controller");
|
|
var RoleController = require("role_controller");
|
|
var CommonScrollView = require("common_scrollview");
|
|
var FriendListItem = require("friend_list_item");
|
|
var FriendConst = require("friend_const");
|
|
var FriendEvent = require("friend_event");
|
|
var FriendAwardPanel = require("friend_award_panel");
|
|
var FriendApplyPanel = require("friend_apply_panel");
|
|
var FriendBlackPanel = require("friend_black_panel");
|
|
var FriendListPanel = require("friend_list_panel");
|
|
var MainuiConst = require("mainui_const");
|
|
var FriendWindow = cc.Class({
|
"extends": CommonWindowTab,
|
ctor: function ctor() {
|
this.ctrl = FriendController.getInstance();
|
this.win_type = WinType.Full;
|
this.viewTag = SCENE_TAG.ui;
|
this.tab_info_list = [{
|
label: Utils.TI18N("我的好友"),
|
index: FriendConst.Type.MyFriend,
|
status: true
|
}, {
|
label: Utils.TI18N("领取礼物"),
|
index: FriendConst.Type.Award,
|
status: true
|
}, {
|
label: Utils.TI18N("申请列表"),
|
index: FriendConst.Type.ApplyList,
|
status: true
|
}, {
|
label: Utils.TI18N("黑名单"),
|
index: FriendConst.Type.BlackList,
|
status: true
|
}];
|
this.title_str = Utils.TI18N("好友");
|
this.view_list = {};
|
this.friend_list = {};
|
this.scroll_width = 630;
|
this.scroll_height = 614;
|
this.rend_list = {};
|
this.cache_lit = {};
|
this.role_vo = RoleController.getInstance().getRoleVo();
|
},
|
initPanel: function initPanel() {
|
var scroll_view_size = cc.size(this.scroll_width, this.scroll_height);
|
var setting = {
|
item_class: FriendListItem,
|
// 单元类
|
start_x: 7.5,
|
// 第一个单元的X起点
|
space_x: 0,
|
// x方向的间隔
|
start_y: 0,
|
// 第一个单元的Y起点
|
space_y: 2,
|
// y方向的间隔
|
item_width: 624,
|
// 单元的尺寸width
|
item_height: 114,
|
// 单元的尺寸height
|
row: 0,
|
// 行数,作用于水平滚动类型
|
col: 1,
|
// 列数,作用于垂直滚动类型
|
once_num: 1,
|
need_dynamic: true
|
};
|
this.item_scrollview = new CommonScrollView();
|
this.item_scrollview.createScroll(this.scroll_con, cc.v2(0, 65), ScrollViewDir.vertical, ScrollViewStartPos.top, scroll_view_size, setting, cc.v2(0.5, 0.5));
|
},
|
registerEvent: function registerEvent() {
|
//申请好友列表返回
|
this.addGlobalEvent(FriendEvent.FRIEND_APPLY, function () {
|
if (this.cur_type != FriendConst.Type.ApplyList) return;
|
this.updateFriendList(false);
|
}.bind(this)); //赠送返回
|
|
this.addGlobalEvent(FriendEvent.STRENGTH_UPDATE, function (data) {
|
if (this.cur_type != FriendConst.Type.Award && this.cur_type != FriendConst.Type.MyFriend) return;
|
var list = data.list || {};
|
var id_list = {};
|
|
for (var i in list) {
|
var v = list[i];
|
id_list[v.rid + "_" + v.srv_id] = v;
|
}
|
|
var item_list = this.item_scrollview.getItemList();
|
|
if (item_list) {
|
for (var k in item_list) {
|
var v = item_list[k];
|
var vo = v.getData();
|
|
if (vo && id_list[vo.rid + "_" + vo.srv_id]) {
|
v.setData(id_list[vo.rid + "_" + vo.srv_id]);
|
}
|
}
|
}
|
}.bind(this)); //删除好友返回
|
|
this.addGlobalEvent(FriendEvent.FRIEND_DELETE, function () {
|
if (this.cur_type != FriendConst.Type.MyFriend && this.cur_type != FriendConst.Type.BlackList) return;
|
this.updateFriendList(false, true);
|
this.changeFriendBtn(true);
|
}.bind(this)); //增加好友
|
|
this.addGlobalEvent(FriendEvent.UPDATE_APPLY, function () {
|
if (this.cur_type != FriendConst.Type.MyFriend) {
|
this.setTabTips(true, FriendConst.Type.MyFriend);
|
|
if (this.cur_type == FriendConst.Type.ApplyList) {
|
this.updateFriendList(false);
|
}
|
} else {
|
this.updateFriendList(false);
|
}
|
|
this.showRedPoint();
|
}.bind(this)); //友情点变化更新
|
|
if (this.role_vo != null) {
|
if (this.role_assets_event == null) {
|
this.role_assets_event = this.role_vo.bind(EventId.UPDATE_ROLE_ATTRIBUTE, function (key, value) {
|
if (key == "friend_point") {
|
if (this.cur_type == FriendConst.Type.MyFriend || this.cur_type == FriendConst.Type.Award) {
|
if (this.pre_panel && this.pre_panel.setFriendPoint) this.pre_panel.setFriendPoint();
|
}
|
}
|
}.bind(this));
|
}
|
}
|
|
this.addGlobalEvent(FriendEvent.UPDATE_COUNT, function () {
|
this.updateFriendList(false);
|
this.showRedPoint();
|
}.bind(this)); //被删好友
|
|
this.addGlobalEvent(FriendEvent.UPDATE_GROUP_COUNT, function () {
|
this.updateFriendList(false, true);
|
this.showRedPoint();
|
}.bind(this)); //有人来礼物
|
|
this.addGlobalEvent(FriendEvent.FRIEND_LIST, function () {
|
this.updateFriendList(false);
|
this.showRedPoint();
|
}.bind(this)); //更新红点用
|
|
this.addGlobalEvent(FriendEvent.Update_Red_Point, function () {
|
this.showRedPoint();
|
}.bind(this));
|
},
|
openRootWnd: function openRootWnd(type) {
|
type = type || FriendConst.Type.MyFriend;
|
this.setSelecteTab(type, true);
|
this.showRedPoint();
|
},
|
//切换标签页
|
selectedTabCallBack: function selectedTabCallBack(type) {
|
type = type || FriendConst.Type.MyFriend;
|
if (this.cur_type == type) return;
|
this.changeFriendBtn(false); // //切换到好友列表就把红点清掉
|
|
this.setTabTips(false, FriendConst.Type.MyFriend);
|
this.cur_type = type;
|
|
if (this.pre_panel != null) {
|
if (this.pre_panel.setVisibleStatus) this.pre_panel.setVisibleStatus(false);
|
}
|
|
this.pre_panel = this.createSubPanel(this.cur_type);
|
|
if (this.pre_panel != null) {
|
if (this.pre_panel.setVisibleStatus) this.pre_panel.setVisibleStatus(true);
|
}
|
|
if (this.cur_type == FriendConst.Type.MyFriend) {
|
this.scroll_con.y = 433;
|
this.scroll_con.setContentSize(cc.size(this.scroll_width, this.scroll_height));
|
this.item_scrollview.resetSize(cc.size(this.scroll_width, this.scroll_height));
|
} else if (this.cur_type == FriendConst.Type.Award) {
|
this.scroll_con.y = 375;
|
this.scroll_con.setContentSize(cc.size(this.scroll_width, 600));
|
this.item_scrollview.resetSize(cc.size(this.scroll_width, 674));
|
} else {
|
this.scroll_con.y = 323;
|
this.scroll_con.setContentSize(cc.size(this.scroll_width, 724));
|
this.item_scrollview.resetSize(cc.size(this.scroll_width, 724));
|
} // //更新列表数据
|
|
|
this.updateFriendList(true);
|
},
|
createSubPanel: function createSubPanel(index) {
|
var panel = this.view_list[index];
|
|
if (panel == null) {
|
if (index == FriendConst.Type.MyFriend) {
|
panel = new FriendListPanel();
|
} else if (index == FriendConst.Type.ApplyList) {
|
panel = new FriendApplyPanel(this.container);
|
} else if (index == FriendConst.Type.Award) {
|
panel = new FriendAwardPanel();
|
} else if (index == FriendConst.Type.BlackList) {
|
panel = new FriendBlackPanel();
|
}
|
|
panel.show();
|
var size = this.container.getContentSize(); // panel.setPosition(cc.v2(size.width / 2, 405));
|
|
panel.setParent(this.container);
|
this.view_list[index] = panel;
|
}
|
|
if (panel && panel.setCallFun) {
|
panel.setCallFun(function (is_del) {
|
if (index == FriendConst.Type.MyFriend) {
|
is_del = is_del || false;
|
this.changeFriendBtn(is_del);
|
}
|
}.bind(this));
|
}
|
|
return panel;
|
},
|
//变更好友子项的按钮作用,true变为删除好友,false还原为私聊
|
changeFriendBtn: function changeFriendBtn(bool) {
|
this.del_friend_status = bool;
|
|
for (var i = 0; i < this.rend_list.length; ++i) {
|
this.rend_list[i].del_status = bool;
|
}
|
|
this.item_scrollview.resetAddPosition(this.rend_list, null, this.cur_type); // var item_list = this.item_scrollview.getItemList();
|
// if (item_list) {
|
// for (var k in item_list) {
|
// item_list[k].setDelStatus(bool)
|
// }
|
// }
|
},
|
updateFriendList: function updateFriendList(change_index, is_del) {
|
change_index = change_index || false;
|
this.rend_list = [];
|
var list = [];
|
|
if (this.cur_type == FriendConst.Type.MyFriend) {
|
list = this.ctrl.getModel().getArray() || [];
|
} else if (this.cur_type == FriendConst.Type.ApplyList) {
|
if (change_index == true) {
|
this.ctrl.apply();
|
return;
|
} else {
|
var array = [];
|
var apply_list = this.ctrl.getModel().getApplyList() || {};
|
|
for (var i in apply_list) {
|
array.push(apply_list[i]);
|
}
|
|
list = array;
|
}
|
|
this.updateApplyNum();
|
} else if (this.cur_type == FriendConst.Type.Award) {
|
var array = this.ctrl.getModel().getArray() || [];
|
var award_array = [];
|
|
for (var i = 0; i < array.length; i++) {
|
var vo = array[i];
|
|
if (vo && vo.is_draw == 1) {
|
award_array.push(vo);
|
}
|
}
|
|
list = award_array;
|
} else if (this.cur_type == FriendConst.Type.BlackList) {
|
list = this.ctrl.getModel().getBlackArray() || [];
|
}
|
|
if (list) {
|
for (var k in list) {
|
if (list[k]) {
|
this.rend_list.push(list[k]);
|
}
|
}
|
}
|
|
this.showEmptyIcon(false);
|
|
if (this.rend_list.length <= 0) {
|
this.showEmptyIcon(true);
|
}
|
|
this.pre_panel.setData(this.rend_list);
|
if (is_del == true && change_index == false && Utils.next(this.rend_list) != null) this.item_scrollview.setData(this.rend_list, null);else {
|
this.item_scrollview.setData(this.rend_list, null, this.cur_type);
|
}
|
},
|
//更新申请数
|
updateApplyNum: function updateApplyNum() {
|
if (this.pre_panel && this.pre_panel.setApplyNum) {
|
var num = this.ctrl.getModel().getApplyNum() || 0;
|
this.pre_panel.setApplyNum(num);
|
}
|
},
|
//红点处理
|
showRedPoint: function showRedPoint() {
|
var award_num = this.ctrl.getModel().getAwardNum() || 0;
|
this.setTabTipsII(award_num, FriendConst.Type.Award);
|
var appl_num = this.ctrl.getModel().getApplyNum() || 0;
|
this.setTabTipsII(appl_num, FriendConst.Type.ApplyList);
|
var list = [{
|
bid: 1,
|
num: award_num
|
}, {
|
bid: 2,
|
num: appl_num
|
}];
|
|
require("mainui_controller").getInstance().setFunctionTipsStatus(MainuiConst.icon.friend, list);
|
},
|
//显示空白
|
showEmptyIcon: function showEmptyIcon(bool) {
|
if (!this.empty_con && bool == false) return;
|
var str = "暂无好友";
|
|
if (this.cur_type == FriendConst.Type.Award) {
|
str = "暂无好友赠送";
|
} else if (this.cur_type == FriendConst.Type.ApplyList) {
|
str = "暂无好友申请";
|
} else if (this.cur_type == FriendConst.Type.BlackList) {
|
str = "暂无拉黑名单";
|
}
|
|
this.empty_label.string = str;
|
this.empty_con.active = bool;
|
},
|
closeCallBack: function closeCallBack() {
|
this.ctrl.openFriendWindow(false);
|
|
if (this.item_scrollview) {
|
this.item_scrollview.DeleteMe();
|
this.item_scrollview = null;
|
}
|
|
for (var i in this.view_list) {
|
var v = this.view_list[i];
|
|
if (v && v.deleteMe) {
|
v.deleteMe();
|
v = null;
|
}
|
}
|
|
this.view_list = null;
|
|
if (this.role_vo != null) {
|
if (this.role_assets_event != null) {
|
this.role_vo.unbind(this.role_assets_event);
|
this.role_assets_event = null;
|
}
|
}
|
}
|
});
|
module.exports = FriendWindow;
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxmcmllbmRcXHZpZXdcXGZyaWVuZF93aW5kb3cuanMiXSwibmFtZXMiOlsiRnJpZW5kQ29udHJvbGxlciIsInJlcXVpcmUiLCJSb2xlQ29udHJvbGxlciIsIkNvbW1vblNjcm9sbFZpZXciLCJGcmllbmRMaXN0SXRlbSIsIkZyaWVuZENvbnN0IiwiRnJpZW5kRXZlbnQiLCJGcmllbmRBd2FyZFBhbmVsIiwiRnJpZW5kQXBwbHlQYW5lbCIsIkZyaWVuZEJsYWNrUGFuZWwiLCJGcmllbmRMaXN0UGFuZWwiLCJNYWludWlDb25zdCIsIkZyaWVuZFdpbmRvdyIsImNjIiwiQ2xhc3MiLCJDb21tb25XaW5kb3dUYWIiLCJjdG9yIiwiY3RybCIsImdldEluc3RhbmNlIiwid2luX3R5cGUiLCJXaW5UeXBlIiwiRnVsbCIsInZpZXdUYWciLCJTQ0VORV9UQUciLCJ1aSIsInRhYl9pbmZvX2xpc3QiLCJsYWJlbCIsIlV0aWxzIiwiVEkxOE4iLCJpbmRleCIsIlR5cGUiLCJNeUZyaWVuZCIsInN0YXR1cyIsIkF3YXJkIiwiQXBwbHlMaXN0IiwiQmxhY2tMaXN0IiwidGl0bGVfc3RyIiwidmlld19saXN0IiwiZnJpZW5kX2xpc3QiLCJzY3JvbGxfd2lkdGgiLCJzY3JvbGxfaGVpZ2h0IiwicmVuZF9saXN0IiwiY2FjaGVfbGl0Iiwicm9sZV92byIsImdldFJvbGVWbyIsImluaXRQYW5lbCIsInNjcm9sbF92aWV3X3NpemUiLCJzaXplIiwic2V0dGluZyIsIml0ZW1fY2xhc3MiLCJzdGFydF94Iiwic3BhY2VfeCIsInN0YXJ0X3kiLCJzcGFjZV95IiwiaXRlbV93aWR0aCIsIml0ZW1faGVpZ2h0Iiwicm93IiwiY29sIiwib25jZV9udW0iLCJuZWVkX2R5bmFtaWMiLCJpdGVtX3Njcm9sbHZpZXciLCJjcmVhdGVTY3JvbGwiLCJzY3JvbGxfY29uIiwidjIiLCJTY3JvbGxWaWV3RGlyIiwidmVydGljYWwiLCJTY3JvbGxWaWV3U3RhcnRQb3MiLCJ0b3AiLCJyZWdpc3RlckV2ZW50IiwiYWRkR2xvYmFsRXZlbnQiLCJGUklFTkRfQVBQTFkiLCJjdXJfdHlwZSIsInVwZGF0ZUZyaWVuZExpc3QiLCJiaW5kIiwiU1RSRU5HVEhfVVBEQVRFIiwiZGF0YSIsImxpc3QiLCJpZF9saXN0IiwiaSIsInYiLCJyaWQiLCJzcnZfaWQiLCJpdGVtX2xpc3QiLCJnZXRJdGVtTGlzdCIsImsiLCJ2byIsImdldERhdGEiLCJzZXREYXRhIiwiRlJJRU5EX0RFTEVURSIsImNoYW5nZUZyaWVuZEJ0biIsIlVQREFURV9BUFBMWSIsInNldFRhYlRpcHMiLCJzaG93UmVkUG9pbnQiLCJyb2xlX2Fzc2V0c19ldmVudCIsIkV2ZW50SWQiLCJVUERBVEVfUk9MRV9BVFRSSUJVVEUiLCJrZXkiLCJ2YWx1ZSIsInByZV9wYW5lbCIsInNldEZyaWVuZFBvaW50IiwiVVBEQVRFX0NPVU5UIiwiVVBEQVRFX0dST1VQX0NPVU5UIiwiRlJJRU5EX0xJU1QiLCJVcGRhdGVfUmVkX1BvaW50Iiwib3BlblJvb3RXbmQiLCJ0eXBlIiwic2V0U2VsZWN0ZVRhYiIsInNlbGVjdGVkVGFiQ2FsbEJhY2siLCJzZXRWaXNpYmxlU3RhdHVzIiwiY3JlYXRlU3ViUGFuZWwiLCJ5Iiwic2V0Q29udGVudFNpemUiLCJyZXNldFNpemUiLCJwYW5lbCIsImNvbnRhaW5lciIsInNob3ciLCJnZXRDb250ZW50U2l6ZSIsInNldFBhcmVudCIsInNldENhbGxGdW4iLCJpc19kZWwiLCJib29sIiwiZGVsX2ZyaWVuZF9zdGF0dXMiLCJsZW5ndGgiLCJkZWxfc3RhdHVzIiwicmVzZXRBZGRQb3NpdGlvbiIsImNoYW5nZV9pbmRleCIsImdldE1vZGVsIiwiZ2V0QXJyYXkiLCJhcHBseSIsImFycmF5IiwiYXBwbHlfbGlzdCIsImdldEFwcGx5TGlzdCIsInB1c2giLCJ1cGRhdGVBcHBseU51bSIsImF3YXJkX2FycmF5IiwiaXNfZHJhdyIsImdldEJsYWNrQXJyYXkiLCJzaG93RW1wdHlJY29uIiwibmV4dCIsInNldEFwcGx5TnVtIiwibnVtIiwiZ2V0QXBwbHlOdW0iLCJhd2FyZF9udW0iLCJnZXRBd2FyZE51bSIsInNldFRhYlRpcHNJSSIsImFwcGxfbnVtIiwiYmlkIiwic2V0RnVuY3Rpb25UaXBzU3RhdHVzIiwiaWNvbiIsImZyaWVuZCIsImVtcHR5X2NvbiIsInN0ciIsImVtcHR5X2xhYmVsIiwic3RyaW5nIiwiYWN0aXZlIiwiY2xvc2VDYWxsQmFjayIsIm9wZW5GcmllbmRXaW5kb3ciLCJEZWxldGVNZSIsImRlbGV0ZU1lIiwidW5iaW5kIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxnQkFBZ0IsR0FBR0MsT0FBTyxDQUFDLG1CQUFELENBQTlCOztBQUNBLElBQUlDLGNBQWMsR0FBR0QsT0FBTyxDQUFDLGlCQUFELENBQTVCOztBQUNBLElBQUlFLGdCQUFnQixHQUFHRixPQUFPLENBQUMsbUJBQUQsQ0FBOUI7O0FBQ0EsSUFBSUcsY0FBYyxHQUFHSCxPQUFPLENBQUMsa0JBQUQsQ0FBNUI7O0FBQ0EsSUFBSUksV0FBVyxHQUFHSixPQUFPLENBQUMsY0FBRCxDQUF6Qjs7QUFDQSxJQUFJSyxXQUFXLEdBQUdMLE9BQU8sQ0FBQyxjQUFELENBQXpCOztBQUNBLElBQUlNLGdCQUFnQixHQUFHTixPQUFPLENBQUMsb0JBQUQsQ0FBOUI7O0FBQ0EsSUFBSU8sZ0JBQWdCLEdBQUdQLE9BQU8sQ0FBQyxvQkFBRCxDQUE5Qjs7QUFDQSxJQUFJUSxnQkFBZ0IsR0FBR1IsT0FBTyxDQUFDLG9CQUFELENBQTlCOztBQUNBLElBQUlTLGVBQWUsR0FBR1QsT0FBTyxDQUFDLG1CQUFELENBQTdCOztBQUNBLElBQUlVLFdBQVcsR0FBR1YsT0FBTyxDQUFDLGNBQUQsQ0FBekI7O0FBRUEsSUFBSVcsWUFBWSxHQUFHQyxFQUFFLENBQUNDLEtBQUgsQ0FBUztBQUN4QixhQUFTQyxlQURlO0FBRXhCQyxFQUFB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SUFBZ0IsSUFBcEIsRUFBMEI7QUFDdEIsVUFBSSxLQUFLa0QsaUJBQUwsSUFBMEIsSUFBOUIsRUFBb0M7QUFDaEMsYUFBS2xELE9BQUwsQ0FBYW9ILE1BQWIsQ0FBb0IsS0FBS2xFLGlCQUF6QjtBQUNBLGFBQUtBLGlCQUFMLEdBQXlCLElBQXpCO0FBQ0g7QUFDSjtBQUVKO0FBN1V1QixDQUFULENBQW5CO0FBa1ZBbUUsTUFBTSxDQUFDQyxPQUFQLEdBQWlCckosWUFBakIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vIEBhdXRob3I6IHNoaXJhaG9Ac3lnLmNvbSjlv4XloassIOWIm+W7uuaooeWdl+eahOS6uuWRmClcclxuLy8gQGRlc2NyaXB0aW9uOlxyXG4vLyAgICAgIOWlveWPi+S4u+eVjOmdolxyXG4vLyA8YnIvPkNyZWF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbnZhciBGcmllbmRDb250cm9sbGVyID0gcmVxdWlyZShcImZyaWVuZF9jb250cm9sbGVyXCIpO1xyXG52YXIgUm9sZUNvbnRyb2xsZXIgPSByZXF1aXJlKFwicm9sZV9jb250cm9sbGVyXCIpO1xyXG52YXIgQ29tbW9uU2Nyb2xsVmlldyA9IHJlcXVpcmUoXCJjb21tb25fc2Nyb2xsdmlld1wiKTtcclxudmFyIEZyaWVuZExpc3RJdGVtID0gcmVxdWlyZShcImZyaWVuZF9saXN0X2l0ZW1cIik7XHJcbnZhciBGcmllbmRDb25zdCA9IHJlcXVpcmUoXCJmcmllbmRfY29uc3RcIik7XHJcbnZhciBGcmllbmRFdmVudCA9IHJlcXVpcmUoXCJmcmllbmRfZXZlbnRcIik7XHJcbnZhciBGcmllbmRBd2FyZFBhbmVsID0gcmVxdWlyZShcImZyaWVuZF9hd2FyZF9wYW5lbFwiKTtcclxudmFyIEZyaWVuZEFwcGx5UGFuZWwgPSByZXF1aXJlKFwiZnJpZW5kX2FwcGx5X3BhbmVsXCIpO1xyXG52YXIgRnJpZW5kQmxhY2tQYW5lbCA9IHJlcXVpcmUoXCJmcmllbmRfYmxhY2tfcGFuZWxcIik7XHJcbnZhciBGcmllbmRMaXN0UGFuZWwgPSByZXF1aXJlKFwiZnJpZW5kX2xpc3RfcGFuZWxcIik7XHJcbnZhciBNYWludWlDb25zdCA9IHJlcXVpcmUoXCJtYWludWlfY29uc3RcIik7XHJcblxyXG52YXIgRnJpZW5kV2luZG93ID0gY2MuQ2xhc3Moe1xyXG4gICAgZXh0ZW5kczogQ29tbW9uV2luZG93VGFiLFxyXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuY3RybCA9IEZyaWVuZENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKTtcclxuICAgICAgICB0aGlzLndpbl90eXBlID0gV2luVHlwZS5GdWxsO1xyXG4gICAgICAgIHRoaXMudmlld1RhZyA9IFNDRU5FX1RBRy51aTsgXHJcbiAgICAgICAgdGhpcy50YWJfaW5mb19saXN0ID0gW1xyXG4gICAgICAgICAgICB7IGxhYmVsOiBVdGlscy5USTE4TihcIuaIkeeahOWlveWPi1wiKSwgaW5kZXg6IEZyaWVuZENvbnN0LlR5cGUuTXlGcmllbmQsIHN0YXR1czogdHJ1ZSB9LFxyXG4gICAgICAgICAgICB7IGxhYmVsOiBVdGlscy5USTE4TihcIumihuWPluekvOeJqVwiKSwgaW5kZXg6IEZyaWVuZENvbnN0LlR5cGUuQXdhcmQsIHN0YXR1czogdHJ1ZSB9LFxyXG4gICAgICAgICAgICB7IGxhYmVsOiBVdGlscy5USTE4TihcIueUs+ivt+WIl+ihqFwiKSwgaW5kZXg6IEZyaWVuZENvbnN0LlR5cGUuQXBwbHlMaXN0LCBzdGF0dXM6IHRydWUgfSxcclxuICAgICAgICAgICAgeyBsYWJlbDogVXRpbHMuVEkxOE4oXCLpu5HlkI3ljZVcIiksIGluZGV4OiBGcmllbmRDb25zdC5UeXBlLkJsYWNrTGlzdCwgc3RhdHVzOiB0cnVlIH1cclxuICAgICAgICBdO1xyXG4gICAgICAgIHRoaXMudGl0bGVfc3RyID0gVXRpbHMuVEkxOE4oXCLlpb3lj4tcIik7XHJcbiAgICAgICAgdGhpcy52aWV3X2xpc3QgPSB7fTtcclxuICAgICAgICB0aGlzLmZyaWVuZF9saXN0ID0ge307XHJcbiAgICAgICAgdGhpcy5zY3JvbGxfd2lkdGggPSA2MzA7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxfaGVpZ2h0ID0gNjE0O1xyXG5cclxuICAgICAgICB0aGlzLnJlbmRfbGlzdCA9IHt9O1xyXG4gICAgICAgIHRoaXMuY2FjaGVfbGl0ID0ge307XHJcbiAgICAgICAgdGhpcy5yb2xlX3ZvID0gUm9sZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRSb2xlVm8oKTtcclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFBhbmVsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNjcm9sbF92aWV3X3NpemUgPSBjYy5zaXplKHRoaXMuc2Nyb2xsX3dpZHRoLCB0aGlzLnNjcm9sbF9oZWlnaHQpXHJcbiAgICAgICAgdmFyIHNldHRpbmcgPSB7XHJcbiAgICAgICAgICAgIGl0ZW1fY2xhc3M6IEZyaWVuZExpc3RJdGVtLCAgICAgIC8vIOWNleWFg+exu1xyXG4gICAgICAgICAgICBzdGFydF94OiA3LjUsICAgICAgICAgICAgICAgICAgICAvLyDnrKzkuIDkuKrljZXlhYPnmoRY6LW354K5XHJcbiAgICAgICAgICAgIHNwYWNlX3g6IDAsICAgICAgICAgICAgICAgICAgICAvLyB45pa55ZCR55qE6Ze06ZqUXHJcbiAgICAgICAgICAgIHN0YXJ0X3k6IDAsICAgICAgICAgICAgICAgICAgICAvLyDnrKzkuIDkuKrljZXlhYPnmoRZ6LW354K5XHJcbiAgICAgICAgICAgIHNwYWNlX3k6IDIsICAgICAgICAgICAgICAgICAgIC8vIHnmlrnlkJHnmoTpl7TpmpRcclxuICAgICAgICAgICAgaXRlbV93aWR0aDogNjI0LCAgICAgICAgICAgICAgIC8vIOWNleWFg+eahOWwuuWvuHdpZHRoXHJcbiAgICAgICAgICAgIGl0ZW1faGVpZ2h0OiAxMTQsICAgICAgICAgICAgICAvLyDljZXlhYPnmoTlsLrlr7hoZWlnaHRcclxuICAgICAgICAgICAgcm93OiAwLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIOihjOaVsO+8jOS9nOeUqOS6juawtOW5s+a7muWKqOexu+Wei1xyXG4gICAgICAgICAgICBjb2w6IDEsICAgICAgICAgICAgICAgICAgICAgICAgLy8g5YiX5pWw77yM5L2c55So5LqO5Z6C55u05rua5Yqo57G75Z6LXHJcbiAgICAgICAgICAgIG9uY2VfbnVtOiAxLFxyXG4gICAgICAgICAgICBuZWVkX2R5bmFtaWM6IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pdGVtX3Njcm9sbHZpZXcgPSBuZXcgQ29tbW9uU2Nyb2xsVmlldygpXHJcbiAgICAgICAgdGhpcy5pdGVtX3Njcm9sbHZpZXcuY3JlYXRlU2Nyb2xsKHRoaXMuc2Nyb2xsX2NvbiwgY2MudjIoMCwgNjUpLCBTY3JvbGxWaWV3RGlyLnZlcnRpY2FsLCBTY3JvbGxWaWV3U3RhcnRQb3MudG9wLCBzY3JvbGxfdmlld19zaXplLCBzZXR0aW5nLCBjYy52MigwLjUsIDAuNSkpXHJcbiAgICB9LFxyXG5cclxuICAgIHJlZ2lzdGVyRXZlbnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvL+eUs+ivt+WlveWPi+WIl+ihqOi/lOWbnlxyXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoRnJpZW5kRXZlbnQuRlJJRU5EX0FQUExZLCAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJfdHlwZSAhPSBGcmllbmRDb25zdC5UeXBlLkFwcGx5TGlzdClcclxuICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZyaWVuZExpc3QoZmFsc2UpO1xyXG4gICAgICAgIH0pLmJpbmQodGhpcykpO1xyXG5cclxuICAgICAgICAvL+i1oOmAgei/lOWbnlxyXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoRnJpZW5kRXZlbnQuU1RSRU5HVEhfVVBEQVRFLCAoZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY3VyX3R5cGUgIT0gRnJpZW5kQ29uc3QuVHlwZS5Bd2FyZCAmJiB0aGlzLmN1cl90eXBlICE9IEZyaWVuZENvbnN0LlR5cGUuTXlGcmllbmQpXHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuXHJcbiAgICAgICAgICAgIHZhciBsaXN0ID0gZGF0YS5saXN0IHx8IHt9O1xyXG4gICAgICAgICAgICB2YXIgaWRfbGlzdCA9IHt9O1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIGxpc3QpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2ID0gbGlzdFtpXTtcclxuICAgICAgICAgICAgICAgIGlkX2xpc3Rbdi5yaWQgKyBcIl9cIiArIHYuc3J2X2lkXSA9IHZcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgaXRlbV9saXN0ID0gdGhpcy5pdGVtX3Njcm9sbHZpZXcuZ2V0SXRlbUxpc3QoKTtcclxuICAgICAgICAgICAgaWYgKGl0ZW1fbGlzdCkge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgayBpbiBpdGVtX2xpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdiA9IGl0ZW1fbGlzdFtrXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdm8gPSB2LmdldERhdGEoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodm8gJiYgaWRfbGlzdFt2by5yaWQgKyBcIl9cIiArIHZvLnNydl9pZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdi5zZXREYXRhKGlkX2xpc3Rbdm8ucmlkICsgXCJfXCIgKyB2by5zcnZfaWRdKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5iaW5kKHRoaXMpKVxyXG5cclxuICAgICAgICAvL+WIoOmZpOWlveWPi+i/lOWbnlxyXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoRnJpZW5kRXZlbnQuRlJJRU5EX0RFTEVURSwgKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY3VyX3R5cGUgIT0gRnJpZW5kQ29uc3QuVHlwZS5NeUZyaWVuZCAmJiB0aGlzLmN1cl90eXBlICE9IEZyaWVuZENvbnN0LlR5cGUuQmxhY2tMaXN0KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRnJpZW5kTGlzdChmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRnJpZW5kQnRuKHRydWUpXHJcbiAgICAgICAgfSkuYmluZCh0aGlzKSlcclxuXHJcbiAgICAgICAgLy/lop7liqDlpb3lj4tcclxuICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KEZyaWVuZEV2ZW50LlVQREFURV9BUFBMWSwgKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY3VyX3R5cGUgIT0gRnJpZW5kQ29uc3QuVHlwZS5NeUZyaWVuZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJUaXBzKHRydWUsIEZyaWVuZENvbnN0LlR5cGUuTXlGcmllbmQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VyX3R5cGUgPT0gRnJpZW5kQ29uc3QuVHlwZS5BcHBseUxpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUZyaWVuZExpc3QoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVGcmllbmRMaXN0KGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNob3dSZWRQb2ludCgpXHJcbiAgICAgICAgfSkuYmluZCh0aGlzKSlcclxuXHJcbiAgICAgICAgLy/lj4vmg4Xngrnlj5jljJbmm7TmlrBcclxuICAgICAgICBpZiAodGhpcy5yb2xlX3ZvICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucm9sZV9hc3NldHNfZXZlbnQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb2xlX2Fzc2V0c19ldmVudCA9IHRoaXMucm9sZV92by5iaW5kKEV2ZW50SWQuVVBEQVRFX1JPTEVfQVRUUklCVVRFLCAoZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09IFwiZnJpZW5kX3BvaW50XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VyX3R5cGUgPT0gRnJpZW5kQ29uc3QuVHlwZS5NeUZyaWVuZCB8fCB0aGlzLmN1cl90eXBlID09IEZyaWVuZENvbnN0LlR5cGUuQXdhcmQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnByZV9wYW5lbCAmJiB0aGlzLnByZV9wYW5lbC5zZXRGcmllbmRQb2ludClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByZV9wYW5lbC5zZXRGcmllbmRQb2ludCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkuYmluZCh0aGlzKSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hZGRHbG9iYWxFdmVudChGcmllbmRFdmVudC5VUERBVEVfQ09VTlQsIChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRnJpZW5kTGlzdChmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1JlZFBvaW50KCk7XHJcbiAgICAgICAgfSkuYmluZCh0aGlzKSlcclxuXHJcbiAgICAgICAgLy/ooqvliKDlpb3lj4tcclxuXHJcbiAgICAgICAgdGhpcy5hZGRHbG9iYWxFdmVudChGcmllbmRFdmVudC5VUERBVEVfR1JPVVBfQ09VTlQsIChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRnJpZW5kTGlzdChmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1JlZFBvaW50KCk7XHJcbiAgICAgICAgfSkuYmluZCh0aGlzKSlcclxuXHJcblxyXG4gICAgICAgIC8v5pyJ5Lq65p2l56S854mpXHJcbiAgICAgICAgdGhpcy5hZGRHbG9iYWxFdmVudChGcmllbmRFdmVudC5GUklFTkRfTElTVCwgKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVGcmllbmRMaXN0KGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5zaG93UmVkUG9pbnQoKTtcclxuICAgICAgICB9KS5iaW5kKHRoaXMpKVxyXG5cclxuICAgICAgICAvL+abtOaWsOe6oueCueeUqFxyXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoRnJpZW5kRXZlbnQuVXBkYXRlX1JlZF9Qb2ludCwgKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93UmVkUG9pbnQoKTtcclxuICAgICAgICB9KS5iaW5kKHRoaXMpKVxyXG4gICAgfSxcclxuXHJcbiAgICBvcGVuUm9vdFduZDogZnVuY3Rpb24gKHR5cGUpIHtcclxuICAgICAgICB0eXBlID0gdHlwZSB8fCBGcmllbmRDb25zdC5UeXBlLk15RnJpZW5kO1xyXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZVRhYih0eXBlLCB0cnVlKTtcclxuICAgICAgICB0aGlzLnNob3dSZWRQb2ludCgpO1xyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLy/liIfmjaLmoIfnrb7pobVcclxuICAgIHNlbGVjdGVkVGFiQ2FsbEJhY2s6IGZ1bmN0aW9uICh0eXBlKSB7XHJcbiAgICAgICAgdHlwZSA9IHR5cGUgfHwgRnJpZW5kQ29uc3QuVHlwZS5NeUZyaWVuZDtcclxuICAgICAgICBpZiAodGhpcy5jdXJfdHlwZSA9PSB0eXBlKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB0aGlzLmNoYW5nZUZyaWVuZEJ0bihmYWxzZSk7XHJcbiAgICAgICAgLy8gLy/liIfmjaLliLDlpb3lj4vliJfooajlsLHmiornuqLngrnmuIXmjolcclxuICAgICAgICB0aGlzLnNldFRhYlRpcHMoZmFsc2UsIEZyaWVuZENvbnN0LlR5cGUuTXlGcmllbmQpO1xyXG5cclxuICAgICAgICB0aGlzLmN1cl90eXBlID0gdHlwZTtcclxuICAgICAgICBpZiAodGhpcy5wcmVfcGFuZWwgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wcmVfcGFuZWwuc2V0VmlzaWJsZVN0YXR1cylcclxuICAgICAgICAgICAgICAgIHRoaXMucHJlX3BhbmVsLnNldFZpc2libGVTdGF0dXMoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wcmVfcGFuZWwgPSB0aGlzLmNyZWF0ZVN1YlBhbmVsKHRoaXMuY3VyX3R5cGUpO1xyXG4gICAgICAgIGlmICh0aGlzLnByZV9wYW5lbCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnByZV9wYW5lbC5zZXRWaXNpYmxlU3RhdHVzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmVfcGFuZWwuc2V0VmlzaWJsZVN0YXR1cyh0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiAodGhpcy5jdXJfdHlwZSA9PSBGcmllbmRDb25zdC5UeXBlLk15RnJpZW5kKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsX2Nvbi55ID0gNDMzO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbF9jb24uc2V0Q29udGVudFNpemUoY2Muc2l6ZSh0aGlzLnNjcm9sbF93aWR0aCwgdGhpcy5zY3JvbGxfaGVpZ2h0KSk7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbV9zY3JvbGx2aWV3LnJlc2V0U2l6ZShjYy5zaXplKHRoaXMuc2Nyb2xsX3dpZHRoLCB0aGlzLnNjcm9sbF9oZWlnaHQpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY3VyX3R5cGUgPT0gRnJpZW5kQ29uc3QuVHlwZS5Bd2FyZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbF9jb24ueSA9IDM3NTtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxfY29uLnNldENvbnRlbnRTaXplKGNjLnNpemUodGhpcy5zY3JvbGxfd2lkdGgsIDYwMCkpO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1fc2Nyb2xsdmlldy5yZXNldFNpemUoY2Muc2l6ZSh0aGlzLnNjcm9sbF93aWR0aCwgNjc0KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxfY29uLnkgPSAzMjM7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsX2Nvbi5zZXRDb250ZW50U2l6ZShjYy5zaXplKHRoaXMuc2Nyb2xsX3dpZHRoLCA3MjQpKTtcclxuICAgICAgICAgICAgdGhpcy5pdGVtX3Njcm9sbHZpZXcucmVzZXRTaXplKGNjLnNpemUodGhpcy5zY3JvbGxfd2lkdGgsIDcyNCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyAvL+abtOaWsOWIl+ihqOaVsOaNrlxyXG4gICAgICAgIHRoaXMudXBkYXRlRnJpZW5kTGlzdCh0cnVlKTtcclxuICAgIH0sXHJcblxyXG5cclxuICAgIGNyZWF0ZVN1YlBhbmVsOiBmdW5jdGlvbiAoaW5kZXgpIHtcclxuICAgICAgICB2YXIgcGFuZWwgPSB0aGlzLnZpZXdfbGlzdFtpbmRleF07XHJcbiAgICAgICAgaWYgKHBhbmVsID09IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID09IEZyaWVuZENvbnN0LlR5cGUuTXlGcmllbmQpIHtcclxuICAgICAgICAgICAgICAgIHBhbmVsID0gbmV3IEZyaWVuZExpc3RQYW5lbCgpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID09IEZyaWVuZENvbnN0LlR5cGUuQXBwbHlMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICBwYW5lbCA9IG5ldyBGcmllbmRBcHBseVBhbmVsKHRoaXMuY29udGFpbmVyKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbmRleCA9PSBGcmllbmRDb25zdC5UeXBlLkF3YXJkKSB7XHJcbiAgICAgICAgICAgICAgICBwYW5lbCA9IG5ldyBGcmllbmRBd2FyZFBhbmVsKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT0gRnJpZW5kQ29uc3QuVHlwZS5CbGFja0xpc3QpIHtcclxuICAgICAgICAgICAgICAgIHBhbmVsID0gbmV3IEZyaWVuZEJsYWNrUGFuZWwoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwYW5lbC5zaG93KClcclxuICAgICAgICAgICAgdmFyIHNpemUgPSB0aGlzLmNvbnRhaW5lci5nZXRDb250ZW50U2l6ZSgpO1xyXG4gICAgICAgICAgICAvLyBwYW5lbC5zZXRQb3NpdGlvbihjYy52MihzaXplLndpZHRoIC8gMiwgNDA1KSk7XHJcbiAgICAgICAgICAgIHBhbmVsLnNldFBhcmVudCh0aGlzLmNvbnRhaW5lcik7XHJcbiAgICAgICAgICAgIHRoaXMudmlld19saXN0W2luZGV4XSA9IHBhbmVsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHBhbmVsICYmIHBhbmVsLnNldENhbGxGdW4pIHtcclxuICAgICAgICAgICAgcGFuZWwuc2V0Q2FsbEZ1bigoZnVuY3Rpb24gKGlzX2RlbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID09IEZyaWVuZENvbnN0LlR5cGUuTXlGcmllbmQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpc19kZWwgPSBpc19kZWwgfHwgZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VGcmllbmRCdG4oaXNfZGVsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkuYmluZCh0aGlzKSlcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBhbmVsXHJcbiAgICB9LFxyXG5cclxuICAgIC8v5Y+Y5pu05aW95Y+L5a2Q6aG555qE5oyJ6ZKu5L2c55So77yMdHJ1ZeWPmOS4uuWIoOmZpOWlveWPi++8jGZhbHNl6L+Y5Y6f5Li656eB6IGKXHJcbiAgICBjaGFuZ2VGcmllbmRCdG46IGZ1bmN0aW9uIChib29sKSB7XHJcbiAgICAgICAgdGhpcy5kZWxfZnJpZW5kX3N0YXR1cyA9IGJvb2w7XHJcbiAgICAgICAgZm9yKGxldCBpPTA7aTx0aGlzLnJlbmRfbGlzdC5sZW5ndGg7KytpKXtcclxuICAgICAgICAgICAgdGhpcy5yZW5kX2xpc3RbaV0uZGVsX3N0YXR1cyA9IGJvb2xcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pdGVtX3Njcm9sbHZpZXcucmVzZXRBZGRQb3NpdGlvbih0aGlzLnJlbmRfbGlzdCwgbnVsbCwgdGhpcy5jdXJfdHlwZSk7XHJcbiAgICAgICAgLy8gdmFyIGl0ZW1fbGlzdCA9IHRoaXMuaXRlbV9zY3JvbGx2aWV3LmdldEl0ZW1MaXN0KCk7XHJcbiAgICAgICAgLy8gaWYgKGl0ZW1fbGlzdCkge1xyXG4gICAgICAgIC8vICAgICBmb3IgKHZhciBrIGluIGl0ZW1fbGlzdCkge1xyXG4gICAgICAgIC8vICAgICAgICAgaXRlbV9saXN0W2tdLnNldERlbFN0YXR1cyhib29sKVxyXG4gICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgLy8gfVxyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGVGcmllbmRMaXN0OiBmdW5jdGlvbiAoY2hhbmdlX2luZGV4LCBpc19kZWwpIHtcclxuICAgICAgICBjaGFuZ2VfaW5kZXggPSBjaGFuZ2VfaW5kZXggfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZW5kX2xpc3QgPSBbXTtcclxuICAgICAgICB2YXIgbGlzdCA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLmN1cl90eXBlID09IEZyaWVuZENvbnN0LlR5cGUuTXlGcmllbmQpIHtcclxuICAgICAgICAgICAgbGlzdCA9IHRoaXMuY3RybC5nZXRNb2RlbCgpLmdldEFycmF5KCkgfHwgW107XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cl90eXBlID09IEZyaWVuZENvbnN0LlR5cGUuQXBwbHlMaXN0KSB7XHJcbiAgICAgICAgICAgIGlmIChjaGFuZ2VfaW5kZXggPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHJsLmFwcGx5KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciBhcnJheSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGFwcGx5X2xpc3QgPSB0aGlzLmN0cmwuZ2V0TW9kZWwoKS5nZXRBcHBseUxpc3QoKSB8fCB7fTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgaW4gYXBwbHlfbGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5LnB1c2goYXBwbHlfbGlzdFtpXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsaXN0ID0gYXJyYXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVBcHBseU51bSgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJfdHlwZSA9PSBGcmllbmRDb25zdC5UeXBlLkF3YXJkKSB7XHJcbiAgICAgICAgICAgIHZhciBhcnJheSA9IHRoaXMuY3RybC5nZXRNb2RlbCgpLmdldEFycmF5KCkgfHwgW107XHJcbiAgICAgICAgICAgIHZhciBhd2FyZF9hcnJheSA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdm8gPSBhcnJheVtpXTtcclxuICAgICAgICAgICAgICAgIGlmICh2byAmJiB2by5pc19kcmF3ID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FyZF9hcnJheS5wdXNoKHZvKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsaXN0ID0gYXdhcmRfYXJyYXk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cl90eXBlID09IEZyaWVuZENvbnN0LlR5cGUuQmxhY2tMaXN0KSB7XHJcbiAgICAgICAgICAgIGxpc3QgPSB0aGlzLmN0cmwuZ2V0TW9kZWwoKS5nZXRCbGFja0FycmF5KCkgfHwgW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsaXN0KSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGsgaW4gbGlzdCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGxpc3Rba10pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRfbGlzdC5wdXNoKGxpc3Rba10pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNob3dFbXB0eUljb24oZmFsc2UpO1xyXG4gICAgICAgIGlmICh0aGlzLnJlbmRfbGlzdC5sZW5ndGggPD0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dFbXB0eUljb24odHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJlX3BhbmVsLnNldERhdGEodGhpcy5yZW5kX2xpc3QpO1xyXG4gICAgICAgIGlmIChpc19kZWwgPT0gdHJ1ZSAmJiBjaGFuZ2VfaW5kZXggPT0gZmFsc2UgJiYgVXRpbHMubmV4dCh0aGlzLnJlbmRfbGlzdCkgIT0gbnVsbClcclxuICAgICAgICAgICAgdGhpcy5pdGVtX3Njcm9sbHZpZXcuc2V0RGF0YSh0aGlzLnJlbmRfbGlzdCwgbnVsbCk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbV9zY3JvbGx2aWV3LnNldERhdGEodGhpcy5yZW5kX2xpc3QsIG51bGwsIHRoaXMuY3VyX3R5cGUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLy/mm7TmlrDnlLPor7fmlbBcclxuICAgIHVwZGF0ZUFwcGx5TnVtOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucHJlX3BhbmVsICYmIHRoaXMucHJlX3BhbmVsLnNldEFwcGx5TnVtKSB7XHJcbiAgICAgICAgICAgIHZhciBudW0gPSB0aGlzLmN0cmwuZ2V0TW9kZWwoKS5nZXRBcHBseU51bSgpIHx8IDA7XHJcbiAgICAgICAgICAgIHRoaXMucHJlX3BhbmVsLnNldEFwcGx5TnVtKG51bSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLy/nuqLngrnlpITnkIZcclxuICAgIHNob3dSZWRQb2ludDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBhd2FyZF9udW0gPSB0aGlzLmN0cmwuZ2V0TW9kZWwoKS5nZXRBd2FyZE51bSgpIHx8IDA7XHJcbiAgICAgICAgdGhpcy5zZXRUYWJUaXBzSUkoYXdhcmRfbnVtLCBGcmllbmRDb25zdC5UeXBlLkF3YXJkKTtcclxuICAgICAgICB2YXIgYXBwbF9udW0gPSB0aGlzLmN0cmwuZ2V0TW9kZWwoKS5nZXRBcHBseU51bSgpIHx8IDA7XHJcbiAgICAgICAgdGhpcy5zZXRUYWJUaXBzSUkoYXBwbF9udW0sIEZyaWVuZENvbnN0LlR5cGUuQXBwbHlMaXN0KTtcclxuICAgICAgICB2YXIgbGlzdCA9IFt7IGJpZDogMSwgbnVtOiBhd2FyZF9udW0gfSwgeyBiaWQ6IDIsIG51bTogYXBwbF9udW0gfV07XHJcbiAgICAgICAgcmVxdWlyZShcIm1haW51aV9jb250cm9sbGVyXCIpLmdldEluc3RhbmNlKCkuc2V0RnVuY3Rpb25UaXBzU3RhdHVzKE1haW51aUNvbnN0Lmljb24uZnJpZW5kLCBsaXN0KVxyXG4gICAgfSxcclxuXHJcbiAgICAvL+aYvuekuuepuueZvVxyXG4gICAgc2hvd0VtcHR5SWNvbjogZnVuY3Rpb24gKGJvb2wpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZW1wdHlfY29uICYmIGJvb2wgPT0gZmFsc2UpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG5cclxuICAgICAgICB2YXIgc3RyID0gXCLmmoLml6Dlpb3lj4tcIjtcclxuICAgICAgICBpZiAodGhpcy5jdXJfdHlwZSA9PSBGcmllbmRDb25zdC5UeXBlLkF3YXJkKSB7XHJcbiAgICAgICAgICAgIHN0ciA9IFwi5pqC5peg5aW95Y+L6LWg6YCBXCI7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cl90eXBlID09IEZyaWVuZENvbnN0LlR5cGUuQXBwbHlMaXN0KSB7XHJcbiAgICAgICAgICAgIHN0ciA9IFwi5pqC5peg5aW95Y+L55Sz6K+3XCI7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cl90eXBlID09IEZyaWVuZENvbnN0LlR5cGUuQmxhY2tMaXN0KSB7XHJcbiAgICAgICAgICAgIHN0ciA9IFwi5pqC5peg5ouJ6buR5ZCN5Y2VXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZW1wdHlfbGFiZWwuc3RyaW5nID0gc3RyO1xyXG4gICAgICAgIHRoaXMuZW1wdHlfY29uLmFjdGl2ZSA9IGJvb2w7XHJcbiAgICB9LFxyXG4gICAgY2xvc2VDYWxsQmFjazogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuY3RybC5vcGVuRnJpZW5kV2luZG93KGZhbHNlKTtcclxuICAgICAgICBpZiAodGhpcy5pdGVtX3Njcm9sbHZpZXcpIHtcclxuICAgICAgICAgICAgdGhpcy5pdGVtX3Njcm9sbHZpZXcuRGVsZXRlTWUoKTtcclxuICAgICAgICAgICAgdGhpcy5pdGVtX3Njcm9sbHZpZXcgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBpIGluIHRoaXMudmlld19saXN0KSB7XHJcbiAgICAgICAgICAgIHZhciB2ID0gdGhpcy52aWV3X2xpc3RbaV07XHJcbiAgICAgICAgICAgIGlmICh2ICYmIHYuZGVsZXRlTWUpIHtcclxuICAgICAgICAgICAgICAgIHYuZGVsZXRlTWUoKTtcclxuICAgICAgICAgICAgICAgIHYgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmlld19saXN0ID0gbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5yb2xlX3ZvICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucm9sZV9hc3NldHNfZXZlbnQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb2xlX3ZvLnVuYmluZCh0aGlzLnJvbGVfYXNzZXRzX2V2ZW50KTtcclxuICAgICAgICAgICAgICAgIHRoaXMucm9sZV9hc3NldHNfZXZlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcblxyXG59KTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRnJpZW5kV2luZG93OyJdfQ==
|