857 lines
118 KiB
JavaScript
857 lines
118 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, 'b26a49RCSFPT4C+F7xAd62t', 'GameManager');
|
|
// Script/GameManager.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 });
|
|
var GameData_1 = require("./GameData");
|
|
var GameTool_1 = require("./tool/GameTool");
|
|
var Notification_1 = require("./tool/Notification");
|
|
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.Camera = null;
|
|
_this.topUI = null;
|
|
_this.Player = null;
|
|
_this.Ground = null;
|
|
_this.Xin = null;
|
|
_this.time = null;
|
|
_this.GameOver = null;
|
|
_this.Tip = null;
|
|
_this.blockPrefab = [];
|
|
return _this;
|
|
}
|
|
GameManager_1 = GameManager;
|
|
// LIFE-CYCLE CALLBACKS:
|
|
GameManager.prototype.onLoad = function () {
|
|
cc.game.setFrameRate(61);
|
|
// 示例使用
|
|
var manager = cc.director.getCollisionManager();
|
|
manager.enabled = true;
|
|
// manager.enabledDebugDraw = true;
|
|
GameManager_1._instance = this;
|
|
// GameData._instance.GM_INFO.probation = false;
|
|
this.Air = [];
|
|
this.Air2 = [];
|
|
};
|
|
GameManager.prototype.onEnable = function () {
|
|
Notification_1.Notification.on("createBlock", this.createBlock, this);
|
|
Notification_1.Notification.on("addScore", this.addScore, this);
|
|
Notification_1.Notification.on("createCrackBlock", this.createCrackBlock, this);
|
|
Notification_1.Notification.on("showGround", this.showGround, this);
|
|
Notification_1.Notification.on("death", this.getDeath, this);
|
|
Notification_1.Notification.on("jump", this.jump, this);
|
|
Notification_1.Notification.on("setData", this.setData, this);
|
|
};
|
|
GameManager.prototype.onDestroy = function () {
|
|
Notification_1.Notification.off("createBlock", this.createBlock);
|
|
Notification_1.Notification.off("addScore", this.addScore);
|
|
Notification_1.Notification.off("createCrackBlock", this.createCrackBlock);
|
|
Notification_1.Notification.off("death", this.getDeath);
|
|
Notification_1.Notification.off("jump", this.jump);
|
|
Notification_1.Notification.off("showGround", this.showGround);
|
|
Notification_1.Notification.off("setData", this.setData);
|
|
};
|
|
//根据是否全面屏,做独立适配方面
|
|
GameManager.prototype.fit = function () {
|
|
this.node.getChildByName("bg2").y = -2167.675;
|
|
var jg = this.setFit();
|
|
if (!jg) {
|
|
this.node.getChildByName("bg2").y = -2100;
|
|
this.topUI.y = 660;
|
|
}
|
|
};
|
|
//判断全面屏
|
|
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.init = function () {
|
|
this.drop = this.topUI.y - this.Camera.node.y;
|
|
this.score = 0;
|
|
this.oldSpeed = 10;
|
|
this.guide = -1;
|
|
this.begin = true;
|
|
this.over = false;
|
|
this.interfere = false;
|
|
this.round = 0;
|
|
this.level = 0;
|
|
GameData_1.default._instance.GM_INFO.levelMax = 1;
|
|
GameData_1.default._instance.GM_INFO.difficultyMax = 1;
|
|
GameData_1.default._instance.GM_INFO.life = 3;
|
|
this.blockArray = [];
|
|
this.difficultyArray = 0;
|
|
this.cameraMove = false;
|
|
this.countTime = 180;
|
|
this.topUI.getChildByName("xin1").active = true;
|
|
this.topUI.getChildByName("xin2").active = true;
|
|
this.topUI.getChildByName("xin3").active = true;
|
|
this.topUI.getChildByName("star1").active = false;
|
|
this.topUI.getChildByName("star2").active = false;
|
|
this.topUI.getChildByName("star3").active = false;
|
|
GameData_1.default._instance.LEVEL_init();
|
|
this.schedule(this.updateCountDownTime, 1);
|
|
};
|
|
GameManager.prototype.start = function () {
|
|
var _this = this;
|
|
// this.node.on(cc.Node.EventType.TOUCH_START, this.jump, this);
|
|
this.fit();
|
|
this.init();
|
|
// GameData._instance.GM_INFO.probation = false;
|
|
if (GameData_1.default._instance.GM_INFO.probation) {
|
|
this.Player.getComponent("Player").jumpPause = true;
|
|
var tip = this.Tip.getChildByName("tip");
|
|
this.tipShow(tip, -1, true);
|
|
}
|
|
else {
|
|
this.node.getChildByName("Begin").opacity = 0;
|
|
this.node.getChildByName("Begin").scale = 2;
|
|
if (this.node.getChildByName("Begin")) {
|
|
cc.tween(this.node.getChildByName("Begin"))
|
|
.to(0.5, { opacity: 255, scale: 1 })
|
|
.delay(0.5)
|
|
.to(0.5, { opacity: 0, scale: 0 })
|
|
.call(function () {
|
|
_this.startGame();
|
|
})
|
|
.start();
|
|
}
|
|
else {
|
|
setTimeout(function () {
|
|
_this.startGame();
|
|
}, 1000);
|
|
}
|
|
}
|
|
};
|
|
//开启引导
|
|
GameManager.prototype.startGuide = function (type, revive) {
|
|
var _this = this;
|
|
this.guide = type;
|
|
console.log("startGuide", type);
|
|
if (type == 0) {
|
|
this.careteGuideBlock(1);
|
|
}
|
|
else if (type == 2) {
|
|
var block = this.node.getChildByName("Block").children[this.node.getChildByName("Block").children.length - 1];
|
|
cc.tween(block)
|
|
.to(0.7, { x: 0 })
|
|
.start();
|
|
this.tipHide("tip2", 3, false);
|
|
}
|
|
else if (type == 3) {
|
|
if (revive == true) {
|
|
this.round += 1;
|
|
this.careteGuideBlock(3);
|
|
}
|
|
else {
|
|
var tip = this.Tip.getChildByName("tip3");
|
|
this.tipShow(tip, type, false);
|
|
setTimeout(function () {
|
|
_this.tipHide("tip3", null, false);
|
|
_this.round += 1;
|
|
_this.careteGuideBlock(3);
|
|
}, 3000);
|
|
}
|
|
}
|
|
else if (type == 4) {
|
|
this.round += 1;
|
|
this.careteGuideBlock(4);
|
|
}
|
|
else if (type == 5) {
|
|
this.round += 1;
|
|
this.careteGuideBlock(5);
|
|
}
|
|
else if (type == 6) {
|
|
var block = this.node.getChildByName("Block").children[this.node.getChildByName("Block").children.length - 1];
|
|
cc.tween(block)
|
|
.to(0.7, { x: 0 })
|
|
.start();
|
|
this.tipHide("tip4", 7, revive);
|
|
}
|
|
else if (type == 7) {
|
|
if (revive == true) {
|
|
this.round += 1;
|
|
this.careteGuideBlock(7);
|
|
}
|
|
else {
|
|
var tip = this.Tip.getChildByName("tip5");
|
|
this.tipShow(tip, type, false);
|
|
setTimeout(function () {
|
|
_this.tipHide("tip5", null, revive);
|
|
_this.round += 1;
|
|
_this.careteGuideBlock(7);
|
|
}, 2000);
|
|
}
|
|
}
|
|
else if (type == 8) {
|
|
this.round += 1;
|
|
this.careteGuideBlock(8);
|
|
}
|
|
else if (type == 9) {
|
|
this.Player.getComponent("Player").jumpPause = true;
|
|
var tip_1 = this.Tip.getChildByName("tip6");
|
|
setTimeout(function () {
|
|
_this.tipShow(tip_1, type, false);
|
|
}, 1000);
|
|
}
|
|
};
|
|
GameManager.prototype.tipShow = function (tipName, type, showNext) {
|
|
var _this = this;
|
|
var tip = tipName;
|
|
var left = this.Tip.getChildByName("left");
|
|
var right = this.Tip.getChildByName("right");
|
|
left.width = 0;
|
|
right.width = 0;
|
|
tip.opacity = 0;
|
|
cc.tween(left)
|
|
.to(0.25, { width: 348 })
|
|
.start();
|
|
cc.tween(right)
|
|
.to(0.25, { width: 348 })
|
|
.start();
|
|
cc.tween(tip)
|
|
.delay(0.15)
|
|
.to(0.15, { opacity: 255 })
|
|
.call(function () {
|
|
_this.guide = type;
|
|
if (type == 5)
|
|
_this.guide = 6;
|
|
if (type == 5 || type == 1)
|
|
_this.Player.getComponent("Player").jumpPause = false;
|
|
})
|
|
.start();
|
|
if (showNext == true) {
|
|
this.Tip.getChildByName("btn_next").active = true;
|
|
this.Tip.getChildByName("btn_jump").active = true;
|
|
cc.tween(this.Tip.getChildByName("btn_next"))
|
|
.delay(0.5)
|
|
.to(0.2, { opacity: 255 })
|
|
.start();
|
|
cc.tween(this.Tip.getChildByName("btn_jump"))
|
|
.delay(0.5)
|
|
.to(0.2, { opacity: 255 })
|
|
.start();
|
|
}
|
|
if (tip.name == "tip6") {
|
|
this.Tip.getChildByName("btn_start").active = true;
|
|
cc.tween(this.Tip.getChildByName("btn_start"))
|
|
.delay(1)
|
|
.to(0.2, { opacity: 255 })
|
|
.start();
|
|
}
|
|
};
|
|
//隐藏
|
|
GameManager.prototype.tipHide = function (tipName, num, revive) {
|
|
var _this = this;
|
|
var tip = this.Tip.getChildByName(tipName);
|
|
var left = this.Tip.getChildByName("left");
|
|
var right = this.Tip.getChildByName("right");
|
|
cc.tween(left)
|
|
.delay(0.1)
|
|
.to(0.25, { width: 0 })
|
|
.start();
|
|
cc.tween(right)
|
|
.delay(0.1)
|
|
.to(0.25, { width: 0 })
|
|
.start();
|
|
cc.tween(tip)
|
|
.to(0.12, { opacity: 0 })
|
|
.delay(1.5)
|
|
.call(function () {
|
|
if (tip.name != "tip3" && tipName != "tip5") {
|
|
_this.Player.getComponent("Player").jumpPause = true;
|
|
}
|
|
if (num != null) {
|
|
_this.startGuide(num, revive);
|
|
}
|
|
})
|
|
.start();
|
|
};
|
|
GameManager.prototype.careteGuideBlock = function (type) {
|
|
var _this = this;
|
|
this.Ground.active = false;
|
|
var tip = this.Tip.getChildByName("tip2");
|
|
if (type == 5) {
|
|
tip = this.Tip.getChildByName("tip4");
|
|
}
|
|
this.Player.getComponent("Player").jumpPause = true;
|
|
var block = cc.instantiate(this.blockPrefab[13]);
|
|
var height = this.Player.getComponent("Player").basicHeight + GameData_1.default._instance.GM_INFO.blockMin;
|
|
if (type > 4) {
|
|
height += block.height + GameData_1.default._instance.GM_INFO.blockMax;
|
|
GameData_1.default._instance.CLICK_DATA.height = true;
|
|
}
|
|
block.setPosition(cc.v2(this.round % 2 == 0 ? 480 : -480, height));
|
|
block.parent = this.node.getChildByName("Block");
|
|
var num = 150;
|
|
var time = 3;
|
|
if (type == 1 || type == 5) {
|
|
num = this.round % 2 == 0 ? num : -num;
|
|
}
|
|
else if (type == 3 || type == 4 || type == 7 || type == 8 || type == 9) {
|
|
this.Player.getComponent("Player").jumpPause = false;
|
|
num = -block.x;
|
|
time = 7;
|
|
}
|
|
cc.tween(block)
|
|
.to(time, { x: num })
|
|
.call(function () {
|
|
if (type == 1 || type == 5) {
|
|
if (type == 1)
|
|
_this.Player.getComponent("Player").jumpPause = true;
|
|
_this.tipShow(tip, type, false);
|
|
}
|
|
})
|
|
.start();
|
|
};
|
|
GameManager.prototype.showGround = function (tempY) {
|
|
var _this = this;
|
|
setTimeout(function () {
|
|
_this.Ground.active = true;
|
|
_this.Ground.y = tempY;
|
|
}, 500);
|
|
};
|
|
GameManager.prototype.guideStart = function () {
|
|
this.tipHide("tip6", null, false);
|
|
this.Tip.getChildByName("btn_next").active = false;
|
|
this.Tip.getChildByName("btn_jump").active = false;
|
|
this.Tip.getChildByName("btn_start").active = false;
|
|
GameData_1.default._instance.GM_INFO.probation = false;
|
|
this.destroyBlock(false);
|
|
this.onDestroy();
|
|
cc.director.loadScene("GameScene");
|
|
};
|
|
//下一步
|
|
GameManager.prototype.guideNext = function () {
|
|
if (this.guide == -1) {
|
|
this.tipHide("tip", 0, false);
|
|
this.Tip.getChildByName("btn_next").active = false;
|
|
this.Tip.getChildByName("btn_jump").active = false;
|
|
this.Tip.getChildByName("btn_start").active = false;
|
|
}
|
|
};
|
|
//跳过
|
|
GameManager.prototype.guideJump = function () {
|
|
this.Tip.getChildByName("btn_next").active = false;
|
|
this.Tip.getChildByName("btn_jump").active = false;
|
|
this.Tip.getChildByName("btn_start").active = false;
|
|
GameData_1.default._instance.GM_INFO.probation = false;
|
|
this.destroyBlock(false);
|
|
this.onDestroy();
|
|
cc.director.loadScene("GameScene");
|
|
};
|
|
GameManager.prototype.jump = function () {
|
|
this.Player.getComponent("Player").jump();
|
|
};
|
|
GameManager.prototype.startGame = function () {
|
|
this.createBlock();
|
|
// this.createAir();
|
|
};
|
|
GameManager.prototype.addScore = function (score) {
|
|
var _this = this;
|
|
GameData_1.default._instance.CLICK_DATA.getScore = parseInt(score);
|
|
GameManager_1._instance.score += parseInt(score);
|
|
GameData_1.default._instance.CLICK_DATA.totalScore = GameManager_1._instance.score;
|
|
this.topUI.getChildByName("nandu").getComponent(cc.Label).string = GameManager_1._instance.score + "";
|
|
var scale = GameManager_1._instance.score / GameData_1.default._instance.LEVEL_INFO.scoreMax;
|
|
cc.tween(this.topUI.getChildByName("progress").getComponent(cc.Sprite))
|
|
.to(0.5, { fillRange: scale })
|
|
.call(function () {
|
|
if (scale >= GameData_1.default._instance.LEVEL_INFO.star1 && !_this.topUI.getChildByName("star1").active) {
|
|
_this.topUI.getChildByName("star1").active = true;
|
|
}
|
|
if (scale >= GameData_1.default._instance.LEVEL_INFO.star2 && !_this.topUI.getChildByName("star2").active) {
|
|
_this.topUI.getChildByName("star2").active = true;
|
|
}
|
|
if (scale >= GameData_1.default._instance.LEVEL_INFO.star3 && !_this.topUI.getChildByName("star3").active) {
|
|
_this.topUI.getChildByName("star3").active = true;
|
|
// GameData._instance.scoreMax = 150000;
|
|
}
|
|
})
|
|
.start();
|
|
};
|
|
GameManager.prototype.createBlock = function () {
|
|
if (this.over == false && this.begin == true) {
|
|
this.Ground.active = false;
|
|
this.Player.getComponent("Player").jumpPause = false;
|
|
var num = Math.floor(Math.random() * 12);
|
|
if (this.round <= 10 && num == 5) {
|
|
num = Math.floor(Math.random() * 6 + 6);
|
|
}
|
|
var block = cc.instantiate(this.blockPrefab[num]);
|
|
var height = this.Player.getComponent("Player").basicHeight + GameData_1.default._instance.GM_INFO.blockMin;
|
|
if (num > GameData_1.default._instance.GM_INFO.blockScale) {
|
|
height += block.height + GameData_1.default._instance.GM_INFO.blockMax;
|
|
GameData_1.default._instance.CLICK_DATA.height = true;
|
|
}
|
|
if (height >= 0 && this.cameraMove == false) {
|
|
this.countHeight = this.Player.getComponent("Player").basicHeight - this.Camera.node.y;
|
|
this.cameraMove = true;
|
|
}
|
|
block.setPosition(cc.v2(this.round % 2 == 0 ? 480 : -480, height));
|
|
block.parent = this.node.getChildByName("Block");
|
|
block.zIndex = 10;
|
|
this.block = null;
|
|
this.block = block;
|
|
this.round += 1;
|
|
this.level += 1;
|
|
if (this.round > GameData_1.default._instance.GM_INFO.levelMax)
|
|
GameData_1.default._instance.GM_INFO.levelMax = this.round;
|
|
GameData_1.default._instance.CLICK_DATA.level = this.round;
|
|
GameData_1.default._instance.CLICK_DATA.round = this.level;
|
|
GameData_1.default._instance.LEVEL_INFO.layer += GameData_1.default._instance.LEVEL_INFO.layerAdd;
|
|
if (GameData_1.default._instance.LEVEL_INFO.speed < 2)
|
|
GameData_1.default._instance.LEVEL_INFO.speed += GameData_1.default._instance.LEVEL_INFO.addSpeed;
|
|
if (GameData_1.default._instance.LEVEL_INFO.reduceSpeed <= 100)
|
|
GameData_1.default._instance.LEVEL_INFO.reduceSpeed += GameData_1.default._instance.LEVEL_INFO.jiansu;
|
|
if (this.round == GameData_1.default._instance.LEVEL_INFO.round1)
|
|
GameData_1.default._instance.LEVEL_INFO.jiansu = 2;
|
|
else if (this.round == GameData_1.default._instance.LEVEL_INFO.round2)
|
|
GameData_1.default._instance.LEVEL_INFO.jiansu = 1;
|
|
else if (this.round == GameData_1.default._instance.LEVEL_INFO.round3)
|
|
GameData_1.default._instance.LEVEL_INFO.jiansu = 0.5;
|
|
}
|
|
};
|
|
//产生空气
|
|
GameManager.prototype.createAir = function () {
|
|
for (var i = 0; i < 100; i++) {
|
|
this.Ground.active = false;
|
|
var num = Math.floor(Math.random() * 12);
|
|
if (this.round <= 10 && num == 5) {
|
|
num = Math.floor(Math.random() * 6 + 6);
|
|
}
|
|
var block = cc.instantiate(this.blockPrefab[num]);
|
|
var height = this.Player.getComponent("Player").basicHeight + GameData_1.default._instance.GM_INFO.blockMin;
|
|
if (num > GameData_1.default._instance.GM_INFO.blockScale) {
|
|
height += block.height + GameData_1.default._instance.GM_INFO.blockMax;
|
|
GameData_1.default._instance.CLICK_DATA.height = true;
|
|
}
|
|
block.setPosition(cc.v2(this.round % 2 == 0 ? 480 : -480, height));
|
|
block.parent = this.node.getChildByName("Block");
|
|
block.zIndex = 10;
|
|
this.round += 1;
|
|
this.level += 1;
|
|
if (this.round > GameData_1.default._instance.GM_INFO.levelMax)
|
|
GameData_1.default._instance.GM_INFO.levelMax = this.round;
|
|
GameData_1.default._instance.CLICK_DATA.level = this.round;
|
|
GameData_1.default._instance.CLICK_DATA.round = this.level;
|
|
GameData_1.default._instance.LEVEL_INFO.layer += GameData_1.default._instance.LEVEL_INFO.layerAdd;
|
|
GameData_1.default._instance.LEVEL_INFO.speed += GameData_1.default._instance.LEVEL_INFO.addSpeed;
|
|
if (GameData_1.default._instance.LEVEL_INFO.reduceSpeed <= 80)
|
|
GameData_1.default._instance.LEVEL_INFO.reduceSpeed += GameData_1.default._instance.LEVEL_INFO.jiansu;
|
|
if (this.round == GameData_1.default._instance.LEVEL_INFO.round1)
|
|
GameData_1.default._instance.LEVEL_INFO.jiansu = 2;
|
|
else if (this.round == GameData_1.default._instance.LEVEL_INFO.round2)
|
|
GameData_1.default._instance.LEVEL_INFO.jiansu = 1;
|
|
else if (this.round == GameData_1.default._instance.LEVEL_INFO.round3)
|
|
GameData_1.default._instance.LEVEL_INFO.jiansu = 0.5;
|
|
}
|
|
};
|
|
GameManager.prototype.clearAir = function () {
|
|
cc.director.loadScene("GameScene");
|
|
};
|
|
//虚假碎裂块
|
|
GameManager.prototype.createCrackBlock = function () {
|
|
this.interfere = true;
|
|
GameData_1.default._instance.CLICK_DATA.fake = this.interfere;
|
|
if (this.round > 1)
|
|
this.destroyBlock(true);
|
|
if (this.over == false && this.begin == true) {
|
|
var block = cc.instantiate(this.blockPrefab[12]);
|
|
var height = this.Player.getComponent("Player").basicHeight;
|
|
if (GameData_1.default._instance.CLICK_DATA.height == true) {
|
|
height += block.height / 2;
|
|
}
|
|
block.setPosition(cc.v2(this.round % 2 == 0 ? 480 : -480, height));
|
|
block.parent = this.node.getChildByName("CrackBlock");
|
|
block.zIndex = 1;
|
|
}
|
|
};
|
|
GameManager.prototype.destroyBlock = function (type) {
|
|
if (type == true) {
|
|
if (this.node) {
|
|
if (this.node.getChildByName("CrackBlock")) {
|
|
if (this.node.getChildByName("CrackBlock").children) {
|
|
var block2 = this.node.getChildByName("CrackBlock").children;
|
|
for (var i = 0; i < block2.length; i++) {
|
|
if (block2[i]) {
|
|
block2[i].getComponent("Block").hide();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
var block = this.node.getChildByName("Block").children;
|
|
for (var i = 0; i < block.length; i++) {
|
|
if (block[i]) {
|
|
block[i].active = false;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
GameManager.prototype.xinAction = function () {
|
|
var xin = this.topUI.getChildByName("xin1");
|
|
if (GameData_1.default._instance.GM_INFO.life == 2)
|
|
xin = this.topUI.getChildByName("xin3");
|
|
else if (GameData_1.default._instance.GM_INFO.life == 1)
|
|
xin = this.topUI.getChildByName("xin2");
|
|
cc.tween(xin)
|
|
.to(0.6, { scale: 1.6, opacity: 0 })
|
|
.call(function () {
|
|
xin.active = false;
|
|
})
|
|
.start();
|
|
};
|
|
//死亡
|
|
GameManager.prototype.getDeath = function (data) {
|
|
var _this = this;
|
|
if (data == true) {
|
|
this.destroyBlock(false);
|
|
cc.tween(this.Player)
|
|
.to(1, { y: -500 }, { easing: 'cubicIn' })
|
|
.call(function () {
|
|
_this.Player.getComponent("Player").init();
|
|
// this.Player.getComponent("Player").jumpPause = true;
|
|
if (_this.guide > 5) {
|
|
if (_this.guide == 6) {
|
|
_this.guide = 5;
|
|
_this.round = 2;
|
|
_this.startGuide(5, true);
|
|
}
|
|
else {
|
|
_this.round = 1;
|
|
_this.startGuide(6, true);
|
|
}
|
|
}
|
|
else {
|
|
_this.round = 0;
|
|
_this.startGuide(3, true);
|
|
}
|
|
})
|
|
.delay(0.5)
|
|
.call(function () {
|
|
})
|
|
.start();
|
|
}
|
|
else {
|
|
if (GameData_1.default._instance.GM_INFO.life > 0) {
|
|
GameData_1.default._instance.GM_INFO.life -= 1;
|
|
this.getDevive(1);
|
|
}
|
|
else {
|
|
GameData_1.default._instance.GM_INFO.life = -1;
|
|
this.getDevive(3);
|
|
}
|
|
}
|
|
};
|
|
//复活
|
|
GameManager.prototype.getDevive = function (time) {
|
|
var _this = this;
|
|
this.round = 0;
|
|
GameData_1.default._instance.LEVEL_init();
|
|
if (this.topUI.getChildByName("star3").active == true) {
|
|
// GameData._instance.LEVEL_INFO.scoreMax = 150000;
|
|
}
|
|
this.interfere = false;
|
|
GameData_1.default._instance.CLICK_DATA.fake = this.interfere;
|
|
this.destroyBlock(false);
|
|
var block2 = this.node.getChildByName("CrackBlock").children;
|
|
for (var i = 0; i < block2.length; i++) {
|
|
if (block2[i]) {
|
|
block2[i].active = false;
|
|
}
|
|
}
|
|
// this.blockArray = [];
|
|
var actionTime = 1;
|
|
if (this.Player.y > 500) {
|
|
actionTime = (this.Player.y + 500) / 1000 * actionTime;
|
|
}
|
|
cc.tween(this.Player)
|
|
.to(actionTime, { y: -500 }, { easing: 'cubicIn' })
|
|
.call(function () {
|
|
_this.Player.getComponent("Player").xinAction();
|
|
})
|
|
.delay(0.5)
|
|
.call(function () {
|
|
_this.xinAction();
|
|
_this.Player.getComponent("Player").init();
|
|
if (time > 1) {
|
|
_this.Xin.parent.active = true;
|
|
_this.Xin.getComponent(cc.Sprite).fillRange = 0;
|
|
cc.tween(_this.Xin.getComponent(cc.Sprite))
|
|
.to(time, { fillRange: 1 })
|
|
.delay(0.3)
|
|
.call(function () {
|
|
_this.Xin.parent.active = false;
|
|
})
|
|
.delay(0)
|
|
.call(function () {
|
|
_this.createBlock();
|
|
})
|
|
.start();
|
|
}
|
|
else {
|
|
setTimeout(function () {
|
|
_this.createBlock();
|
|
}, (time + 0.5) * 1000);
|
|
}
|
|
})
|
|
.start();
|
|
};
|
|
GameManager.prototype.setData = function () {
|
|
GameData_1.default._instance.CLICK_DATA.totalScore = GameManager_1._instance.score;
|
|
GameData_1.default._instance.CLICK_DATA.timer = this.countTime;
|
|
GameData_1.default._instance.CLICK_DATA.level = this.round;
|
|
GameData_1.default._instance.CLICK_DATA.round = this.level;
|
|
GameData_1.default._instance.CLICK_DATA.isAFK = GameData_1.default._instance.GM_INFO.isAFK;
|
|
//CLICK_DATA 数据处理完毕后调用上传接口 上传接口内CLICK_DATA不做改变
|
|
GameTool_1.GameTool.setGameData();
|
|
};
|
|
//获取matchId 用于上传每次点击数据里面记录id方便查询
|
|
GameManager.prototype.getMatchId = function () {
|
|
var matchId = cc.sys.localStorage.getItem("matchId");
|
|
if (matchId == "undifend" || matchId == null) {
|
|
matchId = this.setMatchId();
|
|
}
|
|
else {
|
|
if (this.containsNanana(matchId) == true) {
|
|
matchId = this.setMatchId();
|
|
}
|
|
else {
|
|
var char = parseInt(matchId[10]);
|
|
if (this.level == 1) {
|
|
char += 1;
|
|
}
|
|
matchId = matchId.slice(0, 10) + char + "";
|
|
GameData_1.default._instance.GM_INFO.matchId = matchId;
|
|
cc.sys.localStorage.setItem("matchId", matchId);
|
|
}
|
|
}
|
|
return matchId;
|
|
};
|
|
//检测matchId 如果有缓存以前的nanana数据清除
|
|
GameManager.prototype.containsNanana = function (str) {
|
|
return /na/i.test(str);
|
|
};
|
|
//重新设置MatchId
|
|
GameManager.prototype.setMatchId = function () {
|
|
// 定义包含可用字符的字符集
|
|
var characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
|
|
// 创建一个数组以保存随机字符
|
|
var uuidArray = [];
|
|
// 循环10次 生成10位的UUID
|
|
for (var i = 0; i < 10; i++) {
|
|
// 生成随机索引,范围是字符集的长度
|
|
var randomIndex = Math.floor(Math.random() * characters.length);
|
|
// 从字符集中获取随机字符
|
|
var randomChar = characters.charAt(randomIndex);
|
|
// 将字符添加到数组中
|
|
uuidArray.push(randomChar);
|
|
}
|
|
var data = uuidArray.join('') + 1 + "";
|
|
cc.sys.localStorage.setItem("matchNumber", 1);
|
|
cc.sys.localStorage.setItem("matchId", data);
|
|
GameData_1.default._instance.GM_INFO.matchId = data;
|
|
return data;
|
|
};
|
|
GameManager.prototype.updateCountDownTime = function () {
|
|
var _this = this;
|
|
if (this.countTime > 0 && !GameData_1.default._instance.GM_INFO.probation) {
|
|
this.countTime -= 1;
|
|
this.time.string = this.getTimeMargin(this.countTime);
|
|
if (this.countTime < 5) {
|
|
cc.tween(this.time.node)
|
|
.to(0.25, { scale: 1.5, color: cc.color(255, 0, 0) })
|
|
.to(0.25, { scale: 1, color: cc.color(255, 255, 255) })
|
|
.start();
|
|
}
|
|
if (this.countTime <= 0) {
|
|
this.unschedule(this.updateCountDownTime);
|
|
this.begin = false;
|
|
this.over = true;
|
|
this.overStop();
|
|
this.setRank();
|
|
setTimeout(function () {
|
|
_this.overOpen();
|
|
}, 2000);
|
|
}
|
|
}
|
|
};
|
|
//停止所有动画
|
|
GameManager.prototype.overStop = function () {
|
|
if (this.Player.getComponent("Player").jumpAction)
|
|
this.Player.getComponent("Player").jumpAction.stop();
|
|
var block = this.node.getChildByName("Block").children;
|
|
for (var i = 0; i < block.length; i++) {
|
|
if (block[i]) {
|
|
if (block[i].getComponent("Block").tween)
|
|
block[i].getComponent("Block").tween.stop();
|
|
}
|
|
}
|
|
var block2 = this.node.getChildByName("CrackBlock").children;
|
|
for (var i = 0; i < block2.length; i++) {
|
|
if (block2[i]) {
|
|
if (block2[i].getComponent("Block").tween)
|
|
block2[i].getComponent("Block").tween.stop();
|
|
}
|
|
}
|
|
};
|
|
GameManager.prototype.setRank = function () {
|
|
GameData_1.default._instance.GM_INFO.score = this.score;
|
|
GameTool_1.GameTool.setRank();
|
|
};
|
|
GameManager.prototype.overOpen = function () {
|
|
this.Player.active = false;
|
|
this.destroyBlock(false);
|
|
this.destroyBlock(true);
|
|
this.GameOver.active = true;
|
|
this.GameOver.getChildByName("score").getComponent(cc.Label).string = this.score + "";
|
|
this.GameOver.getChildByName("level").getComponent(cc.Label).string =
|
|
GameData_1.default._instance.GM_INFO.levelMax + "";
|
|
// this.GameOver.getChildByName("difficulty").getComponent(cc.Label).string =
|
|
// GameData._instance.GM_INFO.difficultyMax + "";
|
|
var difficulty = parseInt(this.difficultyArray / this.level * 10 + "");
|
|
// console.log("难度总数",this.difficultyArray,"次数",this.level,"最终",difficulty);
|
|
this.GameOver.getChildByName("difficulty").getComponent(cc.Label).string =
|
|
difficulty / 10 + "";
|
|
};
|
|
GameManager.prototype.backLoad = function () {
|
|
this.destroyBlock(false);
|
|
this.destroyBlock(true);
|
|
this.onDestroy();
|
|
cc.director.loadScene("LoadScene");
|
|
};
|
|
GameManager.prototype.again = function () {
|
|
this.destroyBlock(false);
|
|
this.destroyBlock(true);
|
|
this.onDestroy();
|
|
cc.director.loadScene("GameScene");
|
|
};
|
|
GameManager.prototype.openRank = function () {
|
|
cc.director.loadScene("RankScene");
|
|
};
|
|
//时间格式转换
|
|
GameManager.prototype.getTimeMargin = function (second) {
|
|
var total = 0;
|
|
total = second;
|
|
var hour = 0;
|
|
hour = parseInt((total / 3600) + ""); //计算整数小时数
|
|
var afterHour = total - hour * 60 * 60; //取得算出小时数后剩余的秒数
|
|
var min = parseInt((afterHour / 60) + ""); //计算整数分
|
|
var m = "" + min;
|
|
if (min < 10)
|
|
m = "0" + min;
|
|
var afterMin = total - hour * 60 * 60 - min * 60; //取得算出分后剩余的秒数
|
|
var miao = afterMin + "";
|
|
if (afterMin < 10)
|
|
miao = "0" + afterMin;
|
|
return m + ':' + miao;
|
|
};
|
|
GameManager.prototype.update = function (dt) {
|
|
if (this.cameraMove == true && this.over == false) {
|
|
this.Camera.node.y = this.Player.y - this.countHeight;
|
|
if (this.Camera.node.y <= 0)
|
|
this.Camera.node.y = 0;
|
|
this.topUI.y = this.Camera.node.y + this.drop;
|
|
}
|
|
};
|
|
var GameManager_1;
|
|
__decorate([
|
|
property(cc.Camera)
|
|
], GameManager.prototype, "Camera", void 0);
|
|
__decorate([
|
|
property(cc.Node)
|
|
], GameManager.prototype, "topUI", void 0);
|
|
__decorate([
|
|
property(cc.Node)
|
|
], GameManager.prototype, "Player", void 0);
|
|
__decorate([
|
|
property(cc.Node)
|
|
], GameManager.prototype, "Ground", void 0);
|
|
__decorate([
|
|
property(cc.Node)
|
|
], GameManager.prototype, "Xin", void 0);
|
|
__decorate([
|
|
property(cc.Label)
|
|
], GameManager.prototype, "time", void 0);
|
|
__decorate([
|
|
property(cc.Node)
|
|
], GameManager.prototype, "GameOver", void 0);
|
|
__decorate([
|
|
property(cc.Node)
|
|
], GameManager.prototype, "Tip", void 0);
|
|
__decorate([
|
|
property([cc.Prefab])
|
|
], GameManager.prototype, "blockPrefab", void 0);
|
|
GameManager = GameManager_1 = __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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0XFxHYW1lTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0JBQW9CO0FBQ3BCLHdFQUF3RTtBQUN4RSxtQkFBbUI7QUFDbkIsa0ZBQWtGO0FBQ2xGLDhCQUE4QjtBQUM5QixrRkFBa0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVsRix1Q0FBa0M7QUFDbEMsNENBQTJDO0FBQzNDLG9EQUFtRDtBQUU3QyxJQUFBLEtBQXNCLEVBQUUsQ0FBQyxVQUFVLEVBQWxDLE9BQU8sYUFBQSxFQUFFLFFBQVEsY0FBaUIsQ0FBQztBQUcxQztJQUF5QywrQkFBWTtJQUFyRDtRQUFBLHFFQXF6QkM7UUFsekJHLFlBQU0sR0FBYyxJQUFJLENBQUM7UUFHekIsV0FBSyxHQUFZLElBQUksQ0FBQztRQUd0QixZQUFNLEdBQVksSUFBSSxDQUFDO1FBR3ZCLFlBQU0sR0FBWSxJQUFJLENBQUM7UUFHdkIsU0FBRyxHQUFZLElBQUksQ0FBQztRQUdwQixVQUFJLEdBQWEsSUFBSSxDQUFDO1FBR3RCLGNBQVEsR0FBWSxJQUFJLENBQUM7UUFHekIsU0FBRyxHQUFZLElBQUksQ0FBQztRQUdwQixpQkFBVyxHQUFzQixFQUFFLENBQUM7O0lBMHhCeEMsQ0FBQztvQkFyekJvQixXQUFXO0lBa0Q1Qix3QkFBd0I7SUFHeEIsNEJBQU0sR0FBTjtRQUNJLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLE9BQU87UUFDUCxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDaEQsT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDdkIsbUNBQW1DO1FBQ25DLGFBQVcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQzdCLGdEQUFnRDtRQUNoRCxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNkLElBQUksQ0FB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dXJjZXNDb250ZW50IjpbIi8vIExlYXJuIFR5cGVTY3JpcHQ6XHJcbi8vICAtIGh0dHBzOi8vZG9jcy5jb2Nvcy5jb20vY3JlYXRvci9tYW51YWwvZW4vc2NyaXB0aW5nL3R5cGVzY3JpcHQuaHRtbFxyXG4vLyBMZWFybiBBdHRyaWJ1dGU6XHJcbi8vICAtIGh0dHBzOi8vZG9jcy5jb2Nvcy5jb20vY3JlYXRvci9tYW51YWwvZW4vc2NyaXB0aW5nL3JlZmVyZW5jZS9hdHRyaWJ1dGVzLmh0bWxcclxuLy8gTGVhcm4gbGlmZS1jeWNsZSBjYWxsYmFja3M6XHJcbi8vICAtIGh0dHBzOi8vZG9jcy5jb2Nvcy5jb20vY3JlYXRvci9tYW51YWwvZW4vc2NyaXB0aW5nL2xpZmUtY3ljbGUtY2FsbGJhY2tzLmh0bWxcclxuXHJcbmltcG9ydCBHYW1lRGF0YSBmcm9tICcuL0dhbWVEYXRhJztcclxuaW1wb3J0IHsgR2FtZVRvb2wgfSBmcm9tICcuL3Rvb2wvR2FtZVRvb2wnO1xyXG5pbXBvcnQgeyBOb3RpZmljYXRpb24gfSBmcm9tICcuL3Rvb2wvTm90aWZpY2F0aW9uJztcclxuXHJcbmNvbnN0IHtjY2NsYXNzLCBwcm9wZXJ0eX0gPSBjYy5fZGVjb3JhdG9yO1xyXG5cclxuQGNjY2xhc3NcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2FtZU1hbmFnZXIgZXh0ZW5kcyBjYy5Db21wb25lbnQge1xyXG5cclxuICAgIEBwcm9wZXJ0eShjYy5DYW1lcmEpXHJcbiAgICBDYW1lcmE6IGNjLkNhbWVyYSA9IG51bGw7XHJcblxyXG4gICAgQHByb3BlcnR5KGNjLk5vZGUpXHJcbiAgICB0b3BVSTogY2MuTm9kZSA9IG51bGw7XHJcblxyXG4gICAgQHByb3BlcnR5KGNjLk5vZGUpXHJcbiAgICBQbGF5ZXI6IGNjLk5vZGUgPSBudWxsO1xyXG5cclxuICAgIEBwcm9wZXJ0eShjYy5Ob2RlKVxyXG4gICAgR3JvdW5kOiBjYy5Ob2RlID0gbnVsbDtcclxuXHJcbiAgICBAcHJvcGVydHkoY2MuTm9kZSlcclxuICAgIFhpbjogY2MuTm9kZSA9IG51bGw7XHJcblxyXG4gICAgQHByb3BlcnR5KGNjLkxhYmVsKVxyXG4gICAgdGltZTogY2MuTGFiZWwgPSBudWxsO1xyXG5cclxuICAgIEBwcm9wZXJ0eShjYy5Ob2RlKVxyXG4gICAgR2FtZU92ZXI6IGNjLk5vZGUgPSBudWxsO1xyXG5cclxuICAgIEBwcm9wZXJ0eShjYy5Ob2RlKVxyXG4gICAgVGlwOiBjYy5Ob2RlID0gbnVsbDtcclxuXHJcbiAgICBAcHJvcGVydHkoW2NjLlByZWZhYl0pXHJcbiAgICBibG9ja1ByZWZhYiA6IEFycmF5PGNjLlByZWZhYj4gPSBbXTtcclxuXHJcbiAgICBcclxuXHJcbiAgICByb3VuZDogbnVtYmVyOyAgICAgIC8v5Zue5ZCIXHJcbiAgICBsZXZlbDogbnVtYmVyOyAgICAgIC8v5Zue5ZCIXHJcbiAgICBzdGF0aWMgX2luc3RhbmNlOiBhbnk7XHJcbiAgICBibG9ja0FycmF5OiBhbnk7XHJcbiAgICBjYW1lcmFNb3ZlOmJvb2xlYW5cclxuICAgIGNvdW50SGVpZ2h0Om51bWJlcjtcclxuICAgIGNvdW50VGltZTogbnVtYmVyO1xyXG4gICAgb3ZlcjogYm9vbGVhbjtcclxuICAgIGJlZ2luOiBib29sZWFuO1xyXG4gICAgaW50ZXJmZXJlOiBib29sZWFuO1xyXG4gICAgb2xkU3BlZWQ6IG51bWJlcjsgICAgICAvL+S4iuS4gOWbnuWQiOmAn+W6plxyXG4gICAgc2NvcmU6IG51bWJlcjsgICAgICAvL+aAu+W+l+WIhlxyXG4gICAgZGlmZmljdWx0eU1heDpudW1iZXI7IC8v5pyA6auY6Zq+5bqm57O75pWwXHJcbiAgICBkaWZmaWN1bHR5QXJyYXk6bnVtYmVyO1xyXG4gICAgZHJvcDogbnVtYmVyOyAgICAgIC8v5pGE5YOP5py66JC95beuXHJcbiAgICBndWlkZTogbnVtYmVyOyAgICAgLy/orrDlvZXlvJXlr7zmraXpqqRcclxuICAgIEFpcjogYW55O1xyXG4gICAgQWlyMjogYW55O1xyXG4gICAgYmxvY2s6IGNjLk5vZGU7XHJcbiAgICAvLyBMSUZFLUNZQ0xFIENBTExCQUNLUzpcclxuXHJcblxyXG4gICAgb25Mb2FkICgpIHtcclxuICAgICAgICBjYy5nYW1lLnNldEZyYW1lUmF0ZSg2MSk7XHJcbiAgICAgICAgLy8g56S65L6L5L2/55SoXHJcbiAgICAgICAgdmFyIG1hbmFnZXIgPSBjYy5kaXJlY3Rvci5nZXRDb2xsaXNpb25NYW5hZ2VyKCk7XHJcbiAgICAgICAgbWFuYWdlci5lbmFibGVkID0gdHJ1ZTtcclxuICAgICAgICAvLyBtYW5hZ2VyLmVuYWJsZWREZWJ1Z0RyYXcgPSB0cnVlO1xyXG4gICAgICAgIEdhbWVNYW5hZ2VyLl9pbnN0YW5jZSA9IHRoaXM7XHJcbiAgICAgICAgLy8gR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8ucHJvYmF0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5BaXIgPSBbXTtcclxuICAgICAgICB0aGlzLkFpcjIgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgb25FbmFibGUoKTogdm9pZCB7XHJcbiAgICAgICAgTm90aWZpY2F0aW9uLm9uKFwiY3JlYXRlQmxvY2tcIix0aGlzLmNyZWF0ZUJsb2NrLHRoaXMpO1xyXG4gICAgICAgIE5vdGlmaWNhdGlvbi5vbihcImFkZFNjb3JlXCIsdGhpcy5hZGRTY29yZSx0aGlzKTtcclxuICAgICAgICBOb3RpZmljYXRpb24ub24oXCJjcmVhdGVDcmFja0Jsb2NrXCIsdGhpcy5jcmVhdGVDcmFja0Jsb2NrLHRoaXMpO1xyXG4gICAgICAgIE5vdGlmaWNhdGlvbi5vbihcInNob3dHcm91bmRcIix0aGlzLnNob3dHcm91bmQsdGhpcyk7XHJcbiAgICAgICAgTm90aWZpY2F0aW9uLm9uKFwiZGVhdGhcIix0aGlzLmdldERlYXRoLHRoaXMpO1xyXG4gICAgICAgIE5vdGlmaWNhdGlvbi5vbihcImp1bXBcIix0aGlzLmp1bXAsdGhpcyk7XHJcbiAgICAgICAgTm90aWZpY2F0aW9uLm9uKFwic2V0RGF0YVwiLHRoaXMuc2V0RGF0YSx0aGlzKTtcclxuICAgICAgICBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIG9uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICBOb3RpZmljYXRpb24ub2ZmKFwiY3JlYXRlQmxvY2tcIix0aGlzLmNyZWF0ZUJsb2NrKTtcclxuICAgICAgICBOb3RpZmljYXRpb24ub2ZmKFwiYWRkU2NvcmVcIix0aGlzLmFkZFNjb3JlKTtcclxuICAgICAgICBOb3RpZmljYXRpb24ub2ZmKFwiY3JlYXRlQ3JhY2tCbG9ja1wiLHRoaXMuY3JlYXRlQ3JhY2tCbG9jayk7XHJcbiAgICAgICAgTm90aWZpY2F0aW9uLm9mZihcImRlYXRoXCIsdGhpcy5nZXREZWF0aCk7XHJcbiAgICAgICAgTm90aWZpY2F0aW9uLm9mZihcImp1bXBcIix0aGlzLmp1bXApO1xyXG4gICAgICAgIE5vdGlmaWNhdGlvbi5vZmYoXCJzaG93R3JvdW5kXCIsdGhpcy5zaG93R3JvdW5kKTtcclxuICAgICAgICBOb3RpZmljYXRpb24ub2ZmKFwic2V0RGF0YVwiLHRoaXMuc2V0RGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy/moLnmja7mmK/lkKblhajpnaLlsY/vvIzlgZrni6znq4vpgILphY3mlrnpnaJcclxuICAgIGZpdCgpe1xyXG4gICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcImJnMlwiKS55ID0gLTIxNjcuNjc1O1xyXG4gICAgICAgIHZhciBqZyA9IHRoaXMuc2V0Rml0KCk7XHJcbiAgICAgICAgaWYoIWpnKXtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiYmcyXCIpLnkgPSAtMjEwMDtcclxuICAgICAgICAgICAgdGhpcy50b3BVSS55ID0gNjYwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgICAvL+WIpOaWreWFqOmdouWxj1xyXG4gICAgZ2V0U2V0U2NyZWVuUmVzb2x1dGlvbkZsYWcgKCkge1xyXG4gICAgICAgIGxldCBzaXplID0gY2Mud2luU2l6ZTtcclxuICAgICAgICBsZXQgd2lkdGggPSBzaXplLndpZHRoO1xyXG4gICAgICAgIGxldCBoZWlnaHQgPSBzaXplLmhlaWdodDtcclxuICAgICAgICBpZiAoKGhlaWdodCAvIHdpZHRoKSA+ICgxNi4yIC8gOSkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIC8v5Yik5pat5YWo6Z2i5bGP6YCC6YWNXHJcbiAgICBzZXRGaXQgKCkge1xyXG4gICAgICAgIGxldCBmbGFnID0gdGhpcy5nZXRTZXRTY3JlZW5SZXNvbHV0aW9uRmxhZygpO1xyXG4gICAgICAgIGlmIChmbGFnKSB7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZsYWc7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdCgpe1xyXG4gICAgICAgIHRoaXMuZHJvcCA9IHRoaXMudG9wVUkueSAtIHRoaXMuQ2FtZXJhLm5vZGUueTtcclxuICAgICAgICB0aGlzLnNjb3JlID0gMDtcclxuICAgICAgICB0aGlzLm9sZFNwZWVkID0gMTA7XHJcbiAgICAgICAgdGhpcy5ndWlkZSA9IC0xO1xyXG4gICAgICAgIHRoaXMuYmVnaW4gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMub3ZlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaW50ZXJmZXJlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yb3VuZCA9IDA7XHJcbiAgICAgICAgdGhpcy5sZXZlbCA9IDA7XHJcbiAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8ubGV2ZWxNYXggPSAxO1xyXG4gICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmRpZmZpY3VsdHlNYXggPSAxO1xyXG4gICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmxpZmUgPSAzO1xyXG4gICAgICAgIHRoaXMuYmxvY2tBcnJheSA9IFtdO1xyXG4gICAgICAgIHRoaXMuZGlmZmljdWx0eUFycmF5ID0gMDtcclxuICAgICAgICB0aGlzLmNhbWVyYU1vdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNvdW50VGltZSA9IDE4MDtcclxuICAgICAgICB0aGlzLnRvcFVJLmdldENoaWxkQnlOYW1lKFwieGluMVwiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudG9wVUkuZ2V0Q2hpbGRCeU5hbWUoXCJ4aW4yXCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy50b3BVSS5nZXRDaGlsZEJ5TmFtZShcInhpbjNcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnRvcFVJLmdldENoaWxkQnlOYW1lKFwic3RhcjFcIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50b3BVSS5nZXRDaGlsZEJ5TmFtZShcInN0YXIyXCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudG9wVUkuZ2V0Q2hpbGRCeU5hbWUoXCJzdGFyM1wiKS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfaW5pdCgpO1xyXG4gICAgICAgIHRoaXMuc2NoZWR1bGUodGhpcy51cGRhdGVDb3VudERvd25UaW1lLDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0ICgpIHtcclxuICAgICAgICAvLyB0aGlzLm5vZGUub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfU1RBUlQsIHRoaXMuanVtcCwgdGhpcyk7XHJcbiAgICAgICAgdGhpcy5maXQoKTtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICAvLyBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5wcm9iYXRpb24gPSBmYWxzZTtcclxuICAgICAgICBpZihHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5wcm9iYXRpb24pe1xyXG4gICAgICAgICAgICB0aGlzLlBsYXllci5nZXRDb21wb25lbnQoXCJQbGF5ZXJcIikuanVtcFBhdXNlID0gdHJ1ZTtcclxuICAgICAgICAgICAgbGV0IHRpcCA9IHRoaXMuVGlwLmdldENoaWxkQnlOYW1lKFwidGlwXCIpO1xyXG4gICAgICAgICAgICB0aGlzLnRpcFNob3codGlwLC0xLHRydWUpO1xyXG5cclxuICAgICAgICB9IFxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkJlZ2luXCIpLm9wYWNpdHkgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJCZWdpblwiKS5zY2FsZSA9IDI7XHJcbiAgICAgICAgICAgIGlmKHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkJlZ2luXCIpKXtcclxuICAgICAgICAgICAgICAgIGNjLnR3ZWVuKHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkJlZ2luXCIpKVxyXG4gICAgICAgICAgICAgICAgLnRvKDAuNSx7b3BhY2l0eToyNTUsc2NhbGU6MX0pXHJcbiAgICAgICAgICAgICAgICAuZGVsYXkoMC41KVxyXG4gICAgICAgICAgICAgICAgLnRvKDAuNSx7b3BhY2l0eTowLHNjYWxlOjB9KVxyXG4gICAgICAgICAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydEdhbWUoKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydEdhbWUoKTtcclxuICAgICAgICAgICAgICAgIH0sIDEwMDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICBcclxuICAgICAgICB9IFxyXG4gICAgfVxyXG5cclxuICAgIC8v5byA5ZCv5byV5a+8XHJcbiAgICBzdGFydEd1aWRlKHR5cGUscmV2aXZlKXsgICAvL3R5cGXkuLrnrKzlh6DmraVcclxuICAgICAgICB0aGlzLmd1aWRlID0gdHlwZTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcInN0YXJ0R3VpZGVcIix0eXBlKTtcclxuICAgICAgICBpZih0eXBlID09IDApe1xyXG4gICAgICAgICAgICB0aGlzLmNhcmV0ZUd1aWRlQmxvY2soMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYodHlwZSA9PSAyKXtcclxuICAgICAgICAgICAgbGV0IGJsb2NrID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiQmxvY2tcIikuY2hpbGRyZW5bdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiQmxvY2tcIikuY2hpbGRyZW4ubGVuZ3RoLTFdO1xyXG4gICAgICAgICAgICBjYy50d2VlbihibG9jaylcclxuICAgICAgICAgICAgLnRvKDAuNyx7eDowfSlcclxuICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMudGlwSGlkZShcInRpcDJcIiwzLGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0eXBlID09IDMpe1xyXG4gICAgICAgICAgICBpZihyZXZpdmUgPT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdW5kICs9IDE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcmV0ZUd1aWRlQmxvY2soMyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgIGxldCB0aXAgPSB0aGlzLlRpcC5nZXRDaGlsZEJ5TmFtZShcInRpcDNcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRpcFNob3codGlwLHR5cGUsZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aXBIaWRlKFwidGlwM1wiLG51bGwsZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91bmQgKz0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYXJldGVHdWlkZUJsb2NrKDMpO1xyXG4gICAgICAgICAgICAgICAgfSwgMzAwMCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYodHlwZSA9PSA0KXtcclxuICAgICAgICAgICAgdGhpcy5yb3VuZCArPSAxO1xyXG4gICAgICAgICAgICB0aGlzLmNhcmV0ZUd1aWRlQmxvY2soNCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYodHlwZSA9PSA1KXtcclxuICAgICAgICAgICAgdGhpcy5yb3VuZCArPSAxO1xyXG4gICAgICAgICAgICB0aGlzLmNhcmV0ZUd1aWRlQmxvY2soNSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYodHlwZSA9PSA2KXtcclxuICAgICAgICAgICAgbGV0IGJsb2NrID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiQmxvY2tcIikuY2hpbGRyZW5bdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiQmxvY2tcIikuY2hpbGRyZW4ubGVuZ3RoLTFdO1xyXG4gICAgICAgICAgICBjYy50d2VlbihibG9jaylcclxuICAgICAgICAgICAgLnRvKDAuNyx7eDowfSlcclxuICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMudGlwSGlkZShcInRpcDRcIiw3LHJldml2ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYodHlwZSA9PSA3KXtcclxuICAgICAgICAgICAgaWYocmV2aXZlID09IHRydWUpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3VuZCArPSAxO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJldGVHdWlkZUJsb2NrKDcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGlwID0gdGhpcy5UaXAuZ2V0Q2hpbGRCeU5hbWUoXCJ0aXA1XCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50aXBTaG93KHRpcCx0eXBlLGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGlwSGlkZShcInRpcDVcIixudWxsLHJldml2ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3VuZCArPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLmNhcmV0ZUd1aWRlQmxvY2soNyk7XHJcbiAgICAgICAgICAgICAgICB9LCAyMDAwKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0eXBlID09IDgpe1xyXG4gICAgICAgICAgICB0aGlzLnJvdW5kICs9IDE7XHJcbiAgICAgICAgICAgIHRoaXMuY2FyZXRlR3VpZGVCbG9jayg4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0eXBlID09IDkpe1xyXG4gICAgICAgICAgICB0aGlzLlBsYXllci5nZXRDb21wb25lbnQoXCJQbGF5ZXJcIikuanVtcFBhdXNlID0gdHJ1ZTtcclxuICAgICAgICAgICAgbGV0IHRpcCA9IHRoaXMuVGlwLmdldENoaWxkQnlOYW1lKFwidGlwNlwiKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRpcFNob3codGlwLHR5cGUsZmFsc2UpO1xyXG4gICAgICAgICAgICB9LCAxMDAwKTtcclxuICAgICBcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB0aXBTaG93KHRpcE5hbWUsdHlwZSxzaG93TmV4dCl7XHJcbiAgICAgICAgbGV0IHRpcCA9IHRpcE5hbWU7XHJcbiAgICAgICAgbGV0IGxlZnQgPSB0aGlzLlRpcC5nZXRDaGlsZEJ5TmFtZShcImxlZnRcIik7XHJcbiAgICAgICAgbGV0IHJpZ2h0ID0gdGhpcy5UaXAuZ2V0Q2hpbGRCeU5hbWUoXCJyaWdodFwiKTtcclxuICAgICAgICBsZWZ0LndpZHRoID0gMDsgcmlnaHQud2lkdGggPSAwO3RpcC5vcGFjaXR5ID0gMDtcclxuICAgICAgICBjYy50d2VlbihsZWZ0KVxyXG4gICAgICAgIC50bygwLjI1LHt3aWR0aDozNDh9KVxyXG4gICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgIGNjLnR3ZWVuKHJpZ2h0KVxyXG4gICAgICAgIC50bygwLjI1LHt3aWR0aDozNDh9KVxyXG4gICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgIGNjLnR3ZWVuKHRpcClcclxuICAgICAgICAuZGVsYXkoMC4xNSlcclxuICAgICAgICAudG8oMC4xNSx7b3BhY2l0eToyNTV9KVxyXG4gICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgICB0aGlzLmd1aWRlID0gdHlwZTtcclxuICAgICAgICAgICAgaWYodHlwZSA9PSA1KSB0aGlzLmd1aWRlID0gNjtcclxuICAgICAgICAgICAgaWYodHlwZSA9PSA1IHx8IHR5cGUgPT0gMSApIHRoaXMuUGxheWVyLmdldENvbXBvbmVudChcIlBsYXllclwiKS5qdW1wUGF1c2UgPSBmYWxzZTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgIGlmKHNob3dOZXh0ID09IHRydWUpe1xyXG4gICAgICAgICAgICB0aGlzLlRpcC5nZXRDaGlsZEJ5TmFtZShcImJ0bl9uZXh0XCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuVGlwLmdldENoaWxkQnlOYW1lKFwiYnRuX2p1bXBcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgY2MudHdlZW4odGhpcy5UaXAuZ2V0Q2hpbGRCeU5hbWUoXCJidG5fbmV4dFwiKSlcclxuICAgICAgICAgICAgLmRlbGF5KDAuNSlcclxuICAgICAgICAgICAgLnRvKDAuMix7b3BhY2l0eToyNTV9KVxyXG4gICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICAgICAgY2MudHdlZW4odGhpcy5UaXAuZ2V0Q2hpbGRCeU5hbWUoXCJidG5fanVtcFwiKSlcclxuICAgICAgICAgICAgLmRlbGF5KDAuNSlcclxuICAgICAgICAgICAgLnRvKDAuMix7b3BhY2l0eToyNTV9KVxyXG4gICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYodGlwLm5hbWUgPT0gXCJ0aXA2XCIpe1xyXG4gICAgICAgICAgICB0aGlzLlRpcC5nZXRDaGlsZEJ5TmFtZShcImJ0bl9zdGFydFwiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICBjYy50d2Vlbih0aGlzLlRpcC5nZXRDaGlsZEJ5TmFtZShcImJ0bl9zdGFydFwiKSlcclxuICAgICAgICAgICAgLmRlbGF5KDEpXHJcbiAgICAgICAgICAgIC50bygwLjIse29wYWNpdHk6MjU1fSlcclxuICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy/pmpDol49cclxuICAgIHRpcEhpZGUodGlwTmFtZSxudW0scmV2aXZlKXtcclxuICAgICAgICBsZXQgdGlwID0gdGhpcy5UaXAuZ2V0Q2hpbGRCeU5hbWUodGlwTmFtZSk7XHJcbiAgICAgICAgbGV0IGxlZnQgPSB0aGlzLlRpcC5nZXRDaGlsZEJ5TmFtZShcImxlZnRcIik7XHJcbiAgICAgICAgbGV0IHJpZ2h0ID0gdGhpcy5UaXAuZ2V0Q2hpbGRCeU5hbWUoXCJyaWdodFwiKTtcclxuICAgICAgICBjYy50d2VlbihsZWZ0KVxyXG4gICAgICAgIC5kZWxheSgwLjEpXHJcbiAgICAgICAgLnRvKDAuMjUse3dpZHRoOjB9KVxyXG4gICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgIGNjLnR3ZWVuKHJpZ2h0KVxyXG4gICAgICAgIC5kZWxheSgwLjEpXHJcbiAgICAgICAgLnRvKDAuMjUse3dpZHRoOjB9KVxyXG4gICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgIGNjLnR3ZWVuKHRpcClcclxuICAgICAgICAudG8oMC4xMix7b3BhY2l0eTowfSlcclxuICAgICAgICAuZGVsYXkoMS41KVxyXG4gICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgICBpZih0aXAubmFtZSAhPSBcInRpcDNcIiAmJiB0aXBOYW1lICE9IFwidGlwNVwiKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuUGxheWVyLmdldENvbXBvbmVudChcIlBsYXllclwiKS5qdW1wUGF1c2UgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKG51bSAhPSBudWxsKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRHdWlkZShudW0scmV2aXZlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuc3RhcnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBjYXJldGVHdWlkZUJsb2NrKHR5cGUpe1xyXG4gICAgICAgIHRoaXMuR3JvdW5kLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCB0aXAgPSB0aGlzLlRpcC5nZXRDaGlsZEJ5TmFtZShcInRpcDJcIik7XHJcbiAgICAgICAgaWYodHlwZSA9PSA1KXtcclxuICAgICAgICAgICAgdGlwID0gdGhpcy5UaXAuZ2V0Q2hpbGRCeU5hbWUoXCJ0aXA0XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLlBsYXllci5nZXRDb21wb25lbnQoXCJQbGF5ZXJcIikuanVtcFBhdXNlID0gdHJ1ZTtcclxuICAgICAgICB2YXIgYmxvY2sgPSBjYy5pbnN0YW50aWF0ZSh0aGlzLmJsb2NrUHJlZmFiWzEzXSk7XHJcbiAgICAgICAgbGV0IGhlaWdodCA9IHRoaXMuUGxheWVyLmdldENvbXBvbmVudChcIlBsYXllclwiKS5iYXNpY0hlaWdodCArIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmJsb2NrTWluO1xyXG4gICAgICAgIGlmKHR5cGUgPiA0KXtcclxuICAgICAgICAgICAgaGVpZ2h0ICs9IGJsb2NrLmhlaWdodCArIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmJsb2NrTWF4O1xyXG4gICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5oZWlnaHQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBibG9jay5zZXRQb3NpdGlvbihjYy52Mih0aGlzLnJvdW5kJTI9PTA/NDgwOi00ODAsaGVpZ2h0KSk7XHJcbiAgICAgICAgYmxvY2sucGFyZW50ID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiQmxvY2tcIik7XHJcbiAgICAgICAgbGV0IG51bSA9IDE1MDtcclxuICAgICAgICBsZXQgdGltZSA9MztcclxuICAgICAgICBpZih0eXBlID09IDEgfHwgdHlwZSA9PSA1KXtcclxuICAgICAgICAgICAgbnVtID0gdGhpcy5yb3VuZCUyPT0wP251bTotbnVtO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKHR5cGUgPT0gMyB8fCB0eXBlID09IDQgfHwgdHlwZSA9PTcgfHwgdHlwZSA9PSA4IHx8IHR5cGUgPT0gOSl7XHJcbiAgICAgICAgICAgIHRoaXMuUGxheWVyLmdldENvbXBvbmVudChcIlBsYXllclwiKS5qdW1wUGF1c2UgPSBmYWxzZTtcclxuICAgICAgICAgICAgbnVtID0gLWJsb2NrLng7XHJcbiAgICAgICAgICAgIHRpbWUgPSA3O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYy50d2VlbihibG9jaykgICAgIFxyXG4gICAgICAgIC50byh0aW1lLHt4Om51bX0pXHJcbiAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgIGlmKHR5cGUgPT0gMSB8fCB0eXBlID09IDUpe1xyXG4gICAgICAgICAgICAgICAgaWYodHlwZSA9PSAxKSB0aGlzLlBsYXllci5nZXRDb21wb25lbnQoXCJQbGF5ZXJcIikuanVtcFBhdXNlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgdGhpcy50aXBTaG93KHRpcCx0eXBlLGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdGFydCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dHcm91bmQodGVtcFkpe1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLkdyb3VuZC5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLkdyb3VuZC55ID0gdGVtcFk7XHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgIH1cclxuICAgIGd1aWRlU3RhcnQoKXtcclxuICAgICAgICB0aGlzLnRpcEhpZGUoXCJ0aXA2XCIsbnVsbCxmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5UaXAuZ2V0Q2hpbGRCeU5hbWUoXCJidG5fbmV4dFwiKS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLlRpcC5nZXRDaGlsZEJ5TmFtZShcImJ0bl9qdW1wXCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuVGlwLmdldENoaWxkQnlOYW1lKFwiYnRuX3N0YXJ0XCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLnByb2JhdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZGVzdHJveUJsb2NrKGZhbHNlKTtcclxuICAgICAgICB0aGlzLm9uRGVzdHJveSgpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNjLmRpcmVjdG9yLmxvYWRTY2VuZShcIkdhbWVTY2VuZVwiKTtcclxuICAgIH1cclxuICAgIC8v5LiL5LiA5q2lXHJcbiAgICBndWlkZU5leHQoKXtcclxuICAgICAgICBpZih0aGlzLmd1aWRlID09IC0xKXtcclxuICAgICAgICAgICAgdGhpcy50aXBIaWRlKFwidGlwXCIsMCxmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuVGlwLmdldENoaWxkQnlOYW1lKFwiYnRuX25leHRcIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuVGlwLmdldENoaWxkQnlOYW1lKFwiYnRuX2p1bXBcIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuVGlwLmdldENoaWxkQnlOYW1lKFwiYnRuX3N0YXJ0XCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8v6Lez6L+HXHJcbiAgICBndWlkZUp1bXAoKXtcclxuICAgICAgICB0aGlzLlRpcC5nZXRDaGlsZEJ5TmFtZShcImJ0bl9uZXh0XCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuVGlwLmdldENoaWxkQnlOYW1lKFwiYnRuX2p1bXBcIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5UaXAuZ2V0Q2hpbGRCeU5hbWUoXCJidG5fc3RhcnRcIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8ucHJvYmF0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95QmxvY2soZmFsc2UpO1xyXG4gICAgICAgIHRoaXMub25EZXN0cm95KCk7XHJcbiAgICAgICAgY2MuZGlyZWN0b3IubG9hZFNjZW5lKFwiR2FtZVNjZW5lXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGp1bXAoKXtcclxuICAgICAgICB0aGlzLlBsYXllci5nZXRDb21wb25lbnQoXCJQbGF5ZXJcIikuanVtcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0R2FtZSgpe1xyXG4gICAgICAgIHRoaXMuY3JlYXRlQmxvY2soKTtcclxuICAgICAgICAvLyB0aGlzLmNyZWF0ZUFpcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFNjb3JlKHNjb3JlKXtcclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5nZXRTY29yZSA9IHBhcnNlSW50KHNjb3JlKTtcclxuICAgICAgICBHYW1lTWFuYWdlci5faW5zdGFuY2Uuc2NvcmUgKz0gcGFyc2VJbnQoc2NvcmUpO1xyXG4gICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLnRvdGFsU2NvcmUgPSBHYW1lTWFuYWdlci5faW5zdGFuY2Uuc2NvcmU7XHJcbiAgICAgICAgdGhpcy50b3BVSS5nZXRDaGlsZEJ5TmFtZShcIm5hbmR1XCIpLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nICA9IEdhbWVNYW5hZ2VyLl9pbnN0YW5jZS5zY29yZSArIFwiXCI7XHJcbiAgICAgICAgdmFyIHNjYWxlID0gR2FtZU1hbmFnZXIuX2luc3RhbmNlLnNjb3JlL0dhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLnNjb3JlTWF4O1xyXG4gICAgICAgIGNjLnR3ZWVuKHRoaXMudG9wVUkuZ2V0Q2hpbGRCeU5hbWUoXCJwcm9ncmVzc1wiKS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKSlcclxuICAgICAgICAudG8oMC41LHtmaWxsUmFuZ2U6c2NhbGV9KVxyXG4gICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgICBpZihzY2FsZSA+PSBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5zdGFyMSAmJiAhdGhpcy50b3BVSS5nZXRDaGlsZEJ5TmFtZShcInN0YXIxXCIpLmFjdGl2ZSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvcFVJLmdldENoaWxkQnlOYW1lKFwic3RhcjFcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihzY2FsZSA+PSBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5zdGFyMiAmJiAhdGhpcy50b3BVSS5nZXRDaGlsZEJ5TmFtZShcInN0YXIyXCIpLmFjdGl2ZSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvcFVJLmdldENoaWxkQnlOYW1lKFwic3RhcjJcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihzY2FsZSA+PSBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5zdGFyMyAmJiAhdGhpcy50b3BVSS5nZXRDaGlsZEJ5TmFtZShcInN0YXIzXCIpLmFjdGl2ZSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvcFVJLmdldENoaWxkQnlOYW1lKFwic3RhcjNcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIC8vIEdhbWVEYXRhLl9pbnN0YW5jZS5zY29yZU1heCA9IDE1MDAwMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlQmxvY2soKXtcclxuICAgICAgICBpZih0aGlzLm92ZXIgPT0gZmFsc2UgJiYgdGhpcy5iZWdpbiA9PSB0cnVlKXtcclxuICAgICAgICAgICAgdGhpcy5Hcm91bmQuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuUGxheWVyLmdldENvbXBvbmVudChcIlBsYXllclwiKS5qdW1wUGF1c2UgPSBmYWxzZTtcclxuICAgICAgICAgICAgdmFyIG51bSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoxMik7XHJcbiAgICAgICAgICAgIGlmKHRoaXMucm91bmQgPD0gMTAgJiYgbnVtID09IDUpe1xyXG4gICAgICAgICAgICAgICAgbnVtID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjYgKyA2KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGJsb2NrID0gY2MuaW5zdGFudGlhdGUodGhpcy5ibG9ja1ByZWZhYltudW1dKTtcclxuICAgICAgICAgICAgbGV0IGhlaWdodCA9IHRoaXMuUGxheWVyLmdldENvbXBvbmVudChcIlBsYXllclwiKS5iYXNpY0hlaWdodCArIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmJsb2NrTWluO1xyXG4gICAgICAgICAgICBpZihudW0gPiBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5ibG9ja1NjYWxlKXtcclxuICAgICAgICAgICAgICAgIGhlaWdodCArPSBibG9jay5oZWlnaHQgKyBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5ibG9ja01heDtcclxuICAgICAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLmhlaWdodCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICBpZihoZWlnaHQgPj0gMCAmJiB0aGlzLmNhbWVyYU1vdmUgPT0gZmFsc2Upe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3VudEhlaWdodCA9IHRoaXMuUGxheWVyLmdldENvbXBvbmVudChcIlBsYXllclwiKS5iYXNpY0hlaWdodCAtIHRoaXMuQ2FtZXJhLm5vZGUueTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FtZXJhTW92ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYmxvY2suc2V0UG9zaXRpb24oY2MudjIodGhpcy5yb3VuZCUyPT0wPzQ4MDotNDgwLGhlaWdodCkpO1xyXG4gICAgICAgICAgICBibG9jay5wYXJlbnQgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJCbG9ja1wiKTtcclxuICAgICAgICAgICAgYmxvY2suekluZGV4ID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2sgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrID0gYmxvY2s7XHJcbiAgICAgICAgICAgIHRoaXMucm91bmQgKz0gMTtcclxuICAgICAgICAgICAgdGhpcy5sZXZlbCArPSAxO1xyXG4gICAgICAgICAgICBpZih0aGlzLnJvdW5kID4gR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8ubGV2ZWxNYXgpIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmxldmVsTWF4ID0gdGhpcy5yb3VuZDtcclxuICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkNMSUNLX0RBVEEubGV2ZWwgPSB0aGlzLnJvdW5kO1xyXG4gICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5yb3VuZCA9IHRoaXMubGV2ZWw7XHJcbiAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLmxheWVyICs9IEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLmxheWVyQWRkO1xyXG4gICAgICAgICAgICBpZihHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5zcGVlZDwyKUdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLnNwZWVkICs9IEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLmFkZFNwZWVkO1xyXG5cclxuICAgICAgICAgICAgaWYoR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8ucmVkdWNlU3BlZWQgPD0gMTAwKVxyXG4gICAgICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8ucmVkdWNlU3BlZWQgKz0gR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8uamlhbnN1O1xyXG4gICAgICAgICAgICBpZih0aGlzLnJvdW5kID09IEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLnJvdW5kMSkgR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8uamlhbnN1ID0gMjtcclxuICAgICAgICAgICAgZWxzZSBpZih0aGlzLnJvdW5kID09IEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLnJvdW5kMikgR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8uamlhbnN1ID0gMTtcclxuICAgICAgICAgICAgZWxzZSBpZih0aGlzLnJvdW5kID09IEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLnJvdW5kMykgR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8uamlhbnN1ID0gMC41O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAgICAgLy/kuqfnlJ/nqbrmsJRcclxuICAgICAgICBjcmVhdGVBaXIoKXtcclxuICAgICAgICAgICAgZm9yKGxldCBpPTA7IGk8MTAwO2krKyl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkdyb3VuZC5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHZhciBudW0gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMTIpO1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5yb3VuZCA8PSAxMCAmJiBudW0gPT0gNSl7XHJcbiAgICAgICAgICAgICAgICAgICAgbnVtID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjYgKyA2KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBibG9jayA9IGNjLmluc3RhbnRpYXRlKHRoaXMuYmxvY2tQcmVmYWJbbnVtXSk7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVpZ2h0ID0gdGhpcy5QbGF5ZXIuZ2V0Q29tcG9uZW50KFwiUGxheWVyXCIpLmJhc2ljSGVpZ2h0ICsgR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8uYmxvY2tNaW47XHJcbiAgICAgICAgICAgICAgICBpZihudW0gPiBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5ibG9ja1NjYWxlKXtcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQgKz0gYmxvY2suaGVpZ2h0ICsgR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8uYmxvY2tNYXg7XHJcbiAgICAgICAgICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkNMSUNLX0RBVEEuaGVpZ2h0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgICAgICAgICBibG9jay5zZXRQb3NpdGlvbihjYy52Mih0aGlzLnJvdW5kJTI9PTA/NDgwOi00ODAsaGVpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICBibG9jay5wYXJlbnQgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJCbG9ja1wiKTtcclxuICAgICAgICAgICAgICAgIGJsb2NrLnpJbmRleCA9IDEwO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucm91bmQgKz0gMTtcclxuICAgICAgICAgICAgICAgIHRoaXMubGV2ZWwgKz0gMTtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMucm91bmQgPiBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5sZXZlbE1heCkgR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8ubGV2ZWxNYXggPSB0aGlzLnJvdW5kO1xyXG4gICAgICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkNMSUNLX0RBVEEubGV2ZWwgPSB0aGlzLnJvdW5kO1xyXG4gICAgICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkNMSUNLX0RBVEEucm91bmQgPSB0aGlzLmxldmVsO1xyXG4gICAgICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8ubGF5ZXIgKz0gR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8ubGF5ZXJBZGQ7XHJcbiAgICAgICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5zcGVlZCArPSBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5hZGRTcGVlZDtcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmKEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLnJlZHVjZVNwZWVkIDw9IDgwKVxyXG4gICAgICAgICAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLnJlZHVjZVNwZWVkICs9IEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLmppYW5zdTtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMucm91bmQgPT0gR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8ucm91bmQxKSBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5qaWFuc3UgPSAyO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBpZih0aGlzLnJvdW5kID09IEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLnJvdW5kMikgR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8uamlhbnN1ID0gMTtcclxuICAgICAgICAgICAgICAgIGVsc2UgaWYodGhpcy5yb3VuZCA9PSBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5yb3VuZDMpIEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLmppYW5zdSA9IDAuNTtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgY2xlYXJBaXIoKXtcclxuICAgICAgICAgICAgY2MuZGlyZWN0b3IubG9hZFNjZW5lKFwiR2FtZVNjZW5lXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAvL+iZmuWBh+eijuijguWdl1xyXG4gICAgY3JlYXRlQ3JhY2tCbG9jaygpe1xyXG4gICAgICAgIHRoaXMuaW50ZXJmZXJlID0gdHJ1ZTtcclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5mYWtlID0gdGhpcy5pbnRlcmZlcmU7XHJcbiAgICAgICAgaWYodGhpcy5yb3VuZCA+IDEpIHRoaXMuZGVzdHJveUJsb2NrKHRydWUpO1xyXG4gICAgICAgIGlmKHRoaXMub3ZlciA9PSBmYWxzZSAmJiB0aGlzLmJlZ2luID09IHRydWUpe1xyXG4gICAgICAgICAgICB2YXIgYmxvY2sgPSBjYy5pbnN0YW50aWF0ZSh0aGlzLmJsb2NrUHJlZmFiWzEyXSk7XHJcbiAgICAgICAgICAgIGxldCBoZWlnaHQgPSB0aGlzLlBsYXllci5nZXRDb21wb25lbnQoXCJQbGF5ZXJcIikuYmFzaWNIZWlnaHQ7XHJcbiAgICAgICAgICAgIGlmKEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLmhlaWdodCA9PSB0cnVlKXtcclxuICAgICAgICAgICAgICAgIGhlaWdodCArPSBibG9jay5oZWlnaHQvMjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBibG9jay5zZXRQb3NpdGlvbihjYy52Mih0aGlzLnJvdW5kJTI9PTA/NDgwOi00ODAsaGVpZ2h0KSk7XHJcbiAgICAgICAgICAgIGJsb2NrLnBhcmVudCA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkNyYWNrQmxvY2tcIik7XHJcbiAgICAgICAgICAgIGJsb2NrLnpJbmRleCA9IDE7XHJcblxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgZGVzdHJveUJsb2NrKHR5cGUpe1xyXG4gICAgICAgIGlmKHR5cGUgPT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgIGlmKHRoaXMubm9kZSl7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJDcmFja0Jsb2NrXCIpKXtcclxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJDcmFja0Jsb2NrXCIpLmNoaWxkcmVuKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJsb2NrMiA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkNyYWNrQmxvY2tcIikuY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaT0wOyBpPGJsb2NrMi5sZW5ndGg7IGkrKyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihibG9jazJbaV0pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrMltpXS5nZXRDb21wb25lbnQoXCJCbG9ja1wiKS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgdmFyIGJsb2NrID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiQmxvY2tcIikuY2hpbGRyZW47XHJcbiAgICAgICAgICAgIGZvcihsZXQgaT0wOyBpPGJsb2NrLmxlbmd0aDsgaSsrKXtcclxuICAgICAgICAgICAgICAgIGlmKGJsb2NrW2ldKXtcclxuICAgICAgICAgICAgICAgICAgICBibG9ja1tpXS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB4aW5BY3Rpb24oKXtcclxuICAgICAgICBsZXQgeGluICA9ICB0aGlzLnRvcFVJLmdldENoaWxkQnlOYW1lKFwieGluMVwiKTtcclxuICAgICAgICBpZihHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5saWZlID09IDIpIHhpbiA9IHRoaXMudG9wVUkuZ2V0Q2hpbGRCeU5hbWUoXCJ4aW4zXCIpO1xyXG4gICAgICAgIGVsc2UgaWYoR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8ubGlmZSA9PSAxKSAgeGluID0gdGhpcy50b3BVSS5nZXRDaGlsZEJ5TmFtZShcInhpbjJcIik7XHJcbiAgICAgICAgY2MudHdlZW4oeGluKVxyXG4gICAgICAgIC50bygwLjYse3NjYWxlOjEuNixvcGFjaXR5OjB9KVxyXG4gICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgICB4aW4uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuc3RhcnQoKTtcclxuICAgIH1cclxuICAgIC8v5q275LqhXHJcbiAgICBnZXREZWF0aChkYXRhKXtcclxuICAgICAgICBpZihkYXRhID09IHRydWUpe1xyXG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3lCbG9jayhmYWxzZSk7XHJcbiAgICAgICAgICAgIGNjLnR3ZWVuKHRoaXMuUGxheWVyKVxyXG4gICAgICAgICAgICAudG8oMSx7eTotNTAwfSx7ZWFzaW5nOidjdWJpY0luJ30pXHJcbiAgICAgICAgICAgIC5jYWxsKCgpPT57XHJcbiAgICAgICAgICAgICAgICB0aGlzLlBsYXllci5nZXRDb21wb25lbnQoXCJQbGF5ZXJcIikuaW5pdCgpO1xyXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5QbGF5ZXIuZ2V0Q29tcG9uZW50KFwiUGxheWVyXCIpLmp1bXBQYXVzZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLmd1aWRlID4gNSl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5ndWlkZSA9PSA2KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ndWlkZSA9IDU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91bmQgPSAyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0R3VpZGUoNSx0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3VuZCA9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRHdWlkZSg2LHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91bmQgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRHdWlkZSgzLHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZGVsYXkoMC41KVxyXG4gICAgICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIGlmKEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmxpZmUgPiAwKXtcclxuICAgICAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmxpZmUgLT0gMTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0RGV2aXZlKDEpO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmxpZmUgPSAtMTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0RGV2aXZlKDMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIC8v5aSN5rS7XHJcbiAgICBnZXREZXZpdmUodGltZSl7XHJcbiAgICAgICAgdGhpcy5yb3VuZCA9IDA7XHJcbiAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX2luaXQoKTtcclxuICAgICAgICBpZih0aGlzLnRvcFVJLmdldENoaWxkQnlOYW1lKFwic3RhcjNcIikuYWN0aXZlID09IHRydWUpe1xyXG4gICAgICAgICAgICAvLyBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5zY29yZU1heCA9IDE1MDAwMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pbnRlcmZlcmUgPSBmYWxzZTtcclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5mYWtlID0gdGhpcy5pbnRlcmZlcmU7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95QmxvY2soZmFsc2UpO1xyXG4gICAgICAgIHZhciBibG9jazIgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJDcmFja0Jsb2NrXCIpLmNoaWxkcmVuO1xyXG4gICAgICAgIGZvcihsZXQgaT0wOyBpPGJsb2NrMi5sZW5ndGg7IGkrKyl7XHJcbiAgICAgICAgICAgIGlmKGJsb2NrMltpXSl7XHJcbiAgICAgICAgICAgICAgICBibG9jazJbaV0uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gdGhpcy5ibG9ja0FycmF5ID0gW107XHJcbiAgICAgICAgbGV0IGFjdGlvblRpbWUgPSAxO1xyXG4gICAgICAgIGlmKHRoaXMuUGxheWVyLnkgPiA1MDApe1xyXG4gICAgICAgICAgICBhY3Rpb25UaW1lID0gKHRoaXMuUGxheWVyLnkgKyA1MDApLzEwMDAqYWN0aW9uVGltZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2MudHdlZW4odGhpcy5QbGF5ZXIpXHJcbiAgICAgICAgLnRvKGFjdGlvblRpbWUse3k6LTUwMH0se2Vhc2luZzonY3ViaWNJbid9KVxyXG4gICAgICAgIC5jYWxsKCgpPT57XHJcbiAgICAgICAgICAgIHRoaXMuUGxheWVyLmdldENvbXBvbmVudChcIlBsYXllclwiKS54aW5BY3Rpb24oKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5kZWxheSgwLjUpXHJcbiAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgIHRoaXMueGluQWN0aW9uKCk7XHJcbiAgICAgICAgICAgIHRoaXMuUGxheWVyLmdldENvbXBvbmVudChcIlBsYXllclwiKS5pbml0KCk7XHJcbiAgICAgICAgICAgIGlmKHRpbWUgPiAxKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuWGluLnBhcmVudC5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5YaW4uZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuZmlsbFJhbmdlID0gMDtcclxuICAgICAgICAgICAgICAgIGNjLnR3ZWVuKHRoaXMuWGluLmdldENvbXBvbmVudChjYy5TcHJpdGUpKVxyXG4gICAgICAgICAgICAgICAgLnRvKHRpbWUse2ZpbGxSYW5nZToxfSlcclxuICAgICAgICAgICAgICAgIC5kZWxheSgwLjMpXHJcbiAgICAgICAgICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLlhpbi5wYXJlbnQuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmRlbGF5KDApXHJcbiAgICAgICAgICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUJsb2NrKCk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlQmxvY2soKTtcclxuICAgICAgICAgICAgICAgIH0sICh0aW1lKzAuNSkqMTAwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdGFydCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldERhdGEoKXtcclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS50b3RhbFNjb3JlID0gR2FtZU1hbmFnZXIuX2luc3RhbmNlLnNjb3JlO1xyXG4gICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLnRpbWVyID0gdGhpcy5jb3VudFRpbWU7XHJcbiAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkNMSUNLX0RBVEEubGV2ZWwgPSB0aGlzLnJvdW5kO1xyXG4gICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLnJvdW5kID0gdGhpcy5sZXZlbDtcclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5pc0FGSyA9IEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmlzQUZLO1xyXG5cclxuICAgICAgICAvL0NMSUNLX0RBVEEg5pWw5o2u5aSE55CG5a6M5q+V5ZCO6LCD55So5LiK5Lyg5o6l5Y+jICDkuIrkvKDmjqXlj6PlhoVDTElDS19EQVRB5LiN5YGa5pS55Y+YXHJcbiAgICAgICAgR2FtZVRvb2wuc2V0R2FtZURhdGEoKTtcclxuICAgIH1cclxuXHJcbiAgICAvL+iOt+WPlm1hdGNoSWQgIOeUqOS6juS4iuS8oOavj+asoeeCueWHu+aVsOaNrumHjOmdouiusOW9lWlk5pa55L6/5p+l6K+iXHJcbiAgICBnZXRNYXRjaElkICgpe1xyXG4gICAgICAgIGxldCBtYXRjaElkID0gY2Muc3lzLmxvY2FsU3RvcmFnZS5nZXRJdGVtKFwibWF0Y2hJZFwiKTtcclxuICAgICAgICBpZihtYXRjaElkID09IFwidW5kaWZlbmRcIiB8fCBtYXRjaElkPT1udWxsKXtcclxuICAgICAgICAgICAgbWF0Y2hJZCA9ICB0aGlzLnNldE1hdGNoSWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgaWYodGhpcy5jb250YWluc05hbmFuYShtYXRjaElkKSA9PSB0cnVlKXtcclxuICAgICAgICAgICAgICAgIG1hdGNoSWQgPSAgdGhpcy5zZXRNYXRjaElkKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgIGxldCBjaGFyID0gcGFyc2VJbnQobWF0Y2hJZFsxMF0pO1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5sZXZlbCA9PSAxKXtcclxuICAgICAgICAgICAgICAgICAgICBjaGFyICs9IDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBtYXRjaElkICA9IG1hdGNoSWQuc2xpY2UoMCwgMTApICsgY2hhciArIFwiXCI7XHJcbiAgICAgICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5tYXRjaElkID0gbWF0Y2hJZDtcclxuICAgICAgICAgICAgICAgIGNjLnN5cy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIm1hdGNoSWRcIixtYXRjaElkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbWF0Y2hJZDtcclxuICAgIH1cclxuICAgIC8v5qOA5rWLbWF0Y2hJZCDlpoLmnpzmnInnvJPlrZjku6XliY3nmoRuYW5hbmHmlbDmja7muIXpmaRcclxuICAgIGNvbnRhaW5zTmFuYW5hKHN0cikge1xyXG4gICAgICAgIHJldHVybiAvbmEvaS50ZXN0KHN0cik7XHJcbiAgICB9XHJcbiAgICAvL+mHjeaWsOiuvue9rk1hdGNoSWRcclxuICAgIHNldE1hdGNoSWQgKCl7XHJcbiAgICAgICAgLy8g5a6a5LmJ5YyF5ZCr5Y+v55So5a2X56ym55qE5a2X56ym6ZuGXHJcbiAgICAgICAgY29uc3QgY2hhcmFjdGVycyA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1Njc4OSc7XHJcbiAgICAgICAgLy8g5Yib5bu65LiA5Liq5pWw57uE5Lul5L+d5a2Y6ZqP5py65a2X56ymXHJcbiAgICAgICAgY29uc3QgdXVpZEFycmF5ID0gW107XHJcbiAgICAgICAgLy8g5b6q546vMTDmrKEg55Sf5oiQMTDkvY3nmoRVVUlEXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAvLyDnlJ/miJDpmo/mnLrntKLlvJXvvIzojIPlm7TmmK/lrZfnrKbpm4bnmoTplb/luqZcclxuICAgICAgICAgICAgY29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFyYWN0ZXJzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIC8vIOS7juWtl+espumbhuS4reiOt+WPlumaj+acuuWtl+esplxyXG4gICAgICAgICAgICBjb25zdCByYW5kb21DaGFyID0gY2hhcmFjdGVycy5jaGFyQXQocmFuZG9tSW5kZXgpO1xyXG4gICAgICAgICAgICAvLyDlsIblrZfnrKbmt7vliqDliLDmlbDnu4TkuK1cclxuICAgICAgICAgICAgdXVpZEFycmF5LnB1c2gocmFuZG9tQ2hhcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBkYXRhID0gIHV1aWRBcnJheS5qb2luKCcnKSArIDEgKyBcIlwiO1xyXG4gICAgICAgIGNjLnN5cy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIm1hdGNoTnVtYmVyXCIsMSk7XHJcbiAgICAgICAgY2Muc3lzLmxvY2FsU3RvcmFnZS5zZXRJdGVtKFwibWF0Y2hJZFwiLGRhdGEpO1xyXG4gICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLm1hdGNoSWQgPSBkYXRhO1xyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUNvdW50RG93blRpbWUgKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvdW50VGltZSA+IDAgJiYgIUdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLnByb2JhdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLmNvdW50VGltZSAtPSAxO1xyXG4gICAgICAgICAgICB0aGlzLnRpbWUuc3RyaW5nID0gdGhpcy5nZXRUaW1lTWFyZ2luKHRoaXMuY291bnRUaW1lKTtcclxuICAgICAgICAgICAgaWYodGhpcy5jb3VudFRpbWUgPCA1KXtcclxuICAgICAgICAgICAgICAgIGNjLnR3ZWVuKHRoaXMudGltZS5ub2RlKVxyXG4gICAgICAgICAgICAgICAgLnRvKDAuMjUse3NjYWxlOjEuNSxjb2xvcjpjYy5jb2xvcigyNTUsMCwwKX0pXHJcbiAgICAgICAgICAgICAgICAudG8oMC4yNSx7c2NhbGU6MSxjb2xvcjpjYy5jb2xvcigyNTUsMjU1LDI1NSl9KVxyXG4gICAgICAgICAgICAgICAgLnN0YXJ0KClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZih0aGlzLmNvdW50VGltZSA8PSAwKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudW5zY2hlZHVsZSh0aGlzLnVwZGF0ZUNvdW50RG93blRpbWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iZWdpbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vdmVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMub3ZlclN0b3AoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuaygpO1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVyT3BlbigpO1xyXG4gICAgICAgICAgICAgICAgfSwgMjAwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvL+WBnOatouaJgOacieWKqOeUu1xyXG4gICAgb3ZlclN0b3AoKXtcclxuICAgICAgICBpZih0aGlzLlBsYXllci5nZXRDb21wb25lbnQoXCJQbGF5ZXJcIikuanVtcEFjdGlvbilcclxuICAgICAgICAgICAgdGhpcy5QbGF5ZXIuZ2V0Q29tcG9uZW50KFwiUGxheWVyXCIpLmp1bXBBY3Rpb24uc3RvcCgpO1xyXG4gICAgICAgIHZhciBibG9jayA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkJsb2NrXCIpLmNoaWxkcmVuO1xyXG4gICAgICAgIGZvcihsZXQgaT0wOyBpPGJsb2NrLmxlbmd0aDsgaSsrKXtcclxuICAgICAgICAgICAgaWYoYmxvY2tbaV0pe1xyXG4gICAgICAgICAgICAgICAgaWYoYmxvY2tbaV0uZ2V0Q29tcG9uZW50KFwiQmxvY2tcIikudHdlZW4pXHJcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tbaV0uZ2V0Q29tcG9uZW50KFwiQmxvY2tcIikudHdlZW4uc3RvcCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBibG9jazIgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJDcmFja0Jsb2NrXCIpLmNoaWxkcmVuO1xyXG4gICAgICAgIGZvcihsZXQgaT0wOyBpPGJsb2NrMi5sZW5ndGg7IGkrKyl7XHJcbiAgICAgICAgICAgIGlmKGJsb2NrMltpXSl7XHJcbiAgICAgICAgICAgICAgICBpZihibG9jazJbaV0uZ2V0Q29tcG9uZW50KFwiQmxvY2tcIikudHdlZW4pXHJcbiAgICAgICAgICAgICAgICAgICAgYmxvY2syW2ldLmdldENvbXBvbmVudChcIkJsb2NrXCIpLnR3ZWVuLnN0b3AoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXRSYW5rKCl7XHJcbiAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8uc2NvcmUgPSB0aGlzLnNjb3JlO1xyXG4gICAgICAgIEdhbWVUb29sLnNldFJhbmsoKTtcclxuICAgIH1cclxuXHJcbiAgICBvdmVyT3Blbigpe1xyXG4gICAgICAgIHRoaXMuUGxheWVyLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZGVzdHJveUJsb2NrKGZhbHNlKTtcclxuICAgICAgICB0aGlzLmRlc3Ryb3lCbG9jayh0cnVlKTtcclxuICAgICAgICB0aGlzLkdhbWVPdmVyLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5HYW1lT3Zlci5nZXRDaGlsZEJ5TmFtZShcInNjb3JlXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gdGhpcy5zY29yZSArIFwiXCI7XHJcbiAgICAgICAgdGhpcy5HYW1lT3Zlci5nZXRDaGlsZEJ5TmFtZShcImxldmVsXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gXHJcbiAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8ubGV2ZWxNYXggKyBcIlwiO1xyXG4gICAgICAgIC8vIHRoaXMuR2FtZU92ZXIuZ2V0Q2hpbGRCeU5hbWUoXCJkaWZmaWN1bHR5XCIpLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gXHJcbiAgICAgICAgLy8gR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8uZGlmZmljdWx0eU1heCArIFwiXCI7XHJcblxyXG4gICAgICAgIGxldCBkaWZmaWN1bHR5ID0gcGFyc2VJbnQodGhpcy5kaWZmaWN1bHR5QXJyYXkvdGhpcy5sZXZlbCoxMCtcIlwiKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIumavuW6puaAu+aVsFwiLHRoaXMuZGlmZmljdWx0eUFycmF5LFwi5qyh5pWwXCIsdGhpcy5sZXZlbCxcIuacgOe7iFwiLGRpZmZpY3VsdHkpO1xyXG4gICAgICAgIHRoaXMuR2FtZU92ZXIuZ2V0Q2hpbGRCeU5hbWUoXCJkaWZmaWN1bHR5XCIpLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gXHJcbiAgICAgICAgZGlmZmljdWx0eS8xMCArIFwiXCI7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgYmFja0xvYWQoKXtcclxuICAgICAgICB0aGlzLmRlc3Ryb3lCbG9jayhmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95QmxvY2sodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vbkRlc3Ryb3koKTtcclxuICAgICAgICBjYy5kaXJlY3Rvci5sb2FkU2NlbmUoXCJMb2FkU2NlbmVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgYWdhaW4oKXtcclxuICAgICAgICB0aGlzLmRlc3Ryb3lCbG9jayhmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95QmxvY2sodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vbkRlc3Ryb3koKTtcclxuICAgICAgICBjYy5kaXJlY3Rvci5sb2FkU2NlbmUoXCJHYW1lU2NlbmVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgb3BlblJhbmsoKXtcclxuICAgICAgICBjYy5kaXJlY3Rvci5sb2FkU2NlbmUoXCJSYW5rU2NlbmVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgLy/ml7bpl7TmoLzlvI/ovazmjaJcclxuICAgIGdldFRpbWVNYXJnaW4oc2Vjb25kOm51bWJlcikge1xyXG4gICAgICAgIGxldCB0b3RhbCA9IDA7XHJcbiAgICAgICAgdG90YWwgPSBzZWNvbmQ7XHJcbiAgICAgICAgbGV0IGhvdXIgPSAwO1xyXG4gICAgICAgIGhvdXIgPSBwYXJzZUludCgodG90YWwgLyAzNjAwKSArIFwiXCIpOy8v6K6h566X5pW05pWw5bCP5pe25pWwXHJcbiAgICAgICAgbGV0IGFmdGVySG91ciA9IHRvdGFsIC0gaG91ciAqIDYwICogNjA7Ly/lj5blvpfnrpflh7rlsI/ml7bmlbDlkI7liankvZnnmoTnp5LmlbBcclxuICAgICAgICBsZXQgbWluID0gcGFyc2VJbnQoKGFmdGVySG91ciAvIDYwKStcIlwiKTsvL+iuoeeul+aVtOaVsOWIhlxyXG4gICAgICAgIGxldCBtID0gXCJcIiArIG1pbjsgIFxyXG4gICAgICAgIGlmKG1pbiA8IDEwKSBtID0gXCIwXCIrbWluO1xyXG4gICAgICAgIGxldCBhZnRlck1pbiA9IHRvdGFsIC0gaG91ciAqIDYwICogNjAgLSBtaW4gKiA2MDsvL+WPluW+l+eul+WHuuWIhuWQjuWJqeS9meeahOenkuaVsFxyXG4gICAgICAgIGxldCBtaWFvID0gYWZ0ZXJNaW4gKyBcIlwiO1xyXG4gICAgICAgIGlmKGFmdGVyTWluIDwgMTApIG1pYW8gPSBcIjBcIiArIGFmdGVyTWluO1xyXG4gICAgICAgIHJldHVybiBtICsgJzonICsgbWlhb1xyXG4gICAgfVxyXG4gICAgdXBkYXRlIChkdCkge1xyXG4gICAgICAgIGlmKHRoaXMuY2FtZXJhTW92ZSA9PSB0cnVlICYmIHRoaXMub3ZlciA9PSBmYWxzZSl7XHJcbiAgICAgICAgICAgIHRoaXMuQ2FtZXJhLm5vZGUueSA9IHRoaXMuUGxheWVyLnkgLSB0aGlzLmNvdW50SGVpZ2h0O1xyXG4gICAgICAgICAgICBpZih0aGlzLkNhbWVyYS5ub2RlLnkgPD0gMCkgdGhpcy5DYW1lcmEubm9kZS55ID0gMDtcclxuICAgICAgICAgICAgdGhpcy50b3BVSS55ID0gdGhpcy5DYW1lcmEubm9kZS55ICsgdGhpcy5kcm9wO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=
|