WaterControl/temp/quick-scripts/dst/assets/Script/Block.js
2024-08-02 17:23:01 +08:00

809 lines
123 KiB
JavaScript

(function() {
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
var __module = nodeEnv ? module : {exports:{}};
var __filename = 'preview-scripts/assets/Script/Block.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, 'c58deN2u1NGZL8nJwvnu1PR', 'Block');
// Script/Block.ts
"use strict";
// Learn TypeScript:
// - https://docs.cocos.com/creator/manual/en/scripting/typescript.html
// Learn Attribute:
// - https://docs.cocos.com/creator/manual/en/scripting/reference/attributes.html
// Learn life-cycle callbacks:
// - https://docs.cocos.com/creator/manual/en/scripting/life-cycle-callbacks.html
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 });
exports.PathType = exports.BlockType = void 0;
var _a = cc._decorator, ccclass = _a.ccclass, property = _a.property;
var BlockType;
(function (BlockType) {
/*普通地块 */
BlockType[BlockType["Nomal"] = 0] = "Nomal";
/*起点地块 */
BlockType[BlockType["Start"] = 1] = "Start";
/*湿地 */
BlockType[BlockType["Nunja"] = 2] = "Nunja";
/*山峰 */
BlockType[BlockType["Peak"] = 3] = "Peak";
/*终点地块 */
BlockType[BlockType["End"] = 4] = "End";
/*息壤 */
BlockType[BlockType["Xi_Soil"] = 5] = "Xi_Soil";
/*加固 */
BlockType[BlockType["Reinforce"] = 6] = "Reinforce";
})(BlockType = exports.BlockType || (exports.BlockType = {}));
var PathType;
(function (PathType) {
PathType["err"] = "err";
PathType["up"] = "up";
PathType["down"] = "down";
PathType["left"] = "left";
PathType["right"] = "right";
PathType["up_left"] = "up_left";
PathType["up_right"] = "up_right";
PathType["down_left"] = "down_left";
PathType["down_right"] = "down_right";
PathType["left_up"] = "left_up";
PathType["left_down"] = "left_down";
PathType["right_up"] = "right_up";
PathType["right_down"] = "right_down";
})(PathType = exports.PathType || (exports.PathType = {}));
var NewClass = /** @class */ (function (_super) {
__extends(NewClass, _super);
function NewClass() {
var _this = _super !== null && _super.apply(this, arguments) || this;
// LIFE-CYCLE CALLBACKS:
_this.UI = null;
return _this;
// update (dt) {}
}
NewClass.prototype.onLoad = function () {
this.finishi = false;
this.pos_Shifting = 0;
this.pos = cc.v2(0, 0);
};
NewClass.prototype.start = function () {
};
NewClass.prototype.initData = function (type, pos, max) {
this.block_Type = type;
this.pos = cc.v2(pos.x, pos.y);
// if(this.pos.y%2 == 0) this.node.getChildByName("tip").active = true;
if (type == cc.Enum(BlockType).Start) {
var bg = this.node.getChildByName("sp");
// this.node.getComponent(cc.Sprite).spriteFrame = null;
bg.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["start"];
if (cc.fx.GameConfig.GM_INFO.level > 4) {
bg.getChildByName("start").y = 20;
bg.getChildByName("end").y = 20;
}
this.rotateTarget(bg, "start", pos, max);
}
else if (type == cc.Enum(BlockType).End) {
var bg = this.node.getChildByName("sp");
// this.node.getComponent(cc.Sprite).spriteFrame = null;
bg.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["end"];
if (cc.fx.GameConfig.GM_INFO.level > 4) {
bg.getChildByName("start").y = 20;
bg.getChildByName("end").y = 20;
}
this.rotateTarget(bg, "end", pos, max);
}
else if (type == cc.Enum(BlockType).Nunja) {
var random = Math.floor(Math.random() * 4);
var rotationArr = [0, 90, 180, 270];
var rotation = rotationArr[random];
this.node.getChildByName("bg").getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["e5"];
this.node.getChildByName("bg").angle = -rotation;
this.node.getComponent(cc.Sprite).spriteFrame = null;
}
else if (type == cc.Enum(BlockType).Peak) {
var random = Math.floor(Math.random() * 4 + 1);
var name = "shan" + random;
this.node.getChildByName("bg").getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
this.node.getComponent(cc.Sprite).spriteFrame = null;
}
// this.node.getChildByName("tipWin").active = true;
// this.node.getChildByName("tipLose").active = true;
if (cc.fx.GameConfig.GM_INFO.level == 1) {
this.node.getChildByName("tipWin").opacity = 220;
this.node.getChildByName("tipLose").opacity = 220;
}
else if (cc.fx.GameConfig.GM_INFO.level == 2) {
this.node.getChildByName("tipWin").opacity = 100;
this.node.getChildByName("tipLose").opacity = 100;
}
else if (cc.fx.GameConfig.GM_INFO.level == 3) {
this.node.getChildByName("tipWin").opacity = 50;
this.node.getChildByName("tipLose").opacity = 50;
}
else if (cc.fx.GameConfig.GM_INFO.level > 3) {
this.node.getChildByName("tipWin").opacity = 0;
this.node.getChildByName("tipLose").opacity = 0;
}
};
//旋转入海口和出海口的 图片以及文字角度
NewClass.prototype.rotateTarget = function (bg, name, pos, max) {
var target = bg.getChildByName(name);
if (pos.y == max.y - 1) {
bg.angle = 0;
if (name == "end")
target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["end_x"];
target.active = true;
target.angle = 0;
return;
}
else if (pos.y == 0) {
bg.angle = -180;
if (name == "end")
target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["end_x"];
target.active = true;
target.angle = -180;
return;
}
else if (pos.x == max.x - 1) {
bg.angle = 90;
if (name == "start")
target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["start_y"];
else
target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["end_y"];
target.active = true;
target.angle = -90;
}
else if (pos.x == 0) {
bg.angle = -90;
if (name == "start")
target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["start_y"];
else
target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["end_y"];
target.active = true;
target.angle = 90;
}
};
NewClass.prototype.setPath = function (type) {
this.path_Type = type;
};
//设置息壤在起点
NewClass.prototype.set_Xi_Soil = function (direction, type) {
var sp = this.node.getChildByName("sp");
var turn = this.node.getChildByName("turnStart");
var water = this.node.getChildByName("waterStart");
if (direction == "left" || direction == "right") {
if (sp.angle == 0) {
turn.active = true;
water.active = true;
water.opacity = 0;
if (type) {
turn.angle = direction == "left" ? 90 : 0;
water.angle = direction == "left" ? 90 : 0;
}
else {
turn.angle = direction == "left" ? 0 : 90;
water.angle = direction == "left" ? 0 : 90;
}
}
else if (sp.angle == -180) {
turn.active = true;
water.active = true;
water.opacity = 0;
if (type) {
turn.angle = direction == "left" ? -180 : -90;
water.angle = direction == "left" ? -180 : -90;
}
else {
turn.angle = direction == "left" ? 270 : -180;
water.angle = direction == "left" ? 270 : -180;
}
}
else if (sp.angle == -90) {
turn.active = true;
turn.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["a1"];
turn.angle = 90;
if (type) {
water.active = true;
water.angle = 90;
water.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["block1"];
water.opacity = 0;
}
}
else if (sp.angle == 90) {
turn.active = true;
turn.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["a1"];
turn.angle = 90;
if (type) {
water.active = true;
water.angle = 90;
water.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["block1"];
water.opacity = 0;
}
}
}
else if (direction == "up" || direction == "down") {
var sp_1 = this.node.getChildByName("sp");
if (sp_1.angle == -90) {
turn.active = true;
water.active = true;
water.opacity = 0;
if (type) {
turn.angle = direction == "up" ? -90 : 0;
water.angle = direction == "up" ? -90 : 0;
}
else {
turn.angle = direction == "up" ? -90 : 0;
water.angle = direction == "up" ? -90 : 0;
}
}
else if (sp_1.angle == 90) {
turn.active = true;
water.active = true;
water.opacity = 0;
if (type) {
turn.angle = direction == "up" ? 90 : 180;
water.angle = direction == "up" ? 90 : 180;
}
else {
turn.angle = direction == "up" ? 180 : 90;
water.angle = direction == "up" ? 180 : 90;
}
}
else if (sp_1.angle == 0) {
turn.active = true;
turn.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["a1"];
turn.angle = 0;
if (type) {
water.active = true;
water.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["block1"];
water.opacity = 0;
}
}
else if (sp_1.angle == -180) {
turn.active = true;
turn.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["a1"];
turn.angle = 0;
if (type) {
water.active = true;
water.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["block1"];
water.opacity = 0;
}
}
}
};
NewClass.prototype.set_Xi_SoilType = function (direction, end, name) {
var _this = this;
// console.log("息壤",direction,name,this.block_Type);
if (this.block_Type == cc.Enum(BlockType).Start) {
this.set_Xi_Soil(direction, false);
return;
}
if (this.block_Type == cc.Enum(BlockType).Nunja) {
this.block_Type = cc.Enum(BlockType).Nomal;
this.node.getChildByName("bg").getComponent(cc.Sprite).spriteFrame = null;
this.node.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["block_Bg"];
}
if (end != null) {
if (this.block_Type == cc.Enum(BlockType).End) {
this.finishi = true;
this.set_Xi_Soil(direction, true);
}
setTimeout(function () {
if (name == "water")
cc.fx.Notifications.emit(cc.fx.Message.nextWater, (end + 1));
else
cc.fx.Notifications.emit(cc.fx.Message.next, (end + 1));
}, 400);
}
if (this.block_Type != cc.Enum(BlockType).End && this.block_Type != cc.Enum(BlockType).Start) {
this.block_Type = cc.Enum(BlockType).Xi_Soil;
}
else {
}
var target = this.node.getChildByName("Xi_Soil");
this.path_Type = direction;
target.active = true;
target.opacity = 0;
cc.tween(target)
.to(0.1, { opacity: 255 })
.to(0.1, { opacity: 0 })
.call(function () {
if (direction != null && end == null) {
var data = {
order: 0,
time: cc.fx.GameConfig.TIME_INFO.waterSpeed[0],
type: 0,
circulate: false
};
if (name == "water") {
_this.runWater(data);
}
else
_this.runRoad(data);
}
})
.start();
};
NewClass.prototype.repeatRoad = function (type) {
//如果双向都占用了还进来就算死了-
var jg = false;
if (this.node.getChildByName("vertical2").active == true && this.node.getChildByName("horizontal2").active == true) {
// alert("治水失败");
jg = true;
if (type) {
cc.fx.Notifications.emit(cc.fx.Message.showResult, "lose");
cc.fx.Notifications.emit(cc.fx.Message.setData, false);
}
}
else if (this.node.getChildByName("turn2").active == true && this.block_Type != cc.Enum(BlockType).Xi_Soil) {
// alert("治水失败");
jg = true;
if (type) {
cc.fx.Notifications.emit(cc.fx.Message.showResult, "lose");
cc.fx.Notifications.emit(cc.fx.Message.setData, false);
}
}
return jg;
};
//修筑路线执行
NewClass.prototype.runRoad = function (data) {
if (this.path_Type == "err") {
setTimeout(function () {
if (data.circulate)
cc.fx.Notifications.emit(cc.fx.Message.next, order);
}, data.time);
return;
}
var jg = this.repeatRoad(true);
if (jg == true)
return;
var target = null;
var progress = 1;
var time = data.time;
var order = data.order + 1;
var random = Math.floor(Math.random() * 4 + 1);
target = this.node.getChildByName("vertical2");
if (target.name == "vertical") {
var water1_1 = target.getChildByName("wave").getChildByName("water1");
var water2_1 = target.getChildByName("wave").getChildByName("water2");
var water3_1 = target.getChildByName("wave").getChildByName("water3");
var timeDelay = 0.15;
water1_1.runAction(cc.sequence(cc.moveTo(0.6, cc.v2(water1_1.x, 120)), cc.delayTime(timeDelay), cc.callFunc(function () {
water1_1.y = -120;
})).repeatForever());
water2_1.runAction(cc.sequence(cc.moveTo(0.6, cc.v2(water2_1.x, 120)), cc.delayTime(timeDelay), cc.callFunc(function () {
water2_1.y = -120;
})).repeatForever());
water3_1.runAction(cc.sequence(cc.moveTo(0.6, cc.v2(water3_1.x, 120)), cc.delayTime(timeDelay), cc.callFunc(function () {
water3_1.y = -120;
})).repeatForever());
}
var name = "a" + random;
if (this.block_Type != cc.Enum(BlockType).Reinforce)
target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
if (target.active == true) {
target = this.node.getChildByName("horizontal2");
name = "b" + random;
if (this.block_Type != cc.Enum(BlockType).Reinforce)
target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
}
// console.log(this.path_Type,data.order);
if (this.path_Type == cc.Enum(PathType).up) {
}
else if (this.path_Type == cc.Enum(PathType).down) {
target.angle = 180;
}
else if (this.path_Type == cc.Enum(PathType).left) {
target.angle = 90;
name = "b" + random;
if (this.block_Type != cc.Enum(BlockType).Reinforce)
target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
}
else if (this.path_Type == cc.Enum(PathType).right) {
target.angle = 270;
name = "b" + random;
if (this.block_Type != cc.Enum(BlockType).Reinforce)
target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
}
else {
target = this.node.getChildByName("turn2");
if (target.name == "turn") {
var water_1 = target.getChildByName("wave").getChildByName("water");
water_1.opacity = 0;
water_1.runAction(cc.sequence(cc.rotateTo(7.2, -1080), cc.delayTime(0)).repeatForever());
setTimeout(function () {
water_1.opacity = 255;
}, 200);
}
name = "c" + random;
if (this.block_Type != cc.Enum(BlockType).Reinforce)
target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
progress = 0.25;
if (this.path_Type == cc.Enum(PathType).up_left) {
target.setPosition(-this.pos_Shifting, -this.pos_Shifting);
}
else if (this.path_Type == cc.Enum(PathType).up_right) {
target.scaleX = -1;
target.setPosition(this.pos_Shifting, -this.pos_Shifting);
}
else if (this.path_Type == cc.Enum(PathType).down_left) {
target.angle = 180;
target.scaleX = -1;
target.setPosition(-this.pos_Shifting, this.pos_Shifting);
}
else if (this.path_Type == cc.Enum(PathType).down_right) {
target.angle = 180;
target.setPosition(this.pos_Shifting, this.pos_Shifting);
}
else if (this.path_Type == cc.Enum(PathType).left_up) {
target.angle = -90;
target.scaleY = -1;
target.setPosition(this.pos_Shifting, this.pos_Shifting);
}
else if (this.path_Type == cc.Enum(PathType).left_down) {
target.angle = 90;
target.setPosition(-this.pos_Shifting, -this.pos_Shifting);
}
else if (this.path_Type == cc.Enum(PathType).right_up) {
target.angle = -90;
target.setPosition(-this.pos_Shifting, this.pos_Shifting);
}
else if (this.path_Type == cc.Enum(PathType).right_down) {
target.angle = -90;
target.scaleX = -1;
target.setPosition(-this.pos_Shifting, -this.pos_Shifting);
}
}
if (this.path_Type == "Reinforce") {
target = this.node.getChildByName("Reinforce");
if (this.block_Type != cc.Enum(BlockType).End)
this.block_Type = cc.Enum(BlockType).Reinforce;
this.node.getChildByName("vertical2").getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["e1"];
this.node.getChildByName("turn2").getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["e3"];
this.node.getChildByName("horizontal2").getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["e2"];
target.active = true;
target.opacity = 0;
progress = 1;
cc.tween(target)
.to(cc.fx.GameConfig.TIME_INFO.ReinforceSpeed, { opacity: 255 })
.call(function () {
if (data.circulate)
cc.fx.Notifications.emit(cc.fx.Message.changeMap, order);
cc.fx.Notifications.emit(cc.fx.Message.next, order);
})
.start();
}
else if (this.path_Type == "Xi_Soil") {
target.active = false;
if (this.block_Type != cc.Enum(BlockType).End && this.block_Type != cc.Enum(BlockType).Start)
this.block_Type = cc.Enum(BlockType).Xi_Soil;
target = this.node.getChildByName("Xi_Soil");
target.active = true;
target.opacity = 0;
cc.tween(target)
.to(0.01, { opacity: 1 })
.to(0.01, { opacity: 0 })
.call(function () {
if (data.circulate) {
cc.fx.Notifications.emit(cc.fx.Message.next, order);
}
})
.start();
}
else if (this.path_Type == "End") {
target.active = false;
if (this.block_Type != cc.Enum(BlockType).End && this.block_Type != cc.Enum(BlockType).Start)
this.block_Type = cc.Enum(BlockType).Xi_Soil;
var posTemp = data.last;
var direction = "up";
if (this.pos.x - posTemp.x >= 1) {
direction = "right";
}
else if (this.pos.x - posTemp.x <= -1) {
direction = "left";
}
else if (this.pos.y - posTemp.y >= 1) {
direction = "down";
}
// console.log("结束方向:",direction);
if (!this.finishi) {
this.finishi = true;
this.set_Xi_Soil(direction, true);
}
}
else {
target.active = true;
if (this.block_Type != cc.Enum(BlockType).Xi_Soil) {
target.getComponent(cc.Sprite).fillRange = 0;
cc.tween(target.getComponent(cc.Sprite))
.to(time, { fillRange: progress })
.call(function () {
if (data.circulate)
cc.fx.Notifications.emit(cc.fx.Message.next, order);
})
.start();
}
else {
target.opacity = 0;
target.getComponent(cc.Sprite).fillRange = 1;
cc.tween(target)
.to(time, { opacity: 255 })
.call(function () {
if (data.circulate)
cc.fx.Notifications.emit(cc.fx.Message.next, order);
})
.start();
}
}
};
//洪峰执行
NewClass.prototype.runWater = function (data) {
if (this.node.getChildByName("waterStart").active == true && this.block_Type == cc.Enum(BlockType).Start) {
// sp.getChildByName("waterStart").opacity = 255;
cc.tween(this.node.getChildByName("waterStart"))
.to(0.2, { opacity: 255 })
.start();
}
if (this.path_Type == "err") {
setTimeout(function () {
if (data.circulate)
cc.fx.Notifications.emit(cc.fx.Message.nextWater, order);
}, data.time);
return;
}
//如果双向都占用了还进来就算死了-
if (this.node.getChildByName("vertical").active == true && this.node.getChildByName("horizontal").active == true) {
// alert("治水失败");
cc.fx.Notifications.emit(cc.fx.Message.showResult, "lose");
cc.fx.Notifications.emit(cc.fx.Message.setData, false);
// cc.director.loadScene("GameScene");
return;
}
else if (this.node.getChildByName("turn").active == true && this.block_Type != cc.Enum(BlockType).Xi_Soil) {
// alert("治水失败");
cc.fx.Notifications.emit(cc.fx.Message.showResult, "lose");
cc.fx.Notifications.emit(cc.fx.Message.setData, false);
// cc.director.loadScene("GameScene");
return;
}
var target = null;
var progress = 1;
var time = data.time;
var order = data.order + 1;
var random = Math.floor(Math.random() * 4 + 1);
target = this.node.getChildByName("vertical");
if (target.name == "vertical") {
var water1_2 = target.getChildByName("wave").getChildByName("water1");
var water2_2 = target.getChildByName("wave").getChildByName("water2");
var water3_2 = target.getChildByName("wave").getChildByName("water3");
var timeDelay = 0.15;
water1_2.runAction(cc.sequence(cc.moveTo(0.6, cc.v2(water1_2.x, 120)), cc.delayTime(timeDelay), cc.callFunc(function () {
water1_2.y = -120;
})).repeatForever());
water2_2.runAction(cc.sequence(cc.moveTo(0.6, cc.v2(water2_2.x, 120)), cc.delayTime(timeDelay), cc.callFunc(function () {
water2_2.y = -120;
})).repeatForever());
water3_2.runAction(cc.sequence(cc.moveTo(0.6, cc.v2(water3_2.x, 120)), cc.delayTime(timeDelay), cc.callFunc(function () {
water3_2.y = -120;
})).repeatForever());
}
var name = "a" + random;
// if(this.block_Type != cc.Enum(BlockType).Reinforce)target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
if (target.active == true) {
target = this.node.getChildByName("horizontal");
var water1_3 = target.getChildByName("wave").getChildByName("water1");
var water2_3 = target.getChildByName("wave").getChildByName("water2");
var water3_3 = target.getChildByName("wave").getChildByName("water3");
var timeDelay = 0.15;
water1_3.runAction(cc.sequence(cc.moveTo(0.6, cc.v2(water1_3.x, 120)), cc.delayTime(timeDelay), cc.callFunc(function () {
water1_3.y = -120;
})).repeatForever());
water2_3.runAction(cc.sequence(cc.moveTo(0.6, cc.v2(water2_3.x, 120)), cc.delayTime(timeDelay), cc.callFunc(function () {
water2_3.y = -120;
})).repeatForever());
water3_3.runAction(cc.sequence(cc.moveTo(0.6, cc.v2(water3_3.x, 120)), cc.delayTime(timeDelay), cc.callFunc(function () {
water3_3.y = -120;
})).repeatForever());
name = "b" + random;
//if(this.block_Type != cc.Enum(BlockType).Reinforce) target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
}
// console.log(this.path_Type,data.order);
if (this.path_Type == cc.Enum(PathType).up) {
}
else if (this.path_Type == cc.Enum(PathType).down) {
target.angle = 180;
}
else if (this.path_Type == cc.Enum(PathType).left) {
target.angle = 90;
name = "b" + random;
//if(this.block_Type != cc.Enum(BlockType).Reinforce) target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
}
else if (this.path_Type == cc.Enum(PathType).right) {
target.angle = 270;
name = "b" + random;
//if(this.block_Type != cc.Enum(BlockType).Reinforce) target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
}
else {
target = this.node.getChildByName("turn");
if (target.name == "turn") {
var water_2 = target.getChildByName("wave").getChildByName("water");
water_2.opacity = 0;
water_2.runAction(cc.sequence(cc.rotateTo(7.2, -1080), cc.delayTime(0)).repeatForever());
setTimeout(function () {
water_2.opacity = 255;
}, 200);
}
name = "c" + random;
//if(this.block_Type != cc.Enum(BlockType).Reinforce)target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
progress = 0.25;
if (this.path_Type == cc.Enum(PathType).up_left) {
target.setPosition(-this.pos_Shifting, -this.pos_Shifting);
}
else if (this.path_Type == cc.Enum(PathType).up_right) {
target.scaleX = -1;
target.setPosition(this.pos_Shifting, -this.pos_Shifting);
}
else if (this.path_Type == cc.Enum(PathType).down_left) {
target.angle = 180;
target.scaleX = -1;
target.setPosition(-this.pos_Shifting, this.pos_Shifting);
}
else if (this.path_Type == cc.Enum(PathType).down_right) {
target.angle = 180;
target.setPosition(this.pos_Shifting, this.pos_Shifting);
}
else if (this.path_Type == cc.Enum(PathType).left_up) {
target.angle = -90;
target.scaleY = -1;
target.setPosition(this.pos_Shifting, this.pos_Shifting);
}
else if (this.path_Type == cc.Enum(PathType).left_down) {
target.angle = 90;
target.setPosition(-this.pos_Shifting, -this.pos_Shifting);
}
else if (this.path_Type == cc.Enum(PathType).right_up) {
target.angle = -90;
target.setPosition(-this.pos_Shifting, this.pos_Shifting);
}
else if (this.path_Type == cc.Enum(PathType).right_down) {
target.angle = -90;
target.scaleX = -1;
target.setPosition(-this.pos_Shifting, -this.pos_Shifting);
}
}
// if(this.path_Type == "Reinforce"){
// target = this.node.getChildByName("Reinforce");
// this.block_Type = cc.Enum(BlockType).Reinforce;
// // this.node.getChildByName("vertical").getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["e1"];
// // this.node.getChildByName("turn").getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["e3"];
// // this.node.getChildByName("horizontal").getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["e2"];
// target.active = true;
// target.opacity = 0;
// progress = 1;
// cc.tween(target)
// .to(cc.fx.GameConfig.TIME_INFO.ReinforceSpeed,{opacity:255})
// .call(() =>{
// if(data.circulate)
// cc.fx.Notifications.emit(cc.fx.Message.changeMap,order);
// cc.fx.Notifications.emit(cc.fx.Message.nextWater,order);
// })
// .start();
// }
// else if(this.path_Type == "Xi_Soil"){
// target.active = false;
// this.block_Type = cc.Enum(BlockType).Xi_Soil;
// target = this.node.getChildByName("Xi_Soil");
// target.active = true;
// target.opacity = 0;
// cc.tween(target)
// .to(0.01,{opacity:1})
// .to(0.01,{opacity:0})
// .call(() =>{
// if(data.circulate){
// cc.fx.Notifications.emit(cc.fx.Message.nextWater,order);
// }
// })
// .start();
// }
if (this.path_Type == "End") {
target.active = false;
if (this.block_Type == cc.Enum(BlockType).End) {
if (this.node.getChildByName("waterStart").active == true && this.block_Type == cc.Enum(BlockType).End) {
cc.tween(this.node.getChildByName("waterStart"))
.to(0.2, { opacity: 255 })
.call(function () {
// alert("治水成功");
cc.fx.Notifications.emit(cc.fx.Message.showResult, "win");
cc.fx.Notifications.emit(cc.fx.Message.setData, true);
if (cc.fx.GameConfig.GM_INFO.level < 7) {
cc.fx.GameConfig.GM_INFO.level += 1;
}
setTimeout(function () {
// cc.director.loadScene("GameScene");
}, 500);
})
.start();
}
}
else {
target = this.node.getChildByName("End");
target.active = true;
target.opacity = 0;
var posTemp = data.last;
if (this.pos.x - posTemp.x >= 1) {
target.angle = -90;
}
else if (this.pos.x - posTemp.x <= -1) {
target.angle = 90;
}
else if (this.pos.y - posTemp.y >= 1) {
target.angle = 180;
}
cc.tween(target)
.to(0.5, { opacity: 255 })
.call(function () {
// alert("治水失败")
cc.fx.Notifications.emit(cc.fx.Message.showResult, "lose");
cc.fx.Notifications.emit(cc.fx.Message.setData, false);
// cc.director.loadScene("GameScene");
})
.start();
}
}
else {
target.active = true;
target.getComponent(cc.Sprite).fillRange = 0;
cc.tween(target.getComponent(cc.Sprite))
.to(time, { fillRange: progress })
.call(function () {
if (data.circulate)
cc.fx.Notifications.emit(cc.fx.Message.nextWater, order);
})
.start();
}
};
__decorate([
property(cc.SpriteAtlas)
], NewClass.prototype, "UI", void 0);
NewClass = __decorate([
ccclass
], NewClass);
return NewClass;
}(cc.Component));
exports.default = NewClass;
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0XFxCbG9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0JBQW9CO0FBQ3BCLHdFQUF3RTtBQUN4RSxtQkFBbUI7QUFDbkIsa0ZBQWtGO0FBQ2xGLDhCQUE4QjtBQUM5QixrRkFBa0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFNUUsSUFBQSxLQUFzQixFQUFFLENBQUMsVUFBVSxFQUFsQyxPQUFPLGFBQUEsRUFBRSxRQUFRLGNBQWlCLENBQUM7QUFFMUMsSUFBWSxTQWdCWDtBQWhCRCxXQUFZLFNBQVM7SUFDakIsU0FBUztJQUNULDJDQUFTLENBQUE7SUFDVCxTQUFTO0lBQ1QsMkNBQVMsQ0FBQTtJQUNULE9BQU87SUFDUCwyQ0FBUyxDQUFBO0lBQ1QsT0FBTztJQUNQLHlDQUFRLENBQUE7SUFDUixTQUFTO0lBQ1QsdUNBQU8sQ0FBQTtJQUVQLE9BQU87SUFDUCwrQ0FBVyxDQUFBO0lBQ1gsT0FBTztJQUNQLG1EQUFhLENBQUE7QUFDakIsQ0FBQyxFQWhCVyxTQUFTLEdBQVQsaUJBQVMsS0FBVCxpQkFBUyxRQWdCcEI7QUFFRCxJQUFZLFFBY1g7QUFkRCxXQUFZLFFBQVE7SUFDaEIsdUJBQVcsQ0FBQTtJQUNYLHFCQUFTLENBQUE7SUFDVCx5QkFBYSxDQUFBO0lBQ2IseUJBQWEsQ0FBQTtJQUNiLDJCQUFlLENBQUE7SUFDZiwrQkFBbUIsQ0FBQTtJQUNuQixpQ0FBcUIsQ0FBQTtJQUNyQixtQ0FBdUIsQ0FBQTtJQUN2QixxQ0FBeUIsQ0FBQTtJQUN6QiwrQkFBbUIsQ0FBQTtJQUNuQixtQ0FBdUIsQ0FBQTtJQUN2QixpQ0FBcUIsQ0FBQTtJQUNyQixxQ0FBeUIsQ0FBQTtBQUM3QixDQUFDLEVBZFcsUUFBUSxHQUFSLGdCQUFRLEtBQVIsZ0JBQVEsUUFjbkI7QUFHRDtJQUFzQyw0QkFBWTtJQUFsRDtRQUFBLHFFQTh1QkM7UUE3dUJHLHdCQUF3QjtRQUV4QixRQUFFLEdBQW1CLElBQUks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QUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEUsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLFFBQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQU0sQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUN2RixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQUNSLFFBQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUE7WUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1lBQ3JCLFFBQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQU0sQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUN2RixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQUNSLFFBQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUE7WUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1lBQ3JCLFFBQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQU0sQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUN2RixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQUNSLFFBQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUE7WUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1NBQ3hCO1FBRUQsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQztRQUN4QixJQUFHLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTO1lBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFL0gsSUFBRyxNQUFNLENBQUMsTUFBTSxJQUFJLElBQUksRUFBQztZQUNyQixNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDakQsSUFBSSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUM7WUFDcEIsSUFBRyxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUztnQkFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuSTtRQUNELDBDQUEwQztRQUMxQyxJQUFHLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUM7U0FDekM7YUFDSSxJQUFHLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUM7WUFDN0MsTUFBTSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7U0FDdEI7YUFDSSxJQUFHLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUM7WUFDN0MsTUFBTSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDbEIsSUFBSSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUM7WUFDcEIsSUFBRyxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUztnQkFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuSTthQUNJLElBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssRUFBQztZQUM5QyxNQUFNLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztZQUNuQixJQUFJLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQztZQUNwQixJQUFHLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTO2dCQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ25JO2FBQ0c7WUFDQSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDM0MsSUFBRyxNQUFNLENBQUMsSUFBSSxJQUFJLE1BQU0sRUFBQztnQkFDckIsSUFBSSxPQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2xFLE9BQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFBO2dCQUNqQixPQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxJQUFJLENBQUMsRUFBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztnQkFDckYsVUFBVSxDQUFDO29CQUNQLE9BQUssQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO2dCQUN4QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDWDtZQUdELElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO1lBQ3BCLElBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVM7Z0JBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0gsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNoQixJQUFHLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLEVBQUM7Z0JBQzNDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQzdEO2lCQUNJLElBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsRUFBQztnQkFDakQsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDbkIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQzVEO2lCQUNJLElBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsRUFBQztnQkFDbEQsTUFBTSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7Z0JBQ25CLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ25CLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUM1RDtpQkFDSSxJQUFHLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxVQUFVLEVBQUM7Z0JBQ25ELE1BQU0sQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO2dCQUNuQixNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQzNEO2lCQUNJLElBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sRUFBQztnQkFDaEQsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDbkIsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDbkIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUMzRDtpQkFDSSxJQUFHLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLEVBQUM7Z0JBQ2xELE1BQU0sQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUNsQixNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUM3RDtpQkFDSSxJQUFHLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLEVBQUM7Z0JBQ2pELE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ25CLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUU1RDtpQkFDSSxJQUFHLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxVQUFVLEVBQUM7Z0JBQ25ELE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ25CLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ25CLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQzdEO1NBQ0o7UUFDRCxJQUFHLElBQUksQ0FBQyxTQUFTLElBQUksV0FBVyxFQUFDO1lBQzdCLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMvQyxJQUFHLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHO2dCQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDNUYsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0csTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDckIsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7WUFDbkIsUUFBUSxHQUFHLENBQUMsQ0FBQztZQUNiLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO2lCQUNmLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFDLEVBQUMsT0FBTyxFQUFDLEdBQUcsRUFBQyxDQUFDO2lCQUMzRCxJQUFJLENBQUM7Z0JBQ0YsSUFBRyxJQUFJLENBQUMsU0FBUztvQkFDYixFQUFFLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN4RCxFQUFFLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNELENBQUMsQ0FBQztpQkFDRCxLQUFLLEVBQUUsQ0FBQztTQUNaO2FBQ0ksSUFBRyxJQUFJLENBQUMsU0FBUyxJQUFJLFNBQVMsRUFBQztZQUNoQyxNQUFNLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFHLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUs7Z0JBQ3ZGLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDakQsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzdDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO2lCQUNmLEVBQUUsQ0FBQyxJQUFJLEVBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxFQUFDLENBQUM7aUJBQ3BCLEVBQUUsQ0FBQyxJQUFJLEVBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxFQUFDLENBQUM7aUJBQ3BCLElBQUksQ0FBQztnQkFDRixJQUFHLElBQUksQ0FBQyxTQUFTLEVBQUM7b0JBQ2QsRUFBRSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksRUFBQyxLQUFLLENBQUMsQ0FBQztpQkFDdEQ7WUFFTCxDQUFDLENBQUM7aUJBQ0QsS0FBSyxFQUFFLENBQUM7U0FDWjthQUNJLElBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxLQUFLLEVBQUM7WUFDNUIsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBRyxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLO2dCQUN2RixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ2pELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDeEIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLElBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUM7Z0JBQzNCLFNBQVMsR0FBRyxPQUFPLENBQUM7YUFDdkI7aUJBQ0ksSUFBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDO2dCQUNqQyxTQUFTLEdBQUcsTUFBTSxDQUFDO2FBQ3RCO2lCQUNJLElBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUM7Z0JBQ2hDLFNBQVMsR0FBRyxNQUFNLENBQUM7YUFDdEI7WUFFRCxrQ0FBa0M7WUFDbEMsSUFBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUM7Z0JBQ2IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3BDO1NBQ0o7YUFDRztZQUNBLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLElBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBQztnQkFDN0MsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztnQkFDN0MsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztxQkFDdkMsRUFBRSxDQUFDLElBQUksRUFBQyxFQUFDLFNBQVMsRUFBQyxRQUFRLEVBQUMsQ0FBQztxQkFDN0IsSUFBSSxDQUFDO29CQUNGLElBQUcsSUFBSSxDQUFDLFNBQVM7d0JBQ2IsRUFBRSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksRUFBQyxLQUFLLENBQUMsQ0FBQztnQkFDM0QsQ0FBQyxDQUFDO3FCQUNELEtBQUssRUFBRSxDQUFDO2FBQ1o7aUJBQ0c7Z0JBQ0EsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7Z0JBQ25CLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7Z0JBQzdDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO3FCQUNmLEVBQUUsQ0FBQyxJQUFJLEVBQUMsRUFBQyxPQUFPLEVBQUMsR0FBRyxFQUFDLENBQUM7cUJBQ3RCLElBQUksQ0FBQztvQkFDRixJQUFHLElBQUksQ0FBQyxTQUFTO3dCQUNiLEVBQUUsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzNELENBQUMsQ0FBQztxQkFDRCxLQUFLLEVBQUUsQ0FBQzthQUNaO1NBQ0o7SUFFTCxDQUFDO0lBR0QsTUFBTTtJQUNOLDJCQUFRLEdBQVIsVUFBUyxJQUFJO1FBQ1QsSUFBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUM7WUFDcEcsaURBQWlEO1lBQ2pELEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7aUJBQy9DLEVBQUUsQ0FBQyxHQUFHLEVBQUMsRUFBQyxPQUFPLEVBQUMsR0FBRyxFQUFDLENBQUM7aUJBQ3JCLEtBQUssRUFBRSxDQUFDO1NBQ1o7UUFHRCxJQUFHLElBQUksQ0FBQyxTQUFTLElBQUksS0FBSyxFQUFDO1lBQ3ZCLFVBQVUsQ0FBQztnQkFDUCxJQUFHLElBQUksQ0FBQyxTQUFTO29CQUNiLEVBQUUsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNkLE9BQU87U0FDVjtRQUNELG1CQUFtQjtRQUNuQixJQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksRUFBQztZQUM1RyxpQkFBaUI7WUFDakIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBQyxNQUFNLENBQUMsQ0FBQztZQUMxRCxFQUFFLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RELHNDQUFzQztZQUN0QyxPQUFPO1NBQ1Y7YUFFSSxJQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBQztZQUNyRyxpQkFBaUI7WUFDakIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBQyxNQUFNLENBQUMsQ0FBQztZQUMxRCxFQUFFLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RELHNDQUFzQztZQUN0QyxPQUFPO1NBQ1Y7UUFDRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDckIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDM0IsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QyxJQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksVUFBVSxFQUFDO1lBQ3pCLElBQUksUUFBTSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BFLElBQUksUUFBTSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BFLElBQUksUUFBTSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQztZQUNyQixRQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFNLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFDdkYsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFDUixRQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFBO1lBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUNyQixRQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFNLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFDdkYsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFDUixRQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFBO1lBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUNyQixRQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFNLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFDdkYsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFDUixRQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFBO1lBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztTQUN4QjtRQUVELElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUM7UUFDeEIsa0lBQWtJO1FBRWxJLElBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUM7WUFDckIsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2hELElBQUksUUFBTSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BFLElBQUksUUFBTSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BFLElBQUksUUFBTSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQztZQUNyQixRQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFNLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFDdkYsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFDUixRQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFBO1lBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUNyQixRQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFNLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFDdkYsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFDUixRQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFBO1lBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUNyQixRQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFNLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFDdkYsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFDUixRQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFBO1lBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUNyQixJQUFJLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQztZQUNwQixrSUFBa0k7U0FDckk7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U0FBUyxFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hFLENBQUMsQ0FBQztpQkFDRCxLQUFLLEVBQUUsQ0FBQztTQUNaO0lBRUwsQ0FBQztJQXh1QkQ7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQzt3Q0FDQztJQUhULFFBQVE7UUFENUIsT0FBTztPQUNhLFFBQVEsQ0E4dUI1QjtJQUFELGVBQUM7Q0E5dUJELEFBOHVCQyxDQTl1QnFDLEVBQUUsQ0FBQyxTQUFTLEdBOHVCakQ7a0JBOXVCb0IsUUFBUSIsImZpbGUiOiIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8vIExlYXJuIFR5cGVTY3JpcHQ6XHJcbi8vICAtIGh0dHBzOi8vZG9jcy5jb2Nvcy5jb20vY3JlYXRvci9tYW51YWwvZW4vc2NyaXB0aW5nL3R5cGVzY3JpcHQuaHRtbFxyXG4vLyBMZWFybiBBdHRyaWJ1dGU6XHJcbi8vICAtIGh0dHBzOi8vZG9jcy5jb2Nvcy5jb20vY3JlYXRvci9tYW51YWwvZW4vc2NyaXB0aW5nL3JlZmVyZW5jZS9hdHRyaWJ1dGVzLmh0bWxcclxuLy8gTGVhcm4gbGlmZS1jeWNsZSBjYWxsYmFja3M6XHJcbi8vICAtIGh0dHBzOi8vZG9jcy5jb2Nvcy5jb20vY3JlYXRvci9tYW51YWwvZW4vc2NyaXB0aW5nL2xpZmUtY3ljbGUtY2FsbGJhY2tzLmh0bWxcclxuXHJcbmNvbnN0IHtjY2NsYXNzLCBwcm9wZXJ0eX0gPSBjYy5fZGVjb3JhdG9yO1xyXG5cclxuZXhwb3J0IGVudW0gQmxvY2tUeXBle1xyXG4gICAgLyrmma7pgJrlnLDlnZcgKi9cclxuICAgIE5vbWFsID0gMCwgIFxyXG4gICAgLyrotbfngrnlnLDlnZcgKi9cclxuICAgIFN0YXJ0ID0gMSwgIFxyXG4gICAgLyrmub/lnLAgKi9cclxuICAgIE51bmphID0gMixcclxuICAgIC8q5bGx5bOwICovXHJcbiAgICBQZWFrID0gMyxcclxuICAgIC8q57uI54K55Zyw5Z2XICovXHJcbiAgICBFbmQgPSA0LFxyXG5cclxuICAgIC8q5oGv5aOkICovXHJcbiAgICBYaV9Tb2lsID0gNSxcclxuICAgIC8q5Yqg5Zu6ICovXHJcbiAgICBSZWluZm9yY2UgPSA2XHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFBhdGhUeXBle1xyXG4gICAgZXJyID0gXCJlcnJcIixcclxuICAgIHVwID0gXCJ1cFwiLCAgXHJcbiAgICBkb3duID0gXCJkb3duXCIsICBcclxuICAgIGxlZnQgPSBcImxlZnRcIixcclxuICAgIHJpZ2h0ID0gXCJyaWdodFwiLFxyXG4gICAgdXBfbGVmdCA9IFwidXBfbGVmdFwiLFxyXG4gICAgdXBfcmlnaHQgPSBcInVwX3JpZ2h0XCIsXHJcbiAgICBkb3duX2xlZnQgPSBcImRvd25fbGVmdFwiLFxyXG4gICAgZG93bl9yaWdodCA9IFwiZG93bl9yaWdodFwiLFxyXG4gICAgbGVmdF91cCA9IFwibGVmdF91cFwiLFxyXG4gICAgbGVmdF9kb3duID0gXCJsZWZ0X2Rvd25cIixcclxuICAgIHJpZ2h0X3VwID0gXCJyaWdodF91cFwiLFxyXG4gICAgcmlnaHRfZG93biA9IFwicmlnaHRfZG93blwiLFxyXG59XHJcblxyXG5AY2NjbGFzc1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOZXdDbGFzcyBleHRlbmRzIGNjLkNvbXBvbmVudCB7XHJcbiAgICAvLyBMSUZFLUNZQ0xFIENBTExCQUNLUzpcclxuICAgIEBwcm9wZXJ0eShjYy5TcHJpdGVBdGxhcylcclxuICAgIFVJOiBjYy5TcHJpdGVBdGxhcyA9IG51bGw7XHJcblxyXG4gICAgcG9zX1NoaWZ0aW5nOm51bWJlcjtcclxuICAgIGJsb2NrX1R5cGU6bnVtYmVyO1xyXG4gICAgcGF0aF9UeXBlOnN0cmluZztcclxuICAgIGZpbmlzaGk6Ym9vbGVhbjtcclxuICAgIHBvczogYW55O1xyXG4gICAgb25Mb2FkICgpIHtcclxuICAgICAgICB0aGlzLmZpbmlzaGkgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnBvc19TaGlmdGluZyA9IDA7XHJcbiAgICAgICAgdGhpcy5wb3MgPSBjYy52MigwLDApO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0ICgpIHtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBpbml0RGF0YSh0eXBlLHBvcyxtYXgpe1xyXG4gICAgICAgIHRoaXMuYmxvY2tfVHlwZSA9IHR5cGU7XHJcbiAgICAgICAgdGhpcy5wb3MgPSBjYy52Mihwb3MueCxwb3MueSk7XHJcbiAgICAgICAgLy8gaWYodGhpcy5wb3MueSUyID09IDApIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInRpcFwiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIGlmKHR5cGUgPT0gY2MuRW51bShCbG9ja1R5cGUpLlN0YXJ0KXsgXHJcbiAgICAgICAgICAgIHZhciBiZyA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInNwXCIpO1xyXG4gICAgICAgICAgICAvLyB0aGlzLm5vZGUuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSBudWxsO1xyXG4gICAgICAgICAgICBiZy5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW1wic3RhcnRcIl07XHJcbiAgICAgICAgICAgIGlmKGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5sZXZlbCA+IDQpe1xyXG4gICAgICAgICAgICAgICAgYmcuZ2V0Q2hpbGRCeU5hbWUoXCJzdGFydFwiKS55ID0gMjA7XHJcbiAgICAgICAgICAgICAgICBiZy5nZXRDaGlsZEJ5TmFtZShcImVuZFwiKS55ID0gMjA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yb3RhdGVUYXJnZXQoYmcsXCJzdGFydFwiLHBvcyxtYXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKHR5cGUgPT0gY2MuRW51bShCbG9ja1R5cGUpLkVuZCl7XHJcbiAgICAgICAgICAgIHZhciBiZyA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInNwXCIpO1xyXG4gICAgICAgICAgICAvLyB0aGlzLm5vZGUuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSBudWxsO1xyXG4gICAgICAgICAgICBiZy5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW1wiZW5kXCJdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8ubGV2ZWwgPiA0KXtcclxuICAgICAgICAgICAgICAgIGJnLmdldENoaWxkQnlOYW1lKFwic3RhcnRcIikueSA9IDIwO1xyXG4gICAgICAgICAgICAgICAgYmcuZ2V0Q2hpbGRCeU5hbWUoXCJlbmRcIikueSA9IDIwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucm90YXRlVGFyZ2V0KGJnLFwiZW5kXCIscG9zLG1heCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYodHlwZSA9PSBjYy5FbnVtKEJsb2NrVHlwZSkuTnVuamEpe1xyXG4gICAgICAgICAgICBsZXQgcmFuZG9tID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjQpO1xyXG4gICAgICAgICAgICBsZXQgcm90YXRpb25BcnIgPSBbMCw5MCwxODAsMjcwXTtcclxuICAgICAgICAgICAgbGV0IHJvdGF0aW9uID0gcm90YXRpb25BcnJbcmFuZG9tXTtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiYmdcIikuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSB0aGlzLlVJW1wiX3Nwcml0ZUZyYW1lc1wiXVtcImU1XCJdO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJiZ1wiKS5hbmdsZSA9IC1yb3RhdGlvbjtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0eXBlID09IGNjLkVudW0oQmxvY2tUeXBlKS5QZWFrKXtcclxuICAgICAgICAgICAgbGV0IHJhbmRvbSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSo0KzEpO1xyXG4gICAgICAgICAgICBsZXQgbmFtZSA9IFwic2hhblwiICsgcmFuZG9tO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJiZ1wiKS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW25hbWVdO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwidGlwV2luXCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgLy8gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwidGlwTG9zZVwiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIGlmKGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5sZXZlbCA9PSAxKXtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwidGlwV2luXCIpLm9wYWNpdHkgPSAyMjA7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInRpcExvc2VcIikub3BhY2l0eSA9IDIyMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZihjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8ubGV2ZWwgPT0gMil7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInRpcFdpblwiKS5vcGFjaXR5ID0gMTAwO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ0aXBMb3NlXCIpLm9wYWNpdHkgPSAxMDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYoY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmxldmVsID09IDMpe1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ0aXBXaW5cIikub3BhY2l0eSA9IDUwO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ0aXBMb3NlXCIpLm9wYWNpdHkgPSA1MDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZihjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8ubGV2ZWwgPiAzKXtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwidGlwV2luXCIpLm9wYWNpdHkgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ0aXBMb3NlXCIpLm9wYWNpdHkgPSAwO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgIH1cclxuICAgIC8v5peL6L2s5YWl5rW35Y+j5ZKM5Ye65rW35Y+j55qEIOWbvueJh+S7peWPiuaWh+Wtl+inkuW6plxyXG4gICAgcm90YXRlVGFyZ2V0KGJnLG5hbWUscG9zLG1heCl7XHJcbiAgICAgICAgbGV0IHRhcmdldCA9IGJnLmdldENoaWxkQnlOYW1lKG5hbWUpO1xyXG4gICAgICAgIGlmKHBvcy55ID09IG1heC55LTEpe1xyXG4gICAgICAgICAgICBiZy5hbmdsZSA9IDA7XHJcbiAgICAgICAgICAgIGlmKG5hbWUgPT0gXCJlbmRcIikgdGFyZ2V0LmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bXCJlbmRfeFwiXTtcclxuICAgICAgICAgICAgdGFyZ2V0LmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRhcmdldC5hbmdsZSA9IDA7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZihwb3MueSA9PSAwKXtcclxuICAgICAgICAgICAgYmcuYW5nbGUgPSAtMTgwO1xyXG4gICAgICAgICAgICBpZihuYW1lID09IFwiZW5kXCIpdGFyZ2V0LmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bXCJlbmRfeFwiXTtcclxuICAgICAgICAgICAgdGFyZ2V0LmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRhcmdldC5hbmdsZSA9IC0xODA7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZihwb3MueCA9PSBtYXgueC0xKXtcclxuICAgICAgICAgICAgYmcuYW5nbGUgPSA5MDtcclxuICAgICAgICAgICAgaWYobmFtZSA9PSBcInN0YXJ0XCIpdGFyZ2V0LmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bXCJzdGFydF95XCJdO1xyXG4gICAgICAgICAgICBlbHNlIHRhcmdldC5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW1wiZW5kX3lcIl07XHJcbiAgICAgICAgICAgIHRhcmdldC5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0YXJnZXQuYW5nbGUgPSAtOTA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYocG9zLnggPT0gMCl7XHJcbiAgICAgICAgICAgIGJnLmFuZ2xlID0gLTkwO1xyXG4gICAgICAgICAgICBpZihuYW1lID09IFwic3RhcnRcIil0YXJnZXQuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSB0aGlzLlVJW1wiX3Nwcml0ZUZyYW1lc1wiXVtcInN0YXJ0X3lcIl07XHJcbiAgICAgICAgICAgIGVsc2UgdGFyZ2V0LmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bXCJlbmRfeVwiXTtcclxuICAgICAgICAgICAgdGFyZ2V0LmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRhcmdldC5hbmdsZSA9IDkwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXRQYXRoKHR5cGUpe1xyXG4gICAgICAgIHRoaXMucGF0aF9UeXBlID0gdHlwZTtcclxuICAgIH1cclxuICAgIC8v6K6+572u5oGv5aOk5Zyo6LW354K5XHJcbiAgICBzZXRfWGlfU29pbChkaXJlY3Rpb24sdHlwZSl7XHJcbiAgICAgICAgbGV0IHNwID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwic3BcIik7XHJcbiAgICAgICAgbGV0IHR1cm4gPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ0dXJuU3RhcnRcIik7XHJcbiAgICAgICAgbGV0IHdhdGVyID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwid2F0ZXJTdGFydFwiKTtcclxuICAgIFxyXG4gICAgICAgIGlmKGRpcmVjdGlvbiA9PSBcImxlZnRcIiB8fCBkaXJlY3Rpb24gPT0gXCJyaWdodFwiKXtcclxuICAgICAgICAgICAgaWYoc3AuYW5nbGUgPT0gMCl7XHJcbiAgICAgICAgICAgICAgICB0dXJuLmFjdGl2ZSA9dHJ1ZTtcclxuICAgICAgICAgICAgICAgIHdhdGVyLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB3YXRlci5vcGFjaXR5ID0gMDtcclxuICAgICAgICAgICAgICAgIGlmKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHR1cm4uYW5nbGUgPSBkaXJlY3Rpb249PVwibGVmdFwiPzkwOjA7XHJcbiAgICAgICAgICAgICAgICAgICAgd2F0ZXIuYW5nbGUgPSBkaXJlY3Rpb249PVwibGVmdFwiPzkwOjA7XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICB0dXJuLmFuZ2xlID0gZGlyZWN0aW9uPT1cImxlZnRcIj8wOjkwO1xyXG4gICAgICAgICAgICAgICAgICAgIHdhdGVyLmFuZ2xlID0gZGlyZWN0aW9uPT1cImxlZnRcIj8wOjkwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKHNwLmFuZ2xlID09IC0xODApe1xyXG4gICAgICAgICAgICAgICAgdHVybi5hY3RpdmUgPXRydWU7XHJcbiAgICAgICAgICAgICAgICB3YXRlci5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgd2F0ZXIub3BhY2l0eSA9IDA7XHJcbiAgICAgICAgICAgICAgICBpZih0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICB0dXJuLmFuZ2xlID0gZGlyZWN0aW9uPT1cImxlZnRcIj8tMTgwOi05MDtcclxuICAgICAgICAgICAgICAgICAgICB3YXRlci5hbmdsZSA9IGRpcmVjdGlvbj09XCJsZWZ0XCI/LTE4MDotOTA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHR1cm4uYW5nbGUgPSBkaXJlY3Rpb249PVwibGVmdFwiPzI3MDotMTgwO1xyXG4gICAgICAgICAgICAgICAgICAgIHdhdGVyLmFuZ2xlID0gZGlyZWN0aW9uPT1cImxlZnRcIj8yNzA6LTE4MDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZihzcC5hbmdsZSA9PSAtOTApe1xyXG4gICAgICAgICAgICAgICAgdHVybi5hY3RpdmUgPXRydWU7XHJcbiAgICAgICAgICAgICAgICB0dXJuLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bXCJhMVwiXTtcclxuICAgICAgICAgICAgICAgIHR1cm4uYW5nbGUgPSA5MDtcclxuICAgICAgICAgICAgICAgIGlmKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHdhdGVyLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgd2F0ZXIuYW5nbGUgPSA5MDtcclxuICAgICAgICAgICAgICAgICAgICB3YXRlci5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW1wiYmxvY2sxXCJdO1xyXG4gICAgICAgICAgICAgICAgICAgIHdhdGVyLm9wYWNpdHkgPSAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKHNwLmFuZ2xlID09IDkwKXtcclxuICAgICAgICAgICAgICAgIHR1cm4uYWN0aXZlID10cnVlO1xyXG4gICAgICAgICAgICAgICAgdHVybi5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW1wiYTFcIl07XHJcbiAgICAgICAgICAgICAgICB0dXJuLmFuZ2xlID0gOTA7XHJcbiAgICAgICAgICAgICAgICBpZih0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICB3YXRlci5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHdhdGVyLmFuZ2xlID0gOTA7XHJcbiAgICAgICAgICAgICAgICAgICAgd2F0ZXIuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSB0aGlzLlVJW1wiX3Nwcml0ZUZyYW1lc1wiXVtcImJsb2NrMVwiXTtcclxuICAgICAgICAgICAgICAgICAgICB3YXRlci5vcGFjaXR5ID0gMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKGRpcmVjdGlvbiA9PSBcInVwXCIgfHwgZGlyZWN0aW9uID09IFwiZG93blwiKXtcclxuICAgICAgICAgICAgbGV0IHNwID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwic3BcIik7XHJcbiAgICAgICAgICAgIGlmKHNwLmFuZ2xlID09IC05MCl7XHJcbiAgICAgICAgICAgICAgICB0dXJuLmFjdGl2ZSA9dHJ1ZTtcclxuICAgICAgICAgICAgICAgIHdhdGVyLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB3YXRlci5vcGFjaXR5ID0gMDtcclxuICAgICAgICAgICAgICAgIGlmKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHR1cm4uYW5nbGUgPSBkaXJlY3Rpb249PVwidXBcIj8tOTA6MDtcclxuICAgICAgICAgICAgICAgICAgICB3YXRlci5hbmdsZSA9IGRpcmVjdGlvbj09XCJ1cFwiPy05MDowO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICB0dXJuLmFuZ2xlID0gZGlyZWN0aW9uPT1cInVwXCI/LTkwOjA7XHJcbiAgICAgICAgICAgICAgICAgICAgd2F0ZXIuYW5nbGUgPSBkaXJlY3Rpb249PVwidXBcIj8tOTA6MDtcclxuICAgICAgICAgICAgICAgIH1cclxuIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYoc3AuYW5nbGUgPT0gOTApe1xyXG4gICAgICAgICAgICAgICAgdHVybi5hY3RpdmUgPXRydWU7XHJcbiAgICAgICAgICAgICAgICB3YXRlci5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgd2F0ZXIub3BhY2l0eSA9IDA7XHJcbiAgICAgICAgICAgICAgICBpZih0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICB0dXJuLmFuZ2xlID0gZGlyZWN0aW9uPT1cInVwXCI/OTA6MTgwO1xyXG4gICAgICAgICAgICAgICAgICAgIHdhdGVyLmFuZ2xlID0gZGlyZWN0aW9uPT1cInVwXCI/OTA6MTgwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICB0dXJuLmFuZ2xlID0gZGlyZWN0aW9uPT1cInVwXCI/MTgwOjkwO1xyXG4gICAgICAgICAgICAgICAgICAgIHdhdGVyLmFuZ2xlID0gZGlyZWN0aW9uPT1cInVwXCI/MTgwOjkwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYoc3AuYW5nbGUgPT0gMCl7XHJcbiAgICAgICAgICAgICAgICB0dXJuLmFjdGl2ZSA9dHJ1ZTtcclxuICAgICAgICAgICAgICAgIHR1cm4uZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSB0aGlzLlVJW1wiX3Nwcml0ZUZyYW1lc1wiXVtcImExXCJdO1xyXG4gICAgICAgICAgICAgICAgdHVybi5hbmdsZSA9IDA7XHJcbiAgICAgICAgICAgICAgICBpZih0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICB3YXRlci5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHdhdGVyLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bXCJibG9jazFcIl07XHJcbiAgICAgICAgICAgICAgICAgICAgd2F0ZXIub3BhY2l0eSA9IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZihzcC5hbmdsZSA9PSAtMTgwKXtcclxuICAgICAgICAgICAgICAgIHR1cm4uYWN0aXZlID10cnVlO1xyXG4gICAgICAgICAgICAgICAgdHVybi5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW1wiYTFcIl07XHJcbiAgICAgICAgICAgICAgICB0dXJuLmFuZ2xlID0gMDtcclxuICAgICAgICAgICAgICAgIGlmKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHdhdGVyLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgd2F0ZXIuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSB0aGlzLlVJW1wiX3Nwcml0ZUZyYW1lc1wiXVtcImJsb2NrMVwiXTtcclxuICAgICAgICAgICAgICAgICAgICB3YXRlci5vcGFjaXR5ID0gMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXRfWGlfU29pbFR5cGUoZGlyZWN0aW9uLGVuZCxuYW1lKXtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIuaBr+WjpFwiLGRpcmVjdGlvbixuYW1lLHRoaXMuYmxvY2tfVHlwZSk7XHJcbiAgICAgICAgaWYodGhpcy5ibG9ja19UeXBlID09IGNjLkVudW0oQmxvY2tUeXBlKS5TdGFydCl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0X1hpX1NvaWwoZGlyZWN0aW9uLGZhbHNlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhpcy5ibG9ja19UeXBlID09IGNjLkVudW0oQmxvY2tUeXBlKS5OdW5qYSl7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tfVHlwZSA9IGNjLkVudW0oQmxvY2tUeXBlKS5Ob21hbDtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiYmdcIikuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSAgdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bXCJibG9ja19CZ1wiXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoZW5kICE9IG51bGwpe1xyXG4gICAgICAgICAgICBpZih0aGlzLmJsb2NrX1R5cGUgPT0gY2MuRW51bShCbG9ja1R5cGUpLkVuZCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbmlzaGkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRfWGlfU29pbChkaXJlY3Rpb24sdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZihuYW1lID09IFwid2F0ZXJcIikgY2MuZnguTm90aWZpY2F0aW9ucy5lbWl0KGNjLmZ4Lk1lc3NhZ2UubmV4dFdhdGVyLChlbmQrMSkpO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBjYy5meC5Ob3RpZmljYXRpb25zLmVtaXQoY2MuZnguTWVzc2FnZS5uZXh0LChlbmQrMSkpO1xyXG4gICAgICAgICAgICB9LCA0MDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhpcy5ibG9ja19UeXBlICE9IGNjLkVudW0oQmxvY2tUeXBlKS5FbmQgJiYgdGhpcy5ibG9ja19UeXBlICE9IGNjLkVudW0oQmxvY2tUeXBlKS5TdGFydCl7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tfVHlwZSA9IGNjLkVudW0oQmxvY2tUeXBlKS5YaV9Tb2lsO1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHRhcmdldCA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIlhpX1NvaWxcIik7IFxyXG4gICAgICAgIHRoaXMucGF0aF9UeXBlID0gZGlyZWN0aW9uO1xyXG4gICAgICAgIHRhcmdldC5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIHRhcmdldC5vcGFjaXR5ID0gMDtcclxuICAgICAgICBjYy50d2Vlbih0YXJnZXQpXHJcbiAgICAgICAgLnRvKDAuMSx7b3BhY2l0eToyNTV9KVxyXG4gICAgICAgIC50bygwLjEse29wYWNpdHk6MH0pXHJcbiAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgIGlmKGRpcmVjdGlvbiAhPSBudWxsICYmIGVuZCA9PSBudWxsKXtcclxuICAgICAgICAgICAgICAgIGxldCBkYXRhID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyOjAsXHJcbiAgICAgICAgICAgICAgICAgICAgdGltZTpjYy5meC5HYW1lQ29uZmlnLlRJTUVfSU5GTy53YXRlclNwZWVkWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6MCxcclxuICAgICAgICAgICAgICAgICAgICBjaXJjdWxhdGU6ZmFsc2VcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBpZihuYW1lID09IFwid2F0ZXJcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ydW5XYXRlcihkYXRhKTtcclxuICAgICAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXMucnVuUm9hZChkYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVwZWF0Um9hZCh0eXBlKXtcclxuICAgICAgICAvL+WmguaenOWPjOWQkemDveWNoOeUqOS6hui/mOi/m+adpeWwseeul+atu+S6hi0gXHJcbiAgICAgICAgdmFyIGpnID0gZmFsc2U7XHJcbiAgICAgICAgaWYodGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwidmVydGljYWwyXCIpLmFjdGl2ZSA9PSB0cnVlICYmIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcImhvcml6b250YWwyXCIpLmFjdGl2ZSA9PSB0cnVlKXtcclxuICAgICAgICAgICAgLy8gYWxlcnQoXCLmsrvmsLTlpLHotKVcIik7XHJcbiAgICAgICAgICAgIGpnID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYodHlwZSl7XHJcbiAgICAgICAgICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLmVtaXQoY2MuZnguTWVzc2FnZS5zaG93UmVzdWx0LFwibG9zZVwiKTtcclxuICAgICAgICAgICAgICAgIGNjLmZ4Lk5vdGlmaWNhdGlvbnMuZW1pdChjYy5meC5NZXNzYWdlLnNldERhdGEsZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIGlmKHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInR1cm4yXCIpLmFjdGl2ZSA9PSB0cnVlICYmIHRoaXMuYmxvY2tfVHlwZSAhPSBjYy5FbnVtKEJsb2NrVHlwZSkuWGlfU29pbCl7XHJcbiAgICAgICAgICAgIC8vIGFsZXJ0KFwi5rK75rC05aSx6LSlXCIpO1xyXG4gICAgICAgICAgICBqZyA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5lbWl0KGNjLmZ4Lk1lc3NhZ2Uuc2hvd1Jlc3VsdCxcImxvc2VcIik7XHJcbiAgICAgICAgICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLmVtaXQoY2MuZnguTWVzc2FnZS5zZXREYXRhLGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gamc7XHJcbiAgICB9XHJcblxyXG4gICAgLy/kv67nrZHot6/nur/miafooYxcclxuICAgIHJ1blJvYWQoZGF0YSl7XHJcbiAgICAgICAgaWYodGhpcy5wYXRoX1R5cGUgPT0gXCJlcnJcIil7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYoZGF0YS5jaXJjdWxhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5lbWl0KGNjLmZ4Lk1lc3NhZ2UubmV4dCxvcmRlcik7XHJcbiAgICAgICAgICAgIH0sIGRhdGEudGltZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGpnID0gdGhpcy5yZXBlYXRSb2FkKHRydWUpO1xyXG4gICAgICAgIGlmKGpnID09IHRydWUpIHJldHVybjtcclxuICAgICAgICB2YXIgdGFyZ2V0ID0gbnVsbDtcclxuICAgICAgICB2YXIgcHJvZ3Jlc3MgPSAxO1xyXG4gICAgICAgIHZhciB0aW1lID0gZGF0YS50aW1lO1xyXG4gICAgICAgIHZhciBvcmRlciA9IGRhdGEub3JkZXIgKyAxO1xyXG4gICAgICAgIHZhciByYW5kb20gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqNCArIDEpO1xyXG4gICAgICAgIHRhcmdldCA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInZlcnRpY2FsMlwiKTtcclxuICAgICAgICBpZih0YXJnZXQubmFtZSA9PSBcInZlcnRpY2FsXCIpe1xyXG4gICAgICAgICAgICBsZXQgd2F0ZXIxID0gdGFyZ2V0LmdldENoaWxkQnlOYW1lKFwid2F2ZVwiKS5nZXRDaGlsZEJ5TmFtZShcIndhdGVyMVwiKTtcclxuICAgICAgICAgICAgbGV0IHdhdGVyMiA9IHRhcmdldC5nZXRDaGlsZEJ5TmFtZShcIndhdmVcIikuZ2V0Q2hpbGRCeU5hbWUoXCJ3YXRlcjJcIik7XHJcbiAgICAgICAgICAgIGxldCB3YXRlcjMgPSB0YXJnZXQuZ2V0Q2hpbGRCeU5hbWUoXCJ3YXZlXCIpLmdldENoaWxkQnlOYW1lKFwid2F0ZXIzXCIpO1xyXG4gICAgICAgICAgICBsZXQgdGltZURlbGF5ID0gMC4xNTtcclxuICAgICAgICAgICAgd2F0ZXIxLnJ1bkFjdGlvbihjYy5zZXF1ZW5jZShjYy5tb3ZlVG8oMC42LGNjLnYyKHdhdGVyMS54LDEyMCkpLGNjLmRlbGF5VGltZSh0aW1lRGVsYXkpLFxyXG4gICAgICAgICAgICBjYy5jYWxsRnVuYygoKT0+e1xyXG4gICAgICAgICAgICAgICAgd2F0ZXIxLnkgPSAtMTIwXHJcbiAgICAgICAgICAgIH0pKS5yZXBlYXRGb3JldmVyKCkpO1xyXG4gICAgICAgICAgICB3YXRlcjIucnVuQWN0aW9uKGNjLnNlcXVlbmNlKGNjLm1vdmVUbygwLjYsY2MudjIod2F0ZXIyLngsMTIwKSksY2MuZGVsYXlUaW1lKHRpbWVEZWxheSksXHJcbiAgICAgICAgICAgIGNjLmNhbGxGdW5jKCgpPT57XHJcbiAgICAgICAgICAgICAgICB3YXRlcjIueSA9IC0xMjBcclxuICAgICAgICAgICAgfSkpLnJlcGVhdEZvcmV2ZXIoKSk7XHJcbiAgICAgICAgICAgIHdhdGVyMy5ydW5BY3Rpb24oY2Muc2VxdWVuY2UoY2MubW92ZVRvKDAuNixjYy52Mih3YXRlcjMueCwxMjApKSxjYy5kZWxheVRpbWUodGltZURlbGF5KSxcclxuICAgICAgICAgICAgY2MuY2FsbEZ1bmMoKCk9PntcclxuICAgICAgICAgICAgICAgIHdhdGVyMy55ID0gLTEyMFxyXG4gICAgICAgICAgICB9KSkucmVwZWF0Rm9yZXZlcigpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBuYW1lID0gXCJhXCIgKyByYW5kb207XHJcbiAgICAgICAgaWYodGhpcy5ibG9ja19UeXBlICE9IGNjLkVudW0oQmxvY2tUeXBlKS5SZWluZm9yY2UpdGFyZ2V0LmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bbmFtZV07XHJcblxyXG4gICAgICAgIGlmKHRhcmdldC5hY3RpdmUgPT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgIHRhcmdldCA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcImhvcml6b250YWwyXCIpO1xyXG4gICAgICAgICAgICBuYW1lID0gXCJiXCIgKyByYW5kb207XHJcbiAgICAgICAgICAgIGlmKHRoaXMuYmxvY2tfVHlwZSAhPSBjYy5FbnVtKEJsb2NrVHlwZSkuUmVpbmZvcmNlKSB0YXJnZXQuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSB0aGlzLlVJW1wiX3Nwcml0ZUZyYW1lc1wiXVtuYW1lXTtcclxuICAgICAgICB9IFxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMucGF0aF9UeXBlLGRhdGEub3JkZXIpO1xyXG4gICAgICAgIGlmKHRoaXMucGF0aF9UeXBlID09IGNjLkVudW0oUGF0aFR5cGUpLnVwKXtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0aGlzLnBhdGhfVHlwZSA9PSBjYy5FbnVtKFBhdGhUeXBlKS5kb3duKXtcclxuICAgICAgICAgICAgdGFyZ2V0LmFuZ2xlID0gMTgwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKHRoaXMucGF0aF9UeXBlID09IGNjLkVudW0oUGF0aFR5cGUpLmxlZnQpe1xyXG4gICAgICAgICAgICB0YXJnZXQuYW5nbGUgPSA5MDtcclxuICAgICAgICAgICAgbmFtZSA9IFwiYlwiICsgcmFuZG9tO1xyXG4gICAgICAgICAgICBpZih0aGlzLmJsb2NrX1R5cGUgIT0gY2MuRW51bShCbG9ja1R5cGUpLlJlaW5mb3JjZSkgdGFyZ2V0LmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bbmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYodGhpcy5wYXRoX1R5cGUgPT0gY2MuRW51bShQYXRoVHlwZSkucmlnaHQpe1xyXG4gICAgICAgICAgICB0YXJnZXQuYW5nbGUgPSAyNzA7XHJcbiAgICAgICAgICAgIG5hbWUgPSBcImJcIiArIHJhbmRvbTtcclxuICAgICAgICAgICAgaWYodGhpcy5ibG9ja19UeXBlICE9IGNjLkVudW0oQmxvY2tUeXBlKS5SZWluZm9yY2UpIHRhcmdldC5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW25hbWVdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ0dXJuMlwiKTtcclxuICAgICAgICAgICAgaWYodGFyZ2V0Lm5hbWUgPT0gXCJ0dXJuXCIpe1xyXG4gICAgICAgICAgICAgICAgbGV0IHdhdGVyID0gdGFyZ2V0LmdldENoaWxkQnlOYW1lKFwid2F2ZVwiKS5nZXRDaGlsZEJ5TmFtZShcIndhdGVyXCIpO1xyXG4gICAgICAgICAgICAgICAgd2F0ZXIub3BhY2l0eSA9IDBcclxuICAgICAgICAgICAgICAgIHdhdGVyLnJ1bkFjdGlvbihjYy5zZXF1ZW5jZShjYy5yb3RhdGVUbyg3LjIsLTEwODApLGNjLmRlbGF5VGltZSgwKSkucmVwZWF0Rm9yZXZlcigpKTtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHdhdGVyLm9wYWNpdHkgPSAyNTU7XHJcbiAgICAgICAgICAgICAgICB9LCAyMDApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAgIG5hbWUgPSBcImNcIiArIHJhbmRvbTtcclxuICAgICAgICAgICAgaWYodGhpcy5ibG9ja19UeXBlICE9IGNjLkVudW0oQmxvY2tUeXBlKS5SZWluZm9yY2UpdGFyZ2V0LmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bbmFtZV07XHJcbiAgICAgICAgICAgIHByb2dyZXNzID0gMC4yNTtcclxuICAgICAgICAgICAgaWYodGhpcy5wYXRoX1R5cGUgPT0gY2MuRW51bShQYXRoVHlwZSkudXBfbGVmdCl7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuc2V0UG9zaXRpb24oLXRoaXMucG9zX1NoaWZ0aW5nLC10aGlzLnBvc19TaGlmdGluZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZih0aGlzLnBhdGhfVHlwZSA9PSBjYy5FbnVtKFBhdGhUeXBlKS51cF9yaWdodCl7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuc2NhbGVYID0gLTE7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuc2V0UG9zaXRpb24odGhpcy5wb3NfU2hpZnRpbmcsLXRoaXMucG9zX1NoaWZ0aW5nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKHRoaXMucGF0aF9UeXBlID09IGNjLkVudW0oUGF0aFR5cGUpLmRvd25fbGVmdCl7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuYW5nbGUgPSAxODA7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuc2NhbGVYID0gLTE7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuc2V0UG9zaXRpb24oLXRoaXMucG9zX1NoaWZ0aW5nLHRoaXMucG9zX1NoaWZ0aW5nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKHRoaXMucGF0aF9UeXBlID09IGNjLkVudW0oUGF0aFR5cGUpLmRvd25fcmlnaHQpe1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LmFuZ2xlID0gMTgwO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNldFBvc2l0aW9uKHRoaXMucG9zX1NoaWZ0aW5nLHRoaXMucG9zX1NoaWZ0aW5nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKHRoaXMucGF0aF9UeXBlID09IGNjLkVudW0oUGF0aFR5cGUpLmxlZnRfdXApe1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LmFuZ2xlID0gLTkwO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNjYWxlWSA9IC0xO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNldFBvc2l0aW9uKHRoaXMucG9zX1NoaWZ0aW5nLHRoaXMucG9zX1NoaWZ0aW5nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKHRoaXMucGF0aF9UeXBlID09IGNjLkVudW0oUGF0aFR5cGUpLmxlZnRfZG93bil7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuYW5nbGUgPSA5MDtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5zZXRQb3NpdGlvbigtdGhpcy5wb3NfU2hpZnRpbmcsLXRoaXMucG9zX1NoaWZ0aW5nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKHRoaXMucGF0aF9UeXBlID09IGNjLkVudW0oUGF0aFR5cGUpLnJpZ2h0X3VwKXtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5hbmdsZSA9IC05MDtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5zZXRQb3NpdGlvbigtdGhpcy5wb3NfU2hpZnRpbmcsdGhpcy5wb3NfU2hpZnRpbmcpO1xyXG4gICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYodGhpcy5wYXRoX1R5cGUgPT0gY2MuRW51bShQYXRoVHlwZSkucmlnaHRfZG93bil7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuYW5nbGUgPSAtOTA7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuc2NhbGVYID0gLTE7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuc2V0UG9zaXRpb24oLXRoaXMucG9zX1NoaWZ0aW5nLC10aGlzLnBvc19TaGlmdGluZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYodGhpcy5wYXRoX1R5cGUgPT0gXCJSZWluZm9yY2VcIil7XHJcbiAgICAgICAgICAgIHRhcmdldCA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIlJlaW5mb3JjZVwiKTtcclxuICAgICAgICAgICAgaWYodGhpcy5ibG9ja19UeXBlICE9IGNjLkVudW0oQmxvY2tUeXBlKS5FbmQpdGhpcy5ibG9ja19UeXBlID0gY2MuRW51bShCbG9ja1R5cGUpLlJlaW5mb3JjZTtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwidmVydGljYWwyXCIpLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bXCJlMVwiXTtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwidHVybjJcIikuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSB0aGlzLlVJW1wiX3Nwcml0ZUZyYW1lc1wiXVtcImUzXCJdO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJob3Jpem9udGFsMlwiKS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW1wiZTJcIl07XHJcbiAgICAgICAgICAgIHRhcmdldC5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0YXJnZXQub3BhY2l0eSA9IDA7XHJcbiAgICAgICAgICAgIHByb2dyZXNzID0gMTtcclxuICAgICAgICAgICAgY2MudHdlZW4odGFyZ2V0KVxyXG4gICAgICAgICAgICAudG8oY2MuZnguR2FtZUNvbmZpZy5USU1FX0lORk8uUmVpbmZvcmNlU3BlZWQse29wYWNpdHk6MjU1fSlcclxuICAgICAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgICAgICBpZihkYXRhLmNpcmN1bGF0ZSlcclxuICAgICAgICAgICAgICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLmVtaXQoY2MuZnguTWVzc2FnZS5jaGFuZ2VNYXAsb3JkZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNjLmZ4Lk5vdGlmaWNhdGlvbnMuZW1pdChjYy5meC5NZXNzYWdlLm5leHQsb3JkZXIpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0aGlzLnBhdGhfVHlwZSA9PSBcIlhpX1NvaWxcIil7XHJcbiAgICAgICAgICAgIHRhcmdldC5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYodGhpcy5ibG9ja19UeXBlICE9IGNjLkVudW0oQmxvY2tUeXBlKS5FbmQgJiYgdGhpcy5ibG9ja19UeXBlICE9IGNjLkVudW0oQmxvY2tUeXBlKS5TdGFydClcclxuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tfVHlwZSA9IGNjLkVudW0oQmxvY2tUeXBlKS5YaV9Tb2lsO1xyXG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJYaV9Tb2lsXCIpOyBcclxuICAgICAgICAgICAgdGFyZ2V0LmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRhcmdldC5vcGFjaXR5ID0gMDtcclxuICAgICAgICAgICAgY2MudHdlZW4odGFyZ2V0KVxyXG4gICAgICAgICAgICAudG8oMC4wMSx7b3BhY2l0eToxfSlcclxuICAgICAgICAgICAgLnRvKDAuMDEse29wYWNpdHk6MH0pXHJcbiAgICAgICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgICAgICAgaWYoZGF0YS5jaXJjdWxhdGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNjLmZ4Lk5vdGlmaWNhdGlvbnMuZW1pdChjYy5meC5NZXNzYWdlLm5leHQsb3JkZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKHRoaXMucGF0aF9UeXBlID09IFwiRW5kXCIpe1xyXG4gICAgICAgICAgICB0YXJnZXQuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuYmxvY2tfVHlwZSAhPSBjYy5FbnVtKEJsb2NrVHlwZSkuRW5kICYmIHRoaXMuYmxvY2tfVHlwZSAhPSBjYy5FbnVtKEJsb2NrVHlwZSkuU3RhcnQpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2NrX1R5cGUgPSBjYy5FbnVtKEJsb2NrVHlwZSkuWGlfU29pbDtcclxuICAgICAgICAgICAgbGV0IHBvc1RlbXAgPSBkYXRhLmxhc3Q7XHJcbiAgICAgICAgICAgIHZhciBkaXJlY3Rpb24gPSBcInVwXCI7XHJcbiAgICAgICAgICAgIGlmKHRoaXMucG9zLnggLSBwb3NUZW1wLnggPj0gMSl7XHJcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBcInJpZ2h0XCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZih0aGlzLnBvcy54IC0gcG9zVGVtcC54IDw9IC0xKXtcclxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IFwibGVmdFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYodGhpcy5wb3MueSAtIHBvc1RlbXAueSA+PSAxKXtcclxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IFwiZG93blwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwi57uT5p2f5pa55ZCROlwiLGRpcmVjdGlvbik7XHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmZpbmlzaGkpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maW5pc2hpID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0X1hpX1NvaWwoZGlyZWN0aW9uLHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIHRhcmdldC5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZih0aGlzLmJsb2NrX1R5cGUgIT0gY2MuRW51bShCbG9ja1R5cGUpLlhpX1NvaWwpe1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LmdldENvbXBvbmVudChjYy5TcHJpdGUpLmZpbGxSYW5nZSA9IDA7XHJcbiAgICAgICAgICAgICAgICBjYy50d2Vlbih0YXJnZXQuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkpXHJcbiAgICAgICAgICAgICAgICAudG8odGltZSx7ZmlsbFJhbmdlOnByb2dyZXNzfSlcclxuICAgICAgICAgICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGRhdGEuY2lyY3VsYXRlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLmVtaXQoY2MuZnguTWVzc2FnZS5uZXh0LG9yZGVyKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0Lm9wYWNpdHkgPSAwO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LmdldENvbXBvbmVudChjYy5TcHJpdGUpLmZpbGxSYW5nZSA9IDE7XHJcbiAgICAgICAgICAgICAgICBjYy50d2Vlbih0YXJnZXQpXHJcbiAgICAgICAgICAgICAgICAudG8odGltZSx7b3BhY2l0eToyNTV9KVxyXG4gICAgICAgICAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZGF0YS5jaXJjdWxhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNjLmZ4Lk5vdGlmaWNhdGlvbnMuZW1pdChjYy5meC5NZXNzYWdlLm5leHQsb3JkZXIpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy/mtKrls7DmiafooYxcclxuICAgIHJ1bldhdGVyKGRhdGEpe1xyXG4gICAgICAgIGlmKHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIndhdGVyU3RhcnRcIikuYWN0aXZlID09IHRydWUgJiYgdGhpcy5ibG9ja19UeXBlID09IGNjLkVudW0oQmxvY2tUeXBlKS5TdGFydCl7XHJcbiAgICAgICAgICAgIC8vIHNwLmdldENoaWxkQnlOYW1lKFwid2F0ZXJTdGFydFwiKS5vcGFjaXR5ID0gMjU1O1xyXG4gICAgICAgICAgICBjYy50d2Vlbih0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ3YXRlclN0YXJ0XCIpKVxyXG4gICAgICAgICAgICAudG8oMC4yLHtvcGFjaXR5OjI1NX0pXHJcbiAgICAgICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmKHRoaXMucGF0aF9UeXBlID09IFwiZXJyXCIpe1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmKGRhdGEuY2lyY3VsYXRlKVxyXG4gICAgICAgICAgICAgICAgICAgIGNjLmZ4Lk5vdGlmaWNhdGlvbnMuZW1pdChjYy5meC5NZXNzYWdlLm5leHRXYXRlcixvcmRlcik7XHJcbiAgICAgICAgICAgIH0sIGRhdGEudGltZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy/lpoLmnpzlj4zlkJHpg73ljaDnlKjkuobov5jov5vmnaXlsLHnrpfmrbvkuoYtIFxyXG4gICAgICAgIGlmKHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInZlcnRpY2FsXCIpLmFjdGl2ZSA9PSB0cnVlICYmIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcImhvcml6b250YWxcIikuYWN0aXZlID09IHRydWUpe1xyXG4gICAgICAgICAgICAvLyBhbGVydChcIuayu+awtOWksei0pVwiKTtcclxuICAgICAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5lbWl0KGNjLmZ4Lk1lc3NhZ2Uuc2hvd1Jlc3VsdCxcImxvc2VcIik7XHJcbiAgICAgICAgICAgIGNjLmZ4Lk5vdGlmaWNhdGlvbnMuZW1pdChjYy5meC5NZXNzYWdlLnNldERhdGEsZmFsc2UpO1xyXG4gICAgICAgICAgICAvLyBjYy5kaXJlY3Rvci5sb2FkU2NlbmUoXCJHYW1lU2NlbmVcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGVsc2UgaWYodGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwidHVyblwiKS5hY3RpdmUgPT0gdHJ1ZSAmJiB0aGlzLmJsb2NrX1R5cGUgIT0gY2MuRW51bShCbG9ja1R5cGUpLlhpX1NvaWwpe1xyXG4gICAgICAgICAgICAvLyBhbGVydChcIuayu+awtOWksei0pVwiKTtcclxuICAgICAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5lbWl0KGNjLmZ4Lk1lc3NhZ2Uuc2hvd1Jlc3VsdCxcImxvc2VcIik7XHJcbiAgICAgICAgICAgIGNjLmZ4Lk5vdGlmaWNhdGlvbnMuZW1pdChjYy5meC5NZXNzYWdlLnNldERhdGEsZmFsc2UpO1xyXG4gICAgICAgICAgICAvLyBjYy5kaXJlY3Rvci5sb2FkU2NlbmUoXCJHYW1lU2NlbmVcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHRhcmdldCA9IG51bGw7XHJcbiAgICAgICAgdmFyIHByb2dyZXNzID0gMTtcclxuICAgICAgICB2YXIgdGltZSA9IGRhdGEudGltZTtcclxuICAgICAgICB2YXIgb3JkZXIgPSBkYXRhLm9yZGVyICsgMTtcclxuICAgICAgICB2YXIgcmFuZG9tID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjQgKyAxKTtcclxuICAgICAgICB0YXJnZXQgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ2ZXJ0aWNhbFwiKTtcclxuICAgICAgICBpZih0YXJnZXQubmFtZSA9PSBcInZlcnRpY2FsXCIpe1xyXG4gICAgICAgICAgICBsZXQgd2F0ZXIxID0gdGFyZ2V0LmdldENoaWxkQnlOYW1lKFwid2F2ZVwiKS5nZXRDaGlsZEJ5TmFtZShcIndhdGVyMVwiKTtcclxuICAgICAgICAgICAgbGV0IHdhdGVyMiA9IHRhcmdldC5nZXRDaGlsZEJ5TmFtZShcIndhdmVcIikuZ2V0Q2hpbGRCeU5hbWUoXCJ3YXRlcjJcIik7XHJcbiAgICAgICAgICAgIGxldCB3YXRlcjMgPSB0YXJnZXQuZ2V0Q2hpbGRCeU5hbWUoXCJ3YXZlXCIpLmdldENoaWxkQnlOYW1lKFwid2F0ZXIzXCIpO1xyXG4gICAgICAgICAgICBsZXQgdGltZURlbGF5ID0gMC4xNTtcclxuICAgICAgICAgICAgd2F0ZXIxLnJ1bkFjdGlvbihjYy5zZXF1ZW5jZShjYy5tb3ZlVG8oMC42LGNjLnYyKHdhdGVyMS54LDEyMCkpLGNjLmRlbGF5VGltZSh0aW1lRGVsYXkpLFxyXG4gICAgICAgICAgICBjYy5jYWxsRnVuYygoKT0+e1xyXG4gICAgICAgICAgICAgICAgd2F0ZXIxLnkgPSAtMTIwXHJcbiAgICAgICAgICAgIH0pKS5yZXBlYXRGb3JldmVyKCkpO1xyXG4gICAgICAgICAgICB3YXRlcjIucnVuQWN0aW9uKGNjLnNlcXVlbmNlKGNjLm1vdmVUbygwLjYsY2MudjIod2F0ZXIyLngsMTIwKSksY2MuZGVsYXlUaW1lKHRpbWVEZWxheSksXHJcbiAgICAgICAgICAgIGNjLmNhbGxGdW5jKCgpPT57XHJcbiAgICAgICAgICAgICAgICB3YXRlcjIueSA9IC0xMjBcclxuICAgICAgICAgICAgfSkpLnJlcGVhdEZvcmV2ZXIoKSk7XHJcbiAgICAgICAgICAgIHdhdGVyMy5ydW5BY3Rpb24oY2Muc2VxdWVuY2UoY2MubW92ZVRvKDAuNixjYy52Mih3YXRlcjMueCwxMjApKSxjYy5kZWxheVRpbWUodGltZURlbGF5KSxcclxuICAgICAgICAgICAgY2MuY2FsbEZ1bmMoKCk9PntcclxuICAgICAgICAgICAgICAgIHdhdGVyMy55ID0gLTEyMFxyXG4gICAgICAgICAgICB9KSkucmVwZWF0Rm9yZXZlcigpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBuYW1lID0gXCJhXCIgKyByYW5kb207XHJcbiAgICAgICAgLy8gaWYodGhpcy5ibG9ja19UeXBlICE9IGNjLkVudW0oQmxvY2tUeXBlKS5SZWluZm9yY2UpdGFyZ2V0LmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bbmFtZV07XHJcblxyXG4gICAgICAgIGlmKHRhcmdldC5hY3RpdmUgPT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgIHRhcmdldCA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcImhvcml6b250YWxcIik7XHJcbiAgICAgICAgICAgIGxldCB3YXRlcjEgPSB0YXJnZXQuZ2V0Q2hpbGRCeU5hbWUoXCJ3YXZlXCIpLmdldENoaWxkQnlOYW1lKFwid2F0ZXIxXCIpO1xyXG4gICAgICAgICAgICBsZXQgd2F0ZXIyID0gdGFyZ2V0LmdldENoaWxkQnlOYW1lKFwid2F2ZVwiKS5nZXRDaGlsZEJ5TmFtZShcIndhdGVyMlwiKTtcclxuICAgICAgICAgICAgbGV0IHdhdGVyMyA9IHRhcmdldC5nZXRDaGlsZEJ5TmFtZShcIndhdmVcIikuZ2V0Q2hpbGRCeU5hbWUoXCJ3YXRlcjNcIik7XHJcbiAgICAgICAgICAgIGxldCB0aW1lRGVsYXkgPSAwLjE1O1xyXG4gICAgICAgICAgICB3YXRlcjEucnVuQWN0aW9uKGNjLnNlcXVlbmNlKGNjLm1vdmVUbygwLjYsY2MudjIod2F0ZXIxLngsMTIwKSksY2MuZGVsYXlUaW1lKHRpbWVEZWxheSksXHJcbiAgICAgICAgICAgIGNjLmNhbGxGdW5jKCgpPT57XHJcbiAgICAgICAgICAgICAgICB3YXRlcjEueSA9IC0xMjBcclxuICAgICAgICAgICAgfSkpLnJlcGVhdEZvcmV2ZXIoKSk7XHJcbiAgICAgICAgICAgIHdhdGVyMi5ydW5BY3Rpb24oY2Muc2VxdWVuY2UoY2MubW92ZVRvKDAuNixjYy52Mih3YXRlcjIueCwxMjApKSxjYy5kZWxheVRpbWUodGltZURlbGF5KSxcclxuICAgICAgICAgICAgY2MuY2FsbEZ1bmMoKCk9PntcclxuICAgICAgICAgICAgICAgIHdhdGVyMi55ID0gLTEyMFxyXG4gICAgICAgICAgICB9KSkucmVwZWF0Rm9yZXZlcigpKTtcclxuICAgICAgICAgICAgd2F0ZXIzLnJ1bkFjdGlvbihjYy5zZXF1ZW5jZShjYy5tb3ZlVG8oMC42LGNjLnYyKHdhdGVyMy54LDEyMCkpLGNjLmRlbGF5VGltZSh0aW1lRGVsYXkpLFxyXG4gICAgICAgICAgICBjYy5jYWxsRnVuYygoKT0+e1xyXG4gICAgICAgICAgICAgICAgd2F0ZXIzLnkgPSAtMTIwXHJcbiAgICAgICAgICAgIH0pKS5yZXBlYXRGb3JldmVyKCkpO1xyXG4gICAgICAgICAgICBuYW1lID0gXCJiXCIgKyByYW5kb207XHJcbiAgICAgICAgICAgIC8vaWYodGhpcy5ibG9ja19UeXBlICE9IGNjLkVudW0oQmxvY2tUeXBlKS5SZWluZm9yY2UpIHRhcmdldC5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW25hbWVdO1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5wYXRoX1R5cGUsZGF0YS5vcmRlcik7XHJcbiAgICAgICAgaWYodGhpcy5wYXRoX1R5cGUgPT0gY2MuRW51bShQYXRoVHlwZSkudXApe1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKHRoaXMucGF0aF9UeXBlID09IGNjLkVudW0oUGF0aFR5cGUpLmRvd24pe1xyXG4gICAgICAgICAgICB0YXJnZXQuYW5nbGUgPSAxODA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYodGhpcy5wYXRoX1R5cGUgPT0gY2MuRW51bShQYXRoVHlwZSkubGVmdCl7XHJcbiAgICAgICAgICAgIHRhcmdldC5hbmdsZSA9IDkwO1xyXG4gICAgICAgICAgICBuYW1lID0gXCJiXCIgKyByYW5kb207XHJcbiAgICAgICAgICAgIC8vaWYodGhpcy5ibG9ja19UeXBlICE9IGNjLkVudW0oQmxvY2tUeXBlKS5SZWluZm9yY2UpIHRhcmdldC5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW25hbWVdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKHRoaXMucGF0aF9UeXBlID09IGNjLkVudW0oUGF0aFR5cGUpLnJpZ2h0KXtcclxuICAgICAgICAgICAgdGFyZ2V0LmFuZ2xlID0gMjcwO1xyXG4gICAgICAgICAgICBuYW1lID0gXCJiXCIgKyByYW5kb207XHJcbiAgICAgICAgICAgIC8vaWYodGhpcy5ibG9ja19UeXBlICE9IGNjLkVudW0oQmxvY2tUeXBlKS5SZWluZm9yY2UpIHRhcmdldC5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW25hbWVdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ0dXJuXCIpO1xyXG4gICAgICAgICAgICBpZih0YXJnZXQubmFtZSA9PSBcInR1cm5cIil7XHJcbiAgICAgICAgICAgICAgICBsZXQgd2F0ZXIgPSB0YXJnZXQuZ2V0Q2hpbGRCeU5hbWUoXCJ3YXZlXCIpLmdldENoaWxkQnlOYW1lKFwid2F0ZXJcIik7XHJcbiAgICAgICAgICAgICAgICB3YXRlci5vcGFjaXR5ID0gMFxyXG4gICAgICAgICAgICAgICAgd2F0ZXIucnVuQWN0aW9uKGNjLnNlcXVlbmNlKGNjLnJvdGF0ZVRvKDcuMiwtMTA4MCksY2MuZGVsYXlUaW1lKDApKS5yZXBlYXRGb3JldmVyKCkpO1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2F0ZXIub3BhY2l0eSA9IDI1NTtcclxuICAgICAgICAgICAgICAgIH0sIDIwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbmFtZSA9IFwiY1wiICsgcmFuZG9tO1xyXG4gICAgICAgICAgICAvL2lmKHRoaXMuYmxvY2tfVHlwZSAhPSBjYy5FbnVtKEJsb2NrVHlwZSkuUmVpbmZvcmNlKXRhcmdldC5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW25hbWVdO1xyXG4gICAgICAgICAgICBwcm9ncmVzcyA9IDAuMjU7XHJcbiAgICAgICAgICAgIGlmKHRoaXMucGF0aF9UeXBlID09IGNjLkVudW0oUGF0aFR5cGUpLnVwX2xlZnQpe1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNldFBvc2l0aW9uKC10aGlzLnBvc19TaGlmdGluZywtdGhpcy5wb3NfU2hpZnRpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYodGhpcy5wYXRoX1R5cGUgPT0gY2MuRW51bShQYXRoVHlwZSkudXBfcmlnaHQpe1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNjYWxlWCA9IC0xO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNldFBvc2l0aW9uKHRoaXMucG9zX1NoaWZ0aW5nLC10aGlzLnBvc19TaGlmdGluZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZih0aGlzLnBhdGhfVHlwZSA9PSBjYy5FbnVtKFBhdGhUeXBlKS5kb3duX2xlZnQpe1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LmFuZ2xlID0gMTgwO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNjYWxlWCA9IC0xO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNldFBvc2l0aW9uKC10aGlzLnBvc19TaGlmdGluZyx0aGlzLnBvc19TaGlmdGluZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZih0aGlzLnBhdGhfVHlwZSA9PSBjYy5FbnVtKFBhdGhUeXBlKS5kb3duX3JpZ2h0KXtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5hbmdsZSA9IDE4MDtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5zZXRQb3NpdGlvbih0aGlzLnBvc19TaGlmdGluZyx0aGlzLnBvc19TaGlmdGluZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZih0aGlzLnBhdGhfVHlwZSA9PSBjYy5FbnVtKFBhdGhUeXBlKS5sZWZ0X3VwKXtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5hbmdsZSA9IC05MDtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5zY2FsZVkgPSAtMTtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5zZXRQb3NpdGlvbih0aGlzLnBvc19TaGlmdGluZyx0aGlzLnBvc19TaGlmdGluZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZih0aGlzLnBhdGhfVHlwZSA9PSBjYy5FbnVtKFBhdGhUeXBlKS5sZWZ0X2Rvd24pe1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LmFuZ2xlID0gOTA7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuc2V0UG9zaXRpb24oLXRoaXMucG9zX1NoaWZ0aW5nLC10aGlzLnBvc19TaGlmdGluZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZih0aGlzLnBhdGhfVHlwZSA9PSBjYy5FbnVtKFBhdGhUeXBlKS5yaWdodF91cCl7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuYW5nbGUgPSAtOTA7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuc2V0UG9zaXRpb24oLXRoaXMucG9zX1NoaWZ0aW5nLHRoaXMucG9zX1NoaWZ0aW5nKTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKHRoaXMucGF0aF9UeXBlID09IGNjLkVudW0oUGF0aFR5cGUpLnJpZ2h0X2Rvd24pe1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LmFuZ2xlID0gLTkwO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNjYWxlWCA9IC0xO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNldFBvc2l0aW9uKC10aGlzLnBvc19TaGlmdGluZywtdGhpcy5wb3NfU2hpZnRpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGlmKHRoaXMucGF0aF9UeXBlID09IFwiUmVpbmZvcmNlXCIpe1xyXG4gICAgICAgIC8vICAgICB0YXJnZXQgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJSZWluZm9yY2VcIik7XHJcbiAgICAgICAgLy8gICAgIHRoaXMuYmxvY2tfVHlwZSA9IGNjLkVudW0oQmxvY2tUeXBlKS5SZWluZm9yY2U7XHJcbiAgICAgICAgLy8gICAgIC8vIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInZlcnRpY2FsXCIpLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bXCJlMVwiXTtcclxuICAgICAgICAvLyAgICAgLy8gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwidHVyblwiKS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW1wiZTNcIl07XHJcbiAgICAgICAgLy8gICAgIC8vIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcImhvcml6b250YWxcIikuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSB0aGlzLlVJW1wiX3Nwcml0ZUZyYW1lc1wiXVtcImUyXCJdO1xyXG4gICAgICAgIC8vICAgICB0YXJnZXQuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAvLyAgICAgdGFyZ2V0Lm9wYWNpdHkgPSAwO1xyXG4gICAgICAgIC8vICAgICBwcm9ncmVzcyA9IDE7XHJcbiAgICAgICAgLy8gICAgIGNjLnR3ZWVuKHRhcmdldClcclxuICAgICAgICAvLyAgICAgLnRvKGNjLmZ4LkdhbWVDb25maWcuVElNRV9JTkZPLlJlaW5mb3JjZVNwZWVkLHtvcGFjaXR5OjI1NX0pXHJcbiAgICAgICAgLy8gICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgIC8vICAgICAgICAgaWYoZGF0YS5jaXJjdWxhdGUpXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5lbWl0KGNjLmZ4Lk1lc3NhZ2UuY2hhbmdlTWFwLG9yZGVyKTtcclxuICAgICAgICAvLyAgICAgICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLmVtaXQoY2MuZnguTWVzc2FnZS5uZXh0V2F0ZXIsb3JkZXIpO1xyXG4gICAgICAgIC8vICAgICB9KVxyXG4gICAgICAgIC8vICAgICAuc3RhcnQoKTtcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgLy8gZWxzZSBpZih0aGlzLnBhdGhfVHlwZSA9PSBcIlhpX1NvaWxcIil7XHJcbiAgICAgICAgLy8gICAgIHRhcmdldC5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAvLyAgICAgdGhpcy5ibG9ja19UeXBlID0gY2MuRW51bShCbG9ja1R5cGUpLlhpX1NvaWw7XHJcbiAgICAgICAgLy8gICAgIHRhcmdldCA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIlhpX1NvaWxcIik7IFxyXG4gICAgICAgIC8vICAgICB0YXJnZXQuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAvLyAgICAgdGFyZ2V0Lm9wYWNpdHkgPSAwO1xyXG4gICAgICAgIC8vICAgICBjYy50d2Vlbih0YXJnZXQpXHJcbiAgICAgICAgLy8gICAgIC50bygwLjAxLHtvcGFjaXR5OjF9KVxyXG4gICAgICAgIC8vICAgICAudG8oMC4wMSx7b3BhY2l0eTowfSlcclxuICAgICAgICAvLyAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgLy8gICAgICAgICBpZihkYXRhLmNpcmN1bGF0ZSl7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5lbWl0KGNjLmZ4Lk1lc3NhZ2UubmV4dFdhdGVyLG9yZGVyKTtcclxuICAgICAgICAvLyAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAvLyAgICAgfSlcclxuICAgICAgICAvLyAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIGlmKHRoaXMucGF0aF9UeXBlID09IFwiRW5kXCIpe1xyXG4gICAgICAgICAgICB0YXJnZXQuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuYmxvY2tfVHlwZSA9PSBjYy5FbnVtKEJsb2NrVHlwZSkuRW5kKXtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIndhdGVyU3RhcnRcIikuYWN0aXZlID09IHRydWUgJiYgdGhpcy5ibG9ja19UeXBlID09IGNjLkVudW0oQmxvY2tUeXBlKS5FbmQpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNjLnR3ZWVuKHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIndhdGVyU3RhcnRcIikpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRvKDAuMix7b3BhY2l0eToyNTV9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5jYWxsKCgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsZXJ0KFwi5rK75rC05oiQ5YqfXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLmVtaXQoY2MuZnguTWVzc2FnZS5zaG93UmVzdWx0LFwid2luXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLmVtaXQoY2MuZnguTWVzc2FnZS5zZXREYXRhLHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmxldmVsIDwgNyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8ubGV2ZWwgKz0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNjLmRpcmVjdG9yLmxvYWRTY2VuZShcIkdhbWVTY2VuZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgNTAwKTtcclxuICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgIHRhcmdldCA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkVuZFwiKTsgXHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5vcGFjaXR5ID0gMDtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgcG9zVGVtcCA9IGRhdGEubGFzdDtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMucG9zLnggLSBwb3NUZW1wLnggPj0gMSl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmFuZ2xlID0gLTkwO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYodGhpcy5wb3MueCAtIHBvc1RlbXAueCA8PSAtMSl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmFuZ2xlID0gOTA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmKHRoaXMucG9zLnkgLSBwb3NUZW1wLnkgPj0gMSl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmFuZ2xlID0gMTgwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGNjLnR3ZWVuKHRhcmdldClcclxuICAgICAgICAgICAgICAgIC50bygwLjUse29wYWNpdHk6MjU1fSlcclxuICAgICAgICAgICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFsZXJ0KFwi5rK75rC05aSx6LSlXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5lbWl0KGNjLmZ4Lk1lc3NhZ2Uuc2hvd1Jlc3VsdCxcImxvc2VcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5lbWl0KGNjLmZ4Lk1lc3NhZ2Uuc2V0RGF0YSxmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY2MuZGlyZWN0b3IubG9hZFNjZW5lKFwiR2FtZVNjZW5lXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgdGFyZ2V0LmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRhcmdldC5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5maWxsUmFuZ2UgPSAwO1xyXG4gICAgICAgICAgICBjYy50d2Vlbih0YXJnZXQuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkpXHJcbiAgICAgICAgICAgIC50byh0aW1lLHtmaWxsUmFuZ2U6cHJvZ3Jlc3N9KVxyXG4gICAgICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgICAgIGlmKGRhdGEuY2lyY3VsYXRlKVxyXG4gICAgICAgICAgICAgICAgICAgIGNjLmZ4Lk5vdGlmaWNhdGlvbnMuZW1pdChjYy5meC5NZXNzYWdlLm5leHRXYXRlcixvcmRlcik7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gdXBkYXRlIChkdCkge31cclxufVxyXG4iXX0=