ShenNong/temp/quick-scripts/dst/assets/Script/GameManager.js
YZ\249929363 c2a30b650a 完整版
2024-06-28 16:46:13 +08:00

437 lines
57 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(function() {
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
var __module = nodeEnv ? module : {exports:{}};
var __filename = 'preview-scripts/assets/Script/GameManager.js';
var __require = nodeEnv ? function (request) {
return cc.require(request);
} : function (request) {
return __quick_compile_project__.require(request, __filename);
};
function __define (exports, require, module) {
if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict";
cc._RF.push(module, 'b0432BA295DjIOcuitdGKO1', 'GameManager');
// Script/GameManager.ts
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
Object.defineProperty(exports, "__esModule", { value: true });
// 主游戏控制类
var _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.Btn_New = null;
_this.Btn_Hear = null;
_this.Btn_See = null;
_this.Btn_Firewood = null;
_this.Plant = null;
_this.timeNode = null;
_this.FoodPlist = null;
return _this;
}
GameManager.prototype.onLoad = function () {
this.fit();
this.init();
this.startGame();
};
GameManager.prototype.start = function () {
};
//初始化数据
GameManager.prototype.init = function () {
this.touchable = false;
this.result = -1;
this.foodAudioArray = [];
this.foodPicArray = [];
this.timeTween = null;
this.needleTween = null;
this.choice = 0;
cc.fx.GameConfig.GM_INFO.stepTimeList = 0;
cc.fx.GameConfig.GM_INFO.successList = [];
cc.fx.GameConfig.GM_INFO.level = 0;
this.voiceSpriteFrame = this.Plant.getChildByName("icon").getComponent(cc.Sprite).spriteFrame;
this.btnReset();
};
//开始游戏
GameManager.prototype.startGame = function () {
var _this = this;
cc.tween(this.node.getChildByName("Begin"))
.to(0.1, { opacity: 0 })
.to(0.5, { opacity: 255 })
.delay(1)
.to(0.5, { opacity: 0 })
.call(function () {
_this.createCustom();
})
.start();
};
//根据是否全面屏,做独立适配方面
GameManager.prototype.fit = function () {
var jg = cc.fx.GameTool.setFit();
if (!jg) {
this.Btn_Hear.y = -330;
this.Btn_See.y = -460;
this.Btn_Firewood.y = -600;
}
};
//创建关卡
GameManager.prototype.createCustom = function () {
var _this = this;
this.choice = 0;
this.Plant.opacity = 0;
this.timeNode.getChildByName("time").getComponent(cc.Sprite).fillRange = 0;
this.timeNode.getChildByName("needle").angle = 0;
if (cc.fx.GameConfig.GM_INFO.level >= cc.fx.GameConfig.LEVEL_INFO[cc.fx.GameConfig.GM_INFO.custom].custom.length) {
cc.director.loadScene("OverScene");
return;
}
this.customData = cc.fx.GameConfig.LEVEL_INFO[cc.fx.GameConfig.GM_INFO.custom].custom[cc.fx.GameConfig.GM_INFO.level];
var name = this.customData.item;
//埋点数据设置
cc.fx.GameConfig.CLICK_SET("round", cc.fx.GameConfig.GM_INFO.level);
cc.fx.GameConfig.CLICK_SET("levelConfig", cc.fx.GameConfig.GM_INFO.custom);
cc.fx.GameConfig.CLICK_SET("item", name);
cc.fx.GameConfig.CLICK_SET("roundType", this.customData.type);
if (this.customData.type == 1) {
this.Plant.getChildByName("name").getComponent(cc.Label).string = cc.fx.GameTool.getFoodName(name);
name = "prop_" + name;
this.Plant.getChildByName("icon").getComponent(cc.Sprite).spriteFrame = this.FoodPlist["_spriteFrames"][name];
this.now_Food = name;
cc.tween(this.Plant)
.to(0.2, { opacity: 255 })
.call(function () {
_this.startTimer();
})
.start();
}
else {
this.Plant.getChildByName("name").getComponent(cc.Label).string = "";
this.Plant.getChildByName("icon").getComponent(cc.Sprite).spriteFrame = this.voiceSpriteFrame;
var audioName = name + "_audio";
name = "audio" + name;
this.now_Food = name;
cc.fx.AudioManager._instance.playEffect(audioName, this.startTimer.bind(this));
cc.tween(this.Plant)
.to(0.2, { opacity: 255 })
.call(function () {
})
.start();
}
//关卡+1
cc.fx.GameConfig.GM_INFO.level += 1;
};
//开始转圈倒计时
GameManager.prototype.startTimer = function () {
var _this = this;
this.startTime = cc.fx.GameTool.getTime();
this.Btn_Hear.getChildByName("nomal").getComponent(cc.Button).interactable = true;
this.Btn_New.getChildByName("nomal").getComponent(cc.Button).interactable = true;
this.Btn_See.getChildByName("nomal").getComponent(cc.Button).interactable = true;
if (this.containsNanana(this.now_Food) == true) {
// console.log("可以点火");
this.Btn_Firewood.getComponent(cc.Button).interactable = true;
}
this.timeNode.getChildByName("time").getComponent(cc.Sprite).fillRange = 0;
this.needleTween =
cc.tween(this.timeNode.getChildByName("needle"))
.to(5, { angle: -360 })
.start();
this.timeTween =
cc.tween(this.timeNode.getChildByName("time").getComponent(cc.Sprite))
.to(5, { fillRange: 1 })
.call(function () {
_this.timeTween = null;
_this.Btn_Hear.getChildByName("nomal").getComponent(cc.Button).interactable = false;
_this.Btn_New.getChildByName("nomal").getComponent(cc.Button).interactable = false;
_this.Btn_See.getChildByName("nomal").getComponent(cc.Button).interactable = false;
_this.Btn_Firewood.getComponent(cc.Button).interactable = false;
_this.setData(null);
_this.nextLevel();
})
.start();
};
GameManager.prototype.containsNanana = function (str) {
return /muchai/i.test(str);
};
//新植物按钮
GameManager.prototype.click_Choice = function (customData, data) {
//关掉计时器 处理逻辑之前,先行关掉按钮开关
this.Btn_Hear.getChildByName("nomal").getComponent(cc.Button).interactable = false;
this.Btn_New.getChildByName("nomal").getComponent(cc.Button).interactable = false;
this.Btn_See.getChildByName("nomal").getComponent(cc.Button).interactable = false;
this.Btn_Firewood.getComponent(cc.Button).interactable = false;
this.timeTween.stop();
this.timeTween = null;
this.needleTween.stop();
this.needleTween = null;
//判断是否正确,并把出现的物品存入数组
this.result = this.judgingResult();
if (data == "Btn_New") {
if (this.result == -1) {
this.result = 1;
}
else {
this.result = -1;
}
}
//设置按钮状态
this.setBtnState(this[data], data);
//根据答题,设置上传数据
this.setData(data);
//获取反应时间
this.setTimeData();
//进行下一关
this.nextLevel();
};
//点火按钮
GameManager.prototype.click_Ignition = function () {
var _this = this;
cc.fx.GameConfig.CLICK_SET("ignite", true);
if (this.customData.flamable == 0) {
// console.log("错误点火");
}
else if (this.customData.flamable == 1) {
var igniteCount = cc.fx.GameConfig.CLICK_DATA.igniteCount + 1;
cc.fx.GameConfig.CLICK_SET("igniteCount", igniteCount);
this.Btn_Firewood.getChildByName("fireBg").active = true;
this.Btn_Firewood.getChildByName("fire").active = true;
setTimeout(function () {
if (_this.Btn_Firewood) {
_this.Btn_Firewood.getChildByName("fireBg").active = false;
_this.Btn_Firewood.getChildByName("fire").active = false;
}
}, 1050);
// console.log("正确点火");
}
};
//判断是否有过的结果 type只为new hear see 三选一
GameManager.prototype.judgingResult = function () {
var result = -1;
//先检查音频
var name = this.now_Food.substring(5, this.now_Food.length);
if (this.foodAudioArray.length > 0) {
for (var i = 0; i < this.foodAudioArray.length; i++) {
if (name == this.foodAudioArray[i].substring(5, this.now_Food.length)) {
result = 2;
this.foodAudioArray.splice(i, 1);
cc.fx.GameConfig.CLICK_SET("rightChoice", 2);
i = 10000;
break;
}
}
}
//再检查图盘
if (this.foodPicArray.length > 0) {
for (var i = 0; i < this.foodPicArray.length; i++) {
if (name == this.foodPicArray[i].substring(5, this.now_Food.length)) {
//如果图片里面有
result = 3;
this.foodPicArray.splice(i, 1);
cc.fx.GameConfig.CLICK_SET("rightChoice", 3);
i = 10000;
break;
}
}
}
//把新生成的存放进数组里
if (this.now_Food.substring(0, 4) != "prop") {
this.foodAudioArray.push(this.now_Food);
}
else {
this.foodPicArray.push(this.now_Food);
}
if (result == -1) {
cc.fx.GameConfig.CLICK_SET("rightChoice", 1);
}
return result;
};
//计算反应时间
GameManager.prototype.setTimeData = function () {
this.overTime = cc.fx.GameTool.getTime();
var time = this.overTime - this.startTime;
cc.fx.GameConfig.CLICK_SET("stepTime", time);
//防止溢出
if (time < 0 || time > 2500)
time = 2500;
cc.fx.GameConfig.GM_INFO.stepTimeList += time;
};
//设置按钮状态
GameManager.prototype.setBtnState = function (node, data) {
if (data == "Btn_New")
this.choice = 1;
else if (data == "Btn_Hear")
this.choice = 2;
else if (data == "Btn_See")
this.choice = 3;
else if (data == null) {
this.choice = 0;
}
if (this.choice != cc.fx.GameConfig.CLICK_DATA.rightChoice) {
node.getChildByName("err").active = true;
node.getChildByName("correct").active = false;
}
else {
node.getChildByName("err").active = false;
node.getChildByName("correct").active = true;
}
node.getChildByName("nomal").active = false;
this.Btn_Hear.getChildByName("nomal").getComponent(cc.Button).interactable = false;
this.Btn_New.getChildByName("nomal").getComponent(cc.Button).interactable = false;
this.Btn_See.getChildByName("nomal").getComponent(cc.Button).interactable = false;
this.Btn_Firewood.getComponent(cc.Button).interactable = false;
};
//下一轮 首先重置按钮状态
GameManager.prototype.nextLevel = function () {
var _this = this;
cc.tween(this.Plant)
.delay(1)
.call(function () {
_this.btnReset();
})
.to(0.5, { opacity: 0 })
.call(function () {
_this.createCustom();
})
.start();
};
GameManager.prototype.btnReset = function () {
this.Btn_New.getChildByName("nomal").active = true;
this.Btn_New.getChildByName("err").active = false;
this.Btn_New.getChildByName("correct").active = false;
this.Btn_Hear.getChildByName("nomal").active = true;
this.Btn_Hear.getChildByName("err").active = false;
this.Btn_Hear.getChildByName("correct").active = false;
this.Btn_See.getChildByName("nomal").active = true;
this.Btn_See.getChildByName("err").active = false;
this.Btn_See.getChildByName("correct").active = false;
this.Btn_Hear.getChildByName("nomal").getComponent(cc.Button).interactable = false;
this.Btn_New.getChildByName("nomal").getComponent(cc.Button).interactable = false;
this.Btn_See.getChildByName("nomal").getComponent(cc.Button).interactable = false;
this.Btn_Firewood.getComponent(cc.Button).interactable = false;
};
//返回首页
GameManager.prototype.backScene = function () {
cc.director.loadScene("LoadScene");
};
//下一关或者重新开始或者返回上一关根据level决定
GameManager.prototype.reStart = function (type) {
};
//获取时间戳
GameManager.prototype.getTime = function () {
var timestamp = new Date().getTime();
return timestamp;
};
//获胜
GameManager.prototype.passLevel = function () {
};
//失败
GameManager.prototype.loseLevel = function (type) {
};
//如果是倒计时 调用此方法
GameManager.prototype.startCountDownTime = function () {
this.timeNode.getChildByName("time").getComponent(cc.Sprite).fillRange = 0;
this.timeNode.getChildByName("needle").angle = 0;
};
//上传每次操作数据
GameManager.prototype.setData = function (data) {
if (data == "Btn_New")
this.choice = 1;
else if (data == "Btn_Hear")
this.choice = 2;
else if (data == "Btn_See")
this.choice = 3;
else if (data == null) {
this.choice = 0;
cc.fx.GameConfig.CLICK_SET("stepTime", 5000);
cc.fx.GameConfig.GM_INFO.stepTimeList += 5000;
}
var jg = false;
if (this.choice == cc.fx.GameConfig.CLICK_DATA.rightChoice) {
jg = true;
cc.fx.GameConfig.GM_INFO.successList.push(jg);
}
cc.fx.GameConfig.CLICK_SET("choice", this.choice);
cc.fx.GameConfig.CLICK_SET("success", jg);
cc.fx.GameTool.setGameData();
};
//上传排行榜数据
GameManager.prototype.gameOver = function (time) {
cc.fx.GameTool.setRank(time);
this.node.getChildByName("GameOver").active = true;
this.node.getChildByName("GameOver").opacity = 0;
cc.tween(this.node.getChildByName("GameOver"))
.to(0.4, { opacity: 255 })
.delay(2)
.to(0.4, { opacity: 50 })
.call(function () {
cc.director.loadScene("OverScene");
})
.start();
};
GameManager.prototype.onEnable = function () {
// cc.fx.Notifications.on("clickSun", this.clickSun, this);
};
GameManager.prototype.onDisable = function () {
// cc.fx.Notifications.off("clickSun", this.clickSun);
};
GameManager.prototype.update = function (dt) {
};
__decorate([
property(cc.Node)
], GameManager.prototype, "Btn_New", void 0);
__decorate([
property(cc.Node)
], GameManager.prototype, "Btn_Hear", void 0);
__decorate([
property(cc.Node)
], GameManager.prototype, "Btn_See", void 0);
__decorate([
property(cc.Node)
], GameManager.prototype, "Btn_Firewood", void 0);
__decorate([
property(cc.Node)
], GameManager.prototype, "Plant", void 0);
__decorate([
property(cc.Node)
], GameManager.prototype, "timeNode", void 0);
__decorate([
property(cc.SpriteAtlas)
], GameManager.prototype, "FoodPlist", void 0);
GameManager = __decorate([
ccclass
], GameManager);
return GameManager;
}(cc.Component));
exports.default = GameManager;
cc._RF.pop();
}
if (nodeEnv) {
__define(__module.exports, __require, __module);
}
else {
__quick_compile_project__.registerModuleFunc(__filename, function () {
__define(__module.exports, __require, __module);
});
}
})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0XFxHYW1lTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxTQUFTO0FBQ0gsSUFBQSxLQUFzQixFQUFFLENBQUMsVUFBVSxFQUFsQyxPQUFPLGFBQUEsRUFBRSxRQUFRLGNBQWlCLENBQUM7QUFFMUM7SUFBeUMsK0JBQVk7SUFBckQ7UUFBQSxxRUF3WUM7UUFyWUcsYUFBTyxHQUFZLElBQUksQ0FBQztRQUV4QixjQUFRLEdBQVksSUFBSSxDQUFDO1FBRXpCLGFBQU8sR0FBWSxJQUFJLENBQUM7UUFFeEIsa0JBQVksR0FBWSxJQUFJLENBQUM7UUFFN0IsV0FBSyxHQUFZLElBQUksQ0FBQztRQUd0QixjQUFRLEdBQVksSUFBSSxDQUFDO1FBR3pCLGVBQVMsR0FBbUIsSUFBSSxDQUFDOztJQXVYckMsQ0FBQztJQXhXRyw0QkFBTSxHQUFOO1FBQ0ksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1gsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1osSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCwyQkFBSyxHQUFMO0lBRUEsQ0FBQztJQUNELE9BQU87SUFDUCwwQkFBSSxHQUFKO1FBQ0ksSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNoQixFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztRQUMxQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUMxQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDOUYsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFDRCxNQUFNO0lBQ04sK0JBQVMsR0FBVDtRQUFBLGlCQVVDO1FBVEcsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUMxQyxFQUFFLENBQUMsR0FBRyxFQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsRUFBQyxDQUFDO2FBQ25CLEVBQUUsQ0FBQyxHQUFHLEVBQUMsRUFBQyxPQUFPLEVBQUMsR0FBRyxFQUFDLENBQUM7YUFDckIsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUNSLEVBQUUsQ0FBQyxHQUFHLEVBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxFQUFDLENBQUM7YUFDbkIsSUFBSSxDQUFDO1lBQ0YsS0FBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hCLENBQUMsQ0FBQzthQUNELEtBQUssRUFBRSxDQUFDO0lBQ2IsQ0FBQztJQUVELGlCQUFpQjtJQUNqQix5QkFBRyxHQUFIO1FBQ0ksSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDakMsSUFBRyxDQUFDLEVBQUUsRUFBQztZQUNILElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFJLENBQUMsR0FBRyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1NBQzlCO0lBQ0wsQ0FBQztJQUNELE1BQU07SUFDTixrQ0FBWSxHQUFaO1FBQUEsaUJBOENDO1FBN0NHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNqRCxJQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFDO1lBQzVHLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ25DLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RILElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBRWhDLFFBQVE7UUFDUixFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRSxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxRSxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU3RCxJQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBQztZQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkcsSUFBSSxHQUFHLE9BQU8sR0FBQyxJQUFJLENBQUM7WUFDcEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5RyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQixFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7aUJBQ25CLEVBQUUsQ0FBQyxHQUFHLEVBQUMsRUFBQyxPQUFPLEVBQUMsR0FBRyxFQUFDLENBQUM7aUJBQ3JCLElBQUksQ0FBQztnQkFDRixLQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDdEIsQ0FBQyxDQUFDO2lCQUNELEtBQUssRUFBRSxDQUFDO1NBQ1o7YUFDRztZQUNBLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQTtZQUNwRSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7WUFDOUYsSUFBSSxTQUFTLEdBQUcsSUFBSSxHQUFHLFFBQVEsQ0FBQztZQUNoQyxJQUFJLEdBQUcsT0FBTyxHQUFFLElBQUksQ0FBQztZQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQixFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzlFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDbkIsRUFBRSxDQUFDLEdBQUcsRUFBQyxFQUFDLE9BQU8sRUFBQyxHQUFHLEVBQUMsQ0FBQztpQkFDckIsSUFBSSxDQUFDO1lBQ04sQ0FBQyxDQUFDO2lCQUNELEtBQUssRUFBRSxDQUFDO1NBQ1o7UUFDRCxNQUFNO1FBQ04sRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7SUFFeEMsQ0FBQztJQUNELFNBQVM7SUFDVCxnQ0FBVSxHQUFWO1FBQUEsaUJBMkJDO1FBMUJHLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ2xGLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUNqRixJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDakYsSUFBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLEVBQUM7WUFDMUMsdUJBQXVCO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1NBQ2pFO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxXQUFXO1lBQ2hCLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQy9DLEVBQUUsQ0FBQyxDQUFDLEVBQUMsRUFBQyxLQUFLLEVBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQztpQkFDbEIsS0FBSyxFQUFFLENBQUM7UUFDVCxJQUFJLENBQUMsU0FBUztZQUNkLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDckUsRUFBRSxDQUFDLENBQUMsRUFBQyxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsQ0FBQztpQkFDbkIsSUFBSSxDQUFDO2dCQUNGLEtBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUN0QixLQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0JBQ25GLEtBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztnQkFDbEYsS0FBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO2dCQUNsRixLQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztnQkFDL0QsS0FBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbkIsS0FBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3JCLENBQUMsQ0FBQztpQkFDRCxLQUFLLEVBQUUsQ0FBQztJQUNiLENBQUM7SUFFRCxvQ0FBYyxHQUFkLFVBQWUsR0FBRztRQUNkLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsT0FBTztJQUNQLGtDQUFZLEdBQVosVUFBYSxVQUFVLEVBQUMsSUFBSTtRQUN4Qix5QkFBeUI7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ25GLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUNsRixJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDbEYsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDL0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLG9CQUFvQjtRQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNuQyxJQUFHLElBQUksSUFBSSxTQUFTLEVBQUM7WUFDakIsSUFBRyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxFQUFDO2dCQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzthQUNuQjtpQkFDRztnQkFDQSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ3BCO1NBQ0o7UUFFRCxRQUFRO1FBQ1IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsYUFBYTtRQUNiLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkIsUUFBUTtRQUNSLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixPQUFPO1FBQ1AsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxNQUFNO0lBQ04sb0NBQWMsR0FBZDtRQUFBLGlCQWtCQztRQWpCRyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLElBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLElBQUksQ0FBQyxFQUFDO1lBQzdCLHVCQUF1QjtTQUMxQjthQUNJLElBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLElBQUksQ0FBQyxFQUFDO1lBQ2xDLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1lBQzlELEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUMsV0FBVyxDQUFDLENBQUM7WUFDdEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUN6RCxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ3ZELFVBQVUsQ0FBQztnQkFDUCxJQUFHLEtBQUksQ0FBQyxZQUFZLEVBQUM7b0JBQ2pCLEtBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7b0JBQzFELEtBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7aUJBQzNEO1lBQ0wsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ1QsdUJBQXVCO1NBQzFCO0lBQ0wsQ0FBQztJQUVELG1DQUFtQztJQUNuQyxtQ0FBYSxHQUFiO1FBQ0ksSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDaEIsT0FBTztRQUNQLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNELElBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFDO1lBQzlCLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBQyxDQUFDLEVBQUUsRUFBQztnQkFDMUMsSUFBRyxJQUFJLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUM7b0JBQ2hFLE1BQU0sR0FBRyxDQUFDLENBQUM7b0JBQ1gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNoQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM1QyxDQUFDLEdBQUcsS0FBSyxDQUFDO29CQUNWLE1BQU07aUJBQ1Q7YUFDSjtTQUNKO1FBQ0QsT0FBTztRQUNQLElBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFDO1lBQzVCLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBQyxDQUFDLEVBQUUsRUFBQztnQkFDeEMsSUFBRyxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUM7b0JBQzlELFNBQVM7b0JBQ1QsTUFBTSxHQUFHLENBQUMsQ0FBQztvQkFDWCxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzlCLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzVDLENBQUMsR0FBRyxLQUFLLENBQUM7b0JBQ1YsTUFBTTtpQkFDVDthQUNKO1NBQ0o7UUFFRCxhQUFhO1FBQ2IsSUFBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxFQUFDO1lBQ3RDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMzQzthQUVJO1lBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3pDO1FBR0QsSUFBRyxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUM7WUFDWixFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFDLENBQUMsQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVELFFBQVE7SUFDUixpQ0FBVyxHQUFYO1FBQ0ksSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN6QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDMUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxNQUFNO1FBQ04sSUFBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxJQUFJO1lBQUUsSUFBSSxHQUFHLElBQUksQ0FBQztRQUN4QyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQztJQUNsRCxDQUFDO0lBRUQsUUFBUTtJQUNSLGlDQUFXLEdBQVgsVUFBWSxJQUFJLEVBQUMsSUFBSTtRQUNqQixJQUFHLElBQUksSUFBSSxTQUFTO1lBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7YUFDakMsSUFBRyxJQUFJLElBQUksVUFBVTtZQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2FBQ3ZDLElBQUcsSUFBSSxJQUFJLFNBQVM7WUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzthQUN0QyxJQUFHLElBQUksSUFBSSxJQUFJLEVBQUM7WUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7U0FDbkI7UUFFRCxJQUFHLElBQUksQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBQztZQUN0RCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDekMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1NBQ2pEO2FBQ0c7WUFDQSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDMUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1NBQ2hEO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQzVDLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUNuRixJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDbEYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQ25FLENBQUM7SUFFRCxjQUFjO0lBQ2QsK0JBQVMsR0FBVDtRQUFBLGlCQVdDO1FBVkcsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2FBQ25CLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDUixJQUFJLENBQUM7WUFDRixLQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDO2FBQ0QsRUFBRSxDQUFDLEdBQUcsRUFBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLEVBQUMsQ0FBQzthQUNuQixJQUFJLENBQUM7WUFDRixLQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEIsQ0FBQyxDQUFDO2FBQ0QsS0FBSyxFQUFFLENBQUM7SUFDYixDQUFDO0lBRUQsOEJBQVEsR0FBUjtRQUNJLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNsRCxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3RELElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDcEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNuRCxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNsRCxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3RELElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUNuRixJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDbEYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQ25FLENBQUM7SUFFRCxNQUFNO0lBQ04sK0JBQVMsR0FBVDtRQUNJLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCw4QkFBOEI7SUFDOUIsNkJBQU8sR0FBUCxVQUFRLElBQUk7SUFFWixDQUFDO0lBQ0QsT0FBTztJQUNQLDZCQUFPLEdBQVA7UUFDSSxJQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3ZDLE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUFDRCxJQUFJO0lBQ0osK0JBQVMsR0FBVDtJQUVBLENBQUM7SUFDRCxJQUFJO0lBQ0osK0JBQVMsR0FBVCxVQUFVLElBQUk7SUFFZCxDQUFDO0lBRUQsY0FBYztJQUNkLHdDQUFrQixHQUFsQjtRQUNJLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFDRCxVQUFVO0lBQ1YsNkJBQU8sR0FBUCxVQUFRLElBQUk7UUFDUixJQUFHLElBQUksSUFBSSxTQUFTO1lBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7YUFDakMsSUFBRyxJQUFJLElBQUksVUFBVTtZQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2FBQ3ZDLElBQUcsSUFBSSxJQUFJLFNBQVM7WUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzthQUN0QyxJQUFHLElBQUksSUFBSSxJQUFJLEVBQUM7WUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDaEIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBQyxJQUFJLENBQUMsQ0FBQztZQUM1QyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQztTQUNqRDtRQUNELElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQztRQUNmLElBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFDO1lBQ3RELEVBQUUsR0FBRyxJQUFJLENBQUM7WUFDVixFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNqRDtRQUNELEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUMsRUFBRSxDQUFDLENBQUM7UUFDekMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUNELFNBQVM7SUFDVCw4QkFBUSxHQUFSLFVBQVMsSUFBSTtRQUNSLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25ELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDakQsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUM3QyxFQUFFLENBQUMsR0FBRyxFQUFDLEVBQUMsT0FBTyxFQUFDLEdBQUcsRUFBQyxDQUFDO2FBQ3JCLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDUixFQUFFLENBQUMsR0FBRyxFQUFDLEVBQUMsT0FBTyxFQUFDLEVBQUUsRUFBQyxDQUFDO2FBQ3BCLElBQUksQ0FBQztZQUNGLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQzthQUNELEtBQUssRUFBRSxDQUFBO0lBQ1osQ0FBQztJQUVELDhCQUFRLEdBQVI7UUFDSSwyREFBMkQ7SUFDL0QsQ0FBQztJQUNELCtCQUFTLEdBQVQ7UUFDSSxzREFBc0Q7SUFDMUQsQ0FBQztJQUNELDRCQUFNLEdBQU4sVUFBUSxFQUFFO0lBQ1YsQ0FBQztJQXBZRDtRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO2dEQUNNO0lBRXhCO1FBREMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7aURBQ087SUFFekI7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQztnREFDTTtJQUV4QjtRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO3FEQUNXO0lBRTdCO1FBREMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7OENBQ0k7SUFHdEI7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQztpREFDTztJQUd6QjtRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDO2tEQUNRO0lBakJoQixXQUFXO1FBRC9CLE9BQU87T0FDYSxXQUFXLENBd1kvQjtJQUFELGtCQUFDO0NBeFlELEFBd1lDLENBeFl3QyxFQUFFLENBQUMsU0FBUyxHQXdZcEQ7a0JBeFlvQixXQUFXIiwiZmlsZSI6IiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEF1ZGlvTWFuYWdlciBmcm9tIFwiLi9tb2R1bGUvTXVzaWMvQXVkaW9NYW5hZ2VyXCI7XHJcblxyXG4vLyDkuLvmuLjmiI/mjqfliLbnsbtcclxuY29uc3Qge2NjY2xhc3MsIHByb3BlcnR5fSA9IGNjLl9kZWNvcmF0b3I7XHJcbkBjY2NsYXNzXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdhbWVNYW5hZ2VyIGV4dGVuZHMgY2MuQ29tcG9uZW50IHtcclxuXHJcbiAgICBAcHJvcGVydHkoY2MuTm9kZSlcclxuICAgIEJ0bl9OZXc6IGNjLk5vZGUgPSBudWxsO1xyXG4gICAgQHByb3BlcnR5KGNjLk5vZGUpXHJcbiAgICBCdG5fSGVhcjogY2MuTm9kZSA9IG51bGw7XHJcbiAgICBAcHJvcGVydHkoY2MuTm9kZSlcclxuICAgIEJ0bl9TZWU6IGNjLk5vZGUgPSBudWxsO1xyXG4gICAgQHByb3BlcnR5KGNjLk5vZGUpXHJcbiAgICBCdG5fRmlyZXdvb2Q6IGNjLk5vZGUgPSBudWxsO1xyXG4gICAgQHByb3BlcnR5KGNjLk5vZGUpXHJcbiAgICBQbGFudDogY2MuTm9kZSA9IG51bGw7XHJcbiAgICBcclxuICAgIEBwcm9wZXJ0eShjYy5Ob2RlKVxyXG4gICAgdGltZU5vZGU6IGNjLk5vZGUgPSBudWxsO1xyXG5cclxuICAgIEBwcm9wZXJ0eShjYy5TcHJpdGVBdGxhcylcclxuICAgIEZvb2RQbGlzdDogY2MuU3ByaXRlQXRsYXMgPSBudWxsO1xyXG5cclxuICAgIHZvaWNlU3ByaXRlRnJhbWU6IGNjLlNwcml0ZUZyYW1lOyAgICAgLy/mmK/lkKblj6/ngrnlh7tcclxuICAgIHRpbWVUd2VlbjogY2MuVHdlZW47XHJcbiAgICB0b3VjaGFibGU6IGJvb2xlYW47ICAgICAvL+aYr+WQpuWPr+eCueWHu1xyXG4gICAgY291bnRUaW1lOiBudW1iZXI7ICAgICAgLy/mr4/mrKHmuLjmiI/lgJLorqHml7ZcclxuICAgIHN0YXJ0VGltZTogbnVtYmVyOyAgICAgIC8v5ri45oiP5byA5aeL6K6h5pe2XHJcbiAgICBvdmVyVGltZTogbnVtYmVyOyAgICAgICAvL+a4uOaIj+e7k+adn+iuoeaXtlxyXG4gICAgbm93X0Zvb2Q6IHN0cmluZzsgICAgICAgLy/lvZPliY3lhbPljaHlkI3lrZfkv6Hmga9cclxuICAgIHJlc3VsdDogbnVtYmVyOyAgICAgICAgLy/lvZPliY3lhbPljaHlkI3lrZfkv6Hmga9cclxuICAgIGNob2ljZTogbnVtYmVyOyAgICAgICAgLy/lvZPliY3lhbPljaHpgInmi6nnrKzlh6DkuKrmjInpkq5cclxuICAgIGZvb2RQaWNBcnJheTogYW55OyAgICAgIC8v5a2Y5pS+5b2T5YmN5q+P5LiA5aSn5bGA5ri45oiP5omA5pyJ5qSN54mp5Zu+54mHXHJcbiAgICBmb29kQXVkaW9BcnJheTogYW55OyAgICAvL+WtmOaUvuW9k+WJjeavj+S4gOWkp+WxgOa4uOaIj+aJgOacieakjeeJqeWjsOmfs1xyXG4gICAgY3VzdG9tRGF0YTphbnk7ICAgICAgICAgLy/lrZjmlL7lvZPliY3phY3nva5cclxuICAgIG5lZWRsZVR3ZWVuOiBjYy5Ud2VlbjxjYy5TcHJpdGU+O1xyXG4gICAgb25Mb2FkICgpIHtcclxuICAgICAgICB0aGlzLmZpdCgpO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIHRoaXMuc3RhcnRHYW1lKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnQgKCkge1xyXG5cclxuICAgIH1cclxuICAgIC8v5Yid5aeL5YyW5pWw5o2uXHJcbiAgICBpbml0KCl7XHJcbiAgICAgICAgdGhpcy50b3VjaGFibGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlc3VsdCA9IC0xO1xyXG4gICAgICAgIHRoaXMuZm9vZEF1ZGlvQXJyYXkgPSBbXTtcclxuICAgICAgICB0aGlzLmZvb2RQaWNBcnJheSA9IFtdO1xyXG4gICAgICAgIHRoaXMudGltZVR3ZWVuID0gbnVsbDtcclxuICAgICAgICB0aGlzLm5lZWRsZVR3ZWVuID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNob2ljZSA9IDA7XHJcbiAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLnN0ZXBUaW1lTGlzdCA9IDA7XHJcbiAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLnN1Y2Nlc3NMaXN0ID0gW107XHJcbiAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmxldmVsID0gMDtcclxuICAgICAgICB0aGlzLnZvaWNlU3ByaXRlRnJhbWUgPSB0aGlzLlBsYW50LmdldENoaWxkQnlOYW1lKFwiaWNvblwiKS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZTtcclxuICAgICAgICB0aGlzLmJ0blJlc2V0KCk7XHJcbiAgICB9XHJcbiAgICAvL+W8gOWni+a4uOaIj1xyXG4gICAgc3RhcnRHYW1lKCl7XHJcbiAgICAgICAgY2MudHdlZW4odGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiQmVnaW5cIikpXHJcbiAgICAgICAgLnRvKDAuMSx7b3BhY2l0eTowfSlcclxuICAgICAgICAudG8oMC41LHtvcGFjaXR5OjI1NX0pXHJcbiAgICAgICAgLmRlbGF5KDEpXHJcbiAgICAgICAgLnRvKDAuNSx7b3BhY2l0eTowfSlcclxuICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVDdXN0b20oKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdGFydCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8v5qC55o2u5piv5ZCm5YWo6Z2i5bGP77yM5YGa54us56uL6YCC6YWN5pa56Z2iXHJcbiAgICBmaXQoKXtcclxuICAgICAgICB2YXIgamcgPSBjYy5meC5HYW1lVG9vbC5zZXRGaXQoKTtcclxuICAgICAgICBpZighamcpe1xyXG4gICAgICAgICAgICB0aGlzLkJ0bl9IZWFyLnkgPSAtMzMwO1xyXG4gICAgICAgICAgICB0aGlzLkJ0bl9TZWUueSAgPSAtNDYwO1xyXG4gICAgICAgICAgICB0aGlzLkJ0bl9GaXJld29vZC55ID0gLTYwMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvL+WIm+W7uuWFs+WNoVxyXG4gICAgY3JlYXRlQ3VzdG9tKCl7XHJcbiAgICAgICAgdGhpcy5jaG9pY2UgPSAwO1xyXG4gICAgICAgIHRoaXMuUGxhbnQub3BhY2l0eSA9IDA7XHJcbiAgICAgICAgdGhpcy50aW1lTm9kZS5nZXRDaGlsZEJ5TmFtZShcInRpbWVcIikuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuZmlsbFJhbmdlID0gMDtcclxuICAgICAgICB0aGlzLnRpbWVOb2RlLmdldENoaWxkQnlOYW1lKFwibmVlZGxlXCIpLmFuZ2xlID0gMDtcclxuICAgICAgICBpZihjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8ubGV2ZWwgPj0gY2MuZnguR2FtZUNvbmZpZy5MRVZFTF9JTkZPW2NjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5jdXN0b21dLmN1c3RvbS5sZW5ndGgpe1xyXG4gICAgICAgICAgICBjYy5kaXJlY3Rvci5sb2FkU2NlbmUoXCJPdmVyU2NlbmVcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jdXN0b21EYXRhID0gY2MuZnguR2FtZUNvbmZpZy5MRVZFTF9JTkZPW2NjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5jdXN0b21dLmN1c3RvbVtjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8ubGV2ZWxdO1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy5jdXN0b21EYXRhLml0ZW07XHJcblxyXG4gICAgICAgIC8v5Z+L54K55pWw5o2u6K6+572uXHJcbiAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5DTElDS19TRVQoXCJyb3VuZFwiLGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5sZXZlbCk7XHJcbiAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5DTElDS19TRVQoXCJsZXZlbENvbmZpZ1wiLGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5jdXN0b20pO1xyXG4gICAgICAgIGNjLmZ4LkdhbWVDb25maWcuQ0xJQ0tfU0VUKFwiaXRlbVwiLG5hbWUpO1xyXG4gICAgICAgIGNjLmZ4LkdhbWVDb25maWcuQ0xJQ0tfU0VUKFwicm91bmRUeXBlXCIsdGhpcy5jdXN0b21EYXRhLnR5cGUpO1xyXG5cclxuICAgICAgICBpZih0aGlzLmN1c3RvbURhdGEudHlwZSA9PSAxKXtcclxuICAgICAgICAgICAgdGhpcy5QbGFudC5nZXRDaGlsZEJ5TmFtZShcIm5hbWVcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSBjYy5meC5HYW1lVG9vbC5nZXRGb29kTmFtZShuYW1lKTtcclxuICAgICAgICAgICAgbmFtZSA9IFwicHJvcF9cIituYW1lO1xyXG4gICAgICAgICAgICB0aGlzLlBsYW50LmdldENoaWxkQnlOYW1lKFwiaWNvblwiKS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuRm9vZFBsaXN0W1wiX3Nwcml0ZUZyYW1lc1wiXVtuYW1lXTtcclxuICAgICAgICAgICAgdGhpcy5ub3dfRm9vZCA9IG5hbWU7XHJcbiAgICAgICAgICAgIGNjLnR3ZWVuKHRoaXMuUGxhbnQpXHJcbiAgICAgICAgICAgIC50bygwLjIse29wYWNpdHk6MjU1fSlcclxuICAgICAgICAgICAgLmNhbGwoKCk9PntcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lcigpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgdGhpcy5QbGFudC5nZXRDaGlsZEJ5TmFtZShcIm5hbWVcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSBcIlwiXHJcbiAgICAgICAgICAgIHRoaXMuUGxhbnQuZ2V0Q2hpbGRCeU5hbWUoXCJpY29uXCIpLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy52b2ljZVNwcml0ZUZyYW1lO1xyXG4gICAgICAgICAgICBsZXQgYXVkaW9OYW1lID0gbmFtZSArIFwiX2F1ZGlvXCI7XHJcbiAgICAgICAgICAgIG5hbWUgPSBcImF1ZGlvXCIrIG5hbWU7XHJcbiAgICAgICAgICAgIHRoaXMubm93X0Zvb2QgPSBuYW1lO1xyXG4gICAgICAgICAgICBjYy5meC5BdWRpb01hbmFnZXIuX2luc3RhbmNlLnBsYXlFZmZlY3QoYXVkaW9OYW1lLHRoaXMuc3RhcnRUaW1lci5iaW5kKHRoaXMpKTtcclxuICAgICAgICAgICAgY2MudHdlZW4odGhpcy5QbGFudClcclxuICAgICAgICAgICAgLnRvKDAuMix7b3BhY2l0eToyNTV9KVxyXG4gICAgICAgICAgICAuY2FsbCgoKT0+e1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy/lhbPljaErMVxyXG4gICAgICAgIGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5sZXZlbCArPSAxO1xyXG5cclxuICAgIH1cclxuICAgIC8v5byA5aeL6L2s5ZyI5YCS6K6h5pe2XHJcbiAgICBzdGFydFRpbWVyKCl7XHJcbiAgICAgICAgdGhpcy5zdGFydFRpbWUgPSBjYy5meC5HYW1lVG9vbC5nZXRUaW1lKCk7XHJcbiAgICAgICAgdGhpcy5CdG5fSGVhci5nZXRDaGlsZEJ5TmFtZShcIm5vbWFsXCIpLmdldENvbXBvbmVudChjYy5CdXR0b24pLmludGVyYWN0YWJsZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5CdG5fTmV3LmdldENoaWxkQnlOYW1lKFwibm9tYWxcIikuZ2V0Q29tcG9uZW50KGNjLkJ1dHRvbikuaW50ZXJhY3RhYmxlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLkJ0bl9TZWUuZ2V0Q2hpbGRCeU5hbWUoXCJub21hbFwiKS5nZXRDb21wb25lbnQoY2MuQnV0dG9uKS5pbnRlcmFjdGFibGUgPSB0cnVlO1xyXG4gICAgICAgIGlmKHRoaXMuY29udGFpbnNOYW5hbmEodGhpcy5ub3dfRm9vZCkgPT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwi5Y+v5Lul54K554GrXCIpO1xyXG4gICAgICAgICAgICB0aGlzLkJ0bl9GaXJld29vZC5nZXRDb21wb25lbnQoY2MuQnV0dG9uKS5pbnRlcmFjdGFibGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRpbWVOb2RlLmdldENoaWxkQnlOYW1lKFwidGltZVwiKS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5maWxsUmFuZ2UgPSAwO1xyXG4gICAgICAgIHRoaXMubmVlZGxlVHdlZW4gPSBcclxuICAgICAgICBjYy50d2Vlbih0aGlzLnRpbWVOb2RlLmdldENoaWxkQnlOYW1lKFwibmVlZGxlXCIpKVxyXG4gICAgICAgIC50byg1LHthbmdsZTotMzYwfSlcclxuICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICB0aGlzLnRpbWVUd2VlbiA9IFxyXG4gICAgICAgIGNjLnR3ZWVuKHRoaXMudGltZU5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ0aW1lXCIpLmdldENvbXBvbmVudChjYy5TcHJpdGUpKVxyXG4gICAgICAgIC50byg1LHtmaWxsUmFuZ2U6MX0pXHJcbiAgICAgICAgLmNhbGwoKCk9PntcclxuICAgICAgICAgICAgdGhpcy50aW1lVHdlZW4gPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLkJ0bl9IZWFyLmdldENoaWxkQnlOYW1lKFwibm9tYWxcIikuZ2V0Q29tcG9uZW50KGNjLkJ1dHRvbikuaW50ZXJhY3RhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuQnRuX05ldy5nZXRDaGlsZEJ5TmFtZShcIm5vbWFsXCIpLmdldENvbXBvbmVudChjYy5CdXR0b24pLmludGVyYWN0YWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLkJ0bl9TZWUuZ2V0Q2hpbGRCeU5hbWUoXCJub21hbFwiKS5nZXRDb21wb25lbnQoY2MuQnV0dG9uKS5pbnRlcmFjdGFibGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5CdG5fRmlyZXdvb2QuZ2V0Q29tcG9uZW50KGNjLkJ1dHRvbikuaW50ZXJhY3RhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YShudWxsKTtcclxuICAgICAgICAgICAgdGhpcy5uZXh0TGV2ZWwoKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdGFydCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnRhaW5zTmFuYW5hKHN0cikge1xyXG4gICAgICAgIHJldHVybiAvbXVjaGFpL2kudGVzdChzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8v5paw5qSN54mp5oyJ6ZKuXHJcbiAgICBjbGlja19DaG9pY2UoY3VzdG9tRGF0YSxkYXRhKXtcclxuICAgICAgICAvL+WFs+aOieiuoeaXtuWZqCAgIOWkhOeQhumAu+i+keS5i+WJje+8jOWFiOihjOWFs+aOieaMiemSruW8gOWFs1xyXG4gICAgICAgIHRoaXMuQnRuX0hlYXIuZ2V0Q2hpbGRCeU5hbWUoXCJub21hbFwiKS5nZXRDb21wb25lbnQoY2MuQnV0dG9uKS5pbnRlcmFjdGFibGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLkJ0bl9OZXcuZ2V0Q2hpbGRCeU5hbWUoXCJub21hbFwiKS5nZXRDb21wb25lbnQoY2MuQnV0dG9uKS5pbnRlcmFjdGFibGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLkJ0bl9TZWUuZ2V0Q2hpbGRCeU5hbWUoXCJub21hbFwiKS5nZXRDb21wb25lbnQoY2MuQnV0dG9uKS5pbnRlcmFjdGFibGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLkJ0bl9GaXJld29vZC5nZXRDb21wb25lbnQoY2MuQnV0dG9uKS5pbnRlcmFjdGFibGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRpbWVUd2Vlbi5zdG9wKCk7XHJcbiAgICAgICAgdGhpcy50aW1lVHdlZW4gPSBudWxsO1xyXG4gICAgICAgIHRoaXMubmVlZGxlVHdlZW4uc3RvcCgpO1xyXG4gICAgICAgIHRoaXMubmVlZGxlVHdlZW4gPSBudWxsO1xyXG4gICAgICAgIC8v5Yik5pat5piv5ZCm5q2j56Gu77yM5bm25oqK5Ye6546w55qE54mp5ZOB5a2Y5YWl5pWw57uEXHJcbiAgICAgICAgdGhpcy5yZXN1bHQgPSB0aGlzLmp1ZGdpbmdSZXN1bHQoKTtcclxuICAgICAgICBpZihkYXRhID09IFwiQnRuX05ld1wiKXtcclxuICAgICAgICAgICAgaWYodGhpcy5yZXN1bHQgPT0gLTEpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHQgPSAxOyBcclxuICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0ID0gLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IFxyXG5cclxuICAgICAgICAvL+iuvue9ruaMiemSrueKtuaAgVxyXG4gICAgICAgIHRoaXMuc2V0QnRuU3RhdGUodGhpc1tkYXRhXSxkYXRhKTtcclxuICAgICAgICAvL+agueaNruetlOmimO+8jOiuvue9ruS4iuS8oOaVsOaNrlxyXG4gICAgICAgIHRoaXMuc2V0RGF0YShkYXRhKTtcclxuICAgICAgICAvL+iOt+WPluWPjeW6lOaXtumXtFxyXG4gICAgICAgIHRoaXMuc2V0VGltZURhdGEoKTtcclxuICAgICAgICAvL+i/m+ihjOS4i+S4gOWFs1xyXG4gICAgICAgIHRoaXMubmV4dExldmVsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy/ngrnngavmjInpkq5cclxuICAgIGNsaWNrX0lnbml0aW9uKCl7XHJcbiAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5DTElDS19TRVQoXCJpZ25pdGVcIix0cnVlKTtcclxuICAgICAgICBpZih0aGlzLmN1c3RvbURhdGEuZmxhbWFibGUgPT0gMCl7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwi6ZSZ6K+v54K554GrXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKHRoaXMuY3VzdG9tRGF0YS5mbGFtYWJsZSA9PSAxKXtcclxuICAgICAgICAgICAgbGV0IGlnbml0ZUNvdW50ID0gY2MuZnguR2FtZUNvbmZpZy5DTElDS19EQVRBLmlnbml0ZUNvdW50ICsgMTtcclxuICAgICAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5DTElDS19TRVQoXCJpZ25pdGVDb3VudFwiLGlnbml0ZUNvdW50KTtcclxuICAgICAgICAgICAgdGhpcy5CdG5fRmlyZXdvb2QuZ2V0Q2hpbGRCeU5hbWUoXCJmaXJlQmdcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5CdG5fRmlyZXdvb2QuZ2V0Q2hpbGRCeU5hbWUoXCJmaXJlXCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5CdG5fRmlyZXdvb2Qpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuQnRuX0ZpcmV3b29kLmdldENoaWxkQnlOYW1lKFwiZmlyZUJnXCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuQnRuX0ZpcmV3b29kLmdldENoaWxkQnlOYW1lKFwiZmlyZVwiKS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgMTA1MCk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwi5q2j56Gu54K554GrXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvL+WIpOaWreaYr+WQpuaciei/h+eahOe7k+aenCB0eXBl5Y+q5Li6bmV3IGhlYXIgc2VlIOS4iemAieS4gCBcclxuICAgIGp1ZGdpbmdSZXN1bHQoKXtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gLTE7XHJcbiAgICAgICAgLy/lhYjmo4Dmn6Xpn7PpopFcclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMubm93X0Zvb2Quc3Vic3RyaW5nKDUsdGhpcy5ub3dfRm9vZC5sZW5ndGgpO1xyXG4gICAgICAgIGlmKHRoaXMuZm9vZEF1ZGlvQXJyYXkubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgIGZvcihsZXQgaT0wOyBpPHRoaXMuZm9vZEF1ZGlvQXJyYXkubGVuZ3RoO2krKyl7XHJcbiAgICAgICAgICAgICAgICBpZihuYW1lID09IHRoaXMuZm9vZEF1ZGlvQXJyYXlbaV0uc3Vic3RyaW5nKDUsdGhpcy5ub3dfRm9vZC5sZW5ndGgpKXtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAyO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9vZEF1ZGlvQXJyYXkuc3BsaWNlKGksMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5DTElDS19TRVQoXCJyaWdodENob2ljZVwiLDIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGkgPSAxMDAwMDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvL+WGjeajgOafpeWbvuebmFxyXG4gICAgICAgIGlmKHRoaXMuZm9vZFBpY0FycmF5Lmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICBmb3IobGV0IGk9MDsgaTx0aGlzLmZvb2RQaWNBcnJheS5sZW5ndGg7aSsrKXtcclxuICAgICAgICAgICAgICAgIGlmKG5hbWUgPT0gdGhpcy5mb29kUGljQXJyYXlbaV0uc3Vic3RyaW5nKDUsdGhpcy5ub3dfRm9vZC5sZW5ndGgpKXtcclxuICAgICAgICAgICAgICAgICAgICAvL+WmguaenOWbvueJh+mHjOmdouaciVxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IDM7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb29kUGljQXJyYXkuc3BsaWNlKGksMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5DTElDS19TRVQoXCJyaWdodENob2ljZVwiLDMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGkgPSAxMDAwMDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy/miormlrDnlJ/miJDnmoTlrZjmlL7ov5vmlbDnu4Tph4xcclxuICAgICAgICBpZih0aGlzLm5vd19Gb29kLnN1YnN0cmluZygwLDQpICE9IFwicHJvcFwiKXtcclxuICAgICAgICAgICAgdGhpcy5mb29kQXVkaW9BcnJheS5wdXNoKHRoaXMubm93X0Zvb2QpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9vZFBpY0FycmF5LnB1c2godGhpcy5ub3dfRm9vZCk7ICBcclxuICAgICAgICB9XHJcbiAgICAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKHJlc3VsdCA9PSAtMSl7XHJcbiAgICAgICAgICAgIGNjLmZ4LkdhbWVDb25maWcuQ0xJQ0tfU0VUKFwicmlnaHRDaG9pY2VcIiwxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICAvL+iuoeeul+WPjeW6lOaXtumXtFxyXG4gICAgc2V0VGltZURhdGEoKXtcclxuICAgICAgICB0aGlzLm92ZXJUaW1lID0gY2MuZnguR2FtZVRvb2wuZ2V0VGltZSgpO1xyXG4gICAgICAgIGxldCB0aW1lID0gdGhpcy5vdmVyVGltZSAtIHRoaXMuc3RhcnRUaW1lO1xyXG4gICAgICAgIGNjLmZ4LkdhbWVDb25maWcuQ0xJQ0tfU0VUKFwic3RlcFRpbWVcIix0aW1lKTtcclxuICAgICAgICAvL+mYsuatoua6ouWHulxyXG4gICAgICAgIGlmKHRpbWUgPCAwIHx8IHRpbWUgPiAyNTAwKSB0aW1lID0gMjUwMDtcclxuICAgICAgICBjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8uc3RlcFRpbWVMaXN0ICs9IHRpbWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy/orr7nva7mjInpkq7nirbmgIFcclxuICAgIHNldEJ0blN0YXRlKG5vZGUsZGF0YSl7XHJcbiAgICAgICAgaWYoZGF0YSA9PSBcIkJ0bl9OZXdcIikgdGhpcy5jaG9pY2UgPSAxO1xyXG4gICAgICAgIGVsc2UgaWYoZGF0YSA9PSBcIkJ0bl9IZWFyXCIpIHRoaXMuY2hvaWNlID0gMjtcclxuICAgICAgICBlbHNlIGlmKGRhdGEgPT0gXCJCdG5fU2VlXCIpIHRoaXMuY2hvaWNlID0gMztcclxuICAgICAgICBlbHNlIGlmKGRhdGEgPT0gbnVsbCl7XHJcbiAgICAgICAgICAgIHRoaXMuY2hvaWNlID0gMDtcclxuICAgICAgICB9IFxyXG5cclxuICAgICAgICBpZih0aGlzLmNob2ljZSAhPSBjYy5meC5HYW1lQ29uZmlnLkNMSUNLX0RBVEEucmlnaHRDaG9pY2Upe1xyXG4gICAgICAgICAgICBub2RlLmdldENoaWxkQnlOYW1lKFwiZXJyXCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIG5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJjb3JyZWN0XCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgbm9kZS5nZXRDaGlsZEJ5TmFtZShcImVyclwiKS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgbm9kZS5nZXRDaGlsZEJ5TmFtZShcImNvcnJlY3RcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICB9ICBcclxuICAgICAgICBub2RlLmdldENoaWxkQnlOYW1lKFwibm9tYWxcIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5CdG5fSGVhci5nZXRDaGlsZEJ5TmFtZShcIm5vbWFsXCIpLmdldENvbXBvbmVudChjYy5CdXR0b24pLmludGVyYWN0YWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuQnRuX05ldy5nZXRDaGlsZEJ5TmFtZShcIm5vbWFsXCIpLmdldENvbXBvbmVudChjYy5CdXR0b24pLmludGVyYWN0YWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuQnRuX1NlZS5nZXRDaGlsZEJ5TmFtZShcIm5vbWFsXCIpLmdldENvbXBvbmVudChjYy5CdXR0b24pLmludGVyYWN0YWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuQnRuX0ZpcmV3b29kLmdldENvbXBvbmVudChjYy5CdXR0b24pLmludGVyYWN0YWJsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8v5LiL5LiA6L2uIOmmluWFiOmHjee9ruaMiemSrueKtuaAgVxyXG4gICAgbmV4dExldmVsKCl7XHJcbiAgICAgICAgY2MudHdlZW4odGhpcy5QbGFudClcclxuICAgICAgICAuZGVsYXkoMSlcclxuICAgICAgICAuY2FsbCgoKT0+e1xyXG4gICAgICAgICAgICB0aGlzLmJ0blJlc2V0KCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAudG8oMC41LHtvcGFjaXR5OjB9KVxyXG4gICAgICAgIC5jYWxsKCgpPT57XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQ3VzdG9tKCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuc3RhcnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBidG5SZXNldCgpe1xyXG4gICAgICAgIHRoaXMuQnRuX05ldy5nZXRDaGlsZEJ5TmFtZShcIm5vbWFsXCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5CdG5fTmV3LmdldENoaWxkQnlOYW1lKFwiZXJyXCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuQnRuX05ldy5nZXRDaGlsZEJ5TmFtZShcImNvcnJlY3RcIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5CdG5fSGVhci5nZXRDaGlsZEJ5TmFtZShcIm5vbWFsXCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5CdG5fSGVhci5nZXRDaGlsZEJ5TmFtZShcImVyclwiKS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLkJ0bl9IZWFyLmdldENoaWxkQnlOYW1lKFwiY29ycmVjdFwiKS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLkJ0bl9TZWUuZ2V0Q2hpbGRCeU5hbWUoXCJub21hbFwiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuQnRuX1NlZS5nZXRDaGlsZEJ5TmFtZShcImVyclwiKS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLkJ0bl9TZWUuZ2V0Q2hpbGRCeU5hbWUoXCJjb3JyZWN0XCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuQnRuX0hlYXIuZ2V0Q2hpbGRCeU5hbWUoXCJub21hbFwiKS5nZXRDb21wb25lbnQoY2MuQnV0dG9uKS5pbnRlcmFjdGFibGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLkJ0bl9OZXcuZ2V0Q2hpbGRCeU5hbWUoXCJub21hbFwiKS5nZXRDb21wb25lbnQoY2MuQnV0dG9uKS5pbnRlcmFjdGFibGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLkJ0bl9TZWUuZ2V0Q2hpbGRCeU5hbWUoXCJub21hbFwiKS5nZXRDb21wb25lbnQoY2MuQnV0dG9uKS5pbnRlcmFjdGFibGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLkJ0bl9GaXJld29vZC5nZXRDb21wb25lbnQoY2MuQnV0dG9uKS5pbnRlcmFjdGFibGUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvL+i/lOWbnummlumhtVxyXG4gICAgYmFja1NjZW5lKCl7XHJcbiAgICAgICAgY2MuZGlyZWN0b3IubG9hZFNjZW5lKFwiTG9hZFNjZW5lXCIpO1xyXG4gICAgfVxyXG4gICAgLy/kuIvkuIDlhbPvvIzmiJbogIXph43mlrDlvIDlp4vvvIzmiJbogIXov5Tlm57kuIrkuIDlhbPvvIzmoLnmja5sZXZlbOWGs+WumlxyXG4gICAgcmVTdGFydCh0eXBlKXtcclxuXHJcbiAgICB9XHJcbiAgICAvL+iOt+WPluaXtumXtOaIs1xyXG4gICAgZ2V0VGltZSgpe1xyXG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgIHJldHVybiB0aW1lc3RhbXA7XHJcbiAgICB9XHJcbiAgICAvL+iOt+iDnFxyXG4gICAgcGFzc0xldmVsKCl7XHJcblxyXG4gICAgfVxyXG4gICAgLy/lpLHotKVcclxuICAgIGxvc2VMZXZlbCh0eXBlKXtcclxuICBcclxuICAgIH1cclxuXHJcbiAgICAvL+WmguaenOaYr+WAkuiuoeaXtiDosIPnlKjmraTmlrnms5VcclxuICAgIHN0YXJ0Q291bnREb3duVGltZSAoKSB7XHJcbiAgICAgICAgdGhpcy50aW1lTm9kZS5nZXRDaGlsZEJ5TmFtZShcInRpbWVcIikuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuZmlsbFJhbmdlID0gMDtcclxuICAgICAgICB0aGlzLnRpbWVOb2RlLmdldENoaWxkQnlOYW1lKFwibmVlZGxlXCIpLmFuZ2xlID0gMDtcclxuICAgIH1cclxuICAgIC8v5LiK5Lyg5q+P5qyh5pON5L2c5pWw5o2uXHJcbiAgICBzZXREYXRhKGRhdGEpe1xyXG4gICAgICAgIGlmKGRhdGEgPT0gXCJCdG5fTmV3XCIpIHRoaXMuY2hvaWNlID0gMTtcclxuICAgICAgICBlbHNlIGlmKGRhdGEgPT0gXCJCdG5fSGVhclwiKSB0aGlzLmNob2ljZSA9IDI7XHJcbiAgICAgICAgZWxzZSBpZihkYXRhID09IFwiQnRuX1NlZVwiKSB0aGlzLmNob2ljZSA9IDM7XHJcbiAgICAgICAgZWxzZSBpZihkYXRhID09IG51bGwpe1xyXG4gICAgICAgICAgICB0aGlzLmNob2ljZSA9IDA7XHJcbiAgICAgICAgICAgIGNjLmZ4LkdhbWVDb25maWcuQ0xJQ0tfU0VUKFwic3RlcFRpbWVcIiw1MDAwKTtcclxuICAgICAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLnN0ZXBUaW1lTGlzdCArPSA1MDAwO1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgdmFyIGpnID0gZmFsc2U7XHJcbiAgICAgICAgaWYodGhpcy5jaG9pY2UgPT0gY2MuZnguR2FtZUNvbmZpZy5DTElDS19EQVRBLnJpZ2h0Q2hvaWNlKXtcclxuICAgICAgICAgICAgamcgPSB0cnVlO1xyXG4gICAgICAgICAgICBjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8uc3VjY2Vzc0xpc3QucHVzaChqZyk7XHJcbiAgICAgICAgfSBcclxuICAgICAgICBjYy5meC5HYW1lQ29uZmlnLkNMSUNLX1NFVChcImNob2ljZVwiLHRoaXMuY2hvaWNlKTtcclxuICAgICAgICBjYy5meC5HYW1lQ29uZmlnLkNMSUNLX1NFVChcInN1Y2Nlc3NcIixqZyk7XHJcbiAgICAgICAgY2MuZnguR2FtZVRvb2wuc2V0R2FtZURhdGEoKTtcclxuICAgIH1cclxuICAgIC8v5LiK5Lyg5o6S6KGM5qac5pWw5o2uXHJcbiAgICBnYW1lT3Zlcih0aW1lKXtcclxuICAgICAgICAgY2MuZnguR2FtZVRvb2wuc2V0UmFuayh0aW1lKTtcclxuICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJHYW1lT3ZlclwiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkdhbWVPdmVyXCIpLm9wYWNpdHkgPSAwO1xyXG4gICAgICAgIGNjLnR3ZWVuKHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkdhbWVPdmVyXCIpKVxyXG4gICAgICAgIC50bygwLjQse29wYWNpdHk6MjU1fSlcclxuICAgICAgICAuZGVsYXkoMilcclxuICAgICAgICAudG8oMC40LHtvcGFjaXR5OjUwfSlcclxuICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgY2MuZGlyZWN0b3IubG9hZFNjZW5lKFwiT3ZlclNjZW5lXCIpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnN0YXJ0KClcclxuICAgIH1cclxuXHJcbiAgICBvbkVuYWJsZSAoKSB7XHJcbiAgICAgICAgLy8gY2MuZnguTm90aWZpY2F0aW9ucy5vbihcImNsaWNrU3VuXCIsIHRoaXMuY2xpY2tTdW4sIHRoaXMpO1xyXG4gICAgfVxyXG4gICAgb25EaXNhYmxlICgpIHtcclxuICAgICAgICAvLyBjYy5meC5Ob3RpZmljYXRpb25zLm9mZihcImNsaWNrU3VuXCIsIHRoaXMuY2xpY2tTdW4pO1xyXG4gICAgfVxyXG4gICAgdXBkYXRlIChkdCkge1xyXG4gICAgfVxyXG59XHJcbiJdfQ==