1406 lines
208 KiB
JavaScript
1406 lines
208 KiB
JavaScript
|
||
(function() {
|
||
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
||
var __module = nodeEnv ? module : {exports:{}};
|
||
var __filename = 'preview-scripts/assets/Script/GameManager.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, 'b0432BA295DjIOcuitdGKO1', 'GameManager');
|
||
// Script/GameManager.ts
|
||
|
||
"use strict";
|
||
var __extends = (this && this.__extends) || (function () {
|
||
var extendStatics = function (d, b) {
|
||
extendStatics = Object.setPrototypeOf ||
|
||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
||
return extendStatics(d, b);
|
||
};
|
||
return function (d, b) {
|
||
extendStatics(d, b);
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
})();
|
||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||
};
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var Block_1 = require("./Block");
|
||
// 主游戏控制类
|
||
var _a = cc._decorator, ccclass = _a.ccclass, property = _a.property;
|
||
var GameManager = /** @class */ (function (_super) {
|
||
__extends(GameManager, _super);
|
||
function GameManager() {
|
||
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||
_this.Map = null;
|
||
_this.Block = null;
|
||
_this.Time = null;
|
||
_this.Countdown = null;
|
||
_this.Guide = null;
|
||
return _this;
|
||
}
|
||
GameManager.prototype.onLoad = function () {
|
||
};
|
||
GameManager.prototype.start = function () {
|
||
cc.fx.GameConfig.CLICK_init();
|
||
this.fit();
|
||
this.init();
|
||
};
|
||
//处理地图数据 第一关完全随机,从第二关开始,赢了根据5秒洪峰来临增加难度步数,输了当前难度减步数
|
||
GameManager.prototype.getMap = function () {
|
||
// var temp = [];
|
||
// for(let k=0; k<cc.fx.GameConfig.LEVEL_INFO.length; k++){
|
||
// temp[k] = [];
|
||
// for(let j=0; j<cc.fx.GameConfig.LEVEL_INFO[k].length; j++){
|
||
// temp[k].push(cc.fx.GameConfig.LEVEL_INFO[k][j].min_steps);
|
||
// }
|
||
// }
|
||
// console.log(temp);
|
||
var custom = 0;
|
||
var map = [];
|
||
if (cc.fx.GameConfig.GM_INFO.level == 1) {
|
||
custom = Math.floor(Math.random() * cc.fx.GameConfig.LEVEL_INFO[cc.fx.GameConfig.GM_INFO.level].length);
|
||
}
|
||
else {
|
||
var arr = cc.fx.GameConfig.LEVEL_INFO[cc.fx.GameConfig.GM_INFO.level];
|
||
if (cc.fx.GameConfig.GM_INFO.min_Time == -1) {
|
||
map = this.getMapArray(arr, cc.fx.GameConfig.GM_INFO.min_Steps - 1, false);
|
||
}
|
||
else if (cc.fx.GameConfig.GM_INFO.min_Time >= 5) {
|
||
map = this.getMapArray(arr, cc.fx.GameConfig.GM_INFO.min_Steps + 2, true);
|
||
}
|
||
else {
|
||
map = this.getMapArray(arr, cc.fx.GameConfig.GM_INFO.min_Steps + 1, true);
|
||
}
|
||
var random = Math.floor(Math.random() * map.length);
|
||
custom = map[random];
|
||
console.log(custom, map);
|
||
}
|
||
//记录当前最小步数
|
||
cc.fx.GameConfig.GM_INFO.min_Steps = cc.fx.GameConfig.LEVEL_INFO[cc.fx.GameConfig.GM_INFO.level][custom].min_steps;
|
||
cc.fx.GameConfig.GM_INFO.min_Time = 0;
|
||
return custom;
|
||
};
|
||
//获取下一关难度,步数增加2或者1,如果没有则降到有.
|
||
GameManager.prototype.getMapArray = function (arr, min_steps, type) {
|
||
var map = [];
|
||
for (var i = 0; i < arr.length; i++) {
|
||
if (arr[i].min_steps == min_steps) {
|
||
map.push(i);
|
||
}
|
||
}
|
||
if (map.length == 0) {
|
||
if (type)
|
||
map = this.getMapArray(arr, min_steps - 1, type);
|
||
else
|
||
map = this.getMapArray(arr, min_steps + 1, type);
|
||
}
|
||
return map;
|
||
};
|
||
//初始化数据
|
||
GameManager.prototype.init = function () {
|
||
var name = cc.fx.GameConfig.GM_INFO.gameId + "_guide";
|
||
var data = JSON.parse(localStorage.getItem(name));
|
||
if (data != false) {
|
||
cc.fx.GameConfig.GM_INFO.guide = true;
|
||
cc.fx.StorageMessage.setStorage(name, cc.fx.GameConfig.GM_INFO.guide);
|
||
}
|
||
else {
|
||
cc.fx.GameConfig.GM_INFO.guide = cc.fx.StorageMessage.getStorage(name);
|
||
}
|
||
this.initMap();
|
||
this.finishiTime = 0;
|
||
this.scoreTime = 0;
|
||
this.replaceTime = 0;
|
||
this.startTime = cc.fx.GameTool.getTime();
|
||
this.countTime = cc.fx.GameConfig.TIME_INFO.totalTime;
|
||
this.waterTime = cc.fx.GameConfig.TIME_INFO.waterTime[cc.fx.GameConfig.GM_INFO.level];
|
||
// if(this.countTime < this.waterTime) this.replaceTime = this.countTime;
|
||
this.Time.string = cc.fx.GameTool.getTimeMargin(this.countTime);
|
||
if (!cc.fx.GameConfig.GM_INFO.guide) {
|
||
this.Guide.active = false;
|
||
this.step = 0;
|
||
var head = this.node.getChildByName("Top").getChildByName("head");
|
||
var progress = this.node.getChildByName("Top").getChildByName("progress").getComponent(cc.Sprite);
|
||
head.runAction(cc.moveTo(this.waterTime, cc.v2(310, head.y)));
|
||
this.waterTween = cc.tween(progress)
|
||
.to(this.waterTime, { fillRange: 1 })
|
||
.start();
|
||
this.schedule(this.updateWaterTime, 1);
|
||
this.schedule(this.updateCountDownTime, 1);
|
||
}
|
||
else {
|
||
this.Guide.active = true;
|
||
this.guideNext();
|
||
}
|
||
};
|
||
//初始化地图
|
||
GameManager.prototype.initMap = function () {
|
||
cc.fx.GameConfig.GM_INFO.round += 1;
|
||
cc.fx.GameConfig.GM_INFO.fen = 0;
|
||
this.block_Array = [];
|
||
this.path_Array = [];
|
||
this.water_Array = [];
|
||
this.map_Array = [];
|
||
this.tip_Array = [];
|
||
this.plan_over = false;
|
||
this.map_Hight = 0;
|
||
this.map_Width = 0;
|
||
this.step = 0;
|
||
this.bgClick = false;
|
||
this.btnClick = false;
|
||
this.custom = 0; //9
|
||
if (!cc.fx.GameConfig.GM_INFO.guide && cc.fx.GameConfig.GM_INFO.level == 0) {
|
||
cc.fx.GameConfig.GM_INFO.level = 1;
|
||
this.custom = this.getMap();
|
||
}
|
||
else if (!cc.fx.GameConfig.GM_INFO.guide) {
|
||
this.custom = this.getMap();
|
||
}
|
||
console.log(this.custom);
|
||
var arr = cc.fx.GameConfig.LEVEL_INFO[cc.fx.GameConfig.GM_INFO.level][this.custom].map;
|
||
if (cc.fx.GameConfig.GM_INFO.level == 0) {
|
||
this.Map.scale = 1.2;
|
||
}
|
||
this.node.getChildByName("Top").getChildByName("id").getComponent(cc.Label).string =
|
||
cc.fx.GameConfig.LEVEL_INFO[cc.fx.GameConfig.GM_INFO.level][this.custom].id;
|
||
//将地图x,y轴切换
|
||
this.map_Array = arr[0].map(function (item, i) {
|
||
return arr.map(function (val) { return val[i]; });
|
||
});
|
||
this.map_Width = this.map_Array.length;
|
||
this.map_Hight = this.map_Array[0].length;
|
||
this.Map.x = (6 - this.map_Array.length) * 48;
|
||
this.Map.y = (this.map_Array[0].length - 6.5) * 48;
|
||
for (var i = 0; i < this.map_Array.length; i++) {
|
||
for (var j = 0; j < this.map_Array[i].length; j++) {
|
||
var block = cc.instantiate(this.Block);
|
||
block.parent = this.Map;
|
||
block.getComponent("Block").initData(this.map_Array[i][j], cc.v2(i, j), cc.v2(this.map_Width, this.map_Hight));
|
||
if (this.map_Array[i][j] == cc.Enum(Block_1.BlockType).Start) {
|
||
this.path_Array.push(cc.v3(i, j, cc.Enum(Block_1.BlockType).Nomal));
|
||
// this.water_Array.push(cc.v3(i,j,cc.Enum(BlockType).Nomal));
|
||
}
|
||
block.setPosition(cc.v2(-block.width * 2.5 + i * block.width, block.height * 4 - j * block.height));
|
||
this.block_Array.push(block);
|
||
}
|
||
}
|
||
};
|
||
//开始后,按玩家操作,将路径中地图块放入数组中
|
||
GameManager.prototype.setMap = function (data) {
|
||
for (var i = 0; i < data.length; i++) {
|
||
var start = this.path_Array[this.path_Array.length - 1];
|
||
switch (data[i]) {
|
||
case "up":
|
||
this.path_Array.push(cc.v3(start.x, start.y - 1, cc.Enum(Block_1.BlockType).Nomal));
|
||
break;
|
||
case "down":
|
||
this.path_Array.push(cc.v3(start.x, start.y + 1, cc.Enum(Block_1.BlockType).Nomal));
|
||
break;
|
||
case "left":
|
||
this.path_Array.push(cc.v3(start.x - 1, start.y, cc.Enum(Block_1.BlockType).Nomal));
|
||
break;
|
||
case "right":
|
||
this.path_Array.push(cc.v3(start.x + 1, start.y, cc.Enum(Block_1.BlockType).Nomal));
|
||
break;
|
||
case "reinforce":
|
||
this.path_Array.push(cc.v3(start.x, start.y, cc.Enum(Block_1.BlockType).Reinforce));
|
||
break;
|
||
case "soil":
|
||
this.path_Array.push(cc.v3(start.x, start.y, cc.Enum(Block_1.BlockType).Xi_Soil));
|
||
break;
|
||
}
|
||
}
|
||
if (this.path_Array[this.path_Array.length - 1].z != 0) {
|
||
this.path_Array.pop();
|
||
}
|
||
this.runRoad(0);
|
||
};
|
||
//开始执行洪峰来了的动画
|
||
GameManager.prototype.runRoad = function (order) {
|
||
var _this = this;
|
||
order = parseInt(order);
|
||
if (order > 0) {
|
||
if (this.path_Array[order - 1].z == 0) {
|
||
//console.log("1正常放入",this.path_Array[order-1].x,this.path_Array[order-1].y,this.path_Array[order-1].z)
|
||
this.changeWater(cc.v3(this.path_Array[order - 1].x, this.path_Array[order - 1].y, 0));
|
||
if (order == this.path_Array.length - 1) {
|
||
this.changeWater(cc.v3(this.path_Array[order].x, this.path_Array[order].y, 0));
|
||
// console.log("最后放入",this.path_Array[order].x,this.path_Array[order].y)
|
||
}
|
||
}
|
||
else {
|
||
//console.log("2插入",this.path_Array[order].x,this.path_Array[order].y,this.path_Array[order].z)
|
||
this.changeWater(cc.v3(this.path_Array[order].x, this.path_Array[order].y, 0));
|
||
}
|
||
}
|
||
if (order <= this.path_Array.length - 1) {
|
||
var i = this.path_Array[order].x * this.map_Array[0].length + this.path_Array[order].y;
|
||
var direction = "";
|
||
var circulate = true;
|
||
//最后一步结束
|
||
if (order == this.path_Array.length - 1) {
|
||
circulate = false;
|
||
direction = "End";
|
||
// console.log("进入结束");
|
||
if (this.path_Array.length > 1) {
|
||
// console.log("准备出水");
|
||
setTimeout(function () {
|
||
if (!_this.plan_over) {
|
||
_this.plan_over = true;
|
||
_this.unschedule(_this.updateWaterTime);
|
||
var head = _this.node.getChildByName("Top").getChildByName("head");
|
||
var progress = _this.node.getChildByName("Top").getChildByName("progress").getComponent(cc.Sprite);
|
||
head.stopAllActions();
|
||
head.setPosition(310, head.y);
|
||
if (_this.waterTween)
|
||
_this.waterTween.stop();
|
||
progress.fillRange = 1;
|
||
cc.fx.GameConfig.GM_INFO.min_Time = _this.waterTime;
|
||
_this.runWater(0);
|
||
}
|
||
}, 500);
|
||
}
|
||
else {
|
||
direction = "err";
|
||
console.log("进入结束err");
|
||
}
|
||
}
|
||
else {
|
||
if (this.path_Array[order].z == 6 && order + 1 < this.path_Array.length) {
|
||
direction = "Reinforce";
|
||
i = this.path_Array[order + 1].x * this.map_Array[0].length + this.path_Array[order + 1].y;
|
||
}
|
||
else if (order + 1 < this.path_Array.length) {
|
||
if (this.path_Array[order + 1].z == 5) {
|
||
direction = "Xi_Soil";
|
||
}
|
||
else if (this.path_Array[order + 1].z == 6 && order == 0 && order + 1 < this.path_Array.length) {
|
||
direction = this.getDirection(order + 1, this.path_Array);
|
||
}
|
||
else {
|
||
direction = this.getDirection(order, this.path_Array);
|
||
}
|
||
}
|
||
else {
|
||
direction = this.getDirection(order, this.path_Array);
|
||
}
|
||
}
|
||
// console.log(order,this.path_Array[order].x,this.path_Array[order].y,i);
|
||
// console.log("步骤:",order,"方向",direction);
|
||
var jg = this.getBoundary(order, this.path_Array[order].x, this.path_Array[order].y, direction, this.path_Array);
|
||
// if(direction == "" || jg == false) return;
|
||
if (direction == "err" || direction == "" || jg == false) {
|
||
cc.fx.Notifications.emit(cc.fx.Message.showResult, "lose");
|
||
cc.fx.Notifications.emit(cc.fx.Message.setData, false);
|
||
return;
|
||
}
|
||
var target = this.block_Array[i].getComponent("Block");
|
||
target.setPath(direction);
|
||
if (order > 0 && order < this.path_Array.length - 1) {
|
||
if (this.path_Array[order + 1].z == 5) {
|
||
this.set_Soil(order + 1, this.path_Array, "road");
|
||
circulate = false;
|
||
return;
|
||
}
|
||
else if (order == 1 && this.path_Array[order].z == 5) {
|
||
this.set_Soil(order, this.path_Array, "road");
|
||
circulate = false;
|
||
return;
|
||
}
|
||
}
|
||
var pos = cc.v2();
|
||
if (direction == "End") {
|
||
if (order > 0) {
|
||
// if(this.path_Array[order-1].z == 0){
|
||
pos = cc.v2(this.path_Array[order - 1].x, this.path_Array[order - 1].y);
|
||
// }
|
||
}
|
||
}
|
||
var data = {
|
||
order: order,
|
||
time: cc.fx.GameConfig.TIME_INFO.waterSpeed[cc.fx.GameConfig.GM_INFO.level],
|
||
type: this.path_Array[order].z,
|
||
circulate: circulate,
|
||
last: pos
|
||
};
|
||
target.runRoad(data);
|
||
}
|
||
};
|
||
//判断边界。或者撞山,或者湿地没有加固
|
||
GameManager.prototype.getBoundary = function (order, x, y, direction, road) {
|
||
var jg = true;
|
||
if (x < 0 || x >= this.map_Width || y < 0 || y >= this.map_Hight) {
|
||
jg = false;
|
||
// console.log("超过边界,游戏结束");
|
||
// alert("超过边界,治水失败");
|
||
cc.fx.Notifications.emit(cc.fx.Message.showResult, "lose");
|
||
cc.fx.Notifications.emit(cc.fx.Message.setData, false);
|
||
}
|
||
else {
|
||
var i = road[order].x * this.map_Array[0].length + road[order].y;
|
||
var target = this.block_Array[i].getComponent("Block");
|
||
if (target.block_Type == 3) {
|
||
jg = false;
|
||
// console.log("修筑山峰,游戏结束");
|
||
// alert("修筑山峰,治水失败");
|
||
cc.fx.Notifications.emit(cc.fx.Message.showResult, "lose");
|
||
cc.fx.Notifications.emit(cc.fx.Message.setData, false);
|
||
}
|
||
else if (target.block_Type == 2 && direction != "Reinforce") {
|
||
jg = false;
|
||
// console.log("修筑未加固湿地,游戏结束");
|
||
// alert("修筑未加固湿地,游戏结束");
|
||
cc.fx.Notifications.emit(cc.fx.Message.showResult, "lose");
|
||
cc.fx.Notifications.emit(cc.fx.Message.setData, false);
|
||
}
|
||
}
|
||
return jg;
|
||
};
|
||
//开始执行洪峰来了的动画
|
||
GameManager.prototype.runWater = function (order) {
|
||
order = parseInt(order);
|
||
if (order <= this.water_Array.length - 1) {
|
||
var i = this.water_Array[order].x * this.map_Array[0].length + this.water_Array[order].y;
|
||
var direction = "";
|
||
var circulate = true;
|
||
//最后一步结束
|
||
if (order == this.water_Array.length - 1) {
|
||
circulate = false;
|
||
direction = "End";
|
||
}
|
||
else {
|
||
if (this.water_Array[order].z == 6 && order + 1 < this.water_Array.length && order != 1) {
|
||
direction = "Reinforce";
|
||
i = this.water_Array[order + 1].x * this.map_Array[0].length + this.water_Array[order + 1].y;
|
||
}
|
||
else if (order + 1 < this.water_Array.length) {
|
||
if (this.water_Array[order + 1].z == 5) {
|
||
direction = "Xi_Soil";
|
||
}
|
||
else if (this.water_Array[order + 1].z == 6 && order == 0) {
|
||
direction = "Reinforce";
|
||
}
|
||
else {
|
||
direction = this.getDirection(order, this.water_Array);
|
||
}
|
||
}
|
||
else {
|
||
direction = this.getDirection(order, this.water_Array);
|
||
}
|
||
}
|
||
var jg = this.getBoundary(order, this.water_Array[order].x, this.water_Array[order].y, direction, this.water_Array);
|
||
if (direction == "" || jg == false || direction == "err") {
|
||
cc.fx.Notifications.emit(cc.fx.Message.showResult, "lose");
|
||
cc.fx.Notifications.emit(cc.fx.Message.setData, false);
|
||
return;
|
||
}
|
||
var target = this.block_Array[i].getComponent("Block");
|
||
target.setPath(direction);
|
||
if (order > 0 && order < this.water_Array.length - 1) {
|
||
if (this.water_Array[order + 1].z == 5) {
|
||
this.set_Soil(order + 1, this.water_Array, "water");
|
||
circulate = false;
|
||
return;
|
||
}
|
||
else if (order == 1 && this.water_Array[order].z == 5) {
|
||
this.set_Soil(order, this.water_Array, "water");
|
||
circulate = false;
|
||
return;
|
||
}
|
||
}
|
||
var pos = cc.v2();
|
||
if (direction == "End") {
|
||
if (order > 0) {
|
||
if (this.water_Array[order - 1].z == 0) {
|
||
pos = cc.v2(this.water_Array[order - 1].x, this.water_Array[order - 1].y);
|
||
}
|
||
}
|
||
}
|
||
var data = {
|
||
order: order,
|
||
time: cc.fx.GameConfig.TIME_INFO.waterSpeed[cc.fx.GameConfig.GM_INFO.level],
|
||
type: this.water_Array[order].z,
|
||
circulate: circulate,
|
||
last: pos
|
||
};
|
||
target.runWater(data);
|
||
}
|
||
};
|
||
//获取息壤的格子的方向
|
||
GameManager.prototype.getXi_Soil = function (order, road) {
|
||
var direction = null;
|
||
//如果息壤后面还有下一步的话
|
||
if (order + 1 < road.length) {
|
||
direction = this.getDirection(order, road);
|
||
if (direction == "up" || direction == "right_up" || direction == "left_up") {
|
||
direction = "up";
|
||
}
|
||
else if (direction == "down" || direction == "left_down" || direction == "right_down") {
|
||
direction = "down";
|
||
}
|
||
else if (direction == "left" || direction == "up_left" || direction == "down_left") {
|
||
direction = "left";
|
||
}
|
||
else if (direction == "right" || direction == "up_right" || direction == "down_right") {
|
||
direction = "right";
|
||
}
|
||
}
|
||
return direction;
|
||
};
|
||
//设置息壤
|
||
GameManager.prototype.set_Soil = function (order, road, name) {
|
||
var direction = this.getXi_Soil(order, road);
|
||
var length = 0;
|
||
if (direction == "right") {
|
||
length = this.map_Width - 1;
|
||
for (var i = road[order].x; i <= length; i++) {
|
||
var n = i * this.map_Array[0].length + road[order].y;
|
||
var target = this.block_Array[n].getComponent("Block");
|
||
if (target.block_Type == 3 || target.block_Type == 4) {
|
||
length = i - 1;
|
||
if (target.block_Type == 4) {
|
||
length += 1;
|
||
}
|
||
i = 10000;
|
||
break;
|
||
}
|
||
}
|
||
this.scheduleOnce;
|
||
}
|
||
else if (direction == "left") {
|
||
length = 0;
|
||
for (var i = road[order].x; i >= length; i--) {
|
||
var n = i * this.map_Array[0].length + road[order].y;
|
||
var target = this.block_Array[n].getComponent("Block");
|
||
if (target.block_Type == 3 || target.block_Type == 4) {
|
||
length = i + 1;
|
||
if (target.block_Type == 4) {
|
||
length -= 1;
|
||
}
|
||
i = -1;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
else if (direction == "up") {
|
||
length = 0;
|
||
for (var i = road[order].y; i >= length; i--) {
|
||
var n = road[order].x * this.map_Array[0].length + i;
|
||
var target = this.block_Array[n].getComponent("Block");
|
||
if (target.block_Type == 3 || target.block_Type == 4) {
|
||
length = i + 1;
|
||
if (target.block_Type == 4) {
|
||
length -= 1;
|
||
}
|
||
i = -1;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
else if (direction == "down") {
|
||
length = this.map_Hight - 1;
|
||
for (var i = road[order].y; i <= length; i++) {
|
||
var n = road[order].x * this.map_Array[0].length + i;
|
||
var target = this.block_Array[n].getComponent("Block");
|
||
if (target.block_Type == 3 || target.block_Type == 4) {
|
||
length = i - 1;
|
||
if (target.block_Type == 4) {
|
||
length += 1;
|
||
}
|
||
i = 10000;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
// if(length == 0){
|
||
// }
|
||
this.soil_Find(direction, order, length, road, name);
|
||
};
|
||
//查找息壤蛮遗憾路径
|
||
GameManager.prototype.soil_Find = function (direction, order, length, road, name) {
|
||
var start = road[order].x;
|
||
if (direction == "right") {
|
||
for (var i = start; i <= length; i++) {
|
||
var n = i * this.map_Array[0].length + road[order].y;
|
||
var target = this.block_Array[n].getComponent("Block");
|
||
if (i == start) {
|
||
if (i == start && i == length)
|
||
target.set_Xi_SoilType(this.getDirection(order, road), order, name);
|
||
else
|
||
target.set_Xi_SoilType(this.getDirection(order, road), null, name);
|
||
var value = cc.v3(this.path_Array[order].x, this.path_Array[order].y, 0);
|
||
if (this.water_Array[this.water_Array.length - 1] != value) {
|
||
// console.log("特别插入:",this.path_Array[order].x,this.path_Array[order].y);
|
||
this.changeWater(value);
|
||
}
|
||
}
|
||
else {
|
||
var jg = null;
|
||
if (i == length) {
|
||
var number = i - start - 1;
|
||
this.changePath(order, number, false, road);
|
||
jg = order;
|
||
}
|
||
target.set_Xi_SoilType(direction, jg, name);
|
||
}
|
||
}
|
||
}
|
||
else if (direction == "left") {
|
||
for (var i = start; i >= length; i--) {
|
||
var n = i * this.map_Array[0].length + road[order].y;
|
||
var target = this.block_Array[n].getComponent("Block");
|
||
if (i == start) {
|
||
if (i == start && i == length)
|
||
target.set_Xi_SoilType(this.getDirection(order, road), order, name);
|
||
else
|
||
target.set_Xi_SoilType(this.getDirection(order, road), null, name);
|
||
var value = cc.v3(this.path_Array[order].x, this.path_Array[order].y, 0);
|
||
if (this.water_Array[this.water_Array.length - 1] != value) {
|
||
// console.log("特别插入:",this.path_Array[order].x,this.path_Array[order].y);
|
||
this.changeWater(value);
|
||
}
|
||
}
|
||
else {
|
||
var jg = null;
|
||
if (i == length) {
|
||
var number = i - start + 1;
|
||
this.changePath(order, number, false, road);
|
||
jg = order;
|
||
}
|
||
target.set_Xi_SoilType(direction, jg, name);
|
||
}
|
||
}
|
||
}
|
||
else if (direction == "up") {
|
||
start = road[order].y;
|
||
for (var i = start; i >= length; i--) {
|
||
var n = road[order].x * this.map_Array[0].length + i;
|
||
var target = this.block_Array[n].getComponent("Block");
|
||
if (i == start) {
|
||
if (i == start && i == length)
|
||
target.set_Xi_SoilType(this.getDirection(order, road), order, name);
|
||
else
|
||
target.set_Xi_SoilType(this.getDirection(order, road), null, name);
|
||
var value = cc.v3(this.path_Array[order].x, this.path_Array[order].y, 0);
|
||
if (this.water_Array[this.water_Array.length - 1] != value) {
|
||
// console.log("特别插入:",this.path_Array[order].x,this.path_Array[order].y);
|
||
this.changeWater(value);
|
||
}
|
||
}
|
||
else {
|
||
var jg = null;
|
||
if (i == length) {
|
||
var number = i - start + 1;
|
||
this.changePath(order, number, true, road);
|
||
jg = order;
|
||
}
|
||
// console.log("想上息壤插入:",this.path_Array[order].x,i);
|
||
target.set_Xi_SoilType(direction, jg, name);
|
||
}
|
||
}
|
||
}
|
||
else if (direction == "down") {
|
||
start = road[order].y;
|
||
for (var i = start; i <= length; i++) {
|
||
var n = road[order].x * this.map_Array[0].length + i;
|
||
var target = this.block_Array[n].getComponent("Block");
|
||
if (i == start) {
|
||
if (i == start && i == length)
|
||
target.set_Xi_SoilType(this.getDirection(order, road), order, name);
|
||
else
|
||
target.set_Xi_SoilType(this.getDirection(order, road), null, name);
|
||
var value = cc.v3(this.path_Array[order].x, this.path_Array[order].y, 0);
|
||
if (this.water_Array[this.water_Array.length - 1] != value) {
|
||
// console.log("特别插入:",this.path_Array[order].x,this.path_Array[order].y);
|
||
this.changeWater(value);
|
||
}
|
||
}
|
||
else {
|
||
var jg = null;
|
||
if (i == length) {
|
||
var number = i - start - 1;
|
||
this.changePath(order, number, true, road);
|
||
jg = order;
|
||
}
|
||
target.set_Xi_SoilType(direction, jg, name);
|
||
}
|
||
}
|
||
}
|
||
};
|
||
//改变水流地图
|
||
GameManager.prototype.changeWater = function (value) {
|
||
var jg = true;
|
||
if (this.water_Array.length > 0) {
|
||
if (this.water_Array[this.water_Array.length - 1].x == value.x && this.water_Array[this.water_Array.length - 1].y == value.y) {
|
||
jg = false;
|
||
}
|
||
}
|
||
if (jg)
|
||
this.water_Array.push(value);
|
||
};
|
||
//息壤过后改变修筑路径
|
||
GameManager.prototype.changePath = function (order, number, direction, road) {
|
||
for (var i = (order + 1); i < road.length; i++) {
|
||
if (!direction) {
|
||
road[i].x += (number);
|
||
}
|
||
else {
|
||
road[i].y += (number);
|
||
}
|
||
}
|
||
if (direction) {
|
||
if (number < 0) {
|
||
for (var n = -number; n > 0; n--) {
|
||
this.changeWater(cc.v3(this.path_Array[order + 1].x, this.path_Array[order + 1].y + n, 0));
|
||
// console.log("1特殊放入:",this.path_Array[order+1].x,this.path_Array[order+1].y+n)
|
||
}
|
||
}
|
||
else {
|
||
for (var n = number; n > 0; n--) {
|
||
this.changeWater(cc.v3(this.path_Array[order + 1].x, this.path_Array[order + 1].y - n, 0));
|
||
// console.log("2特殊放入:",this.path_Array[order+1].x,this.path_Array[order+1].y-n)
|
||
}
|
||
}
|
||
}
|
||
else {
|
||
if (number < 0) {
|
||
for (var m = -number; m > 0; m--) {
|
||
this.changeWater(cc.v3(this.path_Array[order + 1].x + m, this.path_Array[order + 1].y, 0));
|
||
// console.log("3特殊放入:",this.path_Array[order+1].x+m,this.path_Array[order+1].y)
|
||
}
|
||
}
|
||
else {
|
||
for (var m = number; m > 0; m--) {
|
||
this.changeWater(cc.v3(this.path_Array[order + 1].x - m, this.path_Array[order + 1].y, 0));
|
||
// console.log("4特殊放入:",this.path_Array[order+1].x-m,this.path_Array[order+1].y)
|
||
}
|
||
}
|
||
}
|
||
};
|
||
//获取洪峰方向
|
||
GameManager.prototype.getDirection = function (order, road) {
|
||
var name = "";
|
||
//入海口比较复杂单独判断
|
||
if (order == 0) {
|
||
var nextX = road[order + 1].x - road[order].x;
|
||
var nextY = road[order].y - road[order + 1].y;
|
||
//在底边
|
||
if (road[order].y == this.map_Array[0].length - 1) {
|
||
if (nextX == 0) {
|
||
if (nextY == 1)
|
||
name = "up";
|
||
else if (nextY == -1)
|
||
name = "err";
|
||
}
|
||
else if (nextX == 1)
|
||
name = "up_right";
|
||
else if (nextX == -1)
|
||
name = "up_left";
|
||
}
|
||
//在顶边
|
||
else if (road[order].y == 0) {
|
||
if (nextX == 0) {
|
||
if (nextY == 1)
|
||
name = "err";
|
||
else if (nextY == -1)
|
||
name = "down";
|
||
}
|
||
else if (nextX == 1)
|
||
name = "down_right";
|
||
else if (nextX == -1)
|
||
name = "down_left";
|
||
}
|
||
//在左边
|
||
else if (road[order].x == 0) {
|
||
if (nextX == 0) {
|
||
if (nextY == 1)
|
||
name = "right_up";
|
||
else if (nextY == -1)
|
||
name = "right_down";
|
||
}
|
||
else if (nextX == 1)
|
||
name = "right";
|
||
else if (nextX == -1)
|
||
name = "err";
|
||
}
|
||
//在右边
|
||
else if (road[order].x == this.map_Array.length - 1) {
|
||
if (nextX == 0) {
|
||
if (nextY == 1)
|
||
name = "left_up";
|
||
else if (nextY == -1)
|
||
name = "left_down";
|
||
}
|
||
else if (nextX == 1)
|
||
name = "err";
|
||
else if (nextX == -1)
|
||
name = "left";
|
||
}
|
||
}
|
||
//不是第一步,已经走过一步
|
||
else if (order > 0) {
|
||
var next = 1;
|
||
if (order + 2 < road.length) {
|
||
if (road[order + 1].z == 6)
|
||
next = 2;
|
||
}
|
||
//用于判断此点的上一个点,是为了判断当前方块洪水七点,以及下一个移动方向,判断洪终点方向
|
||
var nextX = road[order + next].x - road[order].x;
|
||
var nextY = road[order].y - road[order + next].y;
|
||
var previousX = road[order].x - road[order - 1].x;
|
||
var previousY = road[order - 1].y - road[order].y;
|
||
if (previousX == 0 && previousY == 0) {
|
||
if (order > 1) {
|
||
previousX = road[order].x - road[order - 2].x;
|
||
previousY = road[order - 2].y - road[order].y;
|
||
}
|
||
else if (order + 1 < road.length) {
|
||
previousX = road[order + 1].x - road[order].x;
|
||
previousY = road[order].y - road[order + 1].y;
|
||
// console.log("息壤,上下坐标差距",previousX,previousY);
|
||
}
|
||
}
|
||
if (previousX == 0 && previousY >= 1) {
|
||
if (nextX == 0) {
|
||
if (nextY == 1)
|
||
name = "up";
|
||
else if (nextY == -1)
|
||
name = "err";
|
||
}
|
||
else if (nextX == 1)
|
||
name = "up_right";
|
||
else if (nextX == -1)
|
||
name = "up_left";
|
||
}
|
||
else if (previousX == 0 && previousY <= -1) {
|
||
if (nextX == 0) {
|
||
if (nextY == 1)
|
||
name = "err";
|
||
else if (nextY == -1)
|
||
name = "down";
|
||
}
|
||
else if (nextX == 1)
|
||
name = "down_right";
|
||
else if (nextX == -1)
|
||
name = "down_left";
|
||
}
|
||
else if (previousX >= 1 && previousY == 0) {
|
||
if (nextX == 0) {
|
||
if (nextY == 1)
|
||
name = "right_up";
|
||
else if (nextY == -1)
|
||
name = "right_down";
|
||
}
|
||
else if (nextX == 1)
|
||
name = "right";
|
||
else if (nextX == -1)
|
||
name = "err";
|
||
}
|
||
else if (previousX <= -1 && previousY == 0) {
|
||
if (nextX == 0) {
|
||
if (nextY == 1)
|
||
name = "left_up";
|
||
else if (nextY == -1)
|
||
name = "left_down";
|
||
}
|
||
else if (nextX == 1)
|
||
name = "err";
|
||
else if (nextX == -1)
|
||
name = "left";
|
||
}
|
||
}
|
||
return name;
|
||
};
|
||
//根据是否全面屏,做独立适配方面
|
||
GameManager.prototype.fit = function () {
|
||
var jg = this.setFit();
|
||
if (!jg) {
|
||
this.Map.scale = 1.2;
|
||
}
|
||
else {
|
||
this.Map.scale = 1;
|
||
}
|
||
};
|
||
//判断全面屏
|
||
GameManager.prototype.getSetScreenResolutionFlag = function () {
|
||
var size = cc.winSize;
|
||
var width = size.width;
|
||
var height = size.height;
|
||
if ((height / width) > (16.2 / 9))
|
||
return false;
|
||
return true;
|
||
};
|
||
//判断全面屏适配
|
||
GameManager.prototype.setFit = function () {
|
||
var flag = this.getSetScreenResolutionFlag();
|
||
if (flag) {
|
||
}
|
||
else {
|
||
}
|
||
return flag;
|
||
};
|
||
//返回首页
|
||
GameManager.prototype.backScene = function () {
|
||
cc.director.loadScene("LoadScene");
|
||
};
|
||
//开始游戏
|
||
GameManager.prototype.startGame = function (data) {
|
||
for (var i = 0; i < this.block_Array.length; i++) {
|
||
this.block_Array[i].getChildByName("tipWin").active = false;
|
||
this.block_Array[i].getChildByName("tipLose").active = false;
|
||
}
|
||
this.unschedule(this.updateCountDownTime);
|
||
var now = cc.fx.GameTool.getTime();
|
||
var finishi = now - this.finishiTime;
|
||
var totalTime = now - this.startTime;
|
||
this.scoreTime = this.waterTime;
|
||
if (this.waterTime <= 0.5)
|
||
finishi = -1;
|
||
// console.log("submitTime:",finishi,this.finishiTime);
|
||
cc.fx.GameConfig.CLICK_SET("submitTime", finishi);
|
||
if (finishi == -1)
|
||
cc.fx.GameConfig.CLICK_SET("duration", cc.fx.GameConfig.TIME_INFO.waterTime[cc.fx.GameConfig.GM_INFO.level]);
|
||
else
|
||
cc.fx.GameConfig.CLICK_SET("duration", totalTime);
|
||
cc.fx.GameConfig.CLICK_SET("usedSteps", data.length);
|
||
this.setMap(data);
|
||
var arr = this.changeStep(data);
|
||
cc.fx.GameConfig.CLICK_SET("stepList", arr);
|
||
};
|
||
//用于埋点记录
|
||
GameManager.prototype.changeStep = function (data) {
|
||
var arr = [];
|
||
if (data.length > 0) {
|
||
for (var i = 0; i < data.length; i++) {
|
||
if (data[i] == "up")
|
||
arr[i] = "U";
|
||
else if (data[i] == "down")
|
||
arr[i] = "D";
|
||
else if (data[i] == "left")
|
||
arr[i] = "L";
|
||
else if (data[i] == "right")
|
||
arr[i] = "R";
|
||
else if (data[i] == "soil")
|
||
arr[i] = "X";
|
||
else if (data[i] == "reinforce")
|
||
arr[i] = "F";
|
||
}
|
||
}
|
||
return arr;
|
||
};
|
||
//洪峰倒计时,计时器
|
||
GameManager.prototype.updateWaterTime = function () {
|
||
var _this = this;
|
||
if (this.waterTime > 0) {
|
||
this.waterTime -= 1;
|
||
this.Countdown.string = cc.fx.GameTool.getTimeMargin(this.waterTime);
|
||
if (this.waterTime <= 0) {
|
||
this.unschedule(this.updateWaterTime);
|
||
if (!this.plan_over) {
|
||
this.waterTime = 0;
|
||
this.plan_over = true;
|
||
setTimeout(function () {
|
||
if (_this.water_Array.length == 0) {
|
||
cc.fx.Notifications.emit(cc.fx.Message.showResult, "lose");
|
||
cc.fx.Notifications.emit(cc.fx.Message.setData, false);
|
||
}
|
||
else {
|
||
cc.fx.GameConfig.GM_INFO.min_Time = _this.waterTime;
|
||
_this.runWater(0);
|
||
}
|
||
}, 500);
|
||
}
|
||
}
|
||
}
|
||
};
|
||
//如果是倒计时 调用此方法
|
||
GameManager.prototype.updateCountDownTime = function () {
|
||
if (this.countTime > 0) {
|
||
this.countTime -= 1;
|
||
cc.fx.GameConfig.TIME_INFO.totalTime = this.countTime;
|
||
this.Time.string = cc.fx.GameTool.getTimeMargin(this.countTime);
|
||
if (this.countTime < 5) {
|
||
var over = this.node.getChildByName("Over");
|
||
cc.tween(over)
|
||
.to(0.2, { opacity: 255 })
|
||
.delay(0.1)
|
||
.to(0.2, { opacity: 0 })
|
||
.start();
|
||
}
|
||
if (this.countTime <= 0) {
|
||
this.countTime = 0;
|
||
this.setData(false);
|
||
this.unschedule(this.updateCountDownTime);
|
||
this.gameOver();
|
||
}
|
||
}
|
||
};
|
||
//上传每次操作数据
|
||
GameManager.prototype.setData = function (success) {
|
||
//设置埋点数据
|
||
cc.fx.GameConfig.CLICK_SET("mapId", cc.fx.GameConfig.LEVEL_INFO[cc.fx.GameConfig.GM_INFO.level][this.custom].id);
|
||
cc.fx.GameConfig.CLICK_SET("difficulty", cc.fx.GameConfig.GM_INFO.level);
|
||
cc.fx.GameConfig.CLICK_SET("optimizedSteps", cc.fx.GameConfig.LEVEL_INFO[cc.fx.GameConfig.GM_INFO.level][this.custom].min_steps);
|
||
cc.fx.GameConfig.CLICK_SET("round", cc.fx.GameConfig.GM_INFO.round);
|
||
cc.fx.GameConfig.CLICK_SET("timer", cc.fx.GameConfig.TIME_INFO.totalTime);
|
||
cc.fx.GameConfig.CLICK_SET("cumulativeScore", cc.fx.GameConfig.GM_INFO.score);
|
||
if (success != null) {
|
||
cc.fx.GameConfig.CLICK_SET("success", success);
|
||
cc.fx.GameConfig.GM_INFO.fen = this.getScore();
|
||
if (!success)
|
||
cc.fx.GameConfig.GM_INFO.fen = 0;
|
||
cc.fx.GameConfig.CLICK_SET("getScore", cc.fx.GameConfig.GM_INFO.fen);
|
||
cc.fx.GameConfig.GM_INFO.score += cc.fx.GameConfig.GM_INFO.fen;
|
||
cc.fx.GameConfig.CLICK_SET("cumulativeScore", cc.fx.GameConfig.GM_INFO.score);
|
||
if (this.countTime != 0)
|
||
cc.fx.GameConfig.GM_INFO.successList.push(success);
|
||
}
|
||
cc.fx.GameTool.setGameData();
|
||
};
|
||
//计算得分
|
||
GameManager.prototype.getScore = function () {
|
||
//最小步数
|
||
var min = cc.fx.GameConfig.LEVEL_INFO[cc.fx.GameConfig.GM_INFO.level][this.custom].min_steps;
|
||
//实际使用步数
|
||
var now = this.path_Array.length - 1;
|
||
if (now <= 0)
|
||
now = 0;
|
||
var x = (2.5 * min - now) / min;
|
||
var score = Math.pow(Math.pow(min, x), 0.5);
|
||
score = score * (this.scoreTime + 10) * 100;
|
||
return Math.floor(score);
|
||
};
|
||
//上传排行榜数据
|
||
GameManager.prototype.gameOver = function () {
|
||
var rate = 0;
|
||
var successList = cc.fx.GameConfig.GM_INFO.successList;
|
||
if (successList.length > 0) {
|
||
var success = 0;
|
||
for (var i = 0; i < successList.length; i++) {
|
||
if (successList[i] == true)
|
||
success += 1;
|
||
}
|
||
rate = success / successList.length;
|
||
}
|
||
rate = Math.floor(rate * 1000) / 10;
|
||
var data = {
|
||
score: cc.fx.GameConfig.GM_INFO.score,
|
||
rate: rate
|
||
};
|
||
cc.fx.GameTool.setRank(data);
|
||
this.node.getChildByName("GameOver").active = true;
|
||
this.node.getChildByName("GameOver").opacity = 0;
|
||
cc.tween(this.node.getChildByName("GameOver"))
|
||
.to(0.4, { opacity: 255 })
|
||
.delay(1)
|
||
.to(0.4, { opacity: 50 })
|
||
.call(function () {
|
||
cc.director.loadScene("OverScene");
|
||
})
|
||
.start();
|
||
};
|
||
//展示结果
|
||
GameManager.prototype.showResult = function (data) {
|
||
if (data == "lose") {
|
||
cc.fx.AudioManager._instance.playEffect("lose", null);
|
||
cc.fx.GameConfig.GM_INFO.min_Time = -1;
|
||
}
|
||
else {
|
||
cc.fx.AudioManager._instance.playEffect("win", null);
|
||
}
|
||
this.node.getChildByName("Window").active = true;
|
||
this.node.getChildByName("Window").getComponent("Window").init(data);
|
||
};
|
||
//记录反应时长,以及做步骤提示
|
||
GameManager.prototype.clickSun = function (data) {
|
||
//如果没有记录过 回合开始到操作反应时长,则第一次记录, 后面不记录
|
||
if (cc.fx.GameConfig.CLICK_DATA.startTime == 0) {
|
||
this.finishiTime = cc.fx.GameTool.getTime();
|
||
var now = this.finishiTime - this.startTime;
|
||
// console.log("startTime:",now,this.startTime);
|
||
cc.fx.GameConfig.CLICK_SET("startTime", now);
|
||
}
|
||
if (cc.fx.GameConfig.GM_INFO.level > 3)
|
||
return;
|
||
//步骤提示
|
||
var nowPos = this.path_Array[0];
|
||
if (this.tip_Array.length != 0) {
|
||
if (this.tip_Array[this.tip_Array.length - 1] == null) {
|
||
this.tip_Array.push(null);
|
||
return;
|
||
}
|
||
nowPos = this.tip_Array[this.tip_Array.length - 1][this.tip_Array[this.tip_Array.length - 1].length - 1];
|
||
if (nowPos) {
|
||
var n = nowPos.x * this.map_Array[0].length + nowPos.y;
|
||
var targetNode = this.block_Array[n];
|
||
if (targetNode.getChildByName("tipLose").active == true) {
|
||
this.tip_Array.push(null);
|
||
return;
|
||
}
|
||
}
|
||
else {
|
||
return;
|
||
}
|
||
}
|
||
if (data == "up") {
|
||
var n = cc.v2(nowPos.x, nowPos.y - 1);
|
||
this.tipCan(n, data);
|
||
}
|
||
else if (data == "down") {
|
||
var n = cc.v2(nowPos.x, nowPos.y + 1);
|
||
this.tipCan(n, data);
|
||
}
|
||
else if (data == "left") {
|
||
var n = cc.v2(nowPos.x - 1, nowPos.y);
|
||
this.tipCan(n, data);
|
||
}
|
||
else if (data == "right") {
|
||
var n = cc.v2(nowPos.x + 1, nowPos.y);
|
||
this.tipCan(n, data);
|
||
}
|
||
else if (data == "reinforce") {
|
||
var n = cc.v3(nowPos.x, nowPos.y, 2);
|
||
this.tip_Array.push([n]);
|
||
}
|
||
else if (data == "soil") {
|
||
var n = cc.v3(nowPos.x, nowPos.y, 3);
|
||
this.tip_Array.push([n]);
|
||
}
|
||
};
|
||
//提示是否错误
|
||
GameManager.prototype.tipCan = function (pos, data) {
|
||
//先判断是否出边界
|
||
if (pos.x < 0 || pos.x > this.map_Array.length - 1 || pos.y < 0 || pos.y > this.map_Array[0].length - 1) {
|
||
this.tip_Array.push(null);
|
||
return;
|
||
}
|
||
var n = pos.x * this.map_Array[0].length + pos.y;
|
||
var target = this.block_Array[n].getComponent("Block");
|
||
target.node.getChildByName("tipWin").active = true;
|
||
// target.node.getChildByName("tipWin").opacity = 255;
|
||
// target.node.getChildByName("tipLose").opacity = 255;
|
||
//重复路回头路,或者山峰
|
||
if (target.repeatRoad(false, null) == true || target.block_Type == 3) {
|
||
target.node.getChildByName("tipLose").active = true;
|
||
target.node.getChildByName("tipWin").active = false;
|
||
}
|
||
//湿地 上一步如果没用息壤或者加固
|
||
else if (target.block_Type == 2) {
|
||
if (this.tip_Array.length > 1) {
|
||
if (this.tip_Array[this.tip_Array.length - 1][0].z == 0) {
|
||
target.node.getChildByName("tipLose").active = true;
|
||
target.node.getChildByName("tipWin").active = false;
|
||
}
|
||
}
|
||
}
|
||
if (this.tip_Array.length > 0) {
|
||
if (this.tip_Array[this.tip_Array.length - 1][0].z == 3) {
|
||
if (data == "up") {
|
||
var arr = [];
|
||
for (var i = pos.y; i >= 0; i--) {
|
||
var block = this.block_Array[pos.x * this.map_Array[0].length + i].getComponent("Block");
|
||
if (block.block_Type == 3) {
|
||
i = -10000;
|
||
}
|
||
else {
|
||
block.node.getChildByName("tipWin").active = true;
|
||
arr.push(cc.v3(pos.x, i, 0));
|
||
if (block.block_Type == 4)
|
||
i = -10000;
|
||
}
|
||
}
|
||
this.tip_Array.push(arr);
|
||
}
|
||
else if (data == "down") {
|
||
var arr = [];
|
||
for (var i = pos.y; i < this.map_Array[0].length; i++) {
|
||
var block = this.block_Array[pos.x * this.map_Array[0].length + i].getComponent("Block");
|
||
if (block.block_Type == 3) {
|
||
i = 10000;
|
||
}
|
||
else {
|
||
block.node.getChildByName("tipWin").active = true;
|
||
arr.push(cc.v3(pos.x, i, 0));
|
||
if (block.block_Type == 4)
|
||
i = 10000;
|
||
}
|
||
}
|
||
this.tip_Array.push(arr);
|
||
}
|
||
else if (data == "right") {
|
||
var arr = [];
|
||
for (var i = pos.x; i < this.map_Array.length; i++) {
|
||
var block = this.block_Array[i * this.map_Array[0].length + pos.y].getComponent("Block");
|
||
if (block.block_Type == 3) {
|
||
i = 10000;
|
||
}
|
||
else {
|
||
block.node.getChildByName("tipWin").active = true;
|
||
arr.push(cc.v3(i, pos.y, 0));
|
||
if (block.block_Type == 4)
|
||
i = 10000;
|
||
}
|
||
}
|
||
this.tip_Array.push(arr);
|
||
}
|
||
else if (data == "left") {
|
||
var arr = [];
|
||
for (var i = pos.x; i >= 0; i--) {
|
||
var block = this.block_Array[i * this.map_Array[0].length + pos.y].getComponent("Block");
|
||
if (block.block_Type == 3) {
|
||
i = -10000;
|
||
}
|
||
else {
|
||
block.node.getChildByName("tipWin").active = true;
|
||
arr.push(cc.v3(i, pos.y, 0));
|
||
if (block.block_Type == 4)
|
||
i = -10000;
|
||
}
|
||
}
|
||
this.tip_Array.push(arr);
|
||
}
|
||
}
|
||
else {
|
||
var posJg_1 = cc.v3(pos.x, pos.y, 0);
|
||
if (data == "reinforce")
|
||
pos.z = 2;
|
||
if (data == "soil")
|
||
pos.z = 3;
|
||
this.tip_Array.push([posJg_1]);
|
||
}
|
||
// console.log(this.tip_Array);
|
||
return;
|
||
}
|
||
var posJg = cc.v3(pos.x, pos.y, 0);
|
||
if (data == "reinforce")
|
||
pos.z = 2;
|
||
if (data == "soil")
|
||
pos.z = 3;
|
||
this.tip_Array.push([posJg]);
|
||
// console.log(this.tip_Array);
|
||
};
|
||
//移除提示
|
||
GameManager.prototype.removeTip = function (data) {
|
||
if (cc.fx.GameConfig.GM_INFO.level > 3)
|
||
return;
|
||
//分为撤回一步 和全部清空
|
||
if (this.tip_Array.length > 0) {
|
||
if (data == "back") {
|
||
var target = this.tip_Array[this.tip_Array.length - 1];
|
||
if (target == null) {
|
||
this.tip_Array.pop();
|
||
}
|
||
else {
|
||
this.tip_Array.pop();
|
||
for (var i = 0; i < target.length; i++) {
|
||
if (target[i]) {
|
||
if (target[0].z == 0) {
|
||
var n = target[i].x * this.map_Array[0].length + target[i].y;
|
||
var node = this.block_Array[n];
|
||
node.getChildByName("tipWin").active = false;
|
||
node.getChildByName("tipLose").active = false;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
else if (data == "remove") {
|
||
for (var j = 0; j < this.tip_Array.length; j++) {
|
||
var target = this.tip_Array[j];
|
||
if (target != null) {
|
||
for (var i = 0; i < target.length; i++) {
|
||
if (target[i]) {
|
||
var n = target[i].x * this.map_Array[0].length + target[i].y;
|
||
var node = this.block_Array[n];
|
||
node.getChildByName("tipWin").active = false;
|
||
node.getChildByName("tipLose").active = false;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
this.tip_Array = [];
|
||
}
|
||
}
|
||
};
|
||
//获取引导名字
|
||
GameManager.prototype.getGuideName = function () {
|
||
var name = "one";
|
||
switch (this.step) {
|
||
case 1:
|
||
name = "one";
|
||
this.btnClick = false;
|
||
this.bgClick = true;
|
||
break;
|
||
case 2:
|
||
name = "two";
|
||
this.btnClick = false;
|
||
this.bgClick = true;
|
||
break;
|
||
case 3:
|
||
name = "three";
|
||
this.btnClick = false;
|
||
this.bgClick = true;
|
||
break;
|
||
case 4:
|
||
name = "four";
|
||
this.btnClick = false;
|
||
this.bgClick = true;
|
||
break;
|
||
case 5:
|
||
name = "five";
|
||
this.btnClick = true;
|
||
this.bgClick = false;
|
||
break;
|
||
case 6:
|
||
name = "six";
|
||
this.btnClick = true;
|
||
this.bgClick = false;
|
||
break;
|
||
case 7:
|
||
name = "seven";
|
||
this.btnClick = false;
|
||
this.bgClick = true;
|
||
break;
|
||
case 8:
|
||
name = "eight";
|
||
this.btnClick = false;
|
||
this.bgClick = true;
|
||
break;
|
||
case 9:
|
||
name = "nine";
|
||
this.btnClick = false;
|
||
this.bgClick = true;
|
||
break;
|
||
case 10:
|
||
name = "ten";
|
||
this.btnClick = true;
|
||
this.bgClick = false;
|
||
break;
|
||
case 11:
|
||
name = "eleven";
|
||
this.btnClick = false;
|
||
this.bgClick = true;
|
||
break;
|
||
case 12:
|
||
name = "twelve";
|
||
this.btnClick = true;
|
||
this.bgClick = false;
|
||
break;
|
||
case 13:
|
||
name = "thirteen";
|
||
this.btnClick = true;
|
||
this.bgClick = false;
|
||
break;
|
||
case 14:
|
||
name = "fourteen";
|
||
this.btnClick = true;
|
||
this.bgClick = false;
|
||
break;
|
||
case 15:
|
||
name = "fiveteen";
|
||
this.btnClick = true;
|
||
this.bgClick = false;
|
||
break;
|
||
case 16:
|
||
name = "sixteen";
|
||
this.btnClick = true;
|
||
this.bgClick = false;
|
||
break;
|
||
case 17:
|
||
name = "last";
|
||
this.btnClick = true;
|
||
this.bgClick = false;
|
||
break;
|
||
}
|
||
return name;
|
||
};
|
||
//引导下一步
|
||
GameManager.prototype.guideNext = function () {
|
||
//每次先把所有的
|
||
console.log(this.step, this.Guide.children.length);
|
||
if (this.step + 1 == this.Guide.children.length) {
|
||
cc.fx.GameConfig.GM_INFO.guide = false;
|
||
// cc.director.loadScene("GameScene");
|
||
var name_1 = cc.fx.GameConfig.GM_INFO.gameId + "_guide";
|
||
cc.fx.StorageMessage.setStorage(name_1, cc.fx.GameConfig.GM_INFO.guide);
|
||
}
|
||
if (this.step > 0)
|
||
this.Guide.children[this.step - 1].active = false;
|
||
this.step += 1;
|
||
var name = this.getGuideName();
|
||
var target = this.Guide.getChildByName(name);
|
||
target.active = true;
|
||
var size = cc.winSize;
|
||
if (size.height > 1334) {
|
||
var height = (size.height - 1334) / 2;
|
||
target.getChildByName("sp").height += height;
|
||
}
|
||
};
|
||
GameManager.prototype.onEnable = function () {
|
||
cc.fx.Notifications.on(cc.fx.Message.control, this.clickSun, this);
|
||
cc.fx.Notifications.on(cc.fx.Message.next, this.runRoad, this);
|
||
cc.fx.Notifications.on(cc.fx.Message.nextWater, this.runWater, this);
|
||
cc.fx.Notifications.on(cc.fx.Message.startGame, this.startGame, this);
|
||
cc.fx.Notifications.on(cc.fx.Message.changePath, this.changePath, this);
|
||
cc.fx.Notifications.on(cc.fx.Message.setData, this.setData, this);
|
||
cc.fx.Notifications.on(cc.fx.Message.guideNext, this.guideNext, this);
|
||
cc.fx.Notifications.on(cc.fx.Message.showResult, this.showResult, this);
|
||
cc.fx.Notifications.on(cc.fx.Message.removeTip, this.removeTip, this);
|
||
};
|
||
GameManager.prototype.onDisable = function () {
|
||
cc.fx.Notifications.off(cc.fx.Message.control, this.clickSun);
|
||
cc.fx.Notifications.off(cc.fx.Message.next, this.runRoad);
|
||
cc.fx.Notifications.off(cc.fx.Message.nextWater, this.runWater);
|
||
cc.fx.Notifications.off(cc.fx.Message.startGame, this.startGame);
|
||
cc.fx.Notifications.off(cc.fx.Message.changePath, this.changePath);
|
||
cc.fx.Notifications.off(cc.fx.Message.setData, this.setData);
|
||
cc.fx.Notifications.off(cc.fx.Message.guideNext, this.guideNext);
|
||
cc.fx.Notifications.off(cc.fx.Message.showResult, this.showResult);
|
||
cc.fx.Notifications.off(cc.fx.Message.removeTip, this.removeTip);
|
||
};
|
||
GameManager.prototype.update = function (dt) {
|
||
};
|
||
__decorate([
|
||
property(cc.Node)
|
||
], GameManager.prototype, "Map", void 0);
|
||
__decorate([
|
||
property(cc.Prefab)
|
||
], GameManager.prototype, "Block", void 0);
|
||
__decorate([
|
||
property(cc.Label)
|
||
], GameManager.prototype, "Time", void 0);
|
||
__decorate([
|
||
property(cc.Label)
|
||
], GameManager.prototype, "Countdown", void 0);
|
||
__decorate([
|
||
property(cc.Node)
|
||
], GameManager.prototype, "Guide", void 0);
|
||
GameManager = __decorate([
|
||
ccclass
|
||
], GameManager);
|
||
return GameManager;
|
||
}(cc.Component));
|
||
exports.default = GameManager;
|
||
|
||
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0XFxHYW1lTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpQ0FBb0M7QUFFcEMsU0FBUztBQUNILElBQUEsS0FBc0IsRUFBRSxDQUFDLFVBQVUsRUFBbEMsT0FBTyxhQUFBLEVBQUUsUUFBUSxjQUFpQixDQUFDO0FBRTFDO0lBQXlDLCtCQUFZO0lBQXJEO1FBQUEscUVBbTBDQztRQWgwQ0csU0FBRyxHQUFZLElBQUksQ0FBQztRQUdwQixXQUFLLEdBQWMsSUFBSSxDQUFDO1FBR3hCLFVBQUksR0FBYSxJQUFJLENBQUM7UUFHdEIsZUFBUyxHQUFhLElBQUksQ0FBQztRQUczQixXQUFLLEdBQVksSUFBSSxDQUFDOztJQW96QzFCLENBQUM7SUEzeENHLDRCQUFNLEdBQU47SUFDQSxDQUFDO0lBQ0QsMkJBQUssR0FBTDtRQUNJLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNYLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsa0RBQWtEO0lBQ2xELDRCQUFNLEdBQU47UUFDSSxpQkFBaUI7UUFDakIsMkRBQTJEO1FBQzNELG9CQUFvQjtRQUNwQixrRUFBa0U7UUFDbEUscUVBQXFFO1FBQ3JFLFFBQVE7UUFDUixJQUFJO1FBQ0oscUJBQXFCO1FBRXJCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNmLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNiLElBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUM7WUFDbkMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxD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QUMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUN2QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBRTFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUMsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUMsRUFBRSxDQUFDO1FBRWpELEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBQyxDQUFDLEVBQUUsRUFBQztZQUNwQyxLQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxFQUFFLEVBQUM7Z0JBQ3pDLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN2QyxLQUFLLENBQUMsTUFBTSxHQUFFLElBQUksQ0FBQyxHQUFHLENBQUM7Z0JBQ3ZCLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUM1RyxJQUFHLElBQUksQ0FBQyxTQUFT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Q3JCLElBQUcsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztvQkFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO2FBQ3JDO1lBRUQsNkNBQTZDO1lBQzdDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0MsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUM5QyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hELElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEQsSUFBRyxTQUFTLElBQUksQ0FBQyxJQUFJLFNBQVMsSUFBSSxDQUFDLEVBQUM7Z0JBQ2hDLElBQUcsS0FBSyxHQUFHLENBQUMsRUFBQztvQkFDVCxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDNUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQy9DO3FCQUNJLElBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFDO29CQUM1QixTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdB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RyxPQUFPLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixNQUFNO1lBQ1YsS0FBSyxDQUFDO2dCQUNGLElBQUksR0FBRyxNQUFNLENBQUM7Z0JBQ2QsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixNQUFNO1lBQ1YsS0FBSyxDQUFDO2dCQUNGLElBQUksR0FBRyxNQUFNLENBQUM7Z0JBQ2QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixNQUFNO1lBQ1YsS0FBSyxDQUFDO2dCQUNGLElBQUksR0FBRyxLQUFLLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixNQUFNO1lBQ1YsS0FBSyxDQUFDO2dCQUNGLElBQUksR0FBRyxPQUFPLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixNQUFNO1lBQ1YsS0FBSyxDQUFDO2dCQUNGLElBQUksR0FBRyxPQUFPLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixNQUFNO1lBQ1YsS0FBSyxDQUFDO2dCQUNGLElBQUksR0FBRyxNQUFNLENBQUM7Z0JBQ2QsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixNQUFNO1lBQ1YsS0FBSyxFQUFFO2dCQUNILElBQUksR0FBRyxLQUFLLENBQUM7Z0JBQ2Is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LENBbjBDd0MsRUFBRSxDQUFDLFNBQVMsR0FtMENwRDtrQkFuMENvQixXQUFXIiwiZmlsZSI6IiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmxvY2tUeXBlIH0gZnJvbSBcIi4vQmxvY2tcIjtcclxuXHJcbi8vIOS4u+a4uOaIj+aOp+WItuexu1xyXG5jb25zdCB7Y2NjbGFzcywgcHJvcGVydHl9ID0gY2MuX2RlY29yYXRvcjtcclxuQGNjY2xhc3NcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2FtZU1hbmFnZXIgZXh0ZW5kcyBjYy5Db21wb25lbnQge1xyXG5cclxuICAgIEBwcm9wZXJ0eShjYy5Ob2RlKVxyXG4gICAgTWFwOiBjYy5Ob2RlID0gbnVsbDtcclxuXHJcbiAgICBAcHJvcGVydHkoY2MuUHJlZmFiKVxyXG4gICAgQmxvY2s6IGNjLlByZWZhYiA9IG51bGw7XHJcblxyXG4gICAgQHByb3BlcnR5KGNjLkxhYmVsKVxyXG4gICAgVGltZTogY2MuTGFiZWwgPSBudWxsO1xyXG5cclxuICAgIEBwcm9wZXJ0eShjYy5MYWJlbClcclxuICAgIENvdW50ZG93bjogY2MuTGFiZWwgPSBudWxsO1xyXG5cclxuICAgIEBwcm9wZXJ0eShjYy5Ob2RlKVxyXG4gICAgR3VpZGU6IGNjLk5vZGUgPSBudWxsO1xyXG5cclxuICAgIHN0ZXA6bnVtYmVyOyAgICAgICAgICAgIC8v5byV5a+85q2l6aqkXHJcbiAgICBiZ0NsaWNrOmJvb2xlYW4gICAgICAgICAvL+W8leWvvOaXtk1hc2vpga7nvanlj6/kuI3lj6/ku6Xngrnlh7tcclxuICAgIGJ0bkNsaWNrOmJvb2xlYW4gICAgICAgIC8v5byV5a+85pe277yM5oyJ6ZKu5Y+v5LiN5Y+v54K55Ye7XHJcbiAgICBjdXN0b206bnVtYmVyOyAgICAgICAgICAvL+W9k+WJjemavuW6pumaj+acuuWcsOWbvklEXHJcbiAgICBjb3VudFRpbWU6IG51bWJlcjsgICAgICAvL+aAu+WAkuiuoeaXtlxyXG4gICAgd2F0ZXJUaW1lOiBudW1iZXIgICAgICAgLy/mtKrls7DlgJLorqHml7ZcclxuICAgIHN0YXJ0VGltZTogbnVtYmVyOyAgICAgIC8v5ri45oiP5byA5aeL6K6h5pe2XHJcbiAgICByZXBsYWNlVGltZTogbnVtYmVyICAgICAvL+a0quWzsOWAkuiuoeaXtizlvZPmgLvliankvZnml7bpl7TlsI/kuo7mtKrls7DlgJLorqHml7bvvIznlKjkuo7mm7/ku6NcclxuICAgIGZpbmlzaGlUaW1lOm51bWJlcjsgICAgIC8v5o+Q5Lqk5pe26Ze0XHJcbiAgICBzY29yZVRpbWU6bnVtYmVyICAgICAgICAvL+eUqOS6juiuoeeul+aPkOS6pOWIsOa0quWzsOadpeeahOaXtumXtOW3rlxyXG4gICAgYmxvY2tfQXJyYXk6IGFueTsgICAgICAgLy/miYDmnInlnZfmlbDnu4RcclxuICAgIHBhdGhfQXJyYXk6IGFueTsgICAgICAgIC8v5L+u562R6Lev5b6EXHJcbiAgICB3YXRlcl9BcnJheTogYW55OyAgICAgICAvL+awtOa1gei3r+W+hFxyXG4gICAgbWFwX0FycmF5OiBhbnk7ICAgICAgICAgLy/lnLDlm77mlbDnu4RcclxuICAgIHdhdGVyX1BhdGhBcmF5OmFueTsgICAgIC8v5rSq5bOw6Lev5b6EXHJcbiAgICB0aXBfQXJyYXk6IGFueTsgICAgICAgICAvL+W8leWvvOaVsOe7hFxyXG4gICAgbWFwX0hpZ2h0Om51bWJlcjsgICAgICAgLy/lnLDlm77pq5jluqZcclxuICAgIG1hcF9XaWR0aDpudW1iZXI7ICAgICAgIC8v5Zyw5Zu+5a695bqmXHJcbiAgICBtaW5fVGltZTpudW1iZXI7ICAgICAgICAvL+S4iuS4gOaKiuWcsOWbvue7k+adn+aXtu+8jOi3neemu+a0quWzsOadpeS4tOaXtumXtCAoPjXnp5LmmK/kuKrliIbmsLTlsq0pXHJcbiAgICBtaW5fU3RlcHM6bnVtYmVyOyAgICAgICAvL+W9k+WJjeWcsOWbvuacgOS8mOatpeaVsFxyXG4gICAgcGxhbl9vdmVyOmJvb2xlYW47ICAgICAgLy/mmK/lkKbkv67lu7rlroxcclxuICAgIHdhdGVyVHdlZW46Y2MuVHdlZW47ICAgIC8v5rKz5rC05YCS6K6h5pe25Yqo55S7XHJcblxyXG4gICAgb25Mb2FkICgpIHtcclxuICAgIH1cclxuICAgIHN0YXJ0ICgpIHtcclxuICAgICAgICBjYy5meC5HYW1lQ29uZmlnLkNMSUNLX2luaXQoKTtcclxuICAgICAgICB0aGlzLmZpdCgpO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8v5aSE55CG5Zyw5Zu+5pWw5o2uIOesrOS4gOWFs+WujOWFqOmaj+acuu+8jOS7juesrOS6jOWFs+W8gOWni++8jOi1ouS6huagueaNrjXnp5LmtKrls7DmnaXkuLTlop7liqDpmr7luqbmraXmlbDvvIzovpPkuoblvZPliY3pmr7luqblh4/mraXmlbBcclxuICAgIGdldE1hcCgpe1xyXG4gICAgICAgIC8vIHZhciB0ZW1wID0gW107XHJcbiAgICAgICAgLy8gZm9yKGxldCBrPTA7IGs8Y2MuZnguR2FtZUNvbmZpZy5MRVZFTF9JTkZPLmxlbmd0aDsgaysrKXtcclxuICAgICAgICAvLyAgICAgdGVtcFtrXSA9IFtdO1xyXG4gICAgICAgIC8vICAgICBmb3IobGV0IGo9MDsgajxjYy5meC5HYW1lQ29uZmlnLkxFVkVMX0lORk9ba10ubGVuZ3RoOyBqKyspe1xyXG4gICAgICAgIC8vICAgICAgICAgdGVtcFtrXS5wdXNoKGNjLmZ4LkdhbWVDb25maWcuTEVWRUxfSU5GT1trXVtqXS5taW5fc3RlcHMpO1xyXG4gICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRlbXApO1xyXG5cclxuICAgICAgICB2YXIgY3VzdG9tID0gMDtcclxuICAgICAgICB2YXIgbWFwID0gW107XHJcbiAgICAgICAgaWYoY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmxldmVsID09IDEpe1xyXG4gICAgICAgICAgICBjdXN0b20gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqIGNjLmZ4LkdhbWVDb25maWcuTEVWRUxfSU5GT1tjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8ubGV2ZWxdLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIHZhciBhcnIgPSBjYy5meC5HYW1lQ29uZmlnLkxFVkVMX0lORk9bY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmxldmVsXTtcclxuICAgICAgICAgICAgaWYoY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLm1pbl9UaW1lID09IC0xKXtcclxuICAgICAgICAgICAgICAgIG1hcCA9IHRoaXMuZ2V0TWFwQXJyYXkoYXJyLGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5taW5fU3RlcHMgLSAxLGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5taW5fVGltZSA+PSA1KXtcclxuICAgICAgICAgICAgICAgIG1hcCA9IHRoaXMuZ2V0TWFwQXJyYXkoYXJyLGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5taW5fU3RlcHMgKyAyLHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBtYXAgPSB0aGlzLmdldE1hcEFycmF5KGFycixjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8ubWluX1N0ZXBzICsgMSx0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcmFuZG9tID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKiBtYXAubGVuZ3RoKTtcclxuICAgICAgICAgICAgY3VzdG9tID0gbWFwW3JhbmRvbV07XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGN1c3RvbSxtYXApO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL+iusOW9leW9k+WJjeacgOWwj+atpeaVsFxyXG4gICAgICAgIGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5taW5fU3RlcHMgPSBjYy5meC5HYW1lQ29uZmlnLkxFVkVMX0lORk9bY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmxldmVsXVtjdXN0b21dLm1pbl9zdGVwcztcclxuICAgICAgICBjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8ubWluX1RpbWUgPSAwO1xyXG4gICAgICAgIHJldHVybiBjdXN0b207XHJcbiAgICB9XHJcbiAgICAvL+iOt+WPluS4i+S4gOWFs+mavuW6pu+8jOatpeaVsOWinuWKoDLmiJbogIUx77yM5aaC5p6c5rKh5pyJ5YiZ6ZmN5Yiw5pyJLlxyXG4gICAgZ2V0TWFwQXJyYXkoYXJyLG1pbl9zdGVwcyx0eXBlKXtcclxuICAgICAgICB2YXIgbWFwID0gW107XHJcbiAgICAgICAgZm9yKGxldCBpPTA7IGk8YXJyLmxlbmd0aDsgaSsrKXtcclxuICAgICAgICAgICAgaWYoYXJyW2ldLm1pbl9zdGVwcyA9PSBtaW5fc3RlcHMpe1xyXG4gICAgICAgICAgICAgICAgbWFwLnB1c2goaSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYobWFwLmxlbmd0aCA9PSAwKXtcclxuICAgICAgICAgICAgaWYodHlwZSkgIG1hcCA9IHRoaXMuZ2V0TWFwQXJyYXkoYXJyLG1pbl9zdGVwcyAtIDEsdHlwZSk7XHJcbiAgICAgICAgICAgIGVsc2UgIG1hcCA9IHRoaXMuZ2V0TWFwQXJyYXkoYXJyLG1pbl9zdGVwcyArIDEsdHlwZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtYXA7XHJcbiAgICB9XHJcblxyXG4gICAgLy/liJ3lp4vljJbmlbDmja5cclxuICAgIGluaXQoKXtcclxuICAgICAgICBsZXQgbmFtZSA9IGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5nYW1lSWQgKyBcIl9ndWlkZVwiO1xyXG4gICAgICAgIHZhciBkYXRhID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKSk7XHJcblxyXG4gICAgICAgIGlmKGRhdGEgIT0gZmFsc2Upe1xyXG4gICAgICAgICAgICBjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8uZ3VpZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICBjYy5meC5TdG9yYWdlTWVzc2FnZS5zZXRTdG9yYWdlKG5hbWUsY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmd1aWRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmd1aWRlID0gY2MuZnguU3RvcmFnZU1lc3NhZ2UuZ2V0U3RvcmFnZShuYW1lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdE1hcCgpOyBcclxuICAgICAgICB0aGlzLmZpbmlzaGlUaW1lID0gMDtcclxuICAgICAgICB0aGlzLnNjb3JlVGltZSA9IDA7XHJcbiAgICAgICAgdGhpcy5yZXBsYWNlVGltZSA9IDA7XHJcbiAgICAgICAgdGhpcy5zdGFydFRpbWUgPSBjYy5meC5HYW1lVG9vbC5nZXRUaW1lKCk7XHJcbiAgICAgICAgdGhpcy5jb3VudFRpbWUgPSBjYy5meC5HYW1lQ29uZmlnLlRJTUVfSU5GTy50b3RhbFRpbWU7XHJcbiAgICAgICAgdGhpcy53YXRlclRpbWUgPSBjYy5meC5HYW1lQ29uZmlnLlRJTUVfSU5GTy53YXRlclRpbWVbY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmxldmVsXTtcclxuICAgICAgICAvLyBpZih0aGlzLmNvdW50VGltZSA8IHRoaXMud2F0ZXJUaW1lKSB0aGlzLnJlcGxhY2VUaW1lID0gdGhpcy5jb3VudFRpbWU7XHJcbiAgICAgICAgdGhpcy5UaW1lLnN0cmluZyA9ICBjYy5meC5HYW1lVG9vbC5nZXRUaW1lTWFyZ2luKHRoaXMuY291bnRUaW1lKTsgICAgXHJcblxyXG4gICAgICAgIGlmKCFjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8uZ3VpZGUpe1xyXG4gICAgICAgICAgICB0aGlzLkd1aWRlLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnN0ZXAgPSAwO1xyXG4gICAgICAgICAgICB2YXIgaGVhZCA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIlRvcFwiKS5nZXRDaGlsZEJ5TmFtZShcImhlYWRcIik7XHJcbiAgICAgICAgICAgIHZhciBwcm9ncmVzcyA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIlRvcFwiKS5nZXRDaGlsZEJ5TmFtZShcInByb2dyZXNzXCIpLmdldENvbXBvbmVudChjYy5TcHJpdGUpO1xyXG4gICAgICAgICAgICBoZWFkLnJ1bkFjdGlvbihjYy5tb3ZlVG8odGhpcy53YXRlclRpbWUsY2MudjIoMzEwLGhlYWQueSkpKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMud2F0ZXJUd2VlbiA9IGNjLnR3ZWVuKHByb2dyZXNzKVxyXG4gICAgICAgICAgICAudG8odGhpcy53YXRlclRpbWUse2ZpbGxSYW5nZToxfSlcclxuICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2NoZWR1bGUodGhpcy51cGRhdGVXYXRlclRpbWUsMSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2NoZWR1bGUodGhpcy51cGRhdGVDb3VudERvd25UaW1lLDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICB0aGlzLkd1aWRlLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZ3VpZGVOZXh0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIC8v5Yid5aeL5YyW5Zyw5Zu+XHJcbiAgICBpbml0TWFwKCl7XHJcbiAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLnJvdW5kICs9IDE7XHJcbiAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmZlbiA9IDA7XHJcbiAgICAgICAgdGhpcy5ibG9ja19BcnJheSA9IFtdO1xyXG4gICAgICAgIHRoaXMucGF0aF9BcnJheSA9IFtdO1xyXG4gICAgICAgIHRoaXMud2F0ZXJfQXJyYXkgPSBbXTtcclxuICAgICAgICB0aGlzLm1hcF9BcnJheSA9IFtdO1xyXG4gICAgICAgIHRoaXMudGlwX0FycmF5ID0gW107XHJcbiAgICAgICAgdGhpcy5wbGFuX292ZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1hcF9IaWdodCA9IDA7XHJcbiAgICAgICAgdGhpcy5tYXBfV2lkdGggPSAwO1xyXG4gICAgICAgIHRoaXMuc3RlcCA9IDA7XHJcbiAgICAgICAgdGhpcy5iZ0NsaWNrID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5idG5DbGljayA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY3VzdG9tID0gMDsgLy85XHJcbiAgICAgICAgaWYoIWNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5ndWlkZSAmJmNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5sZXZlbCA9PSAwICl7XHJcbiAgICAgICAgICAgIGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5sZXZlbCA9IDE7XHJcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tID0gdGhpcy5nZXRNYXAoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZighY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmd1aWRlKXtcclxuICAgICAgICAgICAgdGhpcy5jdXN0b20gPSB0aGlzLmdldE1hcCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmN1c3RvbSk7XHJcblxyXG4gICAgICAgIGxldCBhcnIgPSBjYy5meC5HYW1lQ29uZmlnLkxFVkVMX0lORk9bY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmxldmVsXVt0aGlzLmN1c3RvbV0ubWFwO1xyXG4gICAgICAgIGlmKGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5sZXZlbCA9PSAwKXtcclxuICAgICAgICAgICAgdGhpcy5NYXAuc2NhbGUgPSAxLjI7XHJcbiAgICAgICAgfSBcclxuICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJUb3BcIikuZ2V0Q2hpbGRCeU5hbWUoXCJpZFwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IFxyXG4gICAgICAgIGNjLmZ4LkdhbWVDb25maWcuTEVWRUxfSU5GT1tjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8ubGV2ZWxdW3RoaXMuY3VzdG9tXS5pZDtcclxuICAgICAgICAvL+WwhuWcsOWbvngseei9tOWIh+aNolxyXG4gICAgICAgIHRoaXMubWFwX0FycmF5ID0gYXJyWzBdLm1hcCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJyLm1hcCgodmFsKSA9PiB2YWxbaV0pXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLm1hcF9XaWR0aCA9IHRoaXMubWFwX0FycmF5Lmxlbmd0aDtcclxuICAgICAgICB0aGlzLm1hcF9IaWdodCA9IHRoaXMubWFwX0FycmF5WzBdLmxlbmd0aDtcclxuXHJcbiAgICAgICAgdGhpcy5NYXAueCA9KDYgLSB0aGlzLm1hcF9BcnJheS5sZW5ndGgpKjQ4O1xyXG4gICAgICAgIHRoaXMuTWFwLnkgPSAodGhpcy5tYXBfQXJyYXlbMF0ubGVuZ3RoIC0gNi41KSo0ODtcclxuXHJcbiAgICAgICAgZm9yKGxldCBpPTA7aTx0aGlzLm1hcF9BcnJheS5sZW5ndGg7aSsrKXtcclxuICAgICAgICAgICAgZm9yKGxldCBqPTA7IGo8dGhpcy5tYXBfQXJyYXkgW2ldLmxlbmd0aDtqKyspe1xyXG4gICAgICAgICAgICAgICAgbGV0IGJsb2NrID0gY2MuaW5zdGFudGlhdGUodGhpcy5CbG9jayk7XHJcbiAgICAgICAgICAgICAgICBibG9jay5wYXJlbnQ9IHRoaXMuTWFwO1xyXG4gICAgICAgICAgICAgICAgYmxvY2suZ2V0Q29tcG9uZW50KFwiQmxvY2tcIikuaW5pdERhdGEodGhpcy5tYXBfQXJyYXkgW2ldW2pdLGNjLnYyKGksaiksY2MudjIodGhpcy5tYXBfV2lkdGgsdGhpcy5tYXBfSGlnaHQpKTtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubWFwX0FycmF5IFtpXVtqXSA9PSBjYy5FbnVtKEJsb2NrVHlwZSkuU3RhcnQpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGF0aF9BcnJheS5wdXNoKGNjLnYzKGksaixjYy5FbnVtKEJsb2NrVHlwZSkuTm9tYWwpKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLndhdGVyX0FycmF5LnB1c2goY2MudjMoaSxqLGNjLkVudW0oQmxvY2tUeXBlKS5Ob21hbCkpO1xyXG4gICAgICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgICAgIGJsb2NrLnNldFBvc2l0aW9uKGNjLnYyKC1ibG9jay53aWR0aCoyLjUgKyBpKmJsb2NrLndpZHRoLGJsb2NrLmhlaWdodCo0IC0gaipibG9jay5oZWlnaHQpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tfQXJyYXkucHVzaChibG9jayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8v5byA5aeL5ZCO77yM5oyJ546p5a625pON5L2c77yM5bCG6Lev5b6E5Lit5Zyw5Zu+5Z2X5pS+5YWl5pWw57uE5LitXHJcbiAgICBzZXRNYXAoZGF0YSl7XHJcbiAgICAgICAgZm9yKGxldCBpPTA7IGk8ZGF0YS5sZW5ndGg7IGkrKyl7XHJcbiAgICAgICAgICAgIGxldCBzdGFydCA9IHRoaXMucGF0aF9BcnJheVt0aGlzLnBhdGhfQXJyYXkubGVuZ3RoLTFdO1xyXG4gICAgICAgICAgICBzd2l0Y2goZGF0YVtpXSl7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwidXBcIjpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhdGhfQXJyYXkucHVzaChjYy52MyhzdGFydC54LHN0YXJ0LnktMSxjYy5FbnVtKEJsb2NrVHlwZSkuTm9tYWwpKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJkb3duXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXRoX0FycmF5LnB1c2goY2MudjMoc3RhcnQueCxzdGFydC55KzEsY2MuRW51bShCbG9ja1R5cGUpLk5vbWFsKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwibGVmdFwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGF0aF9BcnJheS5wdXNoKGNjLnYzKHN0YXJ0LngtMSxzdGFydC55LGNjLkVudW0oQmxvY2tUeXBlKS5Ob21hbCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcInJpZ2h0XCI6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXRoX0FycmF5LnB1c2goY2MudjMoc3RhcnQueCsxLHN0YXJ0LnksY2MuRW51bShCbG9ja1R5cGUpLk5vbWFsKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwicmVpbmZvcmNlXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXRoX0FycmF5LnB1c2goY2MudjMoc3RhcnQueCxzdGFydC55LGNjLkVudW0oQmxvY2tUeXBlKS5SZWluZm9yY2UpKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJzb2lsXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXRoX0FycmF5LnB1c2goY2MudjMoc3RhcnQueCxzdGFydC55LGNjLkVudW0oQmxvY2tUeXBlKS5YaV9Tb2lsKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYodGhpcy5wYXRoX0FycmF5W3RoaXMucGF0aF9BcnJheS5sZW5ndGgtMV0ueiAhPSAwKXtcclxuICAgICAgICAgICAgdGhpcy5wYXRoX0FycmF5LnBvcCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJ1blJvYWQoMCk7XHJcbiAgICB9XHJcbiAgICAvL+W8gOWni+aJp+ihjOa0quWzsOadpeS6hueahOWKqOeUu1xyXG4gICAgcnVuUm9hZChvcmRlcil7XHJcbiAgICAgICAgb3JkZXIgPSBwYXJzZUludChvcmRlcik7XHJcbiAgICAgICAgaWYob3JkZXIgPiAwKXtcclxuICAgICAgICAgICAgaWYodGhpcy5wYXRoX0FycmF5W29yZGVyLTFdLnogPT0gMCl7XHJcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiMeato+W4uOaUvuWFpVwiLHRoaXMucGF0aF9BcnJheVtvcmRlci0xXS54LHRoaXMucGF0aF9BcnJheVtvcmRlci0xXS55LHRoaXMucGF0aF9BcnJheVtvcmRlci0xXS56KVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VXYXRlcihjYy52Myh0aGlzLnBhdGhfQXJyYXlbb3JkZXItMV0ueCx0aGlzLnBhdGhfQXJyYXlbb3JkZXItMV0ueSwwKSk7XHJcbiAgICAgICAgICAgICAgICBpZihvcmRlciA9PSB0aGlzLnBhdGhfQXJyYXkubGVuZ3RoLTEpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlV2F0ZXIoY2MudjModGhpcy5wYXRoX0FycmF5W29yZGVyXS54LHRoaXMucGF0aF9BcnJheVtvcmRlcl0ueSwwKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCLmnIDlkI7mlL7lhaVcIix0aGlzLnBhdGhfQXJyYXlbb3JkZXJdLngsdGhpcy5wYXRoX0FycmF5W29yZGVyXS55KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiMuaPkuWFpVwiLHRoaXMucGF0aF9BcnJheVtvcmRlcl0ueCx0aGlzLnBhdGhfQXJyYXlbb3JkZXJdLnksdGhpcy5wYXRoX0FycmF5W29yZGVyXS56KVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VXYXRlcihjYy52Myh0aGlzLnBhdGhfQXJyYXlbb3JkZXJdLngsdGhpcy5wYXRoX0FycmF5W29yZGVyXS55LDApKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gXHJcbiAgICAgICAgaWYob3JkZXIgPD0gdGhpcy5wYXRoX0FycmF5Lmxlbmd0aC0xKXtcclxuICAgICAgICAgICAgbGV0IGkgPSB0aGlzLnBhdGhfQXJyYXlbb3JkZXJdLngqdGhpcy5tYXBfQXJyYXlbMF0ubGVuZ3RoK3RoaXMucGF0aF9BcnJheVtvcmRlcl0ueTtcclxuICAgICAgICAgICAgbGV0IGRpcmVjdGlvbiA9IFwiXCI7XHJcbiAgICAgICAgICAgIGxldCBjaXJjdWxhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAvL+acgOWQjuS4gOatpee7k+adn1xyXG4gICAgICAgICAgICBpZihvcmRlciA9PSB0aGlzLnBhdGhfQXJyYXkubGVuZ3RoLTEpe1xyXG4gICAgICAgICAgICAgICAgY2lyY3VsYXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBcIkVuZFwiO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCLov5vlhaXnu5PmnZ9cIik7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLnBhdGhfQXJyYXkubGVuZ3RoID4gMSl7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCLlh4blpIflh7rmsLRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCF0aGlzLnBsYW5fb3Zlcil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYW5fb3ZlciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc2NoZWR1bGUodGhpcy51cGRhdGVXYXRlclRpbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlYWQgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJUb3BcIikuZ2V0Q2hpbGRCeU5hbWUoXCJoZWFkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb2dyZXNzID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiVG9wXCIpLmdldENoaWxkQnlOYW1lKFwicHJvZ3Jlc3NcIikuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkLnN0b3BBbGxBY3Rpb25zKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkLnNldFBvc2l0aW9uKDMxMCxoZWFkLnkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodGhpcy53YXRlclR3ZWVuKSB0aGlzLndhdGVyVHdlZW4uc3RvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3MuZmlsbFJhbmdlID0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5taW5fVGltZSA9IHRoaXMud2F0ZXJUaW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ydW5XYXRlcigwKTsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBcImVyclwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi6L+b5YWl57uT5p2fZXJyXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5wYXRoX0FycmF5W29yZGVyXS56ID09IDYgJiYgb3JkZXIgKyAxIDwgdGhpcy5wYXRoX0FycmF5Lmxlbmd0aCApIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBcIlJlaW5mb3JjZVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGkgPSB0aGlzLnBhdGhfQXJyYXlbb3JkZXIrMV0ueCp0aGlzLm1hcF9BcnJheVswXS5sZW5ndGgrdGhpcy5wYXRoX0FycmF5W29yZGVyKzFdLnk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmKG9yZGVyKzEgPCB0aGlzLnBhdGhfQXJyYXkubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLnBhdGhfQXJyYXlbb3JkZXIrMV0ueiA9PSA1KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gXCJYaV9Tb2lsXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYodGhpcy5wYXRoX0FycmF5W29yZGVyKzFdLnogPT0gNiAmJiBvcmRlciA9PSAwICYmIG9yZGVyICsgMSA8IHRoaXMucGF0aF9BcnJheS5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSB0aGlzLmdldERpcmVjdGlvbihvcmRlcisxLHRoaXMucGF0aF9BcnJheSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IHRoaXMuZ2V0RGlyZWN0aW9uKG9yZGVyLHRoaXMucGF0aF9BcnJheSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSB0aGlzLmdldERpcmVjdGlvbihvcmRlcix0aGlzLnBhdGhfQXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKG9yZGVyLHRoaXMucGF0aF9BcnJheVtvcmRlcl0ueCx0aGlzLnBhdGhfQXJyYXlbb3JkZXJdLnksaSk7XHJcbiBcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCLmraXpqqQ6XCIsb3JkZXIsXCLmlrnlkJFcIixkaXJlY3Rpb24pO1xyXG4gICAgICAgICAgICBsZXQgamcgPSB0aGlzLmdldEJvdW5kYXJ5KG9yZGVyLHRoaXMucGF0aF9BcnJheVtvcmRlcl0ueCx0aGlzLnBhdGhfQXJyYXlbb3JkZXJdLnksZGlyZWN0aW9uLHRoaXMucGF0aF9BcnJheSk7XHJcblxyXG4gICAgICAgICAgICAvLyBpZihkaXJlY3Rpb24gPT0gXCJcIiB8fCBqZyA9PSBmYWxzZSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZihkaXJlY3Rpb24gPT0gXCJlcnJcIiB8fCBkaXJlY3Rpb24gPT0gXCJcIiB8fCBqZyA9PSBmYWxzZSl7XHJcbiAgICAgICAgICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLmVtaXQoY2MuZnguTWVzc2FnZS5zaG93UmVzdWx0LFwibG9zZVwiKTtcclxuICAgICAgICAgICAgICAgIGNjLmZ4Lk5vdGlmaWNhdGlvbnMuZW1pdChjYy5meC5NZXNzYWdlLnNldERhdGEsZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCB0YXJnZXQgPSB0aGlzLmJsb2NrX0FycmF5W2ldLmdldENvbXBvbmVudChcIkJsb2NrXCIpO1xyXG4gICAgXHJcbiAgICAgICAgICAgIHRhcmdldC5zZXRQYXRoKGRpcmVjdGlvbik7XHJcblxyXG4gICAgICAgICAgICBpZihvcmRlciA+IDAgJiYgb3JkZXIgPCB0aGlzLnBhdGhfQXJyYXkubGVuZ3RoLTEpe1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5wYXRoX0FycmF5W29yZGVyKzFdLnogPT0gNSl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRfU29pbChvcmRlcisxLHRoaXMucGF0aF9BcnJheSxcInJvYWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgY2lyY3VsYXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmKG9yZGVyID09IDEgJiYgdGhpcy5wYXRoX0FycmF5W29yZGVyXS56ID09IDUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0X1NvaWwob3JkZXIsdGhpcy5wYXRoX0FycmF5LFwicm9hZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICBjaXJjdWxhdGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHBvcyA9IGNjLnYyKCk7XHJcbiAgICAgICAgICAgIGlmKGRpcmVjdGlvbiA9PSBcIkVuZFwiKXtcclxuICAgICAgICAgICAgICAgIGlmKG9yZGVyID4gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYodGhpcy5wYXRoX0FycmF5W29yZGVyLTFdLnogPT0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IGNjLnYyKHRoaXMucGF0aF9BcnJheVtvcmRlci0xXS54LCB0aGlzLnBhdGhfQXJyYXlbb3JkZXItMV0ueSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBkYXRhID0ge1xyXG4gICAgICAgICAgICAgICAgb3JkZXI6b3JkZXIsXHJcbiAgICAgICAgICAgICAgICB0aW1lOmNjLmZ4LkdhbWVDb25maWcuVElNRV9JTkZPLndhdGVyU3BlZWRbY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmxldmVsXSxcclxuICAgICAgICAgICAgICAgIHR5cGU6dGhpcy5wYXRoX0FycmF5W29yZGVyXS56LFxyXG4gICAgICAgICAgICAgICAgY2lyY3VsYXRlOmNpcmN1bGF0ZSxcclxuICAgICAgICAgICAgICAgIGxhc3Q6cG9zXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHRhcmdldC5ydW5Sb2FkKGRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8v5Yik5pat6L6555WM44CC5oiW6ICF5pKe5bGx77yM5oiW6ICF5rm/5Zyw5rKh5pyJ5Yqg5Zu6XHJcbiAgICBnZXRCb3VuZGFyeShvcmRlcix4LHksZGlyZWN0aW9uLHJvYWQpe1xyXG4gICAgICAgIGxldCBqZyA9IHRydWU7XHJcbiAgICAgICAgaWYoeCA8IDAgfHwgeCA+PSB0aGlzLm1hcF9XaWR0aCB8fCB5IDwgMCB8fCB5ID49IHRoaXMubWFwX0hpZ2h0KXtcclxuICAgICAgICAgICAgamcgPSBmYWxzZTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCLotoXov4fovrnnlYzvvIzmuLjmiI/nu5PmnZ9cIik7XHJcbiAgICAgICAgICAgIC8vIGFsZXJ0KFwi6LaF6L+H6L6555WM77yM5rK75rC05aSx6LSlXCIpO1xyXG4gICAgICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLmVtaXQoY2MuZnguTWVzc2FnZS5zaG93UmVzdWx0LFwibG9zZVwiKTtcclxuICAgICAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5lbWl0KGNjLmZ4Lk1lc3NhZ2Uuc2V0RGF0YSxmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgaSA9IHJvYWRbb3JkZXJdLngqdGhpcy5tYXBfQXJyYXlbMF0ubGVuZ3RoK3JvYWRbb3JkZXJdLnk7XHJcbiAgICAgICAgICAgIGxldCB0YXJnZXQgPSB0aGlzLmJsb2NrX0FycmF5W2ldLmdldENvbXBvbmVudChcIkJsb2NrXCIpO1xyXG4gICAgICAgICAgICBpZih0YXJnZXQuYmxvY2tfVHlwZSA9PSAzKXtcclxuICAgICAgICAgICAgICAgIGpnID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIuS/ruetkeWxseWzsO+8jOa4uOaIj+e7k+adn1wiKTtcclxuICAgICAgICAgICAgICAgIC8vIGFsZXJ0KFwi5L+u562R5bGx5bOw77yM5rK75rC05aSx6LSlXCIpO1xyXG4gICAgICAgICAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5lbWl0KGNjLmZ4Lk1lc3NhZ2Uuc2hvd1Jlc3VsdCxcImxvc2VcIik7XHJcbiAgICAgICAgICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLmVtaXQoY2MuZnguTWVzc2FnZS5zZXREYXRhLGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKHRhcmdldC5ibG9ja19UeXBlID09IDIgJiYgZGlyZWN0aW9uICE9IFwiUmVpbmZvcmNlXCIpe1xyXG4gICAgICAgICAgICAgICAgamcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwi5L+u562R5pyq5Yqg5Zu65rm/5ZywLOa4uOaIj+e7k+adn1wiKTtcclxuICAgICAgICAgICAgICAgIC8vIGFsZXJ0KFwi5L+u562R5pyq5Yqg5Zu65rm/5ZywLOa4uOaIj+e7k+adn1wiKTtcclxuICAgICAgICAgICAgICAgIGNjLmZ4Lk5vdGlmaWNhdGlvbnMuZW1pdChjYy5meC5NZXNzYWdlLnNob3dSZXN1bHQsXCJsb3NlXCIpO1xyXG4gICAgICAgICAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5lbWl0KGNjLmZ4Lk1lc3NhZ2Uuc2V0RGF0YSxmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGpnO1xyXG4gICAgfVxyXG5cclxuICAgIC8v5byA5aeL5omn6KGM5rSq5bOw5p2l5LqG55qE5Yqo55S7XHJcbiAgICBydW5XYXRlcihvcmRlcil7XHJcbiAgICAgICAgb3JkZXIgPSBwYXJzZUludChvcmRlcik7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYob3JkZXIgPD0gdGhpcy53YXRlcl9BcnJheS5sZW5ndGgtMSl7XHJcbiAgICAgICAgICAgIGxldCBpID0gdGhpcy53YXRlcl9BcnJheVtvcmRlcl0ueCp0aGlzLm1hcF9BcnJheVswXS5sZW5ndGgrdGhpcy53YXRlcl9BcnJheVtvcmRlcl0ueTtcclxuICAgICAgICAgICAgbGV0IGRpcmVjdGlvbiA9IFwiXCI7XHJcbiAgICAgICAgICAgIGxldCBjaXJjdWxhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAvL+acgOWQjuS4gOatpee7k+adn1xyXG4gICAgICAgICAgICBpZihvcmRlciA9PSB0aGlzLndhdGVyX0FycmF5Lmxlbmd0aC0xKXtcclxuICAgICAgICAgICAgICAgIGNpcmN1bGF0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gXCJFbmRcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy53YXRlcl9BcnJheVtvcmRlcl0ueiA9PSA2ICYmIG9yZGVyICsgMSA8IHRoaXMud2F0ZXJfQXJyYXkubGVuZ3RoICYmIG9yZGVyIT0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gXCJSZWluZm9yY2VcIjtcclxuICAgICAgICAgICAgICAgICAgICBpID0gdGhpcy53YXRlcl9BcnJheVtvcmRlcisxXS54KnRoaXMubWFwX0FycmF5WzBdLmxlbmd0aCt0aGlzLndhdGVyX0FycmF5W29yZGVyKzFdLnk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmKG9yZGVyKzEgPCB0aGlzLndhdGVyX0FycmF5Lmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy53YXRlcl9BcnJheVtvcmRlcisxXS56ID09IDUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBcIlhpX1NvaWxcIjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZih0aGlzLndhdGVyX0FycmF5W29yZGVyKzFdLnogPT0gNiAmJiBvcmRlciA9PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gXCJSZWluZm9yY2VcIjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gdGhpcy5nZXREaXJlY3Rpb24ob3JkZXIsdGhpcy53YXRlcl9BcnJheSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSB0aGlzLmdldERpcmVjdGlvbihvcmRlcix0aGlzLndhdGVyX0FycmF5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgamcgPSB0aGlzLmdldEJvdW5kYXJ5KG9yZGVyLHRoaXMud2F0ZXJfQXJyYXlbb3JkZXJdLngsdGhpcy53YXRlcl9BcnJheVtvcmRlcl0ueSxkaXJlY3Rpb24sdGhpcy53YXRlcl9BcnJheSk7XHJcbiAgICAgICAgICAgIGlmKGRpcmVjdGlvbiA9PSBcIlwiIHx8IGpnID09IGZhbHNlIHx8IGRpcmVjdGlvbiA9PSBcImVyclwiKXtcclxuICAgICAgICAgICAgICAgIGNjLmZ4Lk5vdGlmaWNhdGlvbnMuZW1pdChjYy5meC5NZXNzYWdlLnNob3dSZXN1bHQsXCJsb3NlXCIpO1xyXG4gICAgICAgICAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5lbWl0KGNjLmZ4Lk1lc3NhZ2Uuc2V0RGF0YSxmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHRhcmdldCA9IHRoaXMuYmxvY2tfQXJyYXlbaV0uZ2V0Q29tcG9uZW50KFwiQmxvY2tcIik7XHJcbiAgICAgICAgICAgIHRhcmdldC5zZXRQYXRoKGRpcmVjdGlvbik7XHJcblxyXG4gICAgICAgICAgICBpZihvcmRlciA+IDAgJiYgb3JkZXIgPCB0aGlzLndhdGVyX0FycmF5Lmxlbmd0aC0xKXtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMud2F0ZXJfQXJyYXlbb3JkZXIrMV0ueiA9PSA1KXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldF9Tb2lsKG9yZGVyKzEsdGhpcy53YXRlcl9BcnJheSxcIndhdGVyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNpcmN1bGF0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYob3JkZXIgPT0gMSAmJiB0aGlzLndhdGVyX0FycmF5W29yZGVyXS56ID09IDUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0X1NvaWwob3JkZXIsdGhpcy53YXRlcl9BcnJheSxcIndhdGVyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNpcmN1bGF0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBwb3MgPSBjYy52MigpO1xyXG4gICAgICAgICAgICBpZihkaXJlY3Rpb24gPT0gXCJFbmRcIil7XHJcbiAgICAgICAgICAgICAgICBpZihvcmRlciA+IDApe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMud2F0ZXJfQXJyYXlbb3JkZXItMV0ueiA9PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zID0gY2MudjIodGhpcy53YXRlcl9BcnJheVtvcmRlci0xXS54LCB0aGlzLndhdGVyX0FycmF5W29yZGVyLTFdLnkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgICAgIG9yZGVyOm9yZGVyLFxyXG4gICAgICAgICAgICAgICAgdGltZTpjYy5meC5HYW1lQ29uZmlnLlRJTUVfSU5GTy53YXRlclNwZWVkW2NjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5sZXZlbF0sXHJcbiAgICAgICAgICAgICAgICB0eXBlOnRoaXMud2F0ZXJfQXJyYXlbb3JkZXJdLnosXHJcbiAgICAgICAgICAgICAgICBjaXJjdWxhdGU6Y2lyY3VsYXRlLFxyXG4gICAgICAgICAgICAgICAgbGFzdDpwb3NcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGFyZ2V0LnJ1bldhdGVyKGRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8v6I635Y+W5oGv5aOk55qE5qC85a2Q55qE5pa55ZCRXHJcbiAgICBnZXRYaV9Tb2lsKG9yZGVyLHJvYWQpe1xyXG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSBudWxsO1xyXG4gICAgICAgIC8v5aaC5p6c5oGv5aOk5ZCO6Z2i6L+Y5pyJ5LiL5LiA5q2l55qE6K+dXHJcbiAgICAgICAgaWYob3JkZXIgKyAxIDwgcm9hZC5sZW5ndGgpe1xyXG4gICAgICAgICAgICBkaXJlY3Rpb24gPSB0aGlzLmdldERpcmVjdGlvbihvcmRlcixyb2FkKTtcclxuICAgICAgICAgICAgaWYoZGlyZWN0aW9uID09IFwidXBcIiB8fCBkaXJlY3Rpb24gPT0gXCJyaWdodF91cFwiIHx8IGRpcmVjdGlvbiA9PSBcImxlZnRfdXBcIil7XHJcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBcInVwXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZihkaXJlY3Rpb24gPT0gXCJkb3duXCIgfHwgZGlyZWN0aW9uID09IFwibGVmdF9kb3duXCIgfHwgZGlyZWN0aW9uID09IFwicmlnaHRfZG93blwiKXtcclxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IFwiZG93blwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYoZGlyZWN0aW9uID09IFwibGVmdFwiIHx8IGRpcmVjdGlvbiA9PSBcInVwX2xlZnRcIiB8fCBkaXJlY3Rpb24gPT0gXCJkb3duX2xlZnRcIil7XHJcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBcImxlZnRcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKGRpcmVjdGlvbiA9PSBcInJpZ2h0XCIgfHwgZGlyZWN0aW9uID09IFwidXBfcmlnaHRcIiB8fCBkaXJlY3Rpb24gPT0gXCJkb3duX3JpZ2h0XCIpe1xyXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gXCJyaWdodFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSAgXHJcbiAgICAgICAgcmV0dXJuIGRpcmVjdGlvbjtcclxuICAgIH1cclxuICAgIC8v6K6+572u5oGv5aOkXHJcbiAgICBzZXRfU29pbChvcmRlcixyb2FkLG5hbWUpe1xyXG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLmdldFhpX1NvaWwob3JkZXIscm9hZCk7XHJcbiAgICAgICAgdmFyIGxlbmd0aCA9IDA7XHJcbiAgICAgICAgaWYoZGlyZWN0aW9uID09IFwicmlnaHRcIil7XHJcbiAgICAgICAgICAgIGxlbmd0aCA9IHRoaXMubWFwX1dpZHRoIC0gMTtcclxuICAgICAgICAgICAgZm9yKGxldCBpPXJvYWRbb3JkZXJdLng7aTw9bGVuZ3RoO2krKyl7XHJcbiAgICAgICAgICAgICAgICBsZXQgbiA9IGkqdGhpcy5tYXBfQXJyYXlbMF0ubGVuZ3RoK3JvYWRbb3JkZXJdLnk7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gdGhpcy5ibG9ja19BcnJheVtuXS5nZXRDb21wb25lbnQoXCJCbG9ja1wiKTtcclxuICAgICAgICAgICAgICAgIGlmKHRhcmdldC5ibG9ja19UeXBlID09IDMgfHwgdGFyZ2V0LmJsb2NrX1R5cGUgPT0gNCl7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gaS0xO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRhcmdldC5ibG9ja19UeXBlID09IDQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggKz0gMTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaSA9IDEwMDAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9dGhpcy5zY2hlZHVsZU9uY2VcclxuICAgICAgICB9IFxyXG4gICAgICAgIGVsc2UgaWYoZGlyZWN0aW9uID09IFwibGVmdFwiKXtcclxuICAgICAgICAgICAgbGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgZm9yKGxldCBpPXJvYWRbb3JkZXJdLng7aT49bGVuZ3RoO2ktLSl7XHJcbiAgICAgICAgICAgICAgICBsZXQgbiA9IGkqdGhpcy5tYXBfQXJyYXlbMF0ubGVuZ3RoK3JvYWRbb3JkZXJdLnk7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gdGhpcy5ibG9ja19BcnJheVtuXS5nZXRDb21wb25lbnQoXCJCbG9ja1wiKTtcclxuICAgICAgICAgICAgICAgIGlmKHRhcmdldC5ibG9ja19UeXBlID09IDMgfHwgdGFyZ2V0LmJsb2NrX1R5cGUgPT0gNCl7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gIGkgKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRhcmdldC5ibG9ja19UeXBlID09IDQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggLT0gMTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaSA9IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBcclxuICAgICAgICBlbHNlIGlmKGRpcmVjdGlvbiA9PSBcInVwXCIpe1xyXG4gICAgICAgICAgICBsZW5ndGggPSAwO1xyXG4gICAgICAgICAgICBmb3IobGV0IGk9cm9hZFtvcmRlcl0ueTtpPj1sZW5ndGg7aS0tKXtcclxuICAgICAgICAgICAgICAgIGxldCBuID0gcm9hZFtvcmRlcl0ueCp0aGlzLm1hcF9BcnJheVswXS5sZW5ndGggKyBpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRhcmdldCA9IHRoaXMuYmxvY2tfQXJyYXlbbl0uZ2V0Q29tcG9uZW50KFwiQmxvY2tcIik7XHJcbiAgIFxyXG4gICAgICAgICAgICAgICAgaWYodGFyZ2V0LmJsb2NrX1R5cGUgPT0gMyB8fCB0YXJnZXQuYmxvY2tfVHlwZSA9PSA0KXtcclxuICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICBpZih0YXJnZXQuYmxvY2tfVHlwZSA9PSA0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoIC09IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGkgPSAtMTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gXHJcbiAgICAgICAgZWxzZSBpZihkaXJlY3Rpb24gPT0gXCJkb3duXCIpe1xyXG4gICAgICAgICAgICBsZW5ndGggPSB0aGlzLm1hcF9IaWdodCAtIDE7XHJcbiAgICAgICAgICAgIGZvcihsZXQgaT1yb2FkW29yZGVyXS55O2k8PWxlbmd0aDtpKyspe1xyXG4gICAgICAgICAgICAgICAgbGV0IG4gPSByb2FkW29yZGVyXS54KnRoaXMubWFwX0FycmF5WzBdLmxlbmd0aCArIGk7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gdGhpcy5ibG9ja19BcnJheVtuXS5nZXRDb21wb25lbnQoXCJCbG9ja1wiKTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgaWYodGFyZ2V0LmJsb2NrX1R5cGUgPT0gMyB8fCB0YXJnZXQuYmxvY2tfVHlwZSA9PSA0KXtcclxuICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBpLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGFyZ2V0LmJsb2NrX1R5cGUgPT0gNCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCArPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpID0gMTAwMDA7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IFxyXG4gICAgICAgIC8vIGlmKGxlbmd0aCA9PSAwKXtcclxuICAgICAgICAgICBcclxuICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgIHRoaXMuc29pbF9GaW5kKGRpcmVjdGlvbixvcmRlcixsZW5ndGgscm9hZCxuYW1lKTtcclxuICAgIH1cclxuICAgIC8v5p+l5om+5oGv5aOk6Juu6YGX5oa+6Lev5b6EXHJcbiAgICBzb2lsX0ZpbmQoZGlyZWN0aW9uLG9yZGVyLGxlbmd0aCxyb2FkLG5hbWUpe1xyXG4gICAgICAgIGxldCBzdGFydCA9IHJvYWRbb3JkZXJdLng7XHJcbiAgICAgICAgaWYoZGlyZWN0aW9uID09IFwicmlnaHRcIil7XHJcbiAgICAgICAgICAgIGZvcihsZXQgaSA9IHN0YXJ0OyBpPD1sZW5ndGg7IGkrKyl7XHJcbiAgICAgICAgICAgICAgICBsZXQgbiA9IGkqdGhpcy5tYXBfQXJyYXlbMF0ubGVuZ3RoK3JvYWRbb3JkZXJdLnk7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gdGhpcy5ibG9ja19BcnJheVtuXS5nZXRDb21wb25lbnQoXCJCbG9ja1wiKTtcclxuICAgICAgICAgICAgICAgIGlmKGkgPT0gc3RhcnQpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGkgPT0gc3RhcnQgJiYgaT09bGVuZ3RoKSB0YXJnZXQuc2V0X1hpX1NvaWxUeXBlKHRoaXMuZ2V0RGlyZWN0aW9uKG9yZGVyLHJvYWQpLG9yZGVyLG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgdGFyZ2V0LnNldF9YaV9Tb2lsVHlwZSh0aGlzLmdldERpcmVjdGlvbihvcmRlcixyb2FkKSxudWxsLG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGNjLnYzKHRoaXMucGF0aF9BcnJheVtvcmRlcl0ueCx0aGlzLnBhdGhfQXJyYXlbb3JkZXJdLnksMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy53YXRlcl9BcnJheVt0aGlzLndhdGVyX0FycmF5Lmxlbmd0aC0xXSAhPSB2YWx1ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwi54m55Yir5o+S5YWlOlwiLHRoaXMucGF0aF9BcnJheVtvcmRlcl0ueCx0aGlzLnBhdGhfQXJyYXlbb3JkZXJdLnkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVdhdGVyKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9ICBcclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBqZyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoaSA9PSBsZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbnVtYmVyID0gaSAtIHN0YXJ0IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVBhdGgob3JkZXIsbnVtYmVyLGZhbHNlLHJvYWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBqZyA9IG9yZGVyO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnNldF9YaV9Tb2lsVHlwZShkaXJlY3Rpb24samcsbmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9ICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IFxyXG4gICAgICAgIGVsc2UgaWYoZGlyZWN0aW9uID09IFwibGVmdFwiKXtcclxuICAgICAgICAgICAgZm9yKGxldCBpID0gc3RhcnQ7IGk+PWxlbmd0aDsgaS0tKXtcclxuICAgICAgICAgICAgICAgIGxldCBuID0gaSp0aGlzLm1hcF9BcnJheVswXS5sZW5ndGgrcm9hZFtvcmRlcl0ueTtcclxuICAgICAgICAgICAgICAgIGxldCB0YXJnZXQgPSB0aGlzLmJsb2NrX0FycmF5W25dLmdldENvbXBvbmVudChcIkJsb2NrXCIpO1xyXG4gICAgICAgICAgICAgICAgaWYoaSA9PSBzdGFydCl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoaSA9PSBzdGFydCAmJiBpPT1sZW5ndGgpIHRhcmdldC5zZXRfWGlfU29pbFR5cGUodGhpcy5nZXREaXJlY3Rpb24ob3JkZXIscm9hZCksb3JkZXIsbmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB0YXJnZXQuc2V0X1hpX1NvaWxUeXBlKHRoaXMuZ2V0RGlyZWN0aW9uKG9yZGVyLHJvYWQpLG51bGwsbmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gY2MudjModGhpcy5wYXRoX0FycmF5W29yZGVyXS54LHRoaXMucGF0aF9BcnJheVtvcmRlcl0ueSwwKTtcclxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLndhdGVyX0FycmF5W3RoaXMud2F0ZXJfQXJyYXkubGVuZ3RoLTFdICE9IHZhbHVlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCLnibnliKvmj5LlhaU6XCIsdGhpcy5wYXRoX0FycmF5W29yZGVyXS54LHRoaXMucGF0aF9BcnJheVtvcmRlcl0ueSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlV2F0ZXIodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gIFxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGpnID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBpZihpID09IGxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBudW1iZXIgPSBpIC0gc3RhcnQgKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVBhdGgob3JkZXIsbnVtYmVyLGZhbHNlLHJvYWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBqZyA9IG9yZGVyO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnNldF9YaV9Tb2lsVHlwZShkaXJlY3Rpb24samcsbmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IFxyXG4gICAgICAgIGVsc2UgaWYoZGlyZWN0aW9uID09IFwidXBcIil7XHJcbiAgICAgICAgICAgIHN0YXJ0ID0gcm9hZFtvcmRlcl0ueTtcclxuICAgICAgICAgICAgZm9yKGxldCBpID0gc3RhcnQ7IGk+PWxlbmd0aDsgaS0tKXtcclxuICAgICAgICAgICAgICAgIGxldCBuID0gcm9hZFtvcmRlcl0ueCp0aGlzLm1hcF9BcnJheVswXS5sZW5ndGgraTtcclxuICAgICAgICAgICAgICAgIGxldCB0YXJnZXQgPSB0aGlzLmJsb2NrX0FycmF5W25dLmdldENvbXBvbmVudChcIkJsb2NrXCIpO1xyXG4gICAgICAgICAgICAgICAgaWYoaSA9PSBzdGFydCl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoaSA9PSBzdGFydCAmJiBpPT1sZW5ndGgpIHRhcmdldC5zZXRfWGlfU29pbFR5cGUodGhpcy5nZXREaXJlY3Rpb24ob3JkZXIscm9hZCksb3JkZXIsbmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB0YXJnZXQuc2V0X1hpX1NvaWxUeXBlKHRoaXMuZ2V0RGlyZWN0aW9uKG9yZGVyLHJvYWQpLG51bGwsbmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gY2MudjModGhpcy5wYXRoX0FycmF5W29yZGVyXS54LHRoaXMucGF0aF9BcnJheVtvcmRlcl0ueSwwKTtcclxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLndhdGVyX0FycmF5W3RoaXMud2F0ZXJfQXJyYXkubGVuZ3RoLTFdICE9IHZhbHVlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCLnibnliKvmj5LlhaU6XCIsdGhpcy5wYXRoX0FycmF5W29yZGVyXS54LHRoaXMucGF0aF9BcnJheVtvcmRlcl0ueSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlV2F0ZXIodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gIFxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGpnID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBpZihpID09IGxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBudW1iZXIgPSBpIC0gc3RhcnQgKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVBhdGgob3JkZXIsbnVtYmVyLHRydWUscm9hZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGpnID0gb3JkZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIuaDs+S4iuaBr+WjpOaPkuWFpTpcIix0aGlzLnBhdGhfQXJyYXlbb3JkZXJdLngsaSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnNldF9YaV9Tb2lsVHlwZShkaXJlY3Rpb24samcsbmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IFxyXG4gICAgICAgIGVsc2UgaWYoZGlyZWN0aW9uID09IFwiZG93blwiKXtcclxuICAgICAgICAgICAgc3RhcnQgPSByb2FkW29yZGVyXS55O1xyXG4gICAgICAgICAgICBmb3IobGV0IGkgPSBzdGFydDsgaTw9bGVuZ3RoOyBpKyspe1xyXG4gICAgICAgICAgICAgICAgbGV0IG4gPSByb2FkW29yZGVyXS54KnRoaXMubWFwX0FycmF5WzBdLmxlbmd0aCtpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRhcmdldCA9IHRoaXMuYmxvY2tfQXJyYXlbbl0uZ2V0Q29tcG9uZW50KFwiQmxvY2tcIik7XHJcbiAgICAgICAgICAgICAgICBpZihpID09IHN0YXJ0KXtcclxuICAgICAgICAgICAgICAgICAgICBpZihpID09IHN0YXJ0ICYmIGk9PWxlbmd0aCkgdGFyZ2V0LnNldF9YaV9Tb2lsVHlwZSh0aGlzLmdldERpcmVjdGlvbihvcmRlcixyb2FkKSxvcmRlcixuYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHRhcmdldC5zZXRfWGlfU29pbFR5cGUodGhpcy5nZXREaXJlY3Rpb24ob3JkZXIscm9hZCksbnVsbCxuYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBjYy52Myh0aGlzLnBhdGhfQXJyYXlbb3JkZXJdLngsdGhpcy5wYXRoX0FycmF5W29yZGVyXS55LDApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMud2F0ZXJfQXJyYXlbdGhpcy53YXRlcl9BcnJheS5sZW5ndGgtMV0gIT0gdmFsdWUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIueJueWIq+aPkuWFpTpcIix0aGlzLnBhdGhfQXJyYXlbb3JkZXJdLngsdGhpcy5wYXRoX0FycmF5W29yZGVyXS55KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VXYXRlcih2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBqZyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoaSA9PSBsZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbnVtYmVyID0gaSAtIHN0YXJ0IC0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VQYXRoKG9yZGVyLG51bWJlcix0cnVlLHJvYWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBqZyA9IG9yZGVyO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnNldF9YaV9Tb2lsVHlwZShkaXJlY3Rpb24samcsbmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IFxyXG4gICAgfVxyXG5cclxuICAgIC8v5pS55Y+Y5rC05rWB5Zyw5Zu+XHJcbiAgICBjaGFuZ2VXYXRlcih2YWx1ZSl7XHJcbiAgICAgICAgbGV0IGpnID0gdHJ1ZTtcclxuICAgICAgICBpZih0aGlzLndhdGVyX0FycmF5Lmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICBpZih0aGlzLndhdGVyX0FycmF5W3RoaXMud2F0ZXJfQXJyYXkubGVuZ3RoLTFdLnggPT0gdmFsdWUueCAmJiB0aGlzLndhdGVyX0FycmF5W3RoaXMud2F0ZXJfQXJyYXkubGVuZ3RoLTFdLnkgPT0gdmFsdWUueSl7XHJcbiAgICAgICAgICAgICAgICBqZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGpnKSB0aGlzLndhdGVyX0FycmF5LnB1c2godmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8v5oGv5aOk6L+H5ZCO5pS55Y+Y5L+u562R6Lev5b6EXHJcbiAgICBjaGFuZ2VQYXRoKG9yZGVyLG51bWJlcixkaXJlY3Rpb24scm9hZCl7XHJcbiAgXHJcbiAgICAgICAgZm9yKGxldCBpID0gKG9yZGVyKzEpOyBpPHJvYWQubGVuZ3RoOyBpKyspe1xyXG4gICAgICAgICAgICBpZighZGlyZWN0aW9uKXtcclxuICAgICAgICAgICAgICAgIHJvYWRbaV0ueCArPSAobnVtYmVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgcm9hZFtpXS55ICs9IChudW1iZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGRpcmVjdGlvbil7XHJcbiAgICAgICAgICAgIGlmKG51bWJlciA8IDApe1xyXG4gICAgICAgICAgICAgICAgZm9yKGxldCBuPSAtbnVtYmVyOyBuPjA7IG4tLSl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VXYXRlcihjYy52Myh0aGlzLnBhdGhfQXJyYXlbb3JkZXIrMV0ueCx0aGlzLnBhdGhfQXJyYXlbb3JkZXIrMV0ueStuLDApKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIjHnibnmrormlL7lhaU6XCIsdGhpcy5wYXRoX0FycmF5W29yZGVyKzFdLngsdGhpcy5wYXRoX0FycmF5W29yZGVyKzFdLnkrbilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNleyBcclxuICAgICAgICAgICAgICAgIGZvcihsZXQgbj1udW1iZXI7IG4+MDsgbi0tKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVdhdGVyKGNjLnYzKHRoaXMucGF0aF9BcnJheVtvcmRlcisxXS54LHRoaXMucGF0aF9BcnJheVtvcmRlcisxXS55LW4sMCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiMueJueauiuaUvuWFpTpcIix0aGlzLnBhdGhfQXJyYXlbb3JkZXIrMV0ueCx0aGlzLnBhdGhfQXJyYXlbb3JkZXIrMV0ueS1uKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGlmKG51bWJlciA8IDApe1xyXG4gICAgICAgICAgICAgICAgZm9yKGxldCBtPSAtbnVtYmVyOyBtPjA7IG0tLSl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VXYXRlcihjYy52Myh0aGlzLnBhdGhfQXJyYXlbb3JkZXIrMV0ueCttLHRoaXMucGF0aF9BcnJheVtvcmRlcisxXS55LDApKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIjPnibnmrormlL7lhaU6XCIsdGhpcy5wYXRoX0FycmF5W29yZGVyKzFdLngrbSx0aGlzLnBhdGhfQXJyYXlbb3JkZXIrMV0ueSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgZm9yKGxldCBtPW51bWJlcjsgbT4wOyBtLS0pe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlV2F0ZXIoY2MudjModGhpcy5wYXRoX0FycmF5W29yZGVyKzFdLngtbSx0aGlzLnBhdGhfQXJyYXlbb3JkZXIrMV0ueSwwKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCI054m55q6K5pS+5YWlOlwiLHRoaXMucGF0aF9BcnJheVtvcmRlcisxXS54LW0sdGhpcy5wYXRoX0FycmF5W29yZGVyKzFdLnkpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8v6I635Y+W5rSq5bOw5pa55ZCRXHJcbiAgICBnZXREaXJlY3Rpb24ob3JkZXIscm9hZCl7XHJcbiAgICAgICAgdmFyIG5hbWUgPSBcIlwiO1xyXG4gICAgICAgIC8v5YWl5rW35Y+j5q+U6L6D5aSN5p2C5Y2V54us5Yik5patXHJcbiAgICAgICAgaWYob3JkZXIgPT0gMCl7XHJcbiAgICAgICAgICAgIGxldCBuZXh0WCA9IHJvYWRbb3JkZXIrMV0ueCAtIHJvYWRbb3JkZXJdLng7XHJcbiAgICAgICAgICAgIGxldCBuZXh0WSA9IHJvYWRbb3JkZXJdLnkgLSByb2FkW29yZGVyKzFdLnk7XHJcbiAgICAgICAgICAgIC8v5Zyo5bqV6L65XHJcbiAgICAgICAgICAgIGlmKHJvYWRbb3JkZXJdLnkgPT0gdGhpcy5tYXBfQXJyYXlbMF0ubGVuZ3RoLTEpe1xyXG4gICAgICAgICAgICAgICAgaWYobmV4dFggPT0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobmV4dFkgPT0gMSluYW1lID0gXCJ1cFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYobmV4dFkgPT0gLTEpIG5hbWUgPSBcImVyclwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZihuZXh0WCA9PSAxKSBuYW1lID0gXCJ1cF9yaWdodFwiO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBpZihuZXh0WCA9PSAtMSkgbmFtZSA9IFwidXBfbGVmdFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8v5Zyo6aG26L65XHJcbiAgICAgICAgICAgIGVsc2UgaWYocm9hZFtvcmRlcl0ueSA9PSAwKXtcclxuICAgICAgICAgICAgICAgIGlmKG5leHRYID09IDApe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKG5leHRZID09IDEpbmFtZSA9IFwiZXJyXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihuZXh0WSA9PSAtMSkgbmFtZSA9IFwiZG93blwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZihuZXh0WCA9PSAxKSBuYW1lID0gXCJkb3duX3JpZ2h0XCI7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmKG5leHRYID09IC0xKSBuYW1lID0gXCJkb3duX2xlZnRcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL+WcqOW3pui+uVxyXG4gICAgICAgICAgICBlbHNlIGlmKHJvYWRbb3JkZXJdLnggPT0gMCl7XHJcbiAgICAgICAgICAgICAgICBpZihuZXh0WCA9PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICBpZihuZXh0WSA9PSAxKW5hbWUgPSBcInJpZ2h0X3VwXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihuZXh0WSA9PSAtMSkgbmFtZSA9IFwicmlnaHRfZG93blwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZihuZXh0WCA9PSAxKSBuYW1lID0gXCJyaWdodFwiO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBpZihuZXh0WCA9PSAtMSkgbmFtZSA9IFwiZXJyXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy/lnKjlj7PovrlcclxuICAgICAgICAgICAgZWxzZSBpZihyb2FkW29yZGVyXS54ID09IHRoaXMubWFwX0FycmF5Lmxlbmd0aC0xKXtcclxuICAgICAgICAgICAgICAgIGlmKG5leHRYID09IDApe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKG5leHRZID09IDEpbmFtZSA9IFwibGVmdF91cFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYobmV4dFkgPT0gLTEpIG5hbWUgPSBcImxlZnRfZG93blwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZihuZXh0WCA9PSAxKSBuYW1lID0gXCJlcnJcIjtcclxuICAgICAgICAgICAgICAgIGVsc2UgaWYobmV4dFggPT0gLTEpIG5hbWUgPSBcImxlZnRcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvL+S4jeaYr+esrOS4gOatpe+8jOW3sue7j+i1sOi/h+S4gOatpVxyXG4gICAgICAgIGVsc2UgaWYob3JkZXIgPiAwKXtcclxuICAgICAgICAgICAgdmFyIG5leHQgPSAxO1xyXG4gICAgICAgICAgICBpZihvcmRlcisyIDwgcm9hZC5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgaWYocm9hZFtvcmRlcisxXS56ID09IDYpIG5leHQgPSAyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgIFxyXG4gICAgICAgICAgICAvL+eUqOS6juWIpOaWreatpOeCueeahOS4iuS4gOS4queCue+8jOaYr+S4uuS6huWIpOaWreW9k+WJjeaWueWdl+a0quawtOS4g+eCue+8jOS7peWPiuS4i+S4gOS4quenu+WKqOaWueWQke+8jOWIpOaWrea0que7iOeCueaWueWQkVxyXG4gICAgICAgICAgICBsZXQgbmV4dFggPSByb2FkW29yZGVyK25leHRdLnggLSByb2FkW29yZGVyXS54O1xyXG4gICAgICAgICAgICBsZXQgbmV4dFkgPSByb2FkW29yZGVyXS55IC0gcm9hZFtvcmRlcituZXh0XS55XHJcbiAgICAgICAgICAgIGxldCBwcmV2aW91c1ggPSByb2FkW29yZGVyXS54IC0gcm9hZFtvcmRlci0xXS54O1xyXG4gICAgICAgICAgICBsZXQgcHJldmlvdXNZID0gcm9hZFtvcmRlci0xXS55IC0gcm9hZFtvcmRlcl0ueTtcclxuICAgICAgICAgICAgaWYocHJldmlvdXNYID09IDAgJiYgcHJldmlvdXNZID09IDApe1xyXG4gICAgICAgICAgICAgICAgaWYob3JkZXIgPiAxKXtcclxuICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1ggPSByb2FkW29yZGVyXS54IC0gcm9hZFtvcmRlci0yXS54O1xyXG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzWSA9IHJvYWRbb3JkZXItMl0ueSAtIHJvYWRbb3JkZXJdLnk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmKG9yZGVyICsgMSA8IHJvYWQubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1ggPSByb2FkW29yZGVyKzFdLnggLSByb2FkW29yZGVyXS54O1xyXG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzWSA9IHJvYWRbb3JkZXJdLnkgLSByb2FkW29yZGVyKzFdLnk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCLmga/lo6TvvIzkuIrkuIvlnZDmoIflt67ot51cIixwcmV2aW91c1gscHJldmlvdXNZKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihwcmV2aW91c1ggPT0gMCAmJiBwcmV2aW91c1kgPj0gMSl7XHJcbiAgICAgICAgICAgICAgICBpZihuZXh0WCA9PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICBpZihuZXh0WSA9PSAxKW5hbWUgPSBcInVwXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihuZXh0WSA9PSAtMSkgbmFtZSA9IFwiZXJyXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmKG5leHRYID09IDEpIG5hbWUgPSBcInVwX3JpZ2h0XCI7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmKG5leHRYID09IC0xKSBuYW1lID0gXCJ1cF9sZWZ0XCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZihwcmV2aW91c1ggPT0gMCAmJiBwcmV2aW91c1kgPD0gLTEpe1xyXG4gICAgICAgICAgICAgICAgaWYobmV4dFggPT0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobmV4dFkgPT0gMSluYW1lID0gXCJlcnJcIjtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKG5leHRZID09IC0xKSBuYW1lID0gXCJkb3duXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmKG5leHRYID09IDEpIG5hbWUgPSBcImRvd25fcmlnaHRcIjtcclxuICAgICAgICAgICAgICAgIGVsc2UgaWYobmV4dFggPT0gLTEpIG5hbWUgPSBcImRvd25fbGVmdFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYocHJldmlvdXNYID49IDEgJiYgcHJldmlvdXNZID09IDApe1xyXG4gICAgICAgICAgICAgICAgaWYobmV4dFggPT0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobmV4dFkgPT0gMSluYW1lID0gXCJyaWdodF91cFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYobmV4dFkgPT0gLTEpIG5hbWUgPSBcInJpZ2h0X2Rvd25cIjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYobmV4dFggPT0gMSkgbmFtZSA9IFwicmlnaHRcIjtcclxuICAgICAgICAgICAgICAgIGVsc2UgaWYobmV4dFggPT0gLTEpIG5hbWUgPSBcImVyclwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYocHJldmlvdXNYIDw9IC0xICYmIHByZXZpb3VzWSA9PSAwKXtcclxuICAgICAgICAgICAgICAgIGlmKG5leHRYID09IDApe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKG5leHRZID09IDEpbmFtZSA9IFwibGVmdF91cFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYobmV4dFkgPT0gLTEpIG5hbWUgPSBcImxlZnRfZG93blwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZihuZXh0WCA9PSAxKSBuYW1lID0gXCJlcnJcIjtcclxuICAgICAgICAgICAgICAgIGVsc2UgaWYobmV4dFggPT0gLTEpIG5hbWUgPSBcImxlZnRcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWUgO1xyXG4gICAgfVxyXG5cclxuICAgIC8v5qC55o2u5piv5ZCm5YWo6Z2i5bGP77yM5YGa54us56uL6YCC6YWN5pa56Z2iXHJcbiAgICBmaXQoKXtcclxuICAgICAgICB2YXIgamcgPSB0aGlzLnNldEZpdCgpO1xyXG4gICAgICAgIGlmKCFqZyl7XHJcbiAgICAgICAgICAgIHRoaXMuTWFwLnNjYWxlID0gMS4yO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLk1hcC5zY2FsZSA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy/liKTmlq3lhajpnaLlsY9cclxuICAgIGdldFNldFNjcmVlblJlc29sdXRpb25GbGFnICgpIHtcclxuICAgICAgICBsZXQgc2l6ZSA9IGNjLndpblNpemU7XHJcbiAgICAgICAgbGV0IHdpZHRoID0gc2l6ZS53aWR0aDtcclxuICAgICAgICBsZXQgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQ7XHJcbiAgICAgICAgaWYgKChoZWlnaHQgLyB3aWR0aCkgPiAoMTYuMiAvIDkpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICAvL+WIpOaWreWFqOmdouWxj+mAgumFjVxyXG4gICAgc2V0Rml0ICgpIHtcclxuICAgICAgICBsZXQgZmxhZyA9IHRoaXMuZ2V0U2V0U2NyZWVuUmVzb2x1dGlvbkZsYWcoKTtcclxuICAgICAgICBpZiAoZmxhZykge1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmbGFnO1xyXG4gICAgfVxyXG4gICAgLy/ov5Tlm57pppbpobVcclxuICAgIGJhY2tTY2VuZSgpe1xyXG4gICAgICAgIGNjLmRpcmVjdG9yLmxvYWRTY2VuZShcIkxvYWRTY2VuZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvL+W8gOWni+a4uOaIj1xyXG4gICAgc3RhcnRHYW1lKGRhdGEpe1xyXG4gICAgICAgIGZvcihsZXQgaT0wOyBpPHRoaXMuYmxvY2tfQXJyYXkubGVuZ3RoO2krKyl7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tfQXJyYXlbaV0uZ2V0Q2hpbGRCeU5hbWUoXCJ0aXBXaW5cIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tfQXJyYXlbaV0uZ2V0Q2hpbGRCeU5hbWUoXCJ0aXBMb3NlXCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVuc2NoZWR1bGUodGhpcy51cGRhdGVDb3VudERvd25UaW1lKTtcclxuICAgICAgICB2YXIgbm93ID0gY2MuZnguR2FtZVRvb2wuZ2V0VGltZSgpO1xyXG4gICAgICAgIHZhciBmaW5pc2hpID0gbm93IC0gdGhpcy5maW5pc2hpVGltZTtcclxuICAgICAgICB2YXIgdG90YWxUaW1lID0gbm93IC0gdGhpcy5zdGFydFRpbWU7XHJcbiAgICAgICAgdGhpcy5zY29yZVRpbWUgPSB0aGlzLndhdGVyVGltZTtcclxuICAgICAgICBpZih0aGlzLndhdGVyVGltZSA8PSAwLjUpIGZpbmlzaGkgPSAtMTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcInN1Ym1pdFRpbWU6XCIsZmluaXNoaSx0aGlzLmZpbmlzaGlUaW1lKTtcclxuICAgICAgICBjYy5meC5HYW1lQ29uZmlnLkNMSUNLX1NFVChcInN1Ym1pdFRpbWVcIixmaW5pc2hpKTtcclxuICAgICAgICBpZihmaW5pc2hpID09IC0xKSBcclxuICAgICAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5DTElDS19TRVQoXCJkdXJhdGlvblwiLGNjLmZ4LkdhbWVDb25maWcuVElNRV9JTkZPLndhdGVyVGltZVtjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8ubGV2ZWxdKTtcclxuICAgICAgICBlbHNlIFxyXG4gICAgICAgICAgICBjYy5meC5HYW1lQ29uZmlnLkNMSUNLX1NFVChcImR1cmF0aW9uXCIsdG90YWxUaW1lKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5DTElDS19TRVQoXCJ1c2VkU3RlcHNcIixkYXRhLmxlbmd0aCk7XHJcbiAgICAgICAgdGhpcy5zZXRNYXAoZGF0YSk7XHJcbiAgXHJcbiAgICAgICAgdmFyIGFyciA9IHRoaXMuY2hhbmdlU3RlcChkYXRhKTtcclxuICAgICAgICBjYy5meC5HYW1lQ29uZmlnLkNMSUNLX1NFVChcInN0ZXBMaXN0XCIsYXJyKTtcclxuICAgIH1cclxuXHJcbiAgICAvL+eUqOS6juWfi+eCueiusOW9lVxyXG4gICAgY2hhbmdlU3RlcChkYXRhKXtcclxuICAgICAgICB2YXIgYXJyID0gW107XHJcbiAgICAgICAgaWYoZGF0YS5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgZm9yKGxldCBpPTA7IGk8ZGF0YS5sZW5ndGg7IGkrKyl7XHJcbiAgICAgICAgICAgICAgICBpZihkYXRhW2ldID09IFwidXBcIikgYXJyW2ldID0gXCJVXCI7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmKGRhdGFbaV0gPT0gXCJkb3duXCIpIGFycltpXSA9IFwiRFwiO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBpZihkYXRhW2ldID09IFwibGVmdFwiKSBhcnJbaV0gPSBcIkxcIjtcclxuICAgICAgICAgICAgICAgIGVsc2UgaWYoZGF0YVtpXSA9PSBcInJpZ2h0XCIpIGFycltpXSA9IFwiUlwiO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBpZihkYXRhW2ldID09IFwic29pbFwiKSBhcnJbaV0gPSBcIlhcIjtcclxuICAgICAgICAgICAgICAgIGVsc2UgaWYoZGF0YVtpXSA9PSBcInJlaW5mb3JjZVwiKSBhcnJbaV0gPSBcIkZcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXJyO1xyXG4gICAgfVxyXG4gICAgLy/mtKrls7DlgJLorqHml7bvvIzorqHml7blmahcclxuICAgIHVwZGF0ZVdhdGVyVGltZSgpe1xyXG4gICAgICAgIGlmICh0aGlzLndhdGVyVGltZSA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy53YXRlclRpbWUgLT0gMTtcclxuICAgICAgICAgICAgdGhpcy5Db3VudGRvd24uc3RyaW5nID0gIGNjLmZ4LkdhbWVUb29sLmdldFRpbWVNYXJnaW4odGhpcy53YXRlclRpbWUpO1xyXG4gICAgICAgICAgICBpZih0aGlzLndhdGVyVGltZSA8PSAwKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudW5zY2hlZHVsZSh0aGlzLnVwZGF0ZVdhdGVyVGltZSk7XHJcbiAgICAgICAgICAgICAgICBpZighdGhpcy5wbGFuX292ZXIpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2F0ZXJUaW1lID0gMDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYW5fb3ZlciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMud2F0ZXJfQXJyYXkubGVuZ3RoID09IDApe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5lbWl0KGNjLmZ4Lk1lc3NhZ2Uuc2hvd1Jlc3VsdCxcImxvc2VcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLmVtaXQoY2MuZnguTWVzc2FnZS5zZXREYXRhLGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLm1pbl9UaW1lID0gdGhpcy53YXRlclRpbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJ1bldhdGVyKDApOyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSAgIFxyXG4gICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy/lpoLmnpzmmK/lgJLorqHml7Yg6LCD55So5q2k5pa55rOVXHJcbiAgICB1cGRhdGVDb3VudERvd25UaW1lICgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb3VudFRpbWUgPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY291bnRUaW1lIC09IDE7XHJcbiAgICAgICAgICAgIGNjLmZ4LkdhbWVDb25maWcuVElNRV9JTkZPLnRvdGFsVGltZSA9IHRoaXMuY291bnRUaW1lO1xyXG4gICAgICAgICAgICB0aGlzLlRpbWUuc3RyaW5nID0gIGNjLmZ4LkdhbWVUb29sLmdldFRpbWVNYXJnaW4odGhpcy5jb3VudFRpbWUpO1xyXG4gICAgICAgICAgICBpZih0aGlzLmNvdW50VGltZSA8IDUpe1xyXG4gICAgICAgICAgICAgICAgbGV0IG92ZXIgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJPdmVyXCIpO1xyXG4gICAgICAgICAgICAgICAgY2MudHdlZW4ob3ZlcilcclxuICAgICAgICAgICAgICAgIC50bygwLjIse29wYWNpdHk6MjU1fSlcclxuICAgICAgICAgICAgICAgIC5kZWxheSgwLjEpXHJcbiAgICAgICAgICAgICAgICAudG8oMC4yLHtvcGFjaXR5OjB9KVxyXG4gICAgICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYodGhpcy5jb3VudFRpbWUgPD0gMCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdW50VGltZSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGEoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51bnNjaGVkdWxlKHRoaXMudXBkYXRlQ291bnREb3duVGltZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdhbWVPdmVyKCk7ICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy/kuIrkvKDmr4/mrKHmk43kvZzmlbDmja5cclxuICAgIHNldERhdGEoc3VjY2Vzcyl7XHJcbiAgICAgICAgLy/orr7nva7ln4vngrnmlbDmja5cclxuICAgICAgICBjYy5meC5HYW1lQ29uZmlnLkNMSUNLX1NFVChcIm1hcElkXCIsY2MuZnguR2FtZUNvbmZpZy5MRVZFTF9JTkZPW2NjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5sZXZlbF1bdGhpcy5jdXN0b21dLmlkKTtcclxuICAgICAgICBjYy5meC5HYW1lQ29uZmlnLkNMSUNLX1NFVChcImRpZmZpY3VsdHlcIixjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8ubGV2ZWwpO1xyXG4gICAgICAgIGNjLmZ4LkdhbWVDb25maWcuQ0xJQ0tfU0VUKFwib3B0aW1pemVkU3RlcHNcIixjYy5meC5HYW1lQ29uZmlnLkxFVkVMX0lORk9bY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmxldmVsXVt0aGlzLmN1c3RvbV0ubWluX3N0ZXBzKTtcclxuICAgICAgICBjYy5meC5HYW1lQ29uZmlnLkNMSUNLX1NFVChcInJvdW5kXCIsY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLnJvdW5kKTtcclxuICAgICAgICBjYy5meC5HYW1lQ29uZmlnLkNMSUNLX1NFVChcInRpbWVyXCIsY2MuZnguR2FtZUNvbmZpZy5USU1FX0lORk8udG90YWxUaW1lKTtcclxuICAgICAgICBjYy5meC5HYW1lQ29uZmlnLkNMSUNLX1NFVChcImN1bXVsYXRpdmVTY29yZVwiLGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5zY29yZSk7XHJcbiAgICAgICAgaWYoc3VjY2VzcyAhPSBudWxsKXtcclxuICAgICAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5DTElDS19TRVQoXCJzdWNjZXNzXCIsc3VjY2Vzcyk7XHJcbiAgICAgICAgICAgIGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5mZW4gPSB0aGlzLmdldFNjb3JlKCk7XHJcbiAgICAgICAgICAgIGlmKCFzdWNjZXNzKSBjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8uZmVuID0gMDtcclxuICAgICAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5DTElDS19TRVQoXCJnZXRTY29yZVwiLGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5mZW4pO1xyXG4gICAgICAgICAgICBjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8uc2NvcmUgKz0gY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmZlbjtcclxuICAgICAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5DTElDS19TRVQoXCJjdW11bGF0aXZlU2NvcmVcIixjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8uc2NvcmUpO1xyXG4gICAgICAgICAgICBpZih0aGlzLmNvdW50VGltZSAhPSAwKWNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5zdWNjZXNzTGlzdC5wdXNoKHN1Y2Nlc3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYy5meC5HYW1lVG9vbC5zZXRHYW1lRGF0YSgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG4gICAgLy/orqHnrpflvpfliIZcclxuICAgIGdldFNjb3JlKCl7XHJcbiAgICAgICAgLy/mnIDlsI/mraXmlbBcclxuICAgICAgICBsZXQgbWluID0gY2MuZnguR2FtZUNvbmZpZy5MRVZFTF9JTkZPW2NjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5sZXZlbF1bdGhpcy5jdXN0b21dLm1pbl9zdGVwcztcclxuICAgICAgICAvL+WunumZheS9v+eUqOatpeaVsFxyXG4gICAgICAgIGxldCBub3cgPSB0aGlzLnBhdGhfQXJyYXkubGVuZ3RoLTE7XHJcbiAgICAgICAgaWYobm93IDw9MCkgbm93ID0gMDtcclxuICAgICAgICB2YXIgeCA9ICgyLjUqbWluIC0gbm93KSAvIG1pbjtcclxuICAgICAgICBsZXQgc2NvcmUgPSBNYXRoLnBvdyhtaW4seCkgKiogMC41O1xyXG4gICAgICAgIHNjb3JlID0gc2NvcmUgKiAodGhpcy5zY29yZVRpbWUgKyAxMCkqMTAwO1xyXG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHNjb3JlKTtcclxuICAgIH1cclxuXHJcbiAgICAvL+S4iuS8oOaOkuihjOamnOaVsOaNrlxyXG4gICAgZ2FtZU92ZXIoKXtcclxuICAgICAgICB2YXIgcmF0ZSA9IDA7XHJcbiAgICAgICAgdmFyIHN1Y2Nlc3NMaXN0ID0gY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLnN1Y2Nlc3NMaXN0O1xyXG4gICAgICAgIGlmKHN1Y2Nlc3NMaXN0Lmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICB2YXIgc3VjY2VzcyA9IDA7XHJcbiAgICAgICAgICAgIGZvcihsZXQgaT0wOyBpPHN1Y2Nlc3NMaXN0Lmxlbmd0aDsgaSsrKXtcclxuICAgICAgICAgICAgICAgIGlmKHN1Y2Nlc3NMaXN0W2ldID09IHRydWUpIHN1Y2Nlc3MgKz0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByYXRlID0gc3VjY2Vzcy9zdWNjZXNzTGlzdC5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJhdGUgPSBNYXRoLmZsb29yKHJhdGUgKiAxMDAwKS8xMDtcclxuICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgc2NvcmU6IGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5zY29yZSxcclxuICAgICAgICAgICAgcmF0ZTogcmF0ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYy5meC5HYW1lVG9vbC5zZXRSYW5rKGRhdGEpO1xyXG4gICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkdhbWVPdmVyXCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiR2FtZU92ZXJcIikub3BhY2l0eSA9IDA7XHJcbiAgICAgICAgY2MudHdlZW4odGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiR2FtZU92ZXJcIikpXHJcbiAgICAgICAgLnRvKDAuNCx7b3BhY2l0eToyNTV9KVxyXG4gICAgICAgIC5kZWxheSgxKVxyXG4gICAgICAgIC50bygwLjQse29wYWNpdHk6NTB9KVxyXG4gICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgICBjYy5kaXJlY3Rvci5sb2FkU2NlbmUoXCJPdmVyU2NlbmVcIik7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuc3RhcnQoKVxyXG4gICAgfVxyXG4gICAgLy/lsZXnpLrnu5PmnpxcclxuICAgIHNob3dSZXN1bHQoZGF0YSl7XHJcbiAgICAgICAgaWYoZGF0YSA9PSBcImxvc2VcIil7XHJcbiAgICAgICAgICAgIGNjLmZ4LkF1ZGlvTWFuYWdlci5faW5zdGFuY2UucGxheUVmZmVjdChcImxvc2VcIixudWxsKTtcclxuICAgICAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLm1pbl9UaW1lID0gLTE7XHJcbiAgICAgICAgfSBcclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICBjYy5meC5BdWRpb01hbmFnZXIuX2luc3RhbmNlLnBsYXlFZmZlY3QoXCJ3aW5cIixudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiV2luZG93XCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiV2luZG93XCIpLmdldENvbXBvbmVudChcIldpbmRvd1wiKS5pbml0KGRhdGEpO1xyXG5cclxuICAgIH1cclxuICAgIC8v6K6w5b2V5Y+N5bqU5pe26ZW/77yM5Lul5Y+K5YGa5q2l6aqk5o+Q56S6XHJcbiAgICBjbGlja1N1bihkYXRhKXtcclxuICAgICAgICAvL+WmguaenOayoeacieiusOW9lei/hyDlm57lkIjlvIDlp4vliLDmk43kvZzlj43lupTml7bplb/vvIzliJnnrKzkuIDmrKHorrDlvZXvvIwg5ZCO6Z2i5LiN6K6w5b2VXHJcbiAgICAgICAgaWYoY2MuZnguR2FtZUNvbmZpZy5DTElDS19EQVRBLnN0YXJ0VGltZSA9PSAwKXtcclxuICAgICAgICAgICAgdGhpcy5maW5pc2hpVGltZSA9IGNjLmZ4LkdhbWVUb29sLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgdmFyIG5vdyAgPSB0aGlzLmZpbmlzaGlUaW1lIC0gdGhpcy5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwic3RhcnRUaW1lOlwiLG5vdyx0aGlzLnN0YXJ0VGltZSk7XHJcbiAgICAgICAgICAgIGNjLmZ4LkdhbWVDb25maWcuQ0xJQ0tfU0VUKFwic3RhcnRUaW1lXCIsbm93KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmxldmVsID4gMykgcmV0dXJuO1xyXG4gICAgICAgIC8v5q2l6aqk5o+Q56S6XHJcbiAgICAgICAgdmFyIG5vd1BvcyA9IHRoaXMucGF0aF9BcnJheVswXTtcclxuICAgICAgICBpZih0aGlzLnRpcF9BcnJheS5sZW5ndGggIT0gMCl7XHJcbiAgICAgICAgICAgIGlmKHRoaXMudGlwX0FycmF5W3RoaXMudGlwX0FycmF5Lmxlbmd0aC0xXSA9PSBudWxsKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudGlwX0FycmF5LnB1c2gobnVsbCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbm93UG9zID0gdGhpcy50aXBfQXJyYXlbdGhpcy50aXBfQXJyYXkubGVuZ3RoLTFdW3RoaXMudGlwX0FycmF5W3RoaXMudGlwX0FycmF5Lmxlbmd0aC0xXS5sZW5ndGgtMV07XHJcbiAgICAgICAgICAgIGlmKG5vd1Bvcyl7XHJcbiAgICAgICAgICAgICAgICBsZXQgbiA9IG5vd1Bvcy54KnRoaXMubWFwX0FycmF5WzBdLmxlbmd0aCtub3dQb3MueTtcclxuICAgICAgICAgICAgICAgIGxldCB0YXJnZXROb2RlID0gdGhpcy5ibG9ja19BcnJheVtuXTtcclxuICAgICAgICAgICAgICAgIGlmKHRhcmdldE5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ0aXBMb3NlXCIpLmFjdGl2ZSA9PSB0cnVlKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRpcF9BcnJheS5wdXNoKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBcclxuXHJcbiAgICAgICAgaWYoZGF0YSA9PSBcInVwXCIpe1xyXG4gICAgICAgICAgICBsZXQgbiA9IGNjLnYyKG5vd1Bvcy54LG5vd1Bvcy55LTEpO1xyXG4gICAgICAgICAgICB0aGlzLnRpcENhbihuLGRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKGRhdGEgPT0gXCJkb3duXCIpe1xyXG4gICAgICAgICAgICBsZXQgbiA9IGNjLnYyKG5vd1Bvcy54LG5vd1Bvcy55KzEpO1xyXG4gICAgICAgICAgICB0aGlzLnRpcENhbihuLGRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKGRhdGEgPT0gXCJsZWZ0XCIpe1xyXG4gICAgICAgICAgICBsZXQgbiA9IGNjLnYyKG5vd1Bvcy54LTEsbm93UG9zLnkpO1xyXG4gICAgICAgICAgICB0aGlzLnRpcENhbihuLGRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKGRhdGEgPT0gXCJyaWdodFwiKXtcclxuICAgICAgICAgICAgbGV0IG4gPSBjYy52Mihub3dQb3MueCsxLG5vd1Bvcy55KTtcclxuICAgICAgICAgICAgdGhpcy50aXBDYW4obixkYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZihkYXRhID09IFwicmVpbmZvcmNlXCIpe1xyXG4gICAgICAgICAgICBsZXQgbiA9IGNjLnYzKG5vd1Bvcy54LG5vd1Bvcy55LDIpO1xyXG4gICAgICAgICAgICB0aGlzLnRpcF9BcnJheS5wdXNoKFtuXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYoZGF0YSA9PSBcInNvaWxcIil7XHJcbiAgICAgICAgICAgIGxldCBuID0gY2MudjMobm93UG9zLngsbm93UG9zLnksMyk7XHJcbiAgICAgICAgICAgIHRoaXMudGlwX0FycmF5LnB1c2goW25dKTtcclxuICAgICAgICB9XHJcbiAgICBcclxuICAgIH1cclxuICAgIC8v5o+Q56S65piv5ZCm6ZSZ6K+vXHJcbiAgICB0aXBDYW4ocG9zLGRhdGEpe1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8v5YWI5Yik5pat5piv5ZCm5Ye66L6555WMXHJcbiAgICAgICAgaWYocG9zLnggPDAgfHwgcG9zLnggPnRoaXMubWFwX0FycmF5Lmxlbmd0aC0xIHx8IHBvcy55IDwwIHx8IHBvcy55ID4gdGhpcy5tYXBfQXJyYXlbMF0ubGVuZ3RoLTEgKXtcclxuICAgICAgICAgICAgdGhpcy50aXBfQXJyYXkucHVzaChudWxsKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gICBcclxuICAgICAgICBsZXQgbiA9IHBvcy54KnRoaXMubWFwX0FycmF5WzBdLmxlbmd0aCtwb3MueTtcclxuICAgICAgICBsZXQgdGFyZ2V0ID0gdGhpcy5ibG9ja19BcnJheVtuXS5nZXRDb21wb25lbnQoXCJCbG9ja1wiKTtcclxuICAgICAgICB0YXJnZXQubm9kZS5nZXRDaGlsZEJ5TmFtZShcInRpcFdpblwiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIC8vIHRhcmdldC5ub2RlLmdldENoaWxkQnlOYW1lKFwidGlwV2luXCIpLm9wYWNpdHkgPSAyNTU7XHJcbiAgICAgICAgLy8gdGFyZ2V0Lm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ0aXBMb3NlXCIpLm9wYWNpdHkgPSAyNTU7XHJcblxyXG4gICAgICAgIC8v6YeN5aSN6Lev5Zue5aS06Lev77yM5oiW6ICF5bGx5bOwXHJcbiAgICAgICAgaWYodGFyZ2V0LnJlcGVhdFJvYWQoZmFsc2UsbnVsbCkgPT0gdHJ1ZSB8fCB0YXJnZXQuYmxvY2tfVHlwZSA9PSAzKXtcclxuICAgICAgICAgICAgdGFyZ2V0Lm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ0aXBMb3NlXCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRhcmdldC5ub2RlLmdldENoaWxkQnlOYW1lKFwidGlwV2luXCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL+a5v+WcsCDkuIrkuIDmraXlpoLmnpzmsqHnlKjmga/lo6TmiJbogIXliqDlm7pcclxuICAgICAgICBlbHNlIGlmKHRhcmdldC5ibG9ja19UeXBlID09IDIpe1xyXG4gICAgICAgICAgICBpZih0aGlzLnRpcF9BcnJheS5sZW5ndGggPiAxKXtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMudGlwX0FycmF5W3RoaXMudGlwX0FycmF5Lmxlbmd0aC0xXVswXS56ID09IDApe1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5ub2RlLmdldENoaWxkQnlOYW1lKFwidGlwTG9zZVwiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5ub2RlLmdldENoaWxkQnlOYW1lKFwidGlwV2luXCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih0aGlzLnRpcF9BcnJheS5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgaWYodGhpcy50aXBfQXJyYXlbdGhpcy50aXBfQXJyYXkubGVuZ3RoLTFdWzBdLnogPT0gMyl7XHJcbiAgICAgICAgICAgICAgICBpZihkYXRhID09IFwidXBcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyciA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaT1wb3MueTsgaSA+PTA7aS0tKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJsb2NrID0gdGhpcy5ibG9ja19BcnJheVtwb3MueCp0aGlzLm1hcF9BcnJheVswXS5sZW5ndGgraV0uZ2V0Q29tcG9uZW50KFwiQmxvY2tcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGJsb2NrLmJsb2NrX1R5cGUgPT0gMyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gLTEwMDAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay5ub2RlLmdldENoaWxkQnlOYW1lKFwidGlwV2luXCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaChjYy52Myhwb3MueCxpLDApKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBibG9jay5ibG9ja19UeXBlID09IDQpIGkgPSAtMTAwMDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aXBfQXJyYXkucHVzaChhcnIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZihkYXRhID09IFwiZG93blwiKXtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYXJyID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpPXBvcy55OyBpPHRoaXMubWFwX0FycmF5WzBdLmxlbmd0aDtpKyspe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYmxvY2sgPSB0aGlzLmJsb2NrX0FycmF5W3Bvcy54KnRoaXMubWFwX0FycmF5WzBdLmxlbmd0aCtpXS5nZXRDb21wb25lbnQoXCJCbG9ja1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoYmxvY2suYmxvY2tfVHlwZSA9PSAzKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAxMDAwMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2subm9kZS5nZXRDaGlsZEJ5TmFtZShcInRpcFdpblwiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2goY2MudjMocG9zLngsaSwwKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggYmxvY2suYmxvY2tfVHlwZSA9PSA0KSBpID0gMTAwMDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aXBfQXJyYXkucHVzaChhcnIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZihkYXRhID09IFwicmlnaHRcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyciA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaT1wb3MueDsgaTx0aGlzLm1hcF9BcnJheS5sZW5ndGg7aSsrKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJsb2NrID0gdGhpcy5ibG9ja19BcnJheVtpKnRoaXMubWFwX0FycmF5WzBdLmxlbmd0aCtwb3MueV0uZ2V0Q29tcG9uZW50KFwiQmxvY2tcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGJsb2NrLmJsb2NrX1R5cGUgPT0gMyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gMTAwMDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ0aXBXaW5cIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKGNjLnYzKGkscG9zLnksMCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIGJsb2NrLmJsb2NrX1R5cGUgPT0gNCkgaSA9IDEwMDAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGlwX0FycmF5LnB1c2goYXJyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYoZGF0YSA9PSBcImxlZnRcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyciA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaT1wb3MueDsgaT49MCA7aS0tKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJsb2NrID0gdGhpcy5ibG9ja19BcnJheVtpKnRoaXMubWFwX0FycmF5WzBdLmxlbmd0aCtwb3MueV0uZ2V0Q29tcG9uZW50KFwiQmxvY2tcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGJsb2NrLmJsb2NrX1R5cGUgPT0gMyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gLTEwMDAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay5ub2RlLmdldENoaWxkQnlOYW1lKFwidGlwV2luXCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaChjYy52MyhpLHBvcy55LDApKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBibG9jay5ibG9ja19UeXBlID09IDQpIGkgPSAtMTAwMDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aXBfQXJyYXkucHVzaChhcnIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBsZXQgcG9zSmcgPSBjYy52Myhwb3MueCxwb3MueSwwKTtcclxuICAgICAgICAgICAgICAgIGlmKGRhdGEgPT0gXCJyZWluZm9yY2VcIikgcG9zLnogPSAyO1xyXG4gICAgICAgICAgICAgICAgaWYoZGF0YSA9PSBcInNvaWxcIikgcG9zLnogPSAzOyBcclxuICAgICAgICAgICAgICAgIHRoaXMudGlwX0FycmF5LnB1c2goW3Bvc0pnXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy50aXBfQXJyYXkpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcG9zSmcgPSBjYy52Myhwb3MueCxwb3MueSwwKTtcclxuICAgICAgICBpZihkYXRhID09IFwicmVpbmZvcmNlXCIpIHBvcy56ID0gMjtcclxuICAgICAgICBpZihkYXRhID09IFwic29pbFwiKSBwb3MueiA9IDM7IFxyXG4gICAgICAgIHRoaXMudGlwX0FycmF5LnB1c2goW3Bvc0pnXSk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy50aXBfQXJyYXkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8v56e76Zmk5o+Q56S6XHJcbiAgICByZW1vdmVUaXAoZGF0YSl7XHJcbiAgICAgICAgaWYoY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmxldmVsID4gMykgcmV0dXJuO1xyXG4gICAgICAgIC8v5YiG5Li65pKk5Zue5LiA5q2lIOWSjOWFqOmDqOa4heepulxyXG4gICAgICAgIGlmKHRoaXMudGlwX0FycmF5Lmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICBpZihkYXRhID09IFwiYmFja1wiKXtcclxuICAgICAgICAgICAgICAgIGxldCB0YXJnZXQgPSB0aGlzLnRpcF9BcnJheVt0aGlzLnRpcF9BcnJheS5sZW5ndGgtMV07XHJcbiAgICAgICAgICAgICAgICBpZih0YXJnZXQgPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aXBfQXJyYXkucG9wKCk7XHJcbiAgICAgICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRpcF9BcnJheS5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGk9MDsgaTx0YXJnZXQubGVuZ3RoO2krKyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRhcmdldFtpXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggdGFyZ2V0WzBdLnogPT0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG4gPSB0YXJnZXRbaV0ueCp0aGlzLm1hcF9BcnJheVswXS5sZW5ndGgrdGFyZ2V0W2ldLnk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5vZGUgPSB0aGlzLmJsb2NrX0FycmF5W25dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ0aXBXaW5cIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5nZXRDaGlsZEJ5TmFtZShcInRpcExvc2VcIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICBlbHNlIGlmKGRhdGEgPT0gXCJyZW1vdmVcIil7XHJcbiAgICAgICAgICAgICAgICBmb3IobGV0IGogPTA7IGo8dGhpcy50aXBfQXJyYXkubGVuZ3RoOyBqKyspe1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0YXJnZXQgPSB0aGlzLnRpcF9BcnJheVtqXTtcclxuICAgICAgICAgICAgICAgICAgICBpZih0YXJnZXQgIT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaT0wOyBpPHRhcmdldC5sZW5ndGg7aSsrKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRhcmdldFtpXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG4gPSB0YXJnZXRbaV0ueCp0aGlzLm1hcF9BcnJheVswXS5sZW5ndGgrdGFyZ2V0W2ldLnk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5vZGUgPSB0aGlzLmJsb2NrX0FycmF5W25dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ0aXBXaW5cIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5nZXRDaGlsZEJ5TmFtZShcInRpcExvc2VcIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRpcF9BcnJheSA9IFtdO1xyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvL+iOt+WPluW8leWvvOWQjeWtl1xyXG4gICAgZ2V0R3VpZGVOYW1lKCl7XHJcbiAgICAgICAgdmFyIG5hbWUgPSBcIm9uZVwiO1xyXG4gICAgICAgIHN3aXRjaCh0aGlzLnN0ZXApe1xyXG4gICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICBuYW1lID0gXCJvbmVcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnRuQ2xpY2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmdDbGljayA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgbmFtZSA9IFwidHdvXCI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ0bkNsaWNrID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJnQ2xpY2sgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgIG5hbWUgPSBcInRocmVlXCI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ0bkNsaWNrID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJnQ2xpY2sgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgICAgIG5hbWUgPSBcImZvdXJcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnRuQ2xpY2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmdDbGljayA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSA1OlxyXG4gICAgICAgICAgICAgICAgbmFtZSA9IFwiZml2ZVwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idG5DbGljayA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJnQ2xpY2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDY6XHJcbiAgICAgICAgICAgICAgICBuYW1lID0gXCJzaXhcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnRuQ2xpY2sgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iZ0NsaWNrID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSA3OlxyXG4gICAgICAgICAgICAgICAgbmFtZSA9IFwic2V2ZW5cIjtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnRuQ2xpY2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmdDbGljayA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSA4OlxyXG4gICAgICAgICAgICAgICAgbmFtZSA9IFwiZWlnaHRcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnRuQ2xpY2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmdDbGljayA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSA5OlxyXG4gICAgICAgICAgICAgICAgbmFtZSA9IFwibmluZVwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idG5DbGljayA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iZ0NsaWNrID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDEwOlxyXG4gICAgICAgICAgICAgICAgbmFtZSA9IFwidGVuXCI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ0bkNsaWNrID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmdDbGljayA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTE6XHJcbiAgICAgICAgICAgICAgICBuYW1lID0gXCJlbGV2ZW5cIjtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnRuQ2xpY2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmdDbGljayA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxMjpcclxuICAgICAgICAgICAgICAgIG5hbWUgPSBcInR3ZWx2ZVwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idG5DbGljayA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJnQ2xpY2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDEzOlxyXG4gICAgICAgICAgICAgICAgbmFtZSA9IFwidGhpcnRlZW5cIjtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnRuQ2xpY2sgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iZ0NsaWNrID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxNDpcclxuICAgICAgICAgICAgICAgIG5hbWUgPSBcImZvdXJ0ZWVuXCI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ0bkNsaWNrID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmdDbGljayA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTU6XHJcbiAgICAgICAgICAgICAgICBuYW1lID0gXCJmaXZldGVlblwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idG5DbGljayA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJnQ2xpY2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE2OlxyXG4gICAgICAgICAgICAgICAgbmFtZSA9IFwic2l4dGVlblwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idG5DbGljayA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJnQ2xpY2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE3OlxyXG4gICAgICAgICAgICAgICAgbmFtZSA9IFwibGFzdFwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idG5DbGljayA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJnQ2xpY2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICB9XHJcbiAgICAvL+W8leWvvOS4i+S4gOatpVxyXG4gICAgZ3VpZGVOZXh0KCl7XHJcbiAgICAgICAgLy/mr4/mrKHlhYjmiormiYDmnInnmoRcclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnN0ZXAsdGhpcy5HdWlkZS5jaGlsZHJlbi5sZW5ndGgpO1xyXG4gICAgICAgIGlmKHRoaXMuc3RlcCArIDEgID09ICB0aGlzLkd1aWRlLmNoaWxkcmVuLmxlbmd0aCl7XHJcbiAgICAgICAgICAgIGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5ndWlkZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvLyBjYy5kaXJlY3Rvci5sb2FkU2NlbmUoXCJHYW1lU2NlbmVcIik7XHJcbiAgICAgICAgICAgIGxldCBuYW1lID0gY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmdhbWVJZCArIFwiX2d1aWRlXCI7XHJcbiAgICAgICAgICAgIGNjLmZ4LlN0b3JhZ2VNZXNzYWdlLnNldFN0b3JhZ2UobmFtZSxjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8uZ3VpZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLnN0ZXAgPiAwKSB0aGlzLkd1aWRlLmNoaWxkcmVuW3RoaXMuc3RlcC0xXS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnN0ZXAgKz0gMTtcclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMuZ2V0R3VpZGVOYW1lKCk7XHJcbiAgIFxyXG4gICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLkd1aWRlLmdldENoaWxkQnlOYW1lKG5hbWUpO1xyXG4gICAgICAgIHRhcmdldC5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIGxldCBzaXplID0gY2Mud2luU2l6ZTtcclxuXHJcbiAgICAgICAgaWYoc2l6ZS5oZWlnaHQgPiAxMzM0KXtcclxuICAgICAgICAgICAgbGV0IGhlaWdodCA9IChzaXplLmhlaWdodCAtIDEzMzQpLzI7XHJcbiAgICAgICAgICAgIHRhcmdldC5nZXRDaGlsZEJ5TmFtZShcInNwXCIpLmhlaWdodCArPSBoZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uRW5hYmxlICgpIHtcclxuICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLm9uKGNjLmZ4Lk1lc3NhZ2UuY29udHJvbCwgdGhpcy5jbGlja1N1biwgdGhpcyk7XHJcbiAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5vbihjYy5meC5NZXNzYWdlLm5leHQsIHRoaXMucnVuUm9hZCwgdGhpcyk7XHJcbiAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5vbihjYy5meC5NZXNzYWdlLm5leHRXYXRlciwgdGhpcy5ydW5XYXRlciwgdGhpcyk7XHJcbiAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5vbihjYy5meC5NZXNzYWdlLnN0YXJ0R2FtZSwgdGhpcy5zdGFydEdhbWUsIHRoaXMpO1xyXG4gICAgICAgIGNjLmZ4Lk5vdGlmaWNhdGlvbnMub24oY2MuZnguTWVzc2FnZS5jaGFuZ2VQYXRoLCB0aGlzLmNoYW5nZVBhdGgsIHRoaXMpO1xyXG4gICAgICAgIGNjLmZ4Lk5vdGlmaWNhdGlvbnMub24oY2MuZnguTWVzc2FnZS5zZXREYXRhLCB0aGlzLnNldERhdGEsIHRoaXMpO1xyXG4gICAgICAgIGNjLmZ4Lk5vdGlmaWNhdGlvbnMub24oY2MuZnguTWVzc2FnZS5ndWlkZU5leHQsIHRoaXMuZ3VpZGVOZXh0LCB0aGlzKTtcclxuICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLm9uKGNjLmZ4Lk1lc3NhZ2Uuc2hvd1Jlc3VsdCwgdGhpcy5zaG93UmVzdWx0LCB0aGlzKTtcclxuICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLm9uKGNjLmZ4Lk1lc3NhZ2UucmVtb3ZlVGlwLCB0aGlzLnJlbW92ZVRpcCwgdGhpcyk7XHJcbiAgICB9XHJcbiAgICBvbkRpc2FibGUgKCkge1xyXG4gICAgICAgIGNjLmZ4Lk5vdGlmaWNhdGlvbnMub2ZmKGNjLmZ4Lk1lc3NhZ2UuY29udHJvbCwgdGhpcy5jbGlja1N1bik7XHJcbiAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5vZmYoY2MuZnguTWVzc2FnZS5uZXh0LCB0aGlzLnJ1blJvYWQpO1xyXG4gICAgICAgIGNjLmZ4Lk5vdGlmaWNhdGlvbnMub2ZmKGNjLmZ4Lk1lc3NhZ2UubmV4dFdhdGVyLCB0aGlzLnJ1bldhdGVyKTtcclxuICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLm9mZihjYy5meC5NZXNzYWdlLnN0YXJ0R2FtZSwgdGhpcy5zdGFydEdhbWUpO1xyXG4gICAgICAgIGNjLmZ4Lk5vdGlmaWNhdGlvbnMub2ZmKGNjLmZ4Lk1lc3NhZ2UuY2hhbmdlUGF0aCwgdGhpcy5jaGFuZ2VQYXRoKTtcclxuICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLm9mZihjYy5meC5NZXNzYWdlLnNldERhdGEsIHRoaXMuc2V0RGF0YSk7XHJcbiAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5vZmYoY2MuZnguTWVzc2FnZS5ndWlkZU5leHQsIHRoaXMuZ3VpZGVOZXh0KTtcclxuICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLm9mZihjYy5meC5NZXNzYWdlLnNob3dSZXN1bHQsIHRoaXMuc2hvd1Jlc3VsdCk7XHJcbiAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5vZmYoY2MuZnguTWVzc2FnZS5yZW1vdmVUaXAsIHRoaXMucmVtb3ZlVGlwKTtcclxuICAgIH1cclxuICAgIHVwZGF0ZSAoZHQpIHtcclxuXHJcbiAgIFxyXG4gICAgfVxyXG59XHJcbiJdfQ==
|